@memberjunction/ng-dashboards 5.30.1 → 5.32.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,9 +1,14 @@
|
|
|
1
1
|
import { Observable } from 'rxjs';
|
|
2
|
+
import { IMetadataProvider } from '@memberjunction/core';
|
|
2
3
|
import { DataExplorerState, RecentItem, FavoriteItem, BreadcrumbItem, DataExplorerFilter, RecentRecordAccess, FavoriteRecord, DataExplorerViewMode } from '../models/explorer-state.interface';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export declare class ExplorerStateService {
|
|
5
6
|
private state$;
|
|
6
|
-
private
|
|
7
|
+
private _provider;
|
|
8
|
+
/** Set the metadata provider this service should use. Components should call this after injection. */
|
|
9
|
+
set Provider(value: IMetadataProvider | null);
|
|
10
|
+
get Provider(): IMetadataProvider;
|
|
11
|
+
private get metadata();
|
|
7
12
|
private saveTimeout;
|
|
8
13
|
/** Current context filter (determines which settings key to use) */
|
|
9
14
|
private currentFilter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explorer-state.service.d.ts","sourceRoot":"","sources":["../../../src/DataExplorer/services/explorer-state.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,UAAU,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"explorer-state.service.d.ts","sourceRoot":"","sources":["../../../src/DataExplorer/services/explorer-state.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,17 @@ const MAX_RECENT_RECORDS = 10;
|
|
|
12
12
|
const MAX_ENTITY_CACHE_SIZE = 50; // LRU cache limit
|
|
13
13
|
export class ExplorerStateService {
|
|
14
14
|
state$ = new BehaviorSubject(DEFAULT_EXPLORER_STATE);
|
|
15
|
-
|
|
15
|
+
_provider = null;
|
|
16
|
+
/** Set the metadata provider this service should use. Components should call this after injection. */
|
|
17
|
+
set Provider(value) {
|
|
18
|
+
this._provider = value;
|
|
19
|
+
}
|
|
20
|
+
get Provider() {
|
|
21
|
+
return this._provider ?? Metadata.Provider;
|
|
22
|
+
}
|
|
23
|
+
get metadata() {
|
|
24
|
+
return this.Provider;
|
|
25
|
+
}
|
|
16
26
|
saveTimeout = null;
|
|
17
27
|
/** Current context filter (determines which settings key to use) */
|
|
18
28
|
currentFilter = null;
|
|
@@ -433,7 +443,7 @@ export class ExplorerStateService {
|
|
|
433
443
|
if (!userId)
|
|
434
444
|
return;
|
|
435
445
|
const settingKey = this.getSettingKey();
|
|
436
|
-
const md =
|
|
446
|
+
const md = this.Provider;
|
|
437
447
|
const engine = UserInfoEngine.Instance;
|
|
438
448
|
// Find existing setting from cached user settings
|
|
439
449
|
let setting = engine.UserSettings.find(s => s.Setting === settingKey);
|
|
@@ -579,7 +589,7 @@ export class ExplorerStateService {
|
|
|
579
589
|
if (!entitiesEntity)
|
|
580
590
|
return false;
|
|
581
591
|
// Create User Favorite record
|
|
582
|
-
const md =
|
|
592
|
+
const md = this.Provider;
|
|
583
593
|
const favorite = await md.GetEntityObject('MJ: User Favorites');
|
|
584
594
|
favorite.UserID = userId;
|
|
585
595
|
favorite.EntityID = entitiesEntity.ID;
|
|
@@ -611,7 +621,7 @@ export class ExplorerStateService {
|
|
|
611
621
|
if (!favorite)
|
|
612
622
|
return true; // Already not favorited
|
|
613
623
|
// Delete User Favorite record
|
|
614
|
-
const md =
|
|
624
|
+
const md = this.Provider;
|
|
615
625
|
const favoriteEntity = await md.GetEntityObject('MJ: User Favorites');
|
|
616
626
|
await favoriteEntity.Load(favorite.userFavoriteId);
|
|
617
627
|
const deleted = await favoriteEntity.Delete();
|
|
@@ -643,7 +653,7 @@ export class ExplorerStateService {
|
|
|
643
653
|
this.defaultEntityIds.clear();
|
|
644
654
|
return;
|
|
645
655
|
}
|
|
646
|
-
const rv =
|
|
656
|
+
const rv = RunView.FromMetadataProvider(this.Provider);
|
|
647
657
|
const result = await rv.RunView({
|
|
648
658
|
EntityName: 'MJ: Application Entities',
|
|
649
659
|
ExtraFilter: `ApplicationID = '${this.currentFilter.applicationId}'`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explorer-state.service.js","sourceRoot":"","sources":["../../../src/DataExplorer/services/explorer-state.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { Metadata, RunView, CompositeKey, EntityRecordNameInput } from '@memberjunction/core';\nimport { MJUserSettingEntity, MJUserFavoriteEntity, MJApplicationEntityEntity, UserInfoEngine } from '@memberjunction/core-entities';\nimport { DataExplorerState, DEFAULT_EXPLORER_STATE, RecentItem, FavoriteItem, EntityCacheEntry, BreadcrumbItem, DataExplorerFilter, FavoriteEntity, RecentRecordAccess, FavoriteRecord, DataExplorerViewMode } from '../models/explorer-state.interface';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nconst BASE_SETTING_KEY = 'DataExplorer.State';\nconst MAX_RECENT_ITEMS = 20;\nconst MAX_RECENT_ENTITIES = 10;\nconst MAX_RECENT_RECORDS = 10;\nconst MAX_ENTITY_CACHE_SIZE = 50; // LRU cache limit\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ExplorerStateService {\n private state$ = new BehaviorSubject<DataExplorerState>(DEFAULT_EXPLORER_STATE);\n private metadata = new Metadata();\n private saveTimeout: ReturnType<typeof setTimeout> | null = null;\n\n /** Current context filter (determines which settings key to use) */\n private currentFilter: DataExplorerFilter | null = null;\n\n /** Computed breadcrumbs based on current state */\n private breadcrumbs$ = new BehaviorSubject<BreadcrumbItem[]>([]);\n\n /** Recent records loaded from User Record Logs */\n private recentRecords$ = new BehaviorSubject<RecentRecordAccess[]>([]);\n\n /** Favorite records loaded from User Favorites (non-entity favorites) */\n private favoriteRecords$ = new BehaviorSubject<FavoriteRecord[]>([]);\n\n /** Application entities with DefaultForNewUser info (loaded once per context) */\n private applicationEntities: MJApplicationEntityEntity[] = [];\n\n /** Set of entity IDs that have DefaultForNewUser=true */\n private defaultEntityIds = new Set<string>();\n\n constructor() {\n // Don't load state in constructor - wait for setContext to be called\n }\n\n /**\n * Set the context filter and load context-specific state.\n * Call this before using the service to ensure proper context isolation.\n */\n async setContext(filter: DataExplorerFilter | null): Promise<void> {\n this.currentFilter = filter;\n await this.loadState();\n // Load application entities first (needed for filtering recent/favorite records)\n await this.loadApplicationEntities();\n // Then load the rest in parallel\n await Promise.all([\n this.loadFavoriteEntities(),\n this.loadFavoriteRecords(),\n this.loadRecentRecords()\n ]);\n this.updateBreadcrumbs();\n }\n\n /**\n * Get the storage key based on current context.\n * Uses application ID if available for context-specific storage.\n */\n private getSettingKey(): string {\n if (this.currentFilter?.applicationId) {\n return `${BASE_SETTING_KEY}.${this.currentFilter.applicationId}`;\n }\n return BASE_SETTING_KEY;\n }\n\n /**\n * Get observable of current state\n */\n get State(): Observable<DataExplorerState> {\n return this.state$.asObservable();\n }\n\n /**\n * Get current state value\n */\n get CurrentState(): DataExplorerState {\n return this.state$.value;\n }\n\n /**\n * Observable of current breadcrumbs\n */\n get Breadcrumbs(): Observable<BreadcrumbItem[]> {\n return this.breadcrumbs$.asObservable();\n }\n\n /**\n * Get current breadcrumbs value\n */\n get CurrentBreadcrumbs(): BreadcrumbItem[] {\n return this.breadcrumbs$.value;\n }\n\n /**\n * Get the current context filter\n */\n get CurrentFilter(): DataExplorerFilter | null {\n return this.currentFilter;\n }\n\n /**\n * Observable of recent records (from User Record Logs)\n */\n get RecentRecords(): Observable<RecentRecordAccess[]> {\n return this.recentRecords$.asObservable();\n }\n\n /**\n * Get current recent records value\n */\n get CurrentRecentRecords(): RecentRecordAccess[] {\n return this.recentRecords$.value;\n }\n\n /**\n * Observable of favorite records (from User Favorites, non-entity)\n */\n get FavoriteRecords(): Observable<FavoriteRecord[]> {\n return this.favoriteRecords$.asObservable();\n }\n\n /**\n * Get current favorite records value\n */\n get CurrentFavoriteRecords(): FavoriteRecord[] {\n return this.favoriteRecords$.value;\n }\n\n /**\n * Get the set of entity IDs with DefaultForNewUser=true\n */\n get DefaultEntityIds(): Set<string> {\n return this.defaultEntityIds;\n }\n\n /**\n * Update state partially\n */\n updateState(partial: Partial<DataExplorerState>): void {\n const newState = { ...this.state$.value, ...partial };\n this.state$.next(newState);\n this.updateBreadcrumbs();\n this.debouncedSave();\n }\n\n /**\n * Set selected entity\n * Caches current entity's filter before switching, restores new entity's cached filter\n */\n selectEntity(entityName: string | null): void {\n const currentState = this.state$.value;\n const entityCache = { ...currentState.entityCache };\n\n // Cache current entity's filter before switching (if we have a current entity)\n if (currentState.selectedEntityName && currentState.smartFilterPrompt) {\n entityCache[currentState.selectedEntityName] = {\n filterText: currentState.smartFilterPrompt,\n lastAccessed: Date.now()\n };\n }\n\n // Restore filter for new entity (if cached) or clear it\n let restoredFilter = '';\n if (entityName && entityCache[entityName]) {\n restoredFilter = entityCache[entityName].filterText;\n entityCache[entityName].lastAccessed = Date.now();\n }\n\n // Evict old entries if cache is too large (LRU)\n this.evictOldCacheEntries(entityCache);\n\n this.updateState({\n selectedEntityName: entityName,\n selectedViewId: null, // Reset view when entity changes\n smartFilterPrompt: restoredFilter, // Restore cached filter or empty\n selectedRecordId: null,\n detailPanelOpen: false,\n entityCache\n });\n }\n\n /**\n * Evict oldest cache entries if over limit (LRU eviction)\n */\n private evictOldCacheEntries(cache: Record<string, EntityCacheEntry>): void {\n const entries = Object.entries(cache);\n if (entries.length <= MAX_ENTITY_CACHE_SIZE) return;\n\n // Sort by lastAccessed (oldest first) and remove excess\n entries.sort((a, b) => a[1].lastAccessed - b[1].lastAccessed);\n const toRemove = entries.length - MAX_ENTITY_CACHE_SIZE;\n for (let i = 0; i < toRemove; i++) {\n delete cache[entries[i][0]];\n }\n }\n\n /**\n * Set selected view\n */\n selectView(viewId: string | null): void {\n this.updateState({\n selectedViewId: viewId,\n viewModified: false // Reset modified state when selecting a different view\n });\n }\n\n /**\n * Mark the current view as modified (has unsaved changes)\n */\n setViewModified(modified: boolean): void {\n this.updateState({ viewModified: modified });\n }\n\n /**\n * Toggle the view configuration panel\n */\n toggleViewConfigPanel(): void {\n this.updateState({ viewConfigPanelOpen: !this.state$.value.viewConfigPanelOpen });\n }\n\n /**\n * Open the view configuration panel\n */\n openViewConfigPanel(): void {\n this.updateState({ viewConfigPanelOpen: true });\n }\n\n /**\n * Close the view configuration panel\n */\n closeViewConfigPanel(): void {\n this.updateState({ viewConfigPanelOpen: false });\n }\n\n /**\n * Set view mode\n */\n setViewMode(mode: DataExplorerViewMode): void {\n this.updateState({ viewMode: mode });\n }\n\n /**\n * Set smart filter prompt\n * Also updates the entity cache for the current entity\n */\n setSmartFilterPrompt(prompt: string): void {\n const currentState = this.state$.value;\n const entityCache = { ...currentState.entityCache };\n\n // Update cache for current entity\n if (currentState.selectedEntityName) {\n if (prompt) {\n entityCache[currentState.selectedEntityName] = {\n filterText: prompt,\n lastAccessed: Date.now()\n };\n } else {\n // Clear cache entry if filter is empty\n delete entityCache[currentState.selectedEntityName];\n }\n }\n\n this.updateState({ smartFilterPrompt: prompt, entityCache });\n }\n\n /**\n * Select a record and open detail panel\n * @param recordId The composite key string for the record\n * @param recordName Optional display name for the record (for breadcrumbs)\n */\n selectRecord(recordId: string | null, recordName?: string): void {\n this.updateState({\n selectedRecordId: recordId,\n selectedRecordName: recordName || null,\n detailPanelOpen: recordId !== null\n });\n }\n\n /**\n * Close detail panel\n */\n closeDetailPanel(): void {\n this.updateState({\n detailPanelOpen: false,\n selectedRecordId: null,\n selectedRecordName: null\n });\n }\n\n /**\n * Toggle navigation panel collapsed state\n */\n toggleNavigationPanel(): void {\n this.updateState({\n navigationPanelCollapsed: !this.state$.value.navigationPanelCollapsed\n });\n }\n\n /**\n * Expand navigation panel and ensure a specific section is expanded\n */\n expandAndFocusSection(section: 'favorites' | 'recent' | 'entities'): void {\n const updates: Partial<DataExplorerState> = {\n navigationPanelCollapsed: false\n };\n\n // Ensure the target section is expanded\n switch (section) {\n case 'favorites':\n updates.favoritesSectionExpanded = true;\n break;\n case 'recent':\n updates.recentSectionExpanded = true;\n break;\n case 'entities':\n updates.entitiesSectionExpanded = true;\n break;\n }\n\n this.updateState(updates);\n }\n\n /**\n * Add item to recent history\n */\n addRecentItem(item: Omit<RecentItem, 'timestamp'>): void {\n const recentItems = [...this.state$.value.recentItems];\n\n // Remove existing entry if present (match by entity and composite key)\n const existingIndex = recentItems.findIndex(\n r => r.entityName === item.entityName && r.compositeKeyString === item.compositeKeyString\n );\n if (existingIndex >= 0) {\n recentItems.splice(existingIndex, 1);\n }\n\n // Add to front with timestamp\n recentItems.unshift({\n ...item,\n timestamp: new Date()\n });\n\n // Trim to max size\n if (recentItems.length > MAX_RECENT_ITEMS) {\n recentItems.length = MAX_RECENT_ITEMS;\n }\n\n this.updateState({ recentItems });\n }\n\n /**\n * Add item to favorites\n */\n addFavorite(item: FavoriteItem): void {\n const favorites = [...this.state$.value.favorites];\n\n // Check if already exists\n const exists = favorites.some(f =>\n f.type === item.type &&\n f.entityName === item.entityName &&\n f.compositeKeyString === item.compositeKeyString &&\n f.viewId === item.viewId\n );\n\n if (!exists) {\n favorites.push(item);\n this.updateState({ favorites });\n }\n }\n\n /**\n * Remove item from favorites\n */\n removeFavorite(item: FavoriteItem): void {\n const favorites = this.state$.value.favorites.filter(f =>\n !(f.type === item.type &&\n f.entityName === item.entityName &&\n f.compositeKeyString === item.compositeKeyString &&\n f.viewId === item.viewId)\n );\n this.updateState({ favorites });\n }\n\n /**\n * Toggle section expanded state\n */\n toggleSection(section: 'favorites' | 'recent' | 'entities' | 'views'): void {\n const key = `${section}SectionExpanded` as keyof DataExplorerState;\n this.updateState({ [key]: !this.state$.value[key] } as Partial<DataExplorerState>);\n }\n\n /**\n * Load state from UserSetting using UserInfoEngine for cached access\n */\n private async loadState(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n const settingKey = this.getSettingKey();\n const engine = UserInfoEngine.Instance;\n\n // Find the setting from cached user settings\n const setting = engine.UserSettings.find(s => s.Setting === settingKey);\n\n if (setting?.Value) {\n const savedState = JSON.parse(setting.Value) as Partial<DataExplorerState>;\n // Merge with defaults to handle new properties\n this.state$.next({ ...DEFAULT_EXPLORER_STATE, ...savedState });\n } else {\n // No saved state, use defaults\n this.state$.next({ ...DEFAULT_EXPLORER_STATE });\n }\n } catch (error) {\n console.warn('Failed to load Data Explorer state:', error);\n this.state$.next({ ...DEFAULT_EXPLORER_STATE });\n }\n }\n\n /**\n * Update breadcrumbs based on current state and filter\n */\n private updateBreadcrumbs(): void {\n const breadcrumbs: BreadcrumbItem[] = [];\n const state = this.state$.value;\n\n // Always add a root/home breadcrumb - use application name if available, otherwise \"All\"\n const rootLabel = this.currentFilter?.applicationName || 'All';\n breadcrumbs.push({\n label: rootLabel,\n type: 'application',\n icon: 'fa-solid fa-th-large'\n });\n\n // Add entity breadcrumb if selected\n if (state.selectedEntityName) {\n const entityInfo = this.metadata.Entities.find(e => e.Name === state.selectedEntityName);\n breadcrumbs.push({\n label: state.selectedEntityName,\n type: 'entity',\n entityName: state.selectedEntityName,\n icon: entityInfo?.Icon ? this.formatEntityIcon(entityInfo.Icon) : 'fa-solid fa-table'\n });\n }\n\n // Add record breadcrumb if selected\n if (state.selectedRecordId && state.selectedRecordName) {\n breadcrumbs.push({\n label: state.selectedRecordName,\n type: 'record',\n entityName: state.selectedEntityName || undefined,\n compositeKeyString: state.selectedRecordId,\n icon: 'fa-solid fa-file-alt'\n });\n }\n\n this.breadcrumbs$.next(breadcrumbs);\n }\n\n /**\n * Format entity icon to ensure proper Font Awesome class format\n */\n private formatEntityIcon(icon: string): string {\n if (!icon) return 'fa-solid fa-table';\n if (icon.startsWith('fa-') || icon.startsWith('fa ')) {\n if (icon.startsWith('fa-solid') || icon.startsWith('fa-regular') ||\n icon.startsWith('fa-light') || icon.startsWith('fa-brands') ||\n icon.startsWith('fa ')) {\n return icon;\n }\n return `fa-solid ${icon}`;\n }\n return `fa-solid fa-${icon}`;\n }\n\n /**\n * Debounced save to avoid too many writes\n */\n private debouncedSave(): void {\n if (this.saveTimeout) {\n clearTimeout(this.saveTimeout);\n }\n this.saveTimeout = setTimeout(() => {\n this.saveState();\n }, 1000);\n }\n\n /**\n * Save state to UserSetting using UserInfoEngine for cached lookup\n */\n private async saveState(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n const settingKey = this.getSettingKey();\n const md = new Metadata();\n const engine = UserInfoEngine.Instance;\n\n // Find existing setting from cached user settings\n let setting = engine.UserSettings.find(s => s.Setting === settingKey);\n\n if (!setting) {\n // Create new setting if not found\n setting = await md.GetEntityObject<MJUserSettingEntity>('MJ: User Settings');\n setting.UserID = userId;\n setting.Setting = settingKey;\n }\n\n setting.Value = JSON.stringify(this.state$.value);\n await setting.Save();\n } catch (error) {\n console.warn('Failed to save Data Explorer state:', error);\n }\n }\n\n /**\n * Navigate to a specific breadcrumb level.\n * Clears any selection deeper than the clicked breadcrumb.\n */\n navigateToBreadcrumb(breadcrumb: BreadcrumbItem): void {\n switch (breadcrumb.type) {\n case 'application':\n // Clear entity and record selection (show home view)\n this.updateState({\n selectedEntityName: null,\n selectedViewId: null,\n selectedRecordId: null,\n selectedRecordName: null,\n smartFilterPrompt: '',\n detailPanelOpen: false\n });\n break;\n\n case 'entity':\n // Keep entity selected, clear record selection\n if (breadcrumb.entityName) {\n this.updateState({\n selectedRecordId: null,\n selectedRecordName: null,\n detailPanelOpen: false\n });\n }\n break;\n\n case 'record':\n // Already at record level, do nothing\n break;\n }\n }\n\n // ========================================\n // HOME SCREEN ENTITY MANAGEMENT\n // ========================================\n\n /**\n * Toggle between showing all entities or just common (DefaultForNewUser) entities\n */\n toggleShowAllEntities(): void {\n this.updateState({ showAllEntities: !this.state$.value.showAllEntities });\n }\n\n // ========================================\n // Concept D: Application Groups + Quick Access\n // ========================================\n\n /**\n * Toggle the quick access (right) panel open/closed\n */\n toggleQuickAccessPanel(): void {\n this.updateState({ quickAccessPanelOpen: !this.state$.value.quickAccessPanelOpen });\n }\n\n /**\n * Toggle a quick access section's expanded state\n */\n toggleQuickAccessSection(sectionId: string): void {\n const sections = { ...this.state$.value.quickAccessSections };\n sections[sectionId] = sections[sectionId] === false; // default to expanded (true)\n this.updateState({ quickAccessSections: sections });\n }\n\n /**\n * Toggle an application group's expanded/collapsed state\n */\n toggleAppGroupExpanded(appId: string): void {\n const expanded = [...this.state$.value.expandedAppGroups];\n const index = expanded.indexOf(appId);\n if (index >= 0) {\n expanded.splice(index, 1);\n } else {\n expanded.push(appId);\n }\n this.updateState({ expandedAppGroups: expanded });\n }\n\n /**\n * Set the home view mode (all vs favorites)\n */\n setHomeViewMode(mode: 'all' | 'favorites'): void {\n this.updateState({ homeViewMode: mode });\n }\n\n /**\n * Track entity access - called when user navigates to an entity\n */\n trackEntityAccess(entityName: string, entityId: string): void {\n const recentEntityAccesses = [...this.state$.value.recentEntityAccesses];\n\n // Find existing entry\n const existingIndex = recentEntityAccesses.findIndex(r => r.entityId === entityId);\n\n if (existingIndex >= 0) {\n // Update existing entry\n recentEntityAccesses[existingIndex] = {\n ...recentEntityAccesses[existingIndex],\n lastAccessed: new Date(),\n accessCount: recentEntityAccesses[existingIndex].accessCount + 1\n };\n // Move to front\n const [item] = recentEntityAccesses.splice(existingIndex, 1);\n recentEntityAccesses.unshift(item);\n } else {\n // Add new entry at front\n recentEntityAccesses.unshift({\n entityName,\n entityId,\n lastAccessed: new Date(),\n accessCount: 1\n });\n }\n\n // Trim to max size\n if (recentEntityAccesses.length > MAX_RECENT_ENTITIES) {\n recentEntityAccesses.length = MAX_RECENT_ENTITIES;\n }\n\n this.updateState({ recentEntityAccesses });\n }\n\n /**\n * Add entity to favorites using User Favorites entity\n */\n async addEntityToFavorites(entityName: string, entityId: string): Promise<boolean> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return false;\n\n // Check if already favorited\n const favorites = this.state$.value.favoriteEntities;\n if (favorites.some(f => f.entityId === entityId)) {\n return true; // Already favorited\n }\n\n // Get the Entities entity ID for favoriting\n const entitiesEntity = this.metadata.Entities.find(e => e.Name === 'MJ: Entities');\n if (!entitiesEntity) return false;\n\n // Create User Favorite record\n const md = new Metadata();\n const favorite = await md.GetEntityObject<MJUserFavoriteEntity>('MJ: User Favorites');\n favorite.UserID = userId;\n favorite.EntityID = entitiesEntity.ID;\n favorite.RecordID = entityId;\n\n const saved = await favorite.Save();\n if (saved) {\n // Update local state\n const favoriteEntities = [...favorites, {\n userFavoriteId: favorite.ID,\n entityName,\n entityId\n }];\n this.updateState({ favoriteEntities });\n }\n return saved;\n } catch (error) {\n console.warn('Failed to add entity to favorites:', error);\n return false;\n }\n }\n\n /**\n * Remove entity from favorites\n */\n async removeEntityFromFavorites(entityId: string): Promise<boolean> {\n try {\n const favorites = this.state$.value.favoriteEntities;\n const favorite = favorites.find(f => f.entityId === entityId);\n if (!favorite) return true; // Already not favorited\n\n // Delete User Favorite record\n const md = new Metadata();\n const favoriteEntity = await md.GetEntityObject<MJUserFavoriteEntity>('MJ: User Favorites');\n await favoriteEntity.Load(favorite.userFavoriteId);\n const deleted = await favoriteEntity.Delete();\n\n if (deleted) {\n // Update local state\n const favoriteEntities = favorites.filter(f => f.entityId !== entityId);\n this.updateState({ favoriteEntities });\n }\n return deleted;\n } catch (error) {\n console.warn('Failed to remove entity from favorites:', error);\n return false;\n }\n }\n\n /**\n * Check if an entity is favorited\n */\n isEntityFavorited(entityId: string): boolean {\n return this.state$.value.favoriteEntities.some(f => f.entityId === entityId);\n }\n\n /**\n * Load application entities with DefaultForNewUser information\n */\n private async loadApplicationEntities(): Promise<void> {\n try {\n if (!this.currentFilter?.applicationId) {\n this.applicationEntities = [];\n this.defaultEntityIds.clear();\n return;\n }\n\n const rv = new RunView();\n const result = await rv.RunView<MJApplicationEntityEntity>({\n EntityName: 'MJ: Application Entities',\n ExtraFilter: `ApplicationID = '${this.currentFilter.applicationId}'`,\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n this.applicationEntities = result.Results;\n this.defaultEntityIds.clear();\n for (const appEntity of result.Results) {\n if (appEntity.DefaultForNewUser) {\n this.defaultEntityIds.add(appEntity.EntityID);\n }\n }\n }\n } catch (error) {\n console.warn('Failed to load application entities:', error);\n }\n }\n\n /**\n * Load favorite entities from User Favorites using UserInfoEngine\n */\n private async loadFavoriteEntities(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Get the Entities entity to filter favorites\n const entitiesEntity = this.metadata.Entities.find(e => e.Name === 'MJ: Entities');\n if (!entitiesEntity) return;\n\n // Use UserInfoEngine for cached access to user favorites\n const engine = UserInfoEngine.Instance;\n\n // Filter to only entity favorites (where EntityID is the Entities entity)\n const entityFavorites = engine.UserFavorites.filter(f => UUIDsEqual(f.EntityID, entitiesEntity.ID));\n\n const favoriteEntities: FavoriteEntity[] = [];\n for (const fav of entityFavorites) {\n // Look up entity name from RecordID (which is the Entity.ID)\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, fav.RecordID));\n if (entity) {\n favoriteEntities.push({\n userFavoriteId: fav.ID,\n entityName: entity.Name,\n entityId: fav.RecordID\n });\n }\n }\n this.updateState({ favoriteEntities });\n } catch (error) {\n console.warn('Failed to load favorite entities:', error);\n }\n }\n\n /**\n * Load recent records from User Record Logs with batch record name lookup using UserInfoEngine\n */\n private async loadRecentRecords(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Use UserInfoEngine for cached access to user record logs\n const engine = UserInfoEngine.Instance;\n\n // Get recent records, limited to MAX_RECENT_RECORDS\n const userRecordLogs = engine.UserRecordLogs.slice(0, MAX_RECENT_RECORDS);\n\n const recentRecords: RecentRecordAccess[] = [];\n const recordNameInputs: EntityRecordNameInput[] = [];\n const recordIndexMap: Map<string, number> = new Map(); // Map composite key to array index\n\n for (const log of userRecordLogs) {\n // Look up entity name from EntityID\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, log.EntityID));\n if (entity) {\n // Filter by application context if applicable\n if (this.currentFilter?.applicationId && !this.applicationEntities.some(ae => UUIDsEqual(ae.EntityID, log.EntityID))) {\n continue; // Skip records from entities not in this application\n }\n\n const recordAccess: RecentRecordAccess = {\n entityName: entity.Name,\n entityId: log.EntityID,\n recordId: log.RecordID,\n latestAt: log.LatestAt,\n totalCount: log.TotalCount\n };\n const index = recentRecords.length;\n recentRecords.push(recordAccess);\n\n // Build composite key for batch name lookup\n const compositeKey = this.buildCompositeKeyForRecord(entity.Name, log.RecordID);\n if (compositeKey) {\n recordNameInputs.push({ EntityName: entity.Name, CompositeKey: compositeKey });\n // Use the canonical concatenated string as the map key for consistent matching\n recordIndexMap.set(`${entity.Name}||${compositeKey.ToConcatenatedString()}`, index);\n }\n }\n }\n\n // Batch fetch record names\n if (recordNameInputs.length > 0) {\n try {\n const nameResults = await this.metadata.GetEntityRecordNames(recordNameInputs);\n for (const nameResult of nameResults) {\n if (nameResult.Success && nameResult.RecordName) {\n const key = `${nameResult.EntityName}||${nameResult.CompositeKey.ToConcatenatedString()}`;\n const index = recordIndexMap.get(key);\n if (index !== undefined) {\n recentRecords[index].recordName = nameResult.RecordName;\n }\n }\n }\n } catch (nameError) {\n console.warn('Failed to load record names:', nameError);\n // Continue without names - they'll show record IDs\n }\n }\n\n this.recentRecords$.next(recentRecords);\n } catch (error) {\n console.warn('Failed to load recent records:', error);\n }\n }\n\n /**\n * Build a CompositeKey for a record. RecordID may be stored as either:\n * - Concatenated format: \"FieldName|Value\" or \"Field1|Val1||Field2|Val2\"\n * - Plain value: just the raw value (e.g. a GUID)\n * Detects the format and constructs the key accordingly.\n */\n private buildCompositeKeyForRecord(entityName: string, recordId: string): CompositeKey | null {\n if (!recordId) return null;\n\n // If recordId contains '|', it's in concatenated format\n if (recordId.includes('|')) {\n try {\n const compositeKey = new CompositeKey();\n compositeKey.LoadFromConcatenatedString(recordId);\n if (compositeKey.KeyValuePairs.length > 0) return compositeKey;\n } catch {\n // Fall through to entity-based lookup\n }\n }\n\n // Plain value — look up entity primary key field(s) to construct the key\n const entityInfo = this.metadata.Entities.find(e => e.Name === entityName);\n if (!entityInfo) return null;\n\n const pkField = entityInfo.FirstPrimaryKey;\n if (!pkField) return null;\n\n const compositeKey = new CompositeKey();\n compositeKey.KeyValuePairs = [{ FieldName: pkField.Name, Value: recordId }];\n return compositeKey;\n }\n\n /**\n * Refresh recent records (call after navigating to a record)\n */\n async refreshRecentRecords(): Promise<void> {\n await this.loadRecentRecords();\n }\n\n /**\n * Add or update a recent record locally (without DB refresh).\n * Call this when a record is selected to provide instant UI feedback.\n * The DB write happens separately via RecentAccessService.logAccess().\n *\n * @param entityName The entity name\n * @param entityId The entity ID\n * @param recordId The record ID (primary key value)\n * @param recordName Optional display name for the record\n */\n addLocalRecentRecord(entityName: string, entityId: string, recordId: string, recordName?: string): void {\n // Filter by application context if applicable\n if (this.currentFilter?.applicationId && !this.applicationEntities.some(ae => UUIDsEqual(ae.EntityID, entityId))) {\n return; // Don't add records from entities not in this application\n }\n\n const currentRecords = [...this.recentRecords$.value];\n\n // Find existing entry\n const existingIndex = currentRecords.findIndex(\n r => r.entityId === entityId && r.recordId === recordId\n );\n\n const newRecord: RecentRecordAccess = {\n entityName,\n entityId,\n recordId,\n recordName,\n latestAt: new Date(),\n totalCount: existingIndex >= 0 ? currentRecords[existingIndex].totalCount + 1 : 1\n };\n\n if (existingIndex >= 0) {\n // Remove existing entry (will be re-added at front)\n currentRecords.splice(existingIndex, 1);\n }\n\n // Add to front\n currentRecords.unshift(newRecord);\n\n // Trim to max size\n if (currentRecords.length > MAX_RECENT_RECORDS) {\n currentRecords.length = MAX_RECENT_RECORDS;\n }\n\n this.recentRecords$.next(currentRecords);\n }\n\n /**\n * Load favorite records from User Favorites (non-entity favorites) with batch record name lookup using UserInfoEngine.\n * Filters to only include records from entities in the current application context.\n */\n private async loadFavoriteRecords(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Get the Entities entity to exclude entity favorites\n const entitiesEntity = this.metadata.Entities.find(e => e.Name === 'MJ: Entities');\n const entitiesEntityId = entitiesEntity?.ID || '';\n\n // Use UserInfoEngine for cached access to user favorites\n const engine = UserInfoEngine.Instance;\n\n // Filter to non-entity favorites (exclude favorites where EntityID is the Entities entity)\n const nonEntityFavorites = engine.UserFavorites.filter(f => !UUIDsEqual(f.EntityID, entitiesEntityId));\n\n const favoriteRecords: FavoriteRecord[] = [];\n const recordNameInputs: EntityRecordNameInput[] = [];\n const recordIndexMap: Map<string, number> = new Map();\n\n for (const fav of nonEntityFavorites) {\n // Look up entity info from the EntityID\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, fav.EntityID));\n if (entity) {\n // Filter by application context if applicable\n if (this.currentFilter?.applicationId && !this.applicationEntities.some(ae => UUIDsEqual(ae.EntityID, fav.EntityID))) {\n continue; // Skip records from entities not in this application\n }\n\n const favoriteRecord: FavoriteRecord = {\n userFavoriteId: fav.ID,\n entityName: entity.Name,\n entityId: fav.EntityID,\n recordId: fav.RecordID\n };\n const index = favoriteRecords.length;\n favoriteRecords.push(favoriteRecord);\n\n // Build composite key for batch name lookup\n const compositeKey = this.buildCompositeKeyForRecord(entity.Name, fav.RecordID);\n if (compositeKey) {\n recordNameInputs.push({ EntityName: entity.Name, CompositeKey: compositeKey });\n // Use the canonical concatenated string as the map key for consistent matching\n recordIndexMap.set(`${entity.Name}||${compositeKey.ToConcatenatedString()}`, index);\n }\n }\n }\n\n // Batch fetch record names\n if (recordNameInputs.length > 0) {\n try {\n const nameResults = await this.metadata.GetEntityRecordNames(recordNameInputs);\n for (const nameResult of nameResults) {\n if (nameResult.Success && nameResult.RecordName) {\n const key = `${nameResult.EntityName}||${nameResult.CompositeKey.ToConcatenatedString()}`;\n const index = recordIndexMap.get(key);\n if (index !== undefined) {\n favoriteRecords[index].recordName = nameResult.RecordName;\n }\n }\n }\n } catch (nameError) {\n console.warn('Failed to load record names for favorites:', nameError);\n // Continue without names - they'll show record IDs\n }\n }\n\n this.favoriteRecords$.next(favoriteRecords);\n this.updateState({ favoriteRecords });\n } catch (error) {\n console.warn('Failed to load favorite records:', error);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"explorer-state.service.js","sourceRoot":"","sources":["../../../src/DataExplorer/services/explorer-state.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { Metadata, RunView, CompositeKey, EntityRecordNameInput, IMetadataProvider } from '@memberjunction/core';\nimport { MJUserSettingEntity, MJUserFavoriteEntity, MJApplicationEntityEntity, UserInfoEngine } from '@memberjunction/core-entities';\nimport { DataExplorerState, DEFAULT_EXPLORER_STATE, RecentItem, FavoriteItem, EntityCacheEntry, BreadcrumbItem, DataExplorerFilter, FavoriteEntity, RecentRecordAccess, FavoriteRecord, DataExplorerViewMode } from '../models/explorer-state.interface';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nconst BASE_SETTING_KEY = 'DataExplorer.State';\nconst MAX_RECENT_ITEMS = 20;\nconst MAX_RECENT_ENTITIES = 10;\nconst MAX_RECENT_RECORDS = 10;\nconst MAX_ENTITY_CACHE_SIZE = 50; // LRU cache limit\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ExplorerStateService {\n private state$ = new BehaviorSubject<DataExplorerState>(DEFAULT_EXPLORER_STATE);\n private _provider: IMetadataProvider | null = null;\n /** Set the metadata provider this service should use. Components should call this after injection. */\n public set Provider(value: IMetadataProvider | null) {\n this._provider = value;\n }\n public get Provider(): IMetadataProvider {\n return this._provider ?? Metadata.Provider;\n }\n private get metadata(): IMetadataProvider {\n return this.Provider;\n }\n private saveTimeout: ReturnType<typeof setTimeout> | null = null;\n\n /** Current context filter (determines which settings key to use) */\n private currentFilter: DataExplorerFilter | null = null;\n\n /** Computed breadcrumbs based on current state */\n private breadcrumbs$ = new BehaviorSubject<BreadcrumbItem[]>([]);\n\n /** Recent records loaded from User Record Logs */\n private recentRecords$ = new BehaviorSubject<RecentRecordAccess[]>([]);\n\n /** Favorite records loaded from User Favorites (non-entity favorites) */\n private favoriteRecords$ = new BehaviorSubject<FavoriteRecord[]>([]);\n\n /** Application entities with DefaultForNewUser info (loaded once per context) */\n private applicationEntities: MJApplicationEntityEntity[] = [];\n\n /** Set of entity IDs that have DefaultForNewUser=true */\n private defaultEntityIds = new Set<string>();\n\n constructor() {\n // Don't load state in constructor - wait for setContext to be called\n }\n\n /**\n * Set the context filter and load context-specific state.\n * Call this before using the service to ensure proper context isolation.\n */\n async setContext(filter: DataExplorerFilter | null): Promise<void> {\n this.currentFilter = filter;\n await this.loadState();\n // Load application entities first (needed for filtering recent/favorite records)\n await this.loadApplicationEntities();\n // Then load the rest in parallel\n await Promise.all([\n this.loadFavoriteEntities(),\n this.loadFavoriteRecords(),\n this.loadRecentRecords()\n ]);\n this.updateBreadcrumbs();\n }\n\n /**\n * Get the storage key based on current context.\n * Uses application ID if available for context-specific storage.\n */\n private getSettingKey(): string {\n if (this.currentFilter?.applicationId) {\n return `${BASE_SETTING_KEY}.${this.currentFilter.applicationId}`;\n }\n return BASE_SETTING_KEY;\n }\n\n /**\n * Get observable of current state\n */\n get State(): Observable<DataExplorerState> {\n return this.state$.asObservable();\n }\n\n /**\n * Get current state value\n */\n get CurrentState(): DataExplorerState {\n return this.state$.value;\n }\n\n /**\n * Observable of current breadcrumbs\n */\n get Breadcrumbs(): Observable<BreadcrumbItem[]> {\n return this.breadcrumbs$.asObservable();\n }\n\n /**\n * Get current breadcrumbs value\n */\n get CurrentBreadcrumbs(): BreadcrumbItem[] {\n return this.breadcrumbs$.value;\n }\n\n /**\n * Get the current context filter\n */\n get CurrentFilter(): DataExplorerFilter | null {\n return this.currentFilter;\n }\n\n /**\n * Observable of recent records (from User Record Logs)\n */\n get RecentRecords(): Observable<RecentRecordAccess[]> {\n return this.recentRecords$.asObservable();\n }\n\n /**\n * Get current recent records value\n */\n get CurrentRecentRecords(): RecentRecordAccess[] {\n return this.recentRecords$.value;\n }\n\n /**\n * Observable of favorite records (from User Favorites, non-entity)\n */\n get FavoriteRecords(): Observable<FavoriteRecord[]> {\n return this.favoriteRecords$.asObservable();\n }\n\n /**\n * Get current favorite records value\n */\n get CurrentFavoriteRecords(): FavoriteRecord[] {\n return this.favoriteRecords$.value;\n }\n\n /**\n * Get the set of entity IDs with DefaultForNewUser=true\n */\n get DefaultEntityIds(): Set<string> {\n return this.defaultEntityIds;\n }\n\n /**\n * Update state partially\n */\n updateState(partial: Partial<DataExplorerState>): void {\n const newState = { ...this.state$.value, ...partial };\n this.state$.next(newState);\n this.updateBreadcrumbs();\n this.debouncedSave();\n }\n\n /**\n * Set selected entity\n * Caches current entity's filter before switching, restores new entity's cached filter\n */\n selectEntity(entityName: string | null): void {\n const currentState = this.state$.value;\n const entityCache = { ...currentState.entityCache };\n\n // Cache current entity's filter before switching (if we have a current entity)\n if (currentState.selectedEntityName && currentState.smartFilterPrompt) {\n entityCache[currentState.selectedEntityName] = {\n filterText: currentState.smartFilterPrompt,\n lastAccessed: Date.now()\n };\n }\n\n // Restore filter for new entity (if cached) or clear it\n let restoredFilter = '';\n if (entityName && entityCache[entityName]) {\n restoredFilter = entityCache[entityName].filterText;\n entityCache[entityName].lastAccessed = Date.now();\n }\n\n // Evict old entries if cache is too large (LRU)\n this.evictOldCacheEntries(entityCache);\n\n this.updateState({\n selectedEntityName: entityName,\n selectedViewId: null, // Reset view when entity changes\n smartFilterPrompt: restoredFilter, // Restore cached filter or empty\n selectedRecordId: null,\n detailPanelOpen: false,\n entityCache\n });\n }\n\n /**\n * Evict oldest cache entries if over limit (LRU eviction)\n */\n private evictOldCacheEntries(cache: Record<string, EntityCacheEntry>): void {\n const entries = Object.entries(cache);\n if (entries.length <= MAX_ENTITY_CACHE_SIZE) return;\n\n // Sort by lastAccessed (oldest first) and remove excess\n entries.sort((a, b) => a[1].lastAccessed - b[1].lastAccessed);\n const toRemove = entries.length - MAX_ENTITY_CACHE_SIZE;\n for (let i = 0; i < toRemove; i++) {\n delete cache[entries[i][0]];\n }\n }\n\n /**\n * Set selected view\n */\n selectView(viewId: string | null): void {\n this.updateState({\n selectedViewId: viewId,\n viewModified: false // Reset modified state when selecting a different view\n });\n }\n\n /**\n * Mark the current view as modified (has unsaved changes)\n */\n setViewModified(modified: boolean): void {\n this.updateState({ viewModified: modified });\n }\n\n /**\n * Toggle the view configuration panel\n */\n toggleViewConfigPanel(): void {\n this.updateState({ viewConfigPanelOpen: !this.state$.value.viewConfigPanelOpen });\n }\n\n /**\n * Open the view configuration panel\n */\n openViewConfigPanel(): void {\n this.updateState({ viewConfigPanelOpen: true });\n }\n\n /**\n * Close the view configuration panel\n */\n closeViewConfigPanel(): void {\n this.updateState({ viewConfigPanelOpen: false });\n }\n\n /**\n * Set view mode\n */\n setViewMode(mode: DataExplorerViewMode): void {\n this.updateState({ viewMode: mode });\n }\n\n /**\n * Set smart filter prompt\n * Also updates the entity cache for the current entity\n */\n setSmartFilterPrompt(prompt: string): void {\n const currentState = this.state$.value;\n const entityCache = { ...currentState.entityCache };\n\n // Update cache for current entity\n if (currentState.selectedEntityName) {\n if (prompt) {\n entityCache[currentState.selectedEntityName] = {\n filterText: prompt,\n lastAccessed: Date.now()\n };\n } else {\n // Clear cache entry if filter is empty\n delete entityCache[currentState.selectedEntityName];\n }\n }\n\n this.updateState({ smartFilterPrompt: prompt, entityCache });\n }\n\n /**\n * Select a record and open detail panel\n * @param recordId The composite key string for the record\n * @param recordName Optional display name for the record (for breadcrumbs)\n */\n selectRecord(recordId: string | null, recordName?: string): void {\n this.updateState({\n selectedRecordId: recordId,\n selectedRecordName: recordName || null,\n detailPanelOpen: recordId !== null\n });\n }\n\n /**\n * Close detail panel\n */\n closeDetailPanel(): void {\n this.updateState({\n detailPanelOpen: false,\n selectedRecordId: null,\n selectedRecordName: null\n });\n }\n\n /**\n * Toggle navigation panel collapsed state\n */\n toggleNavigationPanel(): void {\n this.updateState({\n navigationPanelCollapsed: !this.state$.value.navigationPanelCollapsed\n });\n }\n\n /**\n * Expand navigation panel and ensure a specific section is expanded\n */\n expandAndFocusSection(section: 'favorites' | 'recent' | 'entities'): void {\n const updates: Partial<DataExplorerState> = {\n navigationPanelCollapsed: false\n };\n\n // Ensure the target section is expanded\n switch (section) {\n case 'favorites':\n updates.favoritesSectionExpanded = true;\n break;\n case 'recent':\n updates.recentSectionExpanded = true;\n break;\n case 'entities':\n updates.entitiesSectionExpanded = true;\n break;\n }\n\n this.updateState(updates);\n }\n\n /**\n * Add item to recent history\n */\n addRecentItem(item: Omit<RecentItem, 'timestamp'>): void {\n const recentItems = [...this.state$.value.recentItems];\n\n // Remove existing entry if present (match by entity and composite key)\n const existingIndex = recentItems.findIndex(\n r => r.entityName === item.entityName && r.compositeKeyString === item.compositeKeyString\n );\n if (existingIndex >= 0) {\n recentItems.splice(existingIndex, 1);\n }\n\n // Add to front with timestamp\n recentItems.unshift({\n ...item,\n timestamp: new Date()\n });\n\n // Trim to max size\n if (recentItems.length > MAX_RECENT_ITEMS) {\n recentItems.length = MAX_RECENT_ITEMS;\n }\n\n this.updateState({ recentItems });\n }\n\n /**\n * Add item to favorites\n */\n addFavorite(item: FavoriteItem): void {\n const favorites = [...this.state$.value.favorites];\n\n // Check if already exists\n const exists = favorites.some(f =>\n f.type === item.type &&\n f.entityName === item.entityName &&\n f.compositeKeyString === item.compositeKeyString &&\n f.viewId === item.viewId\n );\n\n if (!exists) {\n favorites.push(item);\n this.updateState({ favorites });\n }\n }\n\n /**\n * Remove item from favorites\n */\n removeFavorite(item: FavoriteItem): void {\n const favorites = this.state$.value.favorites.filter(f =>\n !(f.type === item.type &&\n f.entityName === item.entityName &&\n f.compositeKeyString === item.compositeKeyString &&\n f.viewId === item.viewId)\n );\n this.updateState({ favorites });\n }\n\n /**\n * Toggle section expanded state\n */\n toggleSection(section: 'favorites' | 'recent' | 'entities' | 'views'): void {\n const key = `${section}SectionExpanded` as keyof DataExplorerState;\n this.updateState({ [key]: !this.state$.value[key] } as Partial<DataExplorerState>);\n }\n\n /**\n * Load state from UserSetting using UserInfoEngine for cached access\n */\n private async loadState(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n const settingKey = this.getSettingKey();\n const engine = UserInfoEngine.Instance;\n\n // Find the setting from cached user settings\n const setting = engine.UserSettings.find(s => s.Setting === settingKey);\n\n if (setting?.Value) {\n const savedState = JSON.parse(setting.Value) as Partial<DataExplorerState>;\n // Merge with defaults to handle new properties\n this.state$.next({ ...DEFAULT_EXPLORER_STATE, ...savedState });\n } else {\n // No saved state, use defaults\n this.state$.next({ ...DEFAULT_EXPLORER_STATE });\n }\n } catch (error) {\n console.warn('Failed to load Data Explorer state:', error);\n this.state$.next({ ...DEFAULT_EXPLORER_STATE });\n }\n }\n\n /**\n * Update breadcrumbs based on current state and filter\n */\n private updateBreadcrumbs(): void {\n const breadcrumbs: BreadcrumbItem[] = [];\n const state = this.state$.value;\n\n // Always add a root/home breadcrumb - use application name if available, otherwise \"All\"\n const rootLabel = this.currentFilter?.applicationName || 'All';\n breadcrumbs.push({\n label: rootLabel,\n type: 'application',\n icon: 'fa-solid fa-th-large'\n });\n\n // Add entity breadcrumb if selected\n if (state.selectedEntityName) {\n const entityInfo = this.metadata.Entities.find(e => e.Name === state.selectedEntityName);\n breadcrumbs.push({\n label: state.selectedEntityName,\n type: 'entity',\n entityName: state.selectedEntityName,\n icon: entityInfo?.Icon ? this.formatEntityIcon(entityInfo.Icon) : 'fa-solid fa-table'\n });\n }\n\n // Add record breadcrumb if selected\n if (state.selectedRecordId && state.selectedRecordName) {\n breadcrumbs.push({\n label: state.selectedRecordName,\n type: 'record',\n entityName: state.selectedEntityName || undefined,\n compositeKeyString: state.selectedRecordId,\n icon: 'fa-solid fa-file-alt'\n });\n }\n\n this.breadcrumbs$.next(breadcrumbs);\n }\n\n /**\n * Format entity icon to ensure proper Font Awesome class format\n */\n private formatEntityIcon(icon: string): string {\n if (!icon) return 'fa-solid fa-table';\n if (icon.startsWith('fa-') || icon.startsWith('fa ')) {\n if (icon.startsWith('fa-solid') || icon.startsWith('fa-regular') ||\n icon.startsWith('fa-light') || icon.startsWith('fa-brands') ||\n icon.startsWith('fa ')) {\n return icon;\n }\n return `fa-solid ${icon}`;\n }\n return `fa-solid fa-${icon}`;\n }\n\n /**\n * Debounced save to avoid too many writes\n */\n private debouncedSave(): void {\n if (this.saveTimeout) {\n clearTimeout(this.saveTimeout);\n }\n this.saveTimeout = setTimeout(() => {\n this.saveState();\n }, 1000);\n }\n\n /**\n * Save state to UserSetting using UserInfoEngine for cached lookup\n */\n private async saveState(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n const settingKey = this.getSettingKey();\n const md = this.Provider;\n const engine = UserInfoEngine.Instance;\n\n // Find existing setting from cached user settings\n let setting = engine.UserSettings.find(s => s.Setting === settingKey);\n\n if (!setting) {\n // Create new setting if not found\n setting = await md.GetEntityObject<MJUserSettingEntity>('MJ: User Settings');\n setting.UserID = userId;\n setting.Setting = settingKey;\n }\n\n setting.Value = JSON.stringify(this.state$.value);\n await setting.Save();\n } catch (error) {\n console.warn('Failed to save Data Explorer state:', error);\n }\n }\n\n /**\n * Navigate to a specific breadcrumb level.\n * Clears any selection deeper than the clicked breadcrumb.\n */\n navigateToBreadcrumb(breadcrumb: BreadcrumbItem): void {\n switch (breadcrumb.type) {\n case 'application':\n // Clear entity and record selection (show home view)\n this.updateState({\n selectedEntityName: null,\n selectedViewId: null,\n selectedRecordId: null,\n selectedRecordName: null,\n smartFilterPrompt: '',\n detailPanelOpen: false\n });\n break;\n\n case 'entity':\n // Keep entity selected, clear record selection\n if (breadcrumb.entityName) {\n this.updateState({\n selectedRecordId: null,\n selectedRecordName: null,\n detailPanelOpen: false\n });\n }\n break;\n\n case 'record':\n // Already at record level, do nothing\n break;\n }\n }\n\n // ========================================\n // HOME SCREEN ENTITY MANAGEMENT\n // ========================================\n\n /**\n * Toggle between showing all entities or just common (DefaultForNewUser) entities\n */\n toggleShowAllEntities(): void {\n this.updateState({ showAllEntities: !this.state$.value.showAllEntities });\n }\n\n // ========================================\n // Concept D: Application Groups + Quick Access\n // ========================================\n\n /**\n * Toggle the quick access (right) panel open/closed\n */\n toggleQuickAccessPanel(): void {\n this.updateState({ quickAccessPanelOpen: !this.state$.value.quickAccessPanelOpen });\n }\n\n /**\n * Toggle a quick access section's expanded state\n */\n toggleQuickAccessSection(sectionId: string): void {\n const sections = { ...this.state$.value.quickAccessSections };\n sections[sectionId] = sections[sectionId] === false; // default to expanded (true)\n this.updateState({ quickAccessSections: sections });\n }\n\n /**\n * Toggle an application group's expanded/collapsed state\n */\n toggleAppGroupExpanded(appId: string): void {\n const expanded = [...this.state$.value.expandedAppGroups];\n const index = expanded.indexOf(appId);\n if (index >= 0) {\n expanded.splice(index, 1);\n } else {\n expanded.push(appId);\n }\n this.updateState({ expandedAppGroups: expanded });\n }\n\n /**\n * Set the home view mode (all vs favorites)\n */\n setHomeViewMode(mode: 'all' | 'favorites'): void {\n this.updateState({ homeViewMode: mode });\n }\n\n /**\n * Track entity access - called when user navigates to an entity\n */\n trackEntityAccess(entityName: string, entityId: string): void {\n const recentEntityAccesses = [...this.state$.value.recentEntityAccesses];\n\n // Find existing entry\n const existingIndex = recentEntityAccesses.findIndex(r => r.entityId === entityId);\n\n if (existingIndex >= 0) {\n // Update existing entry\n recentEntityAccesses[existingIndex] = {\n ...recentEntityAccesses[existingIndex],\n lastAccessed: new Date(),\n accessCount: recentEntityAccesses[existingIndex].accessCount + 1\n };\n // Move to front\n const [item] = recentEntityAccesses.splice(existingIndex, 1);\n recentEntityAccesses.unshift(item);\n } else {\n // Add new entry at front\n recentEntityAccesses.unshift({\n entityName,\n entityId,\n lastAccessed: new Date(),\n accessCount: 1\n });\n }\n\n // Trim to max size\n if (recentEntityAccesses.length > MAX_RECENT_ENTITIES) {\n recentEntityAccesses.length = MAX_RECENT_ENTITIES;\n }\n\n this.updateState({ recentEntityAccesses });\n }\n\n /**\n * Add entity to favorites using User Favorites entity\n */\n async addEntityToFavorites(entityName: string, entityId: string): Promise<boolean> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return false;\n\n // Check if already favorited\n const favorites = this.state$.value.favoriteEntities;\n if (favorites.some(f => f.entityId === entityId)) {\n return true; // Already favorited\n }\n\n // Get the Entities entity ID for favoriting\n const entitiesEntity = this.metadata.Entities.find(e => e.Name === 'MJ: Entities');\n if (!entitiesEntity) return false;\n\n // Create User Favorite record\n const md = this.Provider;\n const favorite = await md.GetEntityObject<MJUserFavoriteEntity>('MJ: User Favorites');\n favorite.UserID = userId;\n favorite.EntityID = entitiesEntity.ID;\n favorite.RecordID = entityId;\n\n const saved = await favorite.Save();\n if (saved) {\n // Update local state\n const favoriteEntities = [...favorites, {\n userFavoriteId: favorite.ID,\n entityName,\n entityId\n }];\n this.updateState({ favoriteEntities });\n }\n return saved;\n } catch (error) {\n console.warn('Failed to add entity to favorites:', error);\n return false;\n }\n }\n\n /**\n * Remove entity from favorites\n */\n async removeEntityFromFavorites(entityId: string): Promise<boolean> {\n try {\n const favorites = this.state$.value.favoriteEntities;\n const favorite = favorites.find(f => f.entityId === entityId);\n if (!favorite) return true; // Already not favorited\n\n // Delete User Favorite record\n const md = this.Provider;\n const favoriteEntity = await md.GetEntityObject<MJUserFavoriteEntity>('MJ: User Favorites');\n await favoriteEntity.Load(favorite.userFavoriteId);\n const deleted = await favoriteEntity.Delete();\n\n if (deleted) {\n // Update local state\n const favoriteEntities = favorites.filter(f => f.entityId !== entityId);\n this.updateState({ favoriteEntities });\n }\n return deleted;\n } catch (error) {\n console.warn('Failed to remove entity from favorites:', error);\n return false;\n }\n }\n\n /**\n * Check if an entity is favorited\n */\n isEntityFavorited(entityId: string): boolean {\n return this.state$.value.favoriteEntities.some(f => f.entityId === entityId);\n }\n\n /**\n * Load application entities with DefaultForNewUser information\n */\n private async loadApplicationEntities(): Promise<void> {\n try {\n if (!this.currentFilter?.applicationId) {\n this.applicationEntities = [];\n this.defaultEntityIds.clear();\n return;\n }\n\n const rv = RunView.FromMetadataProvider(this.Provider);\n const result = await rv.RunView<MJApplicationEntityEntity>({\n EntityName: 'MJ: Application Entities',\n ExtraFilter: `ApplicationID = '${this.currentFilter.applicationId}'`,\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n this.applicationEntities = result.Results;\n this.defaultEntityIds.clear();\n for (const appEntity of result.Results) {\n if (appEntity.DefaultForNewUser) {\n this.defaultEntityIds.add(appEntity.EntityID);\n }\n }\n }\n } catch (error) {\n console.warn('Failed to load application entities:', error);\n }\n }\n\n /**\n * Load favorite entities from User Favorites using UserInfoEngine\n */\n private async loadFavoriteEntities(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Get the Entities entity to filter favorites\n const entitiesEntity = this.metadata.Entities.find(e => e.Name === 'MJ: Entities');\n if (!entitiesEntity) return;\n\n // Use UserInfoEngine for cached access to user favorites\n const engine = UserInfoEngine.Instance;\n\n // Filter to only entity favorites (where EntityID is the Entities entity)\n const entityFavorites = engine.UserFavorites.filter(f => UUIDsEqual(f.EntityID, entitiesEntity.ID));\n\n const favoriteEntities: FavoriteEntity[] = [];\n for (const fav of entityFavorites) {\n // Look up entity name from RecordID (which is the Entity.ID)\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, fav.RecordID));\n if (entity) {\n favoriteEntities.push({\n userFavoriteId: fav.ID,\n entityName: entity.Name,\n entityId: fav.RecordID\n });\n }\n }\n this.updateState({ favoriteEntities });\n } catch (error) {\n console.warn('Failed to load favorite entities:', error);\n }\n }\n\n /**\n * Load recent records from User Record Logs with batch record name lookup using UserInfoEngine\n */\n private async loadRecentRecords(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Use UserInfoEngine for cached access to user record logs\n const engine = UserInfoEngine.Instance;\n\n // Get recent records, limited to MAX_RECENT_RECORDS\n const userRecordLogs = engine.UserRecordLogs.slice(0, MAX_RECENT_RECORDS);\n\n const recentRecords: RecentRecordAccess[] = [];\n const recordNameInputs: EntityRecordNameInput[] = [];\n const recordIndexMap: Map<string, number> = new Map(); // Map composite key to array index\n\n for (const log of userRecordLogs) {\n // Look up entity name from EntityID\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, log.EntityID));\n if (entity) {\n // Filter by application context if applicable\n if (this.currentFilter?.applicationId && !this.applicationEntities.some(ae => UUIDsEqual(ae.EntityID, log.EntityID))) {\n continue; // Skip records from entities not in this application\n }\n\n const recordAccess: RecentRecordAccess = {\n entityName: entity.Name,\n entityId: log.EntityID,\n recordId: log.RecordID,\n latestAt: log.LatestAt,\n totalCount: log.TotalCount\n };\n const index = recentRecords.length;\n recentRecords.push(recordAccess);\n\n // Build composite key for batch name lookup\n const compositeKey = this.buildCompositeKeyForRecord(entity.Name, log.RecordID);\n if (compositeKey) {\n recordNameInputs.push({ EntityName: entity.Name, CompositeKey: compositeKey });\n // Use the canonical concatenated string as the map key for consistent matching\n recordIndexMap.set(`${entity.Name}||${compositeKey.ToConcatenatedString()}`, index);\n }\n }\n }\n\n // Batch fetch record names\n if (recordNameInputs.length > 0) {\n try {\n const nameResults = await this.metadata.GetEntityRecordNames(recordNameInputs);\n for (const nameResult of nameResults) {\n if (nameResult.Success && nameResult.RecordName) {\n const key = `${nameResult.EntityName}||${nameResult.CompositeKey.ToConcatenatedString()}`;\n const index = recordIndexMap.get(key);\n if (index !== undefined) {\n recentRecords[index].recordName = nameResult.RecordName;\n }\n }\n }\n } catch (nameError) {\n console.warn('Failed to load record names:', nameError);\n // Continue without names - they'll show record IDs\n }\n }\n\n this.recentRecords$.next(recentRecords);\n } catch (error) {\n console.warn('Failed to load recent records:', error);\n }\n }\n\n /**\n * Build a CompositeKey for a record. RecordID may be stored as either:\n * - Concatenated format: \"FieldName|Value\" or \"Field1|Val1||Field2|Val2\"\n * - Plain value: just the raw value (e.g. a GUID)\n * Detects the format and constructs the key accordingly.\n */\n private buildCompositeKeyForRecord(entityName: string, recordId: string): CompositeKey | null {\n if (!recordId) return null;\n\n // If recordId contains '|', it's in concatenated format\n if (recordId.includes('|')) {\n try {\n const compositeKey = new CompositeKey();\n compositeKey.LoadFromConcatenatedString(recordId);\n if (compositeKey.KeyValuePairs.length > 0) return compositeKey;\n } catch {\n // Fall through to entity-based lookup\n }\n }\n\n // Plain value — look up entity primary key field(s) to construct the key\n const entityInfo = this.metadata.Entities.find(e => e.Name === entityName);\n if (!entityInfo) return null;\n\n const pkField = entityInfo.FirstPrimaryKey;\n if (!pkField) return null;\n\n const compositeKey = new CompositeKey();\n compositeKey.KeyValuePairs = [{ FieldName: pkField.Name, Value: recordId }];\n return compositeKey;\n }\n\n /**\n * Refresh recent records (call after navigating to a record)\n */\n async refreshRecentRecords(): Promise<void> {\n await this.loadRecentRecords();\n }\n\n /**\n * Add or update a recent record locally (without DB refresh).\n * Call this when a record is selected to provide instant UI feedback.\n * The DB write happens separately via RecentAccessService.logAccess().\n *\n * @param entityName The entity name\n * @param entityId The entity ID\n * @param recordId The record ID (primary key value)\n * @param recordName Optional display name for the record\n */\n addLocalRecentRecord(entityName: string, entityId: string, recordId: string, recordName?: string): void {\n // Filter by application context if applicable\n if (this.currentFilter?.applicationId && !this.applicationEntities.some(ae => UUIDsEqual(ae.EntityID, entityId))) {\n return; // Don't add records from entities not in this application\n }\n\n const currentRecords = [...this.recentRecords$.value];\n\n // Find existing entry\n const existingIndex = currentRecords.findIndex(\n r => r.entityId === entityId && r.recordId === recordId\n );\n\n const newRecord: RecentRecordAccess = {\n entityName,\n entityId,\n recordId,\n recordName,\n latestAt: new Date(),\n totalCount: existingIndex >= 0 ? currentRecords[existingIndex].totalCount + 1 : 1\n };\n\n if (existingIndex >= 0) {\n // Remove existing entry (will be re-added at front)\n currentRecords.splice(existingIndex, 1);\n }\n\n // Add to front\n currentRecords.unshift(newRecord);\n\n // Trim to max size\n if (currentRecords.length > MAX_RECENT_RECORDS) {\n currentRecords.length = MAX_RECENT_RECORDS;\n }\n\n this.recentRecords$.next(currentRecords);\n }\n\n /**\n * Load favorite records from User Favorites (non-entity favorites) with batch record name lookup using UserInfoEngine.\n * Filters to only include records from entities in the current application context.\n */\n private async loadFavoriteRecords(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Get the Entities entity to exclude entity favorites\n const entitiesEntity = this.metadata.Entities.find(e => e.Name === 'MJ: Entities');\n const entitiesEntityId = entitiesEntity?.ID || '';\n\n // Use UserInfoEngine for cached access to user favorites\n const engine = UserInfoEngine.Instance;\n\n // Filter to non-entity favorites (exclude favorites where EntityID is the Entities entity)\n const nonEntityFavorites = engine.UserFavorites.filter(f => !UUIDsEqual(f.EntityID, entitiesEntityId));\n\n const favoriteRecords: FavoriteRecord[] = [];\n const recordNameInputs: EntityRecordNameInput[] = [];\n const recordIndexMap: Map<string, number> = new Map();\n\n for (const fav of nonEntityFavorites) {\n // Look up entity info from the EntityID\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, fav.EntityID));\n if (entity) {\n // Filter by application context if applicable\n if (this.currentFilter?.applicationId && !this.applicationEntities.some(ae => UUIDsEqual(ae.EntityID, fav.EntityID))) {\n continue; // Skip records from entities not in this application\n }\n\n const favoriteRecord: FavoriteRecord = {\n userFavoriteId: fav.ID,\n entityName: entity.Name,\n entityId: fav.EntityID,\n recordId: fav.RecordID\n };\n const index = favoriteRecords.length;\n favoriteRecords.push(favoriteRecord);\n\n // Build composite key for batch name lookup\n const compositeKey = this.buildCompositeKeyForRecord(entity.Name, fav.RecordID);\n if (compositeKey) {\n recordNameInputs.push({ EntityName: entity.Name, CompositeKey: compositeKey });\n // Use the canonical concatenated string as the map key for consistent matching\n recordIndexMap.set(`${entity.Name}||${compositeKey.ToConcatenatedString()}`, index);\n }\n }\n }\n\n // Batch fetch record names\n if (recordNameInputs.length > 0) {\n try {\n const nameResults = await this.metadata.GetEntityRecordNames(recordNameInputs);\n for (const nameResult of nameResults) {\n if (nameResult.Success && nameResult.RecordName) {\n const key = `${nameResult.EntityName}||${nameResult.CompositeKey.ToConcatenatedString()}`;\n const index = recordIndexMap.get(key);\n if (index !== undefined) {\n favoriteRecords[index].recordName = nameResult.RecordName;\n }\n }\n }\n } catch (nameError) {\n console.warn('Failed to load record names for favorites:', nameError);\n // Continue without names - they'll show record IDs\n }\n }\n\n this.favoriteRecords$.next(favoriteRecords);\n this.updateState({ favoriteRecords });\n } catch (error) {\n console.warn('Failed to load favorite records:', error);\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module database-create-wizard.component
|
|
3
|
+
* @description Multi-step wizard for creating a new Database Designer entity.
|
|
4
|
+
*
|
|
5
|
+
* Rendered inside an `mj-slide-panel` by the dashboard. Manages step routing
|
|
6
|
+
* and owns one `EntityWizardStateService` instance for the duration the panel
|
|
7
|
+
* is open.
|
|
8
|
+
*
|
|
9
|
+
* Wizard steps:
|
|
10
|
+
* 1 Basics — entity name, table name, schema, description
|
|
11
|
+
* 2 Fields — column definitions (EntityFieldsGridComponent)
|
|
12
|
+
* 3 Relationships — optional foreign keys
|
|
13
|
+
* 4 Review — read-only schema preview + server-side validation
|
|
14
|
+
* 5 Create — pipeline execution + result (EntityPipelinePanelComponent)
|
|
15
|
+
*
|
|
16
|
+
* Step 5 is terminal — once the pipeline starts there is no Back navigation.
|
|
17
|
+
*/
|
|
18
|
+
import { EventEmitter, OnDestroy } from '@angular/core';
|
|
19
|
+
import { EntityWizardStateService } from '../../services/entity-wizard-state.service.js';
|
|
20
|
+
import type { WizardStep, WizardStepDef, BasicsStepValue, ColumnSpec, ForeignKeySpec, EntityPipelineResult, SchemaOption } from '../../database-designer.types.js';
|
|
21
|
+
import * as i0 from "@angular/core";
|
|
22
|
+
export declare class DatabaseCreateWizardComponent implements OnDestroy {
|
|
23
|
+
private readonly designerService;
|
|
24
|
+
private readonly cdr;
|
|
25
|
+
readonly WizardState: EntityWizardStateService;
|
|
26
|
+
/** Emitted when the wizard completes successfully. */
|
|
27
|
+
readonly EntityCreated: EventEmitter<EntityPipelineResult>;
|
|
28
|
+
/** Emitted when the user cancels or clicks "Create Another". */
|
|
29
|
+
readonly Cancelled: EventEmitter<void>;
|
|
30
|
+
private stepPipelineRef?;
|
|
31
|
+
CurrentStep: WizardStep;
|
|
32
|
+
StepDefs: WizardStepDef[];
|
|
33
|
+
IsValidating: boolean;
|
|
34
|
+
ValidationErrors: string[];
|
|
35
|
+
/** True once the user has clicked "Create Entity" — pipeline runs inline on the review step. */
|
|
36
|
+
IsExecuting: boolean;
|
|
37
|
+
get StepIndex(): number;
|
|
38
|
+
get IsFirstStep(): boolean;
|
|
39
|
+
get IsLastStep(): boolean;
|
|
40
|
+
private readonly destroy$;
|
|
41
|
+
AvailableSchemas: SchemaOption[];
|
|
42
|
+
constructor();
|
|
43
|
+
ngOnDestroy(): void;
|
|
44
|
+
OnBasicsChanged(value: BasicsStepValue): void;
|
|
45
|
+
OnFieldsChanged(columns: ColumnSpec[]): void;
|
|
46
|
+
OnRelationshipsChanged(fks: ForeignKeySpec[]): void;
|
|
47
|
+
OnNext(): Promise<void>;
|
|
48
|
+
OnBack(): void;
|
|
49
|
+
OnCancel(): void;
|
|
50
|
+
/** Re-run server-side schema validation without advancing the step. */
|
|
51
|
+
OnRetryValidation(): Promise<void>;
|
|
52
|
+
/** Clear the current validation errors without re-running validation. */
|
|
53
|
+
OnDismissErrors(): void;
|
|
54
|
+
OnPipelineCompleted(result: EntityPipelineResult): void;
|
|
55
|
+
OnPipelineErrored(_msg: string): void;
|
|
56
|
+
OnCreateAnother(): void;
|
|
57
|
+
get TableDefinition(): Partial<import("../../database-designer.types.js").EntityTableSpec>;
|
|
58
|
+
TrackByStep(_: number, def: WizardStepDef): string;
|
|
59
|
+
private advanceToStep;
|
|
60
|
+
private rebuildStepDefs;
|
|
61
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatabaseCreateWizardComponent, never>;
|
|
62
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatabaseCreateWizardComponent, "mj-database-create-wizard", never, {}, { "EntityCreated": "EntityCreated"; "Cancelled": "Cancelled"; }, never, never, false, never>;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=database-create-wizard.component.d.ts.map
|
package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-create-wizard.component.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseDesigner/components/create-wizard/database-create-wizard.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACgB,YAAY,EAAE,SAAS,EAE7C,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AAGzF,OAAO,KAAK,EACR,UAAU,EAAE,aAAa,EAAE,eAAe,EAC1C,UAAU,EAAE,cAAc,EAAE,oBAAoB,EAAE,YAAY,EACjE,MAAM,kCAAkC,CAAC;;AAW1C,qBAOa,6BAA8B,YAAW,SAAS;IAI3D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;IACnE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IAIjD,SAAgB,WAAW,2BAAsD;IAIjF,sDAAsD;IACtD,SAA0B,aAAa,qCAA4C;IAEnF,gEAAgE;IAChE,SAA0B,SAAS,qBAA4B;IAS/D,OAAO,CAAC,eAAe,CAAC,CAAwB;IAIzC,WAAW,EAAE,UAAU,CAAY;IACnC,QAAQ,EAAE,aAAa,EAAE,CAAM;IAC/B,YAAY,UAAS;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAM;IACvC,gGAAgG;IACzF,WAAW,UAAS;IAE3B,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,WAAW,IAAI,OAAO,CAAiC;IAClE,IAAW,UAAU,IAAI,OAAO,CAA2C;IAI3E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEzC,gBAAgB,EAAE,YAAY,EAAE,CAAM;;IAiC7C,WAAW,IAAI,IAAI;IAQZ,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAI7C,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAI5C,sBAAsB,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,IAAI;IAM7C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B7B,MAAM,IAAI,IAAI;IAKd,QAAQ,IAAI,IAAI;IAIvB,uEAAuE;IAC1D,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/C,yEAAyE;IAClE,eAAe,IAAI,IAAI;IAOvB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAKvD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKrC,eAAe,IAAI,IAAI;IAM9B,IAAW,eAAe,wEAA+C;IAElE,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM;IAIzD,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,eAAe;yCAnLd,6BAA6B;2CAA7B,6BAA6B;CA2LzC"}
|