@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
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
import { OnInit, OnDestroy } from '@angular/core';
|
|
1
|
+
import { OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
|
|
2
2
|
import { ResourceData } from '@memberjunction/core-entities';
|
|
3
3
|
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
4
|
+
import { TestingDialogService } from '@memberjunction/ng-testing';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
/**
|
|
6
7
|
* Testing Dashboard Tab Resource - displays the main dashboard overview
|
|
7
8
|
*/
|
|
8
9
|
export declare class TestingDashboardTabResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {
|
|
10
|
+
testingDialogService: TestingDialogService;
|
|
11
|
+
private cdr;
|
|
12
|
+
private destroy$;
|
|
13
|
+
constructor(testingDialogService: TestingDialogService, cdr: ChangeDetectorRef);
|
|
9
14
|
ngOnInit(): void;
|
|
10
15
|
ngOnDestroy(): void;
|
|
16
|
+
OnPanelClosed(): void;
|
|
11
17
|
GetResourceDisplayName(data: ResourceData): Promise<string>;
|
|
12
18
|
GetResourceIconClass(data: ResourceData): Promise<string>;
|
|
13
19
|
static ɵfac: i0.ɵɵFactoryDeclaration<TestingDashboardTabResourceComponent, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing-dashboard-tab-resource.component.d.ts","sourceRoot":"","sources":["../../../src/Testing/components/testing-dashboard-tab-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"testing-dashboard-tab-resource.component.d.ts","sourceRoot":"","sources":["../../../src/Testing/components/testing-dashboard-tab-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAA2B,MAAM,eAAe,CAAC;AAGzG,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;;AAElE;;GAEG;AACH,qBAmCa,oCAAqC,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS;IAIjG,oBAAoB,EAAE,oBAAoB;IACjD,OAAO,CAAC,GAAG;IAJb,OAAO,CAAC,QAAQ,CAAuB;gBAG9B,oBAAoB,EAAE,oBAAoB,EACzC,GAAG,EAAE,iBAAiB;IAKhC,QAAQ,IAAI,IAAI;IAUhB,WAAW,IAAI,IAAI;IAKZ,aAAa,IAAI,IAAI;IAKtB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;yCAlCpD,oCAAoC;2CAApC,oCAAoC;CAqChD"}
|
|
@@ -4,19 +4,53 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { Component } from '@angular/core';
|
|
7
|
+
import { Component, ChangeDetectionStrategy } from '@angular/core';
|
|
8
|
+
import { Subject } from 'rxjs';
|
|
9
|
+
import { takeUntil } from 'rxjs/operators';
|
|
8
10
|
import { RegisterClass } from '@memberjunction/global';
|
|
9
11
|
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
10
12
|
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "
|
|
13
|
+
import * as i1 from "@memberjunction/ng-testing";
|
|
14
|
+
import * as i2 from "@memberjunction/ng-versions";
|
|
15
|
+
import * as i3 from "./testing-dashboard-tab.component";
|
|
16
|
+
function TestingDashboardTabResourceComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
17
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
18
|
+
i0.ɵɵelementStart(0, "mj-slide-panel", 2);
|
|
19
|
+
i0.ɵɵlistener("Closed", function TestingDashboardTabResourceComponent_Conditional_2_Template_mj_slide_panel_Closed_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnPanelClosed()); });
|
|
20
|
+
i0.ɵɵelementStart(1, "app-test-run-dialog", 3);
|
|
21
|
+
i0.ɵɵlistener("PanelClose", function TestingDashboardTabResourceComponent_Conditional_2_Template_app_test_run_dialog_PanelClose_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnPanelClosed()); });
|
|
22
|
+
i0.ɵɵelementEnd()();
|
|
23
|
+
} if (rf & 2) {
|
|
24
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
25
|
+
i0.ɵɵproperty("Title", (ctx_r1.testingDialogService.PanelOptions == null ? null : ctx_r1.testingDialogService.PanelOptions.testId) ? "Test Execution" : "Run Test")("Resizable", true);
|
|
26
|
+
i0.ɵɵadvance();
|
|
27
|
+
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");
|
|
28
|
+
} }
|
|
12
29
|
/**
|
|
13
30
|
* Testing Dashboard Tab Resource - displays the main dashboard overview
|
|
14
31
|
*/
|
|
15
32
|
let TestingDashboardTabResourceComponent = class TestingDashboardTabResourceComponent extends BaseResourceComponent {
|
|
33
|
+
testingDialogService;
|
|
34
|
+
cdr;
|
|
35
|
+
destroy$ = new Subject();
|
|
36
|
+
constructor(testingDialogService, cdr) {
|
|
37
|
+
super();
|
|
38
|
+
this.testingDialogService = testingDialogService;
|
|
39
|
+
this.cdr = cdr;
|
|
40
|
+
}
|
|
16
41
|
ngOnInit() {
|
|
42
|
+
this.testingDialogService.PanelStateChanged$.pipe(takeUntil(this.destroy$)).subscribe(() => {
|
|
43
|
+
this.cdr.detectChanges();
|
|
44
|
+
});
|
|
17
45
|
this.NotifyLoadComplete();
|
|
18
46
|
}
|
|
19
47
|
ngOnDestroy() {
|
|
48
|
+
this.destroy$.next();
|
|
49
|
+
this.destroy$.complete();
|
|
50
|
+
}
|
|
51
|
+
OnPanelClosed() {
|
|
52
|
+
this.testingDialogService.ClosePanel();
|
|
53
|
+
this.cdr.markForCheck();
|
|
20
54
|
}
|
|
21
55
|
async GetResourceDisplayName(data) {
|
|
22
56
|
return 'Overview';
|
|
@@ -24,12 +58,16 @@ let TestingDashboardTabResourceComponent = class TestingDashboardTabResourceComp
|
|
|
24
58
|
async GetResourceIconClass(data) {
|
|
25
59
|
return 'fa-solid fa-gauge-high';
|
|
26
60
|
}
|
|
27
|
-
static ɵfac =
|
|
28
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestingDashboardTabResourceComponent, selectors: [["mj-testing-dashboard-tab-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
61
|
+
static ɵfac = function TestingDashboardTabResourceComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TestingDashboardTabResourceComponent)(i0.ɵɵdirectiveInject(i1.TestingDialogService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
62
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestingDashboardTabResourceComponent, selectors: [["mj-testing-dashboard-tab-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 1, consts: [[1, "resource-container"], ["Mode", "slide", 3, "Title", "Resizable"], ["Mode", "slide", 3, "Closed", "Title", "Resizable"], [3, "PanelClose", "PanelMode", "selectedTestId", "selectedSuiteId", "runMode"]], template: function TestingDashboardTabResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
29
63
|
i0.ɵɵelementStart(0, "div", 0);
|
|
30
64
|
i0.ɵɵelement(1, "app-testing-dashboard-tab");
|
|
31
65
|
i0.ɵɵelementEnd();
|
|
32
|
-
|
|
66
|
+
i0.ɵɵconditionalCreate(2, TestingDashboardTabResourceComponent_Conditional_2_Template, 2, 6, "mj-slide-panel", 1);
|
|
67
|
+
} if (rf & 2) {
|
|
68
|
+
i0.ɵɵadvance(2);
|
|
69
|
+
i0.ɵɵconditional(ctx.testingDialogService.IsPanelOpen ? 2 : -1);
|
|
70
|
+
} }, dependencies: [i1.TestRunDialogComponent, i2.MjSlidePanelComponent, i3.TestingDashboardTabComponent], styles: [".resource-container[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n overflow: auto;\n }"], changeDetection: 0 });
|
|
33
71
|
};
|
|
34
72
|
TestingDashboardTabResourceComponent = __decorate([
|
|
35
73
|
RegisterClass(BaseResourceComponent, 'TestingDashboardTabResource')
|
|
@@ -37,11 +75,28 @@ TestingDashboardTabResourceComponent = __decorate([
|
|
|
37
75
|
export { TestingDashboardTabResourceComponent };
|
|
38
76
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TestingDashboardTabResourceComponent, [{
|
|
39
77
|
type: Component,
|
|
40
|
-
args: [{ standalone: false, selector: 'mj-testing-dashboard-tab-resource', template: `
|
|
78
|
+
args: [{ standalone: false, selector: 'mj-testing-dashboard-tab-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
41
79
|
<div class="resource-container">
|
|
42
80
|
<app-testing-dashboard-tab></app-testing-dashboard-tab>
|
|
43
81
|
</div>
|
|
82
|
+
|
|
83
|
+
<!-- Slide Panel for Test Execution -->
|
|
84
|
+
@if (testingDialogService.IsPanelOpen) {
|
|
85
|
+
<mj-slide-panel
|
|
86
|
+
Mode="slide"
|
|
87
|
+
[Title]="testingDialogService.PanelOptions?.testId ? 'Test Execution' : 'Run Test'"
|
|
88
|
+
[Resizable]="true"
|
|
89
|
+
(Closed)="OnPanelClosed()">
|
|
90
|
+
<app-test-run-dialog
|
|
91
|
+
[PanelMode]="true"
|
|
92
|
+
[selectedTestId]="testingDialogService.PanelOptions?.testId ?? null"
|
|
93
|
+
[selectedSuiteId]="testingDialogService.PanelOptions?.suiteId ?? null"
|
|
94
|
+
[runMode]="testingDialogService.PanelOptions?.mode ?? 'test'"
|
|
95
|
+
(PanelClose)="OnPanelClosed()">
|
|
96
|
+
</app-test-run-dialog>
|
|
97
|
+
</mj-slide-panel>
|
|
98
|
+
}
|
|
44
99
|
`, styles: ["\n .resource-container {\n width: 100%;\n height: 100%;\n overflow: auto;\n }\n "] }]
|
|
45
|
-
}],
|
|
46
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestingDashboardTabResourceComponent, { className: "TestingDashboardTabResourceComponent", filePath: "src/Testing/components/testing-dashboard-tab-resource.component.ts", lineNumber:
|
|
100
|
+
}], () => [{ type: i1.TestingDialogService }, { type: i0.ChangeDetectorRef }], null); })();
|
|
101
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestingDashboardTabResourceComponent, { className: "TestingDashboardTabResourceComponent", filePath: "src/Testing/components/testing-dashboard-tab-resource.component.ts", lineNumber: 47 }); })();
|
|
47
102
|
//# sourceMappingURL=testing-dashboard-tab-resource.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing-dashboard-tab-resource.component.js","sourceRoot":"","sources":["../../../src/Testing/components/testing-dashboard-tab-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"testing-dashboard-tab-resource.component.js","sourceRoot":"","sources":["../../../src/Testing/components/testing-dashboard-tab-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAwC,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;;;;;;IAkB5D,yCAI6B;IAA3B,kNAAU,sBAAe,KAAC;IAC1B,8CAKiC;IAA/B,+NAAc,sBAAe,KAAC;IAElC,AADE,iBAAsB,EACP;;;IATf,AADA,mKAAmF,mBACjE;IAGhB,cAAkB;IAGlB,AADA,AADA,AADA,gCAAkB,uIACkD,yIACE,gIACT;;AAxBvE;;GAEG;AAoCI,IAAM,oCAAoC,GAA1C,MAAM,oCAAqC,SAAQ,qBAAqB;IAIpE;IACC;IAJF,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAEvC,YACS,oBAA0C,EACzC,GAAsB;QAE9B,KAAK,EAAE,CAAC;QAHD,yBAAoB,GAApB,oBAAoB,CAAsB;QACzC,QAAG,GAAH,GAAG,CAAmB;IAGhC,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,IAAI,CAC/C,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAEM,aAAa;QAClB,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,IAAkB;QAC7C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,IAAkB;QAC3C,OAAO,wBAAwB,CAAC;IAClC,CAAC;8HApCU,oCAAoC;6DAApC,oCAAoC;YA7B7C,8BAAgC;YAC9B,4CAAuD;YACzD,iBAAM;YAGN,iHAAwC;;YAAxC,eAcC;YAdD,+DAcC;;;AAUQ,oCAAoC;IAnChD,aAAa,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;GAmCvD,oCAAoC,CAqChD;;iFArCY,oCAAoC;cAlChD,SAAS;6BACI,KAAK,YACP,mCAAmC,mBAC5B,uBAAuB,CAAC,MAAM,YACrC;;;;;;;;;;;;;;;;;;;;;GAqBT;;kFASU,oCAAoC","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { TestingDialogService } from '@memberjunction/ng-testing';\n\n/**\n * Testing Dashboard Tab Resource - displays the main dashboard overview\n */\n@RegisterClass(BaseResourceComponent, 'TestingDashboardTabResource')\n@Component({\n standalone: false,\n selector: 'mj-testing-dashboard-tab-resource',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"resource-container\">\n <app-testing-dashboard-tab></app-testing-dashboard-tab>\n </div>\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 `,\n styles: [`\n .resource-container {\n width: 100%;\n height: 100%;\n overflow: auto;\n }\n `]\n})\nexport class TestingDashboardTabResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n private destroy$ = new Subject<void>();\n\n constructor(\n public testingDialogService: TestingDialogService,\n private cdr: ChangeDetectorRef\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.testingDialogService.PanelStateChanged$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.cdr.detectChanges();\n });\n\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n public OnPanelClosed(): void {\n this.testingDialogService.ClosePanel();\n this.cdr.markForCheck();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Overview';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-gauge-high';\n }\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { OnInit, OnDestroy, EventEmitter, ChangeDetectorRef } from '@angular/core';
|
|
2
2
|
import { TestingInstrumentationService, TestRunSummary, SuiteHierarchyNode } from '../services/testing-instrumentation.service';
|
|
3
3
|
import { KPICardData } from '../../AI/components/widgets/kpi-card.component';
|
|
4
|
+
import { TestingExecutionService, TestingDialogService } from '@memberjunction/ng-testing';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
/** Status type union matching TestRunSummary */
|
|
6
7
|
type TestRunStatus = 'Passed' | 'Failed' | 'Skipped' | 'Error' | 'Running' | 'Timeout';
|
|
@@ -15,6 +16,8 @@ interface TestAlert {
|
|
|
15
16
|
}
|
|
16
17
|
export declare class TestingDashboardTabComponent implements OnInit, OnDestroy {
|
|
17
18
|
private instrumentationService;
|
|
19
|
+
private executionService;
|
|
20
|
+
private testingDialogService;
|
|
18
21
|
private cdr;
|
|
19
22
|
initialState: Record<string, unknown> | null;
|
|
20
23
|
stateChange: EventEmitter<Record<string, unknown>>;
|
|
@@ -26,10 +29,14 @@ export declare class TestingDashboardTabComponent implements OnInit, OnDestroy {
|
|
|
26
29
|
RecentRuns: TestRunSummary[];
|
|
27
30
|
SortedSuites: SuiteHierarchyNode[];
|
|
28
31
|
Alerts: TestAlert[];
|
|
29
|
-
|
|
32
|
+
private activeRunsMap;
|
|
33
|
+
constructor(instrumentationService: TestingInstrumentationService, executionService: TestingExecutionService, testingDialogService: TestingDialogService, cdr: ChangeDetectorRef);
|
|
30
34
|
ngOnInit(): Promise<void>;
|
|
31
35
|
ngOnDestroy(): void;
|
|
32
36
|
OnRefresh(): void;
|
|
37
|
+
OnViewRunningTest(run: TestRunSummary): void;
|
|
38
|
+
GetActiveRunProgress(testId: string): number;
|
|
39
|
+
GetActiveRunStep(testId: string): string;
|
|
33
40
|
OnOpenRun(run: TestRunSummary): void;
|
|
34
41
|
OnOpenAlert(alert: TestAlert): void;
|
|
35
42
|
FormatDuration(ms: number): string;
|
|
@@ -37,6 +44,7 @@ export declare class TestingDashboardTabComponent implements OnInit, OnDestroy {
|
|
|
37
44
|
FormatCost(cost: number): string;
|
|
38
45
|
GetPassRateColor(rate: number): string;
|
|
39
46
|
private subscribeToStreams;
|
|
47
|
+
private subscribeActiveRuns;
|
|
40
48
|
private subscribeLoading;
|
|
41
49
|
private subscribeKpis;
|
|
42
50
|
private subscribeTestRuns;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing-dashboard-tab.component.d.ts","sourceRoot":"","sources":["../../../src/Testing/components/testing-dashboard-tab.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACM,MAAM,EAAE,SAAS,EAAiB,YAAY,EACzD,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAKvB,OAAO,EACL,6BAA6B,EAE7B,cAAc,EACd,kBAAkB,EACnB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,gDAAgD,CAAC;;
|
|
1
|
+
{"version":3,"file":"testing-dashboard-tab.component.d.ts","sourceRoot":"","sources":["../../../src/Testing/components/testing-dashboard-tab.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACM,MAAM,EAAE,SAAS,EAAiB,YAAY,EACzD,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAKvB,OAAO,EACL,6BAA6B,EAE7B,cAAc,EACd,kBAAkB,EACnB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,gDAAgD,CAAC;AAE7E,OAAO,EAAE,uBAAuB,EAAa,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;;AAEtG,gDAAgD;AAChD,KAAK,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAEvF,wCAAwC;AACxC,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,GAAG,WAAW,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,IAAI,CAAC;CACnB;AAED,qBA+iBa,4BAA6B,YAAW,MAAM,EAAE,SAAS;IAkBlE,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,GAAG;IAnBJ,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAQ;IACnD,WAAW,wCAA+C;IAEpE,OAAO,CAAC,QAAQ,CAAuB;IAEvC,qCAAqC;IACrC,SAAS,UAAS;IAClB,QAAQ,EAAE,WAAW,EAAE,CAAM;IAC7B,YAAY,EAAE,cAAc,EAAE,CAAM;IACpC,UAAU,EAAE,cAAc,EAAE,CAAM;IAClC,YAAY,EAAE,kBAAkB,EAAE,CAAM;IACxC,MAAM,EAAE,SAAS,EAAE,CAAM;IAEzB,OAAO,CAAC,aAAa,CAAgC;gBAG3C,sBAAsB,EAAE,6BAA6B,EACrD,gBAAgB,EAAE,uBAAuB,EACzC,oBAAoB,EAAE,oBAAoB,EAC1C,GAAG,EAAE,iBAAiB;IAO1B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B,WAAW,IAAI,IAAI;IASnB,SAAS,IAAI,IAAI;IAIjB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAI5C,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI5C,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAOxC,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAOpC,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAOnC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IASlC,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAenC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAUtC,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,aAAa;IAkDrB,OAAO,CAAC,WAAW;IAoBnB,qDAAqD;IACrD,OAAO,CAAC,iBAAiB;IAmCzB,uCAAuC;IACvC,OAAO,CAAC,eAAe;IAiBvB,6DAA6D;IAC7D,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,YAAY;yCAlTT,4BAA4B;2CAA5B,4BAA4B;CA0TxC"}
|
|
@@ -40,26 +40,41 @@ function TestingDashboardTabComponent_Conditional_1_Conditional_14_Template(rf,
|
|
|
40
40
|
i0.ɵɵelementEnd();
|
|
41
41
|
} }
|
|
42
42
|
function TestingDashboardTabComponent_Conditional_1_Conditional_15_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
-
i0.ɵɵ
|
|
44
|
-
i0.ɵɵ
|
|
43
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
44
|
+
i0.ɵɵelementStart(0, "div", 31);
|
|
45
|
+
i0.ɵɵlistener("click", function TestingDashboardTabComponent_Conditional_1_Conditional_15_For_2_Template_div_click_0_listener() { const run_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnViewRunningTest(run_r5)); });
|
|
46
|
+
i0.ɵɵelementStart(1, "div", 32)(2, "div", 33);
|
|
47
|
+
i0.ɵɵtext(3);
|
|
45
48
|
i0.ɵɵelementEnd();
|
|
46
|
-
i0.ɵɵelementStart(
|
|
49
|
+
i0.ɵɵelementStart(4, "div", 34);
|
|
47
50
|
i0.ɵɵtext(5);
|
|
51
|
+
i0.ɵɵelementEnd()();
|
|
52
|
+
i0.ɵɵelementStart(6, "div", 35)(7, "span", 36);
|
|
53
|
+
i0.ɵɵtext(8);
|
|
48
54
|
i0.ɵɵelementEnd();
|
|
49
|
-
i0.ɵɵelementStart(
|
|
50
|
-
i0.ɵɵelement(
|
|
55
|
+
i0.ɵɵelementStart(9, "span", 37);
|
|
56
|
+
i0.ɵɵelement(10, "span", 38);
|
|
57
|
+
i0.ɵɵelementEnd();
|
|
58
|
+
i0.ɵɵelementStart(11, "span", 39);
|
|
59
|
+
i0.ɵɵtext(12);
|
|
51
60
|
i0.ɵɵelementEnd()()();
|
|
52
61
|
} if (rf & 2) {
|
|
53
|
-
const
|
|
62
|
+
const run_r5 = ctx.$implicit;
|
|
54
63
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
64
|
+
i0.ɵɵadvance(3);
|
|
65
|
+
i0.ɵɵtextInterpolate(run_r5.testName);
|
|
55
66
|
i0.ɵɵadvance(2);
|
|
56
|
-
i0.ɵɵtextInterpolate(
|
|
67
|
+
i0.ɵɵtextInterpolate(ctx_r1.GetActiveRunStep(run_r5.testId));
|
|
57
68
|
i0.ɵɵadvance(3);
|
|
58
|
-
i0.ɵɵtextInterpolate(ctx_r1.FormatDuration(
|
|
69
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatDuration(run_r5.duration));
|
|
70
|
+
i0.ɵɵadvance(2);
|
|
71
|
+
i0.ɵɵstyleProp("width", ctx_r1.GetActiveRunProgress(run_r5.testId), "%");
|
|
72
|
+
i0.ɵɵadvance(2);
|
|
73
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.GetActiveRunProgress(run_r5.testId), "%");
|
|
59
74
|
} }
|
|
60
75
|
function TestingDashboardTabComponent_Conditional_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
61
76
|
i0.ɵɵelementStart(0, "div", 12);
|
|
62
|
-
i0.ɵɵrepeaterCreate(1, TestingDashboardTabComponent_Conditional_1_Conditional_15_For_2_Template,
|
|
77
|
+
i0.ɵɵrepeaterCreate(1, TestingDashboardTabComponent_Conditional_1_Conditional_15_For_2_Template, 13, 6, "div", 30, _forTrack1);
|
|
63
78
|
i0.ɵɵelementEnd();
|
|
64
79
|
} if (rf & 2) {
|
|
65
80
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -67,37 +82,37 @@ function TestingDashboardTabComponent_Conditional_1_Conditional_15_Template(rf,
|
|
|
67
82
|
i0.ɵɵrepeater(ctx_r1.RunningTests);
|
|
68
83
|
} }
|
|
69
84
|
function TestingDashboardTabComponent_Conditional_1_For_24_Template(rf, ctx) { if (rf & 1) {
|
|
70
|
-
const
|
|
71
|
-
i0.ɵɵelementStart(0, "div",
|
|
72
|
-
i0.ɵɵlistener("click", function TestingDashboardTabComponent_Conditional_1_For_24_Template_div_click_0_listener() { const
|
|
73
|
-
i0.ɵɵelementStart(1, "div",
|
|
85
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
86
|
+
i0.ɵɵelementStart(0, "div", 40);
|
|
87
|
+
i0.ɵɵlistener("click", function TestingDashboardTabComponent_Conditional_1_For_24_Template_div_click_0_listener() { const run_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnOpenRun(run_r7)); });
|
|
88
|
+
i0.ɵɵelementStart(1, "div", 41)(2, "span", 42);
|
|
74
89
|
i0.ɵɵtext(3);
|
|
75
90
|
i0.ɵɵelementEnd();
|
|
76
|
-
i0.ɵɵelementStart(4, "span",
|
|
91
|
+
i0.ɵɵelementStart(4, "span", 43);
|
|
77
92
|
i0.ɵɵtext(5);
|
|
78
93
|
i0.ɵɵelementEnd()();
|
|
79
|
-
i0.ɵɵelementStart(6, "div",
|
|
80
|
-
i0.ɵɵelement(7, "app-test-status-badge",
|
|
81
|
-
i0.ɵɵelementStart(9, "span",
|
|
94
|
+
i0.ɵɵelementStart(6, "div", 44);
|
|
95
|
+
i0.ɵɵelement(7, "app-test-status-badge", 45)(8, "app-score-indicator", 46);
|
|
96
|
+
i0.ɵɵelementStart(9, "span", 47);
|
|
82
97
|
i0.ɵɵtext(10);
|
|
83
98
|
i0.ɵɵelementEnd();
|
|
84
|
-
i0.ɵɵelement(11, "app-cost-display",
|
|
99
|
+
i0.ɵɵelement(11, "app-cost-display", 48);
|
|
85
100
|
i0.ɵɵelementEnd()();
|
|
86
101
|
} if (rf & 2) {
|
|
87
|
-
const
|
|
102
|
+
const run_r7 = ctx.$implicit;
|
|
88
103
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
89
104
|
i0.ɵɵadvance(3);
|
|
90
|
-
i0.ɵɵtextInterpolate(
|
|
105
|
+
i0.ɵɵtextInterpolate(run_r7.testName);
|
|
91
106
|
i0.ɵɵadvance(2);
|
|
92
|
-
i0.ɵɵtextInterpolate(ctx_r1.FormatTimestamp(
|
|
107
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatTimestamp(run_r7.runDateTime));
|
|
93
108
|
i0.ɵɵadvance(2);
|
|
94
|
-
i0.ɵɵproperty("status",
|
|
109
|
+
i0.ɵɵproperty("status", run_r7.status);
|
|
95
110
|
i0.ɵɵadvance();
|
|
96
|
-
i0.ɵɵproperty("score",
|
|
111
|
+
i0.ɵɵproperty("score", run_r7.score)("showBar", true);
|
|
97
112
|
i0.ɵɵadvance(2);
|
|
98
|
-
i0.ɵɵtextInterpolate(ctx_r1.FormatDuration(
|
|
113
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatDuration(run_r7.duration));
|
|
99
114
|
i0.ɵɵadvance();
|
|
100
|
-
i0.ɵɵproperty("cost",
|
|
115
|
+
i0.ɵɵproperty("cost", run_r7.cost);
|
|
101
116
|
} }
|
|
102
117
|
function TestingDashboardTabComponent_Conditional_1_ForEmpty_25_Template(rf, ctx) { if (rf & 1) {
|
|
103
118
|
i0.ɵɵelementStart(0, "div", 18);
|
|
@@ -105,32 +120,32 @@ function TestingDashboardTabComponent_Conditional_1_ForEmpty_25_Template(rf, ctx
|
|
|
105
120
|
i0.ɵɵelementEnd();
|
|
106
121
|
} }
|
|
107
122
|
function TestingDashboardTabComponent_Conditional_1_For_34_Template(rf, ctx) { if (rf & 1) {
|
|
108
|
-
i0.ɵɵelementStart(0, "div", 23)(1, "div",
|
|
123
|
+
i0.ɵɵelementStart(0, "div", 23)(1, "div", 49)(2, "span", 50);
|
|
109
124
|
i0.ɵɵtext(3);
|
|
110
125
|
i0.ɵɵelementEnd();
|
|
111
|
-
i0.ɵɵelementStart(4, "span",
|
|
126
|
+
i0.ɵɵelementStart(4, "span", 51);
|
|
112
127
|
i0.ɵɵtext(5);
|
|
113
128
|
i0.ɵɵelementEnd()();
|
|
114
|
-
i0.ɵɵelementStart(6, "div",
|
|
115
|
-
i0.ɵɵelement(8, "div",
|
|
129
|
+
i0.ɵɵelementStart(6, "div", 52)(7, "div", 53);
|
|
130
|
+
i0.ɵɵelement(8, "div", 54);
|
|
116
131
|
i0.ɵɵelementEnd();
|
|
117
|
-
i0.ɵɵelementStart(9, "span",
|
|
132
|
+
i0.ɵɵelementStart(9, "span", 55);
|
|
118
133
|
i0.ɵɵtext(10);
|
|
119
134
|
i0.ɵɵpipe(11, "number");
|
|
120
135
|
i0.ɵɵelementEnd()()();
|
|
121
136
|
} if (rf & 2) {
|
|
122
|
-
const
|
|
137
|
+
const suite_r8 = ctx.$implicit;
|
|
123
138
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
124
139
|
i0.ɵɵadvance(3);
|
|
125
|
-
i0.ɵɵtextInterpolate(
|
|
140
|
+
i0.ɵɵtextInterpolate(suite_r8.name);
|
|
126
141
|
i0.ɵɵadvance(2);
|
|
127
|
-
i0.ɵɵtextInterpolate1("",
|
|
142
|
+
i0.ɵɵtextInterpolate1("", suite_r8.testCount, " tests");
|
|
128
143
|
i0.ɵɵadvance(3);
|
|
129
|
-
i0.ɵɵstyleProp("width",
|
|
144
|
+
i0.ɵɵstyleProp("width", suite_r8.passRate, "%")("background", ctx_r1.GetPassRateColor(suite_r8.passRate));
|
|
130
145
|
i0.ɵɵadvance();
|
|
131
|
-
i0.ɵɵstyleProp("color", ctx_r1.GetPassRateColor(
|
|
146
|
+
i0.ɵɵstyleProp("color", ctx_r1.GetPassRateColor(suite_r8.passRate));
|
|
132
147
|
i0.ɵɵadvance();
|
|
133
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(11, 9,
|
|
148
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(11, 9, suite_r8.passRate, "1.0-0"), "% ");
|
|
134
149
|
} }
|
|
135
150
|
function TestingDashboardTabComponent_Conditional_1_ForEmpty_35_Template(rf, ctx) { if (rf & 1) {
|
|
136
151
|
i0.ɵɵelementStart(0, "div", 18);
|
|
@@ -144,37 +159,37 @@ function TestingDashboardTabComponent_Conditional_1_For_43_Conditional_7_Templat
|
|
|
144
159
|
i0.ɵɵtext(0);
|
|
145
160
|
i0.ɵɵpipe(1, "number");
|
|
146
161
|
} if (rf & 2) {
|
|
147
|
-
const
|
|
148
|
-
i0.ɵɵtextInterpolate1(" Score below 0.5 (", i0.ɵɵpipeBind2(1, 1,
|
|
162
|
+
const alert_r10 = i0.ɵɵnextContext().$implicit;
|
|
163
|
+
i0.ɵɵtextInterpolate1(" Score below 0.5 (", i0.ɵɵpipeBind2(1, 1, alert_r10.score, "1.2-2"), ") ");
|
|
149
164
|
} }
|
|
150
165
|
function TestingDashboardTabComponent_Conditional_1_For_43_Template(rf, ctx) { if (rf & 1) {
|
|
151
|
-
const
|
|
152
|
-
i0.ɵɵelementStart(0, "div",
|
|
153
|
-
i0.ɵɵlistener("click", function TestingDashboardTabComponent_Conditional_1_For_43_Template_div_click_0_listener() { const
|
|
154
|
-
i0.ɵɵelement(1, "i",
|
|
155
|
-
i0.ɵɵelementStart(2, "div",
|
|
166
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
167
|
+
i0.ɵɵelementStart(0, "div", 56);
|
|
168
|
+
i0.ɵɵlistener("click", function TestingDashboardTabComponent_Conditional_1_For_43_Template_div_click_0_listener() { const alert_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnOpenAlert(alert_r10)); });
|
|
169
|
+
i0.ɵɵelement(1, "i", 57);
|
|
170
|
+
i0.ɵɵelementStart(2, "div", 58)(3, "span", 59);
|
|
156
171
|
i0.ɵɵtext(4);
|
|
157
172
|
i0.ɵɵelementEnd();
|
|
158
|
-
i0.ɵɵelementStart(5, "span",
|
|
173
|
+
i0.ɵɵelementStart(5, "span", 60);
|
|
159
174
|
i0.ɵɵconditionalCreate(6, TestingDashboardTabComponent_Conditional_1_For_43_Conditional_6_Template, 1, 0)(7, TestingDashboardTabComponent_Conditional_1_For_43_Conditional_7_Template, 2, 4);
|
|
160
175
|
i0.ɵɵelementEnd()();
|
|
161
|
-
i0.ɵɵelement(8, "app-test-status-badge",
|
|
176
|
+
i0.ɵɵelement(8, "app-test-status-badge", 45);
|
|
162
177
|
i0.ɵɵelementEnd();
|
|
163
178
|
} if (rf & 2) {
|
|
164
|
-
const
|
|
179
|
+
const alert_r10 = ctx.$implicit;
|
|
165
180
|
i0.ɵɵadvance();
|
|
166
|
-
i0.ɵɵstyleProp("color",
|
|
167
|
-
i0.ɵɵclassProp("fa-arrow-trend-down",
|
|
181
|
+
i0.ɵɵstyleProp("color", alert_r10.reason === "regression" ? "#ef4444" : "#f59e0b");
|
|
182
|
+
i0.ɵɵclassProp("fa-arrow-trend-down", alert_r10.reason === "regression")("fa-circle-exclamation", alert_r10.reason === "low-score");
|
|
168
183
|
i0.ɵɵadvance(3);
|
|
169
|
-
i0.ɵɵtextInterpolate(
|
|
184
|
+
i0.ɵɵtextInterpolate(alert_r10.testName);
|
|
170
185
|
i0.ɵɵadvance(2);
|
|
171
|
-
i0.ɵɵconditional(
|
|
186
|
+
i0.ɵɵconditional(alert_r10.reason === "regression" ? 6 : 7);
|
|
172
187
|
i0.ɵɵadvance(2);
|
|
173
|
-
i0.ɵɵproperty("status",
|
|
188
|
+
i0.ɵɵproperty("status", alert_r10.status);
|
|
174
189
|
} }
|
|
175
190
|
function TestingDashboardTabComponent_Conditional_1_ForEmpty_44_Template(rf, ctx) { if (rf & 1) {
|
|
176
191
|
i0.ɵɵelementStart(0, "div", 18);
|
|
177
|
-
i0.ɵɵelement(1, "i",
|
|
192
|
+
i0.ɵɵelement(1, "i", 61);
|
|
178
193
|
i0.ɵɵtext(2, " No alerts - all tests healthy ");
|
|
179
194
|
i0.ɵɵelementEnd();
|
|
180
195
|
} }
|
|
@@ -239,6 +254,8 @@ function TestingDashboardTabComponent_Conditional_1_Template(rf, ctx) { if (rf &
|
|
|
239
254
|
} }
|
|
240
255
|
export class TestingDashboardTabComponent {
|
|
241
256
|
instrumentationService;
|
|
257
|
+
executionService;
|
|
258
|
+
testingDialogService;
|
|
242
259
|
cdr;
|
|
243
260
|
initialState = null;
|
|
244
261
|
stateChange = new EventEmitter();
|
|
@@ -250,8 +267,11 @@ export class TestingDashboardTabComponent {
|
|
|
250
267
|
RecentRuns = [];
|
|
251
268
|
SortedSuites = [];
|
|
252
269
|
Alerts = [];
|
|
253
|
-
|
|
270
|
+
activeRunsMap = new Map();
|
|
271
|
+
constructor(instrumentationService, executionService, testingDialogService, cdr) {
|
|
254
272
|
this.instrumentationService = instrumentationService;
|
|
273
|
+
this.executionService = executionService;
|
|
274
|
+
this.testingDialogService = testingDialogService;
|
|
255
275
|
this.cdr = cdr;
|
|
256
276
|
}
|
|
257
277
|
// ---------------------------------------------------------------------------
|
|
@@ -272,6 +292,19 @@ export class TestingDashboardTabComponent {
|
|
|
272
292
|
OnRefresh() {
|
|
273
293
|
this.instrumentationService.refresh();
|
|
274
294
|
}
|
|
295
|
+
OnViewRunningTest(run) {
|
|
296
|
+
this.testingDialogService.OpenTestMonitor(run.testId);
|
|
297
|
+
}
|
|
298
|
+
GetActiveRunProgress(testId) {
|
|
299
|
+
return this.activeRunsMap.get(testId)?.Progress ?? 0;
|
|
300
|
+
}
|
|
301
|
+
GetActiveRunStep(testId) {
|
|
302
|
+
const step = this.activeRunsMap.get(testId)?.CurrentStep ?? '';
|
|
303
|
+
// Hide raw internal step identifiers (e.g. "driver_log", "loading_test")
|
|
304
|
+
if (step.includes('_'))
|
|
305
|
+
return '';
|
|
306
|
+
return step;
|
|
307
|
+
}
|
|
275
308
|
OnOpenRun(run) {
|
|
276
309
|
SharedService.Instance.OpenEntityRecord('MJ: Test Runs', CompositeKey.FromID(run.id));
|
|
277
310
|
}
|
|
@@ -325,6 +358,16 @@ export class TestingDashboardTabComponent {
|
|
|
325
358
|
this.subscribeKpis();
|
|
326
359
|
this.subscribeTestRuns();
|
|
327
360
|
this.subscribeSuites();
|
|
361
|
+
this.subscribeActiveRuns();
|
|
362
|
+
}
|
|
363
|
+
subscribeActiveRuns() {
|
|
364
|
+
this.executionService.ActiveRuns$.pipe(takeUntil(this.destroy$)).subscribe(runs => {
|
|
365
|
+
this.activeRunsMap.clear();
|
|
366
|
+
for (const run of runs) {
|
|
367
|
+
this.activeRunsMap.set(run.TestId, run);
|
|
368
|
+
}
|
|
369
|
+
this.cdr.markForCheck();
|
|
370
|
+
});
|
|
328
371
|
}
|
|
329
372
|
subscribeLoading() {
|
|
330
373
|
this.instrumentationService.isLoading$.pipe(takeUntil(this.destroy$)).subscribe(loading => {
|
|
@@ -474,12 +517,12 @@ export class TestingDashboardTabComponent {
|
|
|
474
517
|
}
|
|
475
518
|
}
|
|
476
519
|
}
|
|
477
|
-
static ɵfac = function TestingDashboardTabComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TestingDashboardTabComponent)(i0.ɵɵdirectiveInject(i1.TestingInstrumentationService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
478
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestingDashboardTabComponent, selectors: [["app-testing-dashboard-tab"]], inputs: { initialState: "initialState" }, outputs: { stateChange: "stateChange" }, standalone: false, decls: 2, vars: 1, consts: [[1, "full-page-loading"], [1, "dashboard-container"], ["text", "Loading Testing Dashboard..."], [1, "page-header"], [1, "page-title"], [1, "fa-solid", "fa-gauge-high"], [1, "refresh-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-refresh"], [1, "kpi-row"], [3, "data"], [1, "live-activity-card"], [1, "section-header"], [1, "running-tests-list"], [1, "lower-grid"], [1, "card", "recent-runs-card"], [1, "fa-solid", "fa-history"], [1, "runs-list"], [1, "run-row"], [1, "empty-state"], [1, "right-column"], [1, "card", "suite-health-card"], [1, "fa-solid", "fa-heartbeat"], [1, "suite-health-list"], [1, "suite-health-row"], [1, "card", "alerts-card"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "alerts-list"], [1, "alert-row"], [1, "live-dot"], [1, "fa-solid", "fa-circle-pause", "live-idle-icon"], [1, "running-test-item"], [1, "running-test-name"], [1, "running-test-meta"], [1, "running-elapsed"], [1, "running-progress-bar"], [1, "running-progress-fill"], [1, "run-row", 3, "click"], [1, "run-row-left"], [1, "run-row-name"], [1, "run-row-time"], [1, "run-row-right"], [3, "status"], [3, "score", "showBar"], [1, "run-row-duration"], [3, "cost"], [1, "suite-health-info"], [1, "suite-health-name"], [1, "suite-health-count"], [1, "suite-health-bar-wrapper"], [1, "suite-health-bar"], [1, "suite-health-bar-fill"], [1, "suite-health-pct"], [1, "alert-row", 3, "click"], [1, "fa-solid"], [1, "alert-info"], [1, "alert-name"], [1, "alert-reason"], [1, "fa-solid", "fa-check-circle", 2, "color", "var(--mj-status-success)", "margin-right", "6px"]], template: function TestingDashboardTabComponent_Template(rf, ctx) { if (rf & 1) {
|
|
520
|
+
static ɵfac = function TestingDashboardTabComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TestingDashboardTabComponent)(i0.ɵɵdirectiveInject(i1.TestingInstrumentationService), i0.ɵɵdirectiveInject(i2.TestingExecutionService), i0.ɵɵdirectiveInject(i2.TestingDialogService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
521
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestingDashboardTabComponent, selectors: [["app-testing-dashboard-tab"]], inputs: { initialState: "initialState" }, outputs: { stateChange: "stateChange" }, standalone: false, decls: 2, vars: 1, consts: [[1, "full-page-loading"], [1, "dashboard-container"], ["text", "Loading Testing Dashboard..."], [1, "page-header"], [1, "page-title"], [1, "fa-solid", "fa-gauge-high"], [1, "refresh-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-refresh"], [1, "kpi-row"], [3, "data"], [1, "live-activity-card"], [1, "section-header"], [1, "running-tests-list"], [1, "lower-grid"], [1, "card", "recent-runs-card"], [1, "fa-solid", "fa-history"], [1, "runs-list"], [1, "run-row"], [1, "empty-state"], [1, "right-column"], [1, "card", "suite-health-card"], [1, "fa-solid", "fa-heartbeat"], [1, "suite-health-list"], [1, "suite-health-row"], [1, "card", "alerts-card"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "alerts-list"], [1, "alert-row"], [1, "live-dot"], [1, "fa-solid", "fa-circle-pause", "live-idle-icon"], [1, "running-test-item"], [1, "running-test-item", 3, "click"], [1, "running-test-info"], [1, "running-test-name"], [1, "running-test-step"], [1, "running-test-meta"], [1, "running-elapsed"], [1, "running-progress-bar"], [1, "running-progress-fill"], [1, "running-progress-pct"], [1, "run-row", 3, "click"], [1, "run-row-left"], [1, "run-row-name"], [1, "run-row-time"], [1, "run-row-right"], [3, "status"], [3, "score", "showBar"], [1, "run-row-duration"], [3, "cost"], [1, "suite-health-info"], [1, "suite-health-name"], [1, "suite-health-count"], [1, "suite-health-bar-wrapper"], [1, "suite-health-bar"], [1, "suite-health-bar-fill"], [1, "suite-health-pct"], [1, "alert-row", 3, "click"], [1, "fa-solid"], [1, "alert-info"], [1, "alert-name"], [1, "alert-reason"], [1, "fa-solid", "fa-check-circle", 2, "color", "var(--mj-status-success)", "margin-right", "6px"]], template: function TestingDashboardTabComponent_Template(rf, ctx) { if (rf & 1) {
|
|
479
522
|
i0.ɵɵconditionalCreate(0, TestingDashboardTabComponent_Conditional_0_Template, 2, 0, "div", 0)(1, TestingDashboardTabComponent_Conditional_1_Template, 45, 8, "div", 1);
|
|
480
523
|
} if (rf & 2) {
|
|
481
524
|
i0.ɵɵconditional(ctx.IsLoading ? 0 : 1);
|
|
482
|
-
} }, dependencies: [i2.TestStatusBadgeComponent, i2.ScoreIndicatorComponent, i2.CostDisplayComponent, i3.LoadingComponent, i4.KPICardComponent, i5.DecimalPipe], styles: ["\n\n .full-page-loading[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-height: 400px;\n background: var(--mj-bg-surface-card);\n }\n\n .dashboard-container[_ngcontent-%COMP%] {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n }\n\n \n\n .page-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 24px;\n }\n\n .page-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .page-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n\n .refresh-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 8px 18px;\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n font-weight: 500;\n transition: background 0.2s ease;\n }\n\n .refresh-btn[_ngcontent-%COMP%]:hover:not(:disabled) { background: var(--mj-brand-primary-hover); }\n .refresh-btn[_ngcontent-%COMP%]:disabled { opacity: 0.6; cursor: not-allowed; }\n .refresh-btn[_ngcontent-%COMP%] i.spinning[_ngcontent-%COMP%] { animation: _ngcontent-%COMP%_spin 1s linear infinite; }\n\n @keyframes _ngcontent-%COMP%_spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n \n\n .kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n }\n\n \n\n .card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n }\n\n .section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); font-size: 13px; }\n\n \n\n .live-activity-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n margin-bottom: 24px;\n overflow: hidden;\n }\n\n .live-dot[_ngcontent-%COMP%] {\n width: 10px;\n height: 10px;\n background: var(--mj-status-success);\n border-radius: 50%;\n display: inline-block;\n animation: _ngcontent-%COMP%_pulse-dot 1.5s ease-in-out infinite;\n }\n\n @keyframes _ngcontent-%COMP%_pulse-dot {\n 0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-status-success) 50%, transparent); }\n 50% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--mj-status-success) 0%, transparent); }\n }\n\n .live-idle-icon[_ngcontent-%COMP%] { color: var(--mj-text-disabled); font-size: 14px; }\n\n .running-tests-list[_ngcontent-%COMP%] {\n padding: 0 20px 16px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .running-test-item[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n border-radius: 8px;\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, var(--mj-bg-surface));\n }\n\n .running-test-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-status-success);\n }\n\n .running-test-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .running-elapsed[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-status-success);\n font-weight: 500;\n }\n\n .running-progress-bar[_ngcontent-%COMP%] {\n width: 60px;\n height: 4px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n border-radius: 2px;\n overflow: hidden;\n }\n\n .running-progress-fill[_ngcontent-%COMP%] {\n display: block;\n width: 100%;\n height: 100%;\n background: var(--mj-status-success);\n animation: _ngcontent-%COMP%_progress-slide 1.2s ease-in-out infinite;\n border-radius: 2px;\n }\n\n @keyframes _ngcontent-%COMP%_progress-slide {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(100%); }\n }\n\n \n\n .lower-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 24px;\n }\n\n .right-column[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n \n\n .runs-list[_ngcontent-%COMP%] {\n max-height: 520px;\n overflow-y: auto;\n }\n\n .run-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 20px;\n border-bottom: 1px solid var(--mj-bg-surface-card);\n cursor: pointer;\n transition: background 0.15s ease;\n }\n\n .run-row[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-card); }\n\n .run-row-left[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n }\n\n .run-row-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .run-row-time[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n }\n\n .run-row-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-shrink: 0;\n }\n\n .run-row-duration[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n min-width: 44px;\n text-align: right;\n }\n\n \n\n .suite-health-list[_ngcontent-%COMP%] {\n padding: 8px 0;\n max-height: 260px;\n overflow-y: auto;\n }\n\n .suite-health-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 20px;\n }\n\n .suite-health-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n }\n\n .suite-health-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .suite-health-count[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n }\n\n .suite-health-bar-wrapper[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n }\n\n .suite-health-bar[_ngcontent-%COMP%] {\n width: 80px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n }\n\n .suite-health-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 3px;\n transition: width 0.3s ease;\n }\n\n .suite-health-pct[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n min-width: 36px;\n text-align: right;\n }\n\n \n\n .alerts-list[_ngcontent-%COMP%] {\n max-height: 220px;\n overflow-y: auto;\n }\n\n .alert-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 20px;\n border-bottom: 1px solid var(--mj-bg-surface-card);\n cursor: pointer;\n transition: background 0.15s ease;\n }\n\n .alert-row[_ngcontent-%COMP%]:hover { background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface)); }\n\n .alert-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n }\n\n .alert-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .alert-reason[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n }\n\n \n\n .empty-state[_ngcontent-%COMP%] {\n padding: 32px 20px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n \n\n @media (max-width: 900px) {\n .lower-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n }\n\n @media (max-width: 640px) {\n .dashboard-container[_ngcontent-%COMP%] { padding: 16px; }\n .kpi-row[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n }"], changeDetection: 0 });
|
|
525
|
+
} }, dependencies: [i2.TestStatusBadgeComponent, i2.ScoreIndicatorComponent, i2.CostDisplayComponent, i3.LoadingComponent, i4.KPICardComponent, i5.DecimalPipe], styles: ["\n\n .full-page-loading[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-height: 400px;\n background: var(--mj-bg-surface-card);\n }\n\n .dashboard-container[_ngcontent-%COMP%] {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n }\n\n \n\n .page-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 24px;\n }\n\n .page-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .page-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n\n .refresh-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 8px 18px;\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n font-weight: 500;\n transition: background 0.2s ease;\n }\n\n .refresh-btn[_ngcontent-%COMP%]:hover:not(:disabled) { background: var(--mj-brand-primary-hover); }\n .refresh-btn[_ngcontent-%COMP%]:disabled { opacity: 0.6; cursor: not-allowed; }\n .refresh-btn[_ngcontent-%COMP%] i.spinning[_ngcontent-%COMP%] { animation: _ngcontent-%COMP%_spin 1s linear infinite; }\n\n @keyframes _ngcontent-%COMP%_spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n \n\n .kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n }\n\n \n\n .card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n }\n\n .section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); font-size: 13px; }\n\n \n\n .live-activity-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n margin-bottom: 24px;\n overflow: hidden;\n }\n\n .live-dot[_ngcontent-%COMP%] {\n width: 10px;\n height: 10px;\n background: var(--mj-status-success);\n border-radius: 50%;\n display: inline-block;\n animation: _ngcontent-%COMP%_pulse-dot 1.5s ease-in-out infinite;\n }\n\n @keyframes _ngcontent-%COMP%_pulse-dot {\n 0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-status-success) 50%, transparent); }\n 50% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--mj-status-success) 0%, transparent); }\n }\n\n .live-idle-icon[_ngcontent-%COMP%] { color: var(--mj-text-disabled); font-size: 14px; }\n\n .running-tests-list[_ngcontent-%COMP%] {\n padding: 0 20px 16px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .running-test-item[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n border-radius: 8px;\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, var(--mj-bg-surface));\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .running-test-item[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-success) 16%, var(--mj-bg-surface));\n }\n\n .running-test-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .running-test-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-status-success);\n }\n\n .running-test-step[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n }\n\n .running-test-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .running-elapsed[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-status-success);\n font-weight: 500;\n }\n\n .running-progress-bar[_ngcontent-%COMP%] {\n width: 80px;\n height: 4px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n border-radius: 2px;\n overflow: hidden;\n }\n\n .running-progress-fill[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n background: var(--mj-status-success);\n border-radius: 2px;\n transition: width 0.5s ease;\n }\n\n .running-progress-pct[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-status-success);\n min-width: 30px;\n text-align: right;\n }\n\n \n\n .lower-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 24px;\n }\n\n .right-column[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n \n\n .runs-list[_ngcontent-%COMP%] {\n max-height: 520px;\n overflow-y: auto;\n }\n\n .run-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 20px;\n border-bottom: 1px solid var(--mj-bg-surface-card);\n cursor: pointer;\n transition: background 0.15s ease;\n }\n\n .run-row[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-card); }\n\n .run-row-left[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n }\n\n .run-row-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .run-row-time[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n }\n\n .run-row-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-shrink: 0;\n }\n\n .run-row-duration[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n min-width: 44px;\n text-align: right;\n }\n\n \n\n .suite-health-list[_ngcontent-%COMP%] {\n padding: 8px 0;\n max-height: 260px;\n overflow-y: auto;\n }\n\n .suite-health-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 20px;\n }\n\n .suite-health-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n }\n\n .suite-health-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .suite-health-count[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n }\n\n .suite-health-bar-wrapper[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n }\n\n .suite-health-bar[_ngcontent-%COMP%] {\n width: 80px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n }\n\n .suite-health-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 3px;\n transition: width 0.3s ease;\n }\n\n .suite-health-pct[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n min-width: 36px;\n text-align: right;\n }\n\n \n\n .alerts-list[_ngcontent-%COMP%] {\n max-height: 220px;\n overflow-y: auto;\n }\n\n .alert-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 20px;\n border-bottom: 1px solid var(--mj-bg-surface-card);\n cursor: pointer;\n transition: background 0.15s ease;\n }\n\n .alert-row[_ngcontent-%COMP%]:hover { background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface)); }\n\n .alert-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n }\n\n .alert-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .alert-reason[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n }\n\n \n\n .empty-state[_ngcontent-%COMP%] {\n padding: 32px 20px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n \n\n @media (max-width: 900px) {\n .lower-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n }\n\n @media (max-width: 640px) {\n .dashboard-container[_ngcontent-%COMP%] { padding: 16px; }\n .kpi-row[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n }"], changeDetection: 0 });
|
|
483
526
|
}
|
|
484
527
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TestingDashboardTabComponent, [{
|
|
485
528
|
type: Component,
|
|
@@ -525,13 +568,17 @@ export class TestingDashboardTabComponent {
|
|
|
525
568
|
@if (RunningTests.length > 0) {
|
|
526
569
|
<div class="running-tests-list">
|
|
527
570
|
@for (run of RunningTests; track run.id) {
|
|
528
|
-
<div class="running-test-item">
|
|
529
|
-
<div class="running-test-
|
|
571
|
+
<div class="running-test-item" (click)="OnViewRunningTest(run)">
|
|
572
|
+
<div class="running-test-info">
|
|
573
|
+
<div class="running-test-name">{{ run.testName }}</div>
|
|
574
|
+
<div class="running-test-step">{{ GetActiveRunStep(run.testId) }}</div>
|
|
575
|
+
</div>
|
|
530
576
|
<div class="running-test-meta">
|
|
531
577
|
<span class="running-elapsed">{{ FormatDuration(run.duration) }}</span>
|
|
532
578
|
<span class="running-progress-bar">
|
|
533
|
-
<span class="running-progress-fill"></span>
|
|
579
|
+
<span class="running-progress-fill" [style.width.%]="GetActiveRunProgress(run.testId)"></span>
|
|
534
580
|
</span>
|
|
581
|
+
<span class="running-progress-pct">{{ GetActiveRunProgress(run.testId) }}%</span>
|
|
535
582
|
</div>
|
|
536
583
|
</div>
|
|
537
584
|
}
|
|
@@ -639,11 +686,11 @@ export class TestingDashboardTabComponent {
|
|
|
639
686
|
</div>
|
|
640
687
|
</div>
|
|
641
688
|
}
|
|
642
|
-
`, styles: ["\n /* ===== Layout ===== */\n .full-page-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-height: 400px;\n background: var(--mj-bg-surface-card);\n }\n\n .dashboard-container {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n }\n\n /* ===== Page Header ===== */\n .page-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 24px;\n }\n\n .page-title {\n margin: 0;\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .page-title i { color: var(--mj-brand-primary); }\n\n .refresh-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 8px 18px;\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n font-weight: 500;\n transition: background 0.2s ease;\n }\n\n .refresh-btn:hover:not(:disabled) { background: var(--mj-brand-primary-hover); }\n .refresh-btn:disabled { opacity: 0.6; cursor: not-allowed; }\n .refresh-btn i.spinning { animation: spin 1s linear infinite; }\n\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n /* ===== KPI Row ===== */\n .kpi-row {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n }\n\n /* ===== Card Base ===== */\n .card {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n }\n\n .section-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .section-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .section-header h3 i { color: var(--mj-brand-primary); font-size: 13px; }\n\n /* ===== Live Activity ===== */\n .live-activity-card {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n margin-bottom: 24px;\n overflow: hidden;\n }\n\n .live-dot {\n width: 10px;\n height: 10px;\n background: var(--mj-status-success);\n border-radius: 50%;\n display: inline-block;\n animation: pulse-dot 1.5s ease-in-out infinite;\n }\n\n @keyframes pulse-dot {\n 0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-status-success) 50%, transparent); }\n 50% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--mj-status-success) 0%, transparent); }\n }\n\n .live-idle-icon { color: var(--mj-text-disabled); font-size: 14px; }\n\n .running-tests-list {\n padding: 0 20px 16px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .running-test-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n border-radius: 8px;\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, var(--mj-bg-surface));\n }\n\n .running-test-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-status-success);\n }\n\n .running-test-meta {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .running-elapsed {\n font-size: 12px;\n color: var(--mj-status-success);\n font-weight: 500;\n }\n\n .running-progress-bar {\n width:
|
|
643
|
-
}], () => [{ type: i1.TestingInstrumentationService }, { type: i0.ChangeDetectorRef }], { initialState: [{
|
|
689
|
+
`, styles: ["\n /* ===== Layout ===== */\n .full-page-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-height: 400px;\n background: var(--mj-bg-surface-card);\n }\n\n .dashboard-container {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n }\n\n /* ===== Page Header ===== */\n .page-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 24px;\n }\n\n .page-title {\n margin: 0;\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .page-title i { color: var(--mj-brand-primary); }\n\n .refresh-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 8px 18px;\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n font-weight: 500;\n transition: background 0.2s ease;\n }\n\n .refresh-btn:hover:not(:disabled) { background: var(--mj-brand-primary-hover); }\n .refresh-btn:disabled { opacity: 0.6; cursor: not-allowed; }\n .refresh-btn i.spinning { animation: spin 1s linear infinite; }\n\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n /* ===== KPI Row ===== */\n .kpi-row {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n }\n\n /* ===== Card Base ===== */\n .card {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n }\n\n .section-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .section-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .section-header h3 i { color: var(--mj-brand-primary); font-size: 13px; }\n\n /* ===== Live Activity ===== */\n .live-activity-card {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n margin-bottom: 24px;\n overflow: hidden;\n }\n\n .live-dot {\n width: 10px;\n height: 10px;\n background: var(--mj-status-success);\n border-radius: 50%;\n display: inline-block;\n animation: pulse-dot 1.5s ease-in-out infinite;\n }\n\n @keyframes pulse-dot {\n 0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-status-success) 50%, transparent); }\n 50% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--mj-status-success) 0%, transparent); }\n }\n\n .live-idle-icon { color: var(--mj-text-disabled); font-size: 14px; }\n\n .running-tests-list {\n padding: 0 20px 16px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .running-test-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n border-radius: 8px;\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, var(--mj-bg-surface));\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .running-test-item:hover {\n background: color-mix(in srgb, var(--mj-status-success) 16%, var(--mj-bg-surface));\n }\n\n .running-test-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .running-test-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-status-success);\n }\n\n .running-test-step {\n font-size: 11px;\n color: var(--mj-text-muted);\n }\n\n .running-test-meta {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .running-elapsed {\n font-size: 12px;\n color: var(--mj-status-success);\n font-weight: 500;\n }\n\n .running-progress-bar {\n width: 80px;\n height: 4px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n border-radius: 2px;\n overflow: hidden;\n }\n\n .running-progress-fill {\n display: block;\n height: 100%;\n background: var(--mj-status-success);\n border-radius: 2px;\n transition: width 0.5s ease;\n }\n\n .running-progress-pct {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-status-success);\n min-width: 30px;\n text-align: right;\n }\n\n /* ===== Lower Grid ===== */\n .lower-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 24px;\n }\n\n .right-column {\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n /* ===== Recent Runs ===== */\n .runs-list {\n max-height: 520px;\n overflow-y: auto;\n }\n\n .run-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 20px;\n border-bottom: 1px solid var(--mj-bg-surface-card);\n cursor: pointer;\n transition: background 0.15s ease;\n }\n\n .run-row:hover { background: var(--mj-bg-surface-card); }\n\n .run-row-left {\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n }\n\n .run-row-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .run-row-time {\n font-size: 11px;\n color: var(--mj-text-disabled);\n }\n\n .run-row-right {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-shrink: 0;\n }\n\n .run-row-duration {\n font-size: 11px;\n color: var(--mj-text-muted);\n min-width: 44px;\n text-align: right;\n }\n\n /* ===== Suite Health ===== */\n .suite-health-list {\n padding: 8px 0;\n max-height: 260px;\n overflow-y: auto;\n }\n\n .suite-health-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 20px;\n }\n\n .suite-health-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n }\n\n .suite-health-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .suite-health-count {\n font-size: 11px;\n color: var(--mj-text-disabled);\n }\n\n .suite-health-bar-wrapper {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n }\n\n .suite-health-bar {\n width: 80px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n }\n\n .suite-health-bar-fill {\n height: 100%;\n border-radius: 3px;\n transition: width 0.3s ease;\n }\n\n .suite-health-pct {\n font-size: 12px;\n font-weight: 600;\n min-width: 36px;\n text-align: right;\n }\n\n /* ===== Alerts ===== */\n .alerts-list {\n max-height: 220px;\n overflow-y: auto;\n }\n\n .alert-row {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 20px;\n border-bottom: 1px solid var(--mj-bg-surface-card);\n cursor: pointer;\n transition: background 0.15s ease;\n }\n\n .alert-row:hover { background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface)); }\n\n .alert-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n }\n\n .alert-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .alert-reason {\n font-size: 11px;\n color: var(--mj-text-disabled);\n }\n\n /* ===== Empty State ===== */\n .empty-state {\n padding: 32px 20px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n /* ===== Responsive ===== */\n @media (max-width: 900px) {\n .lower-grid {\n grid-template-columns: 1fr;\n }\n }\n\n @media (max-width: 640px) {\n .dashboard-container { padding: 16px; }\n .kpi-row { grid-template-columns: 1fr; }\n }\n "] }]
|
|
690
|
+
}], () => [{ type: i1.TestingInstrumentationService }, { type: i2.TestingExecutionService }, { type: i2.TestingDialogService }, { type: i0.ChangeDetectorRef }], { initialState: [{
|
|
644
691
|
type: Input
|
|
645
692
|
}], stateChange: [{
|
|
646
693
|
type: Output
|
|
647
694
|
}] }); })();
|
|
648
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestingDashboardTabComponent, { className: "TestingDashboardTabComponent", filePath: "src/Testing/components/testing-dashboard-tab.component.ts", lineNumber:
|
|
695
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestingDashboardTabComponent, { className: "TestingDashboardTabComponent", filePath: "src/Testing/components/testing-dashboard-tab.component.ts", lineNumber: 591 }); })();
|
|
649
696
|
//# sourceMappingURL=testing-dashboard-tab.component.js.map
|