@memberjunction/ng-dashboards 5.22.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 +275 -64
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2645 -436
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +240 -6
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +2166 -256
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- 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 +1 -2
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +12 -27
- package/dist/AI/components/vectors/vector-management-resource.component.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-share-dialog.component.js +9 -9
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.js +4 -4
- 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 +7 -2
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +59 -31
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/index.d.ts +1 -0
- package/dist/KnowledgeHub/index.d.ts.map +1 -1
- package/dist/KnowledgeHub/index.js +1 -0
- package/dist/KnowledgeHub/index.js.map +1 -1
- 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/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/Testing/testing-dashboard.component.js +9 -10
- 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 +16 -20
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +23 -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 +12 -18
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +15 -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 +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/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 -13
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +0 -27
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +47 -55
|
@@ -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 { 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 private destroy$ = new Subject<void>();\n\n constructor(private navigationService: NavigationService, \n private cdr: ChangeDetectorRef ) {\n super();\n }\n\n ngOnInit(): void {\n this.setupFilters();\n this.loadData();\n }\n\n ngOnDestroy(): void {\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 = new RunView();\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 = new RunView();\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 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}","<div class=\"actions-overview\" >\n <!-- Header with search and filters -->\n <div class=\"overview-header\">\n <div class=\"filters-row\">\n <div class=\"search-container\">\n <kendo-textbox \n placeholder=\"Search actions...\" \n [value]=\"searchTerm$.value\"\n (valueChange)=\"onSearchChange($event)\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n </kendo-textbox>\n </div>\n \n <div class=\"filter-container\">\n <kendo-dropdownlist \n [data]=\"[\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Disabled', value: 'Disabled' }\n ]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n [value]=\"selectedStatus$.value\"\n (valueChange)=\"onStatusFilterChange($event)\">\n </kendo-dropdownlist>\n </div>\n \n <div class=\"filter-container\">\n <kendo-dropdownlist \n [data]=\"[\n { text: 'All Types', value: 'all' },\n { text: 'AI Generated', value: 'Generated' },\n { text: 'Custom', value: 'Custom' }\n ]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n [value]=\"selectedType$.value\"\n (valueChange)=\"onTypeFilterChange($event)\">\n </kendo-dropdownlist>\n </div>\n </div>\n </div>\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 <kendo-chip \n [themeColor]=\"getStatusColor(action.Status)\"\n [size]=\"'small'\">\n {{ action.Status }}\n </kendo-chip>\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 <kendo-chip \n [themeColor]=\"isExecutionSuccess(execution) ? 'success' : 'error'\"\n [size]=\"'small'\">\n {{ execution.ResultCode || 'Unknown' }}\n </kendo-chip>\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 kendoButton \n themeColor=\"primary\" \n size=\"small\"\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>"]}
|
|
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 { 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 private destroy$ = new Subject<void>();\n\n constructor(private navigationService: NavigationService, \n private cdr: ChangeDetectorRef ) {\n super();\n }\n\n ngOnInit(): void {\n this.setupFilters();\n this.loadData();\n }\n\n ngOnDestroy(): void {\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 = new RunView();\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 = new RunView();\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 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}","<div class=\"actions-overview\" >\n <!-- Header with search and filters -->\n <div class=\"overview-header\">\n <div class=\"filters-row\">\n <div class=\"search-container\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\" class=\"mj-input\"\n placeholder=\"Search actions...\"\n [value]=\"searchTerm$.value\"\n (input)=\"onSearchChange($any($event.target).value)\" />\n </div>\n </div>\n \n <div class=\"filter-container\">\n <mj-dropdown\n [Data]=\"[\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Disabled', value: 'Disabled' }\n ]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [ngModel]=\"selectedStatus$.value\"\n (ValueChange)=\"onStatusFilterChange($any($event))\">\n </mj-dropdown>\n </div>\n \n <div class=\"filter-container\">\n <mj-dropdown\n [Data]=\"[\n { text: 'All Types', value: 'all' },\n { text: 'AI Generated', value: 'Generated' },\n { text: 'Custom', value: 'Custom' }\n ]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [ngModel]=\"selectedType$.value\"\n (ValueChange)=\"onTypeFilterChange($any($event))\">\n </mj-dropdown>\n </div>\n </div>\n </div>\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>"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"categories-list-view.component.d.ts","sourceRoot":"","sources":["../../../src/Actions/components/categories-list-view.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AAEnF,OAAO,EAAE,sBAAsB,EAAkB,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAW,eAAe,EAAE,MAAM,MAAM,CAAC;;AAIhD,UAAU,iBAAkB,SAAQ,sBAAsB;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,
|
|
1
|
+
{"version":3,"file":"categories-list-view.component.d.ts","sourceRoot":"","sources":["../../../src/Actions/components/categories-list-view.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AAEnF,OAAO,EAAE,sBAAsB,EAAkB,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAW,eAAe,EAAE,MAAM,MAAM,CAAC;;AAIhD,UAAU,iBAAkB,SAAQ,sBAAsB;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAiSa,2BAA4B,YAAW,MAAM,EAAE,SAAS;IACzD,gBAAgB;oBAAiC,MAAM;kBAAY,MAAM;OAAK;IAEjF,SAAS,UAAQ;IACjB,UAAU,EAAE,iBAAiB,EAAE,CAAM;IACrC,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IAC7C,WAAW,0BAAmC;IAErD,OAAO,CAAC,QAAQ,CAAuB;;IAIvC,QAAQ,IAAI,IAAI;IAKhB,WAAW,IAAI,IAAI;IAKnB,OAAO,CAAC,WAAW;YAUL,QAAQ;IAmDtB,OAAO,CAAC,WAAW;IAaZ,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC,YAAY,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAOpD,WAAW,CAAC,QAAQ,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;yCA3G7D,2BAA2B;2CAA3B,2BAA2B;CAiHvC"}
|
|
@@ -4,15 +4,11 @@ import { Subject, BehaviorSubject } from 'rxjs';
|
|
|
4
4
|
import { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';
|
|
5
5
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@
|
|
8
|
-
import * as i2 from "@
|
|
9
|
-
import * as i3 from "@memberjunction/ng-
|
|
10
|
-
import * as i4 from "@memberjunction/ng-shared-generic";
|
|
7
|
+
import * as i1 from "@memberjunction/ng-ui-components";
|
|
8
|
+
import * as i2 from "@memberjunction/ng-container-directives";
|
|
9
|
+
import * as i3 from "@memberjunction/ng-shared-generic";
|
|
11
10
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
12
|
-
function
|
|
13
|
-
i0.ɵɵelement(0, "i", 11);
|
|
14
|
-
} }
|
|
15
|
-
function CategoriesListViewComponent_Conditional_12_For_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
11
|
+
function CategoriesListViewComponent_Conditional_13_For_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
16
12
|
i0.ɵɵelementStart(0, "div", 18);
|
|
17
13
|
i0.ɵɵtext(1);
|
|
18
14
|
i0.ɵɵelementEnd();
|
|
@@ -21,17 +17,17 @@ function CategoriesListViewComponent_Conditional_12_For_1_Conditional_6_Template
|
|
|
21
17
|
i0.ɵɵadvance();
|
|
22
18
|
i0.ɵɵtextInterpolate1(" ", category_r2.Description, " ");
|
|
23
19
|
} }
|
|
24
|
-
function
|
|
20
|
+
function CategoriesListViewComponent_Conditional_13_For_1_Template(rf, ctx) { if (rf & 1) {
|
|
25
21
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
26
22
|
i0.ɵɵelementStart(0, "div", 13);
|
|
27
|
-
i0.ɵɵlistener("click", function
|
|
23
|
+
i0.ɵɵlistener("click", function CategoriesListViewComponent_Conditional_13_For_1_Template_div_click_0_listener() { const category_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.openCategory(category_r2)); });
|
|
28
24
|
i0.ɵɵelementStart(1, "div", 14)(2, "div", 15);
|
|
29
25
|
i0.ɵɵelement(3, "i", 16);
|
|
30
26
|
i0.ɵɵelementEnd();
|
|
31
27
|
i0.ɵɵelementStart(4, "h3", 17);
|
|
32
28
|
i0.ɵɵtext(5);
|
|
33
29
|
i0.ɵɵelementEnd()();
|
|
34
|
-
i0.ɵɵconditionalCreate(6,
|
|
30
|
+
i0.ɵɵconditionalCreate(6, CategoriesListViewComponent_Conditional_13_For_1_Conditional_6_Template, 2, 1, "div", 18);
|
|
35
31
|
i0.ɵɵelementStart(7, "div", 19)(8, "div", 20)(9, "span", 21);
|
|
36
32
|
i0.ɵɵtext(10);
|
|
37
33
|
i0.ɵɵelementEnd();
|
|
@@ -45,7 +41,7 @@ function CategoriesListViewComponent_Conditional_12_For_1_Template(rf, ctx) { if
|
|
|
45
41
|
i0.ɵɵtext(17, "Active");
|
|
46
42
|
i0.ɵɵelementEnd()()();
|
|
47
43
|
i0.ɵɵelementStart(18, "div", 24)(19, "button", 25);
|
|
48
|
-
i0.ɵɵlistener("click", function
|
|
44
|
+
i0.ɵɵlistener("click", function CategoriesListViewComponent_Conditional_13_For_1_Template_button_click_19_listener($event) { const category_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.viewActions(category_r2, $event)); });
|
|
49
45
|
i0.ɵɵelement(20, "i", 26);
|
|
50
46
|
i0.ɵɵtext(21, " View Actions ");
|
|
51
47
|
i0.ɵɵelementEnd()()();
|
|
@@ -59,17 +55,15 @@ function CategoriesListViewComponent_Conditional_12_For_1_Template(rf, ctx) { if
|
|
|
59
55
|
i0.ɵɵtextInterpolate(category_r2.actionCount || 0);
|
|
60
56
|
i0.ɵɵadvance(5);
|
|
61
57
|
i0.ɵɵtextInterpolate(category_r2.activeActionCount || 0);
|
|
62
|
-
i0.ɵɵadvance(4);
|
|
63
|
-
i0.ɵɵproperty("fillMode", "outline")("size", "small");
|
|
64
58
|
} }
|
|
65
|
-
function
|
|
66
|
-
i0.ɵɵrepeaterCreate(0,
|
|
59
|
+
function CategoriesListViewComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
60
|
+
i0.ɵɵrepeaterCreate(0, CategoriesListViewComponent_Conditional_13_For_1_Template, 22, 4, "div", 12, _forTrack0);
|
|
67
61
|
} if (rf & 2) {
|
|
68
62
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
69
63
|
i0.ɵɵrepeater(ctx_r2.filteredCategories);
|
|
70
64
|
} }
|
|
71
|
-
function
|
|
72
|
-
i0.ɵɵelementStart(0, "div",
|
|
65
|
+
function CategoriesListViewComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
66
|
+
i0.ɵɵelementStart(0, "div", 10);
|
|
73
67
|
i0.ɵɵelement(1, "i", 3);
|
|
74
68
|
i0.ɵɵelementStart(2, "h3");
|
|
75
69
|
i0.ɵɵtext(3, "No categories found");
|
|
@@ -78,8 +72,8 @@ function CategoriesListViewComponent_Conditional_13_Template(rf, ctx) { if (rf &
|
|
|
78
72
|
i0.ɵɵtext(5, "Try adjusting your search criteria");
|
|
79
73
|
i0.ɵɵelementEnd()();
|
|
80
74
|
} }
|
|
81
|
-
function
|
|
82
|
-
i0.ɵɵelementStart(0, "div",
|
|
75
|
+
function CategoriesListViewComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
76
|
+
i0.ɵɵelementStart(0, "div", 11);
|
|
83
77
|
i0.ɵɵelement(1, "mj-loading", 27);
|
|
84
78
|
i0.ɵɵelementEnd();
|
|
85
79
|
} if (rf & 2) {
|
|
@@ -177,7 +171,7 @@ export class CategoriesListViewComponent {
|
|
|
177
171
|
this.openCategory(category);
|
|
178
172
|
}
|
|
179
173
|
static ɵfac = function CategoriesListViewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CategoriesListViewComponent)(); };
|
|
180
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CategoriesListViewComponent, selectors: [["mj-categories-list-view"]], outputs: { openEntityRecord: "openEntityRecord" }, standalone: false, decls:
|
|
174
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CategoriesListViewComponent, selectors: [["mj-categories-list-view"]], outputs: { openEntityRecord: "openEntityRecord" }, standalone: false, decls: 16, vars: 5, consts: [["mjFillContainer", "", 1, "categories-list-view"], [1, "list-header"], [1, "header-title"], [1, "fa-solid", "fa-sitemap"], [1, "results-count"], [1, "search-container"], [1, "search-input-wrapper"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", "placeholder", "Search categories...", 1, "mj-input", 3, "input", "value"], [1, "categories-grid"], [1, "empty-state"], [1, "loading-overlay"], [1, "category-card"], [1, "category-card", 3, "click"], [1, "category-header"], [1, "category-icon"], [1, "fa-solid", "fa-folder"], [1, "category-name"], [1, "category-description"], [1, "category-stats"], [1, "stat-item"], [1, "stat-value"], [1, "stat-label"], [1, "stat-value", "active"], [1, "category-footer"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "click"], [1, "fa-solid", "fa-cogs"], ["size", "large", 3, "showText"]], template: function CategoriesListViewComponent_Template(rf, ctx) { if (rf & 1) {
|
|
181
175
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h2");
|
|
182
176
|
i0.ɵɵelement(4, "i", 3);
|
|
183
177
|
i0.ɵɵtext(5, " Action Categories");
|
|
@@ -185,25 +179,26 @@ export class CategoriesListViewComponent {
|
|
|
185
179
|
i0.ɵɵelementStart(6, "div", 4);
|
|
186
180
|
i0.ɵɵtext(7);
|
|
187
181
|
i0.ɵɵelementEnd()();
|
|
188
|
-
i0.ɵɵelementStart(8, "div", 5)(9, "
|
|
189
|
-
i0.ɵɵ
|
|
190
|
-
i0.ɵɵ
|
|
191
|
-
i0.ɵɵ
|
|
192
|
-
i0.ɵɵ
|
|
193
|
-
i0.ɵɵ
|
|
182
|
+
i0.ɵɵelementStart(8, "div", 5)(9, "div", 6);
|
|
183
|
+
i0.ɵɵelement(10, "i", 7);
|
|
184
|
+
i0.ɵɵelementStart(11, "input", 8);
|
|
185
|
+
i0.ɵɵlistener("input", function CategoriesListViewComponent_Template_input_input_11_listener($event) { return ctx.onSearchChange($event.target.value); });
|
|
186
|
+
i0.ɵɵelementEnd()()()();
|
|
187
|
+
i0.ɵɵelementStart(12, "div", 9);
|
|
188
|
+
i0.ɵɵconditionalCreate(13, CategoriesListViewComponent_Conditional_13_Template, 2, 0)(14, CategoriesListViewComponent_Conditional_14_Template, 6, 0, "div", 10);
|
|
194
189
|
i0.ɵɵelementEnd();
|
|
195
|
-
i0.ɵɵconditionalCreate(
|
|
190
|
+
i0.ɵɵconditionalCreate(15, CategoriesListViewComponent_Conditional_15_Template, 2, 1, "div", 11);
|
|
196
191
|
i0.ɵɵelementEnd();
|
|
197
192
|
} if (rf & 2) {
|
|
198
193
|
i0.ɵɵadvance(7);
|
|
199
194
|
i0.ɵɵtextInterpolate2("", ctx.filteredCategories.length, " of ", ctx.categories.length, " categories");
|
|
200
|
-
i0.ɵɵadvance(
|
|
195
|
+
i0.ɵɵadvance(4);
|
|
201
196
|
i0.ɵɵproperty("value", ctx.searchTerm$.value);
|
|
202
|
-
i0.ɵɵadvance(3);
|
|
203
|
-
i0.ɵɵconditional(ctx.filteredCategories.length > 0 ? 12 : !ctx.isLoading ? 13 : -1);
|
|
204
197
|
i0.ɵɵadvance(2);
|
|
205
|
-
i0.ɵɵconditional(ctx.isLoading ? 14 : -1);
|
|
206
|
-
|
|
198
|
+
i0.ɵɵconditional(ctx.filteredCategories.length > 0 ? 13 : !ctx.isLoading ? 14 : -1);
|
|
199
|
+
i0.ɵɵadvance(2);
|
|
200
|
+
i0.ɵɵconditional(ctx.isLoading ? 15 : -1);
|
|
201
|
+
} }, dependencies: [i1.MJButtonDirective, i2.FillContainer, i3.LoadingComponent], styles: [".categories-list-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n padding: 1.5rem;\n height: 100%;\n overflow-y: auto;\n\n .list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 1rem;\n\n .header-title {\n display: flex;\n align-items: baseline;\n gap: 1rem;\n\n h2 {\n margin: 0;\n font-size: 1.5rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n\n i {\n color: var(--mj-brand-primary);\n }\n }\n\n .results-count {\n color: var(--mj-text-muted);\n font-size: 0.875rem;\n }\n }\n\n .search-container {\n min-width: 250px;\n \n .search-input-wrapper {\n width: 100%;\n }\n }\n }\n\n .categories-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 1.5rem;\n flex: 1;\n align-content: start;\n\n .category-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 0.75rem;\n padding: 1.5rem;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n border-color: var(--mj-brand-primary);\n }\n\n .category-header {\n display: flex;\n align-items: center;\n gap: 1rem;\n\n .category-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 3rem;\n height: 3rem;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-radius: 0.5rem;\n\n i {\n color: var(--mj-brand-primary);\n font-size: 1.25rem;\n }\n }\n\n .category-name {\n margin: 0;\n font-size: 1.125rem;\n font-weight: 600;\n flex: 1;\n }\n }\n\n .category-description {\n color: var(--mj-text-muted);\n font-size: 0.875rem;\n line-height: 1.5;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .category-stats {\n display: flex;\n gap: 2rem;\n padding: 1rem;\n background: var(--mj-bg-surface);\n border-radius: 0.5rem;\n\n .stat-item {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n\n .stat-value {\n font-size: 1.5rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n\n &.active {\n color: var(--mj-status-success);\n }\n }\n\n .stat-label {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n font-weight: 600;\n }\n }\n }\n\n .category-footer {\n display: flex;\n justify-content: flex-end;\n margin-top: auto;\n }\n }\n }\n\n .empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 4rem;\n text-align: center;\n color: var(--mj-text-muted);\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n opacity: 0.5;\n }\n\n h3 {\n margin: 0 0 0.5rem 0;\n font-size: 1.25rem;\n font-weight: 600;\n }\n\n p {\n margin: 0;\n font-size: 0.875rem;\n }\n }\n\n .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(255, 255, 255, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n }\n }\n\n @media (max-width: 768px) {\n .categories-list-view[_ngcontent-%COMP%] {\n padding: 1rem;\n\n .list-header {\n flex-direction: column;\n align-items: stretch;\n\n .search-container {\n min-width: unset;\n }\n }\n\n .categories-grid {\n grid-template-columns: 1fr;\n gap: 1rem;\n }\n }\n }"] });
|
|
207
202
|
}
|
|
208
203
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CategoriesListViewComponent, [{
|
|
209
204
|
type: Component,
|
|
@@ -217,14 +212,13 @@ export class CategoriesListViewComponent {
|
|
|
217
212
|
</div>
|
|
218
213
|
|
|
219
214
|
<div class="search-container">
|
|
220
|
-
<
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
</kendo-textbox>
|
|
215
|
+
<div class="search-input-wrapper">
|
|
216
|
+
<i class="fa-solid fa-search search-icon"></i>
|
|
217
|
+
<input type="text" class="mj-input"
|
|
218
|
+
placeholder="Search categories..."
|
|
219
|
+
[value]="searchTerm$.value"
|
|
220
|
+
(input)="onSearchChange($any($event.target).value)" />
|
|
221
|
+
</div>
|
|
228
222
|
</div>
|
|
229
223
|
</div>
|
|
230
224
|
|
|
@@ -258,9 +252,9 @@ export class CategoriesListViewComponent {
|
|
|
258
252
|
</div>
|
|
259
253
|
|
|
260
254
|
<div class="category-footer">
|
|
261
|
-
<button
|
|
262
|
-
|
|
263
|
-
|
|
255
|
+
<button mjButton
|
|
256
|
+
variant="outline"
|
|
257
|
+
size="sm"
|
|
264
258
|
(click)="viewActions(category, $event)">
|
|
265
259
|
<i class="fa-solid fa-cogs"></i> View Actions
|
|
266
260
|
</button>
|
|
@@ -282,9 +276,9 @@ export class CategoriesListViewComponent {
|
|
|
282
276
|
</div>
|
|
283
277
|
}
|
|
284
278
|
</div>
|
|
285
|
-
`, styles: ["\n .categories-list-view {\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n padding: 1.5rem;\n height: 100%;\n overflow-y: auto;\n\n .list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 1rem;\n\n .header-title {\n display: flex;\n align-items: baseline;\n gap: 1rem;\n\n h2 {\n margin: 0;\n font-size: 1.5rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n\n i {\n color: var(--
|
|
279
|
+
`, styles: ["\n .categories-list-view {\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n padding: 1.5rem;\n height: 100%;\n overflow-y: auto;\n\n .list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 1rem;\n\n .header-title {\n display: flex;\n align-items: baseline;\n gap: 1rem;\n\n h2 {\n margin: 0;\n font-size: 1.5rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n\n i {\n color: var(--mj-brand-primary);\n }\n }\n\n .results-count {\n color: var(--mj-text-muted);\n font-size: 0.875rem;\n }\n }\n\n .search-container {\n min-width: 250px;\n \n .search-input-wrapper {\n width: 100%;\n }\n }\n }\n\n .categories-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 1.5rem;\n flex: 1;\n align-content: start;\n\n .category-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 0.75rem;\n padding: 1.5rem;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n border-color: var(--mj-brand-primary);\n }\n\n .category-header {\n display: flex;\n align-items: center;\n gap: 1rem;\n\n .category-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 3rem;\n height: 3rem;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-radius: 0.5rem;\n\n i {\n color: var(--mj-brand-primary);\n font-size: 1.25rem;\n }\n }\n\n .category-name {\n margin: 0;\n font-size: 1.125rem;\n font-weight: 600;\n flex: 1;\n }\n }\n\n .category-description {\n color: var(--mj-text-muted);\n font-size: 0.875rem;\n line-height: 1.5;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .category-stats {\n display: flex;\n gap: 2rem;\n padding: 1rem;\n background: var(--mj-bg-surface);\n border-radius: 0.5rem;\n\n .stat-item {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n\n .stat-value {\n font-size: 1.5rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n\n &.active {\n color: var(--mj-status-success);\n }\n }\n\n .stat-label {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n font-weight: 600;\n }\n }\n }\n\n .category-footer {\n display: flex;\n justify-content: flex-end;\n margin-top: auto;\n }\n }\n }\n\n .empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 4rem;\n text-align: center;\n color: var(--mj-text-muted);\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n opacity: 0.5;\n }\n\n h3 {\n margin: 0 0 0.5rem 0;\n font-size: 1.25rem;\n font-weight: 600;\n }\n\n p {\n margin: 0;\n font-size: 0.875rem;\n }\n }\n\n .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(255, 255, 255, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n }\n }\n\n @media (max-width: 768px) {\n .categories-list-view {\n padding: 1rem;\n\n .list-header {\n flex-direction: column;\n align-items: stretch;\n\n .search-container {\n min-width: unset;\n }\n }\n\n .categories-grid {\n grid-template-columns: 1fr;\n gap: 1rem;\n }\n }\n }\n "] }]
|
|
286
280
|
}], () => [], { openEntityRecord: [{
|
|
287
281
|
type: Output
|
|
288
282
|
}] }); })();
|
|
289
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CategoriesListViewComponent, { className: "CategoriesListViewComponent", filePath: "src/Actions/components/categories-list-view.component.ts", lineNumber:
|
|
283
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CategoriesListViewComponent, { className: "CategoriesListViewComponent", filePath: "src/Actions/components/categories-list-view.component.ts", lineNumber: 302 }); })();
|
|
290
284
|
//# sourceMappingURL=categories-list-view.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"categories-list-view.component.js","sourceRoot":"","sources":["../../../src/Actions/components/categories-list-view.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\nimport { RunView, LogError } from '@memberjunction/core';\nimport { MJActionCategoryEntity, MJActionEntity } from '@memberjunction/core-entities';\nimport { Subject, BehaviorSubject } from 'rxjs';\nimport { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';\nimport { UUIDsEqual } from '@memberjunction/global';\n\ninterface CategoryWithStats extends MJActionCategoryEntity {\n actionCount?: number;\n activeActionCount?: number;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-categories-list-view',\n template: `\n <div class=\"categories-list-view\" mjFillContainer>\n <!-- Header with search -->\n <div class=\"list-header\">\n <div class=\"header-title\">\n <h2><i class=\"fa-solid fa-sitemap\"></i> Action Categories</h2>\n <div class=\"results-count\">{{ filteredCategories.length }} of {{ categories.length }} categories</div>\n </div>\n \n <div class=\"search-container\">\n <kendo-textbox \n placeholder=\"Search categories...\" \n [value]=\"searchTerm$.value\"\n (valueChange)=\"onSearchChange($event)\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n </kendo-textbox>\n </div>\n </div>\n\n <!-- Categories Grid -->\n <div class=\"categories-grid\">\n @if (filteredCategories.length > 0) {\n @for (category of filteredCategories; track category.ID) {\n <div class=\"category-card\" (click)=\"openCategory(category)\">\n <div class=\"category-header\">\n <div class=\"category-icon\">\n <i class=\"fa-solid fa-folder\"></i>\n </div>\n <h3 class=\"category-name\">{{ category.Name }}</h3>\n </div>\n \n @if (category.Description) {\n <div class=\"category-description\">\n {{ category.Description }}\n </div>\n }\n \n <div class=\"category-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{ category.actionCount || 0 }}</span>\n <span class=\"stat-label\">Total Actions</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-value active\">{{ category.activeActionCount || 0 }}</span>\n <span class=\"stat-label\">Active</span>\n </div>\n </div>\n \n <div class=\"category-footer\">\n <button kendoButton \n [fillMode]=\"'outline'\" \n [size]=\"'small'\"\n (click)=\"viewActions(category, $event)\">\n <i class=\"fa-solid fa-cogs\"></i> View Actions\n </button>\n </div>\n </div>\n }\n } @else if (!isLoading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sitemap\"></i>\n <h3>No categories found</h3>\n <p>Try adjusting your search criteria</p>\n </div>\n }\n </div>\n\n @if (isLoading) {\n <div class=\"loading-overlay\">\n <mj-loading [showText]=\"false\" size=\"large\"></mj-loading>\n </div>\n }\n </div>\n `,\n styles: [`\n .categories-list-view {\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n padding: 1.5rem;\n height: 100%;\n overflow-y: auto;\n\n .list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 1rem;\n\n .header-title {\n display: flex;\n align-items: baseline;\n gap: 1rem;\n\n h2 {\n margin: 0;\n font-size: 1.5rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n\n i {\n color: var(--kendo-color-primary);\n }\n }\n\n .results-count {\n color: var(--kendo-color-subtle);\n font-size: 0.875rem;\n }\n }\n\n .search-container {\n min-width: 250px;\n \n kendo-textbox {\n width: 100%;\n }\n }\n }\n\n .categories-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 1.5rem;\n flex: 1;\n align-content: start;\n\n .category-card {\n background: var(--kendo-color-surface);\n border: 1px solid var(--kendo-color-border);\n border-radius: 0.75rem;\n padding: 1.5rem;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n border-color: var(--kendo-color-primary);\n }\n\n .category-header {\n display: flex;\n align-items: center;\n gap: 1rem;\n\n .category-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 3rem;\n height: 3rem;\n background: var(--kendo-color-primary-subtle);\n border-radius: 0.5rem;\n\n i {\n color: var(--kendo-color-primary);\n font-size: 1.25rem;\n }\n }\n\n .category-name {\n margin: 0;\n font-size: 1.125rem;\n font-weight: 600;\n flex: 1;\n }\n }\n\n .category-description {\n color: var(--kendo-color-subtle);\n font-size: 0.875rem;\n line-height: 1.5;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .category-stats {\n display: flex;\n gap: 2rem;\n padding: 1rem;\n background: var(--kendo-color-app-surface);\n border-radius: 0.5rem;\n\n .stat-item {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n\n .stat-value {\n font-size: 1.5rem;\n font-weight: 700;\n color: var(--kendo-color-on-app-surface);\n\n &.active {\n color: var(--kendo-color-success);\n }\n }\n\n .stat-label {\n font-size: 0.75rem;\n color: var(--kendo-color-subtle);\n font-weight: 600;\n }\n }\n }\n\n .category-footer {\n display: flex;\n justify-content: flex-end;\n margin-top: auto;\n }\n }\n }\n\n .empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 4rem;\n text-align: center;\n color: var(--kendo-color-subtle);\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n opacity: 0.5;\n }\n\n h3 {\n margin: 0 0 0.5rem 0;\n font-size: 1.25rem;\n font-weight: 600;\n }\n\n p {\n margin: 0;\n font-size: 0.875rem;\n }\n }\n\n .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(255, 255, 255, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n }\n }\n\n @media (max-width: 768px) {\n .categories-list-view {\n padding: 1rem;\n\n .list-header {\n flex-direction: column;\n align-items: stretch;\n\n .search-container {\n min-width: unset;\n }\n }\n\n .categories-grid {\n grid-template-columns: 1fr;\n gap: 1rem;\n }\n }\n }\n `]\n})\nexport class CategoriesListViewComponent implements OnInit, OnDestroy {\n @Output() openEntityRecord = new EventEmitter<{entityName: string; recordId: string}>();\n\n public isLoading = true;\n public categories: CategoryWithStats[] = [];\n public filteredCategories: CategoryWithStats[] = [];\n public searchTerm$ = new BehaviorSubject<string>('');\n\n private destroy$ = new Subject<void>();\n\n constructor() {}\n\n ngOnInit(): void {\n this.setupSearch();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private setupSearch(): void {\n this.searchTerm$.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.applyFilter();\n });\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n console.log('Loading categories data...');\n \n const rv = new RunView();\n const [categoriesResult, actionsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Categories', \n OrderBy: 'Name' \n },\n {\n EntityName: 'MJ: Actions', \n OrderBy: 'Name'\n }\n ]);\n \n console.log('Categories result:', categoriesResult);\n console.log('Actions result for categories:', actionsResult);\n \n if (!categoriesResult.Success) {\n throw new Error('Failed to load categories: ' + categoriesResult.ErrorMessage);\n }\n \n const categories = (categoriesResult.Results || []) as MJActionCategoryEntity[];\n const actions = (actionsResult.Results || []) as MJActionEntity[];\n \n console.log(`Loaded ${categories.length} categories and ${actions.length} actions`);\n\n // Calculate stats for each category\n this.categories = categories.map(category => {\n const categoryActions = actions.filter(a => UUIDsEqual(a.CategoryID, category.ID));\n return {\n ...category,\n actionCount: categoryActions.length,\n activeActionCount: categoryActions.filter(a => a.Status === 'Active').length\n } as CategoryWithStats;\n });\n\n this.applyFilter();\n\n } catch (error) {\n console.error('Error loading categories data:', error);\n LogError('Failed to load categories data', undefined, error);\n this.categories = [];\n this.filteredCategories = [];\n } finally {\n this.isLoading = false;\n }\n }\n\n private applyFilter(): void {\n const searchTerm = this.searchTerm$.value.toLowerCase();\n \n if (!searchTerm) {\n this.filteredCategories = [...this.categories];\n } else {\n this.filteredCategories = this.categories.filter(category => \n category.Name.toLowerCase().includes(searchTerm) ||\n (category.Description || '').toLowerCase().includes(searchTerm)\n );\n }\n }\n\n public onSearchChange(searchTerm: string): void {\n this.searchTerm$.next(searchTerm);\n }\n\n public openCategory(category: MJActionCategoryEntity): void {\n this.openEntityRecord.emit({\n entityName: 'MJ: Action Categories',\n recordId: category.ID\n });\n }\n\n public viewActions(category: MJActionCategoryEntity, event: Event): void {\n event.stopPropagation();\n // This could navigate to the actions list with a pre-applied category filter\n // For now, just open the category\n this.openCategory(category);\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"categories-list-view.component.js","sourceRoot":"","sources":["../../../src/Actions/components/categories-list-view.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\nimport { RunView, LogError } from '@memberjunction/core';\nimport { MJActionCategoryEntity, MJActionEntity } from '@memberjunction/core-entities';\nimport { Subject, BehaviorSubject } from 'rxjs';\nimport { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';\nimport { UUIDsEqual } from '@memberjunction/global';\n\ninterface CategoryWithStats extends MJActionCategoryEntity {\n actionCount?: number;\n activeActionCount?: number;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-categories-list-view',\n template: `\n <div class=\"categories-list-view\" mjFillContainer>\n <!-- Header with search -->\n <div class=\"list-header\">\n <div class=\"header-title\">\n <h2><i class=\"fa-solid fa-sitemap\"></i> Action Categories</h2>\n <div class=\"results-count\">{{ filteredCategories.length }} of {{ categories.length }} categories</div>\n </div>\n \n <div class=\"search-container\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\" class=\"mj-input\"\n placeholder=\"Search categories...\"\n [value]=\"searchTerm$.value\"\n (input)=\"onSearchChange($any($event.target).value)\" />\n </div>\n </div>\n </div>\n\n <!-- Categories Grid -->\n <div class=\"categories-grid\">\n @if (filteredCategories.length > 0) {\n @for (category of filteredCategories; track category.ID) {\n <div class=\"category-card\" (click)=\"openCategory(category)\">\n <div class=\"category-header\">\n <div class=\"category-icon\">\n <i class=\"fa-solid fa-folder\"></i>\n </div>\n <h3 class=\"category-name\">{{ category.Name }}</h3>\n </div>\n \n @if (category.Description) {\n <div class=\"category-description\">\n {{ category.Description }}\n </div>\n }\n \n <div class=\"category-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{ category.actionCount || 0 }}</span>\n <span class=\"stat-label\">Total Actions</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-value active\">{{ category.activeActionCount || 0 }}</span>\n <span class=\"stat-label\">Active</span>\n </div>\n </div>\n \n <div class=\"category-footer\">\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"viewActions(category, $event)\">\n <i class=\"fa-solid fa-cogs\"></i> View Actions\n </button>\n </div>\n </div>\n }\n } @else if (!isLoading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sitemap\"></i>\n <h3>No categories found</h3>\n <p>Try adjusting your search criteria</p>\n </div>\n }\n </div>\n\n @if (isLoading) {\n <div class=\"loading-overlay\">\n <mj-loading [showText]=\"false\" size=\"large\"></mj-loading>\n </div>\n }\n </div>\n `,\n styles: [`\n .categories-list-view {\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n padding: 1.5rem;\n height: 100%;\n overflow-y: auto;\n\n .list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 1rem;\n\n .header-title {\n display: flex;\n align-items: baseline;\n gap: 1rem;\n\n h2 {\n margin: 0;\n font-size: 1.5rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n\n i {\n color: var(--mj-brand-primary);\n }\n }\n\n .results-count {\n color: var(--mj-text-muted);\n font-size: 0.875rem;\n }\n }\n\n .search-container {\n min-width: 250px;\n \n .search-input-wrapper {\n width: 100%;\n }\n }\n }\n\n .categories-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 1.5rem;\n flex: 1;\n align-content: start;\n\n .category-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 0.75rem;\n padding: 1.5rem;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n border-color: var(--mj-brand-primary);\n }\n\n .category-header {\n display: flex;\n align-items: center;\n gap: 1rem;\n\n .category-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 3rem;\n height: 3rem;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-radius: 0.5rem;\n\n i {\n color: var(--mj-brand-primary);\n font-size: 1.25rem;\n }\n }\n\n .category-name {\n margin: 0;\n font-size: 1.125rem;\n font-weight: 600;\n flex: 1;\n }\n }\n\n .category-description {\n color: var(--mj-text-muted);\n font-size: 0.875rem;\n line-height: 1.5;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .category-stats {\n display: flex;\n gap: 2rem;\n padding: 1rem;\n background: var(--mj-bg-surface);\n border-radius: 0.5rem;\n\n .stat-item {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n\n .stat-value {\n font-size: 1.5rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n\n &.active {\n color: var(--mj-status-success);\n }\n }\n\n .stat-label {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n font-weight: 600;\n }\n }\n }\n\n .category-footer {\n display: flex;\n justify-content: flex-end;\n margin-top: auto;\n }\n }\n }\n\n .empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 4rem;\n text-align: center;\n color: var(--mj-text-muted);\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n opacity: 0.5;\n }\n\n h3 {\n margin: 0 0 0.5rem 0;\n font-size: 1.25rem;\n font-weight: 600;\n }\n\n p {\n margin: 0;\n font-size: 0.875rem;\n }\n }\n\n .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(255, 255, 255, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n }\n }\n\n @media (max-width: 768px) {\n .categories-list-view {\n padding: 1rem;\n\n .list-header {\n flex-direction: column;\n align-items: stretch;\n\n .search-container {\n min-width: unset;\n }\n }\n\n .categories-grid {\n grid-template-columns: 1fr;\n gap: 1rem;\n }\n }\n }\n `]\n})\nexport class CategoriesListViewComponent implements OnInit, OnDestroy {\n @Output() openEntityRecord = new EventEmitter<{entityName: string; recordId: string}>();\n\n public isLoading = true;\n public categories: CategoryWithStats[] = [];\n public filteredCategories: CategoryWithStats[] = [];\n public searchTerm$ = new BehaviorSubject<string>('');\n\n private destroy$ = new Subject<void>();\n\n constructor() {}\n\n ngOnInit(): void {\n this.setupSearch();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private setupSearch(): void {\n this.searchTerm$.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.applyFilter();\n });\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n console.log('Loading categories data...');\n \n const rv = new RunView();\n const [categoriesResult, actionsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Categories', \n OrderBy: 'Name' \n },\n {\n EntityName: 'MJ: Actions', \n OrderBy: 'Name'\n }\n ]);\n \n console.log('Categories result:', categoriesResult);\n console.log('Actions result for categories:', actionsResult);\n \n if (!categoriesResult.Success) {\n throw new Error('Failed to load categories: ' + categoriesResult.ErrorMessage);\n }\n \n const categories = (categoriesResult.Results || []) as MJActionCategoryEntity[];\n const actions = (actionsResult.Results || []) as MJActionEntity[];\n \n console.log(`Loaded ${categories.length} categories and ${actions.length} actions`);\n\n // Calculate stats for each category\n this.categories = categories.map(category => {\n const categoryActions = actions.filter(a => UUIDsEqual(a.CategoryID, category.ID));\n return {\n ...category,\n actionCount: categoryActions.length,\n activeActionCount: categoryActions.filter(a => a.Status === 'Active').length\n } as CategoryWithStats;\n });\n\n this.applyFilter();\n\n } catch (error) {\n console.error('Error loading categories data:', error);\n LogError('Failed to load categories data', undefined, error);\n this.categories = [];\n this.filteredCategories = [];\n } finally {\n this.isLoading = false;\n }\n }\n\n private applyFilter(): void {\n const searchTerm = this.searchTerm$.value.toLowerCase();\n \n if (!searchTerm) {\n this.filteredCategories = [...this.categories];\n } else {\n this.filteredCategories = this.categories.filter(category => \n category.Name.toLowerCase().includes(searchTerm) ||\n (category.Description || '').toLowerCase().includes(searchTerm)\n );\n }\n }\n\n public onSearchChange(searchTerm: string): void {\n this.searchTerm$.next(searchTerm);\n }\n\n public openCategory(category: MJActionCategoryEntity): void {\n this.openEntityRecord.emit({\n entityName: 'MJ: Action Categories',\n recordId: category.ID\n });\n }\n\n public viewActions(category: MJActionCategoryEntity, event: Event): void {\n event.stopPropagation();\n // This could navigate to the actions list with a pre-applied category filter\n // For now, just open the category\n this.openCategory(category);\n }\n}"]}
|
|
@@ -37,7 +37,7 @@ let CodeManagementComponent = class CodeManagementComponent extends BaseResource
|
|
|
37
37
|
i0.ɵɵelementStart(5, "p");
|
|
38
38
|
i0.ɵɵtext(6, "AI code generation approval workflow coming soon...");
|
|
39
39
|
i0.ɵɵelementEnd()()();
|
|
40
|
-
} }, styles: [".code-management-placeholder[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n\n .placeholder-content {\n text-align: center;\n color: var(--
|
|
40
|
+
} }, styles: [".code-management-placeholder[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n\n .placeholder-content {\n text-align: center;\n color: var(--mj-text-muted);\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n opacity: 0.5;\n }\n\n h3 {\n margin: 0 0 0.5rem 0;\n font-size: 1.25rem;\n font-weight: 600;\n }\n\n p {\n margin: 0;\n font-size: 0.875rem;\n }\n }\n }"] });
|
|
41
41
|
};
|
|
42
42
|
CodeManagementComponent = __decorate([
|
|
43
43
|
RegisterClass(BaseResourceComponent, 'ActionsCodeResource')
|
|
@@ -53,7 +53,7 @@ export { CodeManagementComponent };
|
|
|
53
53
|
<p>AI code generation approval workflow coming soon...</p>
|
|
54
54
|
</div>
|
|
55
55
|
</div>
|
|
56
|
-
`, styles: ["\n .code-management-placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n\n .placeholder-content {\n text-align: center;\n color: var(--
|
|
56
|
+
`, styles: ["\n .code-management-placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n\n .placeholder-content {\n text-align: center;\n color: var(--mj-text-muted);\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n opacity: 0.5;\n }\n\n h3 {\n margin: 0 0 0.5rem 0;\n font-size: 1.25rem;\n font-weight: 600;\n }\n\n p {\n margin: 0;\n font-size: 0.875rem;\n }\n }\n }\n "] }]
|
|
57
57
|
}], () => [{ type: i1.NavigationService }], null); })();
|
|
58
58
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CodeManagementComponent, { className: "CodeManagementComponent", filePath: "src/Actions/components/code-management.component.ts", lineNumber: 52 }); })();
|
|
59
59
|
//# sourceMappingURL=code-management.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-management.component.js","sourceRoot":"","sources":["../../../src/Actions/components/code-management.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAqB,MAAM,2BAA2B,CAAC;;;AACrF;;GAEG;AA6CI,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,qBAAqB;IAC5C;IAApB,YAAoB,iBAAoC;QACtD,KAAK,EAAE,CAAC;QADU,sBAAiB,GAAjB,iBAAiB,CAAmB;IAExD,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,IAAkB;QAC7C,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,IAAkB;QAC3C,OAAO,kBAAkB,CAAC;IAC5B,CAAC;iHAfU,uBAAuB;6DAAvB,uBAAuB;YAtC9B,AADF,8BAA0C,aACP;YAC/B,uBAAgC;YAChC,0BAAI;YAAA,+BAAe;YAAA,iBAAK;YACxB,yBAAG;YAAA,mEAAmD;YAE1D,AADE,AADwD,iBAAI,EACtD,EACF;;;AAiCG,uBAAuB;IA5CnC,aAAa,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;GA4C/C,uBAAuB,CAgBnC;;iFAhBY,uBAAuB;cA3CnC,SAAS;6BACI,KAAK,YACP,oBAAoB,YACpB;;;;;;;;GAQT;;kFAgCU,uBAAuB","sourcesContent":["import { Component, OnInit } from '@angular/core';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\n/**\n * Code Management Resource - displays AI code generation workflow\n */\n@RegisterClass(BaseResourceComponent, 'ActionsCodeResource')\n@Component({\n standalone: false,\n selector: 'mj-code-management',\n template: `\n <div class=\"code-management-placeholder\" >\n <div class=\"placeholder-content\">\n <i class=\"fa-solid fa-code\"></i>\n <h3>Code Management</h3>\n <p>AI code generation approval workflow coming soon...</p>\n </div>\n </div>\n `,\n styles: [`\n .code-management-placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n\n .placeholder-content {\n text-align: center;\n color: var(--
|
|
1
|
+
{"version":3,"file":"code-management.component.js","sourceRoot":"","sources":["../../../src/Actions/components/code-management.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAqB,MAAM,2BAA2B,CAAC;;;AACrF;;GAEG;AA6CI,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,qBAAqB;IAC5C;IAApB,YAAoB,iBAAoC;QACtD,KAAK,EAAE,CAAC;QADU,sBAAiB,GAAjB,iBAAiB,CAAmB;IAExD,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,IAAkB;QAC7C,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,IAAkB;QAC3C,OAAO,kBAAkB,CAAC;IAC5B,CAAC;iHAfU,uBAAuB;6DAAvB,uBAAuB;YAtC9B,AADF,8BAA0C,aACP;YAC/B,uBAAgC;YAChC,0BAAI;YAAA,+BAAe;YAAA,iBAAK;YACxB,yBAAG;YAAA,mEAAmD;YAE1D,AADE,AADwD,iBAAI,EACtD,EACF;;;AAiCG,uBAAuB;IA5CnC,aAAa,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;GA4C/C,uBAAuB,CAgBnC;;iFAhBY,uBAAuB;cA3CnC,SAAS;6BACI,KAAK,YACP,oBAAoB,YACpB;;;;;;;;GAQT;;kFAgCU,uBAAuB","sourcesContent":["import { Component, OnInit } from '@angular/core';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\n/**\n * Code Management Resource - displays AI code generation workflow\n */\n@RegisterClass(BaseResourceComponent, 'ActionsCodeResource')\n@Component({\n standalone: false,\n selector: 'mj-code-management',\n template: `\n <div class=\"code-management-placeholder\" >\n <div class=\"placeholder-content\">\n <i class=\"fa-solid fa-code\"></i>\n <h3>Code Management</h3>\n <p>AI code generation approval workflow coming soon...</p>\n </div>\n </div>\n `,\n styles: [`\n .code-management-placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n\n .placeholder-content {\n text-align: center;\n color: var(--mj-text-muted);\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n opacity: 0.5;\n }\n\n h3 {\n margin: 0 0 0.5rem 0;\n font-size: 1.25rem;\n font-weight: 600;\n }\n\n p {\n margin: 0;\n font-size: 0.875rem;\n }\n }\n }\n `]\n})\nexport class CodeManagementComponent extends BaseResourceComponent implements OnInit {\n constructor(private navigationService: NavigationService) {\n super();\n }\n\n ngOnInit(): void {\n this.NotifyLoadComplete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Code Management';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-code';\n }\n}"]}
|
|
@@ -37,7 +37,7 @@ let EntityIntegrationComponent = class EntityIntegrationComponent extends BaseRe
|
|
|
37
37
|
i0.ɵɵelementStart(5, "p");
|
|
38
38
|
i0.ɵɵtext(6, "Entity-action mapping and relationship management coming soon...");
|
|
39
39
|
i0.ɵɵelementEnd()()();
|
|
40
|
-
} }, styles: [".entity-integration-placeholder[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n\n .placeholder-content {\n text-align: center;\n color: var(--
|
|
40
|
+
} }, styles: [".entity-integration-placeholder[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n\n .placeholder-content {\n text-align: center;\n color: var(--mj-text-muted);\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n opacity: 0.5;\n }\n\n h3 {\n margin: 0 0 0.5rem 0;\n font-size: 1.25rem;\n font-weight: 600;\n }\n\n p {\n margin: 0;\n font-size: 0.875rem;\n }\n }\n }"] });
|
|
41
41
|
};
|
|
42
42
|
EntityIntegrationComponent = __decorate([
|
|
43
43
|
RegisterClass(BaseResourceComponent, 'ActionsEntitiesResource')
|
|
@@ -53,7 +53,7 @@ export { EntityIntegrationComponent };
|
|
|
53
53
|
<p>Entity-action mapping and relationship management coming soon...</p>
|
|
54
54
|
</div>
|
|
55
55
|
</div>
|
|
56
|
-
`, styles: ["\n .entity-integration-placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n\n .placeholder-content {\n text-align: center;\n color: var(--
|
|
56
|
+
`, styles: ["\n .entity-integration-placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n\n .placeholder-content {\n text-align: center;\n color: var(--mj-text-muted);\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n opacity: 0.5;\n }\n\n h3 {\n margin: 0 0 0.5rem 0;\n font-size: 1.25rem;\n font-weight: 600;\n }\n\n p {\n margin: 0;\n font-size: 0.875rem;\n }\n }\n }\n "] }]
|
|
57
57
|
}], () => [{ type: i1.NavigationService }], null); })();
|
|
58
58
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntityIntegrationComponent, { className: "EntityIntegrationComponent", filePath: "src/Actions/components/entity-integration.component.ts", lineNumber: 52 }); })();
|
|
59
59
|
//# sourceMappingURL=entity-integration.component.js.map
|