@memberjunction/ng-dashboards 3.4.0 → 4.1.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/README.md +102 -339
- package/dist/AI/components/agents/agent-configuration.component.d.ts +12 -5
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +103 -44
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts +14 -5
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +149 -211
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +4 -4
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
- package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
- package/dist/AI/components/charts/performance-heatmap.component.js +4 -6
- package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
- package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
- package/dist/AI/components/charts/time-series-chart.component.js +6 -7
- package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts +0 -4
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +33 -37
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +3 -6
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +34 -27
- package/dist/AI/components/models/model-management.component.js.map +1 -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 +22 -17
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +4 -4
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +3 -6
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +34 -32
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -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 +33 -28
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +4 -4
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +0 -4
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +26 -27
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
- package/dist/AI/components/widgets/kpi-card.component.js +52 -42
- package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
- package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
- package/dist/AI/components/widgets/live-execution-widget.component.js +7 -7
- package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts +0 -2
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +193 -189
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts +0 -2
- package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +175 -180
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts +0 -2
- package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +231 -225
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-list.component.d.ts +0 -2
- package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-list.component.js +113 -114
- package/dist/APIKeys/api-key-list.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +0 -2
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +294 -302
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.d.ts +0 -2
- package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +151 -155
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.d.ts +0 -2
- package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.js +237 -234
- package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +15 -14
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +3 -6
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +17 -19
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +6 -6
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/code-management.component.d.ts +0 -4
- package/dist/Actions/components/code-management.component.d.ts.map +1 -1
- package/dist/Actions/components/code-management.component.js +3 -9
- package/dist/Actions/components/code-management.component.js.map +1 -1
- package/dist/Actions/components/entity-integration.component.d.ts +0 -4
- package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
- package/dist/Actions/components/entity-integration.component.js +3 -9
- package/dist/Actions/components/entity-integration.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +3 -6
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +13 -16
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/executions-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/executions-list-view.component.js +3 -3
- package/dist/Actions/components/executions-list-view.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-breadcrumb.component.js +6 -6
- package/dist/Actions/components/explorer/action-breadcrumb.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +11 -10
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -4
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +10 -14
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-list-item.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-list-item.component.js +8 -8
- package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +15 -14
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-tree-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-tree-panel.component.js +11 -10
- package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/index.d.ts +0 -1
- package/dist/Actions/components/explorer/index.d.ts.map +1 -1
- package/dist/Actions/components/explorer/index.js +0 -4
- package/dist/Actions/components/explorer/index.js.map +1 -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 +10 -10
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -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 +8 -8
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.d.ts +0 -4
- package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.js +3 -9
- package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
- package/dist/Actions/components/security-permissions.component.d.ts +0 -4
- package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
- package/dist/Actions/components/security-permissions.component.js +3 -9
- package/dist/Actions/components/security-permissions.component.js.map +1 -1
- package/dist/Actions/index.d.ts +0 -7
- package/dist/Actions/index.d.ts.map +1 -1
- package/dist/Actions/index.js +0 -8
- package/dist/Actions/index.js.map +1 -1
- package/dist/Communication/communication-dashboard.component.d.ts +0 -1
- package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
- package/dist/Communication/communication-dashboard.component.js +38 -51
- package/dist/Communication/communication-dashboard.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +0 -4
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +112 -108
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts +0 -4
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +210 -201
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts +0 -4
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +136 -124
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts +0 -4
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +91 -88
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +0 -4
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -122
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +0 -4
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +21 -20
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -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 +11 -12
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +25 -22
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +16 -16
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/browser/component-browser.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/browser/component-browser.component.js +23 -21
- package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +10 -10
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +13 -13
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js +7 -7
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/spec-editor.component.js +5 -5
- package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +4 -4
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +9 -9
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/text-import-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/text-import-dialog.component.js +4 -4
- package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.js +10 -9
- package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +4 -4
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +200 -196
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +195 -190
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +251 -240
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +228 -226
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +214 -210
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.d.ts +0 -1
- package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.js +31 -44
- package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
- package/dist/Credentials/pipes/group-by.pipe.d.ts.map +1 -1
- package/dist/Credentials/pipes/group-by.pipe.js +2 -1
- package/dist/Credentials/pipes/group-by.pipe.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +0 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +73 -80
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +46 -45
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +7 -7
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +15 -15
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +17 -11
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +2 -4
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +83 -64
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts +0 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +3 -6
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/DataExplorer/index.d.ts +2 -2
- package/dist/DataExplorer/index.d.ts.map +1 -1
- package/dist/DataExplorer/index.js +2 -2
- package/dist/DataExplorer/index.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +0 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +6 -7
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-application.d.ts +109 -27
- package/dist/Home/home-application.d.ts.map +1 -1
- package/dist/Home/home-application.js +351 -75
- package/dist/Home/home-application.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +48 -12
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +267 -187
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +0 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +761 -685
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts +0 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +340 -316
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts +0 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +530 -482
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +0 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +508 -455
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +44 -39
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/Lists/index.d.ts +0 -1
- package/dist/Lists/index.d.ts.map +1 -1
- package/dist/Lists/index.js +0 -11
- package/dist/Lists/index.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts +0 -4
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +33 -39
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-log-detail-panel.component.d.ts +0 -4
- package/dist/MCP/components/mcp-log-detail-panel.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-log-detail-panel.component.js +42 -44
- package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts +3 -4
- package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +186 -77
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts +0 -4
- package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.js +187 -187
- package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
- package/dist/MCP/index.d.ts +5 -5
- package/dist/MCP/index.d.ts.map +1 -1
- package/dist/MCP/index.js +5 -5
- package/dist/MCP/index.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +65 -7
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +976 -697
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp-filter-panel.component.d.ts +54 -0
- package/dist/MCP/mcp-filter-panel.component.d.ts.map +1 -0
- package/dist/MCP/mcp-filter-panel.component.js +288 -0
- package/dist/MCP/mcp-filter-panel.component.js.map +1 -0
- package/dist/MCP/mcp-resource.component.d.ts +11 -5
- package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
- package/dist/MCP/mcp-resource.component.js +8 -9
- package/dist/MCP/mcp-resource.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +16 -19
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +17 -26
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/MCP/services/mcp-tools.service.d.ts +10 -4
- package/dist/MCP/services/mcp-tools.service.d.ts.map +1 -1
- package/dist/MCP/services/mcp-tools.service.js +5 -6
- package/dist/MCP/services/mcp-tools.service.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +0 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +79 -88
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/job-slideout.component.d.ts.map +1 -1
- package/dist/Scheduling/components/job-slideout.component.js +117 -116
- package/dist/Scheduling/components/job-slideout.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +0 -4
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +3 -9
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +134 -134
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +0 -4
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +3 -9
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +102 -97
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +0 -4
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +3 -9
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +127 -122
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +0 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +35 -43
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +0 -4
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1552 -1534
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +3 -3
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +30 -30
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +3 -3
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +7 -7
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +3 -3
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +42 -35
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +3 -3
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +16 -16
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +3 -3
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +15 -15
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.d.ts.map +1 -1
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +73 -61
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
- package/dist/Testing/components/widgets/suite-tree.component.d.ts.map +1 -1
- package/dist/Testing/components/widgets/suite-tree.component.js +34 -31
- package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
- package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -1
- package/dist/Testing/components/widgets/test-run-detail-panel.component.js +180 -171
- package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +0 -1
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +9 -8
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts +119 -0
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/diff-resource.component.js +1162 -0
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -0
- package/dist/VersionHistory/components/graph-resource.component.d.ts +67 -0
- package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/graph-resource.component.js +521 -0
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -0
- package/dist/VersionHistory/components/index.d.ts +5 -0
- package/dist/VersionHistory/components/index.d.ts.map +1 -0
- package/dist/VersionHistory/components/index.js +5 -0
- package/dist/VersionHistory/components/index.js.map +1 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts +89 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/labels-resource.component.js +968 -0
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -0
- package/dist/VersionHistory/components/restore-resource.component.d.ts +40 -0
- package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/restore-resource.component.js +472 -0
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -0
- package/dist/VersionHistory/index.d.ts +2 -0
- package/dist/VersionHistory/index.d.ts.map +1 -0
- package/dist/VersionHistory/index.js +2 -0
- package/dist/VersionHistory/index.js.map +1 -0
- package/dist/module.d.ts +42 -36
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +41 -7
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +20 -19
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +22 -120
- package/dist/public-api.js.map +1 -1
- package/dist/shared/pipes/highlight-search.pipe.d.ts.map +1 -1
- package/dist/shared/pipes/highlight-search.pipe.js +2 -1
- package/dist/shared/pipes/highlight-search.pipe.js.map +1 -1
- package/package.json +64 -62
|
@@ -3,20 +3,38 @@ import { SharedService } from '@memberjunction/ng-shared';
|
|
|
3
3
|
/**
|
|
4
4
|
* Home Application - Provides dynamic navigation items for orphan resources.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* Maintains a recency-ordered stack of up to 3 recently visited orphan resources.
|
|
7
|
+
* When the user opens a record/view/dashboard from within the Home app, the resource
|
|
8
|
+
* appears as a dynamic nav item. When they navigate away (e.g., click Home), the
|
|
9
|
+
* nav item persists so they can quickly jump back. Older items drop off as new ones
|
|
10
|
+
* are added.
|
|
11
|
+
*
|
|
12
|
+
* The stack is persisted to localStorage (via Metadata.Provider.LocalStorageProvider)
|
|
13
|
+
* so it survives page reloads. Resolved record labels are stored alongside each
|
|
14
|
+
* snapshot to avoid async lookups when restoring from storage.
|
|
9
15
|
*
|
|
10
16
|
* @example
|
|
11
|
-
* User opens "John Smith" contact
|
|
12
|
-
* -
|
|
13
|
-
* - Clicking
|
|
17
|
+
* User opens "John Smith" contact, then "Acme Corp" company:
|
|
18
|
+
* - Nav shows: [Home] [Favorites] | [person] "Acme Corp" [building] "John Smith"
|
|
19
|
+
* - Clicking "John Smith" re-opens that record
|
|
14
20
|
*/
|
|
15
21
|
export declare class HomeApplication extends BaseApplication {
|
|
22
|
+
private static readonly MAX_RECENT_ITEMS;
|
|
16
23
|
private workspaceManager;
|
|
17
24
|
private sharedService;
|
|
25
|
+
private recentOrphanStack;
|
|
26
|
+
private _storageLoadPromise;
|
|
27
|
+
/**
|
|
28
|
+
* Fingerprint of the last-processed active tab state (tabId::resourceRecordId).
|
|
29
|
+
* Guards against redundant stack mutations while still detecting content changes.
|
|
30
|
+
* In single-resource mode the tab ID stays constant when navigating between records
|
|
31
|
+
* (OpenTab replaces the temp tab's content but keeps its ID), so we must also
|
|
32
|
+
* include the resourceRecordId to detect when the tab shows a different record.
|
|
33
|
+
*/
|
|
34
|
+
private _lastSeenTabFingerprint;
|
|
18
35
|
/**
|
|
19
|
-
* Inject WorkspaceStateManager for accessing current tab state
|
|
36
|
+
* Inject WorkspaceStateManager for accessing current tab state.
|
|
37
|
+
* Also triggers loading the persisted stack from storage on first call.
|
|
20
38
|
*/
|
|
21
39
|
SetWorkspaceManager(manager: WorkspaceStateManager): void;
|
|
22
40
|
/**
|
|
@@ -24,30 +42,94 @@ export declare class HomeApplication extends BaseApplication {
|
|
|
24
42
|
*/
|
|
25
43
|
SetSharedService(service: SharedService): void;
|
|
26
44
|
/**
|
|
27
|
-
* Returns navigation items including
|
|
28
|
-
* Static items
|
|
29
|
-
* Dynamic items are generated
|
|
45
|
+
* Returns navigation items including dynamic items for recently visited orphan resources.
|
|
46
|
+
* Static items come from DefaultNavItems in metadata.
|
|
47
|
+
* Dynamic items are generated from the recent orphan stack (up to 3).
|
|
48
|
+
*/
|
|
49
|
+
GetNavItems(): Promise<NavItem[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Removes a dynamic nav item from the recent stack by RecordID.
|
|
52
|
+
* Called by AppNavComponent when the user clicks the dismiss X button.
|
|
53
|
+
* If the dismissed item is currently active, navigates back to the app's default tab.
|
|
54
|
+
*/
|
|
55
|
+
RemoveDynamicNavItem(item: NavItem): void;
|
|
56
|
+
/**
|
|
57
|
+
* Checks whether the dismissed nav item matches the currently active tab.
|
|
58
|
+
*/
|
|
59
|
+
private isDismissedItemActive;
|
|
60
|
+
/**
|
|
61
|
+
* Navigates back to the app's default tab (first static nav item / Home dashboard).
|
|
62
|
+
*/
|
|
63
|
+
private navigateToDefault;
|
|
64
|
+
/**
|
|
65
|
+
* Resolves the best icon for a dynamic nav item.
|
|
66
|
+
* Priority: entity-specific icon from metadata → resource type icon → generic fallback.
|
|
67
|
+
*/
|
|
68
|
+
private resolveIcon;
|
|
69
|
+
/**
|
|
70
|
+
* Updates the recent orphan stack based on the currently active tab.
|
|
71
|
+
* If the active tab is a new orphan resource (not already in the stack and not
|
|
72
|
+
* matching any static nav item), it gets added to the front. Items already in the
|
|
73
|
+
* stack keep their position to avoid visually jarring reordering when users click
|
|
74
|
+
* between existing dynamic nav items.
|
|
75
|
+
*/
|
|
76
|
+
private updateRecentStack;
|
|
77
|
+
/**
|
|
78
|
+
* Creates an OrphanResourceSnapshot from a tab if it qualifies as an orphan resource.
|
|
79
|
+
* Returns null if the tab is a static nav item, has no resource type, or is an
|
|
80
|
+
* app-level custom dashboard (no record ID).
|
|
30
81
|
*/
|
|
31
|
-
|
|
82
|
+
private createSnapshotIfOrphan;
|
|
32
83
|
/**
|
|
33
|
-
*
|
|
34
|
-
* Uses SharedService which caches ResourceTypes on app load.
|
|
84
|
+
* Checks whether a tab matches any static nav item (by label, route, or driver class).
|
|
35
85
|
*/
|
|
36
|
-
private
|
|
86
|
+
private matchesStaticNavItem;
|
|
37
87
|
/**
|
|
38
|
-
* Creates
|
|
39
|
-
*
|
|
40
|
-
* - No workspace manager is set
|
|
41
|
-
* - No active tab exists
|
|
42
|
-
* - Active tab doesn't belong to this app
|
|
43
|
-
* - Active tab matches a static nav item
|
|
44
|
-
* - Active tab has no resource type (e.g., app default dashboard)
|
|
88
|
+
* Creates DynamicNavItem entries for each item in the recent orphan stack.
|
|
89
|
+
* Uses the pre-resolved label from the snapshot (no async needed).
|
|
45
90
|
*/
|
|
46
|
-
private
|
|
91
|
+
private buildDynamicNavItems;
|
|
92
|
+
/**
|
|
93
|
+
* Creates a single DynamicNavItem from an OrphanResourceSnapshot.
|
|
94
|
+
* Uses the snapshot's resolvedLabel directly — no async lookup needed.
|
|
95
|
+
*/
|
|
96
|
+
private createDynamicNavItem;
|
|
97
|
+
/**
|
|
98
|
+
* Resolves the best available display label for an entity record nav item.
|
|
99
|
+
* Priority order:
|
|
100
|
+
* 1. Cached record name (from EntityRecordNameCache, populated by entity Load/Save)
|
|
101
|
+
* 2. Tab title (whatever the workspace assigned when the tab was opened)
|
|
102
|
+
* 3. Generated default (entity name + truncated primary key values)
|
|
103
|
+
*
|
|
104
|
+
* @param entityName - Entity name from tab configuration, may be undefined for non-entity resources
|
|
105
|
+
* @param tabRecordId - URL-encoded composite key segment (e.g. "ID|abc-123" or "Field1|val1||Field2|val2")
|
|
106
|
+
* @param tabTitle - Fallback title assigned by the workspace when the tab was opened
|
|
107
|
+
*/
|
|
108
|
+
private resolveRecordLabel;
|
|
109
|
+
/**
|
|
110
|
+
* Generates a fallback label when no cached record name or tab title is available.
|
|
111
|
+
* Format: "EntityName: <truncated key value(s)>"
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* // Single key: "Contacts: abc1234..."
|
|
115
|
+
* // Multi key: "Order Details: abc1..., 42"
|
|
116
|
+
* // No key: "Contacts record"
|
|
117
|
+
*/
|
|
118
|
+
private createDefaultLabel;
|
|
119
|
+
/**
|
|
120
|
+
* Truncates a primary key value for display, appending "..." if it exceeds maxLength.
|
|
121
|
+
* Returns the value as-is if it's short enough or empty.
|
|
122
|
+
*/
|
|
123
|
+
private trimValue;
|
|
124
|
+
/**
|
|
125
|
+
* Persists the current recentOrphanStack to localStorage via Provider.
|
|
126
|
+
* Fire-and-forget — errors are logged but don't affect the UX.
|
|
127
|
+
*/
|
|
128
|
+
private saveStackToStorage;
|
|
129
|
+
/**
|
|
130
|
+
* Loads the recent orphan stack from localStorage via Provider.
|
|
131
|
+
* Filters out stale entries (older than MAX_SNAPSHOT_AGE_MS).
|
|
132
|
+
*/
|
|
133
|
+
private loadStackFromStorage;
|
|
47
134
|
}
|
|
48
|
-
/**
|
|
49
|
-
* Tree-shaking prevention function.
|
|
50
|
-
* Call this to ensure the HomeApplication class is not removed during build.
|
|
51
|
-
*/
|
|
52
|
-
export declare function LoadHomeApplication(): void;
|
|
53
135
|
//# sourceMappingURL=home-application.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"home-application.d.ts","sourceRoot":"","sources":["../../src/Home/home-application.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAkB,OAAO,EAAE,qBAAqB,EAAgB,MAAM,qCAAqC,CAAC;AACpI,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"home-application.d.ts","sourceRoot":"","sources":["../../src/Home/home-application.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAkB,OAAO,EAAE,qBAAqB,EAAgB,MAAM,qCAAqC,CAAC;AACpI,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAiC1D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBACa,eAAgB,SAAQ,eAAe;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAK;IAE7C,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,iBAAiB,CAAgC;IACzD,OAAO,CAAC,mBAAmB,CAA8B;IAEzD;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB,CAAuB;IAEtD;;;OAGG;IACI,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAOhE;;OAEG;IACI,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAIrD;;;;OAIG;IACY,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAwBhD;;;;OAIG;IACI,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAiBhD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAuBnB;;;;;;OAMG;YACW,iBAAiB;IAkD/B;;;;OAIG;YACW,sBAAsB;IAgCpC;;OAEG;YACW,oBAAoB;IAoBlC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;;;;;;;;;OAUG;YACW,kBAAkB;IAwBhC;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAiBjB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;;OAGG;YACW,oBAAoB;CA0BnC"}
|
|
@@ -4,28 +4,57 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
+
var HomeApplication_1;
|
|
7
8
|
import { RegisterClass } from '@memberjunction/global';
|
|
8
9
|
import { BaseApplication } from '@memberjunction/ng-base-application';
|
|
10
|
+
import { Metadata, CompositeKey, FieldValueCollection } from '@memberjunction/core';
|
|
11
|
+
/** Storage key and category for persisting the recent orphan stack */
|
|
12
|
+
const STORAGE_KEY = 'HomeApp_RecentOrphanStack';
|
|
13
|
+
const STORAGE_CATEGORY = 'HomeApplication';
|
|
14
|
+
/** Max age for persisted snapshots — 7 days */
|
|
15
|
+
const MAX_SNAPSHOT_AGE_MS = 7 * 24 * 60 * 60 * 1000;
|
|
9
16
|
/**
|
|
10
17
|
* Home Application - Provides dynamic navigation items for orphan resources.
|
|
11
18
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
19
|
+
* Maintains a recency-ordered stack of up to 3 recently visited orphan resources.
|
|
20
|
+
* When the user opens a record/view/dashboard from within the Home app, the resource
|
|
21
|
+
* appears as a dynamic nav item. When they navigate away (e.g., click Home), the
|
|
22
|
+
* nav item persists so they can quickly jump back. Older items drop off as new ones
|
|
23
|
+
* are added.
|
|
24
|
+
*
|
|
25
|
+
* The stack is persisted to localStorage (via Metadata.Provider.LocalStorageProvider)
|
|
26
|
+
* so it survives page reloads. Resolved record labels are stored alongside each
|
|
27
|
+
* snapshot to avoid async lookups when restoring from storage.
|
|
15
28
|
*
|
|
16
29
|
* @example
|
|
17
|
-
* User opens "John Smith" contact
|
|
18
|
-
* -
|
|
19
|
-
* - Clicking
|
|
30
|
+
* User opens "John Smith" contact, then "Acme Corp" company:
|
|
31
|
+
* - Nav shows: [Home] [Favorites] | [person] "Acme Corp" [building] "John Smith"
|
|
32
|
+
* - Clicking "John Smith" re-opens that record
|
|
20
33
|
*/
|
|
21
34
|
let HomeApplication = class HomeApplication extends BaseApplication {
|
|
35
|
+
static { HomeApplication_1 = this; }
|
|
36
|
+
static MAX_RECENT_ITEMS = 3;
|
|
22
37
|
workspaceManager = null;
|
|
23
38
|
sharedService = null;
|
|
39
|
+
recentOrphanStack = [];
|
|
40
|
+
_storageLoadPromise = null;
|
|
41
|
+
/**
|
|
42
|
+
* Fingerprint of the last-processed active tab state (tabId::resourceRecordId).
|
|
43
|
+
* Guards against redundant stack mutations while still detecting content changes.
|
|
44
|
+
* In single-resource mode the tab ID stays constant when navigating between records
|
|
45
|
+
* (OpenTab replaces the temp tab's content but keeps its ID), so we must also
|
|
46
|
+
* include the resourceRecordId to detect when the tab shows a different record.
|
|
47
|
+
*/
|
|
48
|
+
_lastSeenTabFingerprint = null;
|
|
24
49
|
/**
|
|
25
|
-
* Inject WorkspaceStateManager for accessing current tab state
|
|
50
|
+
* Inject WorkspaceStateManager for accessing current tab state.
|
|
51
|
+
* Also triggers loading the persisted stack from storage on first call.
|
|
26
52
|
*/
|
|
27
53
|
SetWorkspaceManager(manager) {
|
|
28
54
|
this.workspaceManager = manager;
|
|
55
|
+
if (!this._storageLoadPromise) {
|
|
56
|
+
this._storageLoadPromise = this.loadStackFromStorage();
|
|
57
|
+
}
|
|
29
58
|
}
|
|
30
59
|
/**
|
|
31
60
|
* Inject SharedService for accessing ResourceTypes metadata
|
|
@@ -34,115 +63,362 @@ let HomeApplication = class HomeApplication extends BaseApplication {
|
|
|
34
63
|
this.sharedService = service;
|
|
35
64
|
}
|
|
36
65
|
/**
|
|
37
|
-
* Returns navigation items including
|
|
38
|
-
* Static items
|
|
39
|
-
* Dynamic items are generated
|
|
66
|
+
* Returns navigation items including dynamic items for recently visited orphan resources.
|
|
67
|
+
* Static items come from DefaultNavItems in metadata.
|
|
68
|
+
* Dynamic items are generated from the recent orphan stack (up to 3).
|
|
40
69
|
*/
|
|
41
|
-
GetNavItems() {
|
|
42
|
-
|
|
43
|
-
//
|
|
44
|
-
|
|
45
|
-
if (
|
|
46
|
-
|
|
70
|
+
async GetNavItems() {
|
|
71
|
+
// Ensure persisted stack is loaded before building nav items.
|
|
72
|
+
// On first call after page load, this awaits the IndexedDB read;
|
|
73
|
+
// on subsequent calls the promise is already resolved (no-op await).
|
|
74
|
+
if (this._storageLoadPromise) {
|
|
75
|
+
await this._storageLoadPromise;
|
|
76
|
+
}
|
|
77
|
+
const staticItems = await super.GetNavItems();
|
|
78
|
+
// Update the recent stack based on current active tab
|
|
79
|
+
// Must await — updateRecentStack is async (calls matchesStaticNavItem → super.GetNavItems())
|
|
80
|
+
// and buildDynamicNavItems reads recentOrphanStack, so the stack must be fully updated first.
|
|
81
|
+
await this.updateRecentStack();
|
|
82
|
+
// Build dynamic nav items from the stack
|
|
83
|
+
const dynamicItems = this.buildDynamicNavItems();
|
|
84
|
+
if (dynamicItems.length > 0) {
|
|
85
|
+
return [...staticItems, ...dynamicItems];
|
|
47
86
|
}
|
|
48
87
|
return staticItems;
|
|
49
88
|
}
|
|
50
89
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
90
|
+
* Removes a dynamic nav item from the recent stack by RecordID.
|
|
91
|
+
* Called by AppNavComponent when the user clicks the dismiss X button.
|
|
92
|
+
* If the dismissed item is currently active, navigates back to the app's default tab.
|
|
53
93
|
*/
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
94
|
+
RemoveDynamicNavItem(item) {
|
|
95
|
+
const index = this.recentOrphanStack.findIndex(s => s.resourceRecordId === item.RecordID);
|
|
96
|
+
if (index < 0) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const wasActive = this.isDismissedItemActive(item);
|
|
100
|
+
this.recentOrphanStack.splice(index, 1);
|
|
101
|
+
this.saveStackToStorage();
|
|
102
|
+
if (wasActive) {
|
|
103
|
+
this.navigateToDefault();
|
|
57
104
|
}
|
|
58
|
-
const resourceType = this.sharedService.ResourceTypeByName(resourceTypeName);
|
|
59
|
-
return resourceType?.Icon || 'fa-solid fa-file';
|
|
60
105
|
}
|
|
61
106
|
/**
|
|
62
|
-
*
|
|
63
|
-
* Returns null if:
|
|
64
|
-
* - No workspace manager is set
|
|
65
|
-
* - No active tab exists
|
|
66
|
-
* - Active tab doesn't belong to this app
|
|
67
|
-
* - Active tab matches a static nav item
|
|
68
|
-
* - Active tab has no resource type (e.g., app default dashboard)
|
|
107
|
+
* Checks whether the dismissed nav item matches the currently active tab.
|
|
69
108
|
*/
|
|
70
|
-
|
|
109
|
+
isDismissedItemActive(item) {
|
|
71
110
|
if (!this.workspaceManager) {
|
|
72
|
-
return
|
|
111
|
+
return false;
|
|
73
112
|
}
|
|
74
113
|
const config = this.workspaceManager.GetConfiguration();
|
|
75
114
|
if (!config?.activeTabId) {
|
|
76
|
-
return
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
const activeTab = config.tabs.find(t => t.id === config.activeTabId);
|
|
118
|
+
if (!activeTab) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
return activeTab.resourceRecordId === item.RecordID;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Navigates back to the app's default tab (first static nav item / Home dashboard).
|
|
125
|
+
*/
|
|
126
|
+
navigateToDefault() {
|
|
127
|
+
if (!this.workspaceManager) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
this.CreateDefaultTab().then(tabRequest => {
|
|
131
|
+
if (tabRequest && this.workspaceManager) {
|
|
132
|
+
this.workspaceManager.OpenTab(tabRequest, this.GetColor());
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// ========================================
|
|
137
|
+
// Icon Resolution
|
|
138
|
+
// ========================================
|
|
139
|
+
/**
|
|
140
|
+
* Resolves the best icon for a dynamic nav item.
|
|
141
|
+
* Priority: entity-specific icon from metadata → resource type icon → generic fallback.
|
|
142
|
+
*/
|
|
143
|
+
resolveIcon(entityName, resourceTypeName) {
|
|
144
|
+
if (entityName) {
|
|
145
|
+
const md = new Metadata();
|
|
146
|
+
const entityIcon = md.EntityByName(entityName)?.Icon;
|
|
147
|
+
if (entityIcon) {
|
|
148
|
+
return entityIcon;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (this.sharedService) {
|
|
152
|
+
const resourceType = this.sharedService.ResourceTypeByName(resourceTypeName);
|
|
153
|
+
if (resourceType?.Icon) {
|
|
154
|
+
return resourceType.Icon;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return 'fa-solid fa-file';
|
|
158
|
+
}
|
|
159
|
+
// ========================================
|
|
160
|
+
// Recent Stack Management
|
|
161
|
+
// ========================================
|
|
162
|
+
/**
|
|
163
|
+
* Updates the recent orphan stack based on the currently active tab.
|
|
164
|
+
* If the active tab is a new orphan resource (not already in the stack and not
|
|
165
|
+
* matching any static nav item), it gets added to the front. Items already in the
|
|
166
|
+
* stack keep their position to avoid visually jarring reordering when users click
|
|
167
|
+
* between existing dynamic nav items.
|
|
168
|
+
*/
|
|
169
|
+
async updateRecentStack() {
|
|
170
|
+
if (!this.workspaceManager) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const config = this.workspaceManager.GetConfiguration();
|
|
174
|
+
if (!config?.activeTabId) {
|
|
175
|
+
return;
|
|
77
176
|
}
|
|
78
177
|
const activeTab = config.tabs.find(t => t.id === config.activeTabId);
|
|
79
178
|
if (!activeTab || activeTab.applicationId !== this.ID) {
|
|
80
|
-
return
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
// Build a fingerprint from tab ID + record content. In single-resource mode,
|
|
182
|
+
// OpenTab replaces the temp tab's content but keeps the same tab ID, so we
|
|
183
|
+
// need the resourceRecordId to detect when a different record is shown.
|
|
184
|
+
const fingerprint = `${activeTab.id}::${activeTab.resourceRecordId ?? ''}`;
|
|
185
|
+
if (fingerprint === this._lastSeenTabFingerprint) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
this._lastSeenTabFingerprint = fingerprint;
|
|
189
|
+
// Check if active tab qualifies as an orphan resource
|
|
190
|
+
const snapshot = await this.createSnapshotIfOrphan(activeTab);
|
|
191
|
+
if (!snapshot) {
|
|
192
|
+
// Active tab is a static resource (Home dashboard, etc.) — leave stack as-is
|
|
193
|
+
return;
|
|
81
194
|
}
|
|
82
|
-
//
|
|
83
|
-
|
|
195
|
+
// If this item is already in the stack, leave the order unchanged.
|
|
196
|
+
// Reordering on every click is visually jarring — items shift around
|
|
197
|
+
// while the user is clicking between existing nav items.
|
|
198
|
+
const alreadyTracked = this.recentOrphanStack.some(s => s.resourceRecordId === snapshot.resourceRecordId);
|
|
199
|
+
if (alreadyTracked) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
// New orphan — push to front (most recent first) and trim oldest if needed
|
|
203
|
+
this.recentOrphanStack.unshift(snapshot);
|
|
204
|
+
if (this.recentOrphanStack.length > HomeApplication_1.MAX_RECENT_ITEMS) {
|
|
205
|
+
this.recentOrphanStack.length = HomeApplication_1.MAX_RECENT_ITEMS;
|
|
206
|
+
}
|
|
207
|
+
this.saveStackToStorage();
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Creates an OrphanResourceSnapshot from a tab if it qualifies as an orphan resource.
|
|
211
|
+
* Returns null if the tab is a static nav item, has no resource type, or is an
|
|
212
|
+
* app-level custom dashboard (no record ID).
|
|
213
|
+
*/
|
|
214
|
+
async createSnapshotIfOrphan(tab) {
|
|
215
|
+
const resourceType = tab.configuration?.['resourceType'];
|
|
84
216
|
if (!resourceType) {
|
|
85
217
|
return null;
|
|
86
218
|
}
|
|
87
|
-
//
|
|
88
|
-
|
|
89
|
-
if (resourceType.toLowerCase() === 'custom' && !activeTab.resourceRecordId) {
|
|
219
|
+
// Skip 'custom' resource type without a specific record (app-level dashboards)
|
|
220
|
+
if (resourceType.toLowerCase() === 'custom' && !tab.resourceRecordId) {
|
|
90
221
|
return null;
|
|
91
222
|
}
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
223
|
+
// Skip if it matches a static nav item
|
|
224
|
+
if (await this.matchesStaticNavItem(tab)) {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
// Resolve the label now so it's stored with the snapshot
|
|
228
|
+
const entityName = tab.configuration?.['Entity'];
|
|
229
|
+
const resolvedLabel = await this.resolveRecordLabel(entityName, tab.resourceRecordId, tab.title);
|
|
230
|
+
return {
|
|
231
|
+
resourceRecordId: tab.resourceRecordId,
|
|
232
|
+
resourceType,
|
|
233
|
+
entityName,
|
|
234
|
+
title: tab.title,
|
|
235
|
+
resolvedLabel,
|
|
236
|
+
configuration: tab.configuration,
|
|
237
|
+
tabId: tab.id,
|
|
238
|
+
timestamp: Date.now()
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Checks whether a tab matches any static nav item (by label, route, or driver class).
|
|
243
|
+
*/
|
|
244
|
+
async matchesStaticNavItem(tab) {
|
|
245
|
+
const staticItems = await super.GetNavItems();
|
|
246
|
+
return staticItems.some(item => {
|
|
247
|
+
if (item.Label === tab.title) {
|
|
97
248
|
return true;
|
|
98
249
|
}
|
|
99
|
-
|
|
100
|
-
if (item.Route && activeTab.configuration?.['route'] === item.Route) {
|
|
250
|
+
if (item.Route && tab.configuration?.['route'] === item.Route) {
|
|
101
251
|
return true;
|
|
102
252
|
}
|
|
103
|
-
|
|
104
|
-
if (item.DriverClass && activeTab.configuration?.['driverClass'] === item.DriverClass) {
|
|
253
|
+
if (item.DriverClass && tab.configuration?.['driverClass'] === item.DriverClass) {
|
|
105
254
|
return true;
|
|
106
255
|
}
|
|
107
256
|
return false;
|
|
108
257
|
});
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
258
|
+
}
|
|
259
|
+
// ========================================
|
|
260
|
+
// Dynamic NavItem Building
|
|
261
|
+
// ========================================
|
|
262
|
+
/**
|
|
263
|
+
* Creates DynamicNavItem entries for each item in the recent orphan stack.
|
|
264
|
+
* Uses the pre-resolved label from the snapshot (no async needed).
|
|
265
|
+
*/
|
|
266
|
+
buildDynamicNavItems() {
|
|
267
|
+
return this.recentOrphanStack.map(snapshot => this.createDynamicNavItem(snapshot));
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Creates a single DynamicNavItem from an OrphanResourceSnapshot.
|
|
271
|
+
* Uses the snapshot's resolvedLabel directly — no async lookup needed.
|
|
272
|
+
*/
|
|
273
|
+
createDynamicNavItem(snapshot) {
|
|
116
274
|
return {
|
|
117
|
-
Label:
|
|
118
|
-
Icon: this.
|
|
119
|
-
ResourceType: resourceType,
|
|
120
|
-
RecordID:
|
|
121
|
-
Configuration:
|
|
275
|
+
Label: snapshot.resolvedLabel,
|
|
276
|
+
Icon: this.resolveIcon(snapshot.entityName, snapshot.resourceType),
|
|
277
|
+
ResourceType: snapshot.resourceType,
|
|
278
|
+
RecordID: snapshot.resourceRecordId,
|
|
279
|
+
Configuration: snapshot.configuration,
|
|
122
280
|
isDynamic: true,
|
|
123
|
-
// Custom matching function - matches if tab has same resource record ID
|
|
124
281
|
isActiveMatch: (tab) => {
|
|
125
282
|
const wsTab = tab;
|
|
126
|
-
if (
|
|
127
|
-
return wsTab.resourceRecordId ===
|
|
283
|
+
if (snapshot.resourceRecordId) {
|
|
284
|
+
return wsTab.resourceRecordId === snapshot.resourceRecordId;
|
|
128
285
|
}
|
|
129
|
-
|
|
130
|
-
return wsTab.id === tabId;
|
|
286
|
+
return wsTab.id === snapshot.tabId;
|
|
131
287
|
}
|
|
132
288
|
};
|
|
133
289
|
}
|
|
290
|
+
// ========================================
|
|
291
|
+
// Label Resolution
|
|
292
|
+
// ========================================
|
|
293
|
+
/**
|
|
294
|
+
* Resolves the best available display label for an entity record nav item.
|
|
295
|
+
* Priority order:
|
|
296
|
+
* 1. Cached record name (from EntityRecordNameCache, populated by entity Load/Save)
|
|
297
|
+
* 2. Tab title (whatever the workspace assigned when the tab was opened)
|
|
298
|
+
* 3. Generated default (entity name + truncated primary key values)
|
|
299
|
+
*
|
|
300
|
+
* @param entityName - Entity name from tab configuration, may be undefined for non-entity resources
|
|
301
|
+
* @param tabRecordId - URL-encoded composite key segment (e.g. "ID|abc-123" or "Field1|val1||Field2|val2")
|
|
302
|
+
* @param tabTitle - Fallback title assigned by the workspace when the tab was opened
|
|
303
|
+
*/
|
|
304
|
+
async resolveRecordLabel(entityName, tabRecordId, tabTitle) {
|
|
305
|
+
if (!entityName || !tabRecordId) {
|
|
306
|
+
return tabTitle || '';
|
|
307
|
+
}
|
|
308
|
+
// Parse the URL segment into a CompositeKey
|
|
309
|
+
const fvCollection = new FieldValueCollection();
|
|
310
|
+
fvCollection.SimpleLoadFromURLSegment(tabRecordId);
|
|
311
|
+
const compositeKey = new CompositeKey(fvCollection.KeyValuePairs);
|
|
312
|
+
// Check the cache first
|
|
313
|
+
try {
|
|
314
|
+
const cachedName = await Metadata.Provider.GetCachedRecordName(entityName, compositeKey, true);
|
|
315
|
+
if (cachedName) {
|
|
316
|
+
return cachedName;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
console.warn('Failed to look up cached record name:', error);
|
|
321
|
+
}
|
|
322
|
+
// Fall back generated default from the key values, then tabTitle if we have no default label(unlikely)
|
|
323
|
+
return this.createDefaultLabel(entityName, compositeKey) || tabTitle;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Generates a fallback label when no cached record name or tab title is available.
|
|
327
|
+
* Format: "EntityName: <truncated key value(s)>"
|
|
328
|
+
*
|
|
329
|
+
* @example
|
|
330
|
+
* // Single key: "Contacts: abc1234..."
|
|
331
|
+
* // Multi key: "Order Details: abc1..., 42"
|
|
332
|
+
* // No key: "Contacts record"
|
|
333
|
+
*/
|
|
334
|
+
createDefaultLabel(entityName, key) {
|
|
335
|
+
if (!key || key.KeyValuePairs.length === 0) {
|
|
336
|
+
return `${entityName} record`;
|
|
337
|
+
}
|
|
338
|
+
if (key.KeyValuePairs.length === 1) {
|
|
339
|
+
return `${entityName}: ${this.trimValue(key.KeyValuePairs[0].Value)}`;
|
|
340
|
+
}
|
|
341
|
+
// Multiple keys - show each value trimmed, comma-separated
|
|
342
|
+
const values = key.KeyValuePairs.map(kv => this.trimValue(kv.Value)).join(', ');
|
|
343
|
+
return `${entityName}: ${values}`;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Truncates a primary key value for display, appending "..." if it exceeds maxLength.
|
|
347
|
+
* Returns the value as-is if it's short enough or empty.
|
|
348
|
+
*/
|
|
349
|
+
trimValue(value, maxLength = 8) {
|
|
350
|
+
if (!value || value.trim().length === 0) {
|
|
351
|
+
return value;
|
|
352
|
+
}
|
|
353
|
+
const trimmed = value.trim();
|
|
354
|
+
if (trimmed.length <= maxLength) {
|
|
355
|
+
return trimmed;
|
|
356
|
+
}
|
|
357
|
+
return trimmed.substring(0, maxLength) + '...';
|
|
358
|
+
}
|
|
359
|
+
// ========================================
|
|
360
|
+
// Storage Persistence
|
|
361
|
+
// ========================================
|
|
362
|
+
/**
|
|
363
|
+
* Persists the current recentOrphanStack to localStorage via Provider.
|
|
364
|
+
* Fire-and-forget — errors are logged but don't affect the UX.
|
|
365
|
+
*/
|
|
366
|
+
saveStackToStorage() {
|
|
367
|
+
try {
|
|
368
|
+
const provider = Metadata.Provider.LocalStorageProvider;
|
|
369
|
+
if (!provider) {
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
// Strip non-serializable fields (isActiveMatch closures are rebuilt on load)
|
|
373
|
+
const serializable = this.recentOrphanStack.map(s => ({
|
|
374
|
+
resourceRecordId: s.resourceRecordId,
|
|
375
|
+
resourceType: s.resourceType,
|
|
376
|
+
entityName: s.entityName,
|
|
377
|
+
title: s.title,
|
|
378
|
+
resolvedLabel: s.resolvedLabel,
|
|
379
|
+
configuration: s.configuration,
|
|
380
|
+
tabId: s.tabId,
|
|
381
|
+
timestamp: s.timestamp
|
|
382
|
+
}));
|
|
383
|
+
provider.SetItem(STORAGE_KEY, JSON.stringify(serializable), STORAGE_CATEGORY).catch(err => {
|
|
384
|
+
console.warn('Failed to persist recent nav stack:', err);
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
catch (err) {
|
|
388
|
+
console.warn('Failed to persist recent nav stack:', err);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Loads the recent orphan stack from localStorage via Provider.
|
|
393
|
+
* Filters out stale entries (older than MAX_SNAPSHOT_AGE_MS).
|
|
394
|
+
*/
|
|
395
|
+
async loadStackFromStorage() {
|
|
396
|
+
try {
|
|
397
|
+
const provider = Metadata.Provider.LocalStorageProvider;
|
|
398
|
+
if (!provider) {
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
const raw = await provider.GetItem(STORAGE_KEY, STORAGE_CATEGORY);
|
|
402
|
+
if (!raw) {
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
const parsed = JSON.parse(raw);
|
|
406
|
+
if (!Array.isArray(parsed)) {
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
// Filter out stale snapshots
|
|
410
|
+
const now = Date.now();
|
|
411
|
+
this.recentOrphanStack = parsed
|
|
412
|
+
.filter(s => s.resourceRecordId && s.timestamp && (now - s.timestamp) < MAX_SNAPSHOT_AGE_MS)
|
|
413
|
+
.slice(0, HomeApplication_1.MAX_RECENT_ITEMS);
|
|
414
|
+
}
|
|
415
|
+
catch (err) {
|
|
416
|
+
console.warn('Failed to load recent nav stack from storage:', err);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
134
419
|
};
|
|
135
|
-
HomeApplication = __decorate([
|
|
420
|
+
HomeApplication = HomeApplication_1 = __decorate([
|
|
136
421
|
RegisterClass(BaseApplication, 'HomeApplication')
|
|
137
422
|
], HomeApplication);
|
|
138
423
|
export { HomeApplication };
|
|
139
|
-
/**
|
|
140
|
-
* Tree-shaking prevention function.
|
|
141
|
-
* Call this to ensure the HomeApplication class is not removed during build.
|
|
142
|
-
*/
|
|
143
|
-
export function LoadHomeApplication() {
|
|
144
|
-
// This function exists solely to prevent tree-shaking
|
|
145
|
-
// The @RegisterClass decorator handles actual registration
|
|
146
|
-
const x = 1;
|
|
147
|
-
}
|
|
148
424
|
//# sourceMappingURL=home-application.js.map
|