@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-admin-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/EntityAdmin/entity-admin-dashboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,UAAU,EAA0B,MAAM,sBAAsB,CAAC;AAI1E,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAuC,MAAM,+BAA+B,CAAC;;AAKlG,qBAOa,6BAA8B,SAAQ,aAAc,YAAW,aAAa,EAAE,SAAS;IACpD,YAAY,EAAG,qBAAqB,CAAC;IAE5E,SAAS,UAAS;IAClB,eAAe,UAAS;IACxB,cAAc,SAAM;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG5B,kBAAkB,UAAQ;IAC1B,cAAc,EAAE,UAAU,GAAG,IAAI,CAAQ;IACzC,gBAAgB,EAAE,UAAU,EAAE,CAAM;IAG3C,OAAO,CAAC,sBAAsB,CAAoC;IAClE,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"entity-admin-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/EntityAdmin/entity-admin-dashboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,UAAU,EAA0B,MAAM,sBAAsB,CAAC;AAI1E,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAuC,MAAM,+BAA+B,CAAC;;AAKlG,qBAOa,6BAA8B,SAAQ,aAAc,YAAW,aAAa,EAAE,SAAS;IACpD,YAAY,EAAG,qBAAqB,CAAC;IAE5E,SAAS,UAAS;IAClB,eAAe,UAAS;IACxB,cAAc,SAAM;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG5B,kBAAkB,UAAQ;IAC1B,cAAc,EAAE,UAAU,GAAG,IAAI,CAAQ;IACzC,gBAAgB,EAAE,UAAU,EAAE,CAAM;IAG3C,OAAO,CAAC,sBAAsB,CAAoC;IAClE,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,iBAAiB,CAAoC;IAE7D,eAAe,IAAI,IAAI;IASjB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxD,WAAW,IAAI,IAAI;IAK5B,SAAS,CAAC,aAAa,IAAI,IAAI;IAI/B,SAAS,CAAC,QAAQ,IAAI,IAAI;IAInB,iBAAiB,IAAI,IAAI;IAOzB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAkB7C,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAKjD,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAIxC,YAAY,CAAC,KAAK,EAAE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI;IAOjE,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAQ3C;;OAEG;YACW,yBAAyB;IA8BvC;;OAEG;YACW,uBAAuB;yCAlI1B,6BAA6B;2CAA7B,6BAA6B;CA4JzC"}
|
|
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
import { Component, ViewChild } from '@angular/core';
|
|
8
8
|
import { BaseDashboard } from '@memberjunction/ng-shared';
|
|
9
9
|
import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
|
|
10
|
-
import { CompositeKey
|
|
10
|
+
import { CompositeKey } from '@memberjunction/core';
|
|
11
11
|
import { Subject } from 'rxjs';
|
|
12
12
|
import { debounceTime } from 'rxjs/operators';
|
|
13
13
|
import { UserInfoEngine } from '@memberjunction/core-entities';
|
|
@@ -58,7 +58,7 @@ let EntityAdminDashboardComponent = class EntityAdminDashboardComponent extends
|
|
|
58
58
|
// State management
|
|
59
59
|
userStateChangeSubject = new Subject();
|
|
60
60
|
hasLoadedUserState = false;
|
|
61
|
-
metadata =
|
|
61
|
+
metadata = this.ProviderToUse;
|
|
62
62
|
userSettingEntity = null;
|
|
63
63
|
ngAfterViewInit() {
|
|
64
64
|
// Setup debounced state persistence to MJ: User Settings
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-admin-dashboard.component.js","sourceRoot":"","sources":["../../src/EntityAdmin/entity-admin-dashboard.component.ts","../../src/EntityAdmin/entity-admin-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, ViewChild, AfterViewInit, OnDestroy } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { EntityInfo, CompositeKey, Metadata } from '@memberjunction/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { ERDCompositeComponent, ERDCompositeState } from '@memberjunction/ng-entity-relationship-diagram';\nimport { ResourceData, MJUserSettingEntity, UserInfoEngine } from '@memberjunction/core-entities';\n\n/** Settings key for ERD state persistence */\nconst ERD_SETTINGS_KEY = 'MJ.Admin.Entity.ERD';\n\n@Component({\n standalone: false,\n selector: 'mj-entity-admin-dashboard',\n templateUrl: './entity-admin-dashboard.component.html',\n styleUrls: ['./entity-admin-dashboard.component.css']\n})\n@RegisterClass(BaseDashboard, 'EntityAdmin')\nexport class EntityAdminDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n @ViewChild('erdComposite', { static: false }) erdComposite!: ERDCompositeComponent;\n\n public isLoading = false;\n public isRefreshingERD = false;\n public loadingMessage = '';\n public error: string | null = null;\n\n // Filter panel visibility for header controls\n public filterPanelVisible = true;\n public selectedEntity: EntityInfo | null = null;\n public filteredEntities: EntityInfo[] = [];\n\n // State management\n private userStateChangeSubject = new Subject<ERDCompositeState>();\n private hasLoadedUserState = false;\n private metadata = new Metadata();\n private userSettingEntity: MJUserSettingEntity | null = null;\n\n ngAfterViewInit(): void {\n // Setup debounced state persistence to MJ: User Settings\n this.userStateChangeSubject.pipe(\n debounceTime(1000)\n ).subscribe(state => {\n this.saveStateToUserSettings(state);\n });\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return \"Entity Administration\"\n }\n\n override ngOnDestroy(): void {\n this.userStateChangeSubject.complete();\n super.ngOnDestroy();\n }\n\n protected initDashboard(): void {\n // Initialize dashboard - called by BaseDashboard\n }\n\n protected loadData(): void {\n // Data loading is handled by ERDCompositeComponent\n }\n\n public toggleFilterPanel(): void {\n this.filterPanelVisible = !this.filterPanelVisible;\n if (this.erdComposite) {\n this.erdComposite.onToggleFilterPanel();\n }\n }\n\n public onStateChange(state: ERDCompositeState): void {\n // Update local state to keep header controls in sync\n this.filterPanelVisible = state.filterPanelVisible;\n this.filteredEntities = this.erdComposite?.filteredEntities || [];\n\n if (state.selectedEntityId && this.erdComposite) {\n this.selectedEntity = this.erdComposite.entities.find(e => UUIDsEqual(e.ID, state.selectedEntityId)) || null;\n } else {\n this.selectedEntity = null;\n }\n\n // Load user state when data becomes available for the first time\n if (this.erdComposite?.isDataLoaded && !this.hasLoadedUserState) {\n this.hasLoadedUserState = true;\n this.loadStateFromUserSettings();\n }\n }\n\n public onUserStateChange(state: ERDCompositeState): void {\n // Queue state for debounced persistence\n this.userStateChangeSubject.next(state);\n }\n\n public onEntityOpened(entity: EntityInfo): void {\n this.openEntity(entity);\n }\n\n public onOpenRecord(event: {EntityName: string, RecordID: string}): void {\n this.OpenEntityRecord.emit({\n EntityName: event.EntityName,\n RecordPKey: new CompositeKey([{FieldName: 'ID', Value: event.RecordID}])\n });\n }\n\n public openEntity(entity: EntityInfo): void {\n this.Interaction.emit({\n type: 'openEntity',\n entity: entity,\n data: { entityId: entity.ID, entityName: entity.Name }\n });\n }\n\n /**\n * Load ERD state from MJ: User Settings entity using UserInfoEngine for cached access\n */\n private async loadStateFromUserSettings(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) {\n this.NotifyLoadComplete();\n return;\n }\n\n const engine = UserInfoEngine.Instance;\n\n // Find setting from cached user settings\n const setting = engine.UserSettings.find(s => s.Setting === ERD_SETTINGS_KEY);\n\n if (setting) {\n this.userSettingEntity = setting;\n if (this.userSettingEntity.Value) {\n const savedState = JSON.parse(this.userSettingEntity.Value) as Partial<ERDCompositeState>;\n if (this.erdComposite) {\n this.erdComposite.loadUserState(savedState);\n }\n }\n }\n\n this.NotifyLoadComplete();\n } catch (error) {\n console.warn('Failed to load ERD state from User Settings:', error);\n this.NotifyLoadComplete();\n }\n }\n\n /**\n * Save ERD state to MJ: User Settings entity using UserInfoEngine for cached lookup\n */\n private async saveStateToUserSettings(state: ERDCompositeState): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Find existing setting from cached user settings if not already loaded\n if (!this.userSettingEntity) {\n const engine = UserInfoEngine.Instance;\n const setting = engine.UserSettings.find(s => s.Setting === ERD_SETTINGS_KEY);\n\n if (setting) {\n this.userSettingEntity = setting;\n } else {\n this.userSettingEntity = await this.metadata.GetEntityObject<MJUserSettingEntity>('MJ: User Settings');\n this.userSettingEntity.UserID = userId;\n this.userSettingEntity.Setting = ERD_SETTINGS_KEY;\n }\n }\n\n // Save the state as JSON\n this.userSettingEntity.Value = JSON.stringify(state);\n await this.userSettingEntity.Save();\n } catch (error) {\n console.warn('Failed to save ERD state to User Settings:', error);\n }\n }\n}\n","<div class=\"entity-admin-dashboard-container\">\n <div class=\"dashboard-header\">\n <div class=\"header-info\">\n <span class=\"visible-entities-count\">{{ filteredEntities.length }} visible entities</span>\n </div>\n <div class=\"header-controls\">\n <button \n class=\"control-btn\" \n (click)=\"toggleFilterPanel()\" \n [class.active]=\"filterPanelVisible\"\n title=\"Toggle Filters\">\n <span class=\"fa-solid fa-filter\"></span>\n Filters\n </button>\n </div>\n </div>\n \n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading [text]=\"loadingMessage\" size=\"large\"></mj-loading>\n </div>\n }\n \n @if (error) {\n <div class=\"error-container\">\n <p class=\"error-message\">{{ error }}</p>\n </div>\n }\n \n @if (!isLoading && !error) {\n <div class=\"dashboard-content\">\n <mj-erd-composite \n #erdComposite\n [isRefreshingERD]=\"isRefreshingERD\"\n (stateChange)=\"onStateChange($event)\"\n (userStateChange)=\"onUserStateChange($event)\"\n (entityOpened)=\"onEntityOpened($event)\"\n (openRecord)=\"onOpenRecord($event)\"\n >\n </mj-erd-composite>\n </div>\n }\n</div>"]}
|
|
1
|
+
{"version":3,"file":"entity-admin-dashboard.component.js","sourceRoot":"","sources":["../../src/EntityAdmin/entity-admin-dashboard.component.ts","../../src/EntityAdmin/entity-admin-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, ViewChild, AfterViewInit, OnDestroy } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { EntityInfo, CompositeKey, Metadata } from '@memberjunction/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { ERDCompositeComponent, ERDCompositeState } from '@memberjunction/ng-entity-relationship-diagram';\nimport { ResourceData, MJUserSettingEntity, UserInfoEngine } from '@memberjunction/core-entities';\n\n/** Settings key for ERD state persistence */\nconst ERD_SETTINGS_KEY = 'MJ.Admin.Entity.ERD';\n\n@Component({\n standalone: false,\n selector: 'mj-entity-admin-dashboard',\n templateUrl: './entity-admin-dashboard.component.html',\n styleUrls: ['./entity-admin-dashboard.component.css']\n})\n@RegisterClass(BaseDashboard, 'EntityAdmin')\nexport class EntityAdminDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n @ViewChild('erdComposite', { static: false }) erdComposite!: ERDCompositeComponent;\n\n public isLoading = false;\n public isRefreshingERD = false;\n public loadingMessage = '';\n public error: string | null = null;\n\n // Filter panel visibility for header controls\n public filterPanelVisible = true;\n public selectedEntity: EntityInfo | null = null;\n public filteredEntities: EntityInfo[] = [];\n\n // State management\n private userStateChangeSubject = new Subject<ERDCompositeState>();\n private hasLoadedUserState = false;\n private metadata = this.ProviderToUse;\n private userSettingEntity: MJUserSettingEntity | null = null;\n\n ngAfterViewInit(): void {\n // Setup debounced state persistence to MJ: User Settings\n this.userStateChangeSubject.pipe(\n debounceTime(1000)\n ).subscribe(state => {\n this.saveStateToUserSettings(state);\n });\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return \"Entity Administration\"\n }\n\n override ngOnDestroy(): void {\n this.userStateChangeSubject.complete();\n super.ngOnDestroy();\n }\n\n protected initDashboard(): void {\n // Initialize dashboard - called by BaseDashboard\n }\n\n protected loadData(): void {\n // Data loading is handled by ERDCompositeComponent\n }\n\n public toggleFilterPanel(): void {\n this.filterPanelVisible = !this.filterPanelVisible;\n if (this.erdComposite) {\n this.erdComposite.onToggleFilterPanel();\n }\n }\n\n public onStateChange(state: ERDCompositeState): void {\n // Update local state to keep header controls in sync\n this.filterPanelVisible = state.filterPanelVisible;\n this.filteredEntities = this.erdComposite?.filteredEntities || [];\n\n if (state.selectedEntityId && this.erdComposite) {\n this.selectedEntity = this.erdComposite.entities.find(e => UUIDsEqual(e.ID, state.selectedEntityId)) || null;\n } else {\n this.selectedEntity = null;\n }\n\n // Load user state when data becomes available for the first time\n if (this.erdComposite?.isDataLoaded && !this.hasLoadedUserState) {\n this.hasLoadedUserState = true;\n this.loadStateFromUserSettings();\n }\n }\n\n public onUserStateChange(state: ERDCompositeState): void {\n // Queue state for debounced persistence\n this.userStateChangeSubject.next(state);\n }\n\n public onEntityOpened(entity: EntityInfo): void {\n this.openEntity(entity);\n }\n\n public onOpenRecord(event: {EntityName: string, RecordID: string}): void {\n this.OpenEntityRecord.emit({\n EntityName: event.EntityName,\n RecordPKey: new CompositeKey([{FieldName: 'ID', Value: event.RecordID}])\n });\n }\n\n public openEntity(entity: EntityInfo): void {\n this.Interaction.emit({\n type: 'openEntity',\n entity: entity,\n data: { entityId: entity.ID, entityName: entity.Name }\n });\n }\n\n /**\n * Load ERD state from MJ: User Settings entity using UserInfoEngine for cached access\n */\n private async loadStateFromUserSettings(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) {\n this.NotifyLoadComplete();\n return;\n }\n\n const engine = UserInfoEngine.Instance;\n\n // Find setting from cached user settings\n const setting = engine.UserSettings.find(s => s.Setting === ERD_SETTINGS_KEY);\n\n if (setting) {\n this.userSettingEntity = setting;\n if (this.userSettingEntity.Value) {\n const savedState = JSON.parse(this.userSettingEntity.Value) as Partial<ERDCompositeState>;\n if (this.erdComposite) {\n this.erdComposite.loadUserState(savedState);\n }\n }\n }\n\n this.NotifyLoadComplete();\n } catch (error) {\n console.warn('Failed to load ERD state from User Settings:', error);\n this.NotifyLoadComplete();\n }\n }\n\n /**\n * Save ERD state to MJ: User Settings entity using UserInfoEngine for cached lookup\n */\n private async saveStateToUserSettings(state: ERDCompositeState): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Find existing setting from cached user settings if not already loaded\n if (!this.userSettingEntity) {\n const engine = UserInfoEngine.Instance;\n const setting = engine.UserSettings.find(s => s.Setting === ERD_SETTINGS_KEY);\n\n if (setting) {\n this.userSettingEntity = setting;\n } else {\n this.userSettingEntity = await this.metadata.GetEntityObject<MJUserSettingEntity>('MJ: User Settings');\n this.userSettingEntity.UserID = userId;\n this.userSettingEntity.Setting = ERD_SETTINGS_KEY;\n }\n }\n\n // Save the state as JSON\n this.userSettingEntity.Value = JSON.stringify(state);\n await this.userSettingEntity.Save();\n } catch (error) {\n console.warn('Failed to save ERD state to User Settings:', error);\n }\n }\n}\n","<div class=\"entity-admin-dashboard-container\">\n <div class=\"dashboard-header\">\n <div class=\"header-info\">\n <span class=\"visible-entities-count\">{{ filteredEntities.length }} visible entities</span>\n </div>\n <div class=\"header-controls\">\n <button \n class=\"control-btn\" \n (click)=\"toggleFilterPanel()\" \n [class.active]=\"filterPanelVisible\"\n title=\"Toggle Filters\">\n <span class=\"fa-solid fa-filter\"></span>\n Filters\n </button>\n </div>\n </div>\n \n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading [text]=\"loadingMessage\" size=\"large\"></mj-loading>\n </div>\n }\n \n @if (error) {\n <div class=\"error-container\">\n <p class=\"error-message\">{{ error }}</p>\n </div>\n }\n \n @if (!isLoading && !error) {\n <div class=\"dashboard-content\">\n <mj-erd-composite \n #erdComposite\n [isRefreshingERD]=\"isRefreshingERD\"\n (stateChange)=\"onStateChange($event)\"\n (userStateChange)=\"onUserStateChange($event)\"\n (entityOpened)=\"onEntityOpened($event)\"\n (openRecord)=\"onOpenRecord($event)\"\n >\n </mj-erd-composite>\n </div>\n }\n</div>"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
/**
|
|
4
5
|
* One row in the param configuration table — either a preset-value or a runtime-prompted param.
|
|
@@ -26,7 +27,7 @@ export interface ActionPinConfigResult {
|
|
|
26
27
|
RuntimeParamNames: string[];
|
|
27
28
|
};
|
|
28
29
|
}
|
|
29
|
-
export declare class ActionPinConfigDialogComponent implements OnChanges {
|
|
30
|
+
export declare class ActionPinConfigDialogComponent extends BaseAngularComponent implements OnChanges {
|
|
30
31
|
private cdr;
|
|
31
32
|
Visible: boolean;
|
|
32
33
|
ActionID: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-pin-config-dialog.component.d.ts","sourceRoot":"","sources":["../../src/Home/action-pin-config-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAqB,MAAM,eAAe,CAAC;;
|
|
1
|
+
{"version":3,"file":"action-pin-config-dialog.component.d.ts","sourceRoot":"","sources":["../../src/Home/action-pin-config-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAqB,MAAM,eAAe,CAAC;AAGvI,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,GAAG,CAAC,EAAE;QACF,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,iBAAiB,EAAE,MAAM,EAAE,CAAC;KAC/B,CAAC;CACL;AA0BD,qBAOa,8BAA+B,SAAQ,oBAAqB,YAAW,SAAS;IAmB7E,OAAO,CAAC,GAAG;IAlBd,OAAO,UAAS;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IACjC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvC,MAAM,sCAA6C;IAE7D,SAAgB,YAAY;;;QAAiB;IAC7C,SAAgB,aAAa,WAAmB;IAEzC,WAAW,SAAM;IACjB,WAAW,EAAE,MAAM,CAA0B;IAC7C,MAAM,SAAsB;IAE5B,MAAM,EAAE,oBAAoB,EAAE,CAAM;IAEpC,eAAe,UAAS;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAEtB,GAAG,EAAE,iBAAiB;IAE1C,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAOzC,OAAO,CAAC,UAAU;YASJ,UAAU;IAgCxB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK9B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhC,YAAY,CAAC,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI;IAK3E,OAAO,IAAI,OAAO;IAQlB,IAAI,IAAI,IAAI;IAyBZ,MAAM,IAAI,IAAI;yCArHL,8BAA8B;2CAA9B,8BAA8B;CAwH1C"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter, ViewEncapsulation } 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 "@angular/forms";
|
|
5
6
|
const _forTrack0 = ($index, $item) => $item.value;
|
|
@@ -254,7 +255,7 @@ const FA_ICON_PALETTE = [
|
|
|
254
255
|
'fa-solid fa-brain', 'fa-solid fa-microchip', 'fa-solid fa-server',
|
|
255
256
|
'fa-solid fa-cloud', 'fa-solid fa-cube', 'fa-solid fa-thumbtack'
|
|
256
257
|
];
|
|
257
|
-
export class ActionPinConfigDialogComponent {
|
|
258
|
+
export class ActionPinConfigDialogComponent extends BaseAngularComponent {
|
|
258
259
|
cdr;
|
|
259
260
|
Visible = false;
|
|
260
261
|
ActionID = null;
|
|
@@ -270,6 +271,7 @@ export class ActionPinConfigDialogComponent {
|
|
|
270
271
|
IsLoadingParams = false;
|
|
271
272
|
ErrorMessage = null;
|
|
272
273
|
constructor(cdr) {
|
|
274
|
+
super();
|
|
273
275
|
this.cdr = cdr;
|
|
274
276
|
}
|
|
275
277
|
ngOnChanges(changes) {
|
|
@@ -292,7 +294,7 @@ export class ActionPinConfigDialogComponent {
|
|
|
292
294
|
this.IsLoadingParams = true;
|
|
293
295
|
this.cdr.markForCheck();
|
|
294
296
|
try {
|
|
295
|
-
const rv =
|
|
297
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
296
298
|
const result = await rv.RunView({
|
|
297
299
|
EntityName: 'MJ: Action Params',
|
|
298
300
|
ExtraFilter: `ActionID='${this.ActionID}' AND (Type='Input' OR Type='Both')`,
|
|
@@ -372,7 +374,7 @@ export class ActionPinConfigDialogComponent {
|
|
|
372
374
|
this.Result.emit({ Action: 'cancel' });
|
|
373
375
|
}
|
|
374
376
|
static ɵfac = function ActionPinConfigDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActionPinConfigDialogComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
375
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionPinConfigDialogComponent, selectors: [["mj-action-pin-config-dialog"]], inputs: { Visible: "Visible", ActionID: "ActionID", ActionName: "ActionName", ActionDescription: "ActionDescription" }, outputs: { Result: "Result" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[1, "apc-backdrop", 3, "click"], ["role", "dialog", "aria-modal", "true", "aria-labelledby", "apc-title", 1, "apc-dialog"], [1, "apc-header"], ["id", "apc-title"], [1, "fa-solid", "fa-thumbtack"], ["aria-label", "Close", 1, "apc-close", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "apc-body"], [1, "apc-action-chip"], [1, "fa-solid", "fa-bolt"], [1, "apc-preview"], [1, "apc-preview-card"], [1, "apc-preview-icon"], [1, "apc-preview-title"], [1, "apc-preview-hint"], [1, "apc-field"], ["for", "apc-name"], ["id", "apc-name", "type", "text", "placeholder", "e.g. Run Weekly Sales Report", 1, "mj-input", 3, "ngModelChange", "ngModel"], [1, "apc-color-grid"], ["type", "button", 1, "apc-color-swatch", 3, "selected", "background"], [1, "apc-icon-grid"], ["type", "button", 1, "apc-icon-swatch", 3, "selected"], [1, "apc-params-loading"], [1, "apc-params-empty"], [1, "apc-error"], [1, "apc-footer"], ["type", "button", 1, "apc-btn", "primary", 3, "click", "disabled"], ["type", "button", 1, "apc-btn", 3, "click"], ["type", "button", 1, "apc-color-swatch", 3, "click"], [1, "fa-solid", "fa-check"], ["type", "button", 1, "apc-icon-swatch", 3, "click"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "apc-params-help"], [1, "apc-params-table"], [1, "apc-param-row"], [1, "apc-param-info"], [1, "apc-param-name"], [1, "apc-param-req"], [1, "apc-param-desc"], [1, "apc-param-mode"], [1, "apc-mode-option"], ["type", "radio", 3, "change", "name", "checked"], [1, "apc-param-value"], ["type", "text", 1, "mj-input", 3, "ngModel", "placeholder"], [1, "apc-runtime-hint"], ["type", "text", 1, "mj-input", 3, "ngModelChange", "ngModel", "placeholder"], [1, "fa-solid", "fa-keyboard"], [1, "fa-solid", "fa-triangle-exclamation"]], template: function ActionPinConfigDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
377
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionPinConfigDialogComponent, selectors: [["mj-action-pin-config-dialog"]], inputs: { Visible: "Visible", ActionID: "ActionID", ActionName: "ActionName", ActionDescription: "ActionDescription" }, outputs: { Result: "Result" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[1, "apc-backdrop", 3, "click"], ["role", "dialog", "aria-modal", "true", "aria-labelledby", "apc-title", 1, "apc-dialog"], [1, "apc-header"], ["id", "apc-title"], [1, "fa-solid", "fa-thumbtack"], ["aria-label", "Close", 1, "apc-close", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "apc-body"], [1, "apc-action-chip"], [1, "fa-solid", "fa-bolt"], [1, "apc-preview"], [1, "apc-preview-card"], [1, "apc-preview-icon"], [1, "apc-preview-title"], [1, "apc-preview-hint"], [1, "apc-field"], ["for", "apc-name"], ["id", "apc-name", "type", "text", "placeholder", "e.g. Run Weekly Sales Report", 1, "mj-input", 3, "ngModelChange", "ngModel"], [1, "apc-color-grid"], ["type", "button", 1, "apc-color-swatch", 3, "selected", "background"], [1, "apc-icon-grid"], ["type", "button", 1, "apc-icon-swatch", 3, "selected"], [1, "apc-params-loading"], [1, "apc-params-empty"], [1, "apc-error"], [1, "apc-footer"], ["type", "button", 1, "apc-btn", "primary", 3, "click", "disabled"], ["type", "button", 1, "apc-btn", 3, "click"], ["type", "button", 1, "apc-color-swatch", 3, "click"], [1, "fa-solid", "fa-check"], ["type", "button", 1, "apc-icon-swatch", 3, "click"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "apc-params-help"], [1, "apc-params-table"], [1, "apc-param-row"], [1, "apc-param-info"], [1, "apc-param-name"], [1, "apc-param-req"], [1, "apc-param-desc"], [1, "apc-param-mode"], [1, "apc-mode-option"], ["type", "radio", 3, "change", "name", "checked"], [1, "apc-param-value"], ["type", "text", 1, "mj-input", 3, "ngModel", "placeholder"], [1, "apc-runtime-hint"], ["type", "text", 1, "mj-input", 3, "ngModelChange", "ngModel", "placeholder"], [1, "fa-solid", "fa-keyboard"], [1, "fa-solid", "fa-triangle-exclamation"]], template: function ActionPinConfigDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
376
378
|
i0.ɵɵconditionalCreate(0, ActionPinConfigDialogComponent_Conditional_0_Template, 50, 10);
|
|
377
379
|
} if (rf & 2) {
|
|
378
380
|
i0.ɵɵconditional(ctx.Visible ? 0 : -1);
|
|
@@ -392,5 +394,5 @@ export class ActionPinConfigDialogComponent {
|
|
|
392
394
|
}], Result: [{
|
|
393
395
|
type: Output
|
|
394
396
|
}] }); })();
|
|
395
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionPinConfigDialogComponent, { className: "ActionPinConfigDialogComponent", filePath: "src/Home/action-pin-config-dialog.component.ts", lineNumber:
|
|
397
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionPinConfigDialogComponent, { className: "ActionPinConfigDialogComponent", filePath: "src/Home/action-pin-config-dialog.component.ts", lineNumber: 65 }); })();
|
|
396
398
|
//# sourceMappingURL=action-pin-config-dialog.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-pin-config-dialog.component.js","sourceRoot":"","sources":["../../src/Home/action-pin-config-dialog.component.ts","../../src/Home/action-pin-config-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef, ViewEncapsulation } from '@angular/core';\nimport { RunView } from '@memberjunction/core';\nimport { MJActionParamEntity } from '@memberjunction/core-entities';\n\n/**\n * One row in the param configuration table — either a preset-value or a runtime-prompted param.\n */\nexport interface ActionPinParamConfig {\n Name: string;\n Description: string;\n IsRequired: boolean;\n DefaultValue: string;\n Mode: 'preset' | 'runtime';\n PresetValue: string;\n}\n\n/**\n * Payload returned when the user saves the dialog.\n */\nexport interface ActionPinConfigResult {\n Action: 'save' | 'cancel';\n Pin?: {\n DisplayName: string;\n ActionID: string;\n ActionName: string;\n AccentColor: string;\n FaIcon: string;\n PresetParams: Record<string, string>;\n RuntimeParamNames: string[];\n };\n}\n\nconst COLOR_PALETTE = [\n { name: 'Indigo', value: '#4F46E5' },\n { name: 'Emerald', value: '#10B981' },\n { name: 'Rose', value: '#F43F5E' },\n { name: 'Amber', value: '#F59E0B' },\n { name: 'Sky', value: '#0EA5E9' },\n { name: 'Violet', value: '#8B5CF6' },\n { name: 'Teal', value: '#14B8A6' },\n { name: 'Slate', value: '#475569' }\n];\n\nconst FA_ICON_PALETTE = [\n 'fa-solid fa-bolt', 'fa-solid fa-rocket', 'fa-solid fa-wand-magic-sparkles',\n 'fa-solid fa-robot', 'fa-solid fa-gears', 'fa-solid fa-play',\n 'fa-solid fa-bullhorn', 'fa-solid fa-envelope', 'fa-solid fa-chart-line',\n 'fa-solid fa-file-export', 'fa-solid fa-file-import', 'fa-solid fa-database',\n 'fa-solid fa-code', 'fa-solid fa-terminal', 'fa-solid fa-paper-plane',\n 'fa-solid fa-camera', 'fa-solid fa-image', 'fa-solid fa-bell',\n 'fa-solid fa-flag', 'fa-solid fa-star', 'fa-solid fa-heart',\n 'fa-solid fa-bookmark', 'fa-solid fa-tag', 'fa-solid fa-lightbulb',\n 'fa-solid fa-brain', 'fa-solid fa-microchip', 'fa-solid fa-server',\n 'fa-solid fa-cloud', 'fa-solid fa-cube', 'fa-solid fa-thumbtack'\n];\n\n@Component({\n standalone: false,\n selector: 'mj-action-pin-config-dialog',\n templateUrl: './action-pin-config-dialog.component.html',\n styleUrls: ['./action-pin-config-dialog.component.css'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ActionPinConfigDialogComponent implements OnChanges {\n @Input() Visible = false;\n @Input() ActionID: string | null = null;\n @Input() ActionName: string | null = null;\n @Input() ActionDescription: string | null = null;\n @Output() Result = new EventEmitter<ActionPinConfigResult>();\n\n public readonly ColorPalette = COLOR_PALETTE;\n public readonly FaIconPalette = FA_ICON_PALETTE;\n\n public DisplayName = '';\n public AccentColor: string = COLOR_PALETTE[0].value;\n public FaIcon = FA_ICON_PALETTE[0];\n\n public Params: ActionPinParamConfig[] = [];\n\n public IsLoadingParams = false;\n public ErrorMessage: string | null = null;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['Visible'] && this.Visible && this.ActionID) {\n this.resetState();\n this.loadParams();\n }\n }\n\n private resetState(): void {\n this.DisplayName = this.ActionName ?? '';\n this.AccentColor = COLOR_PALETTE[0].value;\n this.FaIcon = FA_ICON_PALETTE[0];\n this.Params = [];\n this.ErrorMessage = null;\n this.IsLoadingParams = false;\n }\n\n private async loadParams(): Promise<void> {\n if (!this.ActionID) return;\n this.IsLoadingParams = true;\n this.cdr.markForCheck();\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJActionParamEntity>({\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${this.ActionID}' AND (Type='Input' OR Type='Both')`,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n if (!result.Success) {\n this.ErrorMessage = `Could not load parameters: ${result.ErrorMessage}`;\n return;\n }\n this.Params = (result.Results ?? []).map(p => ({\n Name: p.Name,\n Description: p.Description ?? '',\n IsRequired: p.IsRequired,\n DefaultValue: p.DefaultValue ?? '',\n Mode: p.IsRequired ? 'preset' : 'runtime',\n PresetValue: p.DefaultValue ?? ''\n }));\n } catch (err) {\n this.ErrorMessage = `Failed to load action parameters: ${(err as Error).message}`;\n } finally {\n this.IsLoadingParams = false;\n this.cdr.markForCheck();\n }\n }\n\n SelectColor(hex: string): void {\n this.AccentColor = hex;\n this.cdr.markForCheck();\n }\n\n SelectFaIcon(icon: string): void {\n this.FaIcon = icon;\n this.cdr.markForCheck();\n }\n\n SetParamMode(param: ActionPinParamConfig, mode: 'preset' | 'runtime'): void {\n param.Mode = mode;\n this.cdr.markForCheck();\n }\n\n CanSave(): boolean {\n if (!this.DisplayName.trim()) return false;\n for (const p of this.Params) {\n if (p.Mode === 'preset' && p.IsRequired && !p.PresetValue.trim()) return false;\n }\n return true;\n }\n\n Save(): void {\n if (!this.CanSave() || !this.ActionID || !this.ActionName) return;\n const presetParams: Record<string, string> = {};\n const runtimeParamNames: string[] = [];\n for (const p of this.Params) {\n if (p.Mode === 'preset') {\n if (p.PresetValue.trim() !== '') presetParams[p.Name] = p.PresetValue;\n } else {\n runtimeParamNames.push(p.Name);\n }\n }\n this.Result.emit({\n Action: 'save',\n Pin: {\n DisplayName: this.DisplayName.trim(),\n ActionID: this.ActionID,\n ActionName: this.ActionName,\n AccentColor: this.AccentColor,\n FaIcon: this.FaIcon,\n PresetParams: presetParams,\n RuntimeParamNames: runtimeParamNames\n }\n });\n }\n\n Cancel(): void {\n this.Result.emit({ Action: 'cancel' });\n }\n}\n","@if (Visible) {\n <div class=\"apc-backdrop\" (click)=\"Cancel()\"></div>\n <div class=\"apc-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"apc-title\">\n <div class=\"apc-header\">\n <h3 id=\"apc-title\">\n <i class=\"fa-solid fa-thumbtack\"></i>\n Pin Action\n </h3>\n <button class=\"apc-close\" (click)=\"Cancel()\" aria-label=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"apc-body\">\n <div class=\"apc-action-chip\">\n <i class=\"fa-solid fa-bolt\"></i>\n <span>{{ ActionName }}</span>\n </div>\n\n <div class=\"apc-preview\">\n <div class=\"apc-preview-card\" [style.background]=\"'linear-gradient(135deg, ' + AccentColor + ' 0%, ' + AccentColor + 'cc 100%)'\">\n <div class=\"apc-preview-icon\">\n <i [class]=\"FaIcon\"></i>\n </div>\n <div class=\"apc-preview-title\">{{ DisplayName || 'Untitled pin' }}</div>\n </div>\n <div class=\"apc-preview-hint\">Live preview of how your pin will look on Home</div>\n </div>\n\n <div class=\"apc-field\">\n <label for=\"apc-name\">Pin title</label>\n <input id=\"apc-name\" type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"DisplayName\"\n placeholder=\"e.g. Run Weekly Sales Report\" />\n </div>\n\n <div class=\"apc-field\">\n <label>Accent color</label>\n <div class=\"apc-color-grid\">\n @for (c of ColorPalette; track c.value) {\n <button type=\"button\"\n class=\"apc-color-swatch\"\n [class.selected]=\"AccentColor === c.value\"\n [style.background]=\"c.value\"\n [attr.aria-label]=\"c.name\"\n (click)=\"SelectColor(c.value)\">\n @if (AccentColor === c.value) {\n <i class=\"fa-solid fa-check\"></i>\n }\n </button>\n }\n </div>\n </div>\n\n <div class=\"apc-field\">\n <label>Icon</label>\n <div class=\"apc-icon-grid\">\n @for (icon of FaIconPalette; track icon) {\n <button type=\"button\"\n class=\"apc-icon-swatch\"\n [class.selected]=\"FaIcon === icon\"\n (click)=\"SelectFaIcon(icon)\">\n <i [class]=\"icon\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"apc-field\">\n <label>Parameters</label>\n @if (IsLoadingParams) {\n <div class=\"apc-params-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading parameters…\n </div>\n } @else if (Params.length === 0) {\n <div class=\"apc-params-empty\">This action takes no input parameters.</div>\n } @else {\n <div class=\"apc-params-help\">\n Choose which parameters are <strong>preset</strong> (baked into the pin) vs.\n <strong>prompted at runtime</strong> each time the pin is clicked.\n </div>\n <div class=\"apc-params-table\">\n @for (p of Params; track p.Name) {\n <div class=\"apc-param-row\">\n <div class=\"apc-param-info\">\n <div class=\"apc-param-name\">\n {{ p.Name }}\n @if (p.IsRequired) { <span class=\"apc-param-req\">required</span> }\n </div>\n @if (p.Description) {\n <div class=\"apc-param-desc\">{{ p.Description }}</div>\n }\n </div>\n <div class=\"apc-param-mode\">\n <label class=\"apc-mode-option\" [class.selected]=\"p.Mode === 'preset'\">\n <input type=\"radio\"\n [name]=\"'mode-' + p.Name\"\n [checked]=\"p.Mode === 'preset'\"\n (change)=\"SetParamMode(p, 'preset')\" />\n <span>Preset</span>\n </label>\n <label class=\"apc-mode-option\" [class.selected]=\"p.Mode === 'runtime'\">\n <input type=\"radio\"\n [name]=\"'mode-' + p.Name\"\n [checked]=\"p.Mode === 'runtime'\"\n (change)=\"SetParamMode(p, 'runtime')\" />\n <span>Prompt</span>\n </label>\n </div>\n <div class=\"apc-param-value\">\n @if (p.Mode === 'preset') {\n <input type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"p.PresetValue\"\n [placeholder]=\"p.DefaultValue || 'Preset value'\" />\n } @else {\n <span class=\"apc-runtime-hint\">\n <i class=\"fa-solid fa-keyboard\"></i> Asked at click time\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n @if (ErrorMessage) {\n <div class=\"apc-error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> {{ ErrorMessage }}\n </div>\n }\n </div>\n\n <div class=\"apc-footer\">\n <button type=\"button\" class=\"apc-btn primary\"\n [disabled]=\"!CanSave()\"\n (click)=\"Save()\">\n <i class=\"fa-solid fa-thumbtack\"></i> Pin to Home\n </button>\n <button type=\"button\" class=\"apc-btn\" (click)=\"Cancel()\">\n Cancel\n </button>\n </div>\n </div>\n}\n"]}
|
|
1
|
+
{"version":3,"file":"action-pin-config-dialog.component.js","sourceRoot":"","sources":["../../src/Home/action-pin-config-dialog.component.ts","../../src/Home/action-pin-config-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef, ViewEncapsulation } from '@angular/core';\nimport { RunView } from '@memberjunction/core';\nimport { MJActionParamEntity } from '@memberjunction/core-entities';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\n/**\n * One row in the param configuration table — either a preset-value or a runtime-prompted param.\n */\nexport interface ActionPinParamConfig {\n Name: string;\n Description: string;\n IsRequired: boolean;\n DefaultValue: string;\n Mode: 'preset' | 'runtime';\n PresetValue: string;\n}\n\n/**\n * Payload returned when the user saves the dialog.\n */\nexport interface ActionPinConfigResult {\n Action: 'save' | 'cancel';\n Pin?: {\n DisplayName: string;\n ActionID: string;\n ActionName: string;\n AccentColor: string;\n FaIcon: string;\n PresetParams: Record<string, string>;\n RuntimeParamNames: string[];\n };\n}\n\nconst COLOR_PALETTE = [\n { name: 'Indigo', value: '#4F46E5' },\n { name: 'Emerald', value: '#10B981' },\n { name: 'Rose', value: '#F43F5E' },\n { name: 'Amber', value: '#F59E0B' },\n { name: 'Sky', value: '#0EA5E9' },\n { name: 'Violet', value: '#8B5CF6' },\n { name: 'Teal', value: '#14B8A6' },\n { name: 'Slate', value: '#475569' }\n];\n\nconst FA_ICON_PALETTE = [\n 'fa-solid fa-bolt', 'fa-solid fa-rocket', 'fa-solid fa-wand-magic-sparkles',\n 'fa-solid fa-robot', 'fa-solid fa-gears', 'fa-solid fa-play',\n 'fa-solid fa-bullhorn', 'fa-solid fa-envelope', 'fa-solid fa-chart-line',\n 'fa-solid fa-file-export', 'fa-solid fa-file-import', 'fa-solid fa-database',\n 'fa-solid fa-code', 'fa-solid fa-terminal', 'fa-solid fa-paper-plane',\n 'fa-solid fa-camera', 'fa-solid fa-image', 'fa-solid fa-bell',\n 'fa-solid fa-flag', 'fa-solid fa-star', 'fa-solid fa-heart',\n 'fa-solid fa-bookmark', 'fa-solid fa-tag', 'fa-solid fa-lightbulb',\n 'fa-solid fa-brain', 'fa-solid fa-microchip', 'fa-solid fa-server',\n 'fa-solid fa-cloud', 'fa-solid fa-cube', 'fa-solid fa-thumbtack'\n];\n\n@Component({\n standalone: false,\n selector: 'mj-action-pin-config-dialog',\n templateUrl: './action-pin-config-dialog.component.html',\n styleUrls: ['./action-pin-config-dialog.component.css'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ActionPinConfigDialogComponent extends BaseAngularComponent implements OnChanges {\n @Input() Visible = false;\n @Input() ActionID: string | null = null;\n @Input() ActionName: string | null = null;\n @Input() ActionDescription: string | null = null;\n @Output() Result = new EventEmitter<ActionPinConfigResult>();\n\n public readonly ColorPalette = COLOR_PALETTE;\n public readonly FaIconPalette = FA_ICON_PALETTE;\n\n public DisplayName = '';\n public AccentColor: string = COLOR_PALETTE[0].value;\n public FaIcon = FA_ICON_PALETTE[0];\n\n public Params: ActionPinParamConfig[] = [];\n\n public IsLoadingParams = false;\n public ErrorMessage: string | null = null;\n\n constructor(private cdr: ChangeDetectorRef) { super(); }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['Visible'] && this.Visible && this.ActionID) {\n this.resetState();\n this.loadParams();\n }\n }\n\n private resetState(): void {\n this.DisplayName = this.ActionName ?? '';\n this.AccentColor = COLOR_PALETTE[0].value;\n this.FaIcon = FA_ICON_PALETTE[0];\n this.Params = [];\n this.ErrorMessage = null;\n this.IsLoadingParams = false;\n }\n\n private async loadParams(): Promise<void> {\n if (!this.ActionID) return;\n this.IsLoadingParams = true;\n this.cdr.markForCheck();\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJActionParamEntity>({\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${this.ActionID}' AND (Type='Input' OR Type='Both')`,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n if (!result.Success) {\n this.ErrorMessage = `Could not load parameters: ${result.ErrorMessage}`;\n return;\n }\n this.Params = (result.Results ?? []).map(p => ({\n Name: p.Name,\n Description: p.Description ?? '',\n IsRequired: p.IsRequired,\n DefaultValue: p.DefaultValue ?? '',\n Mode: p.IsRequired ? 'preset' : 'runtime',\n PresetValue: p.DefaultValue ?? ''\n }));\n } catch (err) {\n this.ErrorMessage = `Failed to load action parameters: ${(err as Error).message}`;\n } finally {\n this.IsLoadingParams = false;\n this.cdr.markForCheck();\n }\n }\n\n SelectColor(hex: string): void {\n this.AccentColor = hex;\n this.cdr.markForCheck();\n }\n\n SelectFaIcon(icon: string): void {\n this.FaIcon = icon;\n this.cdr.markForCheck();\n }\n\n SetParamMode(param: ActionPinParamConfig, mode: 'preset' | 'runtime'): void {\n param.Mode = mode;\n this.cdr.markForCheck();\n }\n\n CanSave(): boolean {\n if (!this.DisplayName.trim()) return false;\n for (const p of this.Params) {\n if (p.Mode === 'preset' && p.IsRequired && !p.PresetValue.trim()) return false;\n }\n return true;\n }\n\n Save(): void {\n if (!this.CanSave() || !this.ActionID || !this.ActionName) return;\n const presetParams: Record<string, string> = {};\n const runtimeParamNames: string[] = [];\n for (const p of this.Params) {\n if (p.Mode === 'preset') {\n if (p.PresetValue.trim() !== '') presetParams[p.Name] = p.PresetValue;\n } else {\n runtimeParamNames.push(p.Name);\n }\n }\n this.Result.emit({\n Action: 'save',\n Pin: {\n DisplayName: this.DisplayName.trim(),\n ActionID: this.ActionID,\n ActionName: this.ActionName,\n AccentColor: this.AccentColor,\n FaIcon: this.FaIcon,\n PresetParams: presetParams,\n RuntimeParamNames: runtimeParamNames\n }\n });\n }\n\n Cancel(): void {\n this.Result.emit({ Action: 'cancel' });\n }\n}\n","@if (Visible) {\n <div class=\"apc-backdrop\" (click)=\"Cancel()\"></div>\n <div class=\"apc-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"apc-title\">\n <div class=\"apc-header\">\n <h3 id=\"apc-title\">\n <i class=\"fa-solid fa-thumbtack\"></i>\n Pin Action\n </h3>\n <button class=\"apc-close\" (click)=\"Cancel()\" aria-label=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"apc-body\">\n <div class=\"apc-action-chip\">\n <i class=\"fa-solid fa-bolt\"></i>\n <span>{{ ActionName }}</span>\n </div>\n\n <div class=\"apc-preview\">\n <div class=\"apc-preview-card\" [style.background]=\"'linear-gradient(135deg, ' + AccentColor + ' 0%, ' + AccentColor + 'cc 100%)'\">\n <div class=\"apc-preview-icon\">\n <i [class]=\"FaIcon\"></i>\n </div>\n <div class=\"apc-preview-title\">{{ DisplayName || 'Untitled pin' }}</div>\n </div>\n <div class=\"apc-preview-hint\">Live preview of how your pin will look on Home</div>\n </div>\n\n <div class=\"apc-field\">\n <label for=\"apc-name\">Pin title</label>\n <input id=\"apc-name\" type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"DisplayName\"\n placeholder=\"e.g. Run Weekly Sales Report\" />\n </div>\n\n <div class=\"apc-field\">\n <label>Accent color</label>\n <div class=\"apc-color-grid\">\n @for (c of ColorPalette; track c.value) {\n <button type=\"button\"\n class=\"apc-color-swatch\"\n [class.selected]=\"AccentColor === c.value\"\n [style.background]=\"c.value\"\n [attr.aria-label]=\"c.name\"\n (click)=\"SelectColor(c.value)\">\n @if (AccentColor === c.value) {\n <i class=\"fa-solid fa-check\"></i>\n }\n </button>\n }\n </div>\n </div>\n\n <div class=\"apc-field\">\n <label>Icon</label>\n <div class=\"apc-icon-grid\">\n @for (icon of FaIconPalette; track icon) {\n <button type=\"button\"\n class=\"apc-icon-swatch\"\n [class.selected]=\"FaIcon === icon\"\n (click)=\"SelectFaIcon(icon)\">\n <i [class]=\"icon\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"apc-field\">\n <label>Parameters</label>\n @if (IsLoadingParams) {\n <div class=\"apc-params-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading parameters…\n </div>\n } @else if (Params.length === 0) {\n <div class=\"apc-params-empty\">This action takes no input parameters.</div>\n } @else {\n <div class=\"apc-params-help\">\n Choose which parameters are <strong>preset</strong> (baked into the pin) vs.\n <strong>prompted at runtime</strong> each time the pin is clicked.\n </div>\n <div class=\"apc-params-table\">\n @for (p of Params; track p.Name) {\n <div class=\"apc-param-row\">\n <div class=\"apc-param-info\">\n <div class=\"apc-param-name\">\n {{ p.Name }}\n @if (p.IsRequired) { <span class=\"apc-param-req\">required</span> }\n </div>\n @if (p.Description) {\n <div class=\"apc-param-desc\">{{ p.Description }}</div>\n }\n </div>\n <div class=\"apc-param-mode\">\n <label class=\"apc-mode-option\" [class.selected]=\"p.Mode === 'preset'\">\n <input type=\"radio\"\n [name]=\"'mode-' + p.Name\"\n [checked]=\"p.Mode === 'preset'\"\n (change)=\"SetParamMode(p, 'preset')\" />\n <span>Preset</span>\n </label>\n <label class=\"apc-mode-option\" [class.selected]=\"p.Mode === 'runtime'\">\n <input type=\"radio\"\n [name]=\"'mode-' + p.Name\"\n [checked]=\"p.Mode === 'runtime'\"\n (change)=\"SetParamMode(p, 'runtime')\" />\n <span>Prompt</span>\n </label>\n </div>\n <div class=\"apc-param-value\">\n @if (p.Mode === 'preset') {\n <input type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"p.PresetValue\"\n [placeholder]=\"p.DefaultValue || 'Preset value'\" />\n } @else {\n <span class=\"apc-runtime-hint\">\n <i class=\"fa-solid fa-keyboard\"></i> Asked at click time\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n @if (ErrorMessage) {\n <div class=\"apc-error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> {{ ErrorMessage }}\n </div>\n }\n </div>\n\n <div class=\"apc-footer\">\n <button type=\"button\" class=\"apc-btn primary\"\n [disabled]=\"!CanSave()\"\n (click)=\"Save()\">\n <i class=\"fa-solid fa-thumbtack\"></i> Pin to Home\n </button>\n <button type=\"button\" class=\"apc-btn\" (click)=\"Cancel()\">\n Cancel\n </button>\n </div>\n </div>\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
2
3
|
import { HomeAppPinnedItem } from '@memberjunction/ng-shared';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
/**
|
|
@@ -11,7 +12,7 @@ interface RuntimeField {
|
|
|
11
12
|
Name: string;
|
|
12
13
|
Value: string;
|
|
13
14
|
}
|
|
14
|
-
export declare class ActionPinRunnerDialogComponent implements OnChanges {
|
|
15
|
+
export declare class ActionPinRunnerDialogComponent extends BaseAngularComponent implements OnChanges {
|
|
15
16
|
private cdr;
|
|
16
17
|
Visible: boolean;
|
|
17
18
|
Pin: HomeAppPinnedItem | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-pin-runner-dialog.component.d.ts","sourceRoot":"","sources":["../../src/Home/action-pin-runner-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAqB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"action-pin-runner-dialog.component.d.ts","sourceRoot":"","sources":["../../src/Home/action-pin-runner-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAqB,MAAM,eAAe,CAAC;AAEvI,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAA0B,MAAM,2BAA2B,CAAC;;AAEtF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,IAAI,CAAC;CAChB;AAED,UAAU,YAAY;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,qBAOa,8BAA+B,SAAQ,oBAAqB,YAAW,SAAS;IAW7E,OAAO,CAAC,GAAG;IAVd,OAAO,UAAS;IAChB,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IACpC,MAAM,mCAA0C;IAEnD,aAAa,EAAE,YAAY,EAAE,CAAM;IACnC,SAAS,UAAS;IAClB,YAAY,EAAE,OAAO,GAAG,IAAI,CAAQ;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IACpC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAEtB,GAAG,EAAE,iBAAiB;IAE1C,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAMzC,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,WAAW;IAUnB,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,MAAM,IAAI,OAAO;IAOX,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B1B,OAAO,CAAC,iBAAiB;IAazB,KAAK,IAAI,IAAI;yCAhGJ,8BAA8B;2CAA9B,8BAA8B;CAoG1C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter, ViewEncapsulation } from '@angular/core';
|
|
2
|
-
import { Metadata } from '@memberjunction/core';
|
|
3
2
|
import { GraphQLActionClient } from '@memberjunction/graphql-dataprovider';
|
|
3
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@angular/forms";
|
|
6
6
|
const _forTrack0 = ($index, $item) => $item.Name;
|
|
@@ -170,7 +170,7 @@ function ActionPinRunnerDialogComponent_Conditional_0_Template(rf, ctx) { if (rf
|
|
|
170
170
|
i0.ɵɵadvance(2);
|
|
171
171
|
i0.ɵɵconditional(ctx_r1.RunSucceeded === null ? 17 : 18);
|
|
172
172
|
} }
|
|
173
|
-
export class ActionPinRunnerDialogComponent {
|
|
173
|
+
export class ActionPinRunnerDialogComponent extends BaseAngularComponent {
|
|
174
174
|
cdr;
|
|
175
175
|
Visible = false;
|
|
176
176
|
Pin = null;
|
|
@@ -181,6 +181,7 @@ export class ActionPinRunnerDialogComponent {
|
|
|
181
181
|
ResultMessage = null;
|
|
182
182
|
ErrorMessage = null;
|
|
183
183
|
constructor(cdr) {
|
|
184
|
+
super();
|
|
184
185
|
this.cdr = cdr;
|
|
185
186
|
}
|
|
186
187
|
ngOnChanges(changes) {
|
|
@@ -232,7 +233,7 @@ export class ActionPinRunnerDialogComponent {
|
|
|
232
233
|
this.cdr.markForCheck();
|
|
233
234
|
try {
|
|
234
235
|
const params = this.buildActionParams(cfg);
|
|
235
|
-
const provider =
|
|
236
|
+
const provider = this.ProviderToUse;
|
|
236
237
|
const actionClient = new GraphQLActionClient(provider);
|
|
237
238
|
const result = await actionClient.RunAction(cfg.actionId, params);
|
|
238
239
|
this.RunSucceeded = result.Success;
|
|
@@ -265,7 +266,7 @@ export class ActionPinRunnerDialogComponent {
|
|
|
265
266
|
this.Result.emit({ Closed: true });
|
|
266
267
|
}
|
|
267
268
|
static ɵfac = function ActionPinRunnerDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActionPinRunnerDialogComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
268
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionPinRunnerDialogComponent, selectors: [["mj-action-pin-runner-dialog"]], inputs: { Visible: "Visible", Pin: "Pin" }, outputs: { Result: "Result" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[1, "apr-backdrop", 3, "click"], ["role", "dialog", "aria-modal", "true", 1, "apr-dialog"], [1, "apr-hero"], [1, "apr-hero-icon"], [1, "apr-hero-info"], [1, "apr-hero-title"], [1, "apr-hero-sub"], ["aria-label", "Close", 1, "apr-close", 3, "click", "disabled"], [1, "fa-solid", "fa-xmark"], [1, "apr-body"], [1, "apr-result", 3, "success", "failure"], [1, "apr-error"], [1, "apr-footer"], ["type", "button", 1, "apr-btn", "primary"], [1, "apr-no-fields"], [1, "fa-solid", "fa-circle-info"], [1, "apr-help"], [1, "apr-fields"], [1, "apr-field"], [3, "for"], ["type", "text", 1, "mj-input", 3, "ngModelChange", "id", "ngModel", "disabled", "placeholder"], [1, "apr-result"], [1, "apr-result-icon"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-circle-xmark"], [1, "apr-result-text"], [1, "apr-result-title"], [1, "apr-result-msg"], [1, "fa-solid", "fa-triangle-exclamation"], ["type", "button", 1, "apr-btn", "primary", 3, "click", "disabled"], ["type", "button", 1, "apr-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-play"], ["type", "button", 1, "apr-btn", "primary", 3, "click"]], template: function ActionPinRunnerDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
269
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionPinRunnerDialogComponent, selectors: [["mj-action-pin-runner-dialog"]], inputs: { Visible: "Visible", Pin: "Pin" }, outputs: { Result: "Result" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[1, "apr-backdrop", 3, "click"], ["role", "dialog", "aria-modal", "true", 1, "apr-dialog"], [1, "apr-hero"], [1, "apr-hero-icon"], [1, "apr-hero-info"], [1, "apr-hero-title"], [1, "apr-hero-sub"], ["aria-label", "Close", 1, "apr-close", 3, "click", "disabled"], [1, "fa-solid", "fa-xmark"], [1, "apr-body"], [1, "apr-result", 3, "success", "failure"], [1, "apr-error"], [1, "apr-footer"], ["type", "button", 1, "apr-btn", "primary"], [1, "apr-no-fields"], [1, "fa-solid", "fa-circle-info"], [1, "apr-help"], [1, "apr-fields"], [1, "apr-field"], [3, "for"], ["type", "text", 1, "mj-input", 3, "ngModelChange", "id", "ngModel", "disabled", "placeholder"], [1, "apr-result"], [1, "apr-result-icon"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-circle-xmark"], [1, "apr-result-text"], [1, "apr-result-title"], [1, "apr-result-msg"], [1, "fa-solid", "fa-triangle-exclamation"], ["type", "button", 1, "apr-btn", "primary", 3, "click", "disabled"], ["type", "button", 1, "apr-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-play"], ["type", "button", 1, "apr-btn", "primary", 3, "click"]], template: function ActionPinRunnerDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
269
270
|
i0.ɵɵconditionalCreate(0, ActionPinRunnerDialogComponent_Conditional_0_Template, 19, 10);
|
|
270
271
|
} if (rf & 2) {
|
|
271
272
|
i0.ɵɵconditional(ctx.Visible && ctx.Pin ? 0 : -1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-pin-runner-dialog.component.js","sourceRoot":"","sources":["../../src/Home/action-pin-runner-dialog.component.ts","../../src/Home/action-pin-runner-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef, ViewEncapsulation } from '@angular/core';\nimport { Metadata } from '@memberjunction/core';\nimport { GraphQLActionClient, GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';\nimport { ActionParam } from '@memberjunction/actions-base';\nimport { HomeAppPinnedItem, ActionPinConfiguration } from '@memberjunction/ng-shared';\n\n/**\n * Result emitted after the action finishes (or the dialog is cancelled).\n */\nexport interface ActionPinRunResult {\n Closed: true;\n}\n\ninterface RuntimeField {\n Name: string;\n Value: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-action-pin-runner-dialog',\n templateUrl: './action-pin-runner-dialog.component.html',\n styleUrls: ['./action-pin-runner-dialog.component.css'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ActionPinRunnerDialogComponent implements OnChanges {\n @Input() Visible = false;\n @Input() Pin: HomeAppPinnedItem | null = null;\n @Output() Result = new EventEmitter<ActionPinRunResult>();\n\n public RuntimeFields: RuntimeField[] = [];\n public IsRunning = false;\n public RunSucceeded: boolean | null = null;\n public ResultMessage: string | null = null;\n public ErrorMessage: string | null = null;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['Visible'] && this.Visible && this.Pin) {\n this.initFromPin();\n }\n }\n\n private getConfig(): ActionPinConfiguration | null {\n if (!this.Pin) return null;\n return this.Pin.Configuration as unknown as ActionPinConfiguration;\n }\n\n private initFromPin(): void {\n const cfg = this.getConfig();\n this.RuntimeFields = (cfg?.runtimeParamNames ?? []).map(name => ({ Name: name, Value: '' }));\n this.IsRunning = false;\n this.RunSucceeded = null;\n this.ResultMessage = null;\n this.ErrorMessage = null;\n this.cdr.markForCheck();\n }\n\n get AccentColor(): string {\n return this.getConfig()?.accentColor ?? 'var(--mj-brand-primary)';\n }\n\n get FaIcon(): string {\n return this.Pin?.Icon ?? 'fa-solid fa-bolt';\n }\n\n get ActionName(): string {\n return this.getConfig()?.actionName ?? 'Action';\n }\n\n CanRun(): boolean {\n if (this.IsRunning) return false;\n // Runtime fields without values are allowed (action may handle missing params).\n // The action itself reports required-param errors via its result.\n return true;\n }\n\n async Run(): Promise<void> {\n const cfg = this.getConfig();\n if (!cfg || !cfg.actionId) {\n this.ErrorMessage = 'Pin is missing an actionId — cannot execute.';\n this.cdr.markForCheck();\n return;\n }\n\n this.IsRunning = true;\n this.RunSucceeded = null;\n this.ResultMessage = null;\n this.ErrorMessage = null;\n this.cdr.markForCheck();\n\n try {\n const params = this.buildActionParams(cfg);\n const provider = Metadata.Provider as GraphQLDataProvider;\n const actionClient = new GraphQLActionClient(provider);\n const result = await actionClient.RunAction(cfg.actionId, params);\n this.RunSucceeded = result.Success;\n this.ResultMessage = result.Message ?? (result.Success ? 'Action completed.' : 'Action reported a failure.');\n } catch (err) {\n this.RunSucceeded = false;\n this.ErrorMessage = `Execution failed: ${(err as Error).message}`;\n } finally {\n this.IsRunning = false;\n this.cdr.markForCheck();\n }\n }\n\n private buildActionParams(cfg: ActionPinConfiguration): ActionParam[] {\n const params: ActionParam[] = [];\n for (const [name, value] of Object.entries(cfg.presetParams ?? {})) {\n params.push({ Name: name, Value: value, Type: 'Input' });\n }\n for (const f of this.RuntimeFields) {\n if (f.Value !== '') {\n params.push({ Name: f.Name, Value: f.Value, Type: 'Input' });\n }\n }\n return params;\n }\n\n Close(): void {\n if (this.IsRunning) return;\n this.Result.emit({ Closed: true });\n }\n}\n","@if (Visible && Pin) {\n <div class=\"apr-backdrop\" (click)=\"Close()\"></div>\n <div class=\"apr-dialog\" role=\"dialog\" aria-modal=\"true\">\n <div class=\"apr-hero\" [style.background]=\"'linear-gradient(135deg, ' + AccentColor + ' 0%, ' + AccentColor + 'cc 100%)'\">\n <div class=\"apr-hero-icon\">\n <i [class]=\"FaIcon\"></i>\n </div>\n <div class=\"apr-hero-info\">\n <div class=\"apr-hero-title\">{{ Pin.DisplayName }}</div>\n <div class=\"apr-hero-sub\">{{ ActionName }}</div>\n </div>\n <button class=\"apr-close\" (click)=\"Close()\" [disabled]=\"IsRunning\" aria-label=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"apr-body\">\n @if (RunSucceeded === null) {\n @if (RuntimeFields.length === 0) {\n <div class=\"apr-no-fields\">\n <i class=\"fa-solid fa-circle-info\"></i>\n This action runs with all parameters preset — no input needed.\n </div>\n } @else {\n <div class=\"apr-help\">Provide values for the parameters below:</div>\n <div class=\"apr-fields\">\n @for (f of RuntimeFields; track f.Name) {\n <div class=\"apr-field\">\n <label [for]=\"'rf-' + f.Name\">{{ f.Name }}</label>\n <input [id]=\"'rf-' + f.Name\"\n type=\"text\"\n class=\"mj-input\"\n [(ngModel)]=\"f.Value\"\n [disabled]=\"IsRunning\"\n [placeholder]=\"'Enter ' + f.Name\" />\n </div>\n }\n </div>\n }\n } @else {\n <div class=\"apr-result\" [class.success]=\"RunSucceeded\" [class.failure]=\"!RunSucceeded\">\n <div class=\"apr-result-icon\">\n @if (RunSucceeded) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n </div>\n <div class=\"apr-result-text\">\n <div class=\"apr-result-title\">{{ RunSucceeded ? 'Action completed' : 'Action failed' }}</div>\n @if (ResultMessage) {\n <div class=\"apr-result-msg\">{{ ResultMessage }}</div>\n }\n </div>\n </div>\n }\n\n @if (ErrorMessage) {\n <div class=\"apr-error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> {{ ErrorMessage }}\n </div>\n }\n </div>\n\n <div class=\"apr-footer\">\n @if (RunSucceeded === null) {\n <button type=\"button\" class=\"apr-btn primary\"\n [disabled]=\"!CanRun()\"\n [style.background]=\"AccentColor\"\n [style.border-color]=\"AccentColor\"\n (click)=\"Run()\">\n @if (IsRunning) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running…\n } @else {\n <i class=\"fa-solid fa-play\"></i> Run action\n }\n </button>\n <button type=\"button\" class=\"apr-btn\" [disabled]=\"IsRunning\" (click)=\"Close()\">\n Cancel\n </button>\n } @else {\n <button type=\"button\" class=\"apr-btn primary\" (click)=\"Close()\">\n Done\n </button>\n }\n </div>\n </div>\n}\n"]}
|
|
1
|
+
{"version":3,"file":"action-pin-runner-dialog.component.js","sourceRoot":"","sources":["../../src/Home/action-pin-runner-dialog.component.ts","../../src/Home/action-pin-runner-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef, ViewEncapsulation } from '@angular/core';\nimport { GraphQLActionClient, GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { ActionParam } from '@memberjunction/actions-base';\nimport { HomeAppPinnedItem, ActionPinConfiguration } from '@memberjunction/ng-shared';\n\n/**\n * Result emitted after the action finishes (or the dialog is cancelled).\n */\nexport interface ActionPinRunResult {\n Closed: true;\n}\n\ninterface RuntimeField {\n Name: string;\n Value: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-action-pin-runner-dialog',\n templateUrl: './action-pin-runner-dialog.component.html',\n styleUrls: ['./action-pin-runner-dialog.component.css'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ActionPinRunnerDialogComponent extends BaseAngularComponent implements OnChanges {\n @Input() Visible = false;\n @Input() Pin: HomeAppPinnedItem | null = null;\n @Output() Result = new EventEmitter<ActionPinRunResult>();\n\n public RuntimeFields: RuntimeField[] = [];\n public IsRunning = false;\n public RunSucceeded: boolean | null = null;\n public ResultMessage: string | null = null;\n public ErrorMessage: string | null = null;\n\n constructor(private cdr: ChangeDetectorRef) { super(); }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['Visible'] && this.Visible && this.Pin) {\n this.initFromPin();\n }\n }\n\n private getConfig(): ActionPinConfiguration | null {\n if (!this.Pin) return null;\n return this.Pin.Configuration as unknown as ActionPinConfiguration;\n }\n\n private initFromPin(): void {\n const cfg = this.getConfig();\n this.RuntimeFields = (cfg?.runtimeParamNames ?? []).map(name => ({ Name: name, Value: '' }));\n this.IsRunning = false;\n this.RunSucceeded = null;\n this.ResultMessage = null;\n this.ErrorMessage = null;\n this.cdr.markForCheck();\n }\n\n get AccentColor(): string {\n return this.getConfig()?.accentColor ?? 'var(--mj-brand-primary)';\n }\n\n get FaIcon(): string {\n return this.Pin?.Icon ?? 'fa-solid fa-bolt';\n }\n\n get ActionName(): string {\n return this.getConfig()?.actionName ?? 'Action';\n }\n\n CanRun(): boolean {\n if (this.IsRunning) return false;\n // Runtime fields without values are allowed (action may handle missing params).\n // The action itself reports required-param errors via its result.\n return true;\n }\n\n async Run(): Promise<void> {\n const cfg = this.getConfig();\n if (!cfg || !cfg.actionId) {\n this.ErrorMessage = 'Pin is missing an actionId — cannot execute.';\n this.cdr.markForCheck();\n return;\n }\n\n this.IsRunning = true;\n this.RunSucceeded = null;\n this.ResultMessage = null;\n this.ErrorMessage = null;\n this.cdr.markForCheck();\n\n try {\n const params = this.buildActionParams(cfg);\n const provider = this.ProviderToUse as GraphQLDataProvider;\n const actionClient = new GraphQLActionClient(provider);\n const result = await actionClient.RunAction(cfg.actionId, params);\n this.RunSucceeded = result.Success;\n this.ResultMessage = result.Message ?? (result.Success ? 'Action completed.' : 'Action reported a failure.');\n } catch (err) {\n this.RunSucceeded = false;\n this.ErrorMessage = `Execution failed: ${(err as Error).message}`;\n } finally {\n this.IsRunning = false;\n this.cdr.markForCheck();\n }\n }\n\n private buildActionParams(cfg: ActionPinConfiguration): ActionParam[] {\n const params: ActionParam[] = [];\n for (const [name, value] of Object.entries(cfg.presetParams ?? {})) {\n params.push({ Name: name, Value: value, Type: 'Input' });\n }\n for (const f of this.RuntimeFields) {\n if (f.Value !== '') {\n params.push({ Name: f.Name, Value: f.Value, Type: 'Input' });\n }\n }\n return params;\n }\n\n Close(): void {\n if (this.IsRunning) return;\n this.Result.emit({ Closed: true });\n }\n}\n","@if (Visible && Pin) {\n <div class=\"apr-backdrop\" (click)=\"Close()\"></div>\n <div class=\"apr-dialog\" role=\"dialog\" aria-modal=\"true\">\n <div class=\"apr-hero\" [style.background]=\"'linear-gradient(135deg, ' + AccentColor + ' 0%, ' + AccentColor + 'cc 100%)'\">\n <div class=\"apr-hero-icon\">\n <i [class]=\"FaIcon\"></i>\n </div>\n <div class=\"apr-hero-info\">\n <div class=\"apr-hero-title\">{{ Pin.DisplayName }}</div>\n <div class=\"apr-hero-sub\">{{ ActionName }}</div>\n </div>\n <button class=\"apr-close\" (click)=\"Close()\" [disabled]=\"IsRunning\" aria-label=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"apr-body\">\n @if (RunSucceeded === null) {\n @if (RuntimeFields.length === 0) {\n <div class=\"apr-no-fields\">\n <i class=\"fa-solid fa-circle-info\"></i>\n This action runs with all parameters preset — no input needed.\n </div>\n } @else {\n <div class=\"apr-help\">Provide values for the parameters below:</div>\n <div class=\"apr-fields\">\n @for (f of RuntimeFields; track f.Name) {\n <div class=\"apr-field\">\n <label [for]=\"'rf-' + f.Name\">{{ f.Name }}</label>\n <input [id]=\"'rf-' + f.Name\"\n type=\"text\"\n class=\"mj-input\"\n [(ngModel)]=\"f.Value\"\n [disabled]=\"IsRunning\"\n [placeholder]=\"'Enter ' + f.Name\" />\n </div>\n }\n </div>\n }\n } @else {\n <div class=\"apr-result\" [class.success]=\"RunSucceeded\" [class.failure]=\"!RunSucceeded\">\n <div class=\"apr-result-icon\">\n @if (RunSucceeded) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n </div>\n <div class=\"apr-result-text\">\n <div class=\"apr-result-title\">{{ RunSucceeded ? 'Action completed' : 'Action failed' }}</div>\n @if (ResultMessage) {\n <div class=\"apr-result-msg\">{{ ResultMessage }}</div>\n }\n </div>\n </div>\n }\n\n @if (ErrorMessage) {\n <div class=\"apr-error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> {{ ErrorMessage }}\n </div>\n }\n </div>\n\n <div class=\"apr-footer\">\n @if (RunSucceeded === null) {\n <button type=\"button\" class=\"apr-btn primary\"\n [disabled]=\"!CanRun()\"\n [style.background]=\"AccentColor\"\n [style.border-color]=\"AccentColor\"\n (click)=\"Run()\">\n @if (IsRunning) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running…\n } @else {\n <i class=\"fa-solid fa-play\"></i> Run action\n }\n </button>\n <button type=\"button\" class=\"apr-btn\" [disabled]=\"IsRunning\" (click)=\"Close()\">\n Cancel\n </button>\n } @else {\n <button type=\"button\" class=\"apr-btn primary\" (click)=\"Close()\">\n Done\n </button>\n }\n </div>\n </div>\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"home-application.d.ts","sourceRoot":"","sources":["../../src/Home/home-application.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAkB,OAAO,EAAE,qBAAqB,EAAgB,MAAM,qCAAqC,CAAC;AACpI,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAiC1D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBACa,eAAgB,SAAQ,eAAe;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAK;IAE7C,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,iBAAiB,CAAgC;IACzD,OAAO,CAAC,mBAAmB,CAA8B;IAEzD;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB,CAAuB;IAEtD;;;OAGG;IACI,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAOhE;;OAEG;IACI,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAIrD;;;;OAIG;IACY,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAwBhD;;;;OAIG;IACI,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAiBhD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAuBnB;;;;;;OAMG;YACW,iBAAiB;IAkD/B;;;;OAIG;YACW,sBAAsB;IAgCpC;;OAEG;YACW,oBAAoB;IAoBlC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;;;;;;;;;OAUG;YACW,kBAAkB;IAwBhC;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAiBjB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"home-application.d.ts","sourceRoot":"","sources":["../../src/Home/home-application.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAkB,OAAO,EAAE,qBAAqB,EAAgB,MAAM,qCAAqC,CAAC;AACpI,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAiC1D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBACa,eAAgB,SAAQ,eAAe;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAK;IAE7C,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,iBAAiB,CAAgC;IACzD,OAAO,CAAC,mBAAmB,CAA8B;IAEzD;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB,CAAuB;IAEtD;;;OAGG;IACI,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAOhE;;OAEG;IACI,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAIrD;;;;OAIG;IACY,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAwBhD;;;;OAIG;IACI,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAiBhD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAuBnB;;;;;;OAMG;YACW,iBAAiB;IAkD/B;;;;OAIG;YACW,sBAAsB;IAgCpC;;OAEG;YACW,oBAAoB;IAoBlC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;;;;;;;;;OAUG;YACW,kBAAkB;IAwBhC;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAiBjB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;;OAGG;YACW,oBAAoB;CAsBnC"}
|
|
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var HomeApplication_1;
|
|
8
8
|
import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
|
|
9
9
|
import { BaseApplication } from '@memberjunction/ng-base-application';
|
|
10
|
-
import {
|
|
10
|
+
import { CompositeKey, FieldValueCollection } from '@memberjunction/core';
|
|
11
11
|
/** Storage key and category for persisting the recent orphan stack */
|
|
12
12
|
const STORAGE_KEY = 'HomeApp_RecentOrphanStack';
|
|
13
13
|
const STORAGE_CATEGORY = 'HomeApplication';
|
|
@@ -142,7 +142,7 @@ let HomeApplication = class HomeApplication extends BaseApplication {
|
|
|
142
142
|
*/
|
|
143
143
|
resolveIcon(entityName, resourceTypeName) {
|
|
144
144
|
if (entityName) {
|
|
145
|
-
const md =
|
|
145
|
+
const md = this.Provider;
|
|
146
146
|
const entityIcon = md.EntityByName(entityName)?.Icon;
|
|
147
147
|
if (entityIcon) {
|
|
148
148
|
return entityIcon;
|
|
@@ -311,7 +311,7 @@ let HomeApplication = class HomeApplication extends BaseApplication {
|
|
|
311
311
|
const compositeKey = new CompositeKey(fvCollection.KeyValuePairs);
|
|
312
312
|
// Check the cache first
|
|
313
313
|
try {
|
|
314
|
-
const cachedName = await
|
|
314
|
+
const cachedName = await this.Provider.GetCachedRecordName(entityName, compositeKey, true);
|
|
315
315
|
if (cachedName) {
|
|
316
316
|
return cachedName;
|
|
317
317
|
}
|
|
@@ -365,7 +365,7 @@ let HomeApplication = class HomeApplication extends BaseApplication {
|
|
|
365
365
|
*/
|
|
366
366
|
saveStackToStorage() {
|
|
367
367
|
try {
|
|
368
|
-
const provider =
|
|
368
|
+
const provider = this.Provider.LocalStorageProvider;
|
|
369
369
|
if (!provider) {
|
|
370
370
|
return;
|
|
371
371
|
}
|
|
@@ -380,7 +380,8 @@ let HomeApplication = class HomeApplication extends BaseApplication {
|
|
|
380
380
|
tabId: s.tabId,
|
|
381
381
|
timestamp: s.timestamp
|
|
382
382
|
}));
|
|
383
|
-
provider
|
|
383
|
+
// Native object storage — provider handles any required serialization internally.
|
|
384
|
+
provider.SetItem(STORAGE_KEY, serializable, STORAGE_CATEGORY).catch(err => {
|
|
384
385
|
console.warn('Failed to persist recent nav stack:', err);
|
|
385
386
|
});
|
|
386
387
|
}
|
|
@@ -394,16 +395,13 @@ let HomeApplication = class HomeApplication extends BaseApplication {
|
|
|
394
395
|
*/
|
|
395
396
|
async loadStackFromStorage() {
|
|
396
397
|
try {
|
|
397
|
-
const provider =
|
|
398
|
+
const provider = this.Provider.LocalStorageProvider;
|
|
398
399
|
if (!provider) {
|
|
399
400
|
return;
|
|
400
401
|
}
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
}
|
|
405
|
-
const parsed = JSON.parse(raw);
|
|
406
|
-
if (!Array.isArray(parsed)) {
|
|
402
|
+
// Native object read — IDB returns the array directly; localStorage / Redis JSON-decode internally.
|
|
403
|
+
const parsed = await provider.GetItem(STORAGE_KEY, STORAGE_CATEGORY);
|
|
404
|
+
if (!parsed || !Array.isArray(parsed)) {
|
|
407
405
|
return;
|
|
408
406
|
}
|
|
409
407
|
// Filter out stale snapshots
|