@memberjunction/ng-dashboards 5.30.0 → 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
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module database-modify.component
|
|
3
|
+
* @description Slide-over view for modifying an existing Database Designer entity.
|
|
4
|
+
*
|
|
5
|
+
* Rendered inside an `mj-slide-panel` by the dashboard when the user clicks Edit.
|
|
6
|
+
* Presents three tabs:
|
|
7
|
+
* 1. Fields — EntityFieldsGridComponent in modify mode (existing + new columns)
|
|
8
|
+
* 2. Review — EntityReviewPanelComponent showing diff (new cols highlighted)
|
|
9
|
+
* 3. Apply — EntityPipelinePanelComponent for running the alter pipeline
|
|
10
|
+
*
|
|
11
|
+
* On tab 3 ("Apply"), clicking "Apply Changes" calls `pipelinePanel.StartExecution()`.
|
|
12
|
+
* The pipeline panel then calls `DatabaseDesignerService.modifyEntity()`.
|
|
13
|
+
*/
|
|
14
|
+
import { EventEmitter, OnInit, OnDestroy } from '@angular/core';
|
|
15
|
+
import type { AccessibleEntityDetail, ColumnSpec, EntityTableSpec, EntityPipelineResult } from '../../database-designer.types.js';
|
|
16
|
+
import * as i0 from "@angular/core";
|
|
17
|
+
type ModifyTab = 'fields' | 'review' | 'apply';
|
|
18
|
+
export declare class DatabaseModifyComponent implements OnInit, OnDestroy {
|
|
19
|
+
private readonly cdr;
|
|
20
|
+
set EntityId(v: string);
|
|
21
|
+
get EntityId(): string;
|
|
22
|
+
private _entityId;
|
|
23
|
+
private _initialized;
|
|
24
|
+
readonly EntityModified: EventEmitter<EntityPipelineResult>;
|
|
25
|
+
readonly Cancelled: EventEmitter<void>;
|
|
26
|
+
ActiveTab: ModifyTab;
|
|
27
|
+
IsLoading: boolean;
|
|
28
|
+
LoadError: string | null;
|
|
29
|
+
EntityDetail: AccessibleEntityDetail | null;
|
|
30
|
+
/** Columns being edited — starts from existing entity fields + user additions. */
|
|
31
|
+
EditedColumns: ColumnSpec[];
|
|
32
|
+
IsPipelineRunning: boolean;
|
|
33
|
+
CanApplyChanges: boolean;
|
|
34
|
+
private pipelinePanel?;
|
|
35
|
+
ngOnInit(): Promise<void>;
|
|
36
|
+
ngOnDestroy(): void;
|
|
37
|
+
SetTab(tab: ModifyTab): void;
|
|
38
|
+
OnColumnsChanged(columns: ColumnSpec[]): void;
|
|
39
|
+
OnApplyChanges(): void;
|
|
40
|
+
OnPipelineCompleted(result: EntityPipelineResult): void;
|
|
41
|
+
OnPipelineErrored(_msg: string): void;
|
|
42
|
+
OnCancel(): void;
|
|
43
|
+
get CurrentTableSpec(): EntityTableSpec | null;
|
|
44
|
+
get ExistingColumns(): ColumnSpec[];
|
|
45
|
+
private loadEntityDetail;
|
|
46
|
+
/** True if the user added new columns or changed any existing column. */
|
|
47
|
+
private hasChanges;
|
|
48
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatabaseModifyComponent, never>;
|
|
49
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatabaseModifyComponent, "mj-database-modify", never, { "EntityId": { "alias": "EntityId"; "required": false; }; }, { "EntityModified": "EntityModified"; "Cancelled": "Cancelled"; }, never, never, false, never>;
|
|
50
|
+
}
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=database-modify.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-modify.component.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseDesigner/components/modify/database-modify.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACuB,YAAY,EAAE,MAAM,EAAE,SAAS,EAE5D,MAAM,eAAe,CAAC;AAIvB,OAAO,KAAK,EAAE,sBAAsB,EAAE,UAAU,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;;AAElI,KAAK,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/C,qBAOa,uBAAwB,YAAW,MAAM,EAAE,SAAS;IAI7D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IAIjD,IAAoB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAKrC;IACD,IAAW,QAAQ,IAAI,MAAM,CAA2B;IACxD,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,YAAY,CAAS;IAE7B,SAA0B,cAAc,qCAA4C;IACpF,SAA0B,SAAS,qBAA4B;IAIxD,SAAS,EAAE,SAAS,CAAY;IAChC,SAAS,UAAS;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAChC,YAAY,EAAE,sBAAsB,GAAG,IAAI,CAAQ;IAE1D,kFAAkF;IAC3E,aAAa,EAAE,UAAU,EAAE,CAAM;IAEjC,iBAAiB,UAAS;IAC1B,eAAe,UAAS;IAG/B,OAAO,CAAC,aAAa,CAAC,CAA+B;IAI/C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,WAAW,IAAI,IAAI;IAMZ,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;IAS5B,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAQ7C,cAAc,IAAI,IAAI;IAOtB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAOvD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKrC,QAAQ,IAAI,IAAI;IAevB,IAAW,gBAAgB,IAAI,eAAe,GAAG,IAAI,CASpD;IAED,IAAW,eAAe,IAAI,UAAU,EAAE,CAEzC;YAIa,gBAAgB;IAoB9B,yEAAyE;IACzE,OAAO,CAAC,UAAU;yCA3IT,uBAAuB;2CAAvB,uBAAuB;CAyJnC"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module database-modify.component
|
|
3
|
+
* @description Slide-over view for modifying an existing Database Designer entity.
|
|
4
|
+
*
|
|
5
|
+
* Rendered inside an `mj-slide-panel` by the dashboard when the user clicks Edit.
|
|
6
|
+
* Presents three tabs:
|
|
7
|
+
* 1. Fields — EntityFieldsGridComponent in modify mode (existing + new columns)
|
|
8
|
+
* 2. Review — EntityReviewPanelComponent showing diff (new cols highlighted)
|
|
9
|
+
* 3. Apply — EntityPipelinePanelComponent for running the alter pipeline
|
|
10
|
+
*
|
|
11
|
+
* On tab 3 ("Apply"), clicking "Apply Changes" calls `pipelinePanel.StartExecution()`.
|
|
12
|
+
* The pipeline panel then calls `DatabaseDesignerService.modifyEntity()`.
|
|
13
|
+
*/
|
|
14
|
+
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ChangeDetectorRef, inject, ViewChild, } from '@angular/core';
|
|
15
|
+
import { DatabaseDesignerEngine } from '../../services/database-designer.engine.js';
|
|
16
|
+
import { EntityPipelinePanelComponent } from '../shared/entity-pipeline-panel.component.js';
|
|
17
|
+
import * as i0 from "@angular/core";
|
|
18
|
+
import * as i1 from "@memberjunction/ng-ui-components";
|
|
19
|
+
import * as i2 from "@memberjunction/ng-shared-generic";
|
|
20
|
+
import * as i3 from "angular-split";
|
|
21
|
+
import * as i4 from "../shared/entity-fields-grid.component";
|
|
22
|
+
import * as i5 from "../shared/entity-review-panel.component";
|
|
23
|
+
import * as i6 from "../shared/entity-pipeline-panel.component";
|
|
24
|
+
import * as i7 from "../shared/database-preview-pane.component";
|
|
25
|
+
const _c0 = () => ({});
|
|
26
|
+
function DatabaseModifyComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
27
|
+
i0.ɵɵelementStart(0, "div", 1);
|
|
28
|
+
i0.ɵɵelement(1, "mj-loading", 3);
|
|
29
|
+
i0.ɵɵelementEnd();
|
|
30
|
+
} }
|
|
31
|
+
function DatabaseModifyComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
32
|
+
i0.ɵɵelementStart(0, "div", 2);
|
|
33
|
+
i0.ɵɵelement(1, "i", 4);
|
|
34
|
+
i0.ɵɵtext(2);
|
|
35
|
+
i0.ɵɵelementEnd();
|
|
36
|
+
} if (rf & 2) {
|
|
37
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
38
|
+
i0.ɵɵadvance(2);
|
|
39
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.LoadError, " ");
|
|
40
|
+
} }
|
|
41
|
+
function DatabaseModifyComponent_Conditional_3_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
42
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
43
|
+
i0.ɵɵelementStart(0, "div", 15)(1, "div", 20)(2, "mj-database-pipeline-panel", 21);
|
|
44
|
+
i0.ɵɵlistener("Completed", function DatabaseModifyComponent_Conditional_3_Conditional_17_Template_mj_database_pipeline_panel_Completed_2_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnPipelineCompleted($event)); })("Errored", function DatabaseModifyComponent_Conditional_3_Conditional_17_Template_mj_database_pipeline_panel_Errored_2_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnPipelineErrored($event)); });
|
|
45
|
+
i0.ɵɵelementEnd()()();
|
|
46
|
+
} if (rf & 2) {
|
|
47
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
48
|
+
i0.ɵɵadvance(2);
|
|
49
|
+
i0.ɵɵproperty("TableDefinition", ctx_r0.CurrentTableSpec)("ExistingEntityId", ctx_r0.EntityId);
|
|
50
|
+
} }
|
|
51
|
+
function DatabaseModifyComponent_Conditional_3_Conditional_18_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
53
|
+
i0.ɵɵelementStart(0, "mj-database-fields-grid", 27);
|
|
54
|
+
i0.ɵɵlistener("ColumnsChanged", function DatabaseModifyComponent_Conditional_3_Conditional_18_Conditional_3_Template_mj_database_fields_grid_ColumnsChanged_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OnColumnsChanged($event)); });
|
|
55
|
+
i0.ɵɵelementEnd();
|
|
56
|
+
} if (rf & 2) {
|
|
57
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
58
|
+
i0.ɵɵproperty("Columns", ctx_r0.EditedColumns);
|
|
59
|
+
} }
|
|
60
|
+
function DatabaseModifyComponent_Conditional_3_Conditional_18_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
61
|
+
i0.ɵɵelement(0, "mj-database-review-panel", 25);
|
|
62
|
+
} if (rf & 2) {
|
|
63
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
64
|
+
i0.ɵɵproperty("TableDefinition", ctx_r0.CurrentTableSpec)("ExistingColumns", ctx_r0.ExistingColumns);
|
|
65
|
+
} }
|
|
66
|
+
function DatabaseModifyComponent_Conditional_3_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
67
|
+
i0.ɵɵelementStart(0, "as-split", 16)(1, "as-split-area", 22)(2, "div", 23);
|
|
68
|
+
i0.ɵɵconditionalCreate(3, DatabaseModifyComponent_Conditional_3_Conditional_18_Conditional_3_Template, 1, 1, "mj-database-fields-grid", 24);
|
|
69
|
+
i0.ɵɵconditionalCreate(4, DatabaseModifyComponent_Conditional_3_Conditional_18_Conditional_4_Template, 1, 2, "mj-database-review-panel", 25);
|
|
70
|
+
i0.ɵɵelementEnd()();
|
|
71
|
+
i0.ɵɵelementStart(5, "as-split-area", 22);
|
|
72
|
+
i0.ɵɵelement(6, "mj-database-preview-pane", 26);
|
|
73
|
+
i0.ɵɵelementEnd()();
|
|
74
|
+
} if (rf & 2) {
|
|
75
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
76
|
+
i0.ɵɵadvance();
|
|
77
|
+
i0.ɵɵproperty("size", 55)("minSize", 40);
|
|
78
|
+
i0.ɵɵadvance(2);
|
|
79
|
+
i0.ɵɵconditional(ctx_r0.ActiveTab === "fields" ? 3 : -1);
|
|
80
|
+
i0.ɵɵadvance();
|
|
81
|
+
i0.ɵɵconditional(ctx_r0.ActiveTab === "review" ? 4 : -1);
|
|
82
|
+
i0.ɵɵadvance();
|
|
83
|
+
i0.ɵɵproperty("size", 45)("minSize", 25);
|
|
84
|
+
i0.ɵɵadvance();
|
|
85
|
+
i0.ɵɵproperty("TableDefinition", ctx_r0.CurrentTableSpec ?? i0.ɵɵpureFunction0(8, _c0))("IsAlter", true);
|
|
86
|
+
} }
|
|
87
|
+
function DatabaseModifyComponent_Conditional_3_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
88
|
+
i0.ɵɵtext(0, " Close ");
|
|
89
|
+
} }
|
|
90
|
+
function DatabaseModifyComponent_Conditional_3_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
91
|
+
i0.ɵɵtext(0, " Cancel ");
|
|
92
|
+
} }
|
|
93
|
+
function DatabaseModifyComponent_Conditional_3_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
94
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
95
|
+
i0.ɵɵelementStart(0, "button", 28);
|
|
96
|
+
i0.ɵɵlistener("click", function DatabaseModifyComponent_Conditional_3_Conditional_23_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnApplyChanges()); });
|
|
97
|
+
i0.ɵɵelement(1, "i", 14);
|
|
98
|
+
i0.ɵɵtext(2, " Apply Changes ");
|
|
99
|
+
i0.ɵɵelementEnd();
|
|
100
|
+
} if (rf & 2) {
|
|
101
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
102
|
+
i0.ɵɵproperty("disabled", !ctx_r0.CanApplyChanges || ctx_r0.IsPipelineRunning);
|
|
103
|
+
} }
|
|
104
|
+
function DatabaseModifyComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
105
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
106
|
+
i0.ɵɵelementStart(0, "div", 5)(1, "div", 6);
|
|
107
|
+
i0.ɵɵelement(2, "i", 7);
|
|
108
|
+
i0.ɵɵelementStart(3, "span", 8);
|
|
109
|
+
i0.ɵɵtext(4);
|
|
110
|
+
i0.ɵɵelementEnd();
|
|
111
|
+
i0.ɵɵelementStart(5, "span", 9);
|
|
112
|
+
i0.ɵɵtext(6);
|
|
113
|
+
i0.ɵɵelementEnd()()();
|
|
114
|
+
i0.ɵɵelementStart(7, "div", 10)(8, "button", 11);
|
|
115
|
+
i0.ɵɵlistener("click", function DatabaseModifyComponent_Conditional_3_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetTab("fields")); });
|
|
116
|
+
i0.ɵɵelement(9, "i", 12);
|
|
117
|
+
i0.ɵɵtext(10, " Fields ");
|
|
118
|
+
i0.ɵɵelementEnd();
|
|
119
|
+
i0.ɵɵelementStart(11, "button", 11);
|
|
120
|
+
i0.ɵɵlistener("click", function DatabaseModifyComponent_Conditional_3_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetTab("review")); });
|
|
121
|
+
i0.ɵɵelement(12, "i", 13);
|
|
122
|
+
i0.ɵɵtext(13, " Review Changes ");
|
|
123
|
+
i0.ɵɵelementEnd();
|
|
124
|
+
i0.ɵɵelementStart(14, "button", 11);
|
|
125
|
+
i0.ɵɵlistener("click", function DatabaseModifyComponent_Conditional_3_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetTab("apply")); });
|
|
126
|
+
i0.ɵɵelement(15, "i", 14);
|
|
127
|
+
i0.ɵɵtext(16, " Apply Changes ");
|
|
128
|
+
i0.ɵɵelementEnd()();
|
|
129
|
+
i0.ɵɵconditionalCreate(17, DatabaseModifyComponent_Conditional_3_Conditional_17_Template, 3, 2, "div", 15)(18, DatabaseModifyComponent_Conditional_3_Conditional_18_Template, 7, 9, "as-split", 16);
|
|
130
|
+
i0.ɵɵelementStart(19, "div", 17)(20, "button", 18);
|
|
131
|
+
i0.ɵɵlistener("click", function DatabaseModifyComponent_Conditional_3_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnCancel()); });
|
|
132
|
+
i0.ɵɵconditionalCreate(21, DatabaseModifyComponent_Conditional_3_Conditional_21_Template, 1, 0)(22, DatabaseModifyComponent_Conditional_3_Conditional_22_Template, 1, 0);
|
|
133
|
+
i0.ɵɵelementEnd();
|
|
134
|
+
i0.ɵɵconditionalCreate(23, DatabaseModifyComponent_Conditional_3_Conditional_23_Template, 3, 1, "button", 19);
|
|
135
|
+
i0.ɵɵelementEnd();
|
|
136
|
+
} if (rf & 2) {
|
|
137
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
138
|
+
i0.ɵɵadvance(4);
|
|
139
|
+
i0.ɵɵtextInterpolate(ctx_r0.EntityDetail.entityName);
|
|
140
|
+
i0.ɵɵadvance(2);
|
|
141
|
+
i0.ɵɵtextInterpolate2("", ctx_r0.EntityDetail.schemaName, ".", ctx_r0.EntityDetail.tableName);
|
|
142
|
+
i0.ɵɵadvance(2);
|
|
143
|
+
i0.ɵɵclassProp("active", ctx_r0.ActiveTab === "fields");
|
|
144
|
+
i0.ɵɵattribute("aria-selected", ctx_r0.ActiveTab === "fields");
|
|
145
|
+
i0.ɵɵadvance(3);
|
|
146
|
+
i0.ɵɵclassProp("active", ctx_r0.ActiveTab === "review");
|
|
147
|
+
i0.ɵɵattribute("aria-selected", ctx_r0.ActiveTab === "review");
|
|
148
|
+
i0.ɵɵadvance(3);
|
|
149
|
+
i0.ɵɵclassProp("active", ctx_r0.ActiveTab === "apply")("tab-apply", true);
|
|
150
|
+
i0.ɵɵattribute("aria-selected", ctx_r0.ActiveTab === "apply");
|
|
151
|
+
i0.ɵɵadvance(3);
|
|
152
|
+
i0.ɵɵconditional(ctx_r0.ActiveTab === "apply" ? 17 : 18);
|
|
153
|
+
i0.ɵɵadvance(4);
|
|
154
|
+
i0.ɵɵconditional(ctx_r0.IsPipelineRunning ? 21 : 22);
|
|
155
|
+
i0.ɵɵadvance(2);
|
|
156
|
+
i0.ɵɵconditional(ctx_r0.ActiveTab !== "apply" ? 23 : -1);
|
|
157
|
+
} }
|
|
158
|
+
export class DatabaseModifyComponent {
|
|
159
|
+
// ─── Injected ──────────────────────────────────────────────────────────
|
|
160
|
+
cdr = inject(ChangeDetectorRef);
|
|
161
|
+
// ─── Inputs / Outputs ──────────────────────────────────────────────────
|
|
162
|
+
set EntityId(v) {
|
|
163
|
+
if (v && v !== this._entityId) {
|
|
164
|
+
this._entityId = v;
|
|
165
|
+
if (this._initialized)
|
|
166
|
+
this.loadEntityDetail();
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
get EntityId() { return this._entityId; }
|
|
170
|
+
_entityId = '';
|
|
171
|
+
_initialized = false;
|
|
172
|
+
EntityModified = new EventEmitter();
|
|
173
|
+
Cancelled = new EventEmitter();
|
|
174
|
+
// ─── View state ────────────────────────────────────────────────────────
|
|
175
|
+
ActiveTab = 'fields';
|
|
176
|
+
IsLoading = false;
|
|
177
|
+
LoadError = null;
|
|
178
|
+
EntityDetail = null;
|
|
179
|
+
/** Columns being edited — starts from existing entity fields + user additions. */
|
|
180
|
+
EditedColumns = [];
|
|
181
|
+
IsPipelineRunning = false;
|
|
182
|
+
CanApplyChanges = false;
|
|
183
|
+
pipelinePanel;
|
|
184
|
+
// ─── Lifecycle ─────────────────────────────────────────────────────────
|
|
185
|
+
async ngOnInit() {
|
|
186
|
+
this._initialized = true;
|
|
187
|
+
await this.loadEntityDetail();
|
|
188
|
+
}
|
|
189
|
+
ngOnDestroy() {
|
|
190
|
+
// Cleanup not needed — no subscriptions beyond the load promise
|
|
191
|
+
}
|
|
192
|
+
// ─── Tab navigation ────────────────────────────────────────────────────
|
|
193
|
+
SetTab(tab) {
|
|
194
|
+
// Don't allow switching away from 'apply' once pipeline has started
|
|
195
|
+
if (this.IsPipelineRunning && tab !== 'apply')
|
|
196
|
+
return;
|
|
197
|
+
this.ActiveTab = tab;
|
|
198
|
+
this.cdr.markForCheck();
|
|
199
|
+
}
|
|
200
|
+
// ─── Column change handler ─────────────────────────────────────────────
|
|
201
|
+
OnColumnsChanged(columns) {
|
|
202
|
+
this.EditedColumns = columns;
|
|
203
|
+
this.CanApplyChanges = this.hasChanges();
|
|
204
|
+
this.cdr.markForCheck();
|
|
205
|
+
}
|
|
206
|
+
// ─── Apply / Pipeline ──────────────────────────────────────────────────
|
|
207
|
+
OnApplyChanges() {
|
|
208
|
+
if (!this.EntityDetail || !this.CanApplyChanges)
|
|
209
|
+
return;
|
|
210
|
+
this.IsPipelineRunning = true;
|
|
211
|
+
this.SetTab('apply');
|
|
212
|
+
setTimeout(() => this.pipelinePanel?.StartExecution(), 0);
|
|
213
|
+
}
|
|
214
|
+
OnPipelineCompleted(result) {
|
|
215
|
+
this.IsPipelineRunning = false;
|
|
216
|
+
DatabaseDesignerEngine.Instance.invalidateCache();
|
|
217
|
+
this.EntityModified.emit(result);
|
|
218
|
+
this.cdr.markForCheck();
|
|
219
|
+
}
|
|
220
|
+
OnPipelineErrored(_msg) {
|
|
221
|
+
this.IsPipelineRunning = false;
|
|
222
|
+
this.cdr.markForCheck();
|
|
223
|
+
}
|
|
224
|
+
OnCancel() {
|
|
225
|
+
if (this.IsPipelineRunning) {
|
|
226
|
+
// Use native confirm so the guard stays synchronous — required by MjSlidePanelComponent.CanClose.
|
|
227
|
+
// The pipeline continues on the server regardless; we're only hiding the progress UI.
|
|
228
|
+
const confirmed = window.confirm('A pipeline operation is in progress. Closing will hide the progress panel ' +
|
|
229
|
+
'but the operation will continue running on the server.\n\nAre you sure?');
|
|
230
|
+
if (!confirmed)
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
this.Cancelled.emit();
|
|
234
|
+
}
|
|
235
|
+
// ─── Template helpers ──────────────────────────────────────────────────
|
|
236
|
+
get CurrentTableSpec() {
|
|
237
|
+
if (!this.EntityDetail)
|
|
238
|
+
return null;
|
|
239
|
+
return {
|
|
240
|
+
EntityName: this.EntityDetail.entityName,
|
|
241
|
+
TableName: this.EntityDetail.tableName,
|
|
242
|
+
SchemaName: this.EntityDetail.schemaName,
|
|
243
|
+
Description: this.EntityDetail.description,
|
|
244
|
+
Columns: this.EditedColumns,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
get ExistingColumns() {
|
|
248
|
+
return this.EntityDetail?.columns ?? [];
|
|
249
|
+
}
|
|
250
|
+
// ─── Private helpers ───────────────────────────────────────────────────
|
|
251
|
+
async loadEntityDetail() {
|
|
252
|
+
if (!this._entityId)
|
|
253
|
+
return;
|
|
254
|
+
this.IsLoading = true;
|
|
255
|
+
this.LoadError = null;
|
|
256
|
+
this.cdr.markForCheck();
|
|
257
|
+
try {
|
|
258
|
+
this.EntityDetail = await DatabaseDesignerEngine.Instance.loadEntityDetail(this._entityId);
|
|
259
|
+
if (this.EntityDetail) {
|
|
260
|
+
this.EditedColumns = [...this.EntityDetail.columns];
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
this.LoadError = err instanceof Error ? err.message : String(err);
|
|
265
|
+
}
|
|
266
|
+
finally {
|
|
267
|
+
this.IsLoading = false;
|
|
268
|
+
this.cdr.markForCheck();
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/** True if the user added new columns or changed any existing column. */
|
|
272
|
+
hasChanges() {
|
|
273
|
+
const original = this.EntityDetail?.columns ?? [];
|
|
274
|
+
if (this.EditedColumns.length !== original.length)
|
|
275
|
+
return true;
|
|
276
|
+
return this.EditedColumns.some((col, i) => col.Name !== original[i]?.Name ||
|
|
277
|
+
col.Type !== original[i]?.Type ||
|
|
278
|
+
col.IsNullable !== original[i]?.IsNullable ||
|
|
279
|
+
col.MaxLength !== original[i]?.MaxLength ||
|
|
280
|
+
col.Precision !== original[i]?.Precision ||
|
|
281
|
+
col.Scale !== original[i]?.Scale ||
|
|
282
|
+
col.DefaultValue !== original[i]?.DefaultValue ||
|
|
283
|
+
col.Description !== original[i]?.Description);
|
|
284
|
+
}
|
|
285
|
+
static ɵfac = function DatabaseModifyComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DatabaseModifyComponent)(); };
|
|
286
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DatabaseModifyComponent, selectors: [["mj-database-modify"]], viewQuery: function DatabaseModifyComponent_Query(rf, ctx) { if (rf & 1) {
|
|
287
|
+
i0.ɵɵviewQuery(EntityPipelinePanelComponent, 5);
|
|
288
|
+
} if (rf & 2) {
|
|
289
|
+
let _t;
|
|
290
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.pipelinePanel = _t.first);
|
|
291
|
+
} }, inputs: { EntityId: "EntityId" }, outputs: { EntityModified: "EntityModified", Cancelled: "Cancelled" }, standalone: false, decls: 4, vars: 3, consts: [[1, "modify-root"], [1, "modify-loading"], ["role", "alert", 1, "modify-error"], ["text", "Loading entity details\u2026"], [1, "fa-solid", "fa-circle-exclamation"], [1, "modify-header"], [1, "entity-info"], [1, "fa-solid", "fa-table-cells-large"], [1, "entity-name"], [1, "schema-path"], ["role", "tablist", 1, "tab-bar"], ["role", "tab", 1, "tab-btn", 3, "click"], [1, "fa-solid", "fa-table-list"], [1, "fa-solid", "fa-magnifying-glass"], [1, "fa-solid", "fa-rocket-launch"], [1, "tab-content", "tab-content-full"], ["direction", "horizontal", "gutterSize", "6", 1, "modify-split"], [1, "modify-footer"], ["mjButton", "", "buttonStyle", "secondary", 3, "click"], ["mjButton", "", "buttonStyle", "primary", 3, "disabled"], [1, "apply-tab"], ["ModificationType", "alter", 3, "Completed", "Errored", "TableDefinition", "ExistingEntityId"], [3, "size", "minSize"], [1, "tab-content"], ["Mode", "modify", 3, "Columns"], ["ModificationType", "alter", 3, "TableDefinition", "ExistingColumns"], [1, "modify-preview", 3, "TableDefinition", "IsAlter"], ["Mode", "modify", 3, "ColumnsChanged", "Columns"], ["mjButton", "", "buttonStyle", "primary", 3, "click", "disabled"]], template: function DatabaseModifyComponent_Template(rf, ctx) { if (rf & 1) {
|
|
292
|
+
i0.ɵɵelementStart(0, "div", 0);
|
|
293
|
+
i0.ɵɵconditionalCreate(1, DatabaseModifyComponent_Conditional_1_Template, 2, 0, "div", 1);
|
|
294
|
+
i0.ɵɵconditionalCreate(2, DatabaseModifyComponent_Conditional_2_Template, 3, 1, "div", 2);
|
|
295
|
+
i0.ɵɵconditionalCreate(3, DatabaseModifyComponent_Conditional_3_Template, 24, 17);
|
|
296
|
+
i0.ɵɵelementEnd();
|
|
297
|
+
} if (rf & 2) {
|
|
298
|
+
i0.ɵɵadvance();
|
|
299
|
+
i0.ɵɵconditional(ctx.IsLoading ? 1 : -1);
|
|
300
|
+
i0.ɵɵadvance();
|
|
301
|
+
i0.ɵɵconditional(ctx.LoadError ? 2 : -1);
|
|
302
|
+
i0.ɵɵadvance();
|
|
303
|
+
i0.ɵɵconditional(!ctx.IsLoading && !ctx.LoadError && ctx.EntityDetail ? 3 : -1);
|
|
304
|
+
} }, dependencies: [i1.MJButtonDirective, i2.LoadingComponent, i3.SplitComponent, i3.SplitAreaComponent, i4.EntityFieldsGridComponent, i5.EntityReviewPanelComponent, i6.EntityPipelinePanelComponent, i7.DatabasePreviewPaneComponent], styles: [".modify-root[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n\n\n\n\n.modify-loading[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.modify-error[_ngcontent-%COMP%] {\n margin: 16px;\n padding: 12px 16px;\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.875rem;\n}\n\n\n\n\n.modify-header[_ngcontent-%COMP%] {\n padding: 16px 20px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n.entity-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.entity-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.entity-name[_ngcontent-%COMP%] {\n font-weight: 700;\n font-size: 1rem;\n color: var(--mj-text-primary);\n}\n\n.schema-path[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n}\n\n\n\n\n.tab-bar[_ngcontent-%COMP%] {\n display: flex;\n border-bottom: 2px solid var(--mj-border-subtle);\n padding: 0 16px;\n flex-shrink: 0;\n gap: 0;\n}\n\n.tab-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n padding: 12px 16px;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n border: none;\n background: none;\n cursor: pointer;\n border-bottom: 2px solid transparent;\n margin-bottom: -2px;\n transition: color 0.15s, border-color 0.15s;\n white-space: nowrap;\n}\n\n.tab-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n.tab-btn.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.tab-btn.tab-apply.active[_ngcontent-%COMP%] {\n color: var(--mj-status-success-text);\n border-bottom-color: var(--mj-status-success);\n}\n\n\n\n\n.modify-split[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n width: 100%;\n}\n\n.modify-split[_ngcontent-%COMP%] as-split-area[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n}\n\n.modify-preview[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n min-width: 0;\n}\n\n\n\n\n.tab-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n\n.tab-content-full[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.apply-tab[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n\n\n\n.modify-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 10px;\n padding: 14px 20px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}"], changeDetection: 0 });
|
|
305
|
+
}
|
|
306
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DatabaseModifyComponent, [{
|
|
307
|
+
type: Component,
|
|
308
|
+
args: [{ standalone: false, selector: 'mj-database-modify', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"modify-root\">\n\n <!-- \u2500\u2500 Loading \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (IsLoading) {\n <div class=\"modify-loading\">\n <mj-loading text=\"Loading entity details\u2026\"></mj-loading>\n </div>\n }\n\n <!-- \u2500\u2500 Error \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (LoadError) {\n <div class=\"modify-error\" role=\"alert\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{ LoadError }}\n </div>\n }\n\n <!-- \u2500\u2500 Main view \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (!IsLoading && !LoadError && EntityDetail) {\n <!-- Entity header -->\n <div class=\"modify-header\">\n <div class=\"entity-info\">\n <i class=\"fa-solid fa-table-cells-large\"></i>\n <span class=\"entity-name\">{{ EntityDetail.entityName }}</span>\n <span class=\"schema-path\">{{ EntityDetail.schemaName }}.{{ EntityDetail.tableName }}</span>\n </div>\n </div>\n\n <!-- Tab bar -->\n <div class=\"tab-bar\" role=\"tablist\">\n <button\n role=\"tab\"\n class=\"tab-btn\"\n [class.active]=\"ActiveTab === 'fields'\"\n [attr.aria-selected]=\"ActiveTab === 'fields'\"\n (click)=\"SetTab('fields')\">\n <i class=\"fa-solid fa-table-list\"></i>\n Fields\n </button>\n <button\n role=\"tab\"\n class=\"tab-btn\"\n [class.active]=\"ActiveTab === 'review'\"\n [attr.aria-selected]=\"ActiveTab === 'review'\"\n (click)=\"SetTab('review')\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Review Changes\n </button>\n <button\n role=\"tab\"\n class=\"tab-btn\"\n [class.active]=\"ActiveTab === 'apply'\"\n [class.tab-apply]=\"true\"\n [attr.aria-selected]=\"ActiveTab === 'apply'\"\n (click)=\"SetTab('apply')\">\n <i class=\"fa-solid fa-rocket-launch\"></i>\n Apply Changes\n </button>\n </div>\n\n <!-- Tab content: Fields + Review get a live preview pane on the right; Apply takes full width -->\n @if (ActiveTab === 'apply') {\n\n <div class=\"tab-content tab-content-full\">\n <div class=\"apply-tab\">\n <mj-database-pipeline-panel\n [TableDefinition]=\"CurrentTableSpec\"\n ModificationType=\"alter\"\n [ExistingEntityId]=\"EntityId\"\n (Completed)=\"OnPipelineCompleted($event)\"\n (Errored)=\"OnPipelineErrored($event)\">\n </mj-database-pipeline-panel>\n </div>\n </div>\n\n } @else {\n\n <as-split direction=\"horizontal\" class=\"modify-split\" gutterSize=\"6\">\n\n <as-split-area [size]=\"55\" [minSize]=\"40\">\n <div class=\"tab-content\">\n\n @if (ActiveTab === 'fields') {\n <mj-database-fields-grid\n [Columns]=\"EditedColumns\"\n Mode=\"modify\"\n (ColumnsChanged)=\"OnColumnsChanged($event)\">\n </mj-database-fields-grid>\n }\n\n @if (ActiveTab === 'review') {\n <mj-database-review-panel\n [TableDefinition]=\"CurrentTableSpec\"\n ModificationType=\"alter\"\n [ExistingColumns]=\"ExistingColumns\">\n </mj-database-review-panel>\n }\n\n </div>\n </as-split-area>\n\n <as-split-area [size]=\"45\" [minSize]=\"25\">\n <mj-database-preview-pane\n class=\"modify-preview\"\n [TableDefinition]=\"CurrentTableSpec ?? {}\"\n [IsAlter]=\"true\">\n </mj-database-preview-pane>\n </as-split-area>\n\n </as-split>\n\n }\n\n <!-- Footer -->\n <div class=\"modify-footer\">\n <button mjButton buttonStyle=\"secondary\" (click)=\"OnCancel()\">\n @if (IsPipelineRunning) { Close } @else { Cancel }\n </button>\n @if (ActiveTab !== 'apply') {\n <button\n mjButton\n buttonStyle=\"primary\"\n [disabled]=\"!CanApplyChanges || IsPipelineRunning\"\n (click)=\"OnApplyChanges()\">\n <i class=\"fa-solid fa-rocket-launch\"></i>\n Apply Changes\n </button>\n }\n </div>\n }\n\n</div>\n", styles: [".modify-root {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n\n/* \u2500\u2500 Loading / Error \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.modify-loading {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.modify-error {\n margin: 16px;\n padding: 12px 16px;\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.875rem;\n}\n\n/* \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.modify-header {\n padding: 16px 20px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n.entity-info {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.entity-info i {\n color: var(--mj-brand-primary);\n}\n\n.entity-name {\n font-weight: 700;\n font-size: 1rem;\n color: var(--mj-text-primary);\n}\n\n.schema-path {\n font-family: monospace;\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n}\n\n/* \u2500\u2500 Tab bar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.tab-bar {\n display: flex;\n border-bottom: 2px solid var(--mj-border-subtle);\n padding: 0 16px;\n flex-shrink: 0;\n gap: 0;\n}\n\n.tab-btn {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n padding: 12px 16px;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n border: none;\n background: none;\n cursor: pointer;\n border-bottom: 2px solid transparent;\n margin-bottom: -2px;\n transition: color 0.15s, border-color 0.15s;\n white-space: nowrap;\n}\n\n.tab-btn:hover {\n color: var(--mj-text-primary);\n}\n\n.tab-btn.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.tab-btn.tab-apply.active {\n color: var(--mj-status-success-text);\n border-bottom-color: var(--mj-status-success);\n}\n\n/* \u2500\u2500 Split body (Fields + Review only) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.modify-split {\n flex: 1;\n min-height: 0;\n width: 100%;\n}\n\n.modify-split as-split-area {\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n}\n\n.modify-preview {\n display: block;\n height: 100%;\n min-width: 0;\n}\n\n/* \u2500\u2500 Tab content \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.tab-content {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n\n.tab-content-full {\n width: 100%;\n}\n\n.apply-tab {\n flex: 1;\n overflow-y: auto;\n}\n\n/* \u2500\u2500 Footer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.modify-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 10px;\n padding: 14px 20px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n"] }]
|
|
309
|
+
}], null, { EntityId: [{
|
|
310
|
+
type: Input
|
|
311
|
+
}], EntityModified: [{
|
|
312
|
+
type: Output
|
|
313
|
+
}], Cancelled: [{
|
|
314
|
+
type: Output
|
|
315
|
+
}], pipelinePanel: [{
|
|
316
|
+
type: ViewChild,
|
|
317
|
+
args: [EntityPipelinePanelComponent]
|
|
318
|
+
}] }); })();
|
|
319
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DatabaseModifyComponent, { className: "DatabaseModifyComponent", filePath: "src/DatabaseDesigner/components/modify/database-modify.component.ts", lineNumber: 33 }); })();
|
|
320
|
+
//# sourceMappingURL=database-modify.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-modify.component.js","sourceRoot":"","sources":["../../../../src/DatabaseDesigner/components/modify/database-modify.component.ts","../../../../src/DatabaseDesigner/components/modify/database-modify.component.html"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACH,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EACtC,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,EAAE,SAAS,GAChE,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;;;;;;;;;;;IChBxF,8BAA4B;IAC1B,gCAAwD;IAC1D,iBAAM;;;IAKN,8BAAuC;IACrC,uBAA8C;IAC9C,YACF;IAAA,iBAAM;;;IADJ,eACF;IADE,iDACF;;;;IAmDM,AADF,AADF,+BAA0C,cACjB,qCAMmB;IAAtC,AADA,6OAAa,kCAA2B,KAAC,4NAC9B,gCAAyB,KAAC;IAG3C,AADE,AADE,iBAA6B,EACzB,EACF;;;IAPA,eAAoC;IAEpC,AAFA,yDAAoC,qCAEP;;;;IAe3B,mDAG8C;IAA5C,kQAAkB,+BAAwB,KAAC;IAC7C,iBAA0B;;;IAHxB,8CAAyB;;;IAO3B,+CAI2B;;;IADzB,AAFA,yDAAoC,2CAED;;;IAdzC,AADF,AAFF,oCAAqE,wBAEzB,cACf;IAEvB,2IAA8B;IAQ9B,4IAA8B;IASlC,AADE,iBAAM,EACQ;IAEhB,yCAA0C;IACxC,+CAI2B;IAG/B,AAFE,iBAAgB,EAEP;;;IA9BM,cAAW;IAAC,AAAZ,yBAAW,eAAe;IAGrC,eAMC;IAND,wDAMC;IAED,cAMC;IAND,wDAMC;IAKU,cAAW;IAAC,AAAZ,yBAAW,eAAe;IAGrC,cAA0C;IAC1C,AADA,uFAA0C,iBAC1B;;;IAWM,uBAAM;;;IAAU,wBAAO;;;;IAGjD,kCAI6B;IAA3B,2MAAS,uBAAgB,KAAC;IAC1B,wBAAyC;IACzC,+BACF;IAAA,iBAAS;;;IAJP,8EAAkD;;;;IArGtD,AADF,8BAA2B,aACA;IACvB,uBAA6C;IAC7C,+BAA0B;IAAA,YAA6B;IAAA,iBAAO;IAC9D,+BAA0B;IAAA,YAA0D;IAExF,AADE,AADsF,iBAAO,EACvF,EACF;IAIJ,AADF,+BAAoC,iBAML;IAA3B,2LAAS,cAAO,QAAQ,CAAC,KAAC;IAC1B,wBAAsC;IACtC,yBACF;IAAA,iBAAS;IACT,mCAK6B;IAA3B,4LAAS,cAAO,QAAQ,CAAC,KAAC;IAC1B,yBAA4C;IAC5C,iCACF;IAAA,iBAAS;IACT,mCAM4B;IAA1B,4LAAS,cAAO,OAAO,CAAC,KAAC;IACzB,yBAAyC;IACzC,gCACF;IACF,AADE,iBAAS,EACL;IAiBJ,AAdF,0GAA6B,yFAcpB;IAwCP,AADF,gCAA2B,kBACqC;IAArB,4LAAS,iBAAU,KAAC;IACzB,AAAlC,+FAAyB,yEAAgB;IAC3C,iBAAS;IACT,6GAA6B;IAU/B,iBAAM;;;IAzGwB,eAA6B;IAA7B,oDAA6B;IAC7B,eAA0D;IAA1D,6FAA0D;IASpF,eAAuC;IAAvC,uDAAuC;;IASvC,eAAuC;IAAvC,uDAAuC;;IASvC,eAAsC;IACtC,AADA,sDAAsC,mBACd;;IAS5B,eAkDC;IAlDD,wDAkDC;IAKG,eAAkD;IAAlD,oDAAkD;IAEpD,eASC;IATD,wDASC;;AD/FP,MAAM,OAAO,uBAAuB;IAEhC,0EAA0E;IAEzD,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAEjD,0EAA0E;IAE1E,IAAoB,QAAQ,CAAC,CAAS;QAClC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB,IAAI,IAAI,CAAC,YAAY;gBAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnD,CAAC;IACL,CAAC;IACD,IAAW,QAAQ,KAAa,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAChD,SAAS,GAAG,EAAE,CAAC;IACf,YAAY,GAAG,KAAK,CAAC;IAEH,cAAc,GAAG,IAAI,YAAY,EAAwB,CAAC;IAC1D,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE/D,0EAA0E;IAEnE,SAAS,GAAc,QAAQ,CAAC;IAChC,SAAS,GAAG,KAAK,CAAC;IAClB,SAAS,GAAkB,IAAI,CAAC;IAChC,YAAY,GAAkC,IAAI,CAAC;IAE1D,kFAAkF;IAC3E,aAAa,GAAiB,EAAE,CAAC;IAEjC,iBAAiB,GAAG,KAAK,CAAC;IAC1B,eAAe,GAAG,KAAK,CAAC;IAGvB,aAAa,CAAgC;IAErD,0EAA0E;IAE1E,KAAK,CAAC,QAAQ;QACV,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAClC,CAAC;IAED,WAAW;QACP,gEAAgE;IACpE,CAAC;IAED,0EAA0E;IAEnE,MAAM,CAAC,GAAc;QACxB,oEAAoE;QACpE,IAAI,IAAI,CAAC,iBAAiB,IAAI,GAAG,KAAK,OAAO;YAAE,OAAO;QACtD,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAED,0EAA0E;IAEnE,gBAAgB,CAAC,OAAqB;QACzC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAED,0EAA0E;IAEnE,cAAc;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QACxD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEM,mBAAmB,CAAC,MAA4B;QACnD,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,sBAAsB,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAEM,iBAAiB,CAAC,IAAY;QACjC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAEM,QAAQ;QACX,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,kGAAkG;YAClG,sFAAsF;YACtF,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAC5B,4EAA4E;gBAC5E,yEAAyE,CAC5E,CAAC;YACF,IAAI,CAAC,SAAS;gBAAE,OAAO;QAC3B,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,0EAA0E;IAE1E,IAAW,gBAAgB;QACvB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO;YACH,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU;YACxC,SAAS,EAAG,IAAI,CAAC,YAAY,CAAC,SAAS;YACvC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU;YACxC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW;YAC1C,OAAO,EAAE,IAAI,CAAC,aAAa;SAC9B,CAAC;IACN,CAAC;IAED,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,YAAY,EAAE,OAAO,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,0EAA0E;IAElE,KAAK,CAAC,gBAAgB;QAC1B,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAExB,IAAI,CAAC;YACD,IAAI,CAAC,YAAY,GAAG,MAAM,sBAAsB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3F,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACxD,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,SAAS,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtE,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,yEAAyE;IACjE,UAAU;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,IAAI,EAAE,CAAC;QAClD,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC/D,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CACtC,GAAG,CAAC,IAAI,KAAa,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI;YACtC,GAAG,CAAC,IAAI,KAAa,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI;YACtC,GAAG,CAAC,UAAU,KAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU;YAC5C,GAAG,CAAC,SAAS,KAAQ,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS;YAC3C,GAAG,CAAC,SAAS,KAAQ,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS;YAC3C,GAAG,CAAC,KAAK,KAAY,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK;YACvC,GAAG,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY;YAC9C,GAAG,CAAC,WAAW,KAAM,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,CAChD,CAAC;IACN,CAAC;iHAxJQ,uBAAuB;6DAAvB,uBAAuB;2BAkCrB,4BAA4B;;;;;YClE3C,8BAAyB;YAGvB,yFAAiB;YAOjB,yFAAiB;YAQjB,iFAAgD;YAiHlD,iBAAM;;YAhIJ,cAIC;YAJD,wCAIC;YAGD,cAKC;YALD,wCAKC;YAGD,cA+GC;YA/GD,+EA+GC;;;iFDjGU,uBAAuB;cAPnC,SAAS;6BACM,KAAK,YACP,oBAAoB,mBAGb,uBAAuB,CAAC,MAAM;;kBAU9C,KAAK;;kBAUL,MAAM;;kBACN,MAAM;;kBAeN,SAAS;mBAAC,4BAA4B;;kFAlC9B,uBAAuB","sourcesContent":["/**\n * @module database-modify.component\n * @description Slide-over view for modifying an existing Database Designer entity.\n *\n * Rendered inside an `mj-slide-panel` by the dashboard when the user clicks Edit.\n * Presents three tabs:\n * 1. Fields — EntityFieldsGridComponent in modify mode (existing + new columns)\n * 2. Review — EntityReviewPanelComponent showing diff (new cols highlighted)\n * 3. Apply — EntityPipelinePanelComponent for running the alter pipeline\n *\n * On tab 3 (\"Apply\"), clicking \"Apply Changes\" calls `pipelinePanel.StartExecution()`.\n * The pipeline panel then calls `DatabaseDesignerService.modifyEntity()`.\n */\n\nimport {\n Component, Input, Output, EventEmitter, OnInit, OnDestroy,\n ChangeDetectionStrategy, ChangeDetectorRef, inject, ViewChild,\n} from '@angular/core';\nimport { DatabaseDesignerService } from '../../services/database-designer.service.js';\nimport { DatabaseDesignerEngine } from '../../services/database-designer.engine.js';\nimport { EntityPipelinePanelComponent } from '../shared/entity-pipeline-panel.component.js';\nimport type { AccessibleEntityDetail, ColumnSpec, EntityTableSpec, EntityPipelineResult } from '../../database-designer.types.js';\n\ntype ModifyTab = 'fields' | 'review' | 'apply';\n\n@Component({\n standalone: false,\n selector: 'mj-database-modify',\n templateUrl: './database-modify.component.html',\n styleUrls: ['./database-modify.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DatabaseModifyComponent implements OnInit, OnDestroy {\n\n // ─── Injected ──────────────────────────────────────────────────────────\n\n private readonly cdr = inject(ChangeDetectorRef);\n\n // ─── Inputs / Outputs ──────────────────────────────────────────────────\n\n @Input() public set EntityId(v: string) {\n if (v && v !== this._entityId) {\n this._entityId = v;\n if (this._initialized) this.loadEntityDetail();\n }\n }\n public get EntityId(): string { return this._entityId; }\n private _entityId = '';\n private _initialized = false;\n\n @Output() public readonly EntityModified = new EventEmitter<EntityPipelineResult>();\n @Output() public readonly Cancelled = new EventEmitter<void>();\n\n // ─── View state ────────────────────────────────────────────────────────\n\n public ActiveTab: ModifyTab = 'fields';\n public IsLoading = false;\n public LoadError: string | null = null;\n public EntityDetail: AccessibleEntityDetail | null = null;\n\n /** Columns being edited — starts from existing entity fields + user additions. */\n public EditedColumns: ColumnSpec[] = [];\n\n public IsPipelineRunning = false;\n public CanApplyChanges = false;\n\n @ViewChild(EntityPipelinePanelComponent)\n private pipelinePanel?: EntityPipelinePanelComponent;\n\n // ─── Lifecycle ─────────────────────────────────────────────────────────\n\n async ngOnInit(): Promise<void> {\n this._initialized = true;\n await this.loadEntityDetail();\n }\n\n ngOnDestroy(): void {\n // Cleanup not needed — no subscriptions beyond the load promise\n }\n\n // ─── Tab navigation ────────────────────────────────────────────────────\n\n public SetTab(tab: ModifyTab): void {\n // Don't allow switching away from 'apply' once pipeline has started\n if (this.IsPipelineRunning && tab !== 'apply') return;\n this.ActiveTab = tab;\n this.cdr.markForCheck();\n }\n\n // ─── Column change handler ─────────────────────────────────────────────\n\n public OnColumnsChanged(columns: ColumnSpec[]): void {\n this.EditedColumns = columns;\n this.CanApplyChanges = this.hasChanges();\n this.cdr.markForCheck();\n }\n\n // ─── Apply / Pipeline ──────────────────────────────────────────────────\n\n public OnApplyChanges(): void {\n if (!this.EntityDetail || !this.CanApplyChanges) return;\n this.IsPipelineRunning = true;\n this.SetTab('apply');\n setTimeout(() => this.pipelinePanel?.StartExecution(), 0);\n }\n\n public OnPipelineCompleted(result: EntityPipelineResult): void {\n this.IsPipelineRunning = false;\n DatabaseDesignerEngine.Instance.invalidateCache();\n this.EntityModified.emit(result);\n this.cdr.markForCheck();\n }\n\n public OnPipelineErrored(_msg: string): void {\n this.IsPipelineRunning = false;\n this.cdr.markForCheck();\n }\n\n public OnCancel(): void {\n if (this.IsPipelineRunning) {\n // Use native confirm so the guard stays synchronous — required by MjSlidePanelComponent.CanClose.\n // The pipeline continues on the server regardless; we're only hiding the progress UI.\n const confirmed = window.confirm(\n 'A pipeline operation is in progress. Closing will hide the progress panel ' +\n 'but the operation will continue running on the server.\\n\\nAre you sure?'\n );\n if (!confirmed) return;\n }\n this.Cancelled.emit();\n }\n\n // ─── Template helpers ──────────────────────────────────────────────────\n\n public get CurrentTableSpec(): EntityTableSpec | null {\n if (!this.EntityDetail) return null;\n return {\n EntityName: this.EntityDetail.entityName,\n TableName: this.EntityDetail.tableName,\n SchemaName: this.EntityDetail.schemaName,\n Description: this.EntityDetail.description,\n Columns: this.EditedColumns,\n };\n }\n\n public get ExistingColumns(): ColumnSpec[] {\n return this.EntityDetail?.columns ?? [];\n }\n\n // ─── Private helpers ───────────────────────────────────────────────────\n\n private async loadEntityDetail(): Promise<void> {\n if (!this._entityId) return;\n\n this.IsLoading = true;\n this.LoadError = null;\n this.cdr.markForCheck();\n\n try {\n this.EntityDetail = await DatabaseDesignerEngine.Instance.loadEntityDetail(this._entityId);\n if (this.EntityDetail) {\n this.EditedColumns = [...this.EntityDetail.columns];\n }\n } catch (err) {\n this.LoadError = err instanceof Error ? err.message : String(err);\n } finally {\n this.IsLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n /** True if the user added new columns or changed any existing column. */\n private hasChanges(): boolean {\n const original = this.EntityDetail?.columns ?? [];\n if (this.EditedColumns.length !== original.length) return true;\n return this.EditedColumns.some((col, i) =>\n col.Name !== original[i]?.Name ||\n col.Type !== original[i]?.Type ||\n col.IsNullable !== original[i]?.IsNullable ||\n col.MaxLength !== original[i]?.MaxLength ||\n col.Precision !== original[i]?.Precision ||\n col.Scale !== original[i]?.Scale ||\n col.DefaultValue !== original[i]?.DefaultValue ||\n col.Description !== original[i]?.Description\n );\n }\n}\n","<div class=\"modify-root\">\n\n <!-- ── Loading ───────────────────────────────────────────────────────── -->\n @if (IsLoading) {\n <div class=\"modify-loading\">\n <mj-loading text=\"Loading entity details…\"></mj-loading>\n </div>\n }\n\n <!-- ── Error ─────────────────────────────────────────────────────────── -->\n @if (LoadError) {\n <div class=\"modify-error\" role=\"alert\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{ LoadError }}\n </div>\n }\n\n <!-- ── Main view ─────────────────────────────────────────────────────── -->\n @if (!IsLoading && !LoadError && EntityDetail) {\n <!-- Entity header -->\n <div class=\"modify-header\">\n <div class=\"entity-info\">\n <i class=\"fa-solid fa-table-cells-large\"></i>\n <span class=\"entity-name\">{{ EntityDetail.entityName }}</span>\n <span class=\"schema-path\">{{ EntityDetail.schemaName }}.{{ EntityDetail.tableName }}</span>\n </div>\n </div>\n\n <!-- Tab bar -->\n <div class=\"tab-bar\" role=\"tablist\">\n <button\n role=\"tab\"\n class=\"tab-btn\"\n [class.active]=\"ActiveTab === 'fields'\"\n [attr.aria-selected]=\"ActiveTab === 'fields'\"\n (click)=\"SetTab('fields')\">\n <i class=\"fa-solid fa-table-list\"></i>\n Fields\n </button>\n <button\n role=\"tab\"\n class=\"tab-btn\"\n [class.active]=\"ActiveTab === 'review'\"\n [attr.aria-selected]=\"ActiveTab === 'review'\"\n (click)=\"SetTab('review')\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Review Changes\n </button>\n <button\n role=\"tab\"\n class=\"tab-btn\"\n [class.active]=\"ActiveTab === 'apply'\"\n [class.tab-apply]=\"true\"\n [attr.aria-selected]=\"ActiveTab === 'apply'\"\n (click)=\"SetTab('apply')\">\n <i class=\"fa-solid fa-rocket-launch\"></i>\n Apply Changes\n </button>\n </div>\n\n <!-- Tab content: Fields + Review get a live preview pane on the right; Apply takes full width -->\n @if (ActiveTab === 'apply') {\n\n <div class=\"tab-content tab-content-full\">\n <div class=\"apply-tab\">\n <mj-database-pipeline-panel\n [TableDefinition]=\"CurrentTableSpec\"\n ModificationType=\"alter\"\n [ExistingEntityId]=\"EntityId\"\n (Completed)=\"OnPipelineCompleted($event)\"\n (Errored)=\"OnPipelineErrored($event)\">\n </mj-database-pipeline-panel>\n </div>\n </div>\n\n } @else {\n\n <as-split direction=\"horizontal\" class=\"modify-split\" gutterSize=\"6\">\n\n <as-split-area [size]=\"55\" [minSize]=\"40\">\n <div class=\"tab-content\">\n\n @if (ActiveTab === 'fields') {\n <mj-database-fields-grid\n [Columns]=\"EditedColumns\"\n Mode=\"modify\"\n (ColumnsChanged)=\"OnColumnsChanged($event)\">\n </mj-database-fields-grid>\n }\n\n @if (ActiveTab === 'review') {\n <mj-database-review-panel\n [TableDefinition]=\"CurrentTableSpec\"\n ModificationType=\"alter\"\n [ExistingColumns]=\"ExistingColumns\">\n </mj-database-review-panel>\n }\n\n </div>\n </as-split-area>\n\n <as-split-area [size]=\"45\" [minSize]=\"25\">\n <mj-database-preview-pane\n class=\"modify-preview\"\n [TableDefinition]=\"CurrentTableSpec ?? {}\"\n [IsAlter]=\"true\">\n </mj-database-preview-pane>\n </as-split-area>\n\n </as-split>\n\n }\n\n <!-- Footer -->\n <div class=\"modify-footer\">\n <button mjButton buttonStyle=\"secondary\" (click)=\"OnCancel()\">\n @if (IsPipelineRunning) { Close } @else { Cancel }\n </button>\n @if (ActiveTab !== 'apply') {\n <button\n mjButton\n buttonStyle=\"primary\"\n [disabled]=\"!CanApplyChanges || IsPipelineRunning\"\n (click)=\"OnApplyChanges()\">\n <i class=\"fa-solid fa-rocket-launch\"></i>\n Apply Changes\n </button>\n }\n </div>\n }\n\n</div>\n"]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { ERDNode, ERDField } from '@memberjunction/ng-entity-relationship-diagram';
|
|
2
|
+
import type { ColumnSpec, EntityTableSpec, ForeignKeySpec } from '../../database-designer.types.js';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/** Which tab is currently active. */
|
|
5
|
+
export type PreviewTab = 'diagram' | 'sql';
|
|
6
|
+
export declare class DatabasePreviewPaneComponent {
|
|
7
|
+
private readonly cdr;
|
|
8
|
+
/**
|
|
9
|
+
* Current wizard draft. Accepts a partial spec so the preview can
|
|
10
|
+
* render meaningfully even on Step 1 (name only).
|
|
11
|
+
*/
|
|
12
|
+
set TableDefinition(value: Partial<EntityTableSpec> | null | undefined);
|
|
13
|
+
get TableDefinition(): Partial<EntityTableSpec>;
|
|
14
|
+
private _tableDefinition;
|
|
15
|
+
/**
|
|
16
|
+
* True when this preview is showing an edit of an existing entity
|
|
17
|
+
* (modify flow). Switches the SQL header to `ALTER` wording and draws
|
|
18
|
+
* a "current vs proposed" indicator in the diagram.
|
|
19
|
+
*
|
|
20
|
+
* Defaults to false (create flow).
|
|
21
|
+
*/
|
|
22
|
+
set IsAlter(value: boolean);
|
|
23
|
+
get IsAlter(): boolean;
|
|
24
|
+
private _isAlter;
|
|
25
|
+
ActiveTab: PreviewTab;
|
|
26
|
+
ErdNodes: ERDNode[];
|
|
27
|
+
SqlText: string;
|
|
28
|
+
/** Focus node ID — lets `mj-erd-diagram` highlight the in-progress entity. */
|
|
29
|
+
FocusNodeId: string | null;
|
|
30
|
+
/**
|
|
31
|
+
* Stable config reference — bound to `mj-erd-diagram` via `[config]`.
|
|
32
|
+
* Must be a class property, not an inline object literal in the template,
|
|
33
|
+
* or every CD cycle produces a new reference and the ERD re-runs its
|
|
34
|
+
* layout / fit-to-view on every tick.
|
|
35
|
+
*/
|
|
36
|
+
readonly ErdConfig: {
|
|
37
|
+
readonly showAllFields: true;
|
|
38
|
+
readonly maxNodeHeight: 520;
|
|
39
|
+
};
|
|
40
|
+
SelectTab(tab: PreviewTab): void;
|
|
41
|
+
private recompute;
|
|
42
|
+
/**
|
|
43
|
+
* Look up each FK target in MJ metadata and return PK + name-field rows per
|
|
44
|
+
* satellite node. Falls back to a minimal single-column stub when the
|
|
45
|
+
* referenced table isn't a known MJ entity.
|
|
46
|
+
*/
|
|
47
|
+
private resolveSatelliteFields;
|
|
48
|
+
/** DOM id for the focus node, used by `mj-erd-diagram` to highlight. */
|
|
49
|
+
static BuildFocusId(spec: Partial<EntityTableSpec>): string | null;
|
|
50
|
+
/**
|
|
51
|
+
* ERD node list: one focus node + one satellite per distinct FK target.
|
|
52
|
+
* `satelliteEnrichments` — optional PK + name-field rows per satellite,
|
|
53
|
+
* keyed by `MakeSatelliteId(fk)`. When absent, satellites render a
|
|
54
|
+
* minimal single-column stub.
|
|
55
|
+
*/
|
|
56
|
+
static BuildErdNodes(spec: Partial<EntityTableSpec>, satelliteEnrichments?: Map<string, ERDField[]>): ERDNode[];
|
|
57
|
+
/**
|
|
58
|
+
* Field list for the focus node: PK + user columns + synthetic FK columns + system audit.
|
|
59
|
+
* Pure — no link annotation. `AnnotateFkLinks` runs after to mark FK sources.
|
|
60
|
+
*/
|
|
61
|
+
static BuildFocusFields(focusId: string, spec: Partial<EntityTableSpec>): ERDField[];
|
|
62
|
+
/** Stamp FK metadata onto any existing fields that match an FK source column. */
|
|
63
|
+
static AnnotateFkLinks(fields: ERDField[], foreignKeys: ForeignKeySpec[]): void;
|
|
64
|
+
/**
|
|
65
|
+
* One satellite node per distinct FK target (dedupes on schema+table).
|
|
66
|
+
* When `enrichments` provides rows for a satellite id, those rows (PK +
|
|
67
|
+
* name field, resolved from MJ metadata) are used instead of the minimal
|
|
68
|
+
* single-column stub.
|
|
69
|
+
*/
|
|
70
|
+
static BuildSatelliteNodes(foreignKeys: ForeignKeySpec[], enrichments?: Map<string, ERDField[]>): ERDNode[];
|
|
71
|
+
static MakeSatelliteId(fk: ForeignKeySpec): string;
|
|
72
|
+
/** Preview DDL for the given TableDefinition. `isAlter` only affects the lead comment. */
|
|
73
|
+
static BuildSqlText(spec: Partial<EntityTableSpec>, isAlter?: boolean): string;
|
|
74
|
+
static FormatColumnLine(col: ColumnSpec): string;
|
|
75
|
+
static FormatFieldType(col: ColumnSpec): string;
|
|
76
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatabasePreviewPaneComponent, never>;
|
|
77
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatabasePreviewPaneComponent, "mj-database-preview-pane", never, { "TableDefinition": { "alias": "TableDefinition"; "required": false; }; "IsAlter": { "alias": "IsAlter"; "required": false; }; }, {}, never, never, false, never>;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=database-preview-pane.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-preview-pane.component.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseDesigner/components/shared/database-preview-pane.component.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;;AAEpG,qCAAqC;AACrC,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC;AAE3C,qBAOa,4BAA4B;IAErC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IAIjD;;;OAGG;IACH,IACW,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,GAAG,SAAS,EAG5E;IACD,IAAW,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC,CAAkC;IACxF,OAAO,CAAC,gBAAgB,CAAgC;IAExD;;;;;;OAMG;IACH,IACW,OAAO,CAAC,KAAK,EAAE,OAAO,EAGhC;IACD,IAAW,OAAO,IAAI,OAAO,CAA0B;IACvD,OAAO,CAAC,QAAQ,CAAS;IAIlB,SAAS,EAAE,UAAU,CAAa;IAElC,QAAQ,EAAE,OAAO,EAAE,CAAM;IAEzB,OAAO,SAAM;IAEpB,8EAA8E;IACvE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEzC;;;;;OAKG;IACH,SAAgB,SAAS;;;MAAwD;IAI1E,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IAOvC,OAAO,CAAC,SAAS;IAQjB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IA2C9B,wEAAwE;WAC1D,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,MAAM,GAAG,IAAI;IAKzE;;;;;OAKG;WACW,aAAa,CACvB,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,EAC9B,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GAC/C,OAAO,EAAE;IAoBZ;;;OAGG;WACW,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,QAAQ,EAAE;IAmE3F,iFAAiF;WACnE,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,IAAI;IAYtF;;;;;OAKG;WACW,mBAAmB,CAC7B,WAAW,EAAE,cAAc,EAAE,EAC7B,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GACtC,OAAO,EAAE;WA+BE,eAAe,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM;IAIzD,2FAA2F;WAC7E,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,UAAQ,GAAG,MAAM;WA+CrE,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;WAQzC,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;yCAhV7C,4BAA4B;2CAA5B,4BAA4B;CAkWxC"}
|