@memberjunction/ng-dashboards 5.21.0 → 5.23.0
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/README.md +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +364 -362
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +2 -2
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +313 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2792 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +382 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +2683 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -0
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +191 -197
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +9 -8
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +305 -299
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +319 -313
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +240 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.js +1767 -0
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -0
- package/dist/AI/index.d.ts +3 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +6 -0
- package/dist/AI/index.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts +50 -7
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +161 -193
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +10 -12
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +13 -19
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +12 -14
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +61 -68
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.js +10 -11
- package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +82 -96
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +130 -134
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +40 -46
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/code-management.component.js +2 -2
- package/dist/Actions/components/code-management.component.js.map +1 -1
- package/dist/Actions/components/entity-integration.component.js +2 -2
- package/dist/Actions/components/entity-integration.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +127 -132
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/executions-list-view.component.js +2 -2
- package/dist/Actions/components/executions-list-view.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +11 -17
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +5 -11
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-list-item.component.js +8 -10
- package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +112 -133
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-tree-panel.component.js +63 -83
- package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.js +17 -21
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +17 -21
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.js +2 -2
- package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
- package/dist/Actions/components/security-permissions.component.js +2 -2
- package/dist/Actions/components/security-permissions.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +13 -5
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +168 -145
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +4 -5
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +197 -200
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +5 -7
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +142 -148
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/browser/component-browser.component.js +153 -166
- package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +15 -20
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +16 -21
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js +18 -23
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/spec-editor.component.js +25 -30
- package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +10 -11
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +24 -35
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/text-import-dialog.component.js +15 -17
- package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +7 -6
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +6 -5
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +7 -6
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +11 -0
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +57 -0
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -9
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +10 -2
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +35 -11
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts +1 -0
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +8 -4
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +181 -1
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +1704 -182
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +4 -4
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +246 -259
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/widgets/integration-card.component.js +7 -9
- package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +6 -10
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +12 -20
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +106 -0
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +607 -0
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +126 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +1086 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.d.ts +56 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.js +291 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.js.map +1 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts +85 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js +461 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/index.d.ts +5 -0
- package/dist/KnowledgeHub/index.d.ts.map +1 -0
- package/dist/KnowledgeHub/index.js +6 -0
- package/dist/KnowledgeHub/index.js.map +1 -0
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +9 -7
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +5 -4
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +10 -9
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +141 -132
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-log-detail-panel.component.js +4 -4
- package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +141 -128
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.js +210 -218
- package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +2 -2
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +6 -9
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +20 -22
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +5 -1
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +5 -4
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +6 -5
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +93 -92
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1 -0
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +7 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +63 -8
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +9 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +109 -62
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +241 -200
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +7 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +63 -8
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +7 -5
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +9 -1
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +122 -54
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +8 -13
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +6 -27
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +14 -11
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +58 -44
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +4 -8
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +0 -19
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/component-studio-dashboards.module.d.ts +7 -11
- package/dist/component-studio-dashboards.module.d.ts.map +1 -1
- package/dist/component-studio-dashboards.module.js +22 -34
- package/dist/component-studio-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +13 -18
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +18 -31
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +5 -8
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +3 -19
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/data-explorer-dashboards.module.d.ts +7 -13
- package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
- package/dist/data-explorer-dashboards.module.js +0 -27
- package/dist/data-explorer-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +5 -8
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +3 -19
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +5 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +6 -1
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +6 -10
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +3 -23
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +7 -12
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +4 -27
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +47 -53
|
@@ -8,10 +8,10 @@ import { Component, ChangeDetectionStrategy } from '@angular/core';
|
|
|
8
8
|
import { BaseDashboard } from '@memberjunction/ng-shared';
|
|
9
9
|
import { RegisterClass } from '@memberjunction/global';
|
|
10
10
|
import { Subject } from 'rxjs';
|
|
11
|
-
import { debounceTime } from 'rxjs/operators';
|
|
11
|
+
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
12
12
|
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@
|
|
14
|
-
import * as i2 from "@memberjunction/ng-
|
|
13
|
+
import * as i1 from "@memberjunction/ng-testing";
|
|
14
|
+
import * as i2 from "@memberjunction/ng-versions";
|
|
15
15
|
import * as i3 from "@memberjunction/ng-shared-generic";
|
|
16
16
|
import * as i4 from "./components/testing-dashboard-tab.component";
|
|
17
17
|
import * as i5 from "./components/testing-runs.component";
|
|
@@ -22,87 +22,127 @@ function TestingDashboardComponent_Conditional_1_Template(rf, ctx) { if (rf & 1)
|
|
|
22
22
|
i0.ɵɵelement(1, "mj-loading", 3);
|
|
23
23
|
i0.ɵɵelementEnd();
|
|
24
24
|
} }
|
|
25
|
-
function
|
|
25
|
+
function TestingDashboardComponent_Conditional_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
26
26
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
27
|
-
i0.ɵɵelementStart(0, "div",
|
|
28
|
-
i0.ɵɵ
|
|
27
|
+
i0.ɵɵelementStart(0, "div", 4);
|
|
28
|
+
i0.ɵɵelement(1, "i", 11);
|
|
29
|
+
i0.ɵɵelementStart(2, "span", 12);
|
|
30
|
+
i0.ɵɵtext(3);
|
|
31
|
+
i0.ɵɵelementEnd();
|
|
32
|
+
i0.ɵɵelementStart(4, "span", 13);
|
|
33
|
+
i0.ɵɵtext(5);
|
|
34
|
+
i0.ɵɵelementEnd();
|
|
35
|
+
i0.ɵɵelementStart(6, "button", 14);
|
|
36
|
+
i0.ɵɵlistener("click", function TestingDashboardComponent_Conditional_2_Conditional_0_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnViewActiveRun(ctx_r1.ActiveRuns[0])); });
|
|
37
|
+
i0.ɵɵtext(7, "View");
|
|
38
|
+
i0.ɵɵelementEnd()();
|
|
39
|
+
} if (rf & 2) {
|
|
40
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
41
|
+
i0.ɵɵadvance(3);
|
|
42
|
+
i0.ɵɵtextInterpolate2("", ctx_r1.ActiveRuns.length, " test", ctx_r1.ActiveRuns.length === 1 ? "" : "s", " running");
|
|
43
|
+
i0.ɵɵadvance(2);
|
|
44
|
+
i0.ɵɵtextInterpolate2("", ctx_r1.ActiveRuns[0].TestName, " \u2014 ", ctx_r1.ActiveRuns[0].Progress, "%");
|
|
45
|
+
} }
|
|
46
|
+
function TestingDashboardComponent_Conditional_2_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
47
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
48
|
+
i0.ɵɵelementStart(0, "div", 15);
|
|
49
|
+
i0.ɵɵlistener("click", function TestingDashboardComponent_Conditional_2_For_4_Template_div_click_0_listener() { const $index_r4 = i0.ɵɵrestoreView(_r3).$index; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTabChange(ctx_r1.navigationItems[$index_r4])); });
|
|
29
50
|
i0.ɵɵelement(1, "i");
|
|
30
51
|
i0.ɵɵelementStart(2, "span");
|
|
31
52
|
i0.ɵɵtext(3);
|
|
32
53
|
i0.ɵɵelementEnd()();
|
|
33
54
|
} if (rf & 2) {
|
|
34
|
-
const
|
|
35
|
-
i0.ɵɵclassProp("active",
|
|
55
|
+
const navItem_r5 = ctx.$implicit;
|
|
56
|
+
i0.ɵɵclassProp("active", navItem_r5.selected);
|
|
36
57
|
i0.ɵɵadvance();
|
|
37
|
-
i0.ɵɵclassMap(
|
|
58
|
+
i0.ɵɵclassMap(navItem_r5.icon);
|
|
38
59
|
i0.ɵɵadvance(2);
|
|
39
|
-
i0.ɵɵtextInterpolate(
|
|
40
|
-
} }
|
|
41
|
-
function TestingDashboardComponent_Conditional_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
42
|
-
const _r5 = i0.ɵɵgetCurrentView();
|
|
43
|
-
i0.ɵɵelementStart(0, "app-testing-dashboard-tab", 10);
|
|
44
|
-
i0.ɵɵlistener("stateChange", function TestingDashboardComponent_Conditional_2_Conditional_7_Template_app_testing_dashboard_tab_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onDashboardStateChange($event)); });
|
|
45
|
-
i0.ɵɵelementEnd();
|
|
46
|
-
} if (rf & 2) {
|
|
47
|
-
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
48
|
-
i0.ɵɵproperty("initialState", ctx_r2.dashboardState);
|
|
60
|
+
i0.ɵɵtextInterpolate(navItem_r5.text);
|
|
49
61
|
} }
|
|
50
62
|
function TestingDashboardComponent_Conditional_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
51
63
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
52
|
-
i0.ɵɵelementStart(0, "app-testing-
|
|
53
|
-
i0.ɵɵlistener("stateChange", function
|
|
64
|
+
i0.ɵɵelementStart(0, "app-testing-dashboard-tab", 16);
|
|
65
|
+
i0.ɵɵlistener("stateChange", function TestingDashboardComponent_Conditional_2_Conditional_8_Template_app_testing_dashboard_tab_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onDashboardStateChange($event)); });
|
|
54
66
|
i0.ɵɵelementEnd();
|
|
55
67
|
} if (rf & 2) {
|
|
56
|
-
const
|
|
57
|
-
i0.ɵɵproperty("initialState",
|
|
68
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
69
|
+
i0.ɵɵproperty("initialState", ctx_r1.dashboardState);
|
|
58
70
|
} }
|
|
59
71
|
function TestingDashboardComponent_Conditional_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
60
72
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
61
|
-
i0.ɵɵelementStart(0, "app-testing-
|
|
62
|
-
i0.ɵɵlistener("stateChange", function
|
|
73
|
+
i0.ɵɵelementStart(0, "app-testing-runs", 16);
|
|
74
|
+
i0.ɵɵlistener("stateChange", function TestingDashboardComponent_Conditional_2_Conditional_9_Template_app_testing_runs_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onRunsStateChange($event)); });
|
|
63
75
|
i0.ɵɵelementEnd();
|
|
64
76
|
} if (rf & 2) {
|
|
65
|
-
const
|
|
66
|
-
i0.ɵɵproperty("initialState",
|
|
77
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
78
|
+
i0.ɵɵproperty("initialState", ctx_r1.runsState);
|
|
67
79
|
} }
|
|
68
80
|
function TestingDashboardComponent_Conditional_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
69
81
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
70
|
-
i0.ɵɵelementStart(0, "app-testing-
|
|
71
|
-
i0.ɵɵlistener("stateChange", function
|
|
82
|
+
i0.ɵɵelementStart(0, "app-testing-analytics", 16);
|
|
83
|
+
i0.ɵɵlistener("stateChange", function TestingDashboardComponent_Conditional_2_Conditional_10_Template_app_testing_analytics_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onAnalyticsStateChange($event)); });
|
|
72
84
|
i0.ɵɵelementEnd();
|
|
73
85
|
} if (rf & 2) {
|
|
74
|
-
const
|
|
75
|
-
i0.ɵɵproperty("initialState",
|
|
86
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
87
|
+
i0.ɵɵproperty("initialState", ctx_r1.analyticsState);
|
|
88
|
+
} }
|
|
89
|
+
function TestingDashboardComponent_Conditional_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
90
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
91
|
+
i0.ɵɵelementStart(0, "app-testing-review", 16);
|
|
92
|
+
i0.ɵɵlistener("stateChange", function TestingDashboardComponent_Conditional_2_Conditional_11_Template_app_testing_review_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onReviewStateChange($event)); });
|
|
93
|
+
i0.ɵɵelementEnd();
|
|
94
|
+
} if (rf & 2) {
|
|
95
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
96
|
+
i0.ɵɵproperty("initialState", ctx_r1.reviewState);
|
|
76
97
|
} }
|
|
77
98
|
function TestingDashboardComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
78
|
-
i0.ɵɵ
|
|
79
|
-
i0.ɵɵ
|
|
80
|
-
i0.ɵɵ
|
|
99
|
+
i0.ɵɵconditionalCreate(0, TestingDashboardComponent_Conditional_2_Conditional_0_Template, 8, 4, "div", 4);
|
|
100
|
+
i0.ɵɵelementStart(1, "div", 5)(2, "div", 6);
|
|
101
|
+
i0.ɵɵrepeaterCreate(3, TestingDashboardComponent_Conditional_2_For_4_Template, 4, 5, "div", 7, i0.ɵɵrepeaterTrackByIndex);
|
|
102
|
+
i0.ɵɵelement(5, "div", 8)(6, "app-evaluation-mode-toggle");
|
|
81
103
|
i0.ɵɵelementEnd();
|
|
82
|
-
i0.ɵɵelementStart(
|
|
83
|
-
i0.ɵɵconditionalCreate(
|
|
84
|
-
i0.ɵɵconditionalCreate(
|
|
85
|
-
i0.ɵɵconditionalCreate(
|
|
86
|
-
i0.ɵɵconditionalCreate(
|
|
104
|
+
i0.ɵɵelementStart(7, "div", 9);
|
|
105
|
+
i0.ɵɵconditionalCreate(8, TestingDashboardComponent_Conditional_2_Conditional_8_Template, 1, 1, "app-testing-dashboard-tab", 10);
|
|
106
|
+
i0.ɵɵconditionalCreate(9, TestingDashboardComponent_Conditional_2_Conditional_9_Template, 1, 1, "app-testing-runs", 10);
|
|
107
|
+
i0.ɵɵconditionalCreate(10, TestingDashboardComponent_Conditional_2_Conditional_10_Template, 1, 1, "app-testing-analytics", 10);
|
|
108
|
+
i0.ɵɵconditionalCreate(11, TestingDashboardComponent_Conditional_2_Conditional_11_Template, 1, 1, "app-testing-review", 10);
|
|
87
109
|
i0.ɵɵelementEnd()();
|
|
88
110
|
} if (rf & 2) {
|
|
89
|
-
const
|
|
90
|
-
i0.ɵɵ
|
|
91
|
-
i0.ɵɵ
|
|
111
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
112
|
+
i0.ɵɵconditional(ctx_r1.ActiveRuns.length > 0 ? 0 : -1);
|
|
113
|
+
i0.ɵɵadvance(3);
|
|
114
|
+
i0.ɵɵrepeater(ctx_r1.navigationConfig);
|
|
92
115
|
i0.ɵɵadvance(5);
|
|
93
|
-
i0.ɵɵconditional(
|
|
116
|
+
i0.ɵɵconditional(ctx_r1.activeTab === "dashboard" && ctx_r1.hasVisited("dashboard") ? 8 : -1);
|
|
94
117
|
i0.ɵɵadvance();
|
|
95
|
-
i0.ɵɵconditional(
|
|
118
|
+
i0.ɵɵconditional(ctx_r1.activeTab === "runs" && ctx_r1.hasVisited("runs") ? 9 : -1);
|
|
96
119
|
i0.ɵɵadvance();
|
|
97
|
-
i0.ɵɵconditional(
|
|
120
|
+
i0.ɵɵconditional(ctx_r1.activeTab === "analytics" && ctx_r1.hasVisited("analytics") ? 10 : -1);
|
|
98
121
|
i0.ɵɵadvance();
|
|
99
|
-
i0.ɵɵconditional(
|
|
122
|
+
i0.ɵɵconditional(ctx_r1.activeTab === "review" && ctx_r1.hasVisited("review") ? 11 : -1);
|
|
123
|
+
} }
|
|
124
|
+
function TestingDashboardComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
125
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
126
|
+
i0.ɵɵelementStart(0, "mj-slide-panel", 17);
|
|
127
|
+
i0.ɵɵlistener("Closed", function TestingDashboardComponent_Conditional_3_Template_mj_slide_panel_Closed_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnPanelClosed()); });
|
|
128
|
+
i0.ɵɵelementStart(1, "app-test-run-dialog", 18);
|
|
129
|
+
i0.ɵɵlistener("PanelClose", function TestingDashboardComponent_Conditional_3_Template_app_test_run_dialog_PanelClose_1_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnPanelClosed()); });
|
|
130
|
+
i0.ɵɵelementEnd()();
|
|
131
|
+
} if (rf & 2) {
|
|
132
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
133
|
+
i0.ɵɵproperty("Title", (ctx_r1.testingDialogService.PanelOptions == null ? null : ctx_r1.testingDialogService.PanelOptions.testId) ? "Test Execution" : "Run Test")("Resizable", true);
|
|
134
|
+
i0.ɵɵadvance();
|
|
135
|
+
i0.ɵɵproperty("PanelMode", true)("selectedTestId", (ctx_r1.testingDialogService.PanelOptions == null ? null : ctx_r1.testingDialogService.PanelOptions.testId) ?? null)("selectedSuiteId", (ctx_r1.testingDialogService.PanelOptions == null ? null : ctx_r1.testingDialogService.PanelOptions.suiteId) ?? null)("runMode", (ctx_r1.testingDialogService.PanelOptions == null ? null : ctx_r1.testingDialogService.PanelOptions.mode) ?? "test");
|
|
100
136
|
} }
|
|
101
137
|
let TestingDashboardComponent = class TestingDashboardComponent extends BaseDashboard {
|
|
102
138
|
cdr;
|
|
139
|
+
testingDialogService;
|
|
140
|
+
executionService;
|
|
103
141
|
isLoading = false;
|
|
104
142
|
activeTab = 'dashboard';
|
|
105
143
|
selectedIndex = 0;
|
|
144
|
+
// Active test runs from execution service
|
|
145
|
+
ActiveRuns = [];
|
|
106
146
|
// Component states
|
|
107
147
|
dashboardState = null;
|
|
108
148
|
runsState = null;
|
|
@@ -119,9 +159,12 @@ let TestingDashboardComponent = class TestingDashboardComponent extends BaseDash
|
|
|
119
159
|
{ text: 'Review', icon: 'fa-solid fa-clipboard-check', selected: false }
|
|
120
160
|
];
|
|
121
161
|
stateChangeSubject = new Subject();
|
|
122
|
-
|
|
162
|
+
destroy$ = new Subject();
|
|
163
|
+
constructor(cdr, testingDialogService, executionService) {
|
|
123
164
|
super();
|
|
124
165
|
this.cdr = cdr;
|
|
166
|
+
this.testingDialogService = testingDialogService;
|
|
167
|
+
this.executionService = executionService;
|
|
125
168
|
this.setupStateManagement();
|
|
126
169
|
this.updateNavigationSelection();
|
|
127
170
|
}
|
|
@@ -132,9 +175,19 @@ let TestingDashboardComponent = class TestingDashboardComponent extends BaseDash
|
|
|
132
175
|
this.visitedTabs.add(this.activeTab);
|
|
133
176
|
this.updateNavigationSelection();
|
|
134
177
|
this.emitStateChange();
|
|
178
|
+
this.executionService.ActiveRuns$.pipe(takeUntil(this.destroy$)).subscribe(runs => {
|
|
179
|
+
this.ActiveRuns = runs;
|
|
180
|
+
this.cdr.markForCheck();
|
|
181
|
+
});
|
|
182
|
+
this.testingDialogService.PanelStateChanged$.pipe(takeUntil(this.destroy$)).subscribe((isOpen) => {
|
|
183
|
+
console.log('[TestingDashboard] PanelStateChanged$:', isOpen, 'IsPanelOpen:', this.testingDialogService.IsPanelOpen);
|
|
184
|
+
this.cdr.detectChanges();
|
|
185
|
+
});
|
|
135
186
|
this.cdr.detectChanges();
|
|
136
187
|
}
|
|
137
188
|
ngOnDestroy() {
|
|
189
|
+
this.destroy$.next();
|
|
190
|
+
this.destroy$.complete();
|
|
138
191
|
this.stateChangeSubject.complete();
|
|
139
192
|
}
|
|
140
193
|
onTabChange(tabId) {
|
|
@@ -224,23 +277,38 @@ let TestingDashboardComponent = class TestingDashboardComponent extends BaseDash
|
|
|
224
277
|
const tabIndex = this.navigationItems.indexOf(this.activeTab);
|
|
225
278
|
return tabIndex >= 0 ? this.navigationConfig[tabIndex].text : 'Testing Dashboard';
|
|
226
279
|
}
|
|
280
|
+
OnPanelClosed() {
|
|
281
|
+
this.testingDialogService.ClosePanel();
|
|
282
|
+
this.cdr.markForCheck();
|
|
283
|
+
}
|
|
284
|
+
OnViewActiveRun(run) {
|
|
285
|
+
this.testingDialogService.OpenTestPanel(run.TestId);
|
|
286
|
+
this.cdr.markForCheck();
|
|
287
|
+
}
|
|
288
|
+
OnViewRunningTestFromTab(testId) {
|
|
289
|
+
this.testingDialogService.OpenTestPanel(testId);
|
|
290
|
+
this.cdr.detectChanges();
|
|
291
|
+
}
|
|
227
292
|
updateNavigationSelection() {
|
|
228
293
|
this.navigationConfig.forEach((item, index) => {
|
|
229
294
|
item.selected = this.navigationItems[index] === this.activeTab;
|
|
230
295
|
});
|
|
231
296
|
}
|
|
232
|
-
static ɵfac = function TestingDashboardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TestingDashboardComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
233
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestingDashboardComponent, selectors: [["mj-testing-dashboard"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
297
|
+
static ɵfac = function TestingDashboardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TestingDashboardComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.TestingDialogService), i0.ɵɵdirectiveInject(i1.TestingExecutionService)); };
|
|
298
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestingDashboardComponent, selectors: [["mj-testing-dashboard"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 3, consts: [[1, "testing-dashboard-container"], [1, "loading-container"], ["Mode", "slide", 3, "Title", "Resizable"], ["text", "Loading Testing Dashboard...", "size", "large"], [1, "active-runs-banner"], [1, "dashboard-content-wrapper"], [1, "testing-dashboard-nav"], [1, "nav-item", 3, "active"], [1, "nav-spacer"], [1, "dashboard-content"], [3, "initialState"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "active-runs-count"], [1, "active-runs-detail"], [1, "active-runs-view-btn", 3, "click"], [1, "nav-item", 3, "click"], [3, "stateChange", "initialState"], ["Mode", "slide", 3, "Closed", "Title", "Resizable"], [3, "PanelClose", "PanelMode", "selectedTestId", "selectedSuiteId", "runMode"]], template: function TestingDashboardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
234
299
|
i0.ɵɵelementStart(0, "div", 0);
|
|
235
300
|
i0.ɵɵconditionalCreate(1, TestingDashboardComponent_Conditional_1_Template, 2, 0, "div", 1);
|
|
236
|
-
i0.ɵɵconditionalCreate(2, TestingDashboardComponent_Conditional_2_Template,
|
|
301
|
+
i0.ɵɵconditionalCreate(2, TestingDashboardComponent_Conditional_2_Template, 12, 5);
|
|
302
|
+
i0.ɵɵconditionalCreate(3, TestingDashboardComponent_Conditional_3_Template, 2, 6, "mj-slide-panel", 2);
|
|
237
303
|
i0.ɵɵelementEnd();
|
|
238
304
|
} if (rf & 2) {
|
|
239
305
|
i0.ɵɵadvance();
|
|
240
306
|
i0.ɵɵconditional(ctx.isLoading ? 1 : -1);
|
|
241
307
|
i0.ɵɵadvance();
|
|
242
308
|
i0.ɵɵconditional(!ctx.isLoading ? 2 : -1);
|
|
243
|
-
|
|
309
|
+
i0.ɵɵadvance();
|
|
310
|
+
i0.ɵɵconditional(ctx.testingDialogService.IsPanelOpen ? 3 : -1);
|
|
311
|
+
} }, dependencies: [i1.TestRunDialogComponent, i1.EvaluationModeToggleComponent, i2.MjSlidePanelComponent, i3.LoadingComponent, i4.TestingDashboardTabComponent, i5.TestingRunsComponent, i6.TestingAnalyticsComponent, i7.TestingReviewComponent], styles: ["\n\n\n\n\n\n.testing-dashboard-container[_ngcontent-%COMP%] {\n height: 100%;\n background: var(--mj-bg-surface-sunken);\n position: relative;\n overflow: hidden;\n}\n\n\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n background: var(--mj-bg-surface);\n backdrop-filter: blur(8px);\n}\n\n.loading-content[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.loading-spinner[_ngcontent-%COMP%] {\n display: inline-block;\n position: relative;\n width: 80px;\n height: 80px;\n}\n\n.spinner-ring[_ngcontent-%COMP%] {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 64px;\n height: 64px;\n margin: 8px;\n border: 8px solid var(--mj-brand-primary);\n border-radius: 50%;\n animation: _ngcontent-%COMP%_spinner-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: var(--mj-brand-primary) transparent transparent transparent;\n}\n\n.spinner-ring[_ngcontent-%COMP%]:nth-child(1) {\n animation-delay: -0.45s;\n}\n\n.spinner-ring[_ngcontent-%COMP%]:nth-child(2) {\n animation-delay: -0.3s;\n}\n\n.spinner-ring[_ngcontent-%COMP%]:nth-child(3) {\n animation-delay: -0.15s;\n}\n\n@keyframes _ngcontent-%COMP%_spinner-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.loading-text[_ngcontent-%COMP%] {\n margin-top: 20px;\n font-size: 16px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n\n\n.dashboard-content-wrapper[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n.dashboard-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n}\n\n\n\n.testing-dashboard-nav[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-start;\n gap: 2px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n padding: 0 16px;\n position: relative;\n z-index: 10;\n}\n\n.nav-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n gap: 10px;\n padding: 16px 24px;\n cursor: pointer;\n color: var(--mj-text-muted);\n transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n border-bottom: 3px solid transparent;\n white-space: nowrap;\n position: relative;\n font-weight: 500;\n}\n\n.nav-item[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 3px;\n background: transparent;\n transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n border-radius: 8px 8px 0 0;\n}\n\n.nav-item[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n}\n\n.nav-item[_ngcontent-%COMP%]:hover::before {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n\n.nav-item.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.nav-item.active[_ngcontent-%COMP%]::before {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n z-index: 1;\n}\n\n.nav-item[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n transform: scale(1.1);\n}\n\n.nav-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n letter-spacing: 0.2px;\n position: relative;\n z-index: 1;\n}\n\n\n\n.nav-spacer[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n\n\n.active-runs-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 20px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default));\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.active-runs-banner[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.active-runs-count[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n.active-runs-detail[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.active-runs-view-btn[_ngcontent-%COMP%] {\n padding: 4px 14px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.2s;\n}\n\n.active-runs-view-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n\n\n@media (max-width: 768px) {\n .testing-dashboard-nav[_ngcontent-%COMP%] {\n padding: 0 8px;\n overflow-x: auto;\n }\n\n .nav-item[_ngcontent-%COMP%] {\n padding: 12px 16px;\n gap: 8px;\n }\n\n .nav-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .active-runs-banner[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n padding: 8px 12px;\n gap: 6px;\n }\n\n .active-runs-detail[_ngcontent-%COMP%] {\n width: 100%;\n order: 3;\n }\n}\n\n@media (max-width: 480px) {\n .nav-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: none;\n }\n\n .nav-item[_ngcontent-%COMP%] {\n padding: 12px 14px;\n }\n}"], changeDetection: 0 });
|
|
244
312
|
};
|
|
245
313
|
TestingDashboardComponent = __decorate([
|
|
246
314
|
RegisterClass(BaseDashboard, 'TestingDashboard')
|
|
@@ -248,7 +316,7 @@ TestingDashboardComponent = __decorate([
|
|
|
248
316
|
export { TestingDashboardComponent };
|
|
249
317
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TestingDashboardComponent, [{
|
|
250
318
|
type: Component,
|
|
251
|
-
args: [{ standalone: false, selector: 'mj-testing-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"testing-dashboard-container\"
|
|
252
|
-
}], () => [{ type: i0.ChangeDetectorRef }], null); })();
|
|
253
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestingDashboardComponent, { className: "TestingDashboardComponent", filePath: "src/Testing/testing-dashboard.component.ts", lineNumber:
|
|
319
|
+
args: [{ standalone: false, selector: 'mj-testing-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"testing-dashboard-container\">\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading Testing Dashboard...\" size=\"large\"></mj-loading>\n </div>\n }\n\n @if (!isLoading) {\n <!-- Active Runs Banner -->\n @if (ActiveRuns.length > 0) {\n <div class=\"active-runs-banner\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span class=\"active-runs-count\">{{ ActiveRuns.length }} test{{ ActiveRuns.length === 1 ? '' : 's' }} running</span>\n <span class=\"active-runs-detail\">{{ ActiveRuns[0].TestName }} — {{ ActiveRuns[0].Progress }}%</span>\n <button class=\"active-runs-view-btn\" (click)=\"OnViewActiveRun(ActiveRuns[0])\">View</button>\n </div>\n }\n\n <div class=\"dashboard-content-wrapper\">\n <div class=\"testing-dashboard-nav\">\n @for (navItem of navigationConfig; track $index) {\n <div\n class=\"nav-item\"\n [class.active]=\"navItem.selected\"\n (click)=\"onTabChange(navigationItems[$index])\"\n >\n <i [class]=\"navItem.icon\"></i>\n <span>{{ navItem.text }}</span>\n </div>\n }\n <div class=\"nav-spacer\"></div>\n <app-evaluation-mode-toggle></app-evaluation-mode-toggle>\n </div>\n\n <div class=\"dashboard-content\">\n @if (activeTab === 'dashboard' && hasVisited('dashboard')) {\n <app-testing-dashboard-tab\n [initialState]=\"dashboardState\"\n (stateChange)=\"onDashboardStateChange($event)\"\n ></app-testing-dashboard-tab>\n }\n\n @if (activeTab === 'runs' && hasVisited('runs')) {\n <app-testing-runs\n [initialState]=\"runsState\"\n (stateChange)=\"onRunsStateChange($event)\"\n ></app-testing-runs>\n }\n\n @if (activeTab === 'analytics' && hasVisited('analytics')) {\n <app-testing-analytics\n [initialState]=\"analyticsState\"\n (stateChange)=\"onAnalyticsStateChange($event)\"\n ></app-testing-analytics>\n }\n\n @if (activeTab === 'review' && hasVisited('review')) {\n <app-testing-review\n [initialState]=\"reviewState\"\n (stateChange)=\"onReviewStateChange($event)\"\n ></app-testing-review>\n }\n </div>\n </div>\n }\n\n <!-- Slide Panel for Test Execution -->\n @if (testingDialogService.IsPanelOpen) {\n <mj-slide-panel\n Mode=\"slide\"\n [Title]=\"testingDialogService.PanelOptions?.testId ? 'Test Execution' : 'Run Test'\"\n [Resizable]=\"true\"\n (Closed)=\"OnPanelClosed()\">\n <app-test-run-dialog\n [PanelMode]=\"true\"\n [selectedTestId]=\"testingDialogService.PanelOptions?.testId ?? null\"\n [selectedSuiteId]=\"testingDialogService.PanelOptions?.suiteId ?? null\"\n [runMode]=\"testingDialogService.PanelOptions?.mode ?? 'test'\"\n (PanelClose)=\"OnPanelClosed()\">\n </app-test-run-dialog>\n </mj-slide-panel>\n }\n</div>\n", styles: ["/* ============================================\n Testing Dashboard - Premium Design System\n Based on AI Dashboard patterns\n ============================================ */\n\n.testing-dashboard-container {\n height: 100%;\n background: var(--mj-bg-surface-sunken);\n position: relative;\n overflow: hidden;\n}\n\n/* Loading State */\n.loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n background: var(--mj-bg-surface);\n backdrop-filter: blur(8px);\n}\n\n.loading-content {\n text-align: center;\n}\n\n.loading-spinner {\n display: inline-block;\n position: relative;\n width: 80px;\n height: 80px;\n}\n\n.spinner-ring {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 64px;\n height: 64px;\n margin: 8px;\n border: 8px solid var(--mj-brand-primary);\n border-radius: 50%;\n animation: spinner-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: var(--mj-brand-primary) transparent transparent transparent;\n}\n\n.spinner-ring:nth-child(1) {\n animation-delay: -0.45s;\n}\n\n.spinner-ring:nth-child(2) {\n animation-delay: -0.3s;\n}\n\n.spinner-ring:nth-child(3) {\n animation-delay: -0.15s;\n}\n\n@keyframes spinner-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.loading-text {\n margin-top: 20px;\n font-size: 16px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n/* Dashboard Layout */\n.dashboard-content-wrapper {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n.dashboard-content {\n flex: 1;\n overflow: hidden;\n}\n\n/* Premium Navigation Tabs */\n.testing-dashboard-nav {\n display: flex;\n justify-content: flex-start;\n gap: 2px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n padding: 0 16px;\n position: relative;\n z-index: 10;\n}\n\n.nav-item {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n gap: 10px;\n padding: 16px 24px;\n cursor: pointer;\n color: var(--mj-text-muted);\n transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n border-bottom: 3px solid transparent;\n white-space: nowrap;\n position: relative;\n font-weight: 500;\n}\n\n.nav-item::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 3px;\n background: transparent;\n transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n border-radius: 8px 8px 0 0;\n}\n\n.nav-item:hover {\n color: var(--mj-brand-primary);\n}\n\n.nav-item:hover::before {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n\n.nav-item.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.nav-item.active::before {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.nav-item i {\n font-size: 16px;\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n z-index: 1;\n}\n\n.nav-item:hover i {\n transform: scale(1.1);\n}\n\n.nav-item span {\n font-size: 13px;\n font-weight: 600;\n letter-spacing: 0.2px;\n position: relative;\n z-index: 1;\n}\n\n/* Spacer for flex layout */\n.nav-spacer {\n flex: 1;\n}\n\n/* Active Runs Banner */\n.active-runs-banner {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 20px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default));\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.active-runs-banner i {\n color: var(--mj-brand-primary);\n}\n\n.active-runs-count {\n font-weight: 600;\n}\n\n.active-runs-detail {\n color: var(--mj-text-secondary);\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.active-runs-view-btn {\n padding: 4px 14px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.2s;\n}\n\n.active-runs-view-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .testing-dashboard-nav {\n padding: 0 8px;\n overflow-x: auto;\n }\n\n .nav-item {\n padding: 12px 16px;\n gap: 8px;\n }\n\n .nav-item span {\n font-size: 11px;\n }\n\n .nav-item i {\n font-size: 18px;\n }\n\n .active-runs-banner {\n flex-wrap: wrap;\n padding: 8px 12px;\n gap: 6px;\n }\n\n .active-runs-detail {\n width: 100%;\n order: 3;\n }\n}\n\n@media (max-width: 480px) {\n .nav-item span {\n display: none;\n }\n\n .nav-item {\n padding: 12px 14px;\n }\n}\n"] }]
|
|
320
|
+
}], () => [{ type: i0.ChangeDetectorRef }, { type: i1.TestingDialogService }, { type: i1.TestingExecutionService }], null); })();
|
|
321
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestingDashboardComponent, { className: "TestingDashboardComponent", filePath: "src/Testing/testing-dashboard.component.ts", lineNumber: 25 }); })();
|
|
254
322
|
//# sourceMappingURL=testing-dashboard.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing-dashboard.component.js","sourceRoot":"","sources":["../../src/Testing/testing-dashboard.component.ts","../../src/Testing/testing-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, AfterViewInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { ResourceData } from '@memberjunction/core-entities';\n\ninterface TestingDashboardState {\n activeTab: string;\n dashboardState: Record<string, unknown>;\n runsState: Record<string, unknown>;\n analyticsState: Record<string, unknown>;\n reviewState: Record<string, unknown>;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-testing-dashboard',\n templateUrl: './testing-dashboard.component.html',\n styleUrls: ['./testing-dashboard.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n@RegisterClass(BaseDashboard, 'TestingDashboard')\nexport class TestingDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n\n public isLoading = false;\n public activeTab = 'dashboard';\n public selectedIndex = 0;\n\n // Component states\n public dashboardState: Record<string, unknown> | null = null;\n public runsState: Record<string, unknown> | null = null;\n public analyticsState: Record<string, unknown> | null = null;\n public reviewState: Record<string, unknown> | null = null;\n\n // Track visited tabs for lazy loading\n private visitedTabs = new Set<string>();\n\n // Navigation items\n public navigationItems: string[] = ['dashboard', 'runs', 'analytics', 'review'];\n\n public navigationConfig = [\n { text: 'Dashboard', icon: 'fa-solid fa-gauge-high', selected: false },\n { text: 'Runs', icon: 'fa-solid fa-play-circle', selected: false },\n { text: 'Analytics', icon: 'fa-solid fa-chart-bar', selected: false },\n { text: 'Review', icon: 'fa-solid fa-clipboard-check', selected: false }\n ];\n\n private stateChangeSubject = new Subject<TestingDashboardState>();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n this.setupStateManagement();\n this.updateNavigationSelection();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Testing';\n }\n\n ngAfterViewInit(): void {\n this.visitedTabs.add(this.activeTab);\n this.updateNavigationSelection();\n this.emitStateChange();\n this.cdr.detectChanges();\n }\n\n ngOnDestroy(): void {\n this.stateChangeSubject.complete();\n }\n\n public onTabChange(tabId: string): void {\n this.activeTab = tabId;\n const index = this.navigationItems.indexOf(tabId);\n this.selectedIndex = index >= 0 ? index : 0;\n this.updateNavigationSelection();\n this.visitedTabs.add(tabId);\n this.emitStateChange();\n this.cdr.markForCheck();\n }\n\n public hasVisited(tabId: string): boolean {\n return this.visitedTabs.has(tabId);\n }\n\n private setupStateManagement(): void {\n this.stateChangeSubject.pipe(\n debounceTime(50)\n ).subscribe(state => {\n this.UserStateChanged.emit(state);\n });\n }\n\n private emitStateChange(): void {\n const state: TestingDashboardState = {\n activeTab: this.activeTab,\n dashboardState: (this.dashboardState || {}) as Record<string, unknown>,\n runsState: (this.runsState || {}) as Record<string, unknown>,\n analyticsState: (this.analyticsState || {}) as Record<string, unknown>,\n reviewState: (this.reviewState || {}) as Record<string, unknown>\n };\n\n this.stateChangeSubject.next(state);\n }\n\n public onDashboardStateChange(state: Record<string, unknown>): void {\n this.dashboardState = state;\n this.emitStateChange();\n }\n\n public onRunsStateChange(state: Record<string, unknown>): void {\n this.runsState = state;\n this.emitStateChange();\n }\n\n public onAnalyticsStateChange(state: Record<string, unknown>): void {\n this.analyticsState = state;\n this.emitStateChange();\n }\n\n public onReviewStateChange(state: Record<string, unknown>): void {\n this.reviewState = state;\n this.emitStateChange();\n }\n\n public loadUserState(state: Partial<TestingDashboardState>): void {\n if (state.activeTab) {\n this.activeTab = state.activeTab;\n const index = this.navigationItems.indexOf(state.activeTab);\n this.selectedIndex = index >= 0 ? index : 0;\n this.visitedTabs.add(state.activeTab);\n this.updateNavigationSelection();\n }\n\n if (state.dashboardState) this.dashboardState = state.dashboardState;\n if (state.runsState) this.runsState = state.runsState;\n if (state.analyticsState) this.analyticsState = state.analyticsState;\n if (state.reviewState) this.reviewState = state.reviewState;\n\n this.cdr.markForCheck();\n }\n\n initDashboard(): void {\n try {\n this.isLoading = true;\n } catch (error) {\n console.error('Error initializing Testing dashboard:', error);\n this.Error.emit(new Error('Failed to initialize Testing dashboard. Please try again.'));\n } finally {\n this.isLoading = false;\n }\n }\n\n loadData(): void {\n if (this.Config?.userState) {\n setTimeout(() => {\n if (this.Config?.userState) {\n this.loadUserState(this.Config.userState);\n }\n }, 0);\n }\n\n this.NotifyLoadComplete();\n }\n\n public getCurrentTabLabel(): string {\n const tabIndex = this.navigationItems.indexOf(this.activeTab);\n return tabIndex >= 0 ? this.navigationConfig[tabIndex].text : 'Testing Dashboard';\n }\n\n private updateNavigationSelection(): void {\n this.navigationConfig.forEach((item, index) => {\n item.selected = this.navigationItems[index] === this.activeTab;\n });\n }\n}\n","<div class=\"testing-dashboard-container\" kendoDialogContainer>\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading Testing Dashboard...\" size=\"large\"></mj-loading>\n </div>\n }\n\n @if (!isLoading) {\n <div class=\"dashboard-content-wrapper\">\n <div class=\"testing-dashboard-nav\">\n @for (navItem of navigationConfig; track $index) {\n <div\n class=\"nav-item\"\n [class.active]=\"navItem.selected\"\n (click)=\"onTabChange(navigationItems[$index])\"\n >\n <i [class]=\"navItem.icon\"></i>\n <span>{{ navItem.text }}</span>\n </div>\n }\n <div class=\"nav-spacer\"></div>\n <app-evaluation-mode-toggle></app-evaluation-mode-toggle>\n </div>\n\n <div class=\"dashboard-content\">\n @if (activeTab === 'dashboard' && hasVisited('dashboard')) {\n <app-testing-dashboard-tab\n [initialState]=\"dashboardState\"\n (stateChange)=\"onDashboardStateChange($event)\"\n ></app-testing-dashboard-tab>\n }\n\n @if (activeTab === 'runs' && hasVisited('runs')) {\n <app-testing-runs\n [initialState]=\"runsState\"\n (stateChange)=\"onRunsStateChange($event)\"\n ></app-testing-runs>\n }\n\n @if (activeTab === 'analytics' && hasVisited('analytics')) {\n <app-testing-analytics\n [initialState]=\"analyticsState\"\n (stateChange)=\"onAnalyticsStateChange($event)\"\n ></app-testing-analytics>\n }\n\n @if (activeTab === 'review' && hasVisited('review')) {\n <app-testing-review\n [initialState]=\"reviewState\"\n (stateChange)=\"onReviewStateChange($event)\"\n ></app-testing-review>\n }\n </div>\n </div>\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"testing-dashboard.component.js","sourceRoot":"","sources":["../../src/Testing/testing-dashboard.component.ts","../../src/Testing/testing-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, AfterViewInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { TestingDialogService, TestingExecutionService, ActiveRun } from '@memberjunction/ng-testing';\n\ninterface TestingDashboardState {\n activeTab: string;\n dashboardState: Record<string, unknown>;\n runsState: Record<string, unknown>;\n analyticsState: Record<string, unknown>;\n reviewState: Record<string, unknown>;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-testing-dashboard',\n templateUrl: './testing-dashboard.component.html',\n styleUrls: ['./testing-dashboard.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n@RegisterClass(BaseDashboard, 'TestingDashboard')\nexport class TestingDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n\n public isLoading = false;\n public activeTab = 'dashboard';\n public selectedIndex = 0;\n\n // Active test runs from execution service\n public ActiveRuns: ActiveRun[] = [];\n\n // Component states\n public dashboardState: Record<string, unknown> | null = null;\n public runsState: Record<string, unknown> | null = null;\n public analyticsState: Record<string, unknown> | null = null;\n public reviewState: Record<string, unknown> | null = null;\n\n // Track visited tabs for lazy loading\n private visitedTabs = new Set<string>();\n\n // Navigation items\n public navigationItems: string[] = ['dashboard', 'runs', 'analytics', 'review'];\n\n public navigationConfig = [\n { text: 'Dashboard', icon: 'fa-solid fa-gauge-high', selected: false },\n { text: 'Runs', icon: 'fa-solid fa-play-circle', selected: false },\n { text: 'Analytics', icon: 'fa-solid fa-chart-bar', selected: false },\n { text: 'Review', icon: 'fa-solid fa-clipboard-check', selected: false }\n ];\n\n private stateChangeSubject = new Subject<TestingDashboardState>();\n private destroy$ = new Subject<void>();\n\n constructor(\n private cdr: ChangeDetectorRef,\n public testingDialogService: TestingDialogService,\n private executionService: TestingExecutionService\n ) {\n super();\n this.setupStateManagement();\n this.updateNavigationSelection();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Testing';\n }\n\n ngAfterViewInit(): void {\n this.visitedTabs.add(this.activeTab);\n this.updateNavigationSelection();\n this.emitStateChange();\n\n this.executionService.ActiveRuns$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(runs => {\n this.ActiveRuns = runs;\n this.cdr.markForCheck();\n });\n\n this.testingDialogService.PanelStateChanged$.pipe(\n takeUntil(this.destroy$)\n ).subscribe((isOpen) => {\n console.log('[TestingDashboard] PanelStateChanged$:', isOpen, 'IsPanelOpen:', this.testingDialogService.IsPanelOpen);\n this.cdr.detectChanges();\n });\n\n this.cdr.detectChanges();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.stateChangeSubject.complete();\n }\n\n public onTabChange(tabId: string): void {\n this.activeTab = tabId;\n const index = this.navigationItems.indexOf(tabId);\n this.selectedIndex = index >= 0 ? index : 0;\n this.updateNavigationSelection();\n this.visitedTabs.add(tabId);\n this.emitStateChange();\n this.cdr.markForCheck();\n }\n\n public hasVisited(tabId: string): boolean {\n return this.visitedTabs.has(tabId);\n }\n\n private setupStateManagement(): void {\n this.stateChangeSubject.pipe(\n debounceTime(50)\n ).subscribe(state => {\n this.UserStateChanged.emit(state);\n });\n }\n\n private emitStateChange(): void {\n const state: TestingDashboardState = {\n activeTab: this.activeTab,\n dashboardState: (this.dashboardState || {}) as Record<string, unknown>,\n runsState: (this.runsState || {}) as Record<string, unknown>,\n analyticsState: (this.analyticsState || {}) as Record<string, unknown>,\n reviewState: (this.reviewState || {}) as Record<string, unknown>\n };\n\n this.stateChangeSubject.next(state);\n }\n\n public onDashboardStateChange(state: Record<string, unknown>): void {\n this.dashboardState = state;\n this.emitStateChange();\n }\n\n public onRunsStateChange(state: Record<string, unknown>): void {\n this.runsState = state;\n this.emitStateChange();\n }\n\n public onAnalyticsStateChange(state: Record<string, unknown>): void {\n this.analyticsState = state;\n this.emitStateChange();\n }\n\n public onReviewStateChange(state: Record<string, unknown>): void {\n this.reviewState = state;\n this.emitStateChange();\n }\n\n public loadUserState(state: Partial<TestingDashboardState>): void {\n if (state.activeTab) {\n this.activeTab = state.activeTab;\n const index = this.navigationItems.indexOf(state.activeTab);\n this.selectedIndex = index >= 0 ? index : 0;\n this.visitedTabs.add(state.activeTab);\n this.updateNavigationSelection();\n }\n\n if (state.dashboardState) this.dashboardState = state.dashboardState;\n if (state.runsState) this.runsState = state.runsState;\n if (state.analyticsState) this.analyticsState = state.analyticsState;\n if (state.reviewState) this.reviewState = state.reviewState;\n\n this.cdr.markForCheck();\n }\n\n initDashboard(): void {\n try {\n this.isLoading = true;\n } catch (error) {\n console.error('Error initializing Testing dashboard:', error);\n this.Error.emit(new Error('Failed to initialize Testing dashboard. Please try again.'));\n } finally {\n this.isLoading = false;\n }\n }\n\n loadData(): void {\n if (this.Config?.userState) {\n setTimeout(() => {\n if (this.Config?.userState) {\n this.loadUserState(this.Config.userState);\n }\n }, 0);\n }\n\n this.NotifyLoadComplete();\n }\n\n public getCurrentTabLabel(): string {\n const tabIndex = this.navigationItems.indexOf(this.activeTab);\n return tabIndex >= 0 ? this.navigationConfig[tabIndex].text : 'Testing Dashboard';\n }\n\n public OnPanelClosed(): void {\n this.testingDialogService.ClosePanel();\n this.cdr.markForCheck();\n }\n\n public OnViewActiveRun(run: ActiveRun): void {\n this.testingDialogService.OpenTestPanel(run.TestId);\n this.cdr.markForCheck();\n }\n\n public OnViewRunningTestFromTab(testId: string): void {\n this.testingDialogService.OpenTestPanel(testId);\n this.cdr.detectChanges();\n }\n\n private updateNavigationSelection(): void {\n this.navigationConfig.forEach((item, index) => {\n item.selected = this.navigationItems[index] === this.activeTab;\n });\n }\n}\n","<div class=\"testing-dashboard-container\">\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading Testing Dashboard...\" size=\"large\"></mj-loading>\n </div>\n }\n\n @if (!isLoading) {\n <!-- Active Runs Banner -->\n @if (ActiveRuns.length > 0) {\n <div class=\"active-runs-banner\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span class=\"active-runs-count\">{{ ActiveRuns.length }} test{{ ActiveRuns.length === 1 ? '' : 's' }} running</span>\n <span class=\"active-runs-detail\">{{ ActiveRuns[0].TestName }} — {{ ActiveRuns[0].Progress }}%</span>\n <button class=\"active-runs-view-btn\" (click)=\"OnViewActiveRun(ActiveRuns[0])\">View</button>\n </div>\n }\n\n <div class=\"dashboard-content-wrapper\">\n <div class=\"testing-dashboard-nav\">\n @for (navItem of navigationConfig; track $index) {\n <div\n class=\"nav-item\"\n [class.active]=\"navItem.selected\"\n (click)=\"onTabChange(navigationItems[$index])\"\n >\n <i [class]=\"navItem.icon\"></i>\n <span>{{ navItem.text }}</span>\n </div>\n }\n <div class=\"nav-spacer\"></div>\n <app-evaluation-mode-toggle></app-evaluation-mode-toggle>\n </div>\n\n <div class=\"dashboard-content\">\n @if (activeTab === 'dashboard' && hasVisited('dashboard')) {\n <app-testing-dashboard-tab\n [initialState]=\"dashboardState\"\n (stateChange)=\"onDashboardStateChange($event)\"\n ></app-testing-dashboard-tab>\n }\n\n @if (activeTab === 'runs' && hasVisited('runs')) {\n <app-testing-runs\n [initialState]=\"runsState\"\n (stateChange)=\"onRunsStateChange($event)\"\n ></app-testing-runs>\n }\n\n @if (activeTab === 'analytics' && hasVisited('analytics')) {\n <app-testing-analytics\n [initialState]=\"analyticsState\"\n (stateChange)=\"onAnalyticsStateChange($event)\"\n ></app-testing-analytics>\n }\n\n @if (activeTab === 'review' && hasVisited('review')) {\n <app-testing-review\n [initialState]=\"reviewState\"\n (stateChange)=\"onReviewStateChange($event)\"\n ></app-testing-review>\n }\n </div>\n </div>\n }\n\n <!-- Slide Panel for Test Execution -->\n @if (testingDialogService.IsPanelOpen) {\n <mj-slide-panel\n Mode=\"slide\"\n [Title]=\"testingDialogService.PanelOptions?.testId ? 'Test Execution' : 'Run Test'\"\n [Resizable]=\"true\"\n (Closed)=\"OnPanelClosed()\">\n <app-test-run-dialog\n [PanelMode]=\"true\"\n [selectedTestId]=\"testingDialogService.PanelOptions?.testId ?? null\"\n [selectedSuiteId]=\"testingDialogService.PanelOptions?.suiteId ?? null\"\n [runMode]=\"testingDialogService.PanelOptions?.mode ?? 'test'\"\n (PanelClose)=\"OnPanelClosed()\">\n </app-test-run-dialog>\n </mj-slide-panel>\n }\n</div>\n"]}
|
|
@@ -18,25 +18,20 @@ import * as i16 from "./Actions/components/explorer/new-category-panel.component
|
|
|
18
18
|
import * as i17 from "./Actions/components/explorer/new-action-panel.component";
|
|
19
19
|
import * as i18 from "@angular/common";
|
|
20
20
|
import * as i19 from "@angular/forms";
|
|
21
|
-
import * as i20 from "@
|
|
22
|
-
import * as i21 from "@
|
|
23
|
-
import * as i22 from "@
|
|
24
|
-
import * as i23 from "@
|
|
25
|
-
import * as i24 from "@
|
|
26
|
-
import * as i25 from "@
|
|
27
|
-
import * as i26 from "@memberjunction/ng-
|
|
28
|
-
import * as i27 from "@memberjunction/ng-code-editor";
|
|
29
|
-
import * as i28 from "@memberjunction/ng-action-gallery";
|
|
30
|
-
import * as i29 from "@memberjunction/ng-ai-test-harness";
|
|
31
|
-
import * as i30 from "@memberjunction/ng-actions";
|
|
32
|
-
import * as i31 from "@memberjunction/ng-shared-generic";
|
|
21
|
+
import * as i20 from "@memberjunction/ng-ui-components";
|
|
22
|
+
import * as i21 from "@memberjunction/ng-container-directives";
|
|
23
|
+
import * as i22 from "@memberjunction/ng-code-editor";
|
|
24
|
+
import * as i23 from "@memberjunction/ng-action-gallery";
|
|
25
|
+
import * as i24 from "@memberjunction/ng-ai-test-harness";
|
|
26
|
+
import * as i25 from "@memberjunction/ng-actions";
|
|
27
|
+
import * as i26 from "@memberjunction/ng-shared-generic";
|
|
33
28
|
/**
|
|
34
29
|
* ActionsDashboardsModule — Actions feature area: overview, execution monitoring,
|
|
35
30
|
* code management, entity integration, security permissions, and Action Explorer.
|
|
36
31
|
*/
|
|
37
32
|
export declare class ActionsDashboardsModule {
|
|
38
33
|
static ɵfac: i0.ɵɵFactoryDeclaration<ActionsDashboardsModule, never>;
|
|
39
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ActionsDashboardsModule, [typeof i1.ActionsOverviewComponent, typeof i2.ExecutionMonitoringComponent, typeof i3.ScheduledActionsComponent, typeof i4.CodeManagementComponent, typeof i5.EntityIntegrationComponent, typeof i6.SecurityPermissionsComponent, typeof i7.ActionsListViewComponent, typeof i8.ExecutionsListViewComponent, typeof i9.CategoriesListViewComponent, typeof i10.ActionExplorerComponent, typeof i11.ActionTreePanelComponent, typeof i12.ActionToolbarComponent, typeof i13.ActionBreadcrumbComponent, typeof i14.ActionCardComponent, typeof i15.ActionListItemComponent, typeof i16.NewCategoryPanelComponent, typeof i17.NewActionPanelComponent], [typeof i18.CommonModule, typeof i19.FormsModule, typeof i19.ReactiveFormsModule, typeof i20.
|
|
34
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ActionsDashboardsModule, [typeof i1.ActionsOverviewComponent, typeof i2.ExecutionMonitoringComponent, typeof i3.ScheduledActionsComponent, typeof i4.CodeManagementComponent, typeof i5.EntityIntegrationComponent, typeof i6.SecurityPermissionsComponent, typeof i7.ActionsListViewComponent, typeof i8.ExecutionsListViewComponent, typeof i9.CategoriesListViewComponent, typeof i10.ActionExplorerComponent, typeof i11.ActionTreePanelComponent, typeof i12.ActionToolbarComponent, typeof i13.ActionBreadcrumbComponent, typeof i14.ActionCardComponent, typeof i15.ActionListItemComponent, typeof i16.NewCategoryPanelComponent, typeof i17.NewActionPanelComponent], [typeof i18.CommonModule, typeof i19.FormsModule, typeof i19.ReactiveFormsModule, typeof i20.MJButtonDirective, typeof i20.MJDropdownComponent, typeof i21.ContainerDirectivesModule, typeof i22.CodeEditorModule, typeof i23.ActionGalleryModule, typeof i24.AITestHarnessModule, typeof i25.ActionsModule, typeof i26.SharedGenericModule], [typeof i1.ActionsOverviewComponent, typeof i2.ExecutionMonitoringComponent, typeof i3.ScheduledActionsComponent, typeof i4.CodeManagementComponent, typeof i5.EntityIntegrationComponent, typeof i6.SecurityPermissionsComponent, typeof i10.ActionExplorerComponent, typeof i11.ActionTreePanelComponent, typeof i12.ActionToolbarComponent, typeof i13.ActionBreadcrumbComponent, typeof i14.ActionCardComponent, typeof i15.ActionListItemComponent, typeof i16.NewCategoryPanelComponent, typeof i17.NewActionPanelComponent]>;
|
|
40
35
|
static ɵinj: i0.ɵɵInjectorDeclaration<ActionsDashboardsModule>;
|
|
41
36
|
}
|
|
42
37
|
//# sourceMappingURL=actions-dashboards.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions-dashboards.module.d.ts","sourceRoot":"","sources":["../src/actions-dashboards.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"actions-dashboards.module.d.ts","sourceRoot":"","sources":["../src/actions-dashboards.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA;;;GAGG;AACH,qBAkDa,uBAAuB;yCAAvB,uBAAuB;0CAAvB,uBAAuB;0CAAvB,uBAAuB;CAAI"}
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
-
import {
|
|
5
|
-
import { GridModule } from '@progress/kendo-angular-grid';
|
|
6
|
-
import { DropDownsModule } from '@progress/kendo-angular-dropdowns';
|
|
7
|
-
import { InputsModule } from '@progress/kendo-angular-inputs';
|
|
8
|
-
import { DialogsModule, WindowModule } from '@progress/kendo-angular-dialog';
|
|
9
|
-
import { TreeViewModule } from '@progress/kendo-angular-treeview';
|
|
4
|
+
import { MJButtonDirective, MJDropdownComponent } from '@memberjunction/ng-ui-components';
|
|
10
5
|
import { ContainerDirectivesModule } from '@memberjunction/ng-container-directives';
|
|
11
6
|
import { CodeEditorModule } from '@memberjunction/ng-code-editor';
|
|
12
7
|
import { ActionGalleryModule } from '@memberjunction/ng-action-gallery';
|
|
@@ -36,13 +31,7 @@ export class ActionsDashboardsModule {
|
|
|
36
31
|
static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [CommonModule,
|
|
37
32
|
FormsModule,
|
|
38
33
|
ReactiveFormsModule,
|
|
39
|
-
|
|
40
|
-
GridModule,
|
|
41
|
-
DropDownsModule,
|
|
42
|
-
InputsModule,
|
|
43
|
-
DialogsModule,
|
|
44
|
-
WindowModule,
|
|
45
|
-
TreeViewModule,
|
|
34
|
+
MJDropdownComponent,
|
|
46
35
|
ContainerDirectivesModule,
|
|
47
36
|
CodeEditorModule,
|
|
48
37
|
ActionGalleryModule,
|
|
@@ -76,13 +65,8 @@ export class ActionsDashboardsModule {
|
|
|
76
65
|
CommonModule,
|
|
77
66
|
FormsModule,
|
|
78
67
|
ReactiveFormsModule,
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
DropDownsModule,
|
|
82
|
-
InputsModule,
|
|
83
|
-
DialogsModule,
|
|
84
|
-
WindowModule,
|
|
85
|
-
TreeViewModule,
|
|
68
|
+
MJButtonDirective,
|
|
69
|
+
MJDropdownComponent,
|
|
86
70
|
ContainerDirectivesModule,
|
|
87
71
|
CodeEditorModule,
|
|
88
72
|
ActionGalleryModule,
|
|
@@ -127,13 +111,8 @@ export class ActionsDashboardsModule {
|
|
|
127
111
|
NewActionPanelComponent], imports: [CommonModule,
|
|
128
112
|
FormsModule,
|
|
129
113
|
ReactiveFormsModule,
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
DropDownsModule,
|
|
133
|
-
InputsModule,
|
|
134
|
-
DialogsModule,
|
|
135
|
-
WindowModule,
|
|
136
|
-
TreeViewModule,
|
|
114
|
+
MJButtonDirective,
|
|
115
|
+
MJDropdownComponent,
|
|
137
116
|
ContainerDirectivesModule,
|
|
138
117
|
CodeEditorModule,
|
|
139
118
|
ActionGalleryModule,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions-dashboards.module.js","sourceRoot":"","sources":["../src/actions-dashboards.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"actions-dashboards.module.js","sourceRoot":"","sources":["../src/actions-dashboards.module.ts"],"names":[],"mappings":"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","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MJButtonDirective, MJDropdownComponent } from '@memberjunction/ng-ui-components';\nimport { ContainerDirectivesModule } from '@memberjunction/ng-container-directives';\nimport { CodeEditorModule } from '@memberjunction/ng-code-editor';\nimport { ActionGalleryModule } from '@memberjunction/ng-action-gallery';\nimport { AITestHarnessModule } from '@memberjunction/ng-ai-test-harness';\nimport { ActionsModule } from '@memberjunction/ng-actions';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\n\n// Actions Components\nimport { ActionsOverviewComponent } from './Actions/components/actions-overview.component';\nimport { ExecutionMonitoringComponent as ActionsExecutionMonitoringComponent } from './Actions/components/execution-monitoring.component';\nimport { ScheduledActionsComponent } from './Actions/components/scheduled-actions.component';\nimport { CodeManagementComponent } from './Actions/components/code-management.component';\nimport { EntityIntegrationComponent } from './Actions/components/entity-integration.component';\nimport { SecurityPermissionsComponent } from './Actions/components/security-permissions.component';\nimport { ActionsListViewComponent } from './Actions/components/actions-list-view.component';\nimport { ExecutionsListViewComponent } from './Actions/components/executions-list-view.component';\nimport { CategoriesListViewComponent } from './Actions/components/categories-list-view.component';\n// Action Explorer Components\nimport {\n ActionExplorerComponent,\n ActionTreePanelComponent,\n ActionToolbarComponent,\n ActionBreadcrumbComponent,\n ActionCardComponent,\n ActionListItemComponent,\n NewCategoryPanelComponent,\n NewActionPanelComponent\n} from './Actions/components/explorer';\n\n/**\n * ActionsDashboardsModule — Actions feature area: overview, execution monitoring,\n * code management, entity integration, security permissions, and Action Explorer.\n */\n@NgModule({\n declarations: [\n ActionsOverviewComponent,\n ActionsExecutionMonitoringComponent,\n ScheduledActionsComponent,\n CodeManagementComponent,\n EntityIntegrationComponent,\n SecurityPermissionsComponent,\n ActionsListViewComponent,\n ExecutionsListViewComponent,\n CategoriesListViewComponent,\n ActionExplorerComponent,\n ActionTreePanelComponent,\n ActionToolbarComponent,\n ActionBreadcrumbComponent,\n ActionCardComponent,\n ActionListItemComponent,\n NewCategoryPanelComponent,\n NewActionPanelComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MJButtonDirective,\n MJDropdownComponent,\n ContainerDirectivesModule,\n CodeEditorModule,\n ActionGalleryModule,\n AITestHarnessModule,\n ActionsModule,\n SharedGenericModule\n ],\n exports: [\n ActionsOverviewComponent,\n ActionsExecutionMonitoringComponent,\n ScheduledActionsComponent,\n CodeManagementComponent,\n EntityIntegrationComponent,\n SecurityPermissionsComponent,\n ActionExplorerComponent,\n ActionTreePanelComponent,\n ActionToolbarComponent,\n ActionBreadcrumbComponent,\n ActionCardComponent,\n ActionListItemComponent,\n NewCategoryPanelComponent,\n NewActionPanelComponent\n ]\n})\nexport class ActionsDashboardsModule { }\n"]}
|