@sudobility/testomniac_ui 0.0.7 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/cells/BundleCell.d.ts +3 -1
- package/dist/components/cells/BundleCell.d.ts.map +1 -1
- package/dist/components/cells/BundleCell.js +7 -3
- package/dist/components/cells/BundleCell.js.map +1 -1
- package/dist/components/cells/InteractionCell.d.ts +5 -1
- package/dist/components/cells/InteractionCell.d.ts.map +1 -1
- package/dist/components/cells/InteractionCell.js +6 -2
- package/dist/components/cells/InteractionCell.js.map +1 -1
- package/dist/components/cells/ListCell.d.ts +3 -1
- package/dist/components/cells/ListCell.d.ts.map +1 -1
- package/dist/components/cells/ListCell.js +2 -2
- package/dist/components/cells/ListCell.js.map +1 -1
- package/dist/components/cells/PersonaCell.d.ts +3 -1
- package/dist/components/cells/PersonaCell.d.ts.map +1 -1
- package/dist/components/cells/PersonaCell.js +7 -2
- package/dist/components/cells/PersonaCell.js.map +1 -1
- package/dist/components/cells/ScaffoldCell.d.ts +3 -1
- package/dist/components/cells/ScaffoldCell.d.ts.map +1 -1
- package/dist/components/cells/ScaffoldCell.js +10 -4
- package/dist/components/cells/ScaffoldCell.js.map +1 -1
- package/dist/components/cells/ScenarioCell.d.ts +3 -1
- package/dist/components/cells/ScenarioCell.d.ts.map +1 -1
- package/dist/components/cells/ScenarioCell.js +5 -1
- package/dist/components/cells/ScenarioCell.js.map +1 -1
- package/dist/components/cells/SurfaceCell.d.ts +3 -1
- package/dist/components/cells/SurfaceCell.d.ts.map +1 -1
- package/dist/components/cells/SurfaceCell.js +5 -2
- package/dist/components/cells/SurfaceCell.js.map +1 -1
- package/dist/components/dashboard/DashboardSidebar.d.ts.map +1 -1
- package/dist/components/dashboard/DashboardSidebar.js +13 -4
- package/dist/components/dashboard/DashboardSidebar.js.map +1 -1
- package/dist/components/data/DataTable.d.ts.map +1 -1
- package/dist/components/data/DataTable.js +12 -10
- package/dist/components/data/DataTable.js.map +1 -1
- package/dist/components/pages/PagesListView.d.ts.map +1 -1
- package/dist/components/pages/PagesListView.js +6 -5
- package/dist/components/pages/PagesListView.js.map +1 -1
- package/dist/components/pages/PagesMapView.d.ts +3 -1
- package/dist/components/pages/PagesMapView.d.ts.map +1 -1
- package/dist/components/pages/PagesMapView.js +2 -2
- package/dist/components/pages/PagesMapView.js.map +1 -1
- package/dist/components/ui/AddButton.d.ts +19 -0
- package/dist/components/ui/AddButton.d.ts.map +1 -0
- package/dist/components/ui/AddButton.js +12 -0
- package/dist/components/ui/AddButton.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/pages/BundleDetailPage.d.ts.map +1 -1
- package/dist/pages/BundleDetailPage.js +2 -2
- package/dist/pages/BundleDetailPage.js.map +1 -1
- package/dist/pages/BundlesPage.d.ts.map +1 -1
- package/dist/pages/BundlesPage.js +3 -2
- package/dist/pages/BundlesPage.js.map +1 -1
- package/dist/pages/CreateProductPage.d.ts +11 -0
- package/dist/pages/CreateProductPage.d.ts.map +1 -0
- package/dist/pages/CreateProductPage.js +146 -0
- package/dist/pages/CreateProductPage.js.map +1 -0
- package/dist/pages/DashboardOverview.d.ts.map +1 -1
- package/dist/pages/DashboardOverview.js +2 -2
- package/dist/pages/DashboardOverview.js.map +1 -1
- package/dist/pages/FindingsListPage.js +50 -44
- package/dist/pages/FindingsListPage.js.map +1 -1
- package/dist/pages/PageDetailPage.d.ts.map +1 -1
- package/dist/pages/PageDetailPage.js +11 -8
- package/dist/pages/PageDetailPage.js.map +1 -1
- package/dist/pages/PageGraphPage.d.ts.map +1 -1
- package/dist/pages/PageGraphPage.js +2 -1
- package/dist/pages/PageGraphPage.js.map +1 -1
- package/dist/pages/PageStateDetailPage.d.ts.map +1 -1
- package/dist/pages/PageStateDetailPage.js +10 -10
- package/dist/pages/PageStateDetailPage.js.map +1 -1
- package/dist/pages/PagesPage.d.ts.map +1 -1
- package/dist/pages/PagesPage.js +6 -5
- package/dist/pages/PagesPage.js.map +1 -1
- package/dist/pages/PatternsPage.d.ts.map +1 -1
- package/dist/pages/PatternsPage.js +8 -8
- package/dist/pages/PatternsPage.js.map +1 -1
- package/dist/pages/PersonasPage.d.ts.map +1 -1
- package/dist/pages/PersonasPage.js +3 -2
- package/dist/pages/PersonasPage.js.map +1 -1
- package/dist/pages/RunSurfaceRunDetailPage.d.ts.map +1 -1
- package/dist/pages/RunSurfaceRunDetailPage.js +4 -4
- package/dist/pages/RunSurfaceRunDetailPage.js.map +1 -1
- package/dist/pages/RunSurfaceRunsPage.d.ts.map +1 -1
- package/dist/pages/RunSurfaceRunsPage.js +2 -2
- package/dist/pages/RunSurfaceRunsPage.js.map +1 -1
- package/dist/pages/RunTestInteractionRunDetailPage.d.ts.map +1 -1
- package/dist/pages/RunTestInteractionRunDetailPage.js +2 -2
- package/dist/pages/RunTestInteractionRunDetailPage.js.map +1 -1
- package/dist/pages/RunTestInteractionRunsPage.d.ts.map +1 -1
- package/dist/pages/RunTestInteractionRunsPage.js +2 -2
- package/dist/pages/RunTestInteractionRunsPage.js.map +1 -1
- package/dist/pages/RunnerGraphPage.d.ts.map +1 -1
- package/dist/pages/RunnerGraphPage.js +2 -1
- package/dist/pages/RunnerGraphPage.js.map +1 -1
- package/dist/pages/RunnerSettingsPage.d.ts.map +1 -1
- package/dist/pages/RunnerSettingsPage.js +2 -1
- package/dist/pages/RunnerSettingsPage.js.map +1 -1
- package/dist/pages/ScaffoldDetailPage.d.ts.map +1 -1
- package/dist/pages/ScaffoldDetailPage.js +3 -3
- package/dist/pages/ScaffoldDetailPage.js.map +1 -1
- package/dist/pages/ScaffoldsPage.d.ts.map +1 -1
- package/dist/pages/ScaffoldsPage.js +4 -3
- package/dist/pages/ScaffoldsPage.js.map +1 -1
- package/dist/pages/ScanProgressPage.d.ts.map +1 -1
- package/dist/pages/ScanProgressPage.js +2 -2
- package/dist/pages/ScanProgressPage.js.map +1 -1
- package/dist/pages/SchedulesPage.d.ts.map +1 -1
- package/dist/pages/SchedulesPage.js +34 -33
- package/dist/pages/SchedulesPage.js.map +1 -1
- package/dist/pages/StartScanPage.d.ts.map +1 -1
- package/dist/pages/StartScanPage.js +3 -3
- package/dist/pages/StartScanPage.js.map +1 -1
- package/dist/pages/TestInteractionDetailPage.d.ts.map +1 -1
- package/dist/pages/TestInteractionDetailPage.js +5 -5
- package/dist/pages/TestInteractionDetailPage.js.map +1 -1
- package/dist/pages/TestInteractionsPage.d.ts.map +1 -1
- package/dist/pages/TestInteractionsPage.js +10 -40
- package/dist/pages/TestInteractionsPage.js.map +1 -1
- package/dist/pages/TestRunDetailPage.d.ts.map +1 -1
- package/dist/pages/TestRunDetailPage.js +4 -3
- package/dist/pages/TestRunDetailPage.js.map +1 -1
- package/dist/pages/TestRunsListPage.d.ts.map +1 -1
- package/dist/pages/TestRunsListPage.js +24 -1
- package/dist/pages/TestRunsListPage.js.map +1 -1
- package/dist/pages/TestScenarioDetailPage.d.ts.map +1 -1
- package/dist/pages/TestScenarioDetailPage.js +5 -5
- package/dist/pages/TestScenarioDetailPage.js.map +1 -1
- package/dist/pages/TestScenariosPage.d.ts.map +1 -1
- package/dist/pages/TestScenariosPage.js +8 -7
- package/dist/pages/TestScenariosPage.js.map +1 -1
- package/dist/pages/TestSurfaceDetailPage.d.ts.map +1 -1
- package/dist/pages/TestSurfaceDetailPage.js +3 -5
- package/dist/pages/TestSurfaceDetailPage.js.map +1 -1
- package/dist/pages/TestSurfacesListPage.d.ts.map +1 -1
- package/dist/pages/TestSurfacesListPage.js +11 -10
- package/dist/pages/TestSurfacesListPage.js.map +1 -1
- package/package.json +7 -7
|
@@ -5,14 +5,14 @@ import { useTestomniacApi } from '../context/config';
|
|
|
5
5
|
import { useRouteParams, useEnvRoutes } from '../context/routing';
|
|
6
6
|
import BackLink from '../components/navigation/BackLink';
|
|
7
7
|
import { useLocalizedNavigate } from '../hooks/useLocalizedNavigate';
|
|
8
|
-
import { Card } from '@sudobility/components';
|
|
8
|
+
import { Card, ContentLayout } from '@sudobility/components';
|
|
9
9
|
import { StatusBadge } from '../components/scanner/StatusBadge';
|
|
10
10
|
import { AddToBundleButton } from '../components/bundles/AddToBundleButton';
|
|
11
11
|
import { ScriptPanel } from '../components/scripts/ScriptPanel';
|
|
12
12
|
import { ErrorState, LoadingState, EmptyState } from '../components/states';
|
|
13
13
|
function ActionRow({ action }) {
|
|
14
14
|
const [expanded, setExpanded] = useState(false);
|
|
15
|
-
return (_jsxs(Card, { variant: "bordered", padding: "none", className: "overflow-hidden", children: [_jsxs("button", { onClick: () => setExpanded(!expanded), className: "w-full text-left px-4 py-
|
|
15
|
+
return (_jsxs(Card, { variant: "bordered", padding: "none", className: "overflow-hidden", children: [_jsxs("button", { onClick: () => setExpanded(!expanded), className: "w-full text-left px-4 py-2 flex items-center gap-3 hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors", children: [_jsxs("span", { className: "text-xs font-mono text-gray-400 dark:text-gray-500 w-8 flex-shrink-0 text-right", children: ["#", action.stepOrder] }), _jsx(StatusBadge, { status: action.actionType }), _jsx("span", { className: "flex-1 min-w-0 text-sm text-gray-900 dark:text-gray-100 truncate", children: action.description }), _jsx("svg", { className: `w-4 h-4 flex-shrink-0 text-gray-400 transition-transform ${expanded ? 'rotate-180' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19.5 8.25l-7.5 7.5-7.5-7.5" }) })] }), expanded && action.playwrightCode && (_jsxs("div", { className: "px-4 py-3 border-t border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50", children: [_jsx("div", { className: "text-xs font-semibold text-gray-500 dark:text-gray-400 mb-2 uppercase tracking-wider", children: "Playwright Code" }), _jsx("pre", { className: "text-xs font-mono text-gray-800 dark:text-gray-200 whitespace-pre-wrap break-words bg-white dark:bg-gray-900 rounded-md p-3 border border-gray-200 dark:border-gray-700", children: action.playwrightCode })] }))] }));
|
|
16
16
|
}
|
|
17
17
|
function ElementLinkRow({ element, onClick, relation, }) {
|
|
18
18
|
return (_jsx("button", { onClick: onClick, className: "w-full text-left rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800 px-4 py-3 hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors", children: _jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "text-xs uppercase tracking-wider text-gray-500 dark:text-gray-400", children: relation }), _jsx("div", { className: "mt-1 text-sm font-medium text-gray-900 dark:text-gray-100 truncate", children: element.title }), _jsxs("div", { className: "mt-1 text-xs text-gray-500 dark:text-gray-400", children: ["Test Interaction #", element.id] })] }), _jsxs("div", { className: "flex items-center gap-2 flex-shrink-0", children: [_jsx(StatusBadge, { status: element.testType }), _jsx(StatusBadge, { status: element.sizeClass })] })] }) }));
|
|
@@ -46,8 +46,8 @@ export function TestInteractionDetailPage() {
|
|
|
46
46
|
if (actionError) {
|
|
47
47
|
return _jsx(ErrorState, { message: actionError });
|
|
48
48
|
}
|
|
49
|
-
return (_jsxs("div", { className: "
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
return (_jsx(ContentLayout, { header: _jsxs("div", { className: "border-b border-gray-200 bg-white px-4 pb-4 pt-4 dark:border-gray-800 dark:bg-gray-900 sm:px-6 sm:pt-6", children: [_jsx(BackLink, { label: "Test Interactions", onClick: () => navigate(r.testInteractions()) }), _jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between", children: [_jsxs("h1", { className: "text-2xl font-bold text-gray-900 dark:text-gray-100", children: ["Test Interaction #", elementId] }), _jsx(AddToBundleButton, { itemType: "interaction", itemId: Number(elementId) })] })] }), children: _jsxs("div", { className: "px-4 py-4 sm:px-6", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2 mb-6", children: [_jsxs("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: ["ID: ", elementId] }), currentElement && _jsx(StatusBadge, { status: currentElement.testType }), currentElement && _jsx(StatusBadge, { status: currentElement.sizeClass }), hasHoverAction && _jsx(StatusBadge, { status: "hover" }), currentElement?.surfaceTags.map(tag => (_jsx(StatusBadge, { status: tag }, tag)))] }), currentElement && (_jsxs("div", { className: "grid gap-4 md:grid-cols-2 mb-8", children: [_jsxs(Card, { variant: "bordered", padding: "md", children: [_jsx("div", { className: "text-xs uppercase tracking-wider text-gray-500 dark:text-gray-400", children: "Starting State" }), _jsxs("div", { className: "mt-2 text-sm text-gray-900 dark:text-gray-100", children: ["Path: ", currentElement.startingPath || 'None'] }), _jsxs("div", { className: "mt-1 text-sm text-gray-600 dark:text-gray-300", children: ["Page state #", currentElement.startingPageStateId ?? 'none'] })] }), _jsxs(Card, { variant: "bordered", padding: "md", children: [_jsx("div", { className: "text-xs uppercase tracking-wider text-gray-500 dark:text-gray-400", children: "Interaction Shape" }), _jsx("div", { className: "mt-2 text-sm text-gray-900 dark:text-gray-100", children: hasHoverAction
|
|
50
|
+
? 'This element includes a hover interaction.'
|
|
51
|
+
: 'No hover interaction is defined on this element.' }), _jsxs("div", { className: "mt-1 text-sm text-gray-600 dark:text-gray-300", children: [actionList.length, " action", actionList.length === 1 ? '' : 's', " in sequence"] })] })] })), _jsxs("div", { className: "grid gap-4 lg:grid-cols-2 mb-8", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-sm font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider mb-3", children: "Depends On" }), dependencyElement ? (_jsx(ElementLinkRow, { element: dependencyElement, relation: "Parent dependency", onClick: () => navigate(r.testInteraction(dependencyElement.id)) })) : (_jsx(EmptyState, { description: "This test interaction has no dependency." }))] }), _jsxs("div", { children: [_jsx("h2", { className: "text-sm font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider mb-3", children: "Depended On By" }), dependentElements.length === 0 ? (_jsx(EmptyState, { description: "No other test interactions currently depend on this one." })) : (_jsx("div", { className: "space-y-2", children: dependentElements.map(element => (_jsx(ElementLinkRow, { element: element, relation: "Child dependency", onClick: () => navigate(r.testInteraction(element.id)) }, element.id))) }))] })] }), _jsx("h2", { className: "text-sm font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider mb-3", children: "Test Actions" }), !isPageLoading && (_jsx("div", { className: "mb-6", children: _jsx(ScriptPanel, { kind: "interaction", id: numericElementId, filename: `interaction-${numericElementId}.spec.ts` }) })), isPageLoading && _jsx(LoadingState, { message: "Loading test interaction details..." }), !isPageLoading && actionList.length === 0 && (_jsx(EmptyState, { description: "No actions defined for this test interaction." })), !isPageLoading && actionList.length > 0 && (_jsx("div", { className: "space-y-2", children: actionList.map(action => (_jsx(ActionRow, { action: action }, action.id))) }))] }) }));
|
|
52
52
|
}
|
|
53
53
|
//# sourceMappingURL=TestInteractionDetailPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestInteractionDetailPage.js","sourceRoot":"","sources":["../../src/pages/TestInteractionDetailPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,QAAQ,MAAM,mCAAmC,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"TestInteractionDetailPage.js","sourceRoot":"","sources":["../../src/pages/TestInteractionDetailPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestInteractionsPage.d.ts","sourceRoot":"","sources":["../../src/pages/TestInteractionsPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TestInteractionsPage.d.ts","sourceRoot":"","sources":["../../src/pages/TestInteractionsPage.tsx"],"names":[],"mappings":"AAqCA,wBAAgB,oBAAoB,gCA2JnC"}
|
|
@@ -1,46 +1,13 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from 'react';
|
|
3
|
-
import { createColumnHelper } from '@tanstack/react-table';
|
|
4
3
|
import { useEnvironmentTestInteractionsPage } from '@sudobility/testomniac_client';
|
|
5
|
-
import {
|
|
4
|
+
import { ContentLayout, CardGrid } from '@sudobility/components';
|
|
6
5
|
import { SEOHead, useTestomniacApi } from '../context/config';
|
|
7
6
|
import { useRouteParams, useEnvRoutes } from '../context/routing';
|
|
8
7
|
import { SelectField } from '../components/forms/SelectField';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { ErrorState } from '../components/states';
|
|
8
|
+
import { InteractionCell } from '../components/cells';
|
|
9
|
+
import { ErrorState, LoadingState, EmptyState } from '../components/states';
|
|
12
10
|
import { useLocalizedNavigate } from '../hooks/useLocalizedNavigate';
|
|
13
|
-
const columnHelper = createColumnHelper();
|
|
14
|
-
const columns = [
|
|
15
|
-
columnHelper.accessor('title', {
|
|
16
|
-
header: 'Name',
|
|
17
|
-
cell: info => (_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "font-medium text-gray-900 dark:text-gray-100", children: info.getValue() }), _jsx("div", { className: "text-xs text-gray-500 dark:text-gray-400 truncate", children: info.row.original.startingPath || '/' })] })),
|
|
18
|
-
}),
|
|
19
|
-
columnHelper.accessor('testType', {
|
|
20
|
-
header: 'Type',
|
|
21
|
-
cell: info => _jsx(StatusBadge, { status: info.getValue() }),
|
|
22
|
-
}),
|
|
23
|
-
columnHelper.accessor('priority', {
|
|
24
|
-
header: 'Priority',
|
|
25
|
-
cell: info => {
|
|
26
|
-
const p = info.getValue();
|
|
27
|
-
const label = PRIORITY_NAMES[p] ?? `P${p}`;
|
|
28
|
-
const color = p <= 1
|
|
29
|
-
? 'text-red-600 font-medium'
|
|
30
|
-
: p === 2
|
|
31
|
-
? 'text-orange-600 font-medium'
|
|
32
|
-
: 'text-gray-600 dark:text-gray-400';
|
|
33
|
-
return _jsx("span", { className: color, children: label });
|
|
34
|
-
},
|
|
35
|
-
}),
|
|
36
|
-
columnHelper.accessor('surfaceTags', {
|
|
37
|
-
header: 'Tags',
|
|
38
|
-
cell: info => (_jsx("div", { className: "flex gap-1 flex-wrap", children: (info.getValue() ?? []).map(tag => (_jsx("span", { className: "px-1.5 py-0.5 text-xs rounded bg-gray-100 dark:bg-gray-800 text-gray-600 dark:text-gray-400", children: tag }, tag))) })),
|
|
39
|
-
}),
|
|
40
|
-
columnHelper.accessor('sizeClass', {
|
|
41
|
-
header: 'Device',
|
|
42
|
-
}),
|
|
43
|
-
];
|
|
44
11
|
const PAGE_SIZE = 50;
|
|
45
12
|
// Known test interaction types (server-side filter; the paged endpoint no longer
|
|
46
13
|
// ships the full set the page could derive these from).
|
|
@@ -96,11 +63,14 @@ export function TestInteractionsPage() {
|
|
|
96
63
|
const total = interactionsQuery.data?.data?.total ?? 0;
|
|
97
64
|
const isLoading = interactionsQuery.isLoading;
|
|
98
65
|
const error = interactionsQuery.error?.message ?? null;
|
|
66
|
+
const pageCount = Math.max(1, Math.ceil(total / PAGE_SIZE));
|
|
67
|
+
const startRow = total === 0 ? 0 : pageIndex * PAGE_SIZE + 1;
|
|
68
|
+
const endRow = Math.min(pageIndex * PAGE_SIZE + testInteractions.length, total);
|
|
99
69
|
if (error) {
|
|
100
70
|
return _jsx(ErrorState, { message: error });
|
|
101
71
|
}
|
|
102
|
-
return (_jsxs("div", { className: "
|
|
103
|
-
|
|
104
|
-
|
|
72
|
+
return (_jsx(ContentLayout, { header: _jsxs("div", { className: "border-b border-gray-200 bg-white px-4 pb-4 pt-4 dark:border-gray-800 dark:bg-gray-900 sm:px-6 sm:pt-6", children: [_jsx(SEOHead, { title: "Test Interactions", description: "", noIndex: true }), _jsx("h1", { className: "text-2xl font-bold text-gray-900 dark:text-gray-100", children: "Test Interactions" }), _jsxs("div", { className: "flex flex-wrap gap-3 mt-4", children: [_jsx(SelectField, { value: typeFilter, onChange: onType, options: TYPE_OPTIONS }), _jsx(SelectField, { value: priorityFilter, onChange: onPriority, options: PRIORITY_OPTIONS }), _jsx("div", { className: "flex rounded-lg border border-gray-300 dark:border-gray-600 overflow-hidden", children: DEVICE_OPTIONS.map(option => (_jsx("button", { type: "button", onClick: () => onDevice(option), className: `px-3 py-1.5 text-sm ${deviceFilter === option
|
|
73
|
+
? 'bg-blue-600 text-white'
|
|
74
|
+
: 'bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 hover:bg-gray-50 dark:hover:bg-gray-700'} ${option !== 'All' ? 'border-l border-gray-300 dark:border-gray-600' : ''}`, children: option }, option))) })] })] }), children: _jsxs("div", { className: "px-4 py-4 sm:px-6", children: [isLoading && _jsx(LoadingState, { message: "Loading test interactions..." }), !isLoading && testInteractions.length === 0 && (_jsx(EmptyState, { title: "No test interactions", description: "Try adjusting the filters to see more results." })), !isLoading && testInteractions.length > 0 && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "mb-3 text-xs text-gray-500 dark:text-gray-400", children: ["Showing ", startRow, "\u2013", endRow, " of ", total] }), _jsx(CardGrid, { children: testInteractions.map(interaction => (_jsx(InteractionCell, { interaction: interaction, variant: "tile", onClick: () => navigate(r.testInteraction(interaction.id)) }, interaction.id))) }), pageCount > 1 && (_jsxs("div", { className: "mt-4 flex items-center justify-end gap-1 border-t border-gray-200 pt-3 dark:border-gray-700", children: [_jsx("button", { onClick: () => setPageIndex(0), disabled: pageIndex === 0, className: "px-2 py-1 text-xs rounded border border-gray-300 dark:border-gray-600 disabled:opacity-30 disabled:cursor-not-allowed hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors", "aria-label": "First page", children: "\u00AB" }), _jsx("button", { onClick: () => setPageIndex(p => Math.max(0, p - 1)), disabled: pageIndex === 0, className: "px-2 py-1 text-xs rounded border border-gray-300 dark:border-gray-600 disabled:opacity-30 disabled:cursor-not-allowed hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors", "aria-label": "Previous page", children: "\u2039" }), _jsxs("span", { className: "px-2 text-xs text-gray-600 dark:text-gray-400", children: ["Page ", pageIndex + 1, " of ", pageCount] }), _jsx("button", { onClick: () => setPageIndex(p => Math.min(pageCount - 1, p + 1)), disabled: pageIndex >= pageCount - 1, className: "px-2 py-1 text-xs rounded border border-gray-300 dark:border-gray-600 disabled:opacity-30 disabled:cursor-not-allowed hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors", "aria-label": "Next page", children: "\u203A" }), _jsx("button", { onClick: () => setPageIndex(pageCount - 1), disabled: pageIndex >= pageCount - 1, className: "px-2 py-1 text-xs rounded border border-gray-300 dark:border-gray-600 disabled:opacity-30 disabled:cursor-not-allowed hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors", "aria-label": "Last page", children: "\u00BB" })] }))] }))] }) }));
|
|
105
75
|
}
|
|
106
76
|
//# sourceMappingURL=TestInteractionsPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestInteractionsPage.js","sourceRoot":"","sources":["../../src/pages/TestInteractionsPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"TestInteractionsPage.js","sourceRoot":"","sources":["../../src/pages/TestInteractionsPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestRunDetailPage.d.ts","sourceRoot":"","sources":["../../src/pages/TestRunDetailPage.tsx"],"names":[],"mappings":"AA2BA,wBAAgB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"TestRunDetailPage.d.ts","sourceRoot":"","sources":["../../src/pages/TestRunDetailPage.tsx"],"names":[],"mappings":"AA2BA,wBAAgB,iBAAiB,gCA+UhC"}
|
|
@@ -5,7 +5,7 @@ import { useTestomniacApi } from '../context/config';
|
|
|
5
5
|
import { useRouteParams, useEnvRoutes } from '../context/routing';
|
|
6
6
|
import BackLink from '../components/navigation/BackLink';
|
|
7
7
|
import { useLocalizedNavigate } from '../hooks/useLocalizedNavigate';
|
|
8
|
-
import { Badge, Card } from '@sudobility/components';
|
|
8
|
+
import { Badge, Card, ContentLayout, CardGrid, GridTile } from '@sudobility/components';
|
|
9
9
|
import { StatusBadge } from '../components/scanner/StatusBadge';
|
|
10
10
|
import { EmptyState } from '../components/states';
|
|
11
11
|
function FindingTypeBadge({ type }) {
|
|
@@ -57,7 +57,8 @@ export function TestRunDetailPage() {
|
|
|
57
57
|
})) ?? [];
|
|
58
58
|
const consoleLog = formatMultilineLog(testInteractionRun?.consoleLog);
|
|
59
59
|
const networkLog = formatMultilineLog(testInteractionRun?.networkLog);
|
|
60
|
-
return (_jsxs("div", { className: "
|
|
61
|
-
|
|
60
|
+
return (_jsx(ContentLayout, { header: _jsxs("div", { className: "border-b border-gray-200 bg-white px-4 pb-4 pt-4 dark:border-gray-800 dark:bg-gray-900 sm:px-6 sm:pt-6", children: [_jsx(BackLink, { label: "Back to Runs", onClick: () => navigate(r.runs()) }), _jsxs("nav", { className: "flex items-center gap-1 text-sm text-gray-500 dark:text-gray-400 mb-4", children: [_jsx("button", { onClick: () => navigate(r.runs()), className: "hover:text-blue-600 dark:hover:text-blue-400 transition-colors", children: "Runs" }), _jsx("span", { children: "/" }), _jsxs("span", { className: "text-gray-900 dark:text-gray-100 font-medium", children: ["Run #", runId] })] }), _jsxs("h1", { className: "text-2xl font-bold text-gray-900 dark:text-gray-100 mb-2", children: ["Test Run #", runId] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(StatusBadge, { status: run.status }), _jsx(StatusBadge, { status: run.sizeClass }), _jsxs("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: ["ID: ", runId] }), run.createdAt && (_jsxs("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: ["Created ", formatDate(run.createdAt)] })), run.startedAt && (_jsxs("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: ["Started ", formatDate(run.startedAt)] })), run.completedAt && (_jsxs("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: ["Completed ", formatDate(run.completedAt)] }))] })] }), children: _jsxs("div", { className: "px-4 py-4 sm:px-6", children: [isRootLikeRun && summary && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "mb-8 grid grid-cols-2 gap-4 md:grid-cols-4", children: [_jsxs(Card, { variant: "bordered", padding: "md", children: [_jsx("div", { className: "text-2xl font-bold text-gray-900 dark:text-gray-100", children: summary.pagesFound ?? 0 }), _jsx("div", { className: "text-xs text-gray-500", children: "Pages Found" })] }), _jsxs(Card, { variant: "bordered", padding: "md", children: [_jsx("div", { className: "text-2xl font-bold text-gray-900 dark:text-gray-100", children: summary.pageStatesFound ?? 0 }), _jsx("div", { className: "text-xs text-gray-500", children: "Page States" })] }), _jsxs(Card, { variant: "bordered", padding: "md", children: [_jsx("div", { className: "text-2xl font-bold text-gray-900 dark:text-gray-100", children: summary.testRunsCompleted ?? 0 }), _jsx("div", { className: "text-xs text-gray-500", children: "Completed Runs" })] }), _jsxs(Card, { variant: "bordered", padding: "md", children: [_jsx("div", { className: "text-2xl font-bold text-red-600 dark:text-red-400", children: summary.totalFindings }), _jsx("div", { className: "text-xs text-gray-500", children: "Findings" })] })] }), summary.aiSummary && (_jsxs(Card, { variant: "bordered", padding: "md", className: "mb-8", children: [_jsx("h2", { className: "mb-2 text-sm font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400", children: "Summary" }), _jsx("p", { className: "text-sm leading-6 text-gray-700 dark:text-gray-300", children: summary.aiSummary })] })), _jsxs("div", { className: "mb-8 grid grid-cols-1 gap-3 sm:grid-cols-3", children: [_jsxs("button", { onClick: () => navigate(r.runSurfaceRuns(runId)), className: "rounded-lg border border-gray-200 bg-white p-4 text-left transition-colors hover:border-blue-300 dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-600", children: [_jsx("div", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: "Surface Runs" }), _jsx("div", { className: "mt-1 text-xs text-gray-500 dark:text-gray-400", children: "Navigate the run hierarchy by surface run, then interaction runs and run details." })] }), _jsxs("button", { onClick: () => navigate(r.runPages(runId)), className: "rounded-lg border border-gray-200 bg-white p-4 text-left transition-colors hover:border-blue-300 dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-600", children: [_jsx("div", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: "Pages" }), _jsx("div", { className: "mt-1 text-xs text-gray-500 dark:text-gray-400", children: "Browse discovered pages and drill into captured page states." })] }), _jsxs("button", { onClick: () => navigate(r.runIssues(runId)), className: "rounded-lg border border-gray-200 bg-white p-4 text-left transition-colors hover:border-blue-300 dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-600", children: [_jsx("div", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: "Findings" }), _jsx("div", { className: "mt-1 text-xs text-gray-500 dark:text-gray-400", children: "Review grouped warnings and errors for this scan run." })] })] }), surfaceCoverage.length > 0 && (_jsxs("div", { className: "mb-8", children: [_jsx("h2", { className: "mb-4 text-lg font-semibold text-gray-900 dark:text-gray-100", children: "Coverage Tree" }), _jsx(CardGrid, { children: surfaceCoverage.map(surface => (_jsx(GridTile, { topRight: _jsx(StatusBadge, { status: surface.status }), title: surface.title, footer: _jsxs("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: [surface.interactionCount, " interaction", surface.interactionCount === 1 ? '' : 's'] }), onClick: surface.surfaceRunId != null
|
|
61
|
+
? () => navigate(r.runSurfaceRun(runId, surface.surfaceRunId))
|
|
62
|
+
: undefined }, surface.id))) })] })), expertiseEntries.length > 0 && (_jsxs("div", { className: "mb-8", children: [_jsx("h2", { className: "mb-4 text-lg font-semibold text-gray-900 dark:text-gray-100", children: "Findings by Expertise" }), _jsx("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3", children: expertiseEntries.map(([name, counts]) => (_jsxs(Card, { variant: "bordered", padding: "md", children: [_jsx("div", { className: "text-sm font-medium capitalize text-gray-900 dark:text-gray-100", children: name }), _jsxs("div", { className: "mt-3 flex gap-4 text-xs", children: [_jsxs("span", { className: "text-red-600 dark:text-red-400", children: [counts.errors, " error", counts.errors === 1 ? '' : 's'] }), _jsxs("span", { className: "text-amber-600 dark:text-amber-400", children: [counts.warnings, " warning", counts.warnings === 1 ? '' : 's'] }), _jsxs("span", { className: "text-gray-500 dark:text-gray-400", children: [counts.findings, " total"] })] })] }, name))) })] }))] })), _jsx("h2", { className: "text-sm font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider mb-3", children: "Findings" }), run.testInteractionRunId === null && (_jsx(EmptyState, { description: "This test run tracks a surface or discovery workflow and does not map directly to a single test interaction run." })), run.testInteractionRunId !== null && isLoading && (_jsx("div", { className: "text-sm text-gray-500 dark:text-gray-400 py-8 text-center", children: "Loading findings..." })), run.testInteractionRunId !== null && !isLoading && findings.length === 0 && (_jsx(EmptyState, { description: "No findings for this test run." })), run.testInteractionRunId !== null && !isLoading && findings.length > 0 && (_jsx("div", { className: "space-y-3", children: findings.map(finding => (_jsx(Card, { variant: "bordered", padding: "md", children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx(FindingTypeBadge, { type: finding.type }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("div", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: finding.title }), _jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400 mt-1", children: finding.description }), finding.createdAt && (_jsx("p", { className: "text-xs text-gray-400 dark:text-gray-500 mt-2", children: formatDate(finding.createdAt) }))] })] }) }, finding.id))) })), run.testInteractionRunId !== null && !isCaseRunLoading && (consoleLog || networkLog) && (_jsxs("div", { className: "mt-8 space-y-6", children: [_jsx("h2", { className: "text-sm font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Runtime Signals" }), consoleLog && (_jsxs("div", { children: [_jsx("h3", { className: "mb-2 text-sm font-medium text-gray-900 dark:text-gray-100", children: "Console Log" }), _jsx("pre", { className: "max-h-80 overflow-auto rounded-lg border border-gray-200 bg-gray-50 p-4 text-xs leading-5 text-gray-700 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-300", children: consoleLog })] })), networkLog && (_jsxs("div", { children: [_jsx("h3", { className: "mb-2 text-sm font-medium text-gray-900 dark:text-gray-100", children: "Network Log" }), _jsx("pre", { className: "max-h-80 overflow-auto rounded-lg border border-gray-200 bg-gray-50 p-4 text-xs leading-5 text-gray-700 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-300", children: networkLog })] }))] }))] }) }));
|
|
62
63
|
}
|
|
63
64
|
//# sourceMappingURL=TestRunDetailPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestRunDetailPage.js","sourceRoot":"","sources":["../../src/pages/TestRunDetailPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,MAAM,EACN,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,QAAQ,MAAM,mCAAmC,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"TestRunDetailPage.js","sourceRoot":"","sources":["../../src/pages/TestRunDetailPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestRunsListPage.d.ts","sourceRoot":"","sources":["../../src/pages/TestRunsListPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TestRunsListPage.d.ts","sourceRoot":"","sources":["../../src/pages/TestRunsListPage.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,gBAAgB,gCA2D/B"}
|
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { formatDuration, formatDate } from '@sudobility/testomniac_lib';
|
|
3
|
+
import { ContentLayout, CardGrid, GridTile } from '@sudobility/components';
|
|
3
4
|
import { SEOHead } from '../context/config';
|
|
4
5
|
import { useLocalizedNavigate } from '../hooks/useLocalizedNavigate';
|
|
5
6
|
import { useEnvRoutes } from '../context/routing';
|
|
6
7
|
import { useDashboardEnvironmentContext } from '../hooks/useDashboardEnvironmentContext';
|
|
7
8
|
import { StatusBadge } from '../components/scanner/StatusBadge';
|
|
8
9
|
import { ErrorState, LoadingState, EmptyState } from '../components/states';
|
|
10
|
+
/** Best-effort host extraction for a run's scan URL (falls back to null). */
|
|
11
|
+
function runHost(scanUrl) {
|
|
12
|
+
if (!scanUrl)
|
|
13
|
+
return null;
|
|
14
|
+
try {
|
|
15
|
+
return new URL(scanUrl).host;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return scanUrl;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
9
21
|
export function TestRunsListPage() {
|
|
10
22
|
const { navigate } = useLocalizedNavigate();
|
|
11
23
|
const { environmentRuns: testRuns, isLoading, error } = useDashboardEnvironmentContext();
|
|
@@ -13,6 +25,17 @@ export function TestRunsListPage() {
|
|
|
13
25
|
if (error) {
|
|
14
26
|
return _jsx(ErrorState, { message: error });
|
|
15
27
|
}
|
|
16
|
-
return (_jsxs("div", { className: "
|
|
28
|
+
return (_jsx(ContentLayout, { header: _jsxs("div", { className: "border-b border-gray-200 bg-white px-4 pb-4 pt-4 dark:border-gray-800 dark:bg-gray-900 sm:px-6 sm:pt-6", children: [_jsx(SEOHead, { title: "Test Runs", description: "", noIndex: true }), _jsx("h1", { className: "text-2xl font-bold text-gray-900 dark:text-gray-100", children: "Test Runs" })] }), children: _jsxs("div", { className: "px-4 py-4 sm:px-6", children: [isLoading && _jsx(LoadingState, { message: "Loading test runs..." }), !isLoading && testRuns.length === 0 && (_jsx(EmptyState, { title: "No test runs yet", description: "Test runs will appear here after tests are executed." })), !isLoading && testRuns.length > 0 && (_jsx(CardGrid, { density: "wide", children: testRuns.map((run) => {
|
|
29
|
+
const host = runHost(run.scanUrl);
|
|
30
|
+
const metrics = [
|
|
31
|
+
run.pagesFound != null ? `${run.pagesFound} pages` : null,
|
|
32
|
+
formatDuration(run.totalDurationMs),
|
|
33
|
+
run.sizeClass,
|
|
34
|
+
formatDate(run.createdAt),
|
|
35
|
+
]
|
|
36
|
+
.filter(Boolean)
|
|
37
|
+
.join(' · ');
|
|
38
|
+
return (_jsx(GridTile, { topRight: _jsx(StatusBadge, { status: run.status }), title: host ?? `Run #${run.id}`, subtitle: run.scanUrl ?? undefined, footer: _jsx("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: metrics }), onClick: () => navigate(r.run(run.id)) }, run.id));
|
|
39
|
+
}) }))] }) }));
|
|
17
40
|
}
|
|
18
41
|
//# sourceMappingURL=TestRunsListPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestRunsListPage.js","sourceRoot":"","sources":["../../src/pages/TestRunsListPage.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE5E,MAAM,UAAU,gBAAgB;IAC9B,MAAM,EAAE,QAAQ,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAC5C,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,8BAA8B,EAAE,CAAC;IAEzF,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;IAEzB,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAC,UAAU,IAAC,OAAO,EAAE,KAAK,GAAI,CAAC;IACxC,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,
|
|
1
|
+
{"version":3,"file":"TestRunsListPage.js","sourceRoot":"","sources":["../../src/pages/TestRunsListPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestScenarioDetailPage.d.ts","sourceRoot":"","sources":["../../src/pages/TestScenarioDetailPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TestScenarioDetailPage.d.ts","sourceRoot":"","sources":["../../src/pages/TestScenarioDetailPage.tsx"],"names":[],"mappings":"AAmIA,wBAAgB,sBAAsB,gCA6MrC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import { useRunnerTestScenarios, useEnvironmentTestInteractions, useTestScenarioSequences, useTestScenarioSequenceTestInteractions, useProductPersonas, useGenerateSequence, } from '@sudobility/testomniac_client';
|
|
4
|
-
import { Alert, ActionButton, Card } from '@sudobility/components';
|
|
4
|
+
import { Alert, ActionButton, Card, ContentLayout } from '@sudobility/components';
|
|
5
5
|
import { SEOHead, useTestomniacApi } from '../context/config';
|
|
6
6
|
import { useRouteParams, useEnvRoutes } from '../context/routing';
|
|
7
7
|
import { InteractionCell, ListCell } from '../components/cells';
|
|
@@ -18,12 +18,12 @@ function SequenceCard({ sequence, isExpanded, onToggle, networkClient, token, in
|
|
|
18
18
|
const isLoading = interactionsQuery.isLoading;
|
|
19
19
|
const sorted = [...testInteractionLinks].sort((a, b) => (a.stepOrder ?? 0) - (b.stepOrder ?? 0));
|
|
20
20
|
const interactionById = new Map(interactions.map(i => [i.id, i]));
|
|
21
|
-
return (_jsxs(Card, { variant: "bordered", padding: "none", className: "overflow-hidden", children: [_jsxs("button", { onClick: onToggle, className: "flex items-center gap-3 w-full px-4 py-
|
|
22
|
-
` — Created: ${new Date(sequence.createdAt).toLocaleDateString()}`] })] })] }), isExpanded && (_jsxs("div", { className: "border-t border-gray-100 dark:border-gray-700 px-4 py-3", children: [isLoading && _jsx("div", { className: "text-xs text-gray-400 py-2", children: "Loading interactions..." }), !isLoading && sorted.length === 0 && (_jsx("div", { className: "text-xs text-gray-400 py-2", children: "No interactions in this sequence." })), !isLoading && sorted.length > 0 && (_jsx("div", { className: "space-y-
|
|
21
|
+
return (_jsxs(Card, { variant: "bordered", padding: "none", className: "overflow-hidden", children: [_jsxs("button", { onClick: onToggle, className: "flex items-center gap-3 w-full px-4 py-2 text-left hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors", children: [_jsx("span", { className: "text-xs text-gray-400", children: isExpanded ? '▼' : '▶' }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: ["Sequence #", sequence.id] }), _jsxs("div", { className: "text-xs text-gray-500 dark:text-gray-400 mt-0.5", children: ["Environment ID: ", sequence.testEnvironmentId, sequence.createdAt &&
|
|
22
|
+
` — Created: ${new Date(sequence.createdAt).toLocaleDateString()}`] })] })] }), isExpanded && (_jsxs("div", { className: "border-t border-gray-100 dark:border-gray-700 px-4 py-3", children: [isLoading && _jsx("div", { className: "text-xs text-gray-400 py-2", children: "Loading interactions..." }), !isLoading && sorted.length === 0 && (_jsx("div", { className: "text-xs text-gray-400 py-2", children: "No interactions in this sequence." })), !isLoading && sorted.length > 0 && (_jsx("div", { className: "space-y-1", children: sorted.map(link => {
|
|
23
23
|
const interaction = interactionById.get(link.testInteractionId);
|
|
24
24
|
const onOpen = () => navigate(interactionPath(link.testInteractionId));
|
|
25
25
|
const stepLabel = (_jsxs("span", { className: "w-6 text-right font-mono text-xs text-gray-400", children: [link.stepOrder, "."] }));
|
|
26
|
-
return interaction ? (_jsx(InteractionCell, { interaction: interaction, onClick: onOpen, leading: stepLabel }, link.id)) : (_jsx(ListCell, { leading: stepLabel, title: `Interaction #${link.testInteractionId}`, onClick: onOpen }, link.id));
|
|
26
|
+
return interaction ? (_jsx(InteractionCell, { interaction: interaction, onClick: onOpen, leading: stepLabel, compact: true }, link.id)) : (_jsx(ListCell, { leading: stepLabel, title: `Interaction #${link.testInteractionId}`, onClick: onOpen, compact: true }, link.id));
|
|
27
27
|
}) })), !isLoading && sorted.length > 0 && (_jsx("div", { className: "mt-4 border-t border-gray-100 pt-3 dark:border-gray-700", children: _jsx(ScriptPanel, { kind: "sequence", id: sequence.id, filename: `sequence-${sequence.id}.spec.ts`, enabled: isExpanded }) }))] }))] }));
|
|
28
28
|
}
|
|
29
29
|
export function TestScenarioDetailPage() {
|
|
@@ -81,6 +81,6 @@ export function TestScenarioDetailPage() {
|
|
|
81
81
|
if (contextError || sequencesError) {
|
|
82
82
|
return (_jsx("div", { className: "p-4 sm:p-6", children: _jsxs("div", { className: "text-center text-red-600 dark:text-red-400 py-8", children: ["Error: ", contextError || sequencesError] }) }));
|
|
83
83
|
}
|
|
84
|
-
return (_jsxs("div", { className: "
|
|
84
|
+
return (_jsx(ContentLayout, { header: _jsxs("div", { className: "border-b border-gray-200 bg-white px-4 pb-4 pt-4 dark:border-gray-800 dark:bg-gray-900 sm:px-6 sm:pt-6", children: [_jsx(SEOHead, { title: scenario?.title ?? `Scenario #${scenarioId}`, description: "", noIndex: true }), _jsx(BackLink, { label: "Test Scenarios", onClick: () => navigate(r.testScenarios()) }), _jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between", children: [_jsx("h1", { className: "text-2xl font-bold text-gray-900 dark:text-gray-100", children: scenario?.title ?? `Test Scenario #${scenarioId}` }), _jsx(AddToBundleButton, { itemType: "scenario", itemId: Number(scenarioId) })] })] }), children: _jsxs("div", { className: "px-4 py-4 sm:px-6", children: [scenario && (_jsxs("div", { className: "mb-6 space-y-3", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-sm text-gray-500 dark:text-gray-400", children: [_jsxs("span", { children: ["Starting path:", ' ', _jsx("code", { className: "text-gray-900 dark:text-gray-100", children: scenario.startingPath })] }), _jsxs("span", { children: ["Device:", ' ', _jsx("code", { className: "text-gray-900 dark:text-gray-100", children: scenario.sizeClass })] }), scenario.personaId && (_jsxs("span", { children: ["Persona:", ' ', _jsx("code", { className: "text-gray-900 dark:text-gray-100", children: personaName ?? `#${scenario.personaId}` })] }))] }), _jsxs(Card, { variant: "bordered", padding: "sm", children: [_jsx("div", { className: "text-xs font-medium text-gray-500 dark:text-gray-400 mb-1", children: "Prompt" }), _jsx("p", { className: "text-sm text-gray-900 dark:text-gray-100 whitespace-pre-wrap", children: scenario.prompt })] })] })), _jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-3", children: [_jsx("h2", { className: "text-sm font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Sequences" }), _jsx(ActionButton, { variant: "primary", className: "bg-purple-600 hover:bg-purple-700", onClick: handleGenerateSequence, disabled: !scenarioId, isLoading: isGenerating, loadingText: "Generating...", children: "Generate Sequence" })] }), generateErrorMsg && (_jsx(Alert, { variant: "error", description: generateErrorMsg, className: "mb-3" })), sequencesLoading && (_jsx("div", { className: "text-sm text-gray-500 dark:text-gray-400 py-8 text-center", children: "Loading..." })), !sequencesLoading && sequences.length === 0 && (_jsx(EmptyState, { title: "No sequences yet", description: "Sequences are created when a scenario is run against an environment." })), sequences.length > 0 && (_jsx("div", { className: "space-y-2", children: sequences.map((seq) => (_jsx(SequenceCard, { sequence: seq, isExpanded: expandedSequenceId === seq.id, onToggle: () => setExpandedSequenceId(expandedSequenceId === seq.id ? null : seq.id), networkClient: networkClient, token: token ?? '', interactionPath: r.testInteraction, navigate: navigate, interactions: testInteractions }, seq.id))) }))] }) }));
|
|
85
85
|
}
|
|
86
86
|
//# sourceMappingURL=TestScenarioDetailPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestScenarioDetailPage.js","sourceRoot":"","sources":["../../src/pages/TestScenarioDetailPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,wBAAwB,EACxB,uCAAuC,EACvC,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"TestScenarioDetailPage.js","sourceRoot":"","sources":["../../src/pages/TestScenarioDetailPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestScenariosPage.d.ts","sourceRoot":"","sources":["../../src/pages/TestScenariosPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TestScenariosPage.d.ts","sourceRoot":"","sources":["../../src/pages/TestScenariosPage.tsx"],"names":[],"mappings":"AAmBA,wBAAgB,iBAAiB,gCA8JhC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import { useRunnerTestScenarios, useDeleteTestScenario, useProductPersonas, useDetectTestScenarios, } from '@sudobility/testomniac_client';
|
|
4
|
-
import { Alert,
|
|
4
|
+
import { Alert, ActionButton, ContentLayout, CardGrid } from '@sudobility/components';
|
|
5
5
|
import { SEOHead, useTestomniacApi } from '../context/config';
|
|
6
|
+
import { AddButton } from '../components/ui/AddButton';
|
|
6
7
|
import { useRouteParams, useEnvRoutes } from '../context/routing';
|
|
7
8
|
import { ScenarioCell } from '../components/cells';
|
|
8
9
|
import { useLocalizedNavigate } from '../hooks/useLocalizedNavigate';
|
|
@@ -57,10 +58,10 @@ export function TestScenariosPage() {
|
|
|
57
58
|
if (contextError || error) {
|
|
58
59
|
return _jsx(ErrorState, { message: contextError || error || '' });
|
|
59
60
|
}
|
|
60
|
-
return (_jsxs("div", { className: "
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
61
|
+
return (_jsx(ContentLayout, { header: _jsxs("div", { className: "border-b border-gray-200 bg-white px-4 pb-4 pt-4 dark:border-gray-800 dark:bg-gray-900 sm:px-6 sm:pt-6", children: [_jsx(SEOHead, { title: "Test Scenarios", description: "", noIndex: true }), _jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between", children: [_jsx("h1", { className: "text-2xl font-bold text-gray-900 dark:text-gray-100", children: "Test Scenarios" }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(ActionButton, { variant: "primary", className: "bg-purple-600 hover:bg-purple-700", onClick: handleDetect, disabled: !productId, isLoading: isDetecting, loadingText: "Detecting...", children: "Detect Scenarios" }), _jsx(AddButton, { label: "New Scenario", active: showForm, onClick: () => setShowForm(!showForm) })] })] })] }), children: _jsxs("div", { className: "px-4 py-4 sm:px-6", children: [detectError && _jsx(Alert, { variant: "error", description: detectError, className: "mb-4" }), showForm && primaryRunner && (_jsx("div", { className: "mb-6", children: _jsx(AddScenarioForm, { networkClient: networkClient, token: token, runnerId: primaryRunner.id, personas: personas, onCreated: () => {
|
|
62
|
+
setShowForm(false);
|
|
63
|
+
refetch();
|
|
64
|
+
}, onCancel: () => setShowForm(false) }) })), (contextLoading || isLoading) && _jsx(LoadingState, { message: "Loading test scenarios..." }), !isLoading && testScenarios.length === 0 && !showForm && (_jsx(EmptyState, { title: "No test scenarios yet", description: "Create a test scenario to define a user flow you want to test." })), !isLoading && testScenarios.length > 0 && (_jsx(CardGrid, { children: testScenarios.map((scenario) => (_jsx(ScenarioCell, { scenario: scenario, variant: "tile", onClick: () => navigate(r.testScenario(scenario.id)), trailing: _jsxs(_Fragment, { children: [scenario.personaId && (_jsx("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: personas.find(p => p.id === scenario.personaId)?.title ??
|
|
65
|
+
`Persona #${scenario.personaId}` })), _jsx(StatusBadge, { status: scenario.sizeClass })] }), actions: _jsx("button", { onClick: () => handleDelete(scenario.id), className: "text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300", children: "Delete" }) }, scenario.id))) }))] }) }));
|
|
65
66
|
}
|
|
66
67
|
//# sourceMappingURL=TestScenariosPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestScenariosPage.js","sourceRoot":"","sources":["../../src/pages/TestScenariosPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"TestScenariosPage.js","sourceRoot":"","sources":["../../src/pages/TestScenariosPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestSurfaceDetailPage.d.ts","sourceRoot":"","sources":["../../src/pages/TestSurfaceDetailPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TestSurfaceDetailPage.d.ts","sourceRoot":"","sources":["../../src/pages/TestSurfaceDetailPage.tsx"],"names":[],"mappings":"AAWA,wBAAgB,qBAAqB,gCAyEpC"}
|