feat: roll out illustrative empty states across 8 pages with 2 new guide entries

- TreeLibraryPage: split empty state into no-flows (illustration + CTA) vs no-filter-results
- MyAnalyticsPage/TeamAnalyticsPage: add zero-sessions empty state with illustration
- SessionHistoryPage: split into no-sessions (illustration) vs no-filter-results
- StepLibraryBrowser: illustrative empty state when no steps exist
- ScriptTemplateList: replace plain empty state with ScriptIllustration
- MySharesPage: replace icon-based empty state with ShareIllustration
- IntegrationsPage: add IntegrationIllustration above setup form
- Add script-templates and psa-setup guides to guides data
- Add EmptyState vitest tests (7 tests)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
chihlasm
2026-03-17 01:21:11 -04:00
parent 85d1ed8028
commit dfdc6cae9c
10 changed files with 324 additions and 43 deletions

View File

@@ -13,6 +13,8 @@ import {
Wrench,
Settings,
BarChart3,
Terminal,
Plug,
} from 'lucide-react'
export interface GuideStep {
@@ -492,4 +494,82 @@ export const guides: Guide[] = [
},
],
},
{
slug: 'script-templates',
title: 'Script Templates',
icon: Terminal,
summary: 'Browse, configure, and generate scripts from reusable templates.',
sections: [
{
title: 'Browsing Templates',
steps: [
{ instruction: 'Click **Scripts** in the sidebar to open the Script Library.' },
{ instruction: 'The left pane lists all available templates organized by category.' },
{ instruction: 'Use the search bar to filter templates by name or keyword.' },
{ instruction: 'Click any template to preview its script content in the right pane.' },
],
},
{
title: 'Configuring and Generating Scripts',
steps: [
{ instruction: 'Click **Configure** on a template to enter parameter values.' },
{ instruction: 'Fill in the required fields (e.g., server name, IP address, credentials).' },
{ instruction: 'Click **Generate** to produce a ready-to-run script with your values substituted.' },
{ instruction: 'Copy the generated script to your clipboard or download it directly.', tip: 'Double-check generated scripts in a test environment before running them in production.' },
],
},
{
title: 'Managing Templates',
steps: [
{ instruction: 'Click **Manage Templates** at the top of the Script Library page.' },
{ instruction: 'Create new templates with a name, category, script body, and configurable parameters.' },
{ instruction: 'Edit or delete existing templates from the management page.' },
{ instruction: 'Templates support PowerShell, Bash, Python, and other scripting languages.' },
],
},
],
},
{
slug: 'psa-setup',
title: 'PSA Integration Setup',
icon: Plug,
summary: 'Connect ConnectWise or other PSA tools to ResolutionFlow.',
sections: [
{
title: 'Getting Your API Credentials',
steps: [
{ instruction: 'Log in to your ConnectWise PSA instance as an admin.' },
{ instruction: 'Navigate to **System > Members > API Members** and create a new API member.' },
{ instruction: 'Generate an **API key pair** (public key and private key) for the member.' },
{ instruction: 'Note your **Company ID** (the company identifier used to log in) and **Site URL** (e.g., na.myconnectwise.net).', tip: 'Create a dedicated API member for ResolutionFlow with minimal permissions for security.' },
],
},
{
title: 'Connecting in ResolutionFlow',
steps: [
{ instruction: 'Go to **Account > Integrations** in ResolutionFlow.' },
{ instruction: 'Enter a display name, your Site URL, Company ID, Public Key, and Private Key.' },
{ instruction: 'Click **Connect** to save the connection.' },
{ instruction: 'Click **Test Connection** to verify everything is working correctly.' },
],
},
{
title: 'Member Mapping',
steps: [
{ instruction: 'After connecting, switch to the **Member Mapping** tab.' },
{ instruction: 'Click **Auto-Match by Email** to automatically pair ResolutionFlow users with ConnectWise members by email address.' },
{ instruction: 'Manually adjust any unmatched or incorrectly matched members using the dropdowns.' },
{ instruction: 'Click **Save Mappings** to apply changes. Mapped members are used when posting session notes to tickets.' },
],
},
{
title: 'What the Integration Enables',
steps: [
{ instruction: 'Session documentation can be posted directly to ConnectWise tickets as internal notes.' },
{ instruction: 'Ticket context (client info, issue details) can be pulled into sessions for AI-assisted troubleshooting.' },
{ instruction: 'Posts are attributed to the correct ConnectWise member based on your member mappings.' },
],
},
],
},
]