@memberjunction/ng-dashboards 5.30.1 → 5.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +4 -4
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts +2 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +8 -6
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +6 -5
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +2 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +6 -5
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +6 -5
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts +2 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +7 -4
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +3 -2
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +10 -6
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +6 -5
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +2 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +6 -5
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +55 -52
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +15 -15
- 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 +4 -3
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +2 -2
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +2 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +10 -8
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +2 -2
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts +2 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js +13 -10
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1181 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -0
- package/dist/AI/components/tags/tags-resource.component.js +7487 -0
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +25 -21
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/index.d.ts +1 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +5 -0
- package/dist/AI/index.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +12 -4
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +5 -4
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts +2 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +5 -5
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +11 -10
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-list.component.d.ts +2 -1
- package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-list.component.js +6 -5
- package/dist/APIKeys/api-key-list.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +4 -4
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +8 -6
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.js +10 -8
- package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.d.ts +2 -1
- package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +6 -5
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +2 -2
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts +2 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +6 -5
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +1 -1
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts +2 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +6 -4
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts +2 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.js +7 -5
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts +2 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +7 -5
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +4 -4
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +1 -1
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +1 -1
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +3 -3
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +1 -1
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +3 -3
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +5 -4
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +2 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +6 -4
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +11 -2
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +61 -27
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -2
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +19 -11
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts +4 -2
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +11 -3
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +10 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.js +18 -9
- package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts +11 -1
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-studio-state.service.js +23 -3
- package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts +6 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.js +16 -6
- package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.js +1 -1
- package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +13 -13
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts +4 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.js +5 -2
- package/dist/DashboardBrowser/dashboard-share-adapter.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +3 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -4
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +3 -2
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +7 -6
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +3 -2
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +6 -5
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +10 -9
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts +6 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +15 -5
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts +64 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js +400 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts +42 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js +232 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts +14 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js +38 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts +24 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js +77 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts +88 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js +404 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts +12 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js +116 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +55 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +204 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +61 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/entity-list.component.js +485 -0
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts +52 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.js +320 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts +79 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js +378 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts +85 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js +429 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts +58 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js +333 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts +36 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js +345 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts +13 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js +81 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +30 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +131 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer-erd.d.ts +19 -0
- package/dist/DatabaseDesigner/database-designer-erd.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer-erd.js +84 -0
- package/dist/DatabaseDesigner/database-designer-erd.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer.types.d.ts +167 -0
- package/dist/DatabaseDesigner/database-designer.types.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer.types.js +26 -0
- package/dist/DatabaseDesigner/database-designer.types.js.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.d.ts +94 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.js +392 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.js.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.service.d.ts +78 -0
- package/dist/DatabaseDesigner/services/database-designer.service.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.service.js +273 -0
- package/dist/DatabaseDesigner/services/database-designer.service.js.map +1 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts +79 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.js +204 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.js.map +1 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/action-pin-config-dialog.component.d.ts +2 -1
- package/dist/Home/action-pin-config-dialog.component.d.ts.map +1 -1
- package/dist/Home/action-pin-config-dialog.component.js +6 -4
- package/dist/Home/action-pin-config-dialog.component.js.map +1 -1
- package/dist/Home/action-pin-runner-dialog.component.d.ts +2 -1
- package/dist/Home/action-pin-runner-dialog.component.d.ts.map +1 -1
- package/dist/Home/action-pin-runner-dialog.component.js +5 -4
- package/dist/Home/action-pin-runner-dialog.component.js.map +1 -1
- package/dist/Home/home-application.d.ts.map +1 -1
- package/dist/Home/home-application.js +10 -12
- package/dist/Home/home-application.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +3 -3
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +1 -0
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +11 -10
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2 -2
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +1 -0
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +1 -0
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +5 -4
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/services/integration-data.service.d.ts +5 -1
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +27 -19
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +6 -6
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +8 -6
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +6 -6
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +3 -3
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +6 -6
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +4 -4
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +6 -6
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +11 -10
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +5 -0
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +11 -3
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts +2 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +8 -6
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts +2 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +7 -5
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +12 -12
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/Permissions/permissions-shared.d.ts +3 -3
- package/dist/Permissions/permissions-shared.d.ts.map +1 -1
- package/dist/Permissions/permissions-shared.js +5 -5
- package/dist/Permissions/permissions-shared.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +1 -1
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +1 -2
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +1 -0
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +5 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +21 -13
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +2 -2
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +9 -7
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.d.ts +6 -1
- package/dist/Testing/services/testing-instrumentation.service.d.ts.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.js +21 -11
- package/dist/Testing/services/testing-instrumentation.service.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +3 -1
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +15 -11
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +5 -5
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +1 -2
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +3 -3
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +35 -34
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +6 -0
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +13 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +3 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -1
- package/dist/public-api.js.map +1 -1
- package/dist/shared/entity-field-display.d.ts +4 -3
- package/dist/shared/entity-field-display.d.ts.map +1 -1
- package/dist/shared/entity-field-display.js +9 -9
- package/dist/shared/entity-field-display.js.map +1 -1
- package/package.json +52 -51
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
|
|
2
2
|
import { RunView } from '@memberjunction/core';
|
|
3
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "@memberjunction/ng-ui-components";
|
|
5
6
|
import * as i2 from "@memberjunction/ng-shared-generic";
|
|
@@ -138,7 +139,7 @@ function ActionCardComponent_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
|
138
139
|
i0.ɵɵadvance();
|
|
139
140
|
i0.ɵɵconditional(ctx_r0.ExecutionStats.isLoading ? 1 : 2);
|
|
140
141
|
} }
|
|
141
|
-
export class ActionCardComponent {
|
|
142
|
+
export class ActionCardComponent extends BaseAngularComponent {
|
|
142
143
|
cdr;
|
|
143
144
|
Action;
|
|
144
145
|
Categories = new Map();
|
|
@@ -155,6 +156,7 @@ export class ActionCardComponent {
|
|
|
155
156
|
isLoaded: false
|
|
156
157
|
};
|
|
157
158
|
constructor(cdr) {
|
|
159
|
+
super();
|
|
158
160
|
this.cdr = cdr;
|
|
159
161
|
}
|
|
160
162
|
onCardClick() {
|
|
@@ -185,7 +187,7 @@ export class ActionCardComponent {
|
|
|
185
187
|
this.ExecutionStats.isLoading = true;
|
|
186
188
|
this.cdr.markForCheck();
|
|
187
189
|
try {
|
|
188
|
-
const rv =
|
|
190
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
189
191
|
// Load both executions and result codes in parallel
|
|
190
192
|
const [executionsResult, resultCodesResult] = await rv.RunViews([
|
|
191
193
|
{
|
|
@@ -309,7 +311,7 @@ export class ActionCardComponent {
|
|
|
309
311
|
return date.toLocaleDateString();
|
|
310
312
|
}
|
|
311
313
|
static ɵfac = function ActionCardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActionCardComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
312
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionCardComponent, selectors: [["mj-action-card"]], inputs: { Action: "Action", Categories: "Categories" }, outputs: { ActionClick: "ActionClick", EditClick: "EditClick", RunClick: "RunClick", CategoryClick: "CategoryClick" }, standalone: false, decls: 29, vars: 21, consts: [[1, "action-card", 3, "click"], [1, "card-main"], [1, "action-icon"], [1, "action-content"], [1, "action-header"], [1, "action-name", 3, "title"], [1, "action-badges"], [1, "status-chip"], ["data-color", "info", 1, "status-chip"], [1, "action-description", 3, "title"], [1, "action-meta"], [1, "meta-item", "category", 3, "click", "title"], [1, "fa-solid", "fa-folder"], [1, "meta-item"], [1, "action-buttons"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View Stats", 3, "click"], ["mjButton", "", "variant", "primary", "size", "sm", "title", "Run Action", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit Action", 3, "click"], [1, "fa-solid", "fa-pen"], [1, "card-expanded"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-clock"], [1, "stats-loading"], ["size", "small", 3, "showText"], [1, "stats-grid"], [1, "stat-item"], [1, "stat-value"], [1, "stat-label"], [1, "stat-item", "params"], [1, "params-preview"], [1, "params-header"], [1, "fa-solid", "fa-sliders"], [1, "params-list"], [1, "param-tag", 3, "required"], [1, "param-more"], [1, "param-tag"], [1, "required-marker"]], template: function ActionCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
314
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionCardComponent, selectors: [["mj-action-card"]], inputs: { Action: "Action", Categories: "Categories" }, outputs: { ActionClick: "ActionClick", EditClick: "EditClick", RunClick: "RunClick", CategoryClick: "CategoryClick" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 29, vars: 21, consts: [[1, "action-card", 3, "click"], [1, "card-main"], [1, "action-icon"], [1, "action-content"], [1, "action-header"], [1, "action-name", 3, "title"], [1, "action-badges"], [1, "status-chip"], ["data-color", "info", 1, "status-chip"], [1, "action-description", 3, "title"], [1, "action-meta"], [1, "meta-item", "category", 3, "click", "title"], [1, "fa-solid", "fa-folder"], [1, "meta-item"], [1, "action-buttons"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View Stats", 3, "click"], ["mjButton", "", "variant", "primary", "size", "sm", "title", "Run Action", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit Action", 3, "click"], [1, "fa-solid", "fa-pen"], [1, "card-expanded"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-clock"], [1, "stats-loading"], ["size", "small", 3, "showText"], [1, "stats-grid"], [1, "stat-item"], [1, "stat-value"], [1, "stat-label"], [1, "stat-item", "params"], [1, "params-preview"], [1, "params-header"], [1, "fa-solid", "fa-sliders"], [1, "params-list"], [1, "param-tag", 3, "required"], [1, "param-more"], [1, "param-tag"], [1, "required-marker"]], template: function ActionCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
313
315
|
i0.ɵɵelementStart(0, "div", 0);
|
|
314
316
|
i0.ɵɵlistener("click", function ActionCardComponent_Template_div_click_0_listener() { return ctx.onCardClick(); });
|
|
315
317
|
i0.ɵɵelementStart(1, "div", 1)(2, "div", 2);
|
|
@@ -401,5 +403,5 @@ export class ActionCardComponent {
|
|
|
401
403
|
}], CategoryClick: [{
|
|
402
404
|
type: Output
|
|
403
405
|
}] }); })();
|
|
404
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionCardComponent, { className: "ActionCardComponent", filePath: "src/Actions/components/explorer/action-card.component.ts", lineNumber:
|
|
406
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionCardComponent, { className: "ActionCardComponent", filePath: "src/Actions/components/explorer/action-card.component.ts", lineNumber: 29 }); })();
|
|
405
407
|
//# sourceMappingURL=action-card.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-card.component.js","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/action-card.component.ts","../../../../src/Actions/components/explorer/action-card.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ChangeDetectorRef\n} from '@angular/core';\nimport { MJActionCategoryEntity, MJActionExecutionLogEntity } from '@memberjunction/core-entities';\nimport { MJActionEntityExtended } from '@memberjunction/actions-base';\nimport { RunView } from '@memberjunction/core';\n\nexport interface ActionExecutionStats {\n totalExecutions: number;\n successRate: number;\n lastExecuted: Date | null;\n isLoading: boolean;\n isLoaded: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-action-card',\n templateUrl: './action-card.component.html',\n styleUrls: ['./action-card.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ActionCardComponent {\n @Input() Action!: MJActionEntityExtended;\n @Input() Categories: Map<string, MJActionCategoryEntity> = new Map();\n @Output() ActionClick = new EventEmitter<MJActionEntityExtended>();\n @Output() EditClick = new EventEmitter<MJActionEntityExtended>();\n @Output() RunClick = new EventEmitter<MJActionEntityExtended>();\n @Output() CategoryClick = new EventEmitter<string>();\n\n public IsExpanded = false;\n public ExecutionStats: ActionExecutionStats = {\n totalExecutions: 0,\n successRate: 0,\n lastExecuted: null,\n isLoading: false,\n isLoaded: false\n };\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n public onCardClick(): void {\n this.ActionClick.emit(this.Action);\n }\n\n public onEditClick(event: MouseEvent): void {\n event.stopPropagation();\n this.EditClick.emit(this.Action);\n }\n\n public onRunClick(event: MouseEvent): void {\n event.stopPropagation();\n this.RunClick.emit(this.Action);\n }\n\n public onCategoryClick(event: MouseEvent): void {\n event.stopPropagation();\n if (this.Action.CategoryID) {\n this.CategoryClick.emit(this.Action.CategoryID);\n }\n }\n\n public toggleExpanded(event: MouseEvent): void {\n event.stopPropagation();\n this.IsExpanded = !this.IsExpanded;\n\n if (this.IsExpanded && !this.ExecutionStats.isLoaded && !this.ExecutionStats.isLoading) {\n this.loadExecutionStats();\n }\n }\n\n private async loadExecutionStats(): Promise<void> {\n this.ExecutionStats.isLoading = true;\n this.cdr.markForCheck();\n\n try {\n const rv = new RunView();\n\n // Load both executions and result codes in parallel\n const [executionsResult, resultCodesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Execution Logs',\n ExtraFilter: `ActionID='${this.Action.ID}'`,\n OrderBy: 'StartedAt DESC',\n MaxRows: 100,\n ResultType: 'simple',\n Fields: ['ID', 'ResultCode', 'StartedAt']\n },\n {\n EntityName: 'MJ: Action Result Codes',\n ExtraFilter: `ActionID='${this.Action.ID}'`,\n ResultType: 'simple',\n Fields: ['ResultCode', 'IsSuccess']\n }\n ]);\n\n if (executionsResult.Success && executionsResult.Results) {\n const executions = executionsResult.Results as { ID: string; ResultCode: string; StartedAt: Date }[];\n\n // Build a map of result codes to IsSuccess\n const successMap = new Map<string, boolean>();\n if (resultCodesResult.Success && resultCodesResult.Results) {\n const resultCodes = resultCodesResult.Results as { ResultCode: string; IsSuccess: boolean }[];\n resultCodes.forEach(rc => {\n successMap.set(rc.ResultCode, rc.IsSuccess);\n });\n }\n\n // Count successful executions using result code lookup\n const successful = executions.filter(e => {\n if (!e.ResultCode) return false;\n // Look up the result code in the map\n const isSuccess = successMap.get(e.ResultCode);\n // If result code is defined in the map, use it; otherwise fall back to heuristic\n if (isSuccess !== undefined) {\n return isSuccess;\n }\n // Fallback heuristic for unknown result codes\n const code = e.ResultCode.toLowerCase();\n return code === 'success' || code === 'ok' || code === 'completed';\n }).length;\n\n this.ExecutionStats = {\n totalExecutions: executions.length,\n successRate: executions.length > 0 ? Math.round((successful / executions.length) * 100) : 0,\n lastExecuted: executions.length > 0 ? new Date(executions[0].StartedAt) : null,\n isLoading: false,\n isLoaded: true\n };\n } else {\n this.ExecutionStats.isLoading = false;\n this.ExecutionStats.isLoaded = true;\n }\n } catch (error) {\n console.error('Failed to load execution stats:', error);\n this.ExecutionStats.isLoading = false;\n this.ExecutionStats.isLoaded = true;\n }\n\n this.cdr.markForCheck();\n }\n\n public getCategoryName(): string {\n if (!this.Action.CategoryID) return 'Uncategorized';\n return this.Categories.get(this.Action.CategoryID)?.Name || 'Unknown Category';\n }\n\n public getStatusColor(): 'success' | 'warning' | 'error' | 'info' {\n switch (this.Action.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 getActionIcon(): string {\n // Use custom icon if set, otherwise derive from type\n if (this.Action.IconClass) {\n return this.Action.IconClass;\n }\n switch (this.Action.Type) {\n case 'Generated': return 'fa-solid fa-robot';\n case 'Custom': return 'fa-solid fa-code';\n default: return 'fa-solid fa-bolt';\n }\n }\n\n public getTypeLabel(): string {\n return this.Action.Type === 'Generated' ? 'AI Generated' : 'Custom';\n }\n\n public getApprovalStatusIcon(): string {\n switch (this.Action.CodeApprovalStatus) {\n case 'Approved': return 'fa-solid fa-check-circle';\n case 'Pending': return 'fa-solid fa-clock';\n case 'Rejected': return 'fa-solid fa-times-circle';\n default: return 'fa-solid fa-question-circle';\n }\n }\n\n public getApprovalStatusColor(): string {\n switch (this.Action.CodeApprovalStatus) {\n case 'Approved': return 'success';\n case 'Pending': return 'warning';\n case 'Rejected': return 'error';\n default: return 'info';\n }\n }\n\n public formatDate(date: Date | null): string {\n if (!date) return 'Never';\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n\n if (minutes < 1) return 'Just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days < 7) return `${days}d ago`;\n return date.toLocaleDateString();\n }\n}\n","<div class=\"action-card\" [class.expanded]=\"IsExpanded\" (click)=\"onCardClick()\">\n <div class=\"card-main\">\n <!-- Icon -->\n <div class=\"action-icon\" [class.ai-generated]=\"Action.Type === 'Generated'\">\n <i [class]=\"getActionIcon()\"></i>\n </div>\n\n <!-- Content -->\n <div class=\"action-content\">\n <div class=\"action-header\">\n <h3 class=\"action-name\" [title]=\"Action.Name\">{{ Action.Name }}</h3>\n <div class=\"action-badges\">\n <span class=\"status-chip\" [attr.data-color]=\"getStatusColor()\">\n {{ Action.Status }}\n </span>\n @if (Action.Type === 'Generated') {\n <span class=\"status-chip\" data-color=\"info\">\n <i class=\"fa-solid fa-robot\"></i> AI\n </span>\n }\n </div>\n </div>\n\n <p class=\"action-description\" [title]=\"Action.Description || 'No description'\">\n {{ Action.Description || 'No description available' }}\n </p>\n\n <div class=\"action-meta\">\n <button class=\"meta-item category\" (click)=\"onCategoryClick($event)\" [title]=\"'View category: ' + getCategoryName()\">\n <i class=\"fa-solid fa-folder\"></i>\n <span>{{ getCategoryName() }}</span>\n </button>\n\n @if (Action.__mj_UpdatedAt) {\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>{{ formatDate(Action.__mj_UpdatedAt) }}</span>\n </span>\n }\n\n @if (Action.Type === 'Generated' && Action.CodeApprovalStatus) {\n <span class=\"meta-item\" [attr.data-status]=\"Action.CodeApprovalStatus\">\n <i [class]=\"getApprovalStatusIcon()\"></i>\n <span>{{ Action.CodeApprovalStatus }}</span>\n </span>\n }\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"action-buttons\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n title=\"View Stats\"\n (click)=\"toggleExpanded($event)\">\n <i [class]=\"IsExpanded ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chart-line'\"></i>\n </button>\n <button mjButton\n variant=\"primary\"\n size=\"sm\"\n title=\"Run Action\"\n [disabled]=\"Action.Status !== 'Active'\"\n (click)=\"onRunClick($event)\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n title=\"Edit Action\"\n (click)=\"onEditClick($event)\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n </div>\n </div>\n\n <!-- Expanded Stats Section -->\n @if (IsExpanded) {\n <div class=\"card-expanded\">\n @if (ExecutionStats.isLoading) {\n <div class=\"stats-loading\">\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n <span>Loading execution stats...</span>\n </div>\n } @else {\n <div class=\"stats-grid\">\n <div class=\"stat-item\">\n <div class=\"stat-value\">{{ ExecutionStats.totalExecutions }}</div>\n <div class=\"stat-label\">Total Runs</div>\n </div>\n <div class=\"stat-item\">\n <div class=\"stat-value\" [class.success]=\"ExecutionStats.successRate >= 90\" [class.warning]=\"ExecutionStats.successRate >= 50 && ExecutionStats.successRate < 90\" [class.error]=\"ExecutionStats.successRate < 50\">\n {{ ExecutionStats.successRate }}%\n </div>\n <div class=\"stat-label\">Success Rate</div>\n </div>\n <div class=\"stat-item\">\n <div class=\"stat-value\">{{ formatDate(ExecutionStats.lastExecuted) }}</div>\n <div class=\"stat-label\">Last Run</div>\n </div>\n <div class=\"stat-item params\">\n <div class=\"stat-value\">{{ Action.Params.length || 0 }}</div>\n <div class=\"stat-label\">Parameters</div>\n </div>\n </div>\n\n @if (Action.Params && Action.Params.length > 0) {\n <div class=\"params-preview\">\n <div class=\"params-header\">\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </div>\n <div class=\"params-list\">\n @for (param of Action.Params.slice(0, 4); track param.Name) {\n <span class=\"param-tag\" [class.required]=\"param.IsRequired\">\n {{ param.Name }}\n @if (param.IsRequired) {\n <span class=\"required-marker\">*</span>\n }\n </span>\n }\n @if (Action.Params.length > 4) {\n <span class=\"param-more\">+{{ Action.Params.length - 4 }} more</span>\n }\n </div>\n </div>\n }\n }\n </div>\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"action-card.component.js","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/action-card.component.ts","../../../../src/Actions/components/explorer/action-card.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ChangeDetectorRef\n} from '@angular/core';\nimport { MJActionCategoryEntity, MJActionExecutionLogEntity } from '@memberjunction/core-entities';\nimport { MJActionEntityExtended } from '@memberjunction/actions-base';\nimport { RunView } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\nexport interface ActionExecutionStats {\n totalExecutions: number;\n successRate: number;\n lastExecuted: Date | null;\n isLoading: boolean;\n isLoaded: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-action-card',\n templateUrl: './action-card.component.html',\n styleUrls: ['./action-card.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ActionCardComponent extends BaseAngularComponent {\n @Input() Action!: MJActionEntityExtended;\n @Input() Categories: Map<string, MJActionCategoryEntity> = new Map();\n @Output() ActionClick = new EventEmitter<MJActionEntityExtended>();\n @Output() EditClick = new EventEmitter<MJActionEntityExtended>();\n @Output() RunClick = new EventEmitter<MJActionEntityExtended>();\n @Output() CategoryClick = new EventEmitter<string>();\n\n public IsExpanded = false;\n public ExecutionStats: ActionExecutionStats = {\n totalExecutions: 0,\n successRate: 0,\n lastExecuted: null,\n isLoading: false,\n isLoaded: false\n };\n\n constructor(private cdr: ChangeDetectorRef) { super(); }\n\n public onCardClick(): void {\n this.ActionClick.emit(this.Action);\n }\n\n public onEditClick(event: MouseEvent): void {\n event.stopPropagation();\n this.EditClick.emit(this.Action);\n }\n\n public onRunClick(event: MouseEvent): void {\n event.stopPropagation();\n this.RunClick.emit(this.Action);\n }\n\n public onCategoryClick(event: MouseEvent): void {\n event.stopPropagation();\n if (this.Action.CategoryID) {\n this.CategoryClick.emit(this.Action.CategoryID);\n }\n }\n\n public toggleExpanded(event: MouseEvent): void {\n event.stopPropagation();\n this.IsExpanded = !this.IsExpanded;\n\n if (this.IsExpanded && !this.ExecutionStats.isLoaded && !this.ExecutionStats.isLoading) {\n this.loadExecutionStats();\n }\n }\n\n private async loadExecutionStats(): Promise<void> {\n this.ExecutionStats.isLoading = true;\n this.cdr.markForCheck();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n\n // Load both executions and result codes in parallel\n const [executionsResult, resultCodesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Execution Logs',\n ExtraFilter: `ActionID='${this.Action.ID}'`,\n OrderBy: 'StartedAt DESC',\n MaxRows: 100,\n ResultType: 'simple',\n Fields: ['ID', 'ResultCode', 'StartedAt']\n },\n {\n EntityName: 'MJ: Action Result Codes',\n ExtraFilter: `ActionID='${this.Action.ID}'`,\n ResultType: 'simple',\n Fields: ['ResultCode', 'IsSuccess']\n }\n ]);\n\n if (executionsResult.Success && executionsResult.Results) {\n const executions = executionsResult.Results as { ID: string; ResultCode: string; StartedAt: Date }[];\n\n // Build a map of result codes to IsSuccess\n const successMap = new Map<string, boolean>();\n if (resultCodesResult.Success && resultCodesResult.Results) {\n const resultCodes = resultCodesResult.Results as { ResultCode: string; IsSuccess: boolean }[];\n resultCodes.forEach(rc => {\n successMap.set(rc.ResultCode, rc.IsSuccess);\n });\n }\n\n // Count successful executions using result code lookup\n const successful = executions.filter(e => {\n if (!e.ResultCode) return false;\n // Look up the result code in the map\n const isSuccess = successMap.get(e.ResultCode);\n // If result code is defined in the map, use it; otherwise fall back to heuristic\n if (isSuccess !== undefined) {\n return isSuccess;\n }\n // Fallback heuristic for unknown result codes\n const code = e.ResultCode.toLowerCase();\n return code === 'success' || code === 'ok' || code === 'completed';\n }).length;\n\n this.ExecutionStats = {\n totalExecutions: executions.length,\n successRate: executions.length > 0 ? Math.round((successful / executions.length) * 100) : 0,\n lastExecuted: executions.length > 0 ? new Date(executions[0].StartedAt) : null,\n isLoading: false,\n isLoaded: true\n };\n } else {\n this.ExecutionStats.isLoading = false;\n this.ExecutionStats.isLoaded = true;\n }\n } catch (error) {\n console.error('Failed to load execution stats:', error);\n this.ExecutionStats.isLoading = false;\n this.ExecutionStats.isLoaded = true;\n }\n\n this.cdr.markForCheck();\n }\n\n public getCategoryName(): string {\n if (!this.Action.CategoryID) return 'Uncategorized';\n return this.Categories.get(this.Action.CategoryID)?.Name || 'Unknown Category';\n }\n\n public getStatusColor(): 'success' | 'warning' | 'error' | 'info' {\n switch (this.Action.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 getActionIcon(): string {\n // Use custom icon if set, otherwise derive from type\n if (this.Action.IconClass) {\n return this.Action.IconClass;\n }\n switch (this.Action.Type) {\n case 'Generated': return 'fa-solid fa-robot';\n case 'Custom': return 'fa-solid fa-code';\n default: return 'fa-solid fa-bolt';\n }\n }\n\n public getTypeLabel(): string {\n return this.Action.Type === 'Generated' ? 'AI Generated' : 'Custom';\n }\n\n public getApprovalStatusIcon(): string {\n switch (this.Action.CodeApprovalStatus) {\n case 'Approved': return 'fa-solid fa-check-circle';\n case 'Pending': return 'fa-solid fa-clock';\n case 'Rejected': return 'fa-solid fa-times-circle';\n default: return 'fa-solid fa-question-circle';\n }\n }\n\n public getApprovalStatusColor(): string {\n switch (this.Action.CodeApprovalStatus) {\n case 'Approved': return 'success';\n case 'Pending': return 'warning';\n case 'Rejected': return 'error';\n default: return 'info';\n }\n }\n\n public formatDate(date: Date | null): string {\n if (!date) return 'Never';\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n\n if (minutes < 1) return 'Just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days < 7) return `${days}d ago`;\n return date.toLocaleDateString();\n }\n}\n","<div class=\"action-card\" [class.expanded]=\"IsExpanded\" (click)=\"onCardClick()\">\n <div class=\"card-main\">\n <!-- Icon -->\n <div class=\"action-icon\" [class.ai-generated]=\"Action.Type === 'Generated'\">\n <i [class]=\"getActionIcon()\"></i>\n </div>\n\n <!-- Content -->\n <div class=\"action-content\">\n <div class=\"action-header\">\n <h3 class=\"action-name\" [title]=\"Action.Name\">{{ Action.Name }}</h3>\n <div class=\"action-badges\">\n <span class=\"status-chip\" [attr.data-color]=\"getStatusColor()\">\n {{ Action.Status }}\n </span>\n @if (Action.Type === 'Generated') {\n <span class=\"status-chip\" data-color=\"info\">\n <i class=\"fa-solid fa-robot\"></i> AI\n </span>\n }\n </div>\n </div>\n\n <p class=\"action-description\" [title]=\"Action.Description || 'No description'\">\n {{ Action.Description || 'No description available' }}\n </p>\n\n <div class=\"action-meta\">\n <button class=\"meta-item category\" (click)=\"onCategoryClick($event)\" [title]=\"'View category: ' + getCategoryName()\">\n <i class=\"fa-solid fa-folder\"></i>\n <span>{{ getCategoryName() }}</span>\n </button>\n\n @if (Action.__mj_UpdatedAt) {\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>{{ formatDate(Action.__mj_UpdatedAt) }}</span>\n </span>\n }\n\n @if (Action.Type === 'Generated' && Action.CodeApprovalStatus) {\n <span class=\"meta-item\" [attr.data-status]=\"Action.CodeApprovalStatus\">\n <i [class]=\"getApprovalStatusIcon()\"></i>\n <span>{{ Action.CodeApprovalStatus }}</span>\n </span>\n }\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"action-buttons\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n title=\"View Stats\"\n (click)=\"toggleExpanded($event)\">\n <i [class]=\"IsExpanded ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chart-line'\"></i>\n </button>\n <button mjButton\n variant=\"primary\"\n size=\"sm\"\n title=\"Run Action\"\n [disabled]=\"Action.Status !== 'Active'\"\n (click)=\"onRunClick($event)\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n title=\"Edit Action\"\n (click)=\"onEditClick($event)\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n </div>\n </div>\n\n <!-- Expanded Stats Section -->\n @if (IsExpanded) {\n <div class=\"card-expanded\">\n @if (ExecutionStats.isLoading) {\n <div class=\"stats-loading\">\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n <span>Loading execution stats...</span>\n </div>\n } @else {\n <div class=\"stats-grid\">\n <div class=\"stat-item\">\n <div class=\"stat-value\">{{ ExecutionStats.totalExecutions }}</div>\n <div class=\"stat-label\">Total Runs</div>\n </div>\n <div class=\"stat-item\">\n <div class=\"stat-value\" [class.success]=\"ExecutionStats.successRate >= 90\" [class.warning]=\"ExecutionStats.successRate >= 50 && ExecutionStats.successRate < 90\" [class.error]=\"ExecutionStats.successRate < 50\">\n {{ ExecutionStats.successRate }}%\n </div>\n <div class=\"stat-label\">Success Rate</div>\n </div>\n <div class=\"stat-item\">\n <div class=\"stat-value\">{{ formatDate(ExecutionStats.lastExecuted) }}</div>\n <div class=\"stat-label\">Last Run</div>\n </div>\n <div class=\"stat-item params\">\n <div class=\"stat-value\">{{ Action.Params.length || 0 }}</div>\n <div class=\"stat-label\">Parameters</div>\n </div>\n </div>\n\n @if (Action.Params && Action.Params.length > 0) {\n <div class=\"params-preview\">\n <div class=\"params-header\">\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </div>\n <div class=\"params-list\">\n @for (param of Action.Params.slice(0, 4); track param.Name) {\n <span class=\"param-tag\" [class.required]=\"param.IsRequired\">\n {{ param.Name }}\n @if (param.IsRequired) {\n <span class=\"required-marker\">*</span>\n }\n </span>\n }\n @if (Action.Params.length > 4) {\n <span class=\"param-more\">+{{ Action.Params.length - 4 }} more</span>\n }\n </div>\n </div>\n }\n }\n </div>\n }\n</div>\n"]}
|
|
@@ -385,7 +385,7 @@ let ActionExplorerComponent = class ActionExplorerComponent extends BaseResource
|
|
|
385
385
|
}
|
|
386
386
|
try {
|
|
387
387
|
// Load action params
|
|
388
|
-
const rv =
|
|
388
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
389
389
|
const result = await rv.RunView({
|
|
390
390
|
EntityName: 'MJ: Action Params',
|
|
391
391
|
ExtraFilter: `ActionID='${action.ID}'`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-explorer.component.js","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/action-explorer.component.ts","../../../../src/Actions/components/explorer/action-explorer.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ViewChild\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil, debounceTime, combineLatestWith } from 'rxjs/operators';\nimport { CompositeKey, LogError, RunView } from '@memberjunction/core';\nimport { MJActionCategoryEntity, MJActionEntity, MJActionParamEntity, ResourceData } from '@memberjunction/core-entities';\nimport { ActionEngineBase, MJActionEntityExtended } from '@memberjunction/actions-base';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport {\n ActionExplorerStateService,\n ActionViewMode,\n SortConfig,\n ActionFilters\n} from '../../services/action-explorer-state.service';\nimport { ActionTreePanelComponent } from './action-tree-panel.component';\n@RegisterClass(BaseResourceComponent, 'ActionExplorerResource')\n@Component({\n standalone: false,\n selector: 'mj-action-explorer',\n templateUrl: './action-explorer.component.html',\n styleUrls: ['./action-explorer.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ActionExplorerStateService]\n})\nexport class ActionExplorerComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n @ViewChild(ActionTreePanelComponent) TreePanel!: ActionTreePanelComponent;\n\n public IsLoading = true;\n public Actions: MJActionEntityExtended[] = [];\n public FilteredActions: MJActionEntityExtended[] = [];\n public Categories: MJActionCategoryEntity[] = [];\n public CategoriesMap = new Map<string, MJActionCategoryEntity>();\n\n public ViewMode: ActionViewMode = 'card';\n public SelectedCategoryId = 'all';\n public NewCategoryParentId: string | null = null;\n\n // Run dialog state\n public IsRunDialogOpen = false;\n public SelectedActionForRun: MJActionEntity | null = null;\n public SelectedActionParams: MJActionParamEntity[] = [];\n\n protected override destroy$ = new Subject<void>();\n\n constructor(\n public StateService: ActionExplorerStateService,\n private cdr: ChangeDetectorRef\n ) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.subscribeToState();\n this.applyQueryParams(this.GetQueryParams());\n this.StateService.loadSavedState();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private subscribeToState(): void {\n // Subscribe to view mode changes\n this.StateService.ViewMode$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(mode => {\n this.ViewMode = mode;\n this.cdr.markForCheck();\n });\n\n // Subscribe to selected category changes\n this.StateService.SelectedCategoryId$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(id => {\n this.SelectedCategoryId = id;\n this.applyFilters();\n this.UpdateQueryParams(this.StateService.buildQueryParams());\n this.cdr.markForCheck();\n });\n\n // Subscribe to filter and sort changes\n this.StateService.Filters$.pipe(\n combineLatestWith(this.StateService.SortConfig$),\n debounceTime(50),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.applyFilters();\n this.UpdateQueryParams(this.StateService.buildQueryParams());\n this.cdr.markForCheck();\n });\n }\n\n /**\n * Convert the framework's plain-object params into the StateService's URLSearchParams-based parser.\n */\n private applyQueryParams(params: Record<string, string>): void {\n const urlParams = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value != null) {\n urlParams.set(key, value);\n }\n }\n this.StateService.parseQueryParams(urlParams);\n }\n\n private async loadData(): Promise<void> {\n try {\n this.IsLoading = true;\n this.cdr.markForCheck();\n\n // Initialize ActionEngineBase\n await ActionEngineBase.Instance.Config(false);\n\n // Get actions and categories from engine\n this.Actions = ActionEngineBase.Instance.Actions;\n this.Categories = ActionEngineBase.Instance.ActionCategories;\n\n // Build categories map\n this.CategoriesMap.clear();\n this.Categories.forEach(c => this.CategoriesMap.set(c.ID, c));\n\n // Build tree panel if available\n if (this.TreePanel) {\n this.TreePanel.Categories = this.Categories;\n this.TreePanel.Actions = this.Actions;\n this.TreePanel.buildCategoryTree();\n }\n\n // Apply filters\n this.applyFilters();\n\n // Expand path to selected category if needed\n if (this.SelectedCategoryId !== 'all' && this.SelectedCategoryId !== 'uncategorized') {\n const categoryParentMap = new Map<string, string | null>();\n this.Categories.forEach(c => categoryParentMap.set(c.ID, c.ParentID || null));\n this.StateService.expandPathToCategory(this.SelectedCategoryId, categoryParentMap);\n }\n\n } catch (error) {\n LogError('Failed to load action explorer data', undefined, error);\n } finally {\n this.IsLoading = false;\n this.cdr.markForCheck();\n this.NotifyLoadComplete();\n }\n }\n\n private applyFilters(): void {\n let filtered = [...this.Actions];\n const filters = this.StateService.Filters;\n const sortConfig = this.StateService.SortConfig;\n\n // Apply category filter\n if (this.SelectedCategoryId === 'uncategorized') {\n filtered = filtered.filter(a => !a.CategoryID);\n } else if (this.SelectedCategoryId !== 'all') {\n // Include descendants\n const descendants = this.getDescendantCategoryIds(this.SelectedCategoryId);\n filtered = filtered.filter(a => a.CategoryID && descendants.has(a.CategoryID));\n }\n\n // Apply search filter\n if (filters.searchTerm) {\n const term = filters.searchTerm.toLowerCase();\n filtered = filtered.filter(a =>\n a.Name.toLowerCase().includes(term) ||\n (a.Description || '').toLowerCase().includes(term)\n );\n }\n\n // Apply status filter\n if (filters.statuses.length > 0) {\n filtered = filtered.filter(a => filters.statuses.includes(a.Status));\n }\n\n // Apply type filter\n if (filters.types.length > 0) {\n filtered = filtered.filter(a => filters.types.includes(a.Type));\n }\n\n // Apply sorting\n filtered = this.sortActions(filtered, sortConfig);\n\n this.FilteredActions = filtered;\n }\n\n private getDescendantCategoryIds(categoryId: string): Set<string> {\n const descendants = new Set<string>([categoryId]);\n\n const addDescendants = (parentId: string) => {\n this.Categories.forEach(c => {\n if (UUIDsEqual(c.ParentID, parentId) && !descendants.has(c.ID)) {\n descendants.add(c.ID);\n addDescendants(c.ID);\n }\n });\n };\n\n addDescendants(categoryId);\n return descendants;\n }\n\n private sortActions(actions: MJActionEntityExtended[], config: SortConfig): MJActionEntityExtended[] {\n const sorted = [...actions];\n const direction = config.direction === 'asc' ? 1 : -1;\n\n sorted.sort((a, b) => {\n let comparison = 0;\n\n switch (config.field) {\n case 'name':\n comparison = a.Name.localeCompare(b.Name);\n break;\n case 'updated':\n const dateA = a.__mj_UpdatedAt ? new Date(a.__mj_UpdatedAt).getTime() : 0;\n const dateB = b.__mj_UpdatedAt ? new Date(b.__mj_UpdatedAt).getTime() : 0;\n comparison = dateA - dateB;\n break;\n case 'status':\n comparison = (a.Status || '').localeCompare(b.Status || '');\n break;\n case 'type':\n comparison = (a.Type || '').localeCompare(b.Type || '');\n break;\n case 'category':\n const catA = this.CategoriesMap.get(a.CategoryID || '')?.Name || '';\n const catB = this.CategoriesMap.get(b.CategoryID || '')?.Name || '';\n comparison = catA.localeCompare(catB);\n break;\n }\n\n return comparison * direction;\n });\n\n return sorted;\n }\n\n /**\n * React to back/forward navigation or deep-link activation.\n * Called by the base class when the URL query params change externally.\n */\n protected override OnQueryParamsChanged(params: Record<string, string>, source: 'popstate' | 'deeplink'): void {\n this.applyQueryParams(params);\n this.applyFilters();\n this.cdr.markForCheck();\n }\n\n public async onRefresh(): Promise<void> {\n await ActionEngineBase.Instance.Config(true); // Force refresh\n await this.loadData();\n }\n\n public onCategorySelect(categoryId: string): void {\n this.StateService.setSelectedCategoryId(categoryId);\n }\n\n public onNewCategory(parentId: string | null): void {\n this.NewCategoryParentId = parentId;\n this.StateService.openNewCategoryPanel();\n }\n\n public onEditCategory(category: MJActionCategoryEntity): void {\n const key = new CompositeKey([{ FieldName: 'ID', Value: category.ID }]);\n this.navigationService.OpenEntityRecord('MJ: Action Categories', key);\n }\n\n public onNewAction(): void {\n this.StateService.openNewActionPanel();\n }\n\n public onActionClick(action: MJActionEntityExtended): void {\n const key = new CompositeKey([{ FieldName: 'ID', Value: action.ID }]);\n this.navigationService.OpenEntityRecord('MJ: Actions', key);\n }\n\n public onActionEdit(action: MJActionEntityExtended): void {\n this.onActionClick(action);\n }\n\n public async onActionRun(action: MJActionEntityExtended): Promise<void> {\n if (action.Status !== 'Active') {\n return; // Can't run inactive actions\n }\n\n try {\n // Load action params\n const rv = new RunView();\n const result = await rv.RunView<MJActionParamEntity>({\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${action.ID}'`,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n\n this.SelectedActionParams = result.Success ? result.Results || [] : [];\n // MJActionEntityExtended extends MJActionEntity, so this cast is safe\n this.SelectedActionForRun = action as unknown as MJActionEntity;\n this.IsRunDialogOpen = true;\n this.cdr.markForCheck();\n\n } catch (error) {\n LogError('Failed to open action run dialog', undefined, error);\n }\n }\n\n public OnRunDialogClose(): void {\n this.IsRunDialogOpen = false;\n this.SelectedActionForRun = null;\n this.SelectedActionParams = [];\n this.cdr.markForCheck();\n }\n\n public onCategoryClick(categoryId: string): void {\n this.StateService.setSelectedCategoryId(categoryId);\n }\n\n public async onCategoryCreated(category: MJActionCategoryEntity): Promise<void> {\n // Refresh data to include new category\n await this.loadData();\n // Select the new category\n this.StateService.setSelectedCategoryId(category.ID);\n }\n\n public async onActionCreated(): Promise<void> {\n // Refresh data to include new action\n await this.loadData();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Action Explorer';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-folder-tree';\n }\n}\n","<div class=\"action-explorer\">\n <!-- Full-page Loading Overlay -->\n @if (IsLoading) {\n <div class=\"loading-overlay\">\n <mj-loading text=\"Loading actions...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n <!-- Tree Panel (Left Sidebar) -->\n <mj-action-tree-panel\n [Categories]=\"Categories\"\n [Actions]=\"Actions\"\n (CategorySelected)=\"onCategorySelect($event)\"\n (NewCategoryClick)=\"onNewCategory($event)\"\n (EditCategoryClick)=\"onEditCategory($event)\">\n </mj-action-tree-panel>\n\n <!-- Main Content Area -->\n <div class=\"explorer-main\">\n <!-- Toolbar -->\n <mj-action-toolbar\n [TotalCount]=\"Actions.length\"\n [FilteredCount]=\"FilteredActions.length\"\n (NewActionClick)=\"onNewAction()\"\n (RefreshClick)=\"onRefresh()\">\n </mj-action-toolbar>\n\n <!-- Breadcrumb -->\n <mj-action-breadcrumb\n [SelectedCategoryId]=\"SelectedCategoryId\"\n [Categories]=\"Categories\"\n (CategorySelect)=\"onCategorySelect($event)\">\n </mj-action-breadcrumb>\n\n <!-- Content Area -->\n <div class=\"explorer-content\">\n @if (FilteredActions.length === 0 && !IsLoading) {\n <div class=\"empty-state\">\n @if (StateService.hasActiveFilters() || SelectedCategoryId !== 'all') {\n <i class=\"fa-solid fa-filter-circle-xmark\"></i>\n <h3>No actions match your filters</h3>\n <p>Try adjusting your search or filter criteria</p>\n <button mjButton\n variant=\"outline\"\n (click)=\"StateService.clearFilters(); StateService.setSelectedCategoryId('all')\">\n <i class=\"fa-solid fa-times\"></i>\n Clear All Filters\n </button>\n } @else {\n <i class=\"fa-solid fa-bolt\"></i>\n <h3>No actions yet</h3>\n <p>Create your first action to get started</p>\n <button mjButton\n variant=\"primary\"\n (click)=\"onNewAction()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Action\n </button>\n }\n </div>\n } @else {\n <!-- Card View -->\n @if (ViewMode === 'card') {\n <div class=\"card-grid\">\n @for (action of FilteredActions; track action.ID) {\n <mj-action-card\n [Action]=\"action\"\n [Categories]=\"CategoriesMap\"\n (ActionClick)=\"onActionClick($event)\"\n (EditClick)=\"onActionEdit($event)\"\n (RunClick)=\"onActionRun($event)\"\n (CategoryClick)=\"onCategoryClick($event)\">\n </mj-action-card>\n }\n </div>\n }\n\n <!-- List View -->\n @if (ViewMode === 'list') {\n <div class=\"list-view\">\n <div class=\"list-header\">\n <div class=\"header-icon\"></div>\n <div class=\"header-name\">Name</div>\n <div class=\"header-category\">Category</div>\n <div class=\"header-status\">Status</div>\n <div class=\"header-type\">Type</div>\n <div class=\"header-params\">Params</div>\n <div class=\"header-updated\">Updated</div>\n <div class=\"header-actions\"></div>\n </div>\n @for (action of FilteredActions; track action.ID) {\n <mj-action-list-item\n [Action]=\"action\"\n [Categories]=\"CategoriesMap\"\n [IsCompact]=\"false\"\n (ActionClick)=\"onActionClick($event)\"\n (EditClick)=\"onActionEdit($event)\"\n (RunClick)=\"onActionRun($event)\"\n (CategoryClick)=\"onCategoryClick($event)\">\n </mj-action-list-item>\n }\n </div>\n }\n\n <!-- Compact View -->\n @if (ViewMode === 'compact') {\n <div class=\"compact-view\">\n @for (action of FilteredActions; track action.ID) {\n <mj-action-list-item\n [Action]=\"action\"\n [Categories]=\"CategoriesMap\"\n [IsCompact]=\"true\"\n (ActionClick)=\"onActionClick($event)\"\n (EditClick)=\"onActionEdit($event)\"\n (RunClick)=\"onActionRun($event)\"\n (CategoryClick)=\"onCategoryClick($event)\">\n </mj-action-list-item>\n }\n </div>\n }\n }\n </div>\n </div>\n\n <!-- Slide-in Panels -->\n <mj-new-category-panel\n [Categories]=\"Categories\"\n [PreselectedParentId]=\"NewCategoryParentId\"\n (CategoryCreated)=\"onCategoryCreated($event)\"\n (Close)=\"NewCategoryParentId = null\">\n </mj-new-category-panel>\n\n <mj-new-action-panel\n [Categories]=\"Categories\"\n (ActionCreated)=\"onActionCreated()\">\n </mj-new-action-panel>\n\n <!-- Action Run Dialog -->\n @if (SelectedActionForRun) {\n <mj-action-test-harness-dialog\n [Action]=\"SelectedActionForRun\"\n [ActionParams]=\"SelectedActionParams\"\n [IsOpen]=\"IsRunDialogOpen\"\n (Close)=\"OnRunDialogClose()\">\n </mj-action-test-harness-dialog>\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"action-explorer.component.js","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/action-explorer.component.ts","../../../../src/Actions/components/explorer/action-explorer.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ViewChild\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil, debounceTime, combineLatestWith } from 'rxjs/operators';\nimport { CompositeKey, LogError, RunView } from '@memberjunction/core';\nimport { MJActionCategoryEntity, MJActionEntity, MJActionParamEntity, ResourceData } from '@memberjunction/core-entities';\nimport { ActionEngineBase, MJActionEntityExtended } from '@memberjunction/actions-base';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport {\n ActionExplorerStateService,\n ActionViewMode,\n SortConfig,\n ActionFilters\n} from '../../services/action-explorer-state.service';\nimport { ActionTreePanelComponent } from './action-tree-panel.component';\n@RegisterClass(BaseResourceComponent, 'ActionExplorerResource')\n@Component({\n standalone: false,\n selector: 'mj-action-explorer',\n templateUrl: './action-explorer.component.html',\n styleUrls: ['./action-explorer.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ActionExplorerStateService]\n})\nexport class ActionExplorerComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n @ViewChild(ActionTreePanelComponent) TreePanel!: ActionTreePanelComponent;\n\n public IsLoading = true;\n public Actions: MJActionEntityExtended[] = [];\n public FilteredActions: MJActionEntityExtended[] = [];\n public Categories: MJActionCategoryEntity[] = [];\n public CategoriesMap = new Map<string, MJActionCategoryEntity>();\n\n public ViewMode: ActionViewMode = 'card';\n public SelectedCategoryId = 'all';\n public NewCategoryParentId: string | null = null;\n\n // Run dialog state\n public IsRunDialogOpen = false;\n public SelectedActionForRun: MJActionEntity | null = null;\n public SelectedActionParams: MJActionParamEntity[] = [];\n\n protected override destroy$ = new Subject<void>();\n\n constructor(\n public StateService: ActionExplorerStateService,\n private cdr: ChangeDetectorRef\n ) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.subscribeToState();\n this.applyQueryParams(this.GetQueryParams());\n this.StateService.loadSavedState();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private subscribeToState(): void {\n // Subscribe to view mode changes\n this.StateService.ViewMode$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(mode => {\n this.ViewMode = mode;\n this.cdr.markForCheck();\n });\n\n // Subscribe to selected category changes\n this.StateService.SelectedCategoryId$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(id => {\n this.SelectedCategoryId = id;\n this.applyFilters();\n this.UpdateQueryParams(this.StateService.buildQueryParams());\n this.cdr.markForCheck();\n });\n\n // Subscribe to filter and sort changes\n this.StateService.Filters$.pipe(\n combineLatestWith(this.StateService.SortConfig$),\n debounceTime(50),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.applyFilters();\n this.UpdateQueryParams(this.StateService.buildQueryParams());\n this.cdr.markForCheck();\n });\n }\n\n /**\n * Convert the framework's plain-object params into the StateService's URLSearchParams-based parser.\n */\n private applyQueryParams(params: Record<string, string>): void {\n const urlParams = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value != null) {\n urlParams.set(key, value);\n }\n }\n this.StateService.parseQueryParams(urlParams);\n }\n\n private async loadData(): Promise<void> {\n try {\n this.IsLoading = true;\n this.cdr.markForCheck();\n\n // Initialize ActionEngineBase\n await ActionEngineBase.Instance.Config(false);\n\n // Get actions and categories from engine\n this.Actions = ActionEngineBase.Instance.Actions;\n this.Categories = ActionEngineBase.Instance.ActionCategories;\n\n // Build categories map\n this.CategoriesMap.clear();\n this.Categories.forEach(c => this.CategoriesMap.set(c.ID, c));\n\n // Build tree panel if available\n if (this.TreePanel) {\n this.TreePanel.Categories = this.Categories;\n this.TreePanel.Actions = this.Actions;\n this.TreePanel.buildCategoryTree();\n }\n\n // Apply filters\n this.applyFilters();\n\n // Expand path to selected category if needed\n if (this.SelectedCategoryId !== 'all' && this.SelectedCategoryId !== 'uncategorized') {\n const categoryParentMap = new Map<string, string | null>();\n this.Categories.forEach(c => categoryParentMap.set(c.ID, c.ParentID || null));\n this.StateService.expandPathToCategory(this.SelectedCategoryId, categoryParentMap);\n }\n\n } catch (error) {\n LogError('Failed to load action explorer data', undefined, error);\n } finally {\n this.IsLoading = false;\n this.cdr.markForCheck();\n this.NotifyLoadComplete();\n }\n }\n\n private applyFilters(): void {\n let filtered = [...this.Actions];\n const filters = this.StateService.Filters;\n const sortConfig = this.StateService.SortConfig;\n\n // Apply category filter\n if (this.SelectedCategoryId === 'uncategorized') {\n filtered = filtered.filter(a => !a.CategoryID);\n } else if (this.SelectedCategoryId !== 'all') {\n // Include descendants\n const descendants = this.getDescendantCategoryIds(this.SelectedCategoryId);\n filtered = filtered.filter(a => a.CategoryID && descendants.has(a.CategoryID));\n }\n\n // Apply search filter\n if (filters.searchTerm) {\n const term = filters.searchTerm.toLowerCase();\n filtered = filtered.filter(a =>\n a.Name.toLowerCase().includes(term) ||\n (a.Description || '').toLowerCase().includes(term)\n );\n }\n\n // Apply status filter\n if (filters.statuses.length > 0) {\n filtered = filtered.filter(a => filters.statuses.includes(a.Status));\n }\n\n // Apply type filter\n if (filters.types.length > 0) {\n filtered = filtered.filter(a => filters.types.includes(a.Type));\n }\n\n // Apply sorting\n filtered = this.sortActions(filtered, sortConfig);\n\n this.FilteredActions = filtered;\n }\n\n private getDescendantCategoryIds(categoryId: string): Set<string> {\n const descendants = new Set<string>([categoryId]);\n\n const addDescendants = (parentId: string) => {\n this.Categories.forEach(c => {\n if (UUIDsEqual(c.ParentID, parentId) && !descendants.has(c.ID)) {\n descendants.add(c.ID);\n addDescendants(c.ID);\n }\n });\n };\n\n addDescendants(categoryId);\n return descendants;\n }\n\n private sortActions(actions: MJActionEntityExtended[], config: SortConfig): MJActionEntityExtended[] {\n const sorted = [...actions];\n const direction = config.direction === 'asc' ? 1 : -1;\n\n sorted.sort((a, b) => {\n let comparison = 0;\n\n switch (config.field) {\n case 'name':\n comparison = a.Name.localeCompare(b.Name);\n break;\n case 'updated':\n const dateA = a.__mj_UpdatedAt ? new Date(a.__mj_UpdatedAt).getTime() : 0;\n const dateB = b.__mj_UpdatedAt ? new Date(b.__mj_UpdatedAt).getTime() : 0;\n comparison = dateA - dateB;\n break;\n case 'status':\n comparison = (a.Status || '').localeCompare(b.Status || '');\n break;\n case 'type':\n comparison = (a.Type || '').localeCompare(b.Type || '');\n break;\n case 'category':\n const catA = this.CategoriesMap.get(a.CategoryID || '')?.Name || '';\n const catB = this.CategoriesMap.get(b.CategoryID || '')?.Name || '';\n comparison = catA.localeCompare(catB);\n break;\n }\n\n return comparison * direction;\n });\n\n return sorted;\n }\n\n /**\n * React to back/forward navigation or deep-link activation.\n * Called by the base class when the URL query params change externally.\n */\n protected override OnQueryParamsChanged(params: Record<string, string>, source: 'popstate' | 'deeplink'): void {\n this.applyQueryParams(params);\n this.applyFilters();\n this.cdr.markForCheck();\n }\n\n public async onRefresh(): Promise<void> {\n await ActionEngineBase.Instance.Config(true); // Force refresh\n await this.loadData();\n }\n\n public onCategorySelect(categoryId: string): void {\n this.StateService.setSelectedCategoryId(categoryId);\n }\n\n public onNewCategory(parentId: string | null): void {\n this.NewCategoryParentId = parentId;\n this.StateService.openNewCategoryPanel();\n }\n\n public onEditCategory(category: MJActionCategoryEntity): void {\n const key = new CompositeKey([{ FieldName: 'ID', Value: category.ID }]);\n this.navigationService.OpenEntityRecord('MJ: Action Categories', key);\n }\n\n public onNewAction(): void {\n this.StateService.openNewActionPanel();\n }\n\n public onActionClick(action: MJActionEntityExtended): void {\n const key = new CompositeKey([{ FieldName: 'ID', Value: action.ID }]);\n this.navigationService.OpenEntityRecord('MJ: Actions', key);\n }\n\n public onActionEdit(action: MJActionEntityExtended): void {\n this.onActionClick(action);\n }\n\n public async onActionRun(action: MJActionEntityExtended): Promise<void> {\n if (action.Status !== 'Active') {\n return; // Can't run inactive actions\n }\n\n try {\n // Load action params\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJActionParamEntity>({\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${action.ID}'`,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n\n this.SelectedActionParams = result.Success ? result.Results || [] : [];\n // MJActionEntityExtended extends MJActionEntity, so this cast is safe\n this.SelectedActionForRun = action as unknown as MJActionEntity;\n this.IsRunDialogOpen = true;\n this.cdr.markForCheck();\n\n } catch (error) {\n LogError('Failed to open action run dialog', undefined, error);\n }\n }\n\n public OnRunDialogClose(): void {\n this.IsRunDialogOpen = false;\n this.SelectedActionForRun = null;\n this.SelectedActionParams = [];\n this.cdr.markForCheck();\n }\n\n public onCategoryClick(categoryId: string): void {\n this.StateService.setSelectedCategoryId(categoryId);\n }\n\n public async onCategoryCreated(category: MJActionCategoryEntity): Promise<void> {\n // Refresh data to include new category\n await this.loadData();\n // Select the new category\n this.StateService.setSelectedCategoryId(category.ID);\n }\n\n public async onActionCreated(): Promise<void> {\n // Refresh data to include new action\n await this.loadData();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Action Explorer';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-folder-tree';\n }\n}\n","<div class=\"action-explorer\">\n <!-- Full-page Loading Overlay -->\n @if (IsLoading) {\n <div class=\"loading-overlay\">\n <mj-loading text=\"Loading actions...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n <!-- Tree Panel (Left Sidebar) -->\n <mj-action-tree-panel\n [Categories]=\"Categories\"\n [Actions]=\"Actions\"\n (CategorySelected)=\"onCategorySelect($event)\"\n (NewCategoryClick)=\"onNewCategory($event)\"\n (EditCategoryClick)=\"onEditCategory($event)\">\n </mj-action-tree-panel>\n\n <!-- Main Content Area -->\n <div class=\"explorer-main\">\n <!-- Toolbar -->\n <mj-action-toolbar\n [TotalCount]=\"Actions.length\"\n [FilteredCount]=\"FilteredActions.length\"\n (NewActionClick)=\"onNewAction()\"\n (RefreshClick)=\"onRefresh()\">\n </mj-action-toolbar>\n\n <!-- Breadcrumb -->\n <mj-action-breadcrumb\n [SelectedCategoryId]=\"SelectedCategoryId\"\n [Categories]=\"Categories\"\n (CategorySelect)=\"onCategorySelect($event)\">\n </mj-action-breadcrumb>\n\n <!-- Content Area -->\n <div class=\"explorer-content\">\n @if (FilteredActions.length === 0 && !IsLoading) {\n <div class=\"empty-state\">\n @if (StateService.hasActiveFilters() || SelectedCategoryId !== 'all') {\n <i class=\"fa-solid fa-filter-circle-xmark\"></i>\n <h3>No actions match your filters</h3>\n <p>Try adjusting your search or filter criteria</p>\n <button mjButton\n variant=\"outline\"\n (click)=\"StateService.clearFilters(); StateService.setSelectedCategoryId('all')\">\n <i class=\"fa-solid fa-times\"></i>\n Clear All Filters\n </button>\n } @else {\n <i class=\"fa-solid fa-bolt\"></i>\n <h3>No actions yet</h3>\n <p>Create your first action to get started</p>\n <button mjButton\n variant=\"primary\"\n (click)=\"onNewAction()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Action\n </button>\n }\n </div>\n } @else {\n <!-- Card View -->\n @if (ViewMode === 'card') {\n <div class=\"card-grid\">\n @for (action of FilteredActions; track action.ID) {\n <mj-action-card\n [Action]=\"action\"\n [Categories]=\"CategoriesMap\"\n (ActionClick)=\"onActionClick($event)\"\n (EditClick)=\"onActionEdit($event)\"\n (RunClick)=\"onActionRun($event)\"\n (CategoryClick)=\"onCategoryClick($event)\">\n </mj-action-card>\n }\n </div>\n }\n\n <!-- List View -->\n @if (ViewMode === 'list') {\n <div class=\"list-view\">\n <div class=\"list-header\">\n <div class=\"header-icon\"></div>\n <div class=\"header-name\">Name</div>\n <div class=\"header-category\">Category</div>\n <div class=\"header-status\">Status</div>\n <div class=\"header-type\">Type</div>\n <div class=\"header-params\">Params</div>\n <div class=\"header-updated\">Updated</div>\n <div class=\"header-actions\"></div>\n </div>\n @for (action of FilteredActions; track action.ID) {\n <mj-action-list-item\n [Action]=\"action\"\n [Categories]=\"CategoriesMap\"\n [IsCompact]=\"false\"\n (ActionClick)=\"onActionClick($event)\"\n (EditClick)=\"onActionEdit($event)\"\n (RunClick)=\"onActionRun($event)\"\n (CategoryClick)=\"onCategoryClick($event)\">\n </mj-action-list-item>\n }\n </div>\n }\n\n <!-- Compact View -->\n @if (ViewMode === 'compact') {\n <div class=\"compact-view\">\n @for (action of FilteredActions; track action.ID) {\n <mj-action-list-item\n [Action]=\"action\"\n [Categories]=\"CategoriesMap\"\n [IsCompact]=\"true\"\n (ActionClick)=\"onActionClick($event)\"\n (EditClick)=\"onActionEdit($event)\"\n (RunClick)=\"onActionRun($event)\"\n (CategoryClick)=\"onCategoryClick($event)\">\n </mj-action-list-item>\n }\n </div>\n }\n }\n </div>\n </div>\n\n <!-- Slide-in Panels -->\n <mj-new-category-panel\n [Categories]=\"Categories\"\n [PreselectedParentId]=\"NewCategoryParentId\"\n (CategoryCreated)=\"onCategoryCreated($event)\"\n (Close)=\"NewCategoryParentId = null\">\n </mj-new-category-panel>\n\n <mj-new-action-panel\n [Categories]=\"Categories\"\n (ActionCreated)=\"onActionCreated()\">\n </mj-new-action-panel>\n\n <!-- Action Run Dialog -->\n @if (SelectedActionForRun) {\n <mj-action-test-harness-dialog\n [Action]=\"SelectedActionForRun\"\n [ActionParams]=\"SelectedActionParams\"\n [IsOpen]=\"IsRunDialogOpen\"\n (Close)=\"OnRunDialogClose()\">\n </mj-action-test-harness-dialog>\n }\n</div>\n"]}
|
|
@@ -2,9 +2,10 @@ import { EventEmitter, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/cor
|
|
|
2
2
|
import { MJActionCategoryEntity, MJActionEntity } from '@memberjunction/core-entities';
|
|
3
3
|
import { NavigationService } from '@memberjunction/ng-shared';
|
|
4
4
|
import { ActionExplorerStateService } from '../../services/action-explorer-state.service';
|
|
5
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
type ActionType = 'Custom' | 'Generated';
|
|
7
|
-
export declare class NewActionPanelComponent implements OnInit, OnDestroy {
|
|
8
|
+
export declare class NewActionPanelComponent extends BaseAngularComponent implements OnInit, OnDestroy {
|
|
8
9
|
StateService: ActionExplorerStateService;
|
|
9
10
|
private navigationService;
|
|
10
11
|
private cdr;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-action-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/new-action-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EACZ,MAAM,EACN,SAAS,EAET,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;;
|
|
1
|
+
{"version":3,"file":"new-action-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/new-action-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EACZ,MAAM,EACN,SAAS,EAET,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAE1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErE,KAAK,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEzC,qBAkBa,uBAAwB,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAoCnF,YAAY,EAAE,0BAA0B;IAC/C,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,GAAG;IArCJ,UAAU,EAAE,sBAAsB,EAAE,CAAM;IAC1C,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3C,aAAa,+BAAsC;IACnD,KAAK,qBAA4B;IAEpC,MAAM,UAAS;IACf,QAAQ,UAAS;IAGjB,IAAI,SAAM;IACV,WAAW,SAAM;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IACjC,IAAI,EAAE,UAAU,CAAY;IAG5B,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAM;IAEvC,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAahG;IAEF,OAAO,CAAC,QAAQ,CAAuB;gBAG9B,YAAY,EAAE,0BAA0B,EACvC,iBAAiB,EAAE,iBAAiB,EACpC,GAAG,EAAE,iBAAiB;IAGhC,QAAQ,IAAI,IAAI;IAYhB,WAAW,IAAI,IAAI;IAKnB,OAAO,CAAC,SAAS;IAWV,OAAO,IAAI,IAAI;IAKf,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAMxC,QAAQ,IAAI,OAAO;IAkBb,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC7B,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIlC,kBAAkB,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAkBnE,OAAO,CAAC,eAAe;yCAhKZ,uBAAuB;2CAAvB,uBAAuB;CAgLnC"}
|
|
@@ -2,8 +2,9 @@ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from
|
|
|
2
2
|
import { trigger, transition, style, animate } from '@angular/animations';
|
|
3
3
|
import { Subject } from 'rxjs';
|
|
4
4
|
import { takeUntil } from 'rxjs/operators';
|
|
5
|
-
import {
|
|
5
|
+
import { LogError, CompositeKey } from '@memberjunction/core';
|
|
6
6
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
7
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
import * as i1 from "../../services/action-explorer-state.service";
|
|
9
10
|
import * as i2 from "@memberjunction/ng-shared";
|
|
@@ -162,7 +163,7 @@ function NewActionPanelComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
|
162
163
|
i0.ɵɵadvance(2);
|
|
163
164
|
i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
|
|
164
165
|
} }
|
|
165
|
-
export class NewActionPanelComponent {
|
|
166
|
+
export class NewActionPanelComponent extends BaseAngularComponent {
|
|
166
167
|
StateService;
|
|
167
168
|
navigationService;
|
|
168
169
|
cdr;
|
|
@@ -195,6 +196,7 @@ export class NewActionPanelComponent {
|
|
|
195
196
|
];
|
|
196
197
|
destroy$ = new Subject();
|
|
197
198
|
constructor(StateService, navigationService, cdr) {
|
|
199
|
+
super();
|
|
198
200
|
this.StateService = StateService;
|
|
199
201
|
this.navigationService = navigationService;
|
|
200
202
|
this.cdr = cdr;
|
|
@@ -255,7 +257,7 @@ export class NewActionPanelComponent {
|
|
|
255
257
|
this.IsSaving = true;
|
|
256
258
|
this.cdr.markForCheck();
|
|
257
259
|
try {
|
|
258
|
-
const md =
|
|
260
|
+
const md = this.ProviderToUse;
|
|
259
261
|
const action = await md.GetEntityObject('MJ: Actions');
|
|
260
262
|
action.Name = this.Name.trim();
|
|
261
263
|
action.Description = this.Description.trim() || null;
|
|
@@ -314,7 +316,7 @@ export class NewActionPanelComponent {
|
|
|
314
316
|
return path.join(' / ');
|
|
315
317
|
}
|
|
316
318
|
static ɵfac = function NewActionPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || NewActionPanelComponent)(i0.ɵɵdirectiveInject(i1.ActionExplorerStateService), i0.ɵɵdirectiveInject(i2.NavigationService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
317
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: NewActionPanelComponent, selectors: [["mj-new-action-panel"]], inputs: { Categories: "Categories", PreselectedCategoryId: "PreselectedCategoryId" }, outputs: { ActionCreated: "ActionCreated", Close: "Close" }, standalone: false, decls: 1, vars: 1, consts: [[1, "panel-backdrop"], [1, "panel-backdrop", 3, "click"], [1, "slide-panel"], [1, "panel-header"], [1, "fa-solid", "fa-bolt"], ["mjButton", "", "variant", "flat", 3, "click"], [1, "fa-solid", "fa-times"], [1, "panel-content"], [1, "error-banner"], [1, "form-group"], [1, "form-label", "required"], [1, "type-selector"], [1, "type-option", 3, "selected"], ["for", "actionName", 1, "form-label", "required"], ["type", "text", "id", "actionName", "placeholder", "Enter action name", 1, "mj-input", 3, "ngModelChange", "ngModel", "maxlength"], [1, "error-text"], ["for", "actionDescription", 1, "form-label"], ["id", "actionDescription", "placeholder", "Describe what this action does", 1, "mj-textarea", 3, "ngModelChange", "ngModel", "rows"], ["for", "actionCategory", 1, "form-label", "required"], ["TextField", "text", "ValueField", "value", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [1, "info-box"], [1, "fa-solid", "fa-info-circle"], [1, "panel-footer"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["mjButton", "", "variant", "outline", 3, "click", "disabled"], [1, "fa-solid", "fa-exclamation-circle"], [1, "type-option", 3, "click"], [1, "type-icon"], [1, "type-info"], [1, "type-label"], [1, "type-description"], [1, "fa-solid", "fa-check", "check-icon"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-check"]], template: function NewActionPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
319
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: NewActionPanelComponent, selectors: [["mj-new-action-panel"]], inputs: { Categories: "Categories", PreselectedCategoryId: "PreselectedCategoryId" }, outputs: { ActionCreated: "ActionCreated", Close: "Close" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[1, "panel-backdrop"], [1, "panel-backdrop", 3, "click"], [1, "slide-panel"], [1, "panel-header"], [1, "fa-solid", "fa-bolt"], ["mjButton", "", "variant", "flat", 3, "click"], [1, "fa-solid", "fa-times"], [1, "panel-content"], [1, "error-banner"], [1, "form-group"], [1, "form-label", "required"], [1, "type-selector"], [1, "type-option", 3, "selected"], ["for", "actionName", 1, "form-label", "required"], ["type", "text", "id", "actionName", "placeholder", "Enter action name", 1, "mj-input", 3, "ngModelChange", "ngModel", "maxlength"], [1, "error-text"], ["for", "actionDescription", 1, "form-label"], ["id", "actionDescription", "placeholder", "Describe what this action does", 1, "mj-textarea", 3, "ngModelChange", "ngModel", "rows"], ["for", "actionCategory", 1, "form-label", "required"], ["TextField", "text", "ValueField", "value", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [1, "info-box"], [1, "fa-solid", "fa-info-circle"], [1, "panel-footer"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["mjButton", "", "variant", "outline", 3, "click", "disabled"], [1, "fa-solid", "fa-exclamation-circle"], [1, "type-option", 3, "click"], [1, "type-icon"], [1, "type-info"], [1, "type-label"], [1, "type-description"], [1, "fa-solid", "fa-check", "check-icon"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-check"]], template: function NewActionPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
318
320
|
i0.ɵɵconditionalCreate(0, NewActionPanelComponent_Conditional_0_Template, 40, 18, "div", 0);
|
|
319
321
|
} if (rf & 2) {
|
|
320
322
|
i0.ɵɵconditional(ctx.IsOpen ? 0 : -1);
|
|
@@ -352,5 +354,5 @@ export class NewActionPanelComponent {
|
|
|
352
354
|
}], Close: [{
|
|
353
355
|
type: Output
|
|
354
356
|
}] }); })();
|
|
355
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NewActionPanelComponent, { className: "NewActionPanelComponent", filePath: "src/Actions/components/explorer/new-action-panel.component.ts", lineNumber:
|
|
357
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NewActionPanelComponent, { className: "NewActionPanelComponent", filePath: "src/Actions/components/explorer/new-action-panel.component.ts", lineNumber: 41 }); })();
|
|
356
358
|
//# sourceMappingURL=new-action-panel.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-action-panel.component.js","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/new-action-panel.component.ts","../../../../src/Actions/components/explorer/new-action-panel.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n ChangeDetectorRef\n} from '@angular/core';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Metadata, LogError, CompositeKey } from '@memberjunction/core';\nimport { MJActionCategoryEntity, MJActionEntity } from '@memberjunction/core-entities';\nimport { NavigationService } from '@memberjunction/ng-shared';\nimport { ActionExplorerStateService } from '../../services/action-explorer-state.service';\nimport { UUIDsEqual } from '@memberjunction/global';\n\ntype ActionType = 'Custom' | 'Generated';\n\n@Component({\n standalone: false,\n selector: 'mj-new-action-panel',\n templateUrl: './new-action-panel.component.html',\n styleUrls: ['./new-action-panel.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('slideIn', [\n transition(':enter', [\n style({ transform: 'translateX(100%)', opacity: 0 }),\n animate('250ms ease-out', style({ transform: 'translateX(0)', opacity: 1 }))\n ]),\n transition(':leave', [\n animate('200ms ease-in', style({ transform: 'translateX(100%)', opacity: 0 }))\n ])\n ])\n ]\n})\nexport class NewActionPanelComponent implements OnInit, OnDestroy {\n @Input() Categories: MJActionCategoryEntity[] = [];\n @Input() PreselectedCategoryId: string | null = null;\n @Output() ActionCreated = new EventEmitter<MJActionEntity>();\n @Output() Close = new EventEmitter<void>();\n\n public IsOpen = false;\n public IsSaving = false;\n\n // Form fields\n public Name = '';\n public Description = '';\n public CategoryID: string | null = null;\n public Type: ActionType = 'Custom';\n\n // Validation\n public Errors: { [key: string]: string } = {};\n\n public TypeOptions: Array<{ value: ActionType; label: string; icon: string; description: string }> = [\n {\n value: 'Custom',\n label: 'Custom Action',\n icon: 'fa-solid fa-code',\n description: 'Write your own action code with full control'\n },\n {\n value: 'Generated',\n label: 'AI Generated',\n icon: 'fa-solid fa-robot',\n description: 'Let AI generate the action code from a prompt'\n }\n ];\n\n private destroy$ = new Subject<void>();\n\n constructor(\n public StateService: ActionExplorerStateService,\n private navigationService: NavigationService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.StateService.NewActionPanelOpen$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(isOpen => {\n this.IsOpen = isOpen;\n if (isOpen) {\n this.resetForm();\n }\n this.cdr.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private resetForm(): void {\n this.Name = '';\n this.Description = '';\n this.CategoryID = this.PreselectedCategoryId || (this.StateService.SelectedCategoryId !== 'all' && this.StateService.SelectedCategoryId !== 'uncategorized'\n ? this.StateService.SelectedCategoryId\n : null);\n this.Type = 'Custom';\n this.Errors = {};\n this.IsSaving = false;\n }\n\n public onClose(): void {\n this.StateService.closeNewActionPanel();\n this.Close.emit();\n }\n\n public onBackdropClick(event: MouseEvent): void {\n if ((event.target as HTMLElement).classList.contains('panel-backdrop')) {\n this.onClose();\n }\n }\n\n public validate(): boolean {\n this.Errors = {};\n\n if (!this.Name || this.Name.trim().length === 0) {\n this.Errors['name'] = 'Action name is required';\n } else if (this.Name.trim().length < 3) {\n this.Errors['name'] = 'Action name must be at least 3 characters';\n } else if (this.Name.trim().length > 425) {\n this.Errors['name'] = 'Action name must be less than 425 characters';\n }\n\n if (!this.CategoryID) {\n this.Errors['category'] = 'Please select a category';\n }\n\n return Object.keys(this.Errors).length === 0;\n }\n\n public async onSave(): Promise<void> {\n if (!this.validate()) {\n this.cdr.markForCheck();\n return;\n }\n\n this.IsSaving = true;\n this.cdr.markForCheck();\n\n try {\n const md = new Metadata();\n const action = await md.GetEntityObject<MJActionEntity>('MJ: Actions');\n\n action.Name = this.Name.trim();\n action.Description = this.Description.trim() || null;\n action.CategoryID = this.CategoryID!;\n action.Type = this.Type;\n action.Status = 'Pending'; // New actions start as pending\n\n const saved = await action.Save();\n\n if (saved) {\n this.ActionCreated.emit(action);\n this.StateService.closeNewActionPanel();\n\n // Open the full action record for editing\n const key = new CompositeKey([{ FieldName: 'ID', Value: action.ID }]);\n this.navigationService.OpenEntityRecord('MJ: Actions', key);\n } else {\n this.Errors['general'] = 'Failed to save action. Please try again.';\n }\n } catch (error) {\n LogError('Failed to create action', undefined, error);\n this.Errors['general'] = 'An error occurred while creating the action.';\n } finally {\n this.IsSaving = false;\n this.cdr.markForCheck();\n }\n }\n\n public selectType(type: ActionType): void {\n this.Type = type;\n }\n\n public getCategoryOptions(): Array<{ text: string; value: string }> {\n const options: Array<{ text: string; value: string }> = [];\n\n // Sort categories by path for easier selection\n const sortedCategories = [...this.Categories].sort((a, b) =>\n this.getCategoryPath(a).localeCompare(this.getCategoryPath(b))\n );\n\n sortedCategories.forEach(category => {\n options.push({\n text: this.getCategoryPath(category),\n value: category.ID\n });\n });\n\n return options;\n }\n\n private getCategoryPath(category: MJActionCategoryEntity): string {\n const path: string[] = [category.Name];\n let currentParentId = category.ParentID;\n\n while (currentParentId) {\n const parent = this.Categories.find(c => UUIDsEqual(c.ID, currentParentId));\n if (parent) {\n path.unshift(parent.Name);\n currentParentId = parent.ParentID || null;\n } else {\n break;\n }\n }\n\n return path.join(' / ');\n }\n}\n","@if (IsOpen) {\n <div class=\"panel-backdrop\" (click)=\"onBackdropClick($event)\">\n <div class=\"slide-panel\" @slideIn>\n <div class=\"panel-header\">\n <h2>\n <i class=\"fa-solid fa-bolt\"></i>\n New Action\n </h2>\n <button mjButton\n variant=\"flat\"\n (click)=\"onClose()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <div class=\"panel-content\">\n @if (Errors['general']) {\n <div class=\"error-banner\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{ Errors['general'] }}\n </div>\n }\n\n <!-- Action Type Selection -->\n <div class=\"form-group\">\n <label class=\"form-label required\">Action Type</label>\n <div class=\"type-selector\">\n @for (option of TypeOptions; track option.value) {\n <button class=\"type-option\"\n [class.selected]=\"Type === option.value\"\n (click)=\"selectType(option.value)\">\n <div class=\"type-icon\">\n <i [class]=\"option.icon\"></i>\n </div>\n <div class=\"type-info\">\n <span class=\"type-label\">{{ option.label }}</span>\n <span class=\"type-description\">{{ option.description }}</span>\n </div>\n @if (Type === option.value) {\n <i class=\"fa-solid fa-check check-icon\"></i>\n }\n </button>\n }\n </div>\n </div>\n\n <div class=\"form-group\">\n <label for=\"actionName\" class=\"form-label required\">\n Action Name\n </label>\n <input type=\"text\" class=\"mj-input\"\n id=\"actionName\"\n [(ngModel)]=\"Name\"\n placeholder=\"Enter action name\"\n [maxlength]=\"425\"\n [class.invalid]=\"Errors['name']\" />\n @if (Errors['name']) {\n <span class=\"error-text\">{{ Errors['name'] }}</span>\n }\n </div>\n\n <div class=\"form-group\">\n <label for=\"actionDescription\" class=\"form-label\">\n Description\n </label>\n <textarea class=\"mj-textarea\"\n id=\"actionDescription\"\n [(ngModel)]=\"Description\"\n placeholder=\"Describe what this action does\"\n [rows]=\"3\"></textarea>\n </div>\n\n <div class=\"form-group\">\n <label for=\"actionCategory\" class=\"form-label required\">\n Category\n </label>\n <mj-dropdown\n [(ngModel)]=\"CategoryID\"\n [Data]=\"getCategoryOptions()\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [class.invalid]=\"Errors['category']\">\n </mj-dropdown>\n @if (Errors['category']) {\n <span class=\"error-text\">{{ Errors['category'] }}</span>\n }\n </div>\n\n <div class=\"info-box\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <p>\n After creating the action, you'll be taken to the full action editor\n where you can configure parameters, code, and other settings.\n </p>\n </div>\n </div>\n\n <div class=\"panel-footer\">\n <button mjButton\n variant=\"primary\"\n [disabled]=\"IsSaving\"\n (click)=\"onSave()\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Creating...\n } @else {\n <i class=\"fa-solid fa-check\"></i>\n Create Action\n }\n </button>\n <button mjButton\n variant=\"outline\"\n [disabled]=\"IsSaving\"\n (click)=\"onClose()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n}\n"]}
|
|
1
|
+
{"version":3,"file":"new-action-panel.component.js","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/new-action-panel.component.ts","../../../../src/Actions/components/explorer/new-action-panel.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n ChangeDetectorRef\n} from '@angular/core';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { LogError, CompositeKey } from '@memberjunction/core';\nimport { MJActionCategoryEntity, MJActionEntity } from '@memberjunction/core-entities';\nimport { NavigationService } from '@memberjunction/ng-shared';\nimport { ActionExplorerStateService } from '../../services/action-explorer-state.service';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\ntype ActionType = 'Custom' | 'Generated';\n\n@Component({\n standalone: false,\n selector: 'mj-new-action-panel',\n templateUrl: './new-action-panel.component.html',\n styleUrls: ['./new-action-panel.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('slideIn', [\n transition(':enter', [\n style({ transform: 'translateX(100%)', opacity: 0 }),\n animate('250ms ease-out', style({ transform: 'translateX(0)', opacity: 1 }))\n ]),\n transition(':leave', [\n animate('200ms ease-in', style({ transform: 'translateX(100%)', opacity: 0 }))\n ])\n ])\n ]\n})\nexport class NewActionPanelComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n @Input() Categories: MJActionCategoryEntity[] = [];\n @Input() PreselectedCategoryId: string | null = null;\n @Output() ActionCreated = new EventEmitter<MJActionEntity>();\n @Output() Close = new EventEmitter<void>();\n\n public IsOpen = false;\n public IsSaving = false;\n\n // Form fields\n public Name = '';\n public Description = '';\n public CategoryID: string | null = null;\n public Type: ActionType = 'Custom';\n\n // Validation\n public Errors: { [key: string]: string } = {};\n\n public TypeOptions: Array<{ value: ActionType; label: string; icon: string; description: string }> = [\n {\n value: 'Custom',\n label: 'Custom Action',\n icon: 'fa-solid fa-code',\n description: 'Write your own action code with full control'\n },\n {\n value: 'Generated',\n label: 'AI Generated',\n icon: 'fa-solid fa-robot',\n description: 'Let AI generate the action code from a prompt'\n }\n ];\n\n private destroy$ = new Subject<void>();\n\n constructor(\n public StateService: ActionExplorerStateService,\n private navigationService: NavigationService,\n private cdr: ChangeDetectorRef\n ) { super(); }\n\n ngOnInit(): void {\n this.StateService.NewActionPanelOpen$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(isOpen => {\n this.IsOpen = isOpen;\n if (isOpen) {\n this.resetForm();\n }\n this.cdr.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private resetForm(): void {\n this.Name = '';\n this.Description = '';\n this.CategoryID = this.PreselectedCategoryId || (this.StateService.SelectedCategoryId !== 'all' && this.StateService.SelectedCategoryId !== 'uncategorized'\n ? this.StateService.SelectedCategoryId\n : null);\n this.Type = 'Custom';\n this.Errors = {};\n this.IsSaving = false;\n }\n\n public onClose(): void {\n this.StateService.closeNewActionPanel();\n this.Close.emit();\n }\n\n public onBackdropClick(event: MouseEvent): void {\n if ((event.target as HTMLElement).classList.contains('panel-backdrop')) {\n this.onClose();\n }\n }\n\n public validate(): boolean {\n this.Errors = {};\n\n if (!this.Name || this.Name.trim().length === 0) {\n this.Errors['name'] = 'Action name is required';\n } else if (this.Name.trim().length < 3) {\n this.Errors['name'] = 'Action name must be at least 3 characters';\n } else if (this.Name.trim().length > 425) {\n this.Errors['name'] = 'Action name must be less than 425 characters';\n }\n\n if (!this.CategoryID) {\n this.Errors['category'] = 'Please select a category';\n }\n\n return Object.keys(this.Errors).length === 0;\n }\n\n public async onSave(): Promise<void> {\n if (!this.validate()) {\n this.cdr.markForCheck();\n return;\n }\n\n this.IsSaving = true;\n this.cdr.markForCheck();\n\n try {\n const md = this.ProviderToUse;\n const action = await md.GetEntityObject<MJActionEntity>('MJ: Actions');\n\n action.Name = this.Name.trim();\n action.Description = this.Description.trim() || null;\n action.CategoryID = this.CategoryID!;\n action.Type = this.Type;\n action.Status = 'Pending'; // New actions start as pending\n\n const saved = await action.Save();\n\n if (saved) {\n this.ActionCreated.emit(action);\n this.StateService.closeNewActionPanel();\n\n // Open the full action record for editing\n const key = new CompositeKey([{ FieldName: 'ID', Value: action.ID }]);\n this.navigationService.OpenEntityRecord('MJ: Actions', key);\n } else {\n this.Errors['general'] = 'Failed to save action. Please try again.';\n }\n } catch (error) {\n LogError('Failed to create action', undefined, error);\n this.Errors['general'] = 'An error occurred while creating the action.';\n } finally {\n this.IsSaving = false;\n this.cdr.markForCheck();\n }\n }\n\n public selectType(type: ActionType): void {\n this.Type = type;\n }\n\n public getCategoryOptions(): Array<{ text: string; value: string }> {\n const options: Array<{ text: string; value: string }> = [];\n\n // Sort categories by path for easier selection\n const sortedCategories = [...this.Categories].sort((a, b) =>\n this.getCategoryPath(a).localeCompare(this.getCategoryPath(b))\n );\n\n sortedCategories.forEach(category => {\n options.push({\n text: this.getCategoryPath(category),\n value: category.ID\n });\n });\n\n return options;\n }\n\n private getCategoryPath(category: MJActionCategoryEntity): string {\n const path: string[] = [category.Name];\n let currentParentId = category.ParentID;\n\n while (currentParentId) {\n const parent = this.Categories.find(c => UUIDsEqual(c.ID, currentParentId));\n if (parent) {\n path.unshift(parent.Name);\n currentParentId = parent.ParentID || null;\n } else {\n break;\n }\n }\n\n return path.join(' / ');\n }\n}\n","@if (IsOpen) {\n <div class=\"panel-backdrop\" (click)=\"onBackdropClick($event)\">\n <div class=\"slide-panel\" @slideIn>\n <div class=\"panel-header\">\n <h2>\n <i class=\"fa-solid fa-bolt\"></i>\n New Action\n </h2>\n <button mjButton\n variant=\"flat\"\n (click)=\"onClose()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <div class=\"panel-content\">\n @if (Errors['general']) {\n <div class=\"error-banner\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{ Errors['general'] }}\n </div>\n }\n\n <!-- Action Type Selection -->\n <div class=\"form-group\">\n <label class=\"form-label required\">Action Type</label>\n <div class=\"type-selector\">\n @for (option of TypeOptions; track option.value) {\n <button class=\"type-option\"\n [class.selected]=\"Type === option.value\"\n (click)=\"selectType(option.value)\">\n <div class=\"type-icon\">\n <i [class]=\"option.icon\"></i>\n </div>\n <div class=\"type-info\">\n <span class=\"type-label\">{{ option.label }}</span>\n <span class=\"type-description\">{{ option.description }}</span>\n </div>\n @if (Type === option.value) {\n <i class=\"fa-solid fa-check check-icon\"></i>\n }\n </button>\n }\n </div>\n </div>\n\n <div class=\"form-group\">\n <label for=\"actionName\" class=\"form-label required\">\n Action Name\n </label>\n <input type=\"text\" class=\"mj-input\"\n id=\"actionName\"\n [(ngModel)]=\"Name\"\n placeholder=\"Enter action name\"\n [maxlength]=\"425\"\n [class.invalid]=\"Errors['name']\" />\n @if (Errors['name']) {\n <span class=\"error-text\">{{ Errors['name'] }}</span>\n }\n </div>\n\n <div class=\"form-group\">\n <label for=\"actionDescription\" class=\"form-label\">\n Description\n </label>\n <textarea class=\"mj-textarea\"\n id=\"actionDescription\"\n [(ngModel)]=\"Description\"\n placeholder=\"Describe what this action does\"\n [rows]=\"3\"></textarea>\n </div>\n\n <div class=\"form-group\">\n <label for=\"actionCategory\" class=\"form-label required\">\n Category\n </label>\n <mj-dropdown\n [(ngModel)]=\"CategoryID\"\n [Data]=\"getCategoryOptions()\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [class.invalid]=\"Errors['category']\">\n </mj-dropdown>\n @if (Errors['category']) {\n <span class=\"error-text\">{{ Errors['category'] }}</span>\n }\n </div>\n\n <div class=\"info-box\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <p>\n After creating the action, you'll be taken to the full action editor\n where you can configure parameters, code, and other settings.\n </p>\n </div>\n </div>\n\n <div class=\"panel-footer\">\n <button mjButton\n variant=\"primary\"\n [disabled]=\"IsSaving\"\n (click)=\"onSave()\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Creating...\n } @else {\n <i class=\"fa-solid fa-check\"></i>\n Create Action\n }\n </button>\n <button mjButton\n variant=\"outline\"\n [disabled]=\"IsSaving\"\n (click)=\"onClose()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n}\n"]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { EventEmitter, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
|
|
2
2
|
import { MJActionCategoryEntity } from '@memberjunction/core-entities';
|
|
3
3
|
import { ActionExplorerStateService } from '../../services/action-explorer-state.service';
|
|
4
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class NewCategoryPanelComponent implements OnInit, OnDestroy {
|
|
6
|
+
export declare class NewCategoryPanelComponent extends BaseAngularComponent implements OnInit, OnDestroy {
|
|
6
7
|
StateService: ActionExplorerStateService;
|
|
7
8
|
private cdr;
|
|
8
9
|
Categories: MJActionCategoryEntity[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-category-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/new-category-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EACZ,MAAM,EACN,SAAS,EAET,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;;
|
|
1
|
+
{"version":3,"file":"new-category-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/new-category-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EACZ,MAAM,EACN,SAAS,EAET,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAE1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErE,qBAkBa,yBAA0B,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAoBrF,YAAY,EAAE,0BAA0B;IAC/C,OAAO,CAAC,GAAG;IApBJ,UAAU,EAAE,sBAAsB,EAAE,CAAM;IAC1C,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACzC,eAAe,uCAA8C;IAC7D,KAAK,qBAA4B;IAEpC,MAAM,UAAS;IACf,QAAQ,UAAS;IAGjB,IAAI,SAAM;IACV,WAAW,SAAM;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG/B,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAM;IAE9C,OAAO,CAAC,QAAQ,CAAuB;gBAG9B,YAAY,EAAE,0BAA0B,EACvC,GAAG,EAAE,iBAAiB;IAGhC,QAAQ,IAAI,IAAI;IAehB,WAAW,IAAI,IAAI;IAKnB,OAAO,CAAC,SAAS;IAQV,OAAO,IAAI,IAAI;IAKf,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAMxC,QAAQ,IAAI,OAAO;IAuBb,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC7B,gBAAgB,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAoBxE,OAAO,CAAC,eAAe;yCA5IZ,yBAAyB;2CAAzB,yBAAyB;CA4JrC"}
|
|
@@ -2,8 +2,9 @@ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from
|
|
|
2
2
|
import { trigger, transition, style, animate } from '@angular/animations';
|
|
3
3
|
import { Subject } from 'rxjs';
|
|
4
4
|
import { takeUntil } from 'rxjs/operators';
|
|
5
|
-
import {
|
|
5
|
+
import { LogError } from '@memberjunction/core';
|
|
6
6
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
7
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
import * as i1 from "../../services/action-explorer-state.service";
|
|
9
10
|
import * as i2 from "@angular/forms";
|
|
@@ -105,7 +106,7 @@ function NewCategoryPanelComponent_Conditional_0_Template(rf, ctx) { if (rf & 1)
|
|
|
105
106
|
i0.ɵɵadvance(2);
|
|
106
107
|
i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
|
|
107
108
|
} }
|
|
108
|
-
export class NewCategoryPanelComponent {
|
|
109
|
+
export class NewCategoryPanelComponent extends BaseAngularComponent {
|
|
109
110
|
StateService;
|
|
110
111
|
cdr;
|
|
111
112
|
Categories = [];
|
|
@@ -122,6 +123,7 @@ export class NewCategoryPanelComponent {
|
|
|
122
123
|
Errors = {};
|
|
123
124
|
destroy$ = new Subject();
|
|
124
125
|
constructor(StateService, cdr) {
|
|
126
|
+
super();
|
|
125
127
|
this.StateService = StateService;
|
|
126
128
|
this.cdr = cdr;
|
|
127
129
|
}
|
|
@@ -184,7 +186,7 @@ export class NewCategoryPanelComponent {
|
|
|
184
186
|
this.IsSaving = true;
|
|
185
187
|
this.cdr.markForCheck();
|
|
186
188
|
try {
|
|
187
|
-
const md =
|
|
189
|
+
const md = this.ProviderToUse;
|
|
188
190
|
const category = await md.GetEntityObject('MJ: Action Categories');
|
|
189
191
|
category.Name = this.Name.trim();
|
|
190
192
|
category.Description = this.Description.trim() || null;
|
|
@@ -237,7 +239,7 @@ export class NewCategoryPanelComponent {
|
|
|
237
239
|
return path.join(' / ');
|
|
238
240
|
}
|
|
239
241
|
static ɵfac = function NewCategoryPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || NewCategoryPanelComponent)(i0.ɵɵdirectiveInject(i1.ActionExplorerStateService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
240
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: NewCategoryPanelComponent, selectors: [["mj-new-category-panel"]], inputs: { Categories: "Categories", PreselectedParentId: "PreselectedParentId" }, outputs: { CategoryCreated: "CategoryCreated", Close: "Close" }, standalone: false, decls: 1, vars: 1, consts: [[1, "panel-backdrop"], [1, "panel-backdrop", 3, "click"], [1, "slide-panel"], [1, "panel-header"], [1, "fa-solid", "fa-folder-plus"], ["mjButton", "", "variant", "flat", 3, "click"], [1, "fa-solid", "fa-times"], [1, "panel-content"], [1, "error-banner"], [1, "form-group"], ["for", "categoryName", 1, "form-label", "required"], ["type", "text", "id", "categoryName", "placeholder", "Enter category name", 1, "mj-input", 3, "ngModelChange", "ngModel", "maxlength"], [1, "error-text"], ["for", "categoryDescription", 1, "form-label"], ["id", "categoryDescription", "placeholder", "Optional description for this category", 1, "mj-textarea", 3, "ngModelChange", "ngModel", "rows", "maxlength"], ["for", "categoryParent", 1, "form-label"], ["TextField", "text", "ValueField", "value", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [1, "help-text"], [1, "panel-footer"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["mjButton", "", "variant", "outline", 3, "click", "disabled"], [1, "fa-solid", "fa-exclamation-circle"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-check"]], template: function NewCategoryPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
242
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: NewCategoryPanelComponent, selectors: [["mj-new-category-panel"]], inputs: { Categories: "Categories", PreselectedParentId: "PreselectedParentId" }, outputs: { CategoryCreated: "CategoryCreated", Close: "Close" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[1, "panel-backdrop"], [1, "panel-backdrop", 3, "click"], [1, "slide-panel"], [1, "panel-header"], [1, "fa-solid", "fa-folder-plus"], ["mjButton", "", "variant", "flat", 3, "click"], [1, "fa-solid", "fa-times"], [1, "panel-content"], [1, "error-banner"], [1, "form-group"], ["for", "categoryName", 1, "form-label", "required"], ["type", "text", "id", "categoryName", "placeholder", "Enter category name", 1, "mj-input", 3, "ngModelChange", "ngModel", "maxlength"], [1, "error-text"], ["for", "categoryDescription", 1, "form-label"], ["id", "categoryDescription", "placeholder", "Optional description for this category", 1, "mj-textarea", 3, "ngModelChange", "ngModel", "rows", "maxlength"], ["for", "categoryParent", 1, "form-label"], ["TextField", "text", "ValueField", "value", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [1, "help-text"], [1, "panel-footer"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["mjButton", "", "variant", "outline", 3, "click", "disabled"], [1, "fa-solid", "fa-exclamation-circle"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-check"]], template: function NewCategoryPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
241
243
|
i0.ɵɵconditionalCreate(0, NewCategoryPanelComponent_Conditional_0_Template, 31, 16, "div", 0);
|
|
242
244
|
} if (rf & 2) {
|
|
243
245
|
i0.ɵɵconditional(ctx.IsOpen ? 0 : -1);
|
|
@@ -275,5 +277,5 @@ export class NewCategoryPanelComponent {
|
|
|
275
277
|
}], Close: [{
|
|
276
278
|
type: Output
|
|
277
279
|
}] }); })();
|
|
278
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NewCategoryPanelComponent, { className: "NewCategoryPanelComponent", filePath: "src/Actions/components/explorer/new-category-panel.component.ts", lineNumber:
|
|
280
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NewCategoryPanelComponent, { className: "NewCategoryPanelComponent", filePath: "src/Actions/components/explorer/new-category-panel.component.ts", lineNumber: 38 }); })();
|
|
279
281
|
//# sourceMappingURL=new-category-panel.component.js.map
|