@memberjunction/ng-dashboards 5.35.0 → 5.36.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/dist/AI/components/agents/agent-configuration.component.js +3 -3
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +22 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +157 -137
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +28 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2075 -2068
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +4 -4
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +3 -3
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +1411 -1424
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +329 -371
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +137 -142
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +111 -116
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +13 -65
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +13 -65
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +13 -65
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +13 -65
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/Admin/base-admin-container.component.d.ts +9 -7
- package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
- package/dist/Admin/base-admin-container.component.js +26 -17
- package/dist/Admin/base-admin-container.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +74 -67
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
- package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-new-message-resource.component.js +661 -0
- package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
- package/dist/Credentials/components/credentials-categories-resource.component.js +152 -159
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +151 -155
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +20 -21
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +131 -125
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +7 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
- package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +46 -72
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.js +88 -100
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.js +158 -168
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +257 -264
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.d.ts +5 -0
- package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +46 -64
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/DevTools/lazy-module-status.component.js +75 -84
- package/dist/DevTools/lazy-module-status.component.js.map +1 -1
- package/dist/DevTools/settings-explorer.component.js +76 -85
- package/dist/DevTools/settings-explorer.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +7 -3
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +97 -99
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +842 -855
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +502 -517
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +78 -89
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1120 -1128
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +606 -661
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +102 -0
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1179 -504
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +1527 -327
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/Lists/index.d.ts +1 -0
- package/dist/Lists/index.d.ts.map +1 -1
- package/dist/Lists/index.js +1 -0
- package/dist/Lists/index.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +236 -10
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +19 -19
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +58 -60
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1007 -1252
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +31 -6
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +543 -629
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +50 -49
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +1 -1
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +16 -1
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +9 -7
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +13 -4
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +16 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +10 -9
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +13 -2
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +1 -1
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +13 -1
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +53 -52
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions-overview.component.js","sourceRoot":"","sources":["../../../src/Actions/components/actions-overview.component.ts","../../../src/Actions/components/actions-overview.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { CompositeKey, RunView, LogError } from '@memberjunction/core';\nimport { MJActionEntity, MJActionCategoryEntity, MJActionExecutionLogEntity, ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { FilterFieldConfig } from '@memberjunction/ng-ui-components';\nimport { Subject, BehaviorSubject, combineLatest } from 'rxjs';\nimport { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';\ninterface ActionMetrics {\n totalActions: number;\n activeActions: number;\n pendingActions: number;\n disabledActions: number;\n totalExecutions: number;\n recentExecutions: number;\n successRate: number;\n totalCategories: number;\n aiGeneratedActions: number;\n customActions: number;\n}\n\ninterface CategoryStats {\n categoryId: string;\n categoryName: string;\n actionCount: number;\n executionCount: number;\n successRate: number;\n}\n\ninterface ExecutionWithExpanded extends MJActionExecutionLogEntity {\n isExpanded?: boolean;\n}\n\n/**\n * Actions Overview Resource - displays action management dashboard\n */\n@RegisterClass(BaseResourceComponent, 'ActionsOverviewResource')\n@Component({\n standalone: false,\n selector: 'mj-actions-overview',\n templateUrl: './actions-overview.component.html',\n styleUrls: ['./actions-overview.component.css']\n})\nexport class ActionsOverviewComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public isLoading: boolean = true;\n public metrics: ActionMetrics = {\n totalActions: 0,\n activeActions: 0,\n pendingActions: 0,\n disabledActions: 0,\n totalExecutions: 0,\n recentExecutions: 0,\n successRate: 0,\n totalCategories: 0,\n aiGeneratedActions: 0,\n customActions: 0\n };\n\n public categoryStats: CategoryStats[] = [];\n public recentActions: MJActionEntity[] = [];\n public recentExecutions: ExecutionWithExpanded[] = [];\n public topCategories: MJActionCategoryEntity[] = [];\n\n public searchTerm$ = new BehaviorSubject<string>('');\n public selectedStatus$ = new BehaviorSubject<string>('all');\n public selectedType$ = new BehaviorSubject<string>('all');\n\n protected override destroy$ = new Subject<void>();\n\n constructor(private cdr: ChangeDetectorRef ) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.setupFilters();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private setupFilters(): void {\n combineLatest([\n this.searchTerm$.pipe(debounceTime(300), distinctUntilChanged()),\n this.selectedStatus$.pipe(distinctUntilChanged()),\n this.selectedType$.pipe(distinctUntilChanged())\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.loadFilteredData();\n });\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.cdr.detectChanges();\n\n // Load all data in a single batch using RunViews\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n \n const [actionsResult, categoriesResult, executionsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions', \n OrderBy: '__mj_UpdatedAt DESC' \n },\n {\n EntityName: 'MJ: Action Categories', \n OrderBy: 'Name' \n },\n {\n EntityName: 'MJ: Action Execution Logs', \n OrderBy: 'StartedAt DESC', \n }\n ]);\n \n if (!actionsResult.Success || !categoriesResult.Success || !executionsResult.Success) {\n const errors = [];\n if (!actionsResult.Success) errors.push('Actions: ' + actionsResult.ErrorMessage);\n if (!categoriesResult.Success) errors.push('Categories: ' + categoriesResult.ErrorMessage);\n if (!executionsResult.Success) errors.push('Executions: ' + executionsResult.ErrorMessage);\n throw new Error('Failed to load data: ' + errors.join(', '));\n }\n \n const actions = (actionsResult.Results || []) as MJActionEntity[];\n const categories = (categoriesResult.Results || []) as MJActionCategoryEntity[];\n const executions = (executionsResult.Results || []) as MJActionExecutionLogEntity[];\n\n this.calculateMetrics(actions, categories, executions);\n this.calculateCategoryStats(actions, categories, executions);\n this.recentActions = actions.slice(0, 10);\n this.recentExecutions = executions.slice(0, 10).map(e => ({ ...e, isExpanded: false } as ExecutionWithExpanded));\n this.topCategories = categories.slice(0, 5);\n } catch (error) {\n console.error('Error loading actions overview data:', error);\n LogError('Failed to load actions overview data', undefined, error);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n this.NotifyLoadComplete();\n }\n }\n\n private calculateMetrics(\n actions: MJActionEntity[], \n categories: MJActionCategoryEntity[], \n executions: MJActionExecutionLogEntity[]\n ): void {\n this.metrics = {\n totalActions: actions.length,\n activeActions: actions.filter(a => a.Status === 'Active').length,\n pendingActions: actions.filter(a => a.Status === 'Pending').length,\n disabledActions: actions.filter(a => a.Status === 'Disabled').length,\n totalExecutions: executions.length,\n recentExecutions: executions.filter(e => {\n const dayAgo = new Date();\n dayAgo.setDate(dayAgo.getDate() - 1);\n return e.StartedAt && new Date(e.StartedAt) > dayAgo;\n }).length,\n successRate: this.calculateSuccessRate(executions),\n totalCategories: categories.length,\n aiGeneratedActions: actions.filter(a => a.Type === 'Generated').length,\n customActions: actions.filter(a => a.Type === 'Custom').length\n };\n }\n\n private calculateSuccessRate(executions: MJActionExecutionLogEntity[]): number {\n if (!executions || executions.length === 0) return 0;\n // Check for success based on result code - Actions may use different success codes\n const successful = executions.filter(e => {\n const code = e.ResultCode?.toLowerCase();\n return code === 'success' || code === 'ok' || code === 'completed' || code === '200';\n }).length;\n return Math.round((successful / executions.length) * 100);\n }\n\n private calculateCategoryStats(\n actions: MJActionEntity[], \n categories: MJActionCategoryEntity[], \n executions: MJActionExecutionLogEntity[]\n ): void {\n this.categoryStats = categories.map(category => {\n const categoryActions = actions.filter(a => UUIDsEqual(a.CategoryID, category.ID));\n const categoryExecutions = executions.filter(e => \n categoryActions.some(a => UUIDsEqual(a.ID, e.ActionID))\n );\n \n return {\n categoryId: category.ID,\n categoryName: category.Name,\n actionCount: categoryActions.length,\n executionCount: categoryExecutions.length,\n successRate: this.calculateSuccessRate(categoryExecutions)\n };\n });\n }\n\n private async loadFilteredData(): Promise<void> {\n // Implement filtered data loading based on current filter values\n const searchTerm = this.searchTerm$.value;\n const status = this.selectedStatus$.value;\n const type = this.selectedType$.value;\n\n let extraFilter = '';\n const filters: string[] = [];\n\n if (status !== 'all') {\n filters.push(`Status = '${status}'`);\n }\n\n if (type !== 'all') {\n filters.push(`Type = '${type}'`);\n }\n\n if (filters.length > 0) {\n extraFilter = filters.join(' AND ');\n }\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView({\n EntityName: 'MJ: Actions',\n ExtraFilter: extraFilter,\n OrderBy: '__mj_UpdatedAt DESC',\n UserSearchString: searchTerm,\n IgnoreMaxRows: false,\n MaxRows: 1000\n });\n \n this.recentActions = ((result.Results || []) as MJActionEntity[]).slice(0, 10);\n } catch (error) {\n LogError('Failed to load filtered actions', undefined, error);\n }\n }\n\n public onSearchChange(searchTerm: string): void {\n this.searchTerm$.next(searchTerm);\n }\n\n public onStatusFilterChange(status: string): void {\n this.selectedStatus$.next(status);\n }\n\n public onTypeFilterChange(type: string): void {\n this.selectedType$.next(type);\n }\n\n // ───── Filter-popover plumbing for the [actions] slot ─────\n\n public get FilterFields(): FilterFieldConfig[] {\n return [\n {\n key: 'status',\n type: 'dropdown',\n label: 'Status',\n icon: 'fa-solid fa-circle-info',\n placeholder: 'All Statuses',\n options: [\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Disabled', value: 'Disabled' }\n ]\n },\n {\n key: 'type',\n type: 'dropdown',\n label: 'Type',\n icon: 'fa-solid fa-shapes',\n placeholder: 'All Types',\n options: [\n { text: 'All Types', value: 'all' },\n { text: 'AI Generated', value: 'Generated' },\n { text: 'Custom', value: 'Custom' }\n ]\n }\n ];\n }\n public get FilterValues(): Record<string, unknown> {\n return { status: this.selectedStatus$.value, type: this.selectedType$.value };\n }\n public get ActiveFilterCount(): number {\n let n = 0;\n if (this.selectedStatus$.value !== 'all') n++;\n if (this.selectedType$.value !== 'all') n++;\n return n;\n }\n public onFilterValuesChange(v: Record<string, unknown>): void {\n const next = (v ?? {}) as { status?: string; type?: string };\n if ((next.status ?? 'all') !== this.selectedStatus$.value) {\n this.onStatusFilterChange(next.status ?? 'all');\n }\n if ((next.type ?? 'all') !== this.selectedType$.value) {\n this.onTypeFilterChange(next.type ?? 'all');\n }\n }\n public resetFilters(): void {\n if (this.selectedStatus$.value !== 'all') this.onStatusFilterChange('all');\n if (this.selectedType$.value !== 'all') this.onTypeFilterChange('all');\n }\n\n public openAction(action: MJActionEntity): void {\n const key = new CompositeKey([{ FieldName: 'ID', Value: action.ID }]);\n this.navigationService.OpenEntityRecord('MJ: Actions', key);\n }\n\n public openCategory(categoryId: string): void {\n const key = new CompositeKey([{ FieldName: 'ID', Value: categoryId }]);\n this.navigationService.OpenEntityRecord('MJ: Action Categories', key);\n }\n\n public openExecution(execution: MJActionExecutionLogEntity): void {\n const key = new CompositeKey([{ FieldName: 'ID', Value: execution.ID }]);\n this.navigationService.OpenEntityRecord('MJ: Action Execution Logs', key);\n }\n\n public isExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n const code = execution.ResultCode?.toLowerCase();\n return code === 'success' || code === 'ok' || code === 'completed' || code === '200';\n }\n\n public getStatusColor(status: string): 'success' | 'warning' | 'error' | 'info' {\n switch (status) {\n case 'Active': return 'success';\n case 'Pending': return 'warning';\n case 'Disabled': return 'error';\n default: return 'info';\n }\n }\n\n public getTypeIcon(type: string): string {\n switch (type) {\n case 'Generated': return 'fa-solid fa-robot';\n case 'Custom': return 'fa-solid fa-code';\n default: return 'fa-solid fa-cog';\n }\n }\n\n // Metric card click handlers - these now filter the current view\n public onTotalActionsClick(): void {\n // Reset filters to show all actions\n this.selectedStatus$.next('all');\n this.selectedType$.next('all');\n }\n\n public onExecutionsClick(): void {\n // This would navigate to execution monitoring resource\n }\n\n public onCategoriesClick(): void {\n // This would navigate to categories view\n }\n\n public onAIGeneratedClick(): void {\n // Filter to show AI generated actions in the current view\n this.selectedType$.next('Generated');\n }\n\n public onActionGalleryClick(): void {\n // This would navigate to action gallery view\n }\n\n public toggleExecutionExpanded(execution: ExecutionWithExpanded): void {\n execution.isExpanded = !execution.isExpanded;\n }\n\n public formatJsonParams(params: string | null): string {\n if (!params) return '{}';\n try {\n // Try to parse and reformat\n const parsed = JSON.parse(params);\n return JSON.stringify(parsed, null, 2);\n } catch {\n // If parse fails, return as is\n return params;\n }\n }\n\n /**\n * Gets the icon class for an action\n * Falls back to type-based icon if no IconClass is set\n */\n public getActionIcon(action: MJActionEntity): string {\n return action?.IconClass || this.getTypeIcon(action.Type);\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Actions Overview';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-bolt';\n }\n}","<mj-page-layout>\n <mj-page-header\n Title=\"Actions Overview\"\n Icon=\"fa-solid fa-bolt\"\n Subtitle=\"Health and activity for all configured actions\">\n <div meta>\n <mj-stat-badge\n [Count]=\"metrics.totalActions\"\n Label=\"actions\">\n </mj-stat-badge>\n </div>\n <div actions>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetFilters()\">\n <mj-filter-panel\n [Fields]=\"FilterFields\"\n [Values]=\"FilterValues\"\n (ValuesChange)=\"onFilterValuesChange($event)\"\n (Reset)=\"resetFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search actions...\"\n [Value]=\"searchTerm$.value\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n <div class=\"actions-overview\" >\n\n <!-- Metrics Cards -->\n <div class=\"metrics-grid\">\n <div class=\"metric-card primary clickable\" (click)=\"onTotalActionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-cogs\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalActions }}</div>\n <div class=\"metric-label\">Total Actions</div>\n <div class=\"metric-breakdown\">\n <span class=\"active\">{{ metrics.activeActions }} Active</span>\n <span class=\"pending\">{{ metrics.pendingActions }} Pending</span>\n <span class=\"disabled\">{{ metrics.disabledActions }} Disabled</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card success clickable\" (click)=\"onExecutionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-play-circle\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalExecutions }}</div>\n <div class=\"metric-label\">Total Executions</div>\n <div class=\"metric-breakdown\">\n <span class=\"recent\">{{ metrics.recentExecutions }} in last 24h</span>\n <span class=\"success-rate\">{{ metrics.successRate }}% success rate</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card info clickable\" (click)=\"onCategoriesClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-sitemap\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalCategories }}</div>\n <div class=\"metric-label\">Categories</div>\n <div class=\"metric-breakdown\">\n <span>Organized structure</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card warning clickable\" (click)=\"onAIGeneratedClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-robot\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.aiGeneratedActions }}</div>\n <div class=\"metric-label\">AI Generated</div>\n <div class=\"metric-breakdown\">\n <span class=\"custom\">{{ metrics.customActions }} Custom</span>\n </div>\n </div>\n </div>\n \n <div class=\"metric-card gallery clickable\" (click)=\"onActionGalleryClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-th\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">\n <i class=\"fa-solid fa-sparkles\"></i>\n </div>\n <div class=\"metric-label\">Action Gallery</div>\n <div class=\"metric-breakdown\">\n <span>Visual action browser</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Content Grid -->\n <div class=\"content-grid\">\n <!-- Category Statistics -->\n <div class=\"panel category-stats\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Category Performance</h3>\n </div>\n <div class=\"panel-content\">\n @if (categoryStats.length > 0) {\n <div class=\"category-list\">\n @for (category of categoryStats; track category.categoryId) {\n <div class=\"category-item\" (click)=\"openCategory(category.categoryId)\">\n <div class=\"category-info\">\n <div class=\"category-name\">{{ category.categoryName }}</div>\n <div class=\"category-metrics\">\n <span class=\"metric\">{{ category.actionCount }} actions</span>\n <span class=\"metric\">{{ category.executionCount }} executions</span>\n <span class=\"metric success-rate\">{{ category.successRate }}% success</span>\n </div>\n </div>\n <div class=\"category-chart\">\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" [style.width.%]=\"category.successRate\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-chart-bar\"></i>\n <p>No category statistics available</p>\n </div>\n }\n </div>\n </div>\n\n <!-- Recent Actions -->\n <div class=\"panel recent-actions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-clock\"></i> Recent Actions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentActions.length > 0) {\n <div class=\"actions-list\">\n @for (action of recentActions; track action.ID) {\n <div class=\"action-item\" (click)=\"openAction(action)\">\n <div class=\"action-icon\">\n <i [class]=\"getActionIcon(action)\"></i>\n </div>\n <div class=\"action-info\">\n <div class=\"action-name\">{{ action.Name }}</div>\n <div class=\"action-description\">{{ action.Description || 'No description' }}</div>\n </div>\n <div class=\"action-status\">\n <span class=\"status-chip\" [attr.data-color]=\"getStatusColor(action.Status)\">\n {{ action.Status }}\n </span>\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-cogs\"></i>\n <p>No recent actions found</p>\n </div>\n }\n </div>\n </div>\n\n <!-- Recent Executions -->\n <div class=\"panel recent-executions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentExecutions.length > 0) {\n <div class=\"executions-list\">\n @for (execution of recentExecutions; track execution.ID) {\n <div class=\"execution-item\" [class.expanded]=\"execution.isExpanded\">\n <div class=\"execution-header\" (click)=\"toggleExecutionExpanded(execution)\">\n <div class=\"execution-time\">\n {{ execution.StartedAt | date:'MMM d, HH:mm' }}\n </div>\n <div class=\"execution-info\">\n <div class=\"execution-action\">{{ execution.Action || 'Action ID: ' + execution.ActionID }}</div>\n <div class=\"execution-user\">{{ execution.User || 'User ID: ' + execution.UserID }}</div>\n </div>\n <div class=\"execution-result\">\n <span class=\"status-chip\" [attr.data-color]=\"isExecutionSuccess(execution) ? 'success' : 'error'\">\n {{ execution.ResultCode || 'Unknown' }}\n </span>\n </div>\n <div class=\"execution-expand-icon\">\n <i [class]=\"execution.isExpanded ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chevron-down'\"></i>\n </div>\n </div>\n @if (execution.isExpanded) {\n <div class=\"execution-details\">\n <div class=\"params-section\">\n <h5><i class=\"fa-solid fa-sliders\"></i> Parameters</h5>\n <mj-code-editor \n [ngModel]=\"formatJsonParams(execution.Params)\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 150px; width: 100%;\">\n </mj-code-editor>\n </div>\n <div class=\"execution-actions\">\n <button mjButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"openExecution(execution)\">\n <i class=\"fa-solid fa-external-link\"></i> Open Details\n </button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-history\"></i>\n <p>No recent executions found</p>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (isLoading) {\n <div class=\"loading-overlay\">\n <mj-loading [showText]=\"false\" size=\"medium\"></mj-loading>\n </div>\n }\n</div>\n </mj-page-body>\n</mj-page-layout>"]}
|
|
1
|
+
{"version":3,"file":"actions-overview.component.js","sourceRoot":"","sources":["../../../src/Actions/components/actions-overview.component.ts","../../../src/Actions/components/actions-overview.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { CompositeKey, RunView, LogError } from '@memberjunction/core';\nimport { MJActionEntity, MJActionCategoryEntity, MJActionExecutionLogEntity, ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { FilterFieldConfig } from '@memberjunction/ng-ui-components';\nimport { Subject, BehaviorSubject, combineLatest } from 'rxjs';\nimport { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';\ninterface ActionMetrics {\n totalActions: number;\n activeActions: number;\n pendingActions: number;\n disabledActions: number;\n totalExecutions: number;\n recentExecutions: number;\n successRate: number;\n totalCategories: number;\n aiGeneratedActions: number;\n customActions: number;\n}\n\ninterface CategoryStats {\n categoryId: string;\n categoryName: string;\n actionCount: number;\n executionCount: number;\n successRate: number;\n}\n\ninterface ExecutionWithExpanded extends MJActionExecutionLogEntity {\n isExpanded?: boolean;\n}\n\n/**\n * Actions Overview Resource - displays action management dashboard\n */\n@RegisterClass(BaseResourceComponent, 'ActionsOverviewResource')\n@Component({\n standalone: false,\n selector: 'mj-actions-overview',\n templateUrl: './actions-overview.component.html',\n styleUrls: ['./actions-overview.component.css']\n})\nexport class ActionsOverviewComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public isLoading: boolean = true;\n public metrics: ActionMetrics = {\n totalActions: 0,\n activeActions: 0,\n pendingActions: 0,\n disabledActions: 0,\n totalExecutions: 0,\n recentExecutions: 0,\n successRate: 0,\n totalCategories: 0,\n aiGeneratedActions: 0,\n customActions: 0\n };\n\n public categoryStats: CategoryStats[] = [];\n public recentActions: MJActionEntity[] = [];\n public recentExecutions: ExecutionWithExpanded[] = [];\n public topCategories: MJActionCategoryEntity[] = [];\n\n public searchTerm$ = new BehaviorSubject<string>('');\n public selectedStatus$ = new BehaviorSubject<string>('all');\n public selectedType$ = new BehaviorSubject<string>('all');\n\n protected override destroy$ = new Subject<void>();\n\n constructor(private cdr: ChangeDetectorRef ) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.setupFilters();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private setupFilters(): void {\n combineLatest([\n this.searchTerm$.pipe(debounceTime(300), distinctUntilChanged()),\n this.selectedStatus$.pipe(distinctUntilChanged()),\n this.selectedType$.pipe(distinctUntilChanged())\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.loadFilteredData();\n });\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.cdr.detectChanges();\n\n // Load all data in a single batch using RunViews\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n \n const [actionsResult, categoriesResult, executionsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions', \n OrderBy: '__mj_UpdatedAt DESC' \n },\n {\n EntityName: 'MJ: Action Categories', \n OrderBy: 'Name' \n },\n {\n EntityName: 'MJ: Action Execution Logs', \n OrderBy: 'StartedAt DESC', \n }\n ]);\n \n if (!actionsResult.Success || !categoriesResult.Success || !executionsResult.Success) {\n const errors = [];\n if (!actionsResult.Success) errors.push('Actions: ' + actionsResult.ErrorMessage);\n if (!categoriesResult.Success) errors.push('Categories: ' + categoriesResult.ErrorMessage);\n if (!executionsResult.Success) errors.push('Executions: ' + executionsResult.ErrorMessage);\n throw new Error('Failed to load data: ' + errors.join(', '));\n }\n \n const actions = (actionsResult.Results || []) as MJActionEntity[];\n const categories = (categoriesResult.Results || []) as MJActionCategoryEntity[];\n const executions = (executionsResult.Results || []) as MJActionExecutionLogEntity[];\n\n this.calculateMetrics(actions, categories, executions);\n this.calculateCategoryStats(actions, categories, executions);\n this.recentActions = actions.slice(0, 10);\n this.recentExecutions = executions.slice(0, 10).map(e => ({ ...e, isExpanded: false } as ExecutionWithExpanded));\n this.topCategories = categories.slice(0, 5);\n } catch (error) {\n console.error('Error loading actions overview data:', error);\n LogError('Failed to load actions overview data', undefined, error);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n this.NotifyLoadComplete();\n }\n }\n\n private calculateMetrics(\n actions: MJActionEntity[], \n categories: MJActionCategoryEntity[], \n executions: MJActionExecutionLogEntity[]\n ): void {\n this.metrics = {\n totalActions: actions.length,\n activeActions: actions.filter(a => a.Status === 'Active').length,\n pendingActions: actions.filter(a => a.Status === 'Pending').length,\n disabledActions: actions.filter(a => a.Status === 'Disabled').length,\n totalExecutions: executions.length,\n recentExecutions: executions.filter(e => {\n const dayAgo = new Date();\n dayAgo.setDate(dayAgo.getDate() - 1);\n return e.StartedAt && new Date(e.StartedAt) > dayAgo;\n }).length,\n successRate: this.calculateSuccessRate(executions),\n totalCategories: categories.length,\n aiGeneratedActions: actions.filter(a => a.Type === 'Generated').length,\n customActions: actions.filter(a => a.Type === 'Custom').length\n };\n }\n\n private calculateSuccessRate(executions: MJActionExecutionLogEntity[]): number {\n if (!executions || executions.length === 0) return 0;\n // Check for success based on result code - Actions may use different success codes\n const successful = executions.filter(e => {\n const code = e.ResultCode?.toLowerCase();\n return code === 'success' || code === 'ok' || code === 'completed' || code === '200';\n }).length;\n return Math.round((successful / executions.length) * 100);\n }\n\n private calculateCategoryStats(\n actions: MJActionEntity[], \n categories: MJActionCategoryEntity[], \n executions: MJActionExecutionLogEntity[]\n ): void {\n this.categoryStats = categories.map(category => {\n const categoryActions = actions.filter(a => UUIDsEqual(a.CategoryID, category.ID));\n const categoryExecutions = executions.filter(e => \n categoryActions.some(a => UUIDsEqual(a.ID, e.ActionID))\n );\n \n return {\n categoryId: category.ID,\n categoryName: category.Name,\n actionCount: categoryActions.length,\n executionCount: categoryExecutions.length,\n successRate: this.calculateSuccessRate(categoryExecutions)\n };\n });\n }\n\n private async loadFilteredData(): Promise<void> {\n // Implement filtered data loading based on current filter values\n const searchTerm = this.searchTerm$.value;\n const status = this.selectedStatus$.value;\n const type = this.selectedType$.value;\n\n let extraFilter = '';\n const filters: string[] = [];\n\n if (status !== 'all') {\n filters.push(`Status = '${status}'`);\n }\n\n if (type !== 'all') {\n filters.push(`Type = '${type}'`);\n }\n\n if (filters.length > 0) {\n extraFilter = filters.join(' AND ');\n }\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView({\n EntityName: 'MJ: Actions',\n ExtraFilter: extraFilter,\n OrderBy: '__mj_UpdatedAt DESC',\n UserSearchString: searchTerm,\n IgnoreMaxRows: false,\n MaxRows: 1000\n });\n \n this.recentActions = ((result.Results || []) as MJActionEntity[]).slice(0, 10);\n } catch (error) {\n LogError('Failed to load filtered actions', undefined, error);\n }\n }\n\n public onSearchChange(searchTerm: string): void {\n this.searchTerm$.next(searchTerm);\n }\n\n public onStatusFilterChange(status: string): void {\n this.selectedStatus$.next(status);\n }\n\n public onTypeFilterChange(type: string): void {\n this.selectedType$.next(type);\n }\n\n // ───── Filter-popover plumbing for the [actions] slot ─────\n\n public get FilterFields(): FilterFieldConfig[] {\n return [\n {\n key: 'status',\n type: 'dropdown',\n label: 'Status',\n icon: 'fa-solid fa-circle-info',\n placeholder: 'All Statuses',\n options: [\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Disabled', value: 'Disabled' }\n ]\n },\n {\n key: 'type',\n type: 'dropdown',\n label: 'Type',\n icon: 'fa-solid fa-shapes',\n placeholder: 'All Types',\n options: [\n { text: 'All Types', value: 'all' },\n { text: 'AI Generated', value: 'Generated' },\n { text: 'Custom', value: 'Custom' }\n ]\n }\n ];\n }\n public get FilterValues(): Record<string, unknown> {\n return { status: this.selectedStatus$.value, type: this.selectedType$.value };\n }\n public get ActiveFilterCount(): number {\n let n = 0;\n if (this.selectedStatus$.value !== 'all') n++;\n if (this.selectedType$.value !== 'all') n++;\n return n;\n }\n public onFilterValuesChange(v: Record<string, unknown>): void {\n const next = (v ?? {}) as { status?: string; type?: string };\n if ((next.status ?? 'all') !== this.selectedStatus$.value) {\n this.onStatusFilterChange(next.status ?? 'all');\n }\n if ((next.type ?? 'all') !== this.selectedType$.value) {\n this.onTypeFilterChange(next.type ?? 'all');\n }\n }\n public resetFilters(): void {\n if (this.selectedStatus$.value !== 'all') this.onStatusFilterChange('all');\n if (this.selectedType$.value !== 'all') this.onTypeFilterChange('all');\n }\n\n public openAction(action: MJActionEntity): void {\n const key = new CompositeKey([{ FieldName: 'ID', Value: action.ID }]);\n this.navigationService.OpenEntityRecord('MJ: Actions', key);\n }\n\n public openCategory(categoryId: string): void {\n const key = new CompositeKey([{ FieldName: 'ID', Value: categoryId }]);\n this.navigationService.OpenEntityRecord('MJ: Action Categories', key);\n }\n\n public openExecution(execution: MJActionExecutionLogEntity): void {\n const key = new CompositeKey([{ FieldName: 'ID', Value: execution.ID }]);\n this.navigationService.OpenEntityRecord('MJ: Action Execution Logs', key);\n }\n\n public isExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n const code = execution.ResultCode?.toLowerCase();\n return code === 'success' || code === 'ok' || code === 'completed' || code === '200';\n }\n\n public getStatusColor(status: string): 'success' | 'warning' | 'error' | 'info' {\n switch (status) {\n case 'Active': return 'success';\n case 'Pending': return 'warning';\n case 'Disabled': return 'error';\n default: return 'info';\n }\n }\n\n public getTypeIcon(type: string): string {\n switch (type) {\n case 'Generated': return 'fa-solid fa-robot';\n case 'Custom': return 'fa-solid fa-code';\n default: return 'fa-solid fa-cog';\n }\n }\n\n // Metric card click handlers - these now filter the current view\n public onTotalActionsClick(): void {\n // Reset filters to show all actions\n this.selectedStatus$.next('all');\n this.selectedType$.next('all');\n }\n\n public onExecutionsClick(): void {\n // This would navigate to execution monitoring resource\n }\n\n public onCategoriesClick(): void {\n // This would navigate to categories view\n }\n\n public onAIGeneratedClick(): void {\n // Filter to show AI generated actions in the current view\n this.selectedType$.next('Generated');\n }\n\n public onActionGalleryClick(): void {\n // This would navigate to action gallery view\n }\n\n public toggleExecutionExpanded(execution: ExecutionWithExpanded): void {\n execution.isExpanded = !execution.isExpanded;\n }\n\n public formatJsonParams(params: string | null): string {\n if (!params) return '{}';\n try {\n // Try to parse and reformat\n const parsed = JSON.parse(params);\n return JSON.stringify(parsed, null, 2);\n } catch {\n // If parse fails, return as is\n return params;\n }\n }\n\n /**\n * Gets the icon class for an action\n * Falls back to type-based icon if no IconClass is set\n */\n public getActionIcon(action: MJActionEntity): string {\n return action?.IconClass || this.getTypeIcon(action.Type);\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Actions Overview';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-bolt';\n }\n}","<mj-page-layout>\n <mj-page-header\n Title=\"Actions Overview\"\n Icon=\"fa-solid fa-bolt\"\n Subtitle=\"Health and activity for all configured actions\">\n <!-- [meta] intentionally omitted — chrome slot discipline audit Task B.\n totalActions was a single inventory count; the body's KPI cards\n surface this and other metrics in their proper place. -->\n <div actions>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetFilters()\">\n <mj-filter-panel\n [Fields]=\"FilterFields\"\n [Values]=\"FilterValues\"\n (ValuesChange)=\"onFilterValuesChange($event)\"\n (Reset)=\"resetFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search actions...\"\n [Value]=\"searchTerm$.value\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n <div class=\"actions-overview\" >\n\n <!-- Metrics Cards -->\n <div class=\"metrics-grid\">\n <div class=\"metric-card primary clickable\" (click)=\"onTotalActionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-cogs\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalActions }}</div>\n <div class=\"metric-label\">Total Actions</div>\n <div class=\"metric-breakdown\">\n <span class=\"active\">{{ metrics.activeActions }} Active</span>\n <span class=\"pending\">{{ metrics.pendingActions }} Pending</span>\n <span class=\"disabled\">{{ metrics.disabledActions }} Disabled</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card success clickable\" (click)=\"onExecutionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-play-circle\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalExecutions }}</div>\n <div class=\"metric-label\">Total Executions</div>\n <div class=\"metric-breakdown\">\n <span class=\"recent\">{{ metrics.recentExecutions }} in last 24h</span>\n <span class=\"success-rate\">{{ metrics.successRate }}% success rate</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card info clickable\" (click)=\"onCategoriesClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-sitemap\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalCategories }}</div>\n <div class=\"metric-label\">Categories</div>\n <div class=\"metric-breakdown\">\n <span>Organized structure</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card warning clickable\" (click)=\"onAIGeneratedClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-robot\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.aiGeneratedActions }}</div>\n <div class=\"metric-label\">AI Generated</div>\n <div class=\"metric-breakdown\">\n <span class=\"custom\">{{ metrics.customActions }} Custom</span>\n </div>\n </div>\n </div>\n \n <div class=\"metric-card gallery clickable\" (click)=\"onActionGalleryClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-th\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">\n <i class=\"fa-solid fa-sparkles\"></i>\n </div>\n <div class=\"metric-label\">Action Gallery</div>\n <div class=\"metric-breakdown\">\n <span>Visual action browser</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Content Grid -->\n <div class=\"content-grid\">\n <!-- Category Statistics -->\n <div class=\"panel category-stats\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Category Performance</h3>\n </div>\n <div class=\"panel-content\">\n @if (categoryStats.length > 0) {\n <div class=\"category-list\">\n @for (category of categoryStats; track category.categoryId) {\n <div class=\"category-item\" (click)=\"openCategory(category.categoryId)\">\n <div class=\"category-info\">\n <div class=\"category-name\">{{ category.categoryName }}</div>\n <div class=\"category-metrics\">\n <span class=\"metric\">{{ category.actionCount }} actions</span>\n <span class=\"metric\">{{ category.executionCount }} executions</span>\n <span class=\"metric success-rate\">{{ category.successRate }}% success</span>\n </div>\n </div>\n <div class=\"category-chart\">\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" [style.width.%]=\"category.successRate\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-chart-bar\"></i>\n <p>No category statistics available</p>\n </div>\n }\n </div>\n </div>\n\n <!-- Recent Actions -->\n <div class=\"panel recent-actions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-clock\"></i> Recent Actions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentActions.length > 0) {\n <div class=\"actions-list\">\n @for (action of recentActions; track action.ID) {\n <div class=\"action-item\" (click)=\"openAction(action)\">\n <div class=\"action-icon\">\n <i [class]=\"getActionIcon(action)\"></i>\n </div>\n <div class=\"action-info\">\n <div class=\"action-name\">{{ action.Name }}</div>\n <div class=\"action-description\">{{ action.Description || 'No description' }}</div>\n </div>\n <div class=\"action-status\">\n <span class=\"status-chip\" [attr.data-color]=\"getStatusColor(action.Status)\">\n {{ action.Status }}\n </span>\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-cogs\"></i>\n <p>No recent actions found</p>\n </div>\n }\n </div>\n </div>\n\n <!-- Recent Executions -->\n <div class=\"panel recent-executions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentExecutions.length > 0) {\n <div class=\"executions-list\">\n @for (execution of recentExecutions; track execution.ID) {\n <div class=\"execution-item\" [class.expanded]=\"execution.isExpanded\">\n <div class=\"execution-header\" (click)=\"toggleExecutionExpanded(execution)\">\n <div class=\"execution-time\">\n {{ execution.StartedAt | date:'MMM d, HH:mm' }}\n </div>\n <div class=\"execution-info\">\n <div class=\"execution-action\">{{ execution.Action || 'Action ID: ' + execution.ActionID }}</div>\n <div class=\"execution-user\">{{ execution.User || 'User ID: ' + execution.UserID }}</div>\n </div>\n <div class=\"execution-result\">\n <span class=\"status-chip\" [attr.data-color]=\"isExecutionSuccess(execution) ? 'success' : 'error'\">\n {{ execution.ResultCode || 'Unknown' }}\n </span>\n </div>\n <div class=\"execution-expand-icon\">\n <i [class]=\"execution.isExpanded ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chevron-down'\"></i>\n </div>\n </div>\n @if (execution.isExpanded) {\n <div class=\"execution-details\">\n <div class=\"params-section\">\n <h5><i class=\"fa-solid fa-sliders\"></i> Parameters</h5>\n <mj-code-editor \n [ngModel]=\"formatJsonParams(execution.Params)\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 150px; width: 100%;\">\n </mj-code-editor>\n </div>\n <div class=\"execution-actions\">\n <button mjButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"openExecution(execution)\">\n <i class=\"fa-solid fa-external-link\"></i> Open Details\n </button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-history\"></i>\n <p>No recent executions found</p>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (isLoading) {\n <div class=\"loading-overlay\">\n <mj-loading [showText]=\"false\" size=\"medium\"></mj-loading>\n </div>\n }\n</div>\n </mj-page-body>\n</mj-page-layout>"]}
|