@memberjunction/ng-dashboards 5.30.1 → 5.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +4 -4
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts +2 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +8 -6
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +6 -5
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +2 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +6 -5
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +6 -5
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts +2 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +7 -4
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +3 -2
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +10 -6
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +6 -5
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +2 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +6 -5
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +55 -52
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +15 -15
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +4 -3
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +2 -2
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +2 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +10 -8
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +2 -2
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts +2 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js +13 -10
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1181 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -0
- package/dist/AI/components/tags/tags-resource.component.js +7487 -0
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +25 -21
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/index.d.ts +1 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +5 -0
- package/dist/AI/index.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +12 -4
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +5 -4
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts +2 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +5 -5
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +11 -10
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-list.component.d.ts +2 -1
- package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-list.component.js +6 -5
- package/dist/APIKeys/api-key-list.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +4 -4
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +8 -6
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.js +10 -8
- package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.d.ts +2 -1
- package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +6 -5
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +2 -2
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts +2 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +6 -5
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +1 -1
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts +2 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +6 -4
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts +2 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.js +7 -5
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts +2 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +7 -5
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +4 -4
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +1 -1
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +1 -1
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +3 -3
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +1 -1
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +3 -3
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +5 -4
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +2 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +6 -4
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +11 -2
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +61 -27
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -2
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +19 -11
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts +4 -2
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +11 -3
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +10 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.js +18 -9
- package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts +11 -1
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-studio-state.service.js +23 -3
- package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts +6 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.js +16 -6
- package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.js +1 -1
- package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +13 -13
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts +4 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.js +5 -2
- package/dist/DashboardBrowser/dashboard-share-adapter.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +3 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -4
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +3 -2
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +7 -6
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +3 -2
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +6 -5
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +10 -9
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts +6 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +15 -5
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts +64 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js +400 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts +42 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js +232 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts +14 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js +38 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts +24 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js +77 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts +88 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js +404 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts +12 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js +116 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +55 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +204 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +61 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/entity-list.component.js +485 -0
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts +52 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.js +320 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts +79 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js +378 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts +85 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js +429 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts +58 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js +333 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts +36 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js +345 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts +13 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js +81 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +30 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +131 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer-erd.d.ts +19 -0
- package/dist/DatabaseDesigner/database-designer-erd.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer-erd.js +84 -0
- package/dist/DatabaseDesigner/database-designer-erd.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer.types.d.ts +167 -0
- package/dist/DatabaseDesigner/database-designer.types.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer.types.js +26 -0
- package/dist/DatabaseDesigner/database-designer.types.js.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.d.ts +94 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.js +392 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.js.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.service.d.ts +78 -0
- package/dist/DatabaseDesigner/services/database-designer.service.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.service.js +273 -0
- package/dist/DatabaseDesigner/services/database-designer.service.js.map +1 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts +79 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.js +204 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.js.map +1 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/action-pin-config-dialog.component.d.ts +2 -1
- package/dist/Home/action-pin-config-dialog.component.d.ts.map +1 -1
- package/dist/Home/action-pin-config-dialog.component.js +6 -4
- package/dist/Home/action-pin-config-dialog.component.js.map +1 -1
- package/dist/Home/action-pin-runner-dialog.component.d.ts +2 -1
- package/dist/Home/action-pin-runner-dialog.component.d.ts.map +1 -1
- package/dist/Home/action-pin-runner-dialog.component.js +5 -4
- package/dist/Home/action-pin-runner-dialog.component.js.map +1 -1
- package/dist/Home/home-application.d.ts.map +1 -1
- package/dist/Home/home-application.js +10 -12
- package/dist/Home/home-application.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +3 -3
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +1 -0
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +11 -10
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2 -2
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +1 -0
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +1 -0
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +5 -4
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/services/integration-data.service.d.ts +5 -1
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +27 -19
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +6 -6
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +8 -6
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +6 -6
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +3 -3
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +6 -6
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +4 -4
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +6 -6
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +11 -10
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +5 -0
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +11 -3
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts +2 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +8 -6
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts +2 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +7 -5
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +12 -12
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/Permissions/permissions-shared.d.ts +3 -3
- package/dist/Permissions/permissions-shared.d.ts.map +1 -1
- package/dist/Permissions/permissions-shared.js +5 -5
- package/dist/Permissions/permissions-shared.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +1 -1
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +1 -2
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +1 -0
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +5 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +21 -13
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +2 -2
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +9 -7
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.d.ts +6 -1
- package/dist/Testing/services/testing-instrumentation.service.d.ts.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.js +21 -11
- package/dist/Testing/services/testing-instrumentation.service.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +3 -1
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +15 -11
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +5 -5
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +1 -2
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +3 -3
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +35 -34
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +6 -0
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +13 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +3 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -1
- package/dist/public-api.js.map +1 -1
- package/dist/shared/entity-field-display.d.ts +4 -3
- package/dist/shared/entity-field-display.d.ts.map +1 -1
- package/dist/shared/entity-field-display.js +9 -9
- package/dist/shared/entity-field-display.js.map +1 -1
- package/package.json +52 -51
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-studio-state.service.js","sourceRoot":"","sources":["../../../src/ComponentStudio/services/component-studio-state.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, EventEmitter } from '@angular/core';\nimport { RunView, CompositeKey, Metadata } from '@memberjunction/core';\nimport { MJComponentEntityExtended } from '@memberjunction/core-entities';\nimport { ComponentSpec } from '@memberjunction/interactive-component-types';\nimport { ParseJSONRecursive, ParseJSONOptions } from '@memberjunction/global';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\n/**\n * Interface for components loaded from files, text, or artifacts (not from database)\n */\nexport interface FileLoadedComponent {\n id: string;\n name: string;\n description?: string;\n specification: ComponentSpec;\n filename: string;\n loadedAt: Date;\n isFileLoaded: true;\n type?: string;\n status?: string;\n sourceArtifactID?: string;\n sourceVersionID?: string;\n}\n\n/**\n * Union type for both database and file-loaded components\n */\nexport type DisplayComponent = (MJComponentEntityExtended & { isFileLoaded?: false }) | FileLoadedComponent;\n\n/**\n * Category for filtering\n */\nexport interface Category {\n name: string;\n count: number;\n color: string;\n}\n\n/**\n * Component error info\n */\nexport interface ComponentError {\n type: string;\n message: string;\n technicalDetails?: Record<string, unknown> | string;\n}\n\n/**\n * Code section for the code editor tabbed panel\n */\nexport interface CodeSection {\n title: string;\n code: string;\n originalCode: string;\n isDependency: boolean;\n index?: number;\n}\n\n/**\n * Central state management service for Component Studio.\n * Decouples state from components so sub-components can share state.\n */\n@Injectable()\nexport class ComponentStudioStateService {\n\n // --- Component Data ---\n private _dbComponents: MJComponentEntityExtended[] = [];\n private _fileLoadedComponents: FileLoadedComponent[] = [];\n\n get DbComponents(): MJComponentEntityExtended[] { return this._dbComponents; }\n get FileLoadedComponents(): FileLoadedComponent[] { return this._fileLoadedComponents; }\n\n /** Combined list of all components (file-loaded first, then DB) */\n get AllComponents(): DisplayComponent[] {\n return [\n ...this._fileLoadedComponents,\n ...this._dbComponents\n ] as DisplayComponent[];\n }\n\n // --- Filtered Components ---\n private _filteredComponents: DisplayComponent[] = [];\n get FilteredComponents(): DisplayComponent[] { return this._filteredComponents; }\n\n // --- Selection & Running ---\n private _selectedComponent: DisplayComponent | null = null;\n private _expandedComponent: DisplayComponent | null = null;\n private _componentSpec: ComponentSpec | null = null;\n private _isRunning = false;\n\n get SelectedComponent(): DisplayComponent | null { return this._selectedComponent; }\n set SelectedComponent(value: DisplayComponent | null) { this._selectedComponent = value; }\n\n get ExpandedComponent(): DisplayComponent | null { return this._expandedComponent; }\n set ExpandedComponent(value: DisplayComponent | null) { this._expandedComponent = value; }\n\n get ComponentSpec(): ComponentSpec | null { return this._componentSpec; }\n set ComponentSpec(value: ComponentSpec | null) { this._componentSpec = value; }\n\n get IsRunning(): boolean { return this._isRunning; }\n set IsRunning(value: boolean) { this._isRunning = value; }\n\n // --- Loading ---\n private _isLoading = true;\n get IsLoading(): boolean { return this._isLoading; }\n\n // --- Error ---\n private _currentError: ComponentError | null = null;\n get CurrentError(): ComponentError | null { return this._currentError; }\n set CurrentError(value: ComponentError | null) { this._currentError = value; }\n\n // --- Filters ---\n private _searchQuery = '';\n private _selectedCategories: Set<string> = new Set();\n private _showOnlyFavorites = false;\n private _showDeprecatedComponents = false;\n private _showAllCategories = false;\n private _isFilterPanelExpanded = false;\n\n get SearchQuery(): string { return this._searchQuery; }\n set SearchQuery(value: string) {\n this._searchQuery = value;\n this.ApplyFilters();\n }\n\n get SelectedCategories(): Set<string> { return this._selectedCategories; }\n get ShowOnlyFavorites(): boolean { return this._showOnlyFavorites; }\n get ShowDeprecatedComponents(): boolean { return this._showDeprecatedComponents; }\n get ShowAllCategories(): boolean { return this._showAllCategories; }\n get IsFilterPanelExpanded(): boolean { return this._isFilterPanelExpanded; }\n\n // --- Favorites ---\n private _favoriteComponents: Set<string> = new Set();\n get FavoriteComponents(): Set<string> { return this._favoriteComponents; }\n\n // --- Categories ---\n private _availableCategories: Category[] = [];\n get AvailableCategories(): Category[] { return this._availableCategories; }\n\n // --- Editor State ---\n private _editableSpec = '';\n private _editableCode = '';\n private _codeSections: CodeSection[] = [];\n private _isEditingSpec = false;\n private _isEditingCode = false;\n private _activeTab = 0;\n private _isDetailsPaneCollapsed = true;\n\n get EditableSpec(): string { return this._editableSpec; }\n set EditableSpec(value: string) { this._editableSpec = value; }\n\n get EditableCode(): string { return this._editableCode; }\n set EditableCode(value: string) { this._editableCode = value; }\n\n get CodeSections(): CodeSection[] { return this._codeSections; }\n\n get IsEditingSpec(): boolean { return this._isEditingSpec; }\n set IsEditingSpec(value: boolean) { this._isEditingSpec = value; }\n\n get IsEditingCode(): boolean { return this._isEditingCode; }\n set IsEditingCode(value: boolean) { this._isEditingCode = value; }\n\n get ActiveTab(): number { return this._activeTab; }\n set ActiveTab(value: number) { this._activeTab = value; }\n\n get IsDetailsPaneCollapsed(): boolean { return this._isDetailsPaneCollapsed; }\n set IsDetailsPaneCollapsed(value: boolean) { this._isDetailsPaneCollapsed = value; }\n\n // --- Unsaved changes tracking ---\n private _hasUnsavedChanges = false;\n get HasUnsavedChanges(): boolean { return this._hasUnsavedChanges; }\n set HasUnsavedChanges(value: boolean) { this._hasUnsavedChanges = value; }\n\n // --- AI Panel ---\n private _isAIPanelCollapsed = false;\n get IsAIPanelCollapsed(): boolean { return this._isAIPanelCollapsed; }\n set IsAIPanelCollapsed(value: boolean) { this._isAIPanelCollapsed = value; }\n\n // --- Events ---\n /** Emitted when state changes require UI update */\n StateChanged = new EventEmitter<void>();\n\n /** Emitted when the running component needs to refresh */\n RefreshComponent = new EventEmitter<void>();\n\n /** Emitted when an error should be sent to AI for diagnosis */\n SendErrorToAI = new EventEmitter<ComponentError>();\n\n /** Emitted when a component spec is updated (e.g. by AI) */\n SpecUpdated = new EventEmitter<ComponentSpec>();\n\n private metadata: Metadata = new Metadata();\n\n // ============================================================\n // DATA LOADING\n // ============================================================\n\n async LoadComponents(): Promise<void> {\n this._isLoading = true;\n this.StateChanged.emit();\n\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJComponentEntityExtended>({\n EntityName: 'MJ: Components',\n ExtraFilter: 'HasRequiredCustomProps = 0',\n OrderBy: 'Name',\n MaxRows: 1000,\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this._dbComponents = result.Results || [];\n this.ApplyFilters();\n this._isLoading = false;\n this.StateChanged.emit();\n\n // Load favorites in background\n this.loadFavorites();\n } else {\n console.error('Failed to load components:', result.ErrorMessage);\n this._isLoading = false;\n this.StateChanged.emit();\n }\n } catch (error) {\n console.error('Error loading components:', error);\n this._isLoading = false;\n this.StateChanged.emit();\n }\n }\n\n private async loadFavorites(): Promise<void> {\n const currentUserId = this.metadata.CurrentUser?.ID;\n if (!currentUserId) return;\n\n this._favoriteComponents.clear();\n\n const favoritePromises = this._dbComponents.map(component =>\n this.metadata.GetRecordFavoriteStatus(\n currentUserId,\n 'MJ: Components',\n CompositeKey.FromID(component.ID)\n )\n .then(isFavorite => ({ componentId: component.ID, isFavorite }))\n .catch(() => ({ componentId: component.ID, isFavorite: false }))\n );\n\n const results = await Promise.all(favoritePromises);\n for (const result of results) {\n if (result.isFavorite) {\n this._favoriteComponents.add(result.componentId);\n }\n }\n this.StateChanged.emit();\n }\n\n // ============================================================\n // FILTERING\n // ============================================================\n\n ApplyFilters(): void {\n this.buildCategories();\n\n let filtered = [...this.AllComponents];\n\n // Filter out deprecated\n if (!this._showDeprecatedComponents) {\n filtered = filtered.filter(c => this.GetComponentStatus(c) !== 'Deprecated');\n }\n\n // Favorites filter\n if (this._showOnlyFavorites) {\n filtered = filtered.filter(c => this.IsFavorite(c));\n }\n\n // Category filter\n if (this._selectedCategories.size > 0) {\n filtered = filtered.filter(c => {\n const namespace = this.GetComponentNamespace(c) || 'Uncategorized';\n const category = this.extractCategoryFromNamespace(namespace);\n return this._selectedCategories.has(category);\n });\n }\n\n // Search filter\n if (this._searchQuery) {\n const query = this._searchQuery.toLowerCase();\n filtered = filtered.filter(c => {\n const name = this.GetComponentName(c)?.toLowerCase() || '';\n const description = this.GetComponentDescription(c)?.toLowerCase() || '';\n const type = this.GetComponentType(c)?.toLowerCase() || '';\n const namespace = this.GetComponentNamespace(c)?.toLowerCase() || '';\n return name.includes(query) || description.includes(query) || type.includes(query) || namespace.includes(query);\n });\n }\n\n this._filteredComponents = filtered;\n }\n\n private buildCategories(): void {\n const categoryMap = new Map<string, number>();\n for (const component of this.AllComponents) {\n const namespace = this.GetComponentNamespace(component) || 'Uncategorized';\n const category = this.extractCategoryFromNamespace(namespace);\n categoryMap.set(category, (categoryMap.get(category) || 0) + 1);\n }\n\n this._availableCategories = Array.from(categoryMap.entries())\n .map(([name, count]) => ({\n name,\n count,\n color: this.getCategoryColor(name)\n }))\n .sort((a, b) => b.count - a.count);\n }\n\n private extractCategoryFromNamespace(namespace: string): string {\n if (!namespace || namespace === 'Uncategorized') return 'Uncategorized';\n const parts = namespace.split('/').filter(p => p.length > 0);\n return parts[0] || 'Uncategorized';\n }\n\n private getCategoryColor(category: string): string {\n const colors = [\n '#3B82F6', '#8B5CF6', '#10B981', '#F97316', '#06B6D4',\n '#EC4899', '#6366F1', '#14B8A6', '#EAB308', '#EF4444',\n ];\n let hash = 0;\n for (let i = 0; i < category.length; i++) {\n hash = category.charCodeAt(i) + ((hash << 5) - hash);\n }\n return colors[Math.abs(hash) % colors.length];\n }\n\n ToggleFilterPanel(): void {\n this._isFilterPanelExpanded = !this._isFilterPanelExpanded;\n this.StateChanged.emit();\n }\n\n ToggleCategory(category: string): void {\n if (this._selectedCategories.has(category)) {\n this._selectedCategories.delete(category);\n } else {\n this._selectedCategories.add(category);\n }\n this.ApplyFilters();\n this.StateChanged.emit();\n }\n\n ToggleShowOnlyFavorites(): void {\n this._showOnlyFavorites = !this._showOnlyFavorites;\n this.ApplyFilters();\n this.StateChanged.emit();\n }\n\n ToggleShowDeprecatedComponents(): void {\n this._showDeprecatedComponents = !this._showDeprecatedComponents;\n this.ApplyFilters();\n this.StateChanged.emit();\n }\n\n ToggleShowAllCategories(): void {\n this._showAllCategories = !this._showAllCategories;\n this.StateChanged.emit();\n }\n\n ClearAllFilters(): void {\n this._selectedCategories.clear();\n this._showOnlyFavorites = false;\n this._showDeprecatedComponents = false;\n this.ApplyFilters();\n this.StateChanged.emit();\n }\n\n GetActiveFilterCount(): number {\n let count = 0;\n if (this._showOnlyFavorites) count++;\n if (this._showDeprecatedComponents) count++;\n count += this._selectedCategories.size;\n return count;\n }\n\n GetDeprecatedCount(): number {\n return this.AllComponents.filter(c => this.GetComponentStatus(c) === 'Deprecated').length;\n }\n\n GetVisibleCategories(): Category[] {\n return this._showAllCategories ? this._availableCategories : this._availableCategories.slice(0, 5);\n }\n\n IsCategorySelected(category: string): boolean {\n return this._selectedCategories.has(category);\n }\n\n // ============================================================\n // FAVORITES\n // ============================================================\n\n IsFavorite(component: DisplayComponent): boolean {\n if (this.IsFileLoadedComponent(component)) return false;\n return this._favoriteComponents.has(this.GetComponentId(component));\n }\n\n async ToggleFavorite(component: DisplayComponent): Promise<void> {\n if (this.IsFileLoadedComponent(component)) return;\n\n const currentUserId = this.metadata.CurrentUser?.ID;\n if (!currentUserId) return;\n\n const componentId = this.GetComponentId(component);\n const isFavorite = this._favoriteComponents.has(componentId);\n\n try {\n await this.metadata.SetRecordFavoriteStatus(\n currentUserId,\n 'MJ: Components',\n CompositeKey.FromID(componentId),\n !isFavorite\n );\n\n if (isFavorite) {\n this._favoriteComponents.delete(componentId);\n } else {\n this._favoriteComponents.add(componentId);\n }\n this.StateChanged.emit();\n } catch (error) {\n console.error('Error toggling favorite status:', error);\n }\n }\n\n // ============================================================\n // COMPONENT ACCESSORS (for union type)\n // ============================================================\n\n IsFileLoadedComponent(component: DisplayComponent): component is FileLoadedComponent {\n return component.isFileLoaded === true;\n }\n\n GetComponentName(component: DisplayComponent): string {\n return component.isFileLoaded ? component.name : component.Name;\n }\n\n GetComponentDescription(component: DisplayComponent): string | undefined {\n return component.isFileLoaded ? component.description : (component.Description || undefined);\n }\n\n GetComponentType(component: DisplayComponent): string | undefined {\n return component.isFileLoaded ? component.type : (component.Type || undefined);\n }\n\n GetComponentStatus(component: DisplayComponent): string | undefined {\n return component.isFileLoaded ? component.status : (component.Status || undefined);\n }\n\n GetComponentVersion(component: DisplayComponent): string {\n return component.isFileLoaded ? '1.0.0' : (component.Version || '1.0.0');\n }\n\n GetComponentSpec(component: DisplayComponent): ComponentSpec {\n return component.isFileLoaded ? component.specification : JSON.parse(component.Specification);\n }\n\n GetComponentId(component: DisplayComponent): string {\n return component.isFileLoaded ? component.id : component.ID;\n }\n\n GetComponentNamespace(component: DisplayComponent): string | undefined {\n if (component.isFileLoaded) {\n return component.specification.namespace;\n }\n return (component as MJComponentEntityExtended).Namespace || undefined;\n }\n\n GetComponentFilename(component: DisplayComponent): string | undefined {\n return component.isFileLoaded ? component.filename : undefined;\n }\n\n GetComponentLoadedAt(component: DisplayComponent): Date | undefined {\n return component.isFileLoaded ? component.loadedAt : undefined;\n }\n\n GetComponentUpdatedAt(component: DisplayComponent): Date | undefined {\n return !component.isFileLoaded && component.__mj_UpdatedAt ? component.__mj_UpdatedAt : undefined;\n }\n\n // ============================================================\n // COMPONENT RUNNING\n // ============================================================\n\n StartComponent(component: DisplayComponent): void {\n this._selectedComponent = component;\n this._componentSpec = this.GetComponentSpec(component);\n this._isRunning = true;\n this._currentError = null;\n this._isDetailsPaneCollapsed = false;\n this._hasUnsavedChanges = false;\n this.InitializeEditors();\n this.StateChanged.emit();\n }\n\n StopComponent(): void {\n this._isRunning = false;\n this._selectedComponent = null;\n this._componentSpec = null;\n this._currentError = null;\n this._hasUnsavedChanges = false;\n this.StateChanged.emit();\n }\n\n RunComponent(component: DisplayComponent): void {\n const componentId = this.GetComponentId(component);\n const selectedId = this._selectedComponent ? this.GetComponentId(this._selectedComponent) : null;\n\n if (this._isRunning && selectedId !== componentId) {\n this.StopComponent();\n }\n this.StartComponent(component);\n }\n\n // ============================================================\n // EDITORS\n // ============================================================\n\n InitializeEditors(): void {\n if (!this._selectedComponent) return;\n\n const spec = this.GetComponentSpec(this._selectedComponent);\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n const parsed = ParseJSONRecursive(spec, parseOptions);\n this._editableSpec = JSON.stringify(parsed, null, 2);\n this._editableCode = spec.code || '// No code available';\n this.BuildCodeSections();\n this._isEditingSpec = false;\n this._isEditingCode = false;\n this._hasUnsavedChanges = false;\n }\n\n BuildCodeSections(): void {\n if (!this._selectedComponent) {\n this._codeSections = [];\n return;\n }\n\n // Use the in-memory spec (which may be the resolved version from the React bridge)\n // rather than re-parsing from the entity's raw Specification field.\n const spec = this._componentSpec || this.GetComponentSpec(this._selectedComponent);\n const sections: CodeSection[] = [];\n\n const mainCode = spec.code || '// No code available';\n sections.push({\n title: spec.name || 'Main Component',\n code: mainCode,\n originalCode: mainCode,\n isDependency: false\n });\n\n if (spec.dependencies && Array.isArray(spec.dependencies)) {\n spec.dependencies.forEach((dep: ComponentSpec, index: number) => {\n const depCode = dep.code || '// No code available';\n sections.push({\n title: dep.name || `Dependency ${index + 1}`,\n code: depCode,\n originalCode: depCode,\n isDependency: true,\n index\n });\n });\n }\n\n this._codeSections = sections;\n }\n\n /**\n * Apply spec changes from the JSON editor back to the component\n */\n ApplySpecChanges(): boolean {\n try {\n const parsed = JSON.parse(this._editableSpec);\n\n if (this._selectedComponent) {\n if (this.IsFileLoadedComponent(this._selectedComponent)) {\n this._selectedComponent.specification = parsed;\n } else {\n (this._selectedComponent as MJComponentEntityExtended).Specification = JSON.stringify(parsed);\n }\n\n this._componentSpec = parsed;\n this._editableCode = parsed.code || '// No code available';\n this.BuildCodeSections();\n this._isEditingSpec = false;\n this._hasUnsavedChanges = true;\n this.RefreshComponent.emit();\n this.StateChanged.emit();\n return true;\n }\n } catch (error) {\n console.error('Invalid JSON in spec editor:', error);\n }\n return false;\n }\n\n /**\n * Apply code changes from the code editor back to the spec\n */\n ApplyCodeChanges(): boolean {\n if (!this._selectedComponent) return false;\n\n try {\n const spec = JSON.parse(this._editableSpec);\n\n if (this._codeSections.length > 0) {\n spec.code = this._codeSections[0].code;\n\n if (this._codeSections.length > 1 && spec.dependencies) {\n for (let i = 1; i < this._codeSections.length; i++) {\n const section = this._codeSections[i];\n if (section.index !== undefined && spec.dependencies[section.index]) {\n spec.dependencies[section.index].code = section.code;\n }\n }\n }\n }\n\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n const parsed = ParseJSONRecursive(spec, parseOptions);\n this._editableSpec = JSON.stringify(parsed, null, 2);\n\n if (this.IsFileLoadedComponent(this._selectedComponent)) {\n this._selectedComponent.specification = spec;\n } else {\n (this._selectedComponent as MJComponentEntityExtended).Specification = JSON.stringify(spec);\n }\n\n this._componentSpec = spec;\n this._isEditingCode = false;\n this._hasUnsavedChanges = true;\n this.RefreshComponent.emit();\n this.StateChanged.emit();\n return true;\n } catch (error) {\n console.error('Error applying code changes:', error);\n }\n return false;\n }\n\n /**\n * Update the internal spec with the fully resolved version returned by the\n * React bridge after it loads the component hierarchy. This replaces\n * registry-reference stubs with real code so code sections show actual source.\n * Does NOT mark the component as having unsaved changes or trigger a re-render.\n */\n UpdateWithResolvedSpec(resolvedSpec: ComponentSpec): void {\n if (!this._selectedComponent) return;\n\n // Only update if the resolved spec actually differs (has real code)\n const current = this._componentSpec;\n if (!current || current === resolvedSpec) return;\n\n this._componentSpec = resolvedSpec;\n\n // Update editable spec JSON so Spec/Requirements/Design/Data tabs reflect resolved data\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n const parsed = ParseJSONRecursive(resolvedSpec, parseOptions);\n this._editableSpec = JSON.stringify(parsed, null, 2);\n\n // Update editable code with the resolved main code\n this._editableCode = resolvedSpec.code || '// No code available';\n\n // Rebuild code sections so the editor shows resolved dependency code\n this.BuildCodeSections();\n this.StateChanged.emit();\n }\n\n /**\n * Update the component spec directly (e.g., from AI)\n */\n UpdateSpec(newSpec: ComponentSpec): void {\n if (!this._selectedComponent) return;\n\n if (this.IsFileLoadedComponent(this._selectedComponent)) {\n this._selectedComponent.specification = newSpec;\n } else {\n (this._selectedComponent as MJComponentEntityExtended).Specification = JSON.stringify(newSpec);\n }\n\n this._componentSpec = newSpec;\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n const parsed = ParseJSONRecursive(newSpec, parseOptions);\n this._editableSpec = JSON.stringify(parsed, null, 2);\n this._editableCode = newSpec.code || '// No code available';\n this.BuildCodeSections();\n this._isEditingSpec = false;\n this._isEditingCode = false;\n this._hasUnsavedChanges = true;\n this.SpecUpdated.emit(newSpec);\n this.RefreshComponent.emit();\n this.StateChanged.emit();\n }\n\n // ============================================================\n // FILE-LOADED COMPONENT MANAGEMENT\n // ============================================================\n\n AddFileLoadedComponent(component: FileLoadedComponent): void {\n this._fileLoadedComponents.push(component);\n this.ApplyFilters();\n this.StateChanged.emit();\n }\n\n RemoveFileLoadedComponent(component: FileLoadedComponent): void {\n const index = this._fileLoadedComponents.indexOf(component);\n if (index > -1) {\n this._fileLoadedComponents.splice(index, 1);\n if (this._selectedComponent === component) {\n this.StopComponent();\n }\n if (this._expandedComponent === component) {\n this._expandedComponent = null;\n }\n this.ApplyFilters();\n this.StateChanged.emit();\n }\n }\n\n GenerateId(): string {\n return 'file-' + Date.now() + '-' + Math.random().toString(36).substr(2, 9);\n }\n\n // ============================================================\n // UI HELPERS\n // ============================================================\n\n GetComponentTypeIcon(type: string | null | undefined): string {\n const icons: Record<string, string> = {\n 'Report': 'fa-file-alt',\n 'Dashboard': 'fa-tachometer-alt',\n 'Form': 'fa-edit',\n 'Chart': 'fa-chart-bar',\n 'Table': 'fa-table',\n 'Widget': 'fa-cube',\n 'Navigation': 'fa-compass',\n 'Search': 'fa-search',\n 'Utility': 'fa-cog'\n };\n return icons[type || ''] || 'fa-puzzle-piece';\n }\n\n GetComponentTypeColor(type: string | null | undefined): string {\n const colors: Record<string, string> = {\n 'Report': '#3B82F6',\n 'Dashboard': '#8B5CF6',\n 'Form': '#10B981',\n 'Chart': '#F97316',\n 'Table': '#06B6D4',\n 'Widget': '#EC4899',\n 'Navigation': '#6366F1',\n 'Search': '#14B8A6',\n 'Utility': '#64748B'\n };\n return colors[type || ''] || '#9CA3AF';\n }\n\n GetNamespaceColor(namespace: string | undefined): string {\n if (!namespace || namespace === 'Uncategorized') return '#6C757D';\n const category = this.extractCategoryFromNamespace(namespace);\n return this.getCategoryColor(category);\n }\n\n FormatNamespace(namespace: string | undefined): string {\n if (!namespace || namespace === 'Uncategorized') return 'Uncategorized';\n const parts = namespace.split('/').filter(p => p.length > 0);\n if (parts.length > 3) {\n return `${parts[0]} / ... / ${parts[parts.length - 1]}`;\n }\n return parts.join(' / ');\n }\n\n /**\n * Get the current spec, preferring edited version if available\n */\n GetCurrentSpec(): ComponentSpec | null {\n if (!this._selectedComponent || !this._componentSpec) return null;\n\n if (this._isEditingSpec || this._isEditingCode) {\n try {\n return JSON.parse(this._editableSpec);\n } catch {\n return this._componentSpec;\n }\n }\n return this._componentSpec;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"component-studio-state.service.js","sourceRoot":"","sources":["../../../src/ComponentStudio/services/component-studio-state.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, EventEmitter } from '@angular/core';\nimport { RunView, CompositeKey, Metadata, IMetadataProvider } from '@memberjunction/core';\nimport { MJComponentEntityExtended } from '@memberjunction/core-entities';\nimport { ComponentSpec } from '@memberjunction/interactive-component-types';\nimport { ParseJSONRecursive, ParseJSONOptions } from '@memberjunction/global';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\n/**\n * Interface for components loaded from files, text, or artifacts (not from database)\n */\nexport interface FileLoadedComponent {\n id: string;\n name: string;\n description?: string;\n specification: ComponentSpec;\n filename: string;\n loadedAt: Date;\n isFileLoaded: true;\n type?: string;\n status?: string;\n sourceArtifactID?: string;\n sourceVersionID?: string;\n}\n\n/**\n * Union type for both database and file-loaded components\n */\nexport type DisplayComponent = (MJComponentEntityExtended & { isFileLoaded?: false }) | FileLoadedComponent;\n\n/**\n * Category for filtering\n */\nexport interface Category {\n name: string;\n count: number;\n color: string;\n}\n\n/**\n * Component error info\n */\nexport interface ComponentError {\n type: string;\n message: string;\n technicalDetails?: Record<string, unknown> | string;\n}\n\n/**\n * Code section for the code editor tabbed panel\n */\nexport interface CodeSection {\n title: string;\n code: string;\n originalCode: string;\n isDependency: boolean;\n index?: number;\n}\n\n/**\n * Central state management service for Component Studio.\n * Decouples state from components so sub-components can share state.\n */\n@Injectable()\nexport class ComponentStudioStateService {\n\n // --- Component Data ---\n private _dbComponents: MJComponentEntityExtended[] = [];\n private _fileLoadedComponents: FileLoadedComponent[] = [];\n\n get DbComponents(): MJComponentEntityExtended[] { return this._dbComponents; }\n get FileLoadedComponents(): FileLoadedComponent[] { return this._fileLoadedComponents; }\n\n /** Combined list of all components (file-loaded first, then DB) */\n get AllComponents(): DisplayComponent[] {\n return [\n ...this._fileLoadedComponents,\n ...this._dbComponents\n ] as DisplayComponent[];\n }\n\n // --- Filtered Components ---\n private _filteredComponents: DisplayComponent[] = [];\n get FilteredComponents(): DisplayComponent[] { return this._filteredComponents; }\n\n // --- Selection & Running ---\n private _selectedComponent: DisplayComponent | null = null;\n private _expandedComponent: DisplayComponent | null = null;\n private _componentSpec: ComponentSpec | null = null;\n private _isRunning = false;\n\n get SelectedComponent(): DisplayComponent | null { return this._selectedComponent; }\n set SelectedComponent(value: DisplayComponent | null) { this._selectedComponent = value; }\n\n get ExpandedComponent(): DisplayComponent | null { return this._expandedComponent; }\n set ExpandedComponent(value: DisplayComponent | null) { this._expandedComponent = value; }\n\n get ComponentSpec(): ComponentSpec | null { return this._componentSpec; }\n set ComponentSpec(value: ComponentSpec | null) { this._componentSpec = value; }\n\n get IsRunning(): boolean { return this._isRunning; }\n set IsRunning(value: boolean) { this._isRunning = value; }\n\n // --- Loading ---\n private _isLoading = true;\n get IsLoading(): boolean { return this._isLoading; }\n\n // --- Error ---\n private _currentError: ComponentError | null = null;\n get CurrentError(): ComponentError | null { return this._currentError; }\n set CurrentError(value: ComponentError | null) { this._currentError = value; }\n\n // --- Filters ---\n private _searchQuery = '';\n private _selectedCategories: Set<string> = new Set();\n private _showOnlyFavorites = false;\n private _showDeprecatedComponents = false;\n private _showAllCategories = false;\n private _isFilterPanelExpanded = false;\n\n get SearchQuery(): string { return this._searchQuery; }\n set SearchQuery(value: string) {\n this._searchQuery = value;\n this.ApplyFilters();\n }\n\n get SelectedCategories(): Set<string> { return this._selectedCategories; }\n get ShowOnlyFavorites(): boolean { return this._showOnlyFavorites; }\n get ShowDeprecatedComponents(): boolean { return this._showDeprecatedComponents; }\n get ShowAllCategories(): boolean { return this._showAllCategories; }\n get IsFilterPanelExpanded(): boolean { return this._isFilterPanelExpanded; }\n\n // --- Favorites ---\n private _favoriteComponents: Set<string> = new Set();\n get FavoriteComponents(): Set<string> { return this._favoriteComponents; }\n\n // --- Categories ---\n private _availableCategories: Category[] = [];\n get AvailableCategories(): Category[] { return this._availableCategories; }\n\n // --- Editor State ---\n private _editableSpec = '';\n private _editableCode = '';\n private _codeSections: CodeSection[] = [];\n private _isEditingSpec = false;\n private _isEditingCode = false;\n private _activeTab = 0;\n private _isDetailsPaneCollapsed = true;\n\n get EditableSpec(): string { return this._editableSpec; }\n set EditableSpec(value: string) { this._editableSpec = value; }\n\n get EditableCode(): string { return this._editableCode; }\n set EditableCode(value: string) { this._editableCode = value; }\n\n get CodeSections(): CodeSection[] { return this._codeSections; }\n\n get IsEditingSpec(): boolean { return this._isEditingSpec; }\n set IsEditingSpec(value: boolean) { this._isEditingSpec = value; }\n\n get IsEditingCode(): boolean { return this._isEditingCode; }\n set IsEditingCode(value: boolean) { this._isEditingCode = value; }\n\n get ActiveTab(): number { return this._activeTab; }\n set ActiveTab(value: number) { this._activeTab = value; }\n\n get IsDetailsPaneCollapsed(): boolean { return this._isDetailsPaneCollapsed; }\n set IsDetailsPaneCollapsed(value: boolean) { this._isDetailsPaneCollapsed = value; }\n\n // --- Unsaved changes tracking ---\n private _hasUnsavedChanges = false;\n private _hasResolvedSpec = false;\n get HasUnsavedChanges(): boolean { return this._hasUnsavedChanges; }\n set HasUnsavedChanges(value: boolean) { this._hasUnsavedChanges = value; }\n\n // --- AI Panel ---\n private _isAIPanelCollapsed = false;\n get IsAIPanelCollapsed(): boolean { return this._isAIPanelCollapsed; }\n set IsAIPanelCollapsed(value: boolean) { this._isAIPanelCollapsed = value; }\n\n // --- Events ---\n /** Emitted when state changes require UI update */\n StateChanged = new EventEmitter<void>();\n\n /** Emitted when the running component needs to refresh */\n RefreshComponent = new EventEmitter<void>();\n\n /** Emitted when an error should be sent to AI for diagnosis */\n SendErrorToAI = new EventEmitter<ComponentError>();\n\n /** Emitted when a component spec is updated (e.g. by AI) */\n SpecUpdated = new EventEmitter<ComponentSpec>();\n\n private _provider: IMetadataProvider | null = null;\n\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\n public get Provider(): IMetadataProvider {\n return this._provider ?? Metadata.Provider;\n }\n\n private get metadata(): IMetadataProvider {\n return this.Provider;\n }\n\n // ============================================================\n // DATA LOADING\n // ============================================================\n\n async LoadComponents(): Promise<void> {\n this._isLoading = true;\n this.StateChanged.emit();\n\n try {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const result = await rv.RunView<MJComponentEntityExtended>({\n EntityName: 'MJ: Components',\n ExtraFilter: 'HasRequiredCustomProps = 0',\n OrderBy: 'Name',\n MaxRows: 1000,\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this._dbComponents = result.Results || [];\n this.ApplyFilters();\n this._isLoading = false;\n this.StateChanged.emit();\n\n // Load favorites in background\n this.loadFavorites();\n } else {\n console.error('Failed to load components:', result.ErrorMessage);\n this._isLoading = false;\n this.StateChanged.emit();\n }\n } catch (error) {\n console.error('Error loading components:', error);\n this._isLoading = false;\n this.StateChanged.emit();\n }\n }\n\n private async loadFavorites(): Promise<void> {\n const currentUserId = this.metadata.CurrentUser?.ID;\n if (!currentUserId) return;\n\n this._favoriteComponents.clear();\n\n const favoritePromises = this._dbComponents.map(component =>\n this.metadata.GetRecordFavoriteStatus(\n currentUserId,\n 'MJ: Components',\n CompositeKey.FromID(component.ID)\n )\n .then(isFavorite => ({ componentId: component.ID, isFavorite }))\n .catch(() => ({ componentId: component.ID, isFavorite: false }))\n );\n\n const results = await Promise.all(favoritePromises);\n for (const result of results) {\n if (result.isFavorite) {\n this._favoriteComponents.add(result.componentId);\n }\n }\n this.StateChanged.emit();\n }\n\n // ============================================================\n // FILTERING\n // ============================================================\n\n ApplyFilters(): void {\n this.buildCategories();\n\n let filtered = [...this.AllComponents];\n\n // Filter out deprecated\n if (!this._showDeprecatedComponents) {\n filtered = filtered.filter(c => this.GetComponentStatus(c) !== 'Deprecated');\n }\n\n // Favorites filter\n if (this._showOnlyFavorites) {\n filtered = filtered.filter(c => this.IsFavorite(c));\n }\n\n // Category filter\n if (this._selectedCategories.size > 0) {\n filtered = filtered.filter(c => {\n const namespace = this.GetComponentNamespace(c) || 'Uncategorized';\n const category = this.extractCategoryFromNamespace(namespace);\n return this._selectedCategories.has(category);\n });\n }\n\n // Search filter\n if (this._searchQuery) {\n const query = this._searchQuery.toLowerCase();\n filtered = filtered.filter(c => {\n const name = this.GetComponentName(c)?.toLowerCase() || '';\n const description = this.GetComponentDescription(c)?.toLowerCase() || '';\n const type = this.GetComponentType(c)?.toLowerCase() || '';\n const namespace = this.GetComponentNamespace(c)?.toLowerCase() || '';\n return name.includes(query) || description.includes(query) || type.includes(query) || namespace.includes(query);\n });\n }\n\n this._filteredComponents = filtered;\n }\n\n private buildCategories(): void {\n const categoryMap = new Map<string, number>();\n for (const component of this.AllComponents) {\n const namespace = this.GetComponentNamespace(component) || 'Uncategorized';\n const category = this.extractCategoryFromNamespace(namespace);\n categoryMap.set(category, (categoryMap.get(category) || 0) + 1);\n }\n\n this._availableCategories = Array.from(categoryMap.entries())\n .map(([name, count]) => ({\n name,\n count,\n color: this.getCategoryColor(name)\n }))\n .sort((a, b) => b.count - a.count);\n }\n\n private extractCategoryFromNamespace(namespace: string): string {\n if (!namespace || namespace === 'Uncategorized') return 'Uncategorized';\n const parts = namespace.split('/').filter(p => p.length > 0);\n return parts[0] || 'Uncategorized';\n }\n\n private getCategoryColor(category: string): string {\n const colors = [\n '#3B82F6', '#8B5CF6', '#10B981', '#F97316', '#06B6D4',\n '#EC4899', '#6366F1', '#14B8A6', '#EAB308', '#EF4444',\n ];\n let hash = 0;\n for (let i = 0; i < category.length; i++) {\n hash = category.charCodeAt(i) + ((hash << 5) - hash);\n }\n return colors[Math.abs(hash) % colors.length];\n }\n\n ToggleFilterPanel(): void {\n this._isFilterPanelExpanded = !this._isFilterPanelExpanded;\n this.StateChanged.emit();\n }\n\n ToggleCategory(category: string): void {\n if (this._selectedCategories.has(category)) {\n this._selectedCategories.delete(category);\n } else {\n this._selectedCategories.add(category);\n }\n this.ApplyFilters();\n this.StateChanged.emit();\n }\n\n ToggleShowOnlyFavorites(): void {\n this._showOnlyFavorites = !this._showOnlyFavorites;\n this.ApplyFilters();\n this.StateChanged.emit();\n }\n\n ToggleShowDeprecatedComponents(): void {\n this._showDeprecatedComponents = !this._showDeprecatedComponents;\n this.ApplyFilters();\n this.StateChanged.emit();\n }\n\n ToggleShowAllCategories(): void {\n this._showAllCategories = !this._showAllCategories;\n this.StateChanged.emit();\n }\n\n ClearAllFilters(): void {\n this._selectedCategories.clear();\n this._showOnlyFavorites = false;\n this._showDeprecatedComponents = false;\n this.ApplyFilters();\n this.StateChanged.emit();\n }\n\n GetActiveFilterCount(): number {\n let count = 0;\n if (this._showOnlyFavorites) count++;\n if (this._showDeprecatedComponents) count++;\n count += this._selectedCategories.size;\n return count;\n }\n\n GetDeprecatedCount(): number {\n return this.AllComponents.filter(c => this.GetComponentStatus(c) === 'Deprecated').length;\n }\n\n GetVisibleCategories(): Category[] {\n return this._showAllCategories ? this._availableCategories : this._availableCategories.slice(0, 5);\n }\n\n IsCategorySelected(category: string): boolean {\n return this._selectedCategories.has(category);\n }\n\n // ============================================================\n // FAVORITES\n // ============================================================\n\n IsFavorite(component: DisplayComponent): boolean {\n if (this.IsFileLoadedComponent(component)) return false;\n return this._favoriteComponents.has(this.GetComponentId(component));\n }\n\n async ToggleFavorite(component: DisplayComponent): Promise<void> {\n if (this.IsFileLoadedComponent(component)) return;\n\n const currentUserId = this.metadata.CurrentUser?.ID;\n if (!currentUserId) return;\n\n const componentId = this.GetComponentId(component);\n const isFavorite = this._favoriteComponents.has(componentId);\n\n try {\n await this.metadata.SetRecordFavoriteStatus(\n currentUserId,\n 'MJ: Components',\n CompositeKey.FromID(componentId),\n !isFavorite,\n this.metadata.CurrentUser\n );\n\n if (isFavorite) {\n this._favoriteComponents.delete(componentId);\n } else {\n this._favoriteComponents.add(componentId);\n }\n this.StateChanged.emit();\n } catch (error) {\n console.error('Error toggling favorite status:', error);\n }\n }\n\n // ============================================================\n // COMPONENT ACCESSORS (for union type)\n // ============================================================\n\n IsFileLoadedComponent(component: DisplayComponent): component is FileLoadedComponent {\n return component.isFileLoaded === true;\n }\n\n GetComponentName(component: DisplayComponent): string {\n return component.isFileLoaded ? component.name : component.Name;\n }\n\n GetComponentDescription(component: DisplayComponent): string | undefined {\n return component.isFileLoaded ? component.description : (component.Description || undefined);\n }\n\n GetComponentType(component: DisplayComponent): string | undefined {\n return component.isFileLoaded ? component.type : (component.Type || undefined);\n }\n\n GetComponentStatus(component: DisplayComponent): string | undefined {\n return component.isFileLoaded ? component.status : (component.Status || undefined);\n }\n\n GetComponentVersion(component: DisplayComponent): string {\n return component.isFileLoaded ? '1.0.0' : (component.Version || '1.0.0');\n }\n\n GetComponentSpec(component: DisplayComponent): ComponentSpec {\n return component.isFileLoaded ? component.specification : JSON.parse(component.Specification);\n }\n\n GetComponentId(component: DisplayComponent): string {\n return component.isFileLoaded ? component.id : component.ID;\n }\n\n GetComponentNamespace(component: DisplayComponent): string | undefined {\n if (component.isFileLoaded) {\n return component.specification.namespace;\n }\n return (component as MJComponentEntityExtended).Namespace || undefined;\n }\n\n GetComponentFilename(component: DisplayComponent): string | undefined {\n return component.isFileLoaded ? component.filename : undefined;\n }\n\n GetComponentLoadedAt(component: DisplayComponent): Date | undefined {\n return component.isFileLoaded ? component.loadedAt : undefined;\n }\n\n GetComponentUpdatedAt(component: DisplayComponent): Date | undefined {\n return !component.isFileLoaded && component.__mj_UpdatedAt ? component.__mj_UpdatedAt : undefined;\n }\n\n // ============================================================\n // COMPONENT RUNNING\n // ============================================================\n\n StartComponent(component: DisplayComponent): void {\n this._selectedComponent = component;\n this._componentSpec = this.GetComponentSpec(component);\n this._isRunning = true;\n this._currentError = null;\n this._isDetailsPaneCollapsed = false;\n this._hasUnsavedChanges = false;\n this._hasResolvedSpec = false;\n this.InitializeEditors();\n this.StateChanged.emit();\n }\n\n StopComponent(): void {\n this._isRunning = false;\n this._selectedComponent = null;\n this._componentSpec = null;\n this._currentError = null;\n this._hasUnsavedChanges = false;\n this._hasResolvedSpec = false;\n this.StateChanged.emit();\n }\n\n RunComponent(component: DisplayComponent): void {\n const componentId = this.GetComponentId(component);\n const selectedId = this._selectedComponent ? this.GetComponentId(this._selectedComponent) : null;\n\n if (this._isRunning && selectedId !== componentId) {\n this.StopComponent();\n }\n this.StartComponent(component);\n }\n\n // ============================================================\n // EDITORS\n // ============================================================\n\n InitializeEditors(): void {\n if (!this._selectedComponent) return;\n\n const spec = this.GetComponentSpec(this._selectedComponent);\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n const parsed = ParseJSONRecursive(spec, parseOptions);\n this._editableSpec = JSON.stringify(parsed, null, 2);\n this._editableCode = spec.code || '// No code available';\n this.BuildCodeSections();\n this._isEditingSpec = false;\n this._isEditingCode = false;\n this._hasUnsavedChanges = false;\n }\n\n BuildCodeSections(): void {\n if (!this._selectedComponent) {\n this._codeSections = [];\n return;\n }\n\n // Use the in-memory spec (which may be the resolved version from the React bridge)\n // rather than re-parsing from the entity's raw Specification field.\n const spec = this._componentSpec || this.GetComponentSpec(this._selectedComponent);\n const sections: CodeSection[] = [];\n\n const mainCode = spec.code || '// No code available';\n sections.push({\n title: spec.name || 'Main Component',\n code: mainCode,\n originalCode: mainCode,\n isDependency: false\n });\n\n if (spec.dependencies && Array.isArray(spec.dependencies)) {\n spec.dependencies.forEach((dep: ComponentSpec, index: number) => {\n const depCode = dep.code || '// No code available';\n sections.push({\n title: dep.name || `Dependency ${index + 1}`,\n code: depCode,\n originalCode: depCode,\n isDependency: true,\n index\n });\n });\n }\n\n this._codeSections = sections;\n }\n\n /**\n * Apply spec changes from the JSON editor back to the component\n */\n ApplySpecChanges(): boolean {\n try {\n const parsed = JSON.parse(this._editableSpec);\n\n if (this._selectedComponent) {\n if (this.IsFileLoadedComponent(this._selectedComponent)) {\n this._selectedComponent.specification = parsed;\n } else {\n (this._selectedComponent as MJComponentEntityExtended).Specification = JSON.stringify(parsed);\n }\n\n this._componentSpec = parsed;\n this._editableCode = parsed.code || '// No code available';\n this.BuildCodeSections();\n this._isEditingSpec = false;\n this._hasUnsavedChanges = true;\n this.RefreshComponent.emit();\n this.StateChanged.emit();\n return true;\n }\n } catch (error) {\n console.error('Invalid JSON in spec editor:', error);\n }\n return false;\n }\n\n /**\n * Apply code changes from the code editor back to the spec\n */\n ApplyCodeChanges(): boolean {\n if (!this._selectedComponent) return false;\n\n try {\n const spec = JSON.parse(this._editableSpec);\n\n if (this._codeSections.length > 0) {\n spec.code = this._codeSections[0].code;\n\n if (this._codeSections.length > 1 && spec.dependencies) {\n for (let i = 1; i < this._codeSections.length; i++) {\n const section = this._codeSections[i];\n if (section.index !== undefined && spec.dependencies[section.index]) {\n spec.dependencies[section.index].code = section.code;\n }\n }\n }\n }\n\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n const parsed = ParseJSONRecursive(spec, parseOptions);\n this._editableSpec = JSON.stringify(parsed, null, 2);\n\n if (this.IsFileLoadedComponent(this._selectedComponent)) {\n this._selectedComponent.specification = spec;\n } else {\n (this._selectedComponent as MJComponentEntityExtended).Specification = JSON.stringify(spec);\n }\n\n this._componentSpec = spec;\n this._isEditingCode = false;\n this._hasUnsavedChanges = true;\n this.RefreshComponent.emit();\n this.StateChanged.emit();\n return true;\n } catch (error) {\n console.error('Error applying code changes:', error);\n }\n return false;\n }\n\n /**\n * Update the internal spec with the fully resolved version returned by the\n * React bridge after it loads the component hierarchy. This replaces\n * registry-reference stubs with real code so code sections show actual source.\n * Does NOT mark the component as having unsaved changes or trigger a re-render.\n *\n * Runs at most once per component load. The bridge re-resolves from the registry\n * on every refresh (including the refresh triggered by Apply Changes), and we\n * must not let that round-trip clobber edits the user has already applied.\n */\n UpdateWithResolvedSpec(resolvedSpec: ComponentSpec): void {\n if (!this._selectedComponent) return;\n if (this._hasResolvedSpec) return;\n\n // Only update if the resolved spec actually differs (has real code)\n const current = this._componentSpec;\n if (!current || current === resolvedSpec) return;\n\n this._hasResolvedSpec = true;\n this._componentSpec = resolvedSpec;\n\n // Update editable spec JSON so Spec/Requirements/Design/Data tabs reflect resolved data\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n const parsed = ParseJSONRecursive(resolvedSpec, parseOptions);\n this._editableSpec = JSON.stringify(parsed, null, 2);\n\n // Update editable code with the resolved main code\n this._editableCode = resolvedSpec.code || '// No code available';\n\n // Rebuild code sections so the editor shows resolved dependency code\n this.BuildCodeSections();\n this.StateChanged.emit();\n }\n\n /**\n * Update the component spec directly (e.g., from AI)\n */\n UpdateSpec(newSpec: ComponentSpec): void {\n if (!this._selectedComponent) return;\n\n if (this.IsFileLoadedComponent(this._selectedComponent)) {\n this._selectedComponent.specification = newSpec;\n } else {\n (this._selectedComponent as MJComponentEntityExtended).Specification = JSON.stringify(newSpec);\n }\n\n this._componentSpec = newSpec;\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n const parsed = ParseJSONRecursive(newSpec, parseOptions);\n this._editableSpec = JSON.stringify(parsed, null, 2);\n this._editableCode = newSpec.code || '// No code available';\n this.BuildCodeSections();\n this._isEditingSpec = false;\n this._isEditingCode = false;\n this._hasUnsavedChanges = true;\n this.SpecUpdated.emit(newSpec);\n this.RefreshComponent.emit();\n this.StateChanged.emit();\n }\n\n // ============================================================\n // FILE-LOADED COMPONENT MANAGEMENT\n // ============================================================\n\n AddFileLoadedComponent(component: FileLoadedComponent): void {\n this._fileLoadedComponents.push(component);\n this.ApplyFilters();\n this.StateChanged.emit();\n }\n\n RemoveFileLoadedComponent(component: FileLoadedComponent): void {\n const index = this._fileLoadedComponents.indexOf(component);\n if (index > -1) {\n this._fileLoadedComponents.splice(index, 1);\n if (this._selectedComponent === component) {\n this.StopComponent();\n }\n if (this._expandedComponent === component) {\n this._expandedComponent = null;\n }\n this.ApplyFilters();\n this.StateChanged.emit();\n }\n }\n\n GenerateId(): string {\n return 'file-' + Date.now() + '-' + Math.random().toString(36).substr(2, 9);\n }\n\n // ============================================================\n // UI HELPERS\n // ============================================================\n\n GetComponentTypeIcon(type: string | null | undefined): string {\n const icons: Record<string, string> = {\n 'Report': 'fa-file-alt',\n 'Dashboard': 'fa-tachometer-alt',\n 'Form': 'fa-edit',\n 'Chart': 'fa-chart-bar',\n 'Table': 'fa-table',\n 'Widget': 'fa-cube',\n 'Navigation': 'fa-compass',\n 'Search': 'fa-search',\n 'Utility': 'fa-cog'\n };\n return icons[type || ''] || 'fa-puzzle-piece';\n }\n\n GetComponentTypeColor(type: string | null | undefined): string {\n const colors: Record<string, string> = {\n 'Report': '#3B82F6',\n 'Dashboard': '#8B5CF6',\n 'Form': '#10B981',\n 'Chart': '#F97316',\n 'Table': '#06B6D4',\n 'Widget': '#EC4899',\n 'Navigation': '#6366F1',\n 'Search': '#14B8A6',\n 'Utility': '#64748B'\n };\n return colors[type || ''] || '#9CA3AF';\n }\n\n GetNamespaceColor(namespace: string | undefined): string {\n if (!namespace || namespace === 'Uncategorized') return '#6C757D';\n const category = this.extractCategoryFromNamespace(namespace);\n return this.getCategoryColor(category);\n }\n\n FormatNamespace(namespace: string | undefined): string {\n if (!namespace || namespace === 'Uncategorized') return 'Uncategorized';\n const parts = namespace.split('/').filter(p => p.length > 0);\n if (parts.length > 3) {\n return `${parts[0]} / ... / ${parts[parts.length - 1]}`;\n }\n return parts.join(' / ');\n }\n\n /**\n * Get the current spec, preferring edited version if available\n */\n GetCurrentSpec(): ComponentSpec | null {\n if (!this._selectedComponent || !this._componentSpec) return null;\n\n if (this._isEditingSpec || this._isEditingCode) {\n try {\n return JSON.parse(this._editableSpec);\n } catch {\n return this._componentSpec;\n }\n }\n return this._componentSpec;\n }\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IMetadataProvider } from '@memberjunction/core';
|
|
1
2
|
import { ComponentStudioStateService } from './component-studio-state.service';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
/**
|
|
@@ -21,7 +22,11 @@ export declare class ComponentVersionService {
|
|
|
21
22
|
private _versionHistory;
|
|
22
23
|
private _componentArtifactTypeID;
|
|
23
24
|
private _cachedConversationID;
|
|
24
|
-
private
|
|
25
|
+
private _provider;
|
|
26
|
+
/** Set the metadata provider this service should use. Components should call this after injection. */
|
|
27
|
+
set Provider(value: IMetadataProvider | null);
|
|
28
|
+
get Provider(): IMetadataProvider;
|
|
29
|
+
private get metadata();
|
|
25
30
|
get CurrentArtifactID(): string | null;
|
|
26
31
|
set CurrentArtifactID(value: string | null);
|
|
27
32
|
get CurrentVersionNumber(): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-version.service.d.ts","sourceRoot":"","sources":["../../../src/ComponentStudio/services/component-version.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"component-version.service.d.ts","sourceRoot":"","sources":["../../../src/ComponentStudio/services/component-version.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAO5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;;AAE/E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBACa,uBAAuB;IA+BtB,OAAO,CAAC,YAAY;IA5BhC,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,wBAAwB,CAAuB;IACvD,OAAO,CAAC,qBAAqB,CAAuB;IAEpD,OAAO,CAAC,SAAS,CAAkC;IAEnD,sGAAsG;IACtG,IAAW,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,EAElD;IAED,IAAW,QAAQ,IAAI,iBAAiB,CAEvC;IAED,OAAO,KAAK,QAAQ,GAEnB;IAED,IAAI,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAAoC;IAC1E,IAAI,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAsC;IAEhF,IAAI,oBAAoB,IAAI,MAAM,CAAuC;IAEzE,IAAI,cAAc,IAAI,mBAAmB,EAAE,CAAiC;gBAExD,YAAY,EAAE,2BAA2B;IAM7D;;;;;OAKG;IACG,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiCrD;;;;OAIG;IACG,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoC9D;;;;OAIG;IACG,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAM5E;;;;;OAKG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BzD;;;;;OAKG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAYxG;;OAEG;IACH,KAAK,IAAI,IAAI;IAWb;;;OAGG;YACW,oBAAoB;IAQlC;;OAEG;YACW,cAAc;IAmC5B;;;OAGG;YACW,8BAA8B;IAsB5C;;;OAGG;YACW,qBAAqB;IA6CnC;;OAEG;YACW,wBAAwB;IAkBtC;;OAEG;YACW,aAAa;IAsB3B;;OAEG;YACW,iBAAiB;IAa/B;;OAEG;YACW,uBAAuB;IAgBrC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;YACW,mBAAmB;IAiBjC;;OAEG;IACH,OAAO,CAAC,wBAAwB;yCA3brB,uBAAuB;6CAAvB,uBAAuB;CAmcnC"}
|
|
@@ -14,7 +14,17 @@ export class ComponentVersionService {
|
|
|
14
14
|
_versionHistory = [];
|
|
15
15
|
_componentArtifactTypeID = null;
|
|
16
16
|
_cachedConversationID = null;
|
|
17
|
-
|
|
17
|
+
_provider = null;
|
|
18
|
+
/** Set the metadata provider this service should use. Components should call this after injection. */
|
|
19
|
+
set Provider(value) {
|
|
20
|
+
this._provider = value;
|
|
21
|
+
}
|
|
22
|
+
get Provider() {
|
|
23
|
+
return this._provider ?? Metadata.Provider;
|
|
24
|
+
}
|
|
25
|
+
get metadata() {
|
|
26
|
+
return this.Provider;
|
|
27
|
+
}
|
|
18
28
|
get CurrentArtifactID() { return this._currentArtifactID; }
|
|
19
29
|
set CurrentArtifactID(value) { this._currentArtifactID = value; }
|
|
20
30
|
get CurrentVersionNumber() { return this._currentVersionNumber; }
|
|
@@ -217,7 +227,7 @@ export class ComponentVersionService {
|
|
|
217
227
|
if (this._componentArtifactTypeID) {
|
|
218
228
|
return this._componentArtifactTypeID;
|
|
219
229
|
}
|
|
220
|
-
const rv =
|
|
230
|
+
const rv = RunView.FromMetadataProvider(this.Provider);
|
|
221
231
|
const result = await rv.RunView({
|
|
222
232
|
EntityName: 'MJ: Artifact Types',
|
|
223
233
|
ExtraFilter: `Name='Component'`,
|
|
@@ -244,7 +254,7 @@ export class ComponentVersionService {
|
|
|
244
254
|
return null;
|
|
245
255
|
}
|
|
246
256
|
// Look for an existing Component Studio conversation for this user
|
|
247
|
-
const rv =
|
|
257
|
+
const rv = RunView.FromMetadataProvider(this.Provider);
|
|
248
258
|
const result = await rv.RunView({
|
|
249
259
|
EntityName: 'MJ: Conversations',
|
|
250
260
|
ExtraFilter: `UserID='${currentUser.ID}' AND Name='Component Studio'`,
|
|
@@ -276,7 +286,7 @@ export class ComponentVersionService {
|
|
|
276
286
|
* Determines the next version number for the given artifact.
|
|
277
287
|
*/
|
|
278
288
|
async resolveNextVersionNumber(artifactId) {
|
|
279
|
-
const rv =
|
|
289
|
+
const rv = RunView.FromMetadataProvider(this.Provider);
|
|
280
290
|
const result = await rv.RunView({
|
|
281
291
|
EntityName: 'MJ: Conversation Artifact Versions',
|
|
282
292
|
ExtraFilter: `ConversationArtifactID='${artifactId}'`,
|
|
@@ -325,7 +335,7 @@ export class ComponentVersionService {
|
|
|
325
335
|
* Finds the latest version entity for the given artifact.
|
|
326
336
|
*/
|
|
327
337
|
async findLatestVersionEntity(artifactId) {
|
|
328
|
-
const rv =
|
|
338
|
+
const rv = RunView.FromMetadataProvider(this.Provider);
|
|
329
339
|
const result = await rv.RunView({
|
|
330
340
|
EntityName: 'MJ: Conversation Artifact Versions',
|
|
331
341
|
ExtraFilter: `ConversationArtifactID='${artifactId}'`,
|
|
@@ -361,7 +371,7 @@ export class ComponentVersionService {
|
|
|
361
371
|
* Fetches the full version history for an artifact, ordered newest-first.
|
|
362
372
|
*/
|
|
363
373
|
async fetchVersionHistory(artifactId) {
|
|
364
|
-
const rv =
|
|
374
|
+
const rv = RunView.FromMetadataProvider(this.Provider);
|
|
365
375
|
const result = await rv.RunView({
|
|
366
376
|
EntityName: 'MJ: Conversation Artifact Versions',
|
|
367
377
|
ExtraFilter: `ConversationArtifactID='${artifactId}'`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-version.service.js","sourceRoot":"","sources":["../../../src/ComponentStudio/services/component-version.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;;;AAoBzD;;;GAGG;AAEH,MAAM,OAAO,uBAAuB;IAkBd;IAhBpB,yBAAyB;IACjB,kBAAkB,GAAkB,IAAI,CAAC;IACzC,qBAAqB,GAAG,CAAC,CAAC;IAC1B,eAAe,GAA0B,EAAE,CAAC;IAC5C,wBAAwB,GAAkB,IAAI,CAAC;IAC/C,qBAAqB,GAAkB,IAAI,CAAC;IAE5C,QAAQ,GAAa,IAAI,QAAQ,EAAE,CAAC;IAE5C,IAAI,iBAAiB,KAAoB,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC1E,IAAI,iBAAiB,CAAC,KAAoB,IAAI,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,CAAC,CAAC;IAEhF,IAAI,oBAAoB,KAAa,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAEzE,IAAI,cAAc,KAA4B,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAE5E,YAAoB,YAAyC;QAAzC,iBAAY,GAAZ,YAAY,CAA6B;IAAG,CAAC;IAEjE,+DAA+D;IAC/D,aAAa;IACb,+DAA+D;IAE/D;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,OAAgB;QAChC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;gBAC7E,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;gBAChF,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;YACpE,MAAM,cAAc,GAAG,OAAO,IAAI,iBAAiB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YAE9E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;YACtF,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;gBACrC,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC;gBACzC,6BAA6B;gBAC7B,IAAI,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;gBAClE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAC;YACvE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,oBAAoB,CAAC,OAAgB;QACzC,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,qBAAqB,KAAK,CAAC,EAAE,CAAC;gBACjE,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;gBACxE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBACrE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAClF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;gBAChF,OAAO,KAAK,CAAC;YACf,CAAC;YAED,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACtD,IAAI,OAAO,EAAE,CAAC;gBACZ,aAAa,CAAC,QAAQ,GAAG,OAAO,CAAC;YACnC,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAC/E,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0DAA0D,EAAE,KAAK,CAAC,CAAC;YACjF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CAAC,UAAkB;QACzC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QAC/B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,SAAiB;QACpC,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,SAAS,CAAC,CAAC;gBAC5E,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;gBAC1E,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,qBAAqB,GAAG,aAAa,CAAC,OAAO,CAAC;YACpD,MAAM,cAAc,GAAG,kBAAkB,qBAAqB,EAAE,CAAC;YAEjE,wDAAwD;YACxD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEnC,oEAAoE;YACpE,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;YAC1E,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,UAAkB,EAAE,UAAkB;QACzD,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC7C,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;YAClC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;SACnC,CAAC,CAAC;QAEH,OAAO;YACL,MAAM,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE;YAC/B,KAAK,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE;SAC/B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,oEAAoE;IACtE,CAAC;IAED,+DAA+D;IAC/D,+BAA+B;IAC/B,+DAA+D;IAE/D;;;OAGG;IACK,KAAK,CAAC,oBAAoB,CAAC,IAAmB;QACpD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,kBAAkB,CAAC;QACjC,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,IAAmB;QAC9C,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,8BAA8B,EAAE,CAAC;YACnE,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;gBACvF,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC1D,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;gBAC9F,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAA+B,4BAA4B,CAAC,CAAC;YACjH,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,oBAAoB,CAAC;YAClD,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;YAChD,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;YACzC,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;YACzC,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC;YAE/B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,EAAE,CAAC;gBACtC,OAAO,QAAQ,CAAC,EAAE,CAAC;YACrB,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,8BAA8B;QAC1C,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,wBAAwB,CAAC;QACvC,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAiB;YAC9C,UAAU,EAAE,oBAAoB;YAChC,WAAW,EAAE,kBAAkB;YAC/B,MAAM,EAAE,CAAC,IAAI,CAAC;YACd,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC,wBAAwB,CAAC;QACvC,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,qBAAqB;QACjC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,qBAAqB,CAAC;QACpC,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mEAAmE;QACnE,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAiB;YAC9C,UAAU,EAAE,mBAAmB;YAC/B,WAAW,EAAE,WAAW,WAAW,CAAC,EAAE,+BAA+B;YACrE,MAAM,EAAE,CAAC,IAAI,CAAC;YACd,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC,qBAAqB,CAAC;QACpC,CAAC;QAED,iDAAiD;QACjD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAuB,mBAAmB,CAAC,CAAC;QACpG,YAAY,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC;QACrC,YAAY,CAAC,IAAI,GAAG,kBAAkB,CAAC;QACvC,YAAY,CAAC,IAAI,GAAG,MAAM,CAAC;QAE3B,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,qBAAqB,GAAG,YAAY,CAAC,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,qBAAqB,CAAC;QACpC,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+DAA+D;IAC/D,8BAA8B;IAC9B,+DAA+D;IAE/D;;OAEG;IACK,KAAK,CAAC,wBAAwB,CAAC,UAAkB;QACvD,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAsB;YACnD,UAAU,EAAE,oCAAoC;YAChD,WAAW,EAAE,2BAA2B,UAAU,GAAG;YACrD,MAAM,EAAE,CAAC,SAAS,CAAC;YACnB,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,CAAC,CAAC;IACX,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CACzB,UAAkB,EAClB,aAAqB,EACrB,IAAmB,EACnB,OAAe;QAEf,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CACjD,oCAAoC,CACrC,CAAC;YACF,OAAO,CAAC,sBAAsB,GAAG,UAAU,CAAC;YAC5C,OAAO,CAAC,OAAO,GAAG,aAAa,CAAC;YAChC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;YAE3B,OAAO,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yDAAyD,EAAE,KAAK,CAAC,CAAC;YAChF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QAC/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAChD,oCAAoC,CACrC,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5C,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wDAAwD,EAAE,KAAK,CAAC,CAAC;YAC/E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB,CAAC,UAAkB;QACtD,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAsC;YACnE,UAAU,EAAE,oCAAoC;YAChD,WAAW,EAAE,2BAA2B,UAAU,GAAG;YACrD,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,eAAe;SAC5B,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,aAAkD;QAC5E,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;YACtC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAkB,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2DAA2D,EAAE,KAAK,CAAC,CAAC;YAClF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,2BAA2B;IAC3B,+DAA+D;IAE/D;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,UAAkB;QAClD,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAsC;YACnE,UAAU,EAAE,oCAAoC;YAChD,WAAW,EAAE,2BAA2B,UAAU,GAAG;YACrD,OAAO,EAAE,cAAc;YACvB,UAAU,EAAE,eAAe;SAC5B,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,0DAA0D,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/F,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACK,wBAAwB,CAAC,OAA4C;QAC3E,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,aAAa,EAAE,OAAO,CAAC,OAAO;YAC9B,SAAS,EAAE,OAAO,CAAC,cAAc;YACjC,OAAO,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;SAChC,CAAC;IACJ,CAAC;iHArbU,uBAAuB;gEAAvB,uBAAuB,WAAvB,uBAAuB;;iFAAvB,uBAAuB;cADnC,UAAU","sourcesContent":["import { Injectable } from '@angular/core';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport {\n MJConversationEntity,\n MJConversationArtifactEntity,\n MJConversationArtifactVersionEntity\n} from '@memberjunction/core-entities';\nimport { ComponentSpec } from '@memberjunction/interactive-component-types';\nimport { ComponentStudioStateService } from './component-studio-state.service';\n\n/**\n * Represents a single entry in the version history for a component artifact.\n */\nexport interface VersionHistoryEntry {\n ID: string;\n VersionNumber: number;\n Timestamp: Date;\n Comment: string;\n AuthorName?: string;\n}\n\n/**\n * Service that handles explicit, user-triggered versioning for Component Studio.\n * Follows a git-commit style model where each save creates a new immutable version.\n */\n@Injectable()\nexport class ComponentVersionService {\n\n // --- State Tracking ---\n private _currentArtifactID: string | null = null;\n private _currentVersionNumber = 0;\n private _versionHistory: VersionHistoryEntry[] = [];\n private _componentArtifactTypeID: string | null = null;\n private _cachedConversationID: string | null = null;\n\n private metadata: Metadata = new Metadata();\n\n get CurrentArtifactID(): string | null { return this._currentArtifactID; }\n set CurrentArtifactID(value: string | null) { this._currentArtifactID = value; }\n\n get CurrentVersionNumber(): number { return this._currentVersionNumber; }\n\n get VersionHistory(): VersionHistoryEntry[] { return this._versionHistory; }\n\n constructor(private stateService: ComponentStudioStateService) {}\n\n // ============================================================\n // PUBLIC API\n // ============================================================\n\n /**\n * Save current working state as a new version.\n * Creates the ConversationArtifact if one does not yet exist for this component.\n * @param comment - optional user comment describing the version\n * @returns true if the version was saved successfully\n */\n async SaveVersion(comment?: string): Promise<boolean> {\n try {\n const spec = this.stateService.GetCurrentSpec();\n if (!spec) {\n console.error('ComponentVersionService: No current spec available to save.');\n return false;\n }\n\n const artifactId = await this.ensureArtifactExists(spec);\n if (!artifactId) {\n console.error('ComponentVersionService: Failed to create or resolve artifact.');\n return false;\n }\n\n const nextVersion = await this.resolveNextVersionNumber(artifactId);\n const versionComment = comment || `Auto-saved at ${new Date().toISOString()}`;\n\n const saved = await this.createVersion(artifactId, nextVersion, spec, versionComment);\n if (saved) {\n this._currentArtifactID = artifactId;\n this._currentVersionNumber = nextVersion;\n // Refresh the cached history\n this._versionHistory = await this.fetchVersionHistory(artifactId);\n return true;\n }\n\n return false;\n } catch (error) {\n console.error('ComponentVersionService: Error saving version:', error);\n return false;\n }\n }\n\n /**\n * Update the current (latest) version in place instead of creating a new one.\n * @param comment - optional updated comment\n * @returns true if the version was updated successfully\n */\n async UpdateCurrentVersion(comment?: string): Promise<boolean> {\n try {\n if (!this._currentArtifactID || this._currentVersionNumber === 0) {\n console.error('ComponentVersionService: No current version to update.');\n return false;\n }\n\n const spec = this.stateService.GetCurrentSpec();\n if (!spec) {\n console.error('ComponentVersionService: No current spec available.');\n return false;\n }\n\n const latestVersion = await this.findLatestVersionEntity(this._currentArtifactID);\n if (!latestVersion) {\n console.error('ComponentVersionService: Could not find latest version entity.');\n return false;\n }\n\n latestVersion.Content = JSON.stringify(spec, null, 2);\n if (comment) {\n latestVersion.Comments = comment;\n }\n\n const saved = await latestVersion.Save();\n if (saved) {\n this._versionHistory = await this.fetchVersionHistory(this._currentArtifactID);\n return true;\n }\n return false;\n } catch (error) {\n console.error('ComponentVersionService: Error updating current version:', error);\n return false;\n }\n }\n\n /**\n * Load all versions for a given artifact, ordered by version number descending.\n * @param artifactId - the ConversationArtifact ID to load history for\n * @returns array of version history entries, newest first\n */\n async LoadVersionHistory(artifactId: string): Promise<VersionHistoryEntry[]> {\n const history = await this.fetchVersionHistory(artifactId);\n this._versionHistory = history;\n return history;\n }\n\n /**\n * Restore a previous version by creating a NEW version with the old content.\n * This preserves the full history chain rather than overwriting.\n * @param versionId - the ConversationArtifactVersion ID to restore\n * @returns true if the version was restored successfully\n */\n async RestoreVersion(versionId: string): Promise<boolean> {\n try {\n const versionEntity = await this.loadVersionEntity(versionId);\n if (!versionEntity) {\n console.error('ComponentVersionService: Could not load version', versionId);\n return false;\n }\n\n const spec = this.parseVersionContent(versionEntity);\n if (!spec) {\n console.error('ComponentVersionService: Could not parse version content');\n return false;\n }\n\n const restoredVersionNumber = versionEntity.Version;\n const restoreComment = `Restored from v${restoredVersionNumber}`;\n\n // Update the state with the restored spec before saving\n this.stateService.UpdateSpec(spec);\n\n // SaveVersion will pick up the restored spec from the state service\n return await this.SaveVersion(restoreComment);\n } catch (error) {\n console.error('ComponentVersionService: Error restoring version:', error);\n return false;\n }\n }\n\n /**\n * Load two versions and return their content for diffing.\n * @param versionId1 - the first version ID (typically the older one)\n * @param versionId2 - the second version ID (typically the newer one)\n * @returns an object with the before and after content strings\n */\n async GetVersionDiff(versionId1: string, versionId2: string): Promise<{ before: string; after: string }> {\n const [version1, version2] = await Promise.all([\n this.loadVersionEntity(versionId1),\n this.loadVersionEntity(versionId2)\n ]);\n\n return {\n before: version1?.Content || '',\n after: version2?.Content || ''\n };\n }\n\n /**\n * Reset the service state, typically when switching components.\n */\n Reset(): void {\n this._currentArtifactID = null;\n this._currentVersionNumber = 0;\n this._versionHistory = [];\n // Keep _cachedConversationID — it's user-level, not component-level\n }\n\n // ============================================================\n // PRIVATE: ARTIFACT MANAGEMENT\n // ============================================================\n\n /**\n * Ensures a ConversationArtifact record exists for the current component.\n * If CurrentArtifactID is already set, returns that. Otherwise creates a new one.\n */\n private async ensureArtifactExists(spec: ComponentSpec): Promise<string | null> {\n if (this._currentArtifactID) {\n return this._currentArtifactID;\n }\n\n return await this.createArtifact(spec);\n }\n\n /**\n * Creates a new ConversationArtifact for the given component spec.\n */\n private async createArtifact(spec: ComponentSpec): Promise<string | null> {\n try {\n const artifactTypeId = await this.resolveComponentArtifactTypeID();\n if (!artifactTypeId) {\n console.error('ComponentVersionService: Could not resolve \"Component\" artifact type.');\n return null;\n }\n\n const conversationId = await this.resolveConversationID();\n if (!conversationId) {\n console.error('ComponentVersionService: No conversation ID available for artifact creation.');\n return null;\n }\n\n const artifact = await this.metadata.GetEntityObject<MJConversationArtifactEntity>('MJ: Conversation Artifacts');\n artifact.Name = spec.name || 'Untitled Component';\n artifact.Description = spec.description || null;\n artifact.ConversationID = conversationId;\n artifact.ArtifactTypeID = artifactTypeId;\n artifact.SharingScope = 'None';\n\n const saved = await artifact.Save();\n if (saved) {\n this._currentArtifactID = artifact.ID;\n return artifact.ID;\n }\n\n console.error('ComponentVersionService: Failed to save artifact.');\n return null;\n } catch (error) {\n console.error('ComponentVersionService: Error creating artifact:', error);\n return null;\n }\n }\n\n /**\n * Looks up the artifact type ID for \"Component\" from MJ: Artifact Types.\n * Caches the result to avoid repeated lookups.\n */\n private async resolveComponentArtifactTypeID(): Promise<string | null> {\n if (this._componentArtifactTypeID) {\n return this._componentArtifactTypeID;\n }\n\n const rv = new RunView();\n const result = await rv.RunView<{ ID: string }>({\n EntityName: 'MJ: Artifact Types',\n ExtraFilter: `Name='Component'`,\n Fields: ['ID'],\n ResultType: 'simple'\n });\n\n if (result.Success && result.Results.length > 0) {\n this._componentArtifactTypeID = result.Results[0].ID;\n return this._componentArtifactTypeID;\n }\n\n console.error('ComponentVersionService: \"Component\" artifact type not found.');\n return null;\n }\n\n /**\n * Resolves or creates a Conversation record for Component Studio artifacts.\n * Caches the result for subsequent saves within the same session.\n */\n private async resolveConversationID(): Promise<string | null> {\n if (this._cachedConversationID) {\n return this._cachedConversationID;\n }\n\n const currentUser = this.metadata.CurrentUser;\n if (!currentUser) {\n return null;\n }\n\n // Look for an existing Component Studio conversation for this user\n const rv = new RunView();\n const result = await rv.RunView<{ ID: string }>({\n EntityName: 'MJ: Conversations',\n ExtraFilter: `UserID='${currentUser.ID}' AND Name='Component Studio'`,\n Fields: ['ID'],\n MaxRows: 1,\n ResultType: 'simple'\n });\n\n if (result.Success && result.Results.length > 0) {\n this._cachedConversationID = result.Results[0].ID;\n return this._cachedConversationID;\n }\n\n // Create a new conversation for Component Studio\n const conversation = await this.metadata.GetEntityObject<MJConversationEntity>('MJ: Conversations');\n conversation.UserID = currentUser.ID;\n conversation.Name = 'Component Studio';\n conversation.Type = 'Skip';\n\n const saved = await conversation.Save();\n if (saved) {\n this._cachedConversationID = conversation.ID;\n return this._cachedConversationID;\n }\n\n console.error('ComponentVersionService: Failed to create Component Studio conversation.');\n return null;\n }\n\n // ============================================================\n // PRIVATE: VERSION MANAGEMENT\n // ============================================================\n\n /**\n * Determines the next version number for the given artifact.\n */\n private async resolveNextVersionNumber(artifactId: string): Promise<number> {\n const rv = new RunView();\n const result = await rv.RunView<{ Version: number }>({\n EntityName: 'MJ: Conversation Artifact Versions',\n ExtraFilter: `ConversationArtifactID='${artifactId}'`,\n Fields: ['Version'],\n OrderBy: 'Version DESC',\n MaxRows: 1,\n ResultType: 'simple'\n });\n\n if (result.Success && result.Results.length > 0) {\n return result.Results[0].Version + 1;\n }\n\n return 1;\n }\n\n /**\n * Creates and saves a new ConversationArtifactVersion record.\n */\n private async createVersion(\n artifactId: string,\n versionNumber: number,\n spec: ComponentSpec,\n comment: string\n ): Promise<boolean> {\n try {\n const version = await this.metadata.GetEntityObject<MJConversationArtifactVersionEntity>(\n 'MJ: Conversation Artifact Versions'\n );\n version.ConversationArtifactID = artifactId;\n version.Version = versionNumber;\n version.Content = JSON.stringify(spec, null, 2);\n version.Comments = comment;\n\n return await version.Save();\n } catch (error) {\n console.error('ComponentVersionService: Error creating version record:', error);\n return false;\n }\n }\n\n /**\n * Loads a single ConversationArtifactVersion entity by ID.\n */\n private async loadVersionEntity(versionId: string): Promise<MJConversationArtifactVersionEntity | null> {\n try {\n const entity = await this.metadata.GetEntityObject<MJConversationArtifactVersionEntity>(\n 'MJ: Conversation Artifact Versions'\n );\n const loaded = await entity.Load(versionId);\n return loaded ? entity : null;\n } catch (error) {\n console.error('ComponentVersionService: Error loading version entity:', error);\n return null;\n }\n }\n\n /**\n * Finds the latest version entity for the given artifact.\n */\n private async findLatestVersionEntity(artifactId: string): Promise<MJConversationArtifactVersionEntity | null> {\n const rv = new RunView();\n const result = await rv.RunView<MJConversationArtifactVersionEntity>({\n EntityName: 'MJ: Conversation Artifact Versions',\n ExtraFilter: `ConversationArtifactID='${artifactId}'`,\n OrderBy: 'Version DESC',\n MaxRows: 1,\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results.length > 0) {\n return result.Results[0];\n }\n return null;\n }\n\n /**\n * Parses the Content field of a version entity back into a ComponentSpec.\n */\n private parseVersionContent(versionEntity: MJConversationArtifactVersionEntity): ComponentSpec | null {\n try {\n const content = versionEntity.Content;\n if (!content) {\n return null;\n }\n return JSON.parse(content) as ComponentSpec;\n } catch (error) {\n console.error('ComponentVersionService: Failed to parse version content:', error);\n return null;\n }\n }\n\n // ============================================================\n // PRIVATE: HISTORY LOADING\n // ============================================================\n\n /**\n * Fetches the full version history for an artifact, ordered newest-first.\n */\n private async fetchVersionHistory(artifactId: string): Promise<VersionHistoryEntry[]> {\n const rv = new RunView();\n const result = await rv.RunView<MJConversationArtifactVersionEntity>({\n EntityName: 'MJ: Conversation Artifact Versions',\n ExtraFilter: `ConversationArtifactID='${artifactId}'`,\n OrderBy: 'Version DESC',\n ResultType: 'entity_object'\n });\n\n if (!result.Success) {\n console.error('ComponentVersionService: Failed to load version history:', result.ErrorMessage);\n return [];\n }\n\n return result.Results.map(v => this.mapVersionToHistoryEntry(v));\n }\n\n /**\n * Maps a MJConversationArtifactVersionEntity to a VersionHistoryEntry.\n */\n private mapVersionToHistoryEntry(version: MJConversationArtifactVersionEntity): VersionHistoryEntry {\n return {\n ID: version.ID,\n VersionNumber: version.Version,\n Timestamp: version.__mj_CreatedAt,\n Comment: version.Comments || ''\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"component-version.service.js","sourceRoot":"","sources":["../../../src/ComponentStudio/services/component-version.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { RunView, Metadata, IMetadataProvider } from '@memberjunction/core';\nimport {\n MJConversationEntity,\n MJConversationArtifactEntity,\n MJConversationArtifactVersionEntity\n} from '@memberjunction/core-entities';\nimport { ComponentSpec } from '@memberjunction/interactive-component-types';\nimport { ComponentStudioStateService } from './component-studio-state.service';\n\n/**\n * Represents a single entry in the version history for a component artifact.\n */\nexport interface VersionHistoryEntry {\n ID: string;\n VersionNumber: number;\n Timestamp: Date;\n Comment: string;\n AuthorName?: string;\n}\n\n/**\n * Service that handles explicit, user-triggered versioning for Component Studio.\n * Follows a git-commit style model where each save creates a new immutable version.\n */\n@Injectable()\nexport class ComponentVersionService {\n\n // --- State Tracking ---\n private _currentArtifactID: string | null = null;\n private _currentVersionNumber = 0;\n private _versionHistory: VersionHistoryEntry[] = [];\n private _componentArtifactTypeID: string | null = null;\n private _cachedConversationID: string | null = null;\n\n private _provider: IMetadataProvider | null = null;\n\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\n public get Provider(): IMetadataProvider {\n return this._provider ?? Metadata.Provider;\n }\n\n private get metadata(): IMetadataProvider {\n return this.Provider;\n }\n\n get CurrentArtifactID(): string | null { return this._currentArtifactID; }\n set CurrentArtifactID(value: string | null) { this._currentArtifactID = value; }\n\n get CurrentVersionNumber(): number { return this._currentVersionNumber; }\n\n get VersionHistory(): VersionHistoryEntry[] { return this._versionHistory; }\n\n constructor(private stateService: ComponentStudioStateService) {}\n\n // ============================================================\n // PUBLIC API\n // ============================================================\n\n /**\n * Save current working state as a new version.\n * Creates the ConversationArtifact if one does not yet exist for this component.\n * @param comment - optional user comment describing the version\n * @returns true if the version was saved successfully\n */\n async SaveVersion(comment?: string): Promise<boolean> {\n try {\n const spec = this.stateService.GetCurrentSpec();\n if (!spec) {\n console.error('ComponentVersionService: No current spec available to save.');\n return false;\n }\n\n const artifactId = await this.ensureArtifactExists(spec);\n if (!artifactId) {\n console.error('ComponentVersionService: Failed to create or resolve artifact.');\n return false;\n }\n\n const nextVersion = await this.resolveNextVersionNumber(artifactId);\n const versionComment = comment || `Auto-saved at ${new Date().toISOString()}`;\n\n const saved = await this.createVersion(artifactId, nextVersion, spec, versionComment);\n if (saved) {\n this._currentArtifactID = artifactId;\n this._currentVersionNumber = nextVersion;\n // Refresh the cached history\n this._versionHistory = await this.fetchVersionHistory(artifactId);\n return true;\n }\n\n return false;\n } catch (error) {\n console.error('ComponentVersionService: Error saving version:', error);\n return false;\n }\n }\n\n /**\n * Update the current (latest) version in place instead of creating a new one.\n * @param comment - optional updated comment\n * @returns true if the version was updated successfully\n */\n async UpdateCurrentVersion(comment?: string): Promise<boolean> {\n try {\n if (!this._currentArtifactID || this._currentVersionNumber === 0) {\n console.error('ComponentVersionService: No current version to update.');\n return false;\n }\n\n const spec = this.stateService.GetCurrentSpec();\n if (!spec) {\n console.error('ComponentVersionService: No current spec available.');\n return false;\n }\n\n const latestVersion = await this.findLatestVersionEntity(this._currentArtifactID);\n if (!latestVersion) {\n console.error('ComponentVersionService: Could not find latest version entity.');\n return false;\n }\n\n latestVersion.Content = JSON.stringify(spec, null, 2);\n if (comment) {\n latestVersion.Comments = comment;\n }\n\n const saved = await latestVersion.Save();\n if (saved) {\n this._versionHistory = await this.fetchVersionHistory(this._currentArtifactID);\n return true;\n }\n return false;\n } catch (error) {\n console.error('ComponentVersionService: Error updating current version:', error);\n return false;\n }\n }\n\n /**\n * Load all versions for a given artifact, ordered by version number descending.\n * @param artifactId - the ConversationArtifact ID to load history for\n * @returns array of version history entries, newest first\n */\n async LoadVersionHistory(artifactId: string): Promise<VersionHistoryEntry[]> {\n const history = await this.fetchVersionHistory(artifactId);\n this._versionHistory = history;\n return history;\n }\n\n /**\n * Restore a previous version by creating a NEW version with the old content.\n * This preserves the full history chain rather than overwriting.\n * @param versionId - the ConversationArtifactVersion ID to restore\n * @returns true if the version was restored successfully\n */\n async RestoreVersion(versionId: string): Promise<boolean> {\n try {\n const versionEntity = await this.loadVersionEntity(versionId);\n if (!versionEntity) {\n console.error('ComponentVersionService: Could not load version', versionId);\n return false;\n }\n\n const spec = this.parseVersionContent(versionEntity);\n if (!spec) {\n console.error('ComponentVersionService: Could not parse version content');\n return false;\n }\n\n const restoredVersionNumber = versionEntity.Version;\n const restoreComment = `Restored from v${restoredVersionNumber}`;\n\n // Update the state with the restored spec before saving\n this.stateService.UpdateSpec(spec);\n\n // SaveVersion will pick up the restored spec from the state service\n return await this.SaveVersion(restoreComment);\n } catch (error) {\n console.error('ComponentVersionService: Error restoring version:', error);\n return false;\n }\n }\n\n /**\n * Load two versions and return their content for diffing.\n * @param versionId1 - the first version ID (typically the older one)\n * @param versionId2 - the second version ID (typically the newer one)\n * @returns an object with the before and after content strings\n */\n async GetVersionDiff(versionId1: string, versionId2: string): Promise<{ before: string; after: string }> {\n const [version1, version2] = await Promise.all([\n this.loadVersionEntity(versionId1),\n this.loadVersionEntity(versionId2)\n ]);\n\n return {\n before: version1?.Content || '',\n after: version2?.Content || ''\n };\n }\n\n /**\n * Reset the service state, typically when switching components.\n */\n Reset(): void {\n this._currentArtifactID = null;\n this._currentVersionNumber = 0;\n this._versionHistory = [];\n // Keep _cachedConversationID — it's user-level, not component-level\n }\n\n // ============================================================\n // PRIVATE: ARTIFACT MANAGEMENT\n // ============================================================\n\n /**\n * Ensures a ConversationArtifact record exists for the current component.\n * If CurrentArtifactID is already set, returns that. Otherwise creates a new one.\n */\n private async ensureArtifactExists(spec: ComponentSpec): Promise<string | null> {\n if (this._currentArtifactID) {\n return this._currentArtifactID;\n }\n\n return await this.createArtifact(spec);\n }\n\n /**\n * Creates a new ConversationArtifact for the given component spec.\n */\n private async createArtifact(spec: ComponentSpec): Promise<string | null> {\n try {\n const artifactTypeId = await this.resolveComponentArtifactTypeID();\n if (!artifactTypeId) {\n console.error('ComponentVersionService: Could not resolve \"Component\" artifact type.');\n return null;\n }\n\n const conversationId = await this.resolveConversationID();\n if (!conversationId) {\n console.error('ComponentVersionService: No conversation ID available for artifact creation.');\n return null;\n }\n\n const artifact = await this.metadata.GetEntityObject<MJConversationArtifactEntity>('MJ: Conversation Artifacts');\n artifact.Name = spec.name || 'Untitled Component';\n artifact.Description = spec.description || null;\n artifact.ConversationID = conversationId;\n artifact.ArtifactTypeID = artifactTypeId;\n artifact.SharingScope = 'None';\n\n const saved = await artifact.Save();\n if (saved) {\n this._currentArtifactID = artifact.ID;\n return artifact.ID;\n }\n\n console.error('ComponentVersionService: Failed to save artifact.');\n return null;\n } catch (error) {\n console.error('ComponentVersionService: Error creating artifact:', error);\n return null;\n }\n }\n\n /**\n * Looks up the artifact type ID for \"Component\" from MJ: Artifact Types.\n * Caches the result to avoid repeated lookups.\n */\n private async resolveComponentArtifactTypeID(): Promise<string | null> {\n if (this._componentArtifactTypeID) {\n return this._componentArtifactTypeID;\n }\n\n const rv = RunView.FromMetadataProvider(this.Provider);\n const result = await rv.RunView<{ ID: string }>({\n EntityName: 'MJ: Artifact Types',\n ExtraFilter: `Name='Component'`,\n Fields: ['ID'],\n ResultType: 'simple'\n });\n\n if (result.Success && result.Results.length > 0) {\n this._componentArtifactTypeID = result.Results[0].ID;\n return this._componentArtifactTypeID;\n }\n\n console.error('ComponentVersionService: \"Component\" artifact type not found.');\n return null;\n }\n\n /**\n * Resolves or creates a Conversation record for Component Studio artifacts.\n * Caches the result for subsequent saves within the same session.\n */\n private async resolveConversationID(): Promise<string | null> {\n if (this._cachedConversationID) {\n return this._cachedConversationID;\n }\n\n const currentUser = this.metadata.CurrentUser;\n if (!currentUser) {\n return null;\n }\n\n // Look for an existing Component Studio conversation for this user\n const rv = RunView.FromMetadataProvider(this.Provider);\n const result = await rv.RunView<{ ID: string }>({\n EntityName: 'MJ: Conversations',\n ExtraFilter: `UserID='${currentUser.ID}' AND Name='Component Studio'`,\n Fields: ['ID'],\n MaxRows: 1,\n ResultType: 'simple'\n });\n\n if (result.Success && result.Results.length > 0) {\n this._cachedConversationID = result.Results[0].ID;\n return this._cachedConversationID;\n }\n\n // Create a new conversation for Component Studio\n const conversation = await this.metadata.GetEntityObject<MJConversationEntity>('MJ: Conversations');\n conversation.UserID = currentUser.ID;\n conversation.Name = 'Component Studio';\n conversation.Type = 'Skip';\n\n const saved = await conversation.Save();\n if (saved) {\n this._cachedConversationID = conversation.ID;\n return this._cachedConversationID;\n }\n\n console.error('ComponentVersionService: Failed to create Component Studio conversation.');\n return null;\n }\n\n // ============================================================\n // PRIVATE: VERSION MANAGEMENT\n // ============================================================\n\n /**\n * Determines the next version number for the given artifact.\n */\n private async resolveNextVersionNumber(artifactId: string): Promise<number> {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const result = await rv.RunView<{ Version: number }>({\n EntityName: 'MJ: Conversation Artifact Versions',\n ExtraFilter: `ConversationArtifactID='${artifactId}'`,\n Fields: ['Version'],\n OrderBy: 'Version DESC',\n MaxRows: 1,\n ResultType: 'simple'\n });\n\n if (result.Success && result.Results.length > 0) {\n return result.Results[0].Version + 1;\n }\n\n return 1;\n }\n\n /**\n * Creates and saves a new ConversationArtifactVersion record.\n */\n private async createVersion(\n artifactId: string,\n versionNumber: number,\n spec: ComponentSpec,\n comment: string\n ): Promise<boolean> {\n try {\n const version = await this.metadata.GetEntityObject<MJConversationArtifactVersionEntity>(\n 'MJ: Conversation Artifact Versions'\n );\n version.ConversationArtifactID = artifactId;\n version.Version = versionNumber;\n version.Content = JSON.stringify(spec, null, 2);\n version.Comments = comment;\n\n return await version.Save();\n } catch (error) {\n console.error('ComponentVersionService: Error creating version record:', error);\n return false;\n }\n }\n\n /**\n * Loads a single ConversationArtifactVersion entity by ID.\n */\n private async loadVersionEntity(versionId: string): Promise<MJConversationArtifactVersionEntity | null> {\n try {\n const entity = await this.metadata.GetEntityObject<MJConversationArtifactVersionEntity>(\n 'MJ: Conversation Artifact Versions'\n );\n const loaded = await entity.Load(versionId);\n return loaded ? entity : null;\n } catch (error) {\n console.error('ComponentVersionService: Error loading version entity:', error);\n return null;\n }\n }\n\n /**\n * Finds the latest version entity for the given artifact.\n */\n private async findLatestVersionEntity(artifactId: string): Promise<MJConversationArtifactVersionEntity | null> {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const result = await rv.RunView<MJConversationArtifactVersionEntity>({\n EntityName: 'MJ: Conversation Artifact Versions',\n ExtraFilter: `ConversationArtifactID='${artifactId}'`,\n OrderBy: 'Version DESC',\n MaxRows: 1,\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results.length > 0) {\n return result.Results[0];\n }\n return null;\n }\n\n /**\n * Parses the Content field of a version entity back into a ComponentSpec.\n */\n private parseVersionContent(versionEntity: MJConversationArtifactVersionEntity): ComponentSpec | null {\n try {\n const content = versionEntity.Content;\n if (!content) {\n return null;\n }\n return JSON.parse(content) as ComponentSpec;\n } catch (error) {\n console.error('ComponentVersionService: Failed to parse version content:', error);\n return null;\n }\n }\n\n // ============================================================\n // PRIVATE: HISTORY LOADING\n // ============================================================\n\n /**\n * Fetches the full version history for an artifact, ordered newest-first.\n */\n private async fetchVersionHistory(artifactId: string): Promise<VersionHistoryEntry[]> {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const result = await rv.RunView<MJConversationArtifactVersionEntity>({\n EntityName: 'MJ: Conversation Artifact Versions',\n ExtraFilter: `ConversationArtifactID='${artifactId}'`,\n OrderBy: 'Version DESC',\n ResultType: 'entity_object'\n });\n\n if (!result.Success) {\n console.error('ComponentVersionService: Failed to load version history:', result.ErrorMessage);\n return [];\n }\n\n return result.Results.map(v => this.mapVersionToHistoryEntry(v));\n }\n\n /**\n * Maps a MJConversationArtifactVersionEntity to a VersionHistoryEntry.\n */\n private mapVersionToHistoryEntry(version: MJConversationArtifactVersionEntity): VersionHistoryEntry {\n return {\n ID: version.ID,\n VersionNumber: version.Version,\n Timestamp: version.__mj_CreatedAt,\n Comment: version.Comments || ''\n };\n }\n}\n"]}
|
|
@@ -566,7 +566,7 @@ let CredentialsAuditResourceComponent = class CredentialsAuditResourceComponent
|
|
|
566
566
|
try {
|
|
567
567
|
this.isLoading = true;
|
|
568
568
|
this.cdr.markForCheck();
|
|
569
|
-
const rv =
|
|
569
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
570
570
|
// Calculate date filter
|
|
571
571
|
const startDate = new Date();
|
|
572
572
|
startDate.setDate(startDate.getDate() - parseInt(this.dateRange, 10));
|