@memberjunction/ng-explorer-core 6.2.0-edge.0 → 6.2.0-edge.1
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/app-routing.module.d.ts +23 -1
- package/dist/app-routing.module.d.ts.map +1 -1
- package/dist/app-routing.module.js +50 -14
- package/dist/app-routing.module.js.map +1 -1
- package/dist/lib/command-palette/command-palette.component.d.ts +7 -1
- package/dist/lib/command-palette/command-palette.component.d.ts.map +1 -1
- package/dist/lib/command-palette/command-palette.component.js +28 -14
- package/dist/lib/command-palette/command-palette.component.js.map +1 -1
- package/dist/lib/conversation-feedback/conversation-feedback.d.ts +103 -13
- package/dist/lib/conversation-feedback/conversation-feedback.d.ts.map +1 -1
- package/dist/lib/conversation-feedback/conversation-feedback.js +219 -67
- package/dist/lib/conversation-feedback/conversation-feedback.js.map +1 -1
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts +64 -10
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts.map +1 -1
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +172 -66
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js.map +1 -1
- package/dist/lib/generic/resource-container-component.d.ts +19 -5
- package/dist/lib/generic/resource-container-component.d.ts.map +1 -1
- package/dist/lib/generic/resource-container-component.js +43 -13
- package/dist/lib/generic/resource-container-component.js.map +1 -1
- package/dist/lib/guards/entities.guard.d.ts +4 -0
- package/dist/lib/guards/entities.guard.d.ts.map +1 -1
- package/dist/lib/guards/entities.guard.js +10 -2
- package/dist/lib/guards/entities.guard.js.map +1 -1
- package/dist/lib/identity-claims/claim-redeem.component.d.ts +4 -0
- package/dist/lib/identity-claims/claim-redeem.component.d.ts.map +1 -1
- package/dist/lib/identity-claims/claim-redeem.component.js +10 -2
- package/dist/lib/identity-claims/claim-redeem.component.js.map +1 -1
- package/dist/lib/oauth/oauth-callback.component.d.ts +4 -0
- package/dist/lib/oauth/oauth-callback.component.d.ts.map +1 -1
- package/dist/lib/oauth/oauth-callback.component.js +10 -2
- package/dist/lib/oauth/oauth-callback.component.js.map +1 -1
- package/dist/lib/profile/profile-dialog.component.d.ts.map +1 -1
- package/dist/lib/profile/profile-dialog.component.js +194 -191
- package/dist/lib/profile/profile-dialog.component.js.map +1 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.d.ts +20 -2
- package/dist/lib/resource-wrappers/artifact-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.js +33 -9
- package/dist/lib/resource-wrappers/artifact-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts +80 -10
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js +168 -56
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts +186 -23
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +500 -177
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts +2 -0
- package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.js +5 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-search-routing.d.ts +25 -0
- package/dist/lib/resource-wrappers/chat-search-routing.d.ts.map +1 -0
- package/dist/lib/resource-wrappers/chat-search-routing.js +24 -0
- package/dist/lib/resource-wrappers/chat-search-routing.js.map +1 -0
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts +14 -2
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.js +32 -8
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts +54 -8
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.js +138 -46
- package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts +223 -30
- package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/livekit-room-resource.component.js +438 -118
- package/dist/lib/resource-wrappers/livekit-room-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.d.ts +7 -3
- package/dist/lib/resource-wrappers/search-results-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.js +23 -15
- package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.d.ts +68 -10
- package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.js +178 -62
- package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
- package/dist/lib/services/startup-validation.service.d.ts +4 -0
- package/dist/lib/services/startup-validation.service.d.ts.map +1 -1
- package/dist/lib/services/startup-validation.service.js +10 -2
- package/dist/lib/services/startup-validation.service.js.map +1 -1
- package/dist/lib/services/system-validation.service.d.ts +13 -1
- package/dist/lib/services/system-validation.service.d.ts.map +1 -1
- package/dist/lib/services/system-validation.service.js +29 -5
- package/dist/lib/services/system-validation.service.js.map +1 -1
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.d.ts +54 -4
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.d.ts.map +1 -1
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.js +130 -40
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.js.map +1 -1
- package/dist/lib/shell/components/header/app-nav.component.d.ts +29 -1
- package/dist/lib/shell/components/header/app-nav.component.d.ts.map +1 -1
- package/dist/lib/shell/components/header/app-nav.component.js +56 -12
- package/dist/lib/shell/components/header/app-nav.component.js.map +1 -1
- package/dist/lib/shell/components/header/app-switcher.component.d.ts +33 -5
- package/dist/lib/shell/components/header/app-switcher.component.d.ts.map +1 -1
- package/dist/lib/shell/components/header/app-switcher.component.js +85 -29
- package/dist/lib/shell/components/header/app-switcher.component.js.map +1 -1
- package/dist/lib/shell/components/record-open/record-origin-crumb.component.js +1 -1
- package/dist/lib/shell/components/record-open/record-origin-crumb.component.js.map +1 -1
- package/dist/lib/shell/components/tabs/component-cache-manager.d.ts +50 -6
- package/dist/lib/shell/components/tabs/component-cache-manager.d.ts.map +1 -1
- package/dist/lib/shell/components/tabs/component-cache-manager.js +95 -22
- package/dist/lib/shell/components/tabs/component-cache-manager.js.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts +91 -9
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.js +257 -101
- package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
- package/dist/lib/shell/loading-themes.d.ts +16 -12
- package/dist/lib/shell/loading-themes.d.ts.map +1 -1
- package/dist/lib/shell/loading-themes.js +145 -137
- package/dist/lib/shell/loading-themes.js.map +1 -1
- package/dist/lib/shell/readiness-beacon.d.ts +2 -0
- package/dist/lib/shell/readiness-beacon.d.ts.map +1 -1
- package/dist/lib/shell/readiness-beacon.js +5 -1
- package/dist/lib/shell/readiness-beacon.js.map +1 -1
- package/dist/lib/shell/services/about-dialog.service.d.ts +6 -0
- package/dist/lib/shell/services/about-dialog.service.d.ts.map +1 -1
- package/dist/lib/shell/services/about-dialog.service.js +16 -4
- package/dist/lib/shell/services/about-dialog.service.js.map +1 -1
- package/dist/lib/shell/services/profile-dialog.service.d.ts +6 -0
- package/dist/lib/shell/services/profile-dialog.service.d.ts.map +1 -1
- package/dist/lib/shell/services/profile-dialog.service.js +16 -4
- package/dist/lib/shell/services/profile-dialog.service.js.map +1 -1
- package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts +6 -0
- package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts.map +1 -1
- package/dist/lib/shell/services/user-sharing-center-dialog.service.js +15 -3
- package/dist/lib/shell/services/user-sharing-center-dialog.service.js.map +1 -1
- package/dist/lib/shell/shell.component.d.ts +262 -39
- package/dist/lib/shell/shell.component.d.ts.map +1 -1
- package/dist/lib/shell/shell.component.js +688 -292
- package/dist/lib/shell/shell.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts +64 -8
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js +129 -37
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.d.ts +26 -2
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js +48 -10
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.d.ts +84 -6
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js +133 -29
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.d.ts +173 -23
- package/dist/lib/single-dashboard/single-dashboard.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.js +383 -109
- package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.d.ts +383 -55
- package/dist/lib/single-list-detail/single-list-detail.component.d.ts.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.js +962 -326
- package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
- package/dist/lib/single-query/single-query.component.d.ts +22 -2
- package/dist/lib/single-query/single-query.component.d.ts.map +1 -1
- package/dist/lib/single-query/single-query.component.js +40 -10
- package/dist/lib/single-query/single-query.component.js.map +1 -1
- package/dist/lib/single-record/single-record.component.d.ts +41 -3
- package/dist/lib/single-record/single-record.component.d.ts.map +1 -1
- package/dist/lib/single-record/single-record.component.js +71 -11
- package/dist/lib/single-record/single-record.component.js.map +1 -1
- package/dist/lib/single-search-result/single-search-result.component.d.ts +23 -3
- package/dist/lib/single-search-result/single-search-result.component.d.ts.map +1 -1
- package/dist/lib/single-search-result/single-search-result.component.js +42 -12
- package/dist/lib/single-search-result/single-search-result.component.js.map +1 -1
- package/dist/lib/system-validation/system-validation-banner.component.d.ts +12 -2
- package/dist/lib/system-validation/system-validation-banner.component.d.ts.map +1 -1
- package/dist/lib/system-validation/system-validation-banner.component.js +25 -5
- package/dist/lib/system-validation/system-validation-banner.component.js.map +1 -1
- package/dist/lib/user-menu/user-menu.types.d.ts +4 -0
- package/dist/lib/user-menu/user-menu.types.d.ts.map +1 -1
- package/dist/lib/user-menu/user-menu.types.js +10 -2
- package/dist/lib/user-menu/user-menu.types.js.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.d.ts +59 -7
- package/dist/lib/user-notifications/user-notifications.component.d.ts.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.js +151 -47
- package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
- package/dist/lib/user-profile/user-profile.component.d.ts +3 -2
- package/dist/lib/user-profile/user-profile.component.d.ts.map +1 -1
- package/dist/lib/user-profile/user-profile.component.js +5 -4
- package/dist/lib/user-profile/user-profile.component.js.map +1 -1
- package/package.json +52 -52
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-resource.component.js","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/view-resource.component.ts","../../../src/lib/resource-wrappers/view-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, ViewChild, ElementRef, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { ResourceData, MJUserViewEntityExtended, ViewInfo } from '@memberjunction/core-entities';\nimport { RegisterClass, MJGlobal, MJEventType , UUIDsEqual } from '@memberjunction/global';\nimport { CompositeKey, Metadata, EntityInfo } from '@memberjunction/core';\nimport { RecordOpenedEvent, ViewGridState, EntityViewerComponent, ViewRelatedRecordNavigation } from '@memberjunction/ng-entity-viewer';\nimport { ExportService } from '@memberjunction/ng-export-service';\nimport { ExportColumn } from '@memberjunction/export-engine';\nimport { GraphQLDataProvider, GraphQLListsClient } from '@memberjunction/graphql-dataprovider';\nimport type { SaveViewAsListResult } from '@memberjunction/ng-list-management';\n/**\n * UserViewResource - Resource wrapper for displaying User Views in tabs\n *\n * This component wraps the EntityViewerComponent to display view data.\n * It loads the view configuration and entity, then renders the data grid/cards.\n *\n * Key features:\n * - Loads view by ID from ResourceRecordID\n * - Supports dynamic views by entity name + extra filter\n * - Applies view's WhereClause, GridState, and SortState\n * - Opens records in new tabs via NavigationService\n */\n@RegisterClass(BaseResourceComponent, 'ViewResource')\n@Component({\n standalone: false,\n selector: 'mj-userview-resource',\n templateUrl: './view-resource.component.html',\n styles: [`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n overflow: hidden;\n }\n .view-resource-container {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .view-header {\n padding: 16px 20px 8px 20px;\n flex-shrink: 0;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n }\n .header-left {\n flex: 1;\n min-width: 0;\n }\n .header-right {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n }\n .view-title {\n margin: 0 0 4px 0;\n font-size: 1.25rem;\n font-weight: 600;\n color: var(--text-primary, #1a1a1a);\n }\n .view-description {\n margin: 0;\n font-size: 0.875rem;\n color: var(--text-secondary, #666);\n }\n .action-button {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n }\n .action-button:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n }\n .action-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .action-button i {\n font-size: 0.875rem;\n }\n .create-button {\n background: var(--mj-brand-primary);\n color: white;\n border-color: var(--mj-brand-primary);\n }\n .create-button:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n }\n .export-button:hover:not(:disabled) {\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n .view-loading-state,\n .view-error-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 16px;\n }\n .view-error-state {\n color: var(--danger-color, #dc3545);\n }\n .view-error-state i {\n font-size: 2rem;\n }\n .view-error-state p {\n margin: 0;\n font-size: 1rem;\n }\n mj-entity-viewer {\n flex: 1;\n min-height: 0;\n }\n `]\n})\nexport class UserViewResource extends BaseResourceComponent {\n @ViewChild('container', { static: true }) containerElement!: ElementRef<HTMLDivElement>;\n @ViewChild('entityViewer') entityViewerRef?: EntityViewerComponent;\n\n public isLoading: boolean = false;\n public errorMessage: string | null = null;\n public entityInfo: EntityInfo | null = null;\n public viewEntity: MJUserViewEntityExtended | null = null;\n public gridState: ViewGridState | null = null;\n\n // Export state. The header Export button is a FALLBACK shown only for view types that don't\n // provide their own export UI (Cards / Map / Timeline). The Grid renderer has its own in-toolbar\n // Export (full result set + format/sampling dialog), so we suppress this one there to avoid a\n // duplicate/confusing second button — while keeping export available for every other view type.\n public isExporting: boolean = false;\n public showFallbackExportButton: boolean = false;\n\n // Save-as-list dialog state\n public saveAsListDialogVisible = false;\n public saveAsListRecordCount: number | null = null;\n public isSavingAsList = false;\n\n private dataLoaded = false;\n private get metadata() { return this.ProviderToUse; }\n constructor(\n private cdr: ChangeDetectorRef,\n private exportService: ExportService\n ) {\n super();\n }\n\n override set Data(value: ResourceData) {\n const previousRecordId = super.Data?.ResourceRecordID;\n const previousEntity = super.Data?.Configuration?.Entity;\n super.Data = value;\n\n const newRecordId = value?.ResourceRecordID;\n const newEntity = value?.Configuration?.Entity;\n\n // View-type (grid/cards/timeline/map) and per-view-type config are now resolved\n // internally by mj-entity-viewer from the saved view's ViewTypeID — nothing to read here.\n\n // Load on first set, or when the view/entity has changed\n if (!this.dataLoaded || newRecordId !== previousRecordId || newEntity !== previousEntity) {\n this.dataLoaded = true;\n // Reset state before loading new view\n this.entityInfo = null;\n this.viewEntity = null;\n this.gridState = null;\n this.errorMessage = null;\n this.loadView();\n }\n }\n\n override get Data(): ResourceData {\n return super.Data;\n }\n\n /**\n * Load the view and entity based on ResourceData\n */\n private async loadView(): Promise<void> {\n const data = this.Data;\n\n if (!data) {\n this.NotifyLoadComplete();\n return;\n }\n\n this.isLoading = true;\n this.errorMessage = null;\n this.NotifyLoadStarted();\n this.cdr.detectChanges();\n\n try {\n // NavigationService.OpenDynamicView stamps the special marker 'dynamic' as the\n // record ID (tabs require ResourceRecordId) — that is NOT a saved-view ID.\n const recordId = data.ResourceRecordID;\n const isDynamicMarker = typeof recordId === 'string' && recordId.trim().toLowerCase() === 'dynamic';\n // Case 1: Load view by ID\n if (recordId && !isDynamicMarker) {\n await this.loadViewById(recordId);\n }\n // Case 2: Load dynamic view by entity name\n else if (data.Configuration?.Entity) {\n await this.loadDynamicView(\n data.Configuration.Entity as string,\n data.Configuration.ExtraFilter as string | undefined\n );\n }\n else {\n this.errorMessage = 'No view ID or entity specified';\n }\n } catch (error) {\n console.error('Error loading view:', error);\n this.errorMessage = error instanceof Error ? error.message : 'Failed to load view';\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n\n // If there was an error, notify load complete now\n if (this.errorMessage) {\n this.NotifyLoadComplete();\n }\n // Otherwise, wait for dataLoaded event from entity-viewer\n }\n }\n\n /**\n * Load a saved view by its ID\n */\n private async loadViewById(viewId: string): Promise<void> {\n // Load the view entity\n const view = await ViewInfo.GetViewEntity(viewId);\n\n if (!view) {\n throw new Error(`View with ID ${viewId} not found`);\n }\n\n this.viewEntity = view as MJUserViewEntityExtended;\n\n // Check permissions\n if (!this.viewEntity.UserCanView) {\n throw new Error('You do not have permission to view this view');\n }\n\n // Load the entity info\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, this.viewEntity!.EntityID));\n\n if (!entity) {\n throw new Error(`Entity for view not found`);\n }\n\n this.entityInfo = entity;\n\n // Parse grid state if available\n if (this.viewEntity.GridState) {\n try {\n this.gridState = JSON.parse(this.viewEntity.GridState) as ViewGridState;\n } catch (e) {\n console.warn('Failed to parse GridState:', e);\n this.gridState = null;\n }\n }\n\n // View-type + per-view-type config persistence is fully owned by mj-entity-viewer\n // (it reads ViewTypeID + DisplayState.viewTypeConfigs off the [viewEntity] and, with\n // [AutoSaveView]=\"true\", saves changes back) — nothing to wire here.\n }\n\n /**\n * Load a dynamic view (no saved view, just entity + filter)\n */\n private async loadDynamicView(entityName: string, _extraFilter?: string): Promise<void> {\n const entity = this.metadata.Entities.find(\n e => e.Name.trim().toLowerCase() === entityName.trim().toLowerCase()\n );\n\n if (!entity) {\n throw new Error(`Entity '${entityName}' not found`);\n }\n\n this.entityInfo = entity;\n this.viewEntity = null;\n this.gridState = null;\n\n // For dynamic views, we could create a synthetic viewEntity with just the WhereClause\n // but for now, we'll rely on the entity-viewer's default behavior\n }\n\n /**\n * Handle record opened event - open in new tab\n */\n public onRecordOpened(event: RecordOpenedEvent): void {\n if (event && event.entity && event.compositeKey) {\n this.navigationService.OpenEntityRecord(event.entity.Name, event.compositeKey);\n }\n }\n\n /**\n * Handle a related-record navigation requested from within a view-type renderer\n * (e.g. a foreign-key cell) - open the target record in a new tab.\n */\n public onOpenRelatedRecord(nav: ViewRelatedRecordNavigation): void {\n if (nav?.entityName && nav.recordKey != null) {\n // The related entity is arbitrary, so its key column can have any name — resolve the key\n // against its metadata rather than hardcoding `ID` via FromID.\n const entityInfo = this.metadata.EntityByName(nav.entityName);\n this.navigationService.OpenEntityRecord(nav.entityName, CompositeKey.FromURLSegment(entityInfo, String(nav.recordKey)));\n }\n }\n\n /**\n * Handle data loaded event from entity-viewer\n */\n public onDataLoaded(): void {\n this.NotifyLoadComplete();\n this.refreshFallbackExportVisibility();\n }\n\n /** The active view type changed — recompute whether the fallback Export button is needed. */\n public onViewTypeChanged(): void {\n this.refreshFallbackExportVisibility();\n }\n\n /**\n * Show the wrapper's Export button only for view types that don't ship their own export UI. The\n * entity-viewer reports this via {@link EntityViewerComponent.ActiveViewTypeHasOwnExport} (true for\n * the Grid renderer, false for Cards / Map / Timeline). Uses a cached flag + explicit change\n * detection to avoid an ExpressionChanged error from reading child state during a CD pass.\n */\n private refreshFallbackExportVisibility(): void {\n const next = !!this.entityViewerRef && !this.entityViewerRef.ActiveViewTypeHasOwnExport;\n if (next !== this.showFallbackExportButton) {\n this.showFallbackExportButton = next;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Fallback export for view types without their own export UI (Cards / Map / Timeline). Pulls the\n * FULL result set via the entity-viewer's capped, filter/sort-aware fetch (same path the grid uses,\n * so it's bounded and warns past the cap) and writes an Excel file.\n */\n public async onExport(): Promise<void> {\n // Never fail silently — a \"nothing happens\" click is impossible to diagnose. Surface the\n // reason both in the UI and the console.\n if (!this.entityInfo || !this.entityViewerRef) {\n console.error('[ViewResource] Export: viewer not ready', {\n hasEntity: !!this.entityInfo, hasViewer: !!this.entityViewerRef\n });\n this.showNotification('Export is not ready yet — try again in a moment.', 'error', 5000);\n return;\n }\n this.isExporting = true;\n this.cdr.detectChanges();\n this.showNotification('Preparing your Excel export…', 'info', 2000);\n try {\n const rows = await this.entityViewerRef.FetchAllRowsForExport();\n if (!rows || rows.length === 0) {\n this.showNotification('Nothing to export — the view returned no records.', 'warning', 5000);\n return;\n }\n const result = await this.exportService.toExcel(rows, {\n fileName: this.buildExportFileName(),\n columns: this.buildExportColumns(),\n includeHeaders: true\n });\n if (result.success) {\n this.exportService.downloadResult(result);\n this.showNotification(`Exported ${rows.length.toLocaleString()} record(s) to Excel.`, 'success', 3000);\n } else {\n this.showNotification('Export failed while building the file.', 'error', 5000);\n console.error('[ViewResource] Export: toExcel returned failure', result);\n }\n } catch (e) {\n this.showNotification('Error exporting data — see console for details.', 'error', 5000);\n console.error('[ViewResource] Export error:', e);\n } finally {\n this.isExporting = false;\n this.cdr.detectChanges();\n }\n }\n\n /** Columns to export — from grid state, else the view's columns, else the entity's real fields. */\n private buildExportColumns(): ExportColumn[] {\n if (!this.entityInfo) return [];\n if (this.gridState?.columnSettings && this.gridState.columnSettings.length > 0) {\n return this.gridState.columnSettings\n .filter(col => col.hidden !== true)\n .map(col => ({ name: col.Name, displayName: col.DisplayName || col.Name }));\n }\n if (this.viewEntity?.Columns) {\n return this.viewEntity.Columns\n .filter(col => !col.hidden)\n .map(col => ({ name: col.Name, displayName: col.DisplayName || col.Name }));\n }\n return this.entityInfo.Fields\n .filter(f => !f.IsVirtual)\n .map(f => ({ name: f.Name, displayName: f.DisplayNameOrName }));\n }\n\n private buildExportFileName(): string {\n const viewName = this.viewEntity?.Name || 'Data';\n return `${this.entityInfo!.Name}_${viewName}_${new Date().toISOString().split('T')[0]}`;\n }\n\n /**\n * Get display name for the resource tab\n */\n override async GetResourceDisplayName(data: ResourceData): Promise<string> {\n if (data.ResourceRecordID) {\n const compositeKey = CompositeKey.FromID(data.ResourceRecordID); // first-pk-ok: ResourceRecordID of a User Views resource — core entity keyed by ID\n const name = await this.metadata.GetEntityRecordName('MJ: User Views', compositeKey);\n return name ? name : `View: ${data.ResourceRecordID}`;\n }\n else if (data.Configuration?.Entity) {\n const entityName = data.Configuration.Entity as string;\n const hasFilter = data.Configuration.ExtraFilter;\n return `${entityName} [Dynamic${hasFilter ? ' - Filtered' : ' - All'}]`;\n }\n return 'User Views [Error]';\n }\n\n /**\n * Get icon class for the resource tab\n */\n override async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-table-list';\n }\n\n /**\n * Handle creating a new record for the current entity\n */\n public onCreateNewRecord(): void {\n if (!this.entityInfo) return;\n\n // Use NavigationService to open a new record form\n this.navigationService.OpenNewEntityRecord(this.entityInfo.Name);\n }\n\n /**\n * Open the Save-as-List dialog. Only meaningful for saved views (a\n * ViewID is required to materialize). Dynamic views fall back to a\n * user-visible notification rather than silently doing nothing.\n */\n public onSaveAsList(): void {\n if (!this.viewEntity?.ID) {\n this.showNotification('Save as List requires a saved View. Save this view first.', 'info', 4000);\n return;\n }\n // Best-effort record-count hint — the entity-viewer exposes the\n // grid's row count on its gridState; we surface it so the dialog's\n // confirm button can say \"Save List (476 records)\".\n this.saveAsListRecordCount = this.entityViewerRef?.TotalRecordCount ?? null;\n this.saveAsListDialogVisible = true;\n this.cdr.detectChanges();\n }\n\n public onSaveAsListCancelled(): void {\n this.saveAsListDialogVisible = false;\n this.cdr.detectChanges();\n }\n\n public async onSaveAsListSubmit(payload: SaveViewAsListResult): Promise<void> {\n const viewId = this.viewEntity?.ID;\n if (!viewId) return;\n this.isSavingAsList = true;\n this.cdr.detectChanges();\n try {\n const provider = this.ProviderToUse as unknown as GraphQLDataProvider;\n const client = new GraphQLListsClient(provider);\n const result = await client.MaterializeFromView(viewId, {\n ListName: payload.ListName,\n Description: payload.Description,\n CategoryId: payload.CategoryId,\n RememberLineage: payload.RememberLineage,\n UseSnapshot: payload.UseSnapshot,\n RefreshMode: payload.RefreshMode,\n });\n if (result.Success && result.CreatedListId) {\n this.saveAsListDialogVisible = false;\n this.showNotification(\n `List created with ${result.Counts?.Added ?? 0} record(s).`,\n 'success',\n 3000,\n );\n this.navigationService.OpenEntityRecord('MJ: Lists', CompositeKey.FromID(result.CreatedListId));\n } else {\n this.showNotification(`Save failed: ${result.Message}`, 'error', 5000);\n }\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n this.showNotification(`Save failed: ${message}`, 'error', 5000);\n } finally {\n this.isSavingAsList = false;\n this.cdr.detectChanges();\n }\n }\n\n\n /**\n * Show a notification to the user\n */\n private showNotification(message: string, style: 'info' | 'success' | 'error' | 'warning', duration: number): void {\n MJGlobal.Instance.RaiseEvent({\n component: this,\n event: MJEventType.DisplaySimpleNotificationRequest,\n eventCode: '',\n args: {\n message,\n style,\n DisplayDuration: duration\n }\n });\n }\n}\n","<div #container class=\"view-resource-container\">\n @if (isLoading) {\n <div class=\"view-loading-state\">\n <mj-loading text=\"Loading view...\" size=\"large\"></mj-loading>\n </div>\n } @else if (errorMessage) {\n <div class=\"view-error-state\">\n <i class=\"fas fa-exclamation-triangle\"></i>\n <p>{{ errorMessage }}</p>\n </div>\n } @else if (entityInfo) {\n <!-- Header with title and action buttons -->\n <div class=\"view-header\">\n <div class=\"header-left\">\n <h2 class=\"view-title\">{{ viewEntity?.Name || entityInfo.Name }}</h2>\n @if (viewEntity?.Description) {\n <p class=\"view-description\">{{ viewEntity!.Description }}</p>\n }\n </div>\n <div class=\"header-right\">\n <!-- Create New Record Button -->\n <button\n class=\"action-button create-button\"\n (click)=\"onCreateNewRecord()\"\n title=\"Create new {{ entityInfo.Name }} record\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New Record</span>\n </button>\n\n <!-- Save as List Button — only meaningful for saved (non-dynamic) views. -->\n @if (viewEntity?.ID) {\n <button\n class=\"action-button save-as-list-button\"\n (click)=\"onSaveAsList()\"\n [disabled]=\"isSavingAsList\"\n title=\"Materialize these results as a static List\">\n @if (isSavingAsList) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-floppy-disk\"></i>\n }\n <span>{{ isSavingAsList ? 'Saving...' : 'Save as List' }}</span>\n </button>\n }\n <!-- Fallback Export button. Shown ONLY for view types that lack their own export UI\n (Cards / Map / Timeline). The Grid renderer has its own in-toolbar Export (full\n result set + format/sampling dialog), so this is suppressed there to avoid a\n duplicate/confusing second button. -->\n @if (showFallbackExportButton) {\n <button\n class=\"action-button export-button\"\n (click)=\"onExport()\"\n [disabled]=\"isExporting\"\n title=\"Export\">\n @if (isExporting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-file-excel\"></i>\n }\n <span>{{ isExporting ? 'Exporting...' : 'Export' }}</span>\n </button>\n }\n </div>\n </div>\n\n <!-- Entity Viewer -->\n <mj-entity-viewer\n #entityViewer\n [Entity]=\"entityInfo\"\n [Provider]=\"Provider\"\n [ViewEntity]=\"viewEntity\"\n [GridState]=\"gridState\"\n [AutoSaveView]=\"true\"\n (RecordOpened)=\"onRecordOpened($any($event))\"\n (OpenRelatedRecordRequested)=\"onOpenRelatedRecord($event)\"\n (AfterViewTypeChange)=\"onViewTypeChanged()\"\n (DataLoaded)=\"onDataLoaded()\">\n </mj-entity-viewer>\n\n <!-- Save-as-List dialog -->\n <mj-save-view-as-list-dialog\n [Provider]=\"ProviderToUse\"\n [Visible]=\"saveAsListDialogVisible\"\n [ViewId]=\"viewEntity?.ID ?? null\"\n [ViewName]=\"viewEntity?.Name ?? null\"\n [RecordCount]=\"saveAsListRecordCount\"\n (Save)=\"onSaveAsListSubmit($event)\"\n (Cancel)=\"onSaveAsListCancelled()\">\n </mj-save-view-as-list-dialog>\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"view-resource.component.js","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/view-resource.component.ts","../../../src/lib/resource-wrappers/view-resource.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAiC,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAqB,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAA0C,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAG,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAwB,MAAM,sBAAsB,CAAC;AAI1E,OAAO,EAAuB,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;;;;;;;;;ICNvF,8BAAgC;IAC5B,gCAA6D;IACjE,iBAAM;;;IAEN,8BAA8B;IAC1B,uBAA2C;IAC3C,yBAAG;IAAA,YAAkB;IACzB,AADyB,iBAAI,EACvB;;;IADC,eAAkB;IAAlB,yCAAkB;;;IAQb,6BAA4B;IAAA,YAA6B;IAAA,iBAAI;;;IAAjC,cAA6B;IAA7B,mDAA6B;;;IAqBjD,wBAA2C;;;IAE3C,wBAAuC;;;;IAR/C,kCAIuD;IAFnD,oMAAS,qBAAc,KAAC;IAKtB,AAFF,8GAAsB,wFAEb;IAGT,4BAAM;IAAA,YAAmD;IAC7D,AAD6D,iBAAO,EAC3D;;;IARL,gDAA2B;IAE3B,cAIC;IAJD,+CAIC;IACK,eAAmD;IAAnD,0EAAmD;;;IAcrD,wBAA2C;;;IAE3C,wBAAsC;;;;IAR9C,kCAImB;IAFf,oMAAS,iBAAU,KAAC;IAKlB,AAFF,8GAAmB,wFAEV;IAGT,4BAAM;IAAA,YAA6C;IACvD,AADuD,iBAAO,EACrD;;;IARL,6CAAwB;IAExB,cAIC;IAJD,4CAIC;IACK,eAA6C;IAA7C,oEAA6C;;;;IA7C3D,AADJ,AADJ,8BAAyB,aACI,YACE;IAAA,YAAyC;IAAA,iBAAK;IACrE,+FAA+B;IAGnC,iBAAM;IAGF,AAFJ,+BAA0B,iBAK8B;IADhD,oLAAS,0BAAmB,KAAC;IAE7B,wBAAgC;IAChC,4BAAM;IAAA,0BAAU;IACpB,AADoB,iBAAO,EAClB;IAGT,sGAAsB;IAkBtB,sGAAgC;IAexC,AADI,iBAAM,EACJ;IAGN,gDAUkC;IAA9B,AADA,AADA,AADA,mNAAgB,6BAA4B,KAAC,kOACf,kCAA2B,KAAC,8MACnC,0BAAmB,KAAC,4LAC7B,qBAAc,KAAC;IACjC,iBAAmB;IAGnB,wDAOuC;IAAnC,AADA,8MAAQ,iCAA0B,KAAC,+LACzB,8BAAuB,KAAC;IACtC,iBAA8B;;;IA1EC,eAAyC;IAAzC,2GAAyC;IAChE,cAEC;IAFD,6FAEC;IAOG,eAA+C;IAA/C,uBAAA,mEAA+C,CAAA;IAMnD,eAaC;IAbD,qFAaC;IAKD,cAaC;IAbD,2DAaC;IAOL,cAAqB;IAIrB,AADA,AADA,AADA,AADA,0CAAqB,6BACA,iCACI,+BACF,sBACF;IASrB,eAA0B;IAI1B,AADA,AADA,AADA,AADA,+CAA0B,2CACS,6EACF,iFACI,6CACA;;AD3EjD;;;;;;;;;;;GAWG;AAoHI,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,qBAAqB;IAmH3C;IACA;IAnH8B,gBAAgB,CAA8B;IAExF,gDAAgD;IAChD,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IACD,gDAAgD;IAChD,IAAI,gBAAgB,CAAC,KAAiC;QACpD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IAC0B,eAAe,CAAyB;IAEnE,+CAA+C;IAC/C,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IACD,+CAA+C;IAC/C,IAAI,eAAe,CAAC,KAAwC;QAC1D,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IAEM,SAAS,GAAY,KAAK,CAAC;IAC3B,YAAY,GAAkB,IAAI,CAAC;IACnC,UAAU,GAAsB,IAAI,CAAC;IAE5C,0CAA0C;IAC1C,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,0CAA0C;IAC1C,IAAW,UAAU,CAAC,KAAwB;QAC5C,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IACM,UAAU,GAAoC,IAAI,CAAC;IAE1D,0CAA0C;IAC1C,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,0CAA0C;IAC1C,IAAW,UAAU,CAAC,KAAsC;QAC1D,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IACM,SAAS,GAAyB,IAAI,CAAC;IAE9C,yCAAyC;IACzC,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,yCAAyC;IACzC,IAAW,SAAS,CAAC,KAA2B;QAC9C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,4FAA4F;IAC5F,iGAAiG;IACjG,8FAA8F;IAC9F,gGAAgG;IACzF,WAAW,GAAY,KAAK,CAAC;IAEpC,2CAA2C;IAC3C,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,2CAA2C;IAC3C,IAAW,WAAW,CAAC,KAAc;QACnC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IACM,wBAAwB,GAAY,KAAK,CAAC;IAEjD,wDAAwD;IACxD,IAAW,wBAAwB;QACjC,OAAO,IAAI,CAAC,wBAAwB,CAAC;IACvC,CAAC;IACD,wDAAwD;IACxD,IAAW,wBAAwB,CAAC,KAAc;QAChD,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;IACxC,CAAC;IAED,4BAA4B;IACrB,uBAAuB,GAAG,KAAK,CAAC;IAEvC,uDAAuD;IACvD,IAAW,uBAAuB;QAChC,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACtC,CAAC;IACD,uDAAuD;IACvD,IAAW,uBAAuB,CAAC,KAAK;QACtC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;IACvC,CAAC;IACM,qBAAqB,GAAkB,IAAI,CAAC;IAEnD,qDAAqD;IACrD,IAAW,qBAAqB;QAC9B,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IACD,qDAAqD;IACrD,IAAW,qBAAqB,CAAC,KAAoB;QACnD,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACrC,CAAC;IACM,cAAc,GAAG,KAAK,CAAC;IAE9B,8CAA8C;IAC9C,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IACD,8CAA8C;IAC9C,IAAW,cAAc,CAAC,KAAK;QAC7B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IAEO,UAAU,GAAG,KAAK,CAAC;IAC3B,IAAY,QAAQ,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACrD,YACY,GAAsB,EACtB,aAA4B;QAEpC,KAAK,EAAE,CAAC;QAHA,QAAG,GAAH,GAAG,CAAmB;QACtB,kBAAa,GAAb,aAAa,CAAe;IAGxC,CAAC;IAED,IAAa,IAAI,CAAC,KAAmB;QACjC,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC;QACtD,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC;QACzD,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QAEnB,MAAM,WAAW,GAAG,KAAK,EAAE,gBAAgB,CAAC;QAC5C,MAAM,SAAS,GAAG,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC;QAE/C,gFAAgF;QAChF,0FAA0F;QAE1F,yDAAyD;QACzD,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,WAAW,KAAK,gBAAgB,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;YACvF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,sCAAsC;YACtC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC;IACL,CAAC;IAED,IAAa,IAAI;QACb,OAAO,KAAK,CAAC,IAAI,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,QAAQ;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEvB,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACD,+EAA+E;YAC/E,2EAA2E;YAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACvC,MAAM,eAAe,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC;YACpG,0BAA0B;YAC1B,IAAI,QAAQ,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC/B,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC;YACD,2CAA2C;iBACtC,IAAI,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;gBAClC,MAAM,IAAI,CAAC,eAAe,CACtB,IAAI,CAAC,aAAa,CAAC,MAAgB,EACnC,IAAI,CAAC,aAAa,CAAC,WAAiC,CACvD,CAAC;YACN,CAAC;iBACI,CAAC;gBACF,IAAI,CAAC,YAAY,GAAG,gCAAgC,CAAC;YACzD,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC;QACvF,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAEzB,kDAAkD;YAClD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9B,CAAC;YACD,0DAA0D;QAC9D,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,MAAc;QACrC,uBAAuB;QACvB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAElD,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,gBAAgB,MAAM,YAAY,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAgC,CAAC;QAEnD,oBAAoB;QACpB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACpE,CAAC;QAED,uBAAuB;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,UAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE7F,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QAEzB,gCAAgC;QAChC,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAkB,CAAC;YAC5E,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;gBAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAC1B,CAAC;QACL,CAAC;QAED,kFAAkF;QAClF,qFAAqF;QACrF,qEAAqE;IACzE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,UAAkB,EAAE,YAAqB;QACnE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CACvE,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,aAAa,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,sFAAsF;QACtF,kEAAkE;IACtE,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,KAAwB;QAC1C,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YAC9C,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QACnF,CAAC;IACL,CAAC;IAED,8CAA8C;IACvC,cAAc,CAAC,KAAwB;QAC5C,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,mBAAmB,CAAC,GAAgC;QACvD,IAAI,GAAG,EAAE,UAAU,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YAC3C,yFAAyF;YACzF,+DAA+D;YAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC9D,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5H,CAAC;IACL,CAAC;IAED,mDAAmD;IAC5C,mBAAmB,CAAC,GAAgC;QACzD,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,YAAY;QACf,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,+BAA+B,EAAE,CAAC;IAC3C,CAAC;IAED,4CAA4C;IACrC,YAAY;QACjB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED,6FAA6F;IACtF,iBAAiB;QACpB,IAAI,CAAC,+BAA+B,EAAE,CAAC;IAC3C,CAAC;IAED,iDAAiD;IAC1C,iBAAiB;QACtB,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACK,+BAA+B;QACnC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC;QACxF,IAAI,IAAI,KAAK,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACzC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,QAAQ;QACjB,yFAAyF;QACzF,yCAAyC;QACzC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE;gBACrD,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe;aAClE,CAAC,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,kDAAkD,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACzF,OAAO;QACX,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,CAAC,8BAA8B,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,CAAC;YAChE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,gBAAgB,CAAC,mDAAmD,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC5F,OAAO;YACX,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE;gBAClD,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE;gBACpC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE;gBAClC,cAAc,EAAE,IAAI;aACvB,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAI,CAAC,gBAAgB,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,sBAAsB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC3G,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,gBAAgB,CAAC,wCAAwC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC/E,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,MAAM,CAAC,CAAC;YAC7E,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,gBAAgB,CAAC,iDAAiD,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACxF,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;QACrD,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,wCAAwC;IACjC,KAAK,CAAC,QAAQ;QACnB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED,mGAAmG;IAC3F,kBAAkB;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,SAAS,EAAE,cAAc,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7E,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc;iBAC/B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC;iBAClC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO;iBACzB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;iBAC1B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM;aACxB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;IAEO,mBAAmB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,MAAM,CAAC;QACjD,OAAO,GAAG,IAAI,CAAC,UAAW,CAAC,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,CAAC;IAED;;OAEG;IACM,KAAK,CAAC,sBAAsB,CAAC,IAAkB;QACpD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,mFAAmF;YACpJ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;YACrF,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1D,CAAC;aACI,IAAI,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAgB,CAAC;YACvD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;YACjD,OAAO,GAAG,UAAU,YAAY,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC;QAC5E,CAAC;QACD,OAAO,oBAAoB,CAAC;IAChC,CAAC;IAED;;OAEG;IACM,KAAK,CAAC,oBAAoB,CAAC,KAAmB;QACnD,OAAO,wBAAwB,CAAC;IACpC,CAAC;IAED;;OAEG;IACI,iBAAiB;QACpB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAE7B,kDAAkD;QAClD,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,iDAAiD;IAC1C,iBAAiB;QACtB,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACI,YAAY;QACf,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC;YACvB,IAAI,CAAC,gBAAgB,CAAC,2DAA2D,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YACjG,OAAO;QACX,CAAC;QACD,gEAAgE;QAChE,mEAAmE;QACnE,oDAAoD;QACpD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,eAAe,EAAE,gBAAgB,IAAI,IAAI,CAAC;QAC5E,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,4CAA4C;IACrC,YAAY;QACjB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAEM,qBAAqB;QACxB,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,qDAAqD;IAC9C,qBAAqB;QAC1B,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACtC,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAAC,OAA6B;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAA+C,CAAC;YACtE,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE;gBACpD,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;aACnC,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;gBACrC,IAAI,CAAC,gBAAgB,CACjB,qBAAqB,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,aAAa,EAC3D,SAAS,EACT,IAAI,CACP,CAAC;gBACF,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;YACpG,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,MAAM,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC3E,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACpE,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,kDAAkD;IAC3C,KAAK,CAAC,kBAAkB,CAAC,OAA6B;QAC3D,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAGD;;OAEG;IACK,gBAAgB,CAAC,OAAe,EAAE,KAA+C,EAAE,QAAgB;QACvG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;YACzB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,WAAW,CAAC,gCAAgC;YACnD,SAAS,EAAE,EAAE;YACb,IAAI,EAAE;gBACF,OAAO;gBACP,KAAK;gBACL,eAAe,EAAE,QAAQ;aAC5B;SACJ,CAAC,CAAC;IACP,CAAC;0GAlhBQ,gBAAgB;6DAAhB,gBAAgB;;;;;;;YCzI7B,iCAAgD;YAU1C,AALA,AAJF,kFAAiB,4DAIU,oDAKF;YAgF7B,iBAAM;;YAzFF,eAwFC;YAxFD,oFAwFC;;;ADgDQ,gBAAgB;IAnH5B,aAAa,CAAC,qBAAqB,EAAE,cAAc,CAAC;GAmHxC,gBAAgB,CAmhB5B;;iFAnhBY,gBAAgB;cAlH5B,SAAS;6BACI,KAAK,YACL,sBAAsB;;kBAiH/B,SAAS;mBAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;kBAUvC,SAAS;mBAAC,cAAc;;kFAXhB,gBAAgB","sourcesContent":["import { Component, ViewChild, ElementRef, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { ResourceData, MJUserViewEntityExtended, ViewInfo } from '@memberjunction/core-entities';\nimport { RegisterClass, MJGlobal, MJEventType , UUIDsEqual } from '@memberjunction/global';\nimport { CompositeKey, Metadata, EntityInfo } from '@memberjunction/core';\nimport { RecordOpenedEvent, ViewGridState, EntityViewerComponent, ViewRelatedRecordNavigation } from '@memberjunction/ng-entity-viewer';\nimport { ExportService } from '@memberjunction/ng-export-service';\nimport { ExportColumn } from '@memberjunction/export-engine';\nimport { GraphQLDataProvider, GraphQLListsClient } from '@memberjunction/graphql-dataprovider';\nimport type { SaveViewAsListResult } from '@memberjunction/ng-list-management';\n/**\n * UserViewResource - Resource wrapper for displaying User Views in tabs\n *\n * This component wraps the EntityViewerComponent to display view data.\n * It loads the view configuration and entity, then renders the data grid/cards.\n *\n * Key features:\n * - Loads view by ID from ResourceRecordID\n * - Supports dynamic views by entity name + extra filter\n * - Applies view's WhereClause, GridState, and SortState\n * - Opens records in new tabs via NavigationService\n */\n@RegisterClass(BaseResourceComponent, 'ViewResource')\n@Component({\n standalone: false,\n selector: 'mj-userview-resource',\n templateUrl: './view-resource.component.html',\n styles: [`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n overflow: hidden;\n }\n .view-resource-container {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .view-header {\n padding: 16px 20px 8px 20px;\n flex-shrink: 0;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n }\n .header-left {\n flex: 1;\n min-width: 0;\n }\n .header-right {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n }\n .view-title {\n margin: 0 0 4px 0;\n font-size: 1.25rem;\n font-weight: 600;\n color: var(--text-primary, #1a1a1a);\n }\n .view-description {\n margin: 0;\n font-size: 0.875rem;\n color: var(--text-secondary, #666);\n }\n .action-button {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n }\n .action-button:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n }\n .action-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .action-button i {\n font-size: 0.875rem;\n }\n .create-button {\n background: var(--mj-brand-primary);\n color: white;\n border-color: var(--mj-brand-primary);\n }\n .create-button:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n }\n .export-button:hover:not(:disabled) {\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n .view-loading-state,\n .view-error-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 16px;\n }\n .view-error-state {\n color: var(--danger-color, #dc3545);\n }\n .view-error-state i {\n font-size: 2rem;\n }\n .view-error-state p {\n margin: 0;\n font-size: 1rem;\n }\n mj-entity-viewer {\n flex: 1;\n min-height: 0;\n }\n `]\n})\nexport class UserViewResource extends BaseResourceComponent {\n @ViewChild('container', { static: true }) ContainerElement!: ElementRef<HTMLDivElement>;\n\n /** @deprecated Use {@link ContainerElement}. */\n get containerElement(): ElementRef<HTMLDivElement> {\n return this.ContainerElement;\n }\n /** @deprecated Use {@link ContainerElement}. */\n set containerElement(value: ElementRef<HTMLDivElement>) {\n this.ContainerElement = value;\n }\n @ViewChild('entityViewer') EntityViewerRef?: EntityViewerComponent;\n\n /** @deprecated Use {@link EntityViewerRef}. */\n get entityViewerRef(): EntityViewerComponent | undefined {\n return this.EntityViewerRef;\n }\n /** @deprecated Use {@link EntityViewerRef}. */\n set entityViewerRef(value: EntityViewerComponent | undefined) {\n this.EntityViewerRef = value;\n }\n\n public isLoading: boolean = false;\n public errorMessage: string | null = null;\n public EntityInfo: EntityInfo | null = null;\n\n /** @deprecated Use {@link EntityInfo}. */\n public get entityInfo(): EntityInfo | null {\n return this.EntityInfo;\n }\n /** @deprecated Use {@link EntityInfo}. */\n public set entityInfo(value: EntityInfo | null) {\n this.EntityInfo = value;\n }\n public ViewEntity: MJUserViewEntityExtended | null = null;\n\n /** @deprecated Use {@link ViewEntity}. */\n public get viewEntity(): MJUserViewEntityExtended | null {\n return this.ViewEntity;\n }\n /** @deprecated Use {@link ViewEntity}. */\n public set viewEntity(value: MJUserViewEntityExtended | null) {\n this.ViewEntity = value;\n }\n public GridState: ViewGridState | null = null;\n\n /** @deprecated Use {@link GridState}. */\n public get gridState(): ViewGridState | null {\n return this.GridState;\n }\n /** @deprecated Use {@link GridState}. */\n public set gridState(value: ViewGridState | null) {\n this.GridState = value;\n }\n\n // Export state. The header Export button is a FALLBACK shown only for view types that don't\n // provide their own export UI (Cards / Map / Timeline). The Grid renderer has its own in-toolbar\n // Export (full result set + format/sampling dialog), so we suppress this one there to avoid a\n // duplicate/confusing second button — while keeping export available for every other view type.\n public IsExporting: boolean = false;\n\n /** @deprecated Use {@link IsExporting}. */\n public get isExporting(): boolean {\n return this.IsExporting;\n }\n /** @deprecated Use {@link IsExporting}. */\n public set isExporting(value: boolean) {\n this.IsExporting = value;\n }\n public ShowFallbackExportButton: boolean = false;\n\n /** @deprecated Use {@link ShowFallbackExportButton}. */\n public get showFallbackExportButton(): boolean {\n return this.ShowFallbackExportButton;\n }\n /** @deprecated Use {@link ShowFallbackExportButton}. */\n public set showFallbackExportButton(value: boolean) {\n this.ShowFallbackExportButton = value;\n }\n\n // Save-as-list dialog state\n public SaveAsListDialogVisible = false;\n\n /** @deprecated Use {@link SaveAsListDialogVisible}. */\n public get saveAsListDialogVisible() {\n return this.SaveAsListDialogVisible;\n }\n /** @deprecated Use {@link SaveAsListDialogVisible}. */\n public set saveAsListDialogVisible(value) {\n this.SaveAsListDialogVisible = value;\n }\n public SaveAsListRecordCount: number | null = null;\n\n /** @deprecated Use {@link SaveAsListRecordCount}. */\n public get saveAsListRecordCount(): number | null {\n return this.SaveAsListRecordCount;\n }\n /** @deprecated Use {@link SaveAsListRecordCount}. */\n public set saveAsListRecordCount(value: number | null) {\n this.SaveAsListRecordCount = value;\n }\n public IsSavingAsList = false;\n\n /** @deprecated Use {@link IsSavingAsList}. */\n public get isSavingAsList() {\n return this.IsSavingAsList;\n }\n /** @deprecated Use {@link IsSavingAsList}. */\n public set isSavingAsList(value) {\n this.IsSavingAsList = value;\n }\n\n private dataLoaded = false;\n private get metadata() { return this.ProviderToUse; }\n constructor(\n private cdr: ChangeDetectorRef,\n private exportService: ExportService\n ) {\n super();\n }\n\n override set Data(value: ResourceData) {\n const previousRecordId = super.Data?.ResourceRecordID;\n const previousEntity = super.Data?.Configuration?.Entity;\n super.Data = value;\n\n const newRecordId = value?.ResourceRecordID;\n const newEntity = value?.Configuration?.Entity;\n\n // View-type (grid/cards/timeline/map) and per-view-type config are now resolved\n // internally by mj-entity-viewer from the saved view's ViewTypeID — nothing to read here.\n\n // Load on first set, or when the view/entity has changed\n if (!this.dataLoaded || newRecordId !== previousRecordId || newEntity !== previousEntity) {\n this.dataLoaded = true;\n // Reset state before loading new view\n this.EntityInfo = null;\n this.ViewEntity = null;\n this.GridState = null;\n this.errorMessage = null;\n this.loadView();\n }\n }\n\n override get Data(): ResourceData {\n return super.Data;\n }\n\n /**\n * Load the view and entity based on ResourceData\n */\n private async loadView(): Promise<void> {\n const data = this.Data;\n\n if (!data) {\n this.NotifyLoadComplete();\n return;\n }\n\n this.isLoading = true;\n this.errorMessage = null;\n this.NotifyLoadStarted();\n this.cdr.detectChanges();\n\n try {\n // NavigationService.OpenDynamicView stamps the special marker 'dynamic' as the\n // record ID (tabs require ResourceRecordId) — that is NOT a saved-view ID.\n const recordId = data.ResourceRecordID;\n const isDynamicMarker = typeof recordId === 'string' && recordId.trim().toLowerCase() === 'dynamic';\n // Case 1: Load view by ID\n if (recordId && !isDynamicMarker) {\n await this.loadViewById(recordId);\n }\n // Case 2: Load dynamic view by entity name\n else if (data.Configuration?.Entity) {\n await this.loadDynamicView(\n data.Configuration.Entity as string,\n data.Configuration.ExtraFilter as string | undefined\n );\n }\n else {\n this.errorMessage = 'No view ID or entity specified';\n }\n } catch (error) {\n console.error('Error loading view:', error);\n this.errorMessage = error instanceof Error ? error.message : 'Failed to load view';\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n\n // If there was an error, notify load complete now\n if (this.errorMessage) {\n this.NotifyLoadComplete();\n }\n // Otherwise, wait for dataLoaded event from entity-viewer\n }\n }\n\n /**\n * Load a saved view by its ID\n */\n private async loadViewById(viewId: string): Promise<void> {\n // Load the view entity\n const view = await ViewInfo.GetViewEntity(viewId);\n\n if (!view) {\n throw new Error(`View with ID ${viewId} not found`);\n }\n\n this.ViewEntity = view as MJUserViewEntityExtended;\n\n // Check permissions\n if (!this.ViewEntity.UserCanView) {\n throw new Error('You do not have permission to view this view');\n }\n\n // Load the entity info\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, this.ViewEntity!.EntityID));\n\n if (!entity) {\n throw new Error(`Entity for view not found`);\n }\n\n this.EntityInfo = entity;\n\n // Parse grid state if available\n if (this.ViewEntity.GridState) {\n try {\n this.GridState = JSON.parse(this.ViewEntity.GridState) as ViewGridState;\n } catch (e) {\n console.warn('Failed to parse GridState:', e);\n this.GridState = null;\n }\n }\n\n // View-type + per-view-type config persistence is fully owned by mj-entity-viewer\n // (it reads ViewTypeID + DisplayState.viewTypeConfigs off the [viewEntity] and, with\n // [AutoSaveView]=\"true\", saves changes back) — nothing to wire here.\n }\n\n /**\n * Load a dynamic view (no saved view, just entity + filter)\n */\n private async loadDynamicView(entityName: string, _extraFilter?: string): Promise<void> {\n const entity = this.metadata.Entities.find(\n e => e.Name.trim().toLowerCase() === entityName.trim().toLowerCase()\n );\n\n if (!entity) {\n throw new Error(`Entity '${entityName}' not found`);\n }\n\n this.EntityInfo = entity;\n this.ViewEntity = null;\n this.GridState = null;\n\n // For dynamic views, we could create a synthetic viewEntity with just the WhereClause\n // but for now, we'll rely on the entity-viewer's default behavior\n }\n\n /**\n * Handle record opened event - open in new tab\n */\n public OnRecordOpened(event: RecordOpenedEvent): void {\n if (event && event.entity && event.compositeKey) {\n this.navigationService.OpenEntityRecord(event.entity.Name, event.compositeKey);\n }\n }\n\n /** @deprecated Use {@link OnRecordOpened}. */\n public onRecordOpened(event: RecordOpenedEvent): void {\n return this.OnRecordOpened(event);\n }\n\n /**\n * Handle a related-record navigation requested from within a view-type renderer\n * (e.g. a foreign-key cell) - open the target record in a new tab.\n */\n public OnOpenRelatedRecord(nav: ViewRelatedRecordNavigation): void {\n if (nav?.entityName && nav.recordKey != null) {\n // The related entity is arbitrary, so its key column can have any name — resolve the key\n // against its metadata rather than hardcoding `ID` via FromID.\n const entityInfo = this.metadata.EntityByName(nav.entityName);\n this.navigationService.OpenEntityRecord(nav.entityName, CompositeKey.FromURLSegment(entityInfo, String(nav.recordKey)));\n }\n }\n\n /** @deprecated Use {@link OnOpenRelatedRecord}. */\n public onOpenRelatedRecord(nav: ViewRelatedRecordNavigation): void {\n return this.OnOpenRelatedRecord(nav);\n }\n\n /**\n * Handle data loaded event from entity-viewer\n */\n public OnDataLoaded(): void {\n this.NotifyLoadComplete();\n this.refreshFallbackExportVisibility();\n }\n\n /** @deprecated Use {@link OnDataLoaded}. */\n public onDataLoaded(): void {\n return this.OnDataLoaded();\n }\n\n /** The active view type changed — recompute whether the fallback Export button is needed. */\n public OnViewTypeChanged(): void {\n this.refreshFallbackExportVisibility();\n }\n\n /** @deprecated Use {@link OnViewTypeChanged}. */\n public onViewTypeChanged(): void {\n return this.OnViewTypeChanged();\n }\n\n /**\n * Show the wrapper's Export button only for view types that don't ship their own export UI. The\n * entity-viewer reports this via {@link EntityViewerComponent.ActiveViewTypeHasOwnExport} (true for\n * the Grid renderer, false for Cards / Map / Timeline). Uses a cached flag + explicit change\n * detection to avoid an ExpressionChanged error from reading child state during a CD pass.\n */\n private refreshFallbackExportVisibility(): void {\n const next = !!this.EntityViewerRef && !this.EntityViewerRef.ActiveViewTypeHasOwnExport;\n if (next !== this.ShowFallbackExportButton) {\n this.ShowFallbackExportButton = next;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Fallback export for view types without their own export UI (Cards / Map / Timeline). Pulls the\n * FULL result set via the entity-viewer's capped, filter/sort-aware fetch (same path the grid uses,\n * so it's bounded and warns past the cap) and writes an Excel file.\n */\n public async OnExport(): Promise<void> {\n // Never fail silently — a \"nothing happens\" click is impossible to diagnose. Surface the\n // reason both in the UI and the console.\n if (!this.EntityInfo || !this.EntityViewerRef) {\n console.error('[ViewResource] Export: viewer not ready', {\n hasEntity: !!this.EntityInfo, hasViewer: !!this.EntityViewerRef\n });\n this.showNotification('Export is not ready yet — try again in a moment.', 'error', 5000);\n return;\n }\n this.IsExporting = true;\n this.cdr.detectChanges();\n this.showNotification('Preparing your Excel export…', 'info', 2000);\n try {\n const rows = await this.EntityViewerRef.FetchAllRowsForExport();\n if (!rows || rows.length === 0) {\n this.showNotification('Nothing to export — the view returned no records.', 'warning', 5000);\n return;\n }\n const result = await this.exportService.toExcel(rows, {\n fileName: this.buildExportFileName(),\n columns: this.buildExportColumns(),\n includeHeaders: true\n });\n if (result.success) {\n this.exportService.downloadResult(result);\n this.showNotification(`Exported ${rows.length.toLocaleString()} record(s) to Excel.`, 'success', 3000);\n } else {\n this.showNotification('Export failed while building the file.', 'error', 5000);\n console.error('[ViewResource] Export: toExcel returned failure', result);\n }\n } catch (e) {\n this.showNotification('Error exporting data — see console for details.', 'error', 5000);\n console.error('[ViewResource] Export error:', e);\n } finally {\n this.IsExporting = false;\n this.cdr.detectChanges();\n }\n }\n\n /** @deprecated Use {@link OnExport}. */\n public async onExport(): Promise<void> {\n return this.OnExport();\n }\n\n /** Columns to export — from grid state, else the view's columns, else the entity's real fields. */\n private buildExportColumns(): ExportColumn[] {\n if (!this.EntityInfo) return [];\n if (this.GridState?.columnSettings && this.GridState.columnSettings.length > 0) {\n return this.GridState.columnSettings\n .filter(col => col.hidden !== true)\n .map(col => ({ name: col.Name, displayName: col.DisplayName || col.Name }));\n }\n if (this.ViewEntity?.Columns) {\n return this.ViewEntity.Columns\n .filter(col => !col.hidden)\n .map(col => ({ name: col.Name, displayName: col.DisplayName || col.Name }));\n }\n return this.EntityInfo.Fields\n .filter(f => !f.IsVirtual)\n .map(f => ({ name: f.Name, displayName: f.DisplayNameOrName }));\n }\n\n private buildExportFileName(): string {\n const viewName = this.ViewEntity?.Name || 'Data';\n return `${this.EntityInfo!.Name}_${viewName}_${new Date().toISOString().split('T')[0]}`;\n }\n\n /**\n * Get display name for the resource tab\n */\n override async GetResourceDisplayName(data: ResourceData): Promise<string> {\n if (data.ResourceRecordID) {\n const compositeKey = CompositeKey.FromID(data.ResourceRecordID); // first-pk-ok: ResourceRecordID of a User Views resource — core entity keyed by ID\n const name = await this.metadata.GetEntityRecordName('MJ: User Views', compositeKey);\n return name ? name : `View: ${data.ResourceRecordID}`;\n }\n else if (data.Configuration?.Entity) {\n const entityName = data.Configuration.Entity as string;\n const hasFilter = data.Configuration.ExtraFilter;\n return `${entityName} [Dynamic${hasFilter ? ' - Filtered' : ' - All'}]`;\n }\n return 'User Views [Error]';\n }\n\n /**\n * Get icon class for the resource tab\n */\n override async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-table-list';\n }\n\n /**\n * Handle creating a new record for the current entity\n */\n public OnCreateNewRecord(): void {\n if (!this.EntityInfo) return;\n\n // Use NavigationService to open a new record form\n this.navigationService.OpenNewEntityRecord(this.EntityInfo.Name);\n }\n\n /** @deprecated Use {@link OnCreateNewRecord}. */\n public onCreateNewRecord(): void {\n return this.OnCreateNewRecord();\n }\n\n /**\n * Open the Save-as-List dialog. Only meaningful for saved views (a\n * ViewID is required to materialize). Dynamic views fall back to a\n * user-visible notification rather than silently doing nothing.\n */\n public OnSaveAsList(): void {\n if (!this.ViewEntity?.ID) {\n this.showNotification('Save as List requires a saved View. Save this view first.', 'info', 4000);\n return;\n }\n // Best-effort record-count hint — the entity-viewer exposes the\n // grid's row count on its gridState; we surface it so the dialog's\n // confirm button can say \"Save List (476 records)\".\n this.SaveAsListRecordCount = this.EntityViewerRef?.TotalRecordCount ?? null;\n this.SaveAsListDialogVisible = true;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OnSaveAsList}. */\n public onSaveAsList(): void {\n return this.OnSaveAsList();\n }\n\n public OnSaveAsListCancelled(): void {\n this.SaveAsListDialogVisible = false;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OnSaveAsListCancelled}. */\n public onSaveAsListCancelled(): void {\n return this.OnSaveAsListCancelled();\n }\n\n public async OnSaveAsListSubmit(payload: SaveViewAsListResult): Promise<void> {\n const viewId = this.ViewEntity?.ID;\n if (!viewId) return;\n this.IsSavingAsList = true;\n this.cdr.detectChanges();\n try {\n const provider = this.ProviderToUse as unknown as GraphQLDataProvider;\n const client = new GraphQLListsClient(provider);\n const result = await client.MaterializeFromView(viewId, {\n ListName: payload.ListName,\n Description: payload.Description,\n CategoryId: payload.CategoryId,\n RememberLineage: payload.RememberLineage,\n UseSnapshot: payload.UseSnapshot,\n RefreshMode: payload.RefreshMode,\n });\n if (result.Success && result.CreatedListId) {\n this.SaveAsListDialogVisible = false;\n this.showNotification(\n `List created with ${result.Counts?.Added ?? 0} record(s).`,\n 'success',\n 3000,\n );\n this.navigationService.OpenEntityRecord('MJ: Lists', CompositeKey.FromID(result.CreatedListId));\n } else {\n this.showNotification(`Save failed: ${result.Message}`, 'error', 5000);\n }\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n this.showNotification(`Save failed: ${message}`, 'error', 5000);\n } finally {\n this.IsSavingAsList = false;\n this.cdr.detectChanges();\n }\n }\n\n /** @deprecated Use {@link OnSaveAsListSubmit}. */\n public async onSaveAsListSubmit(payload: SaveViewAsListResult): Promise<void> {\n return this.OnSaveAsListSubmit(payload);\n }\n\n\n /**\n * Show a notification to the user\n */\n private showNotification(message: string, style: 'info' | 'success' | 'error' | 'warning', duration: number): void {\n MJGlobal.Instance.RaiseEvent({\n component: this,\n event: MJEventType.DisplaySimpleNotificationRequest,\n eventCode: '',\n args: {\n message,\n style,\n DisplayDuration: duration\n }\n });\n }\n}\n","<div #container class=\"view-resource-container\">\n @if (isLoading) {\n <div class=\"view-loading-state\">\n <mj-loading text=\"Loading view...\" size=\"large\"></mj-loading>\n </div>\n } @else if (errorMessage) {\n <div class=\"view-error-state\">\n <i class=\"fas fa-exclamation-triangle\"></i>\n <p>{{ errorMessage }}</p>\n </div>\n } @else if (entityInfo) {\n <!-- Header with title and action buttons -->\n <div class=\"view-header\">\n <div class=\"header-left\">\n <h2 class=\"view-title\">{{ viewEntity?.Name || entityInfo.Name }}</h2>\n @if (viewEntity?.Description) {\n <p class=\"view-description\">{{ viewEntity!.Description }}</p>\n }\n </div>\n <div class=\"header-right\">\n <!-- Create New Record Button -->\n <button\n class=\"action-button create-button\"\n (click)=\"onCreateNewRecord()\"\n title=\"Create new {{ entityInfo.Name }} record\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New Record</span>\n </button>\n\n <!-- Save as List Button — only meaningful for saved (non-dynamic) views. -->\n @if (viewEntity?.ID) {\n <button\n class=\"action-button save-as-list-button\"\n (click)=\"onSaveAsList()\"\n [disabled]=\"isSavingAsList\"\n title=\"Materialize these results as a static List\">\n @if (isSavingAsList) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-floppy-disk\"></i>\n }\n <span>{{ isSavingAsList ? 'Saving...' : 'Save as List' }}</span>\n </button>\n }\n <!-- Fallback Export button. Shown ONLY for view types that lack their own export UI\n (Cards / Map / Timeline). The Grid renderer has its own in-toolbar Export (full\n result set + format/sampling dialog), so this is suppressed there to avoid a\n duplicate/confusing second button. -->\n @if (showFallbackExportButton) {\n <button\n class=\"action-button export-button\"\n (click)=\"onExport()\"\n [disabled]=\"isExporting\"\n title=\"Export\">\n @if (isExporting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-file-excel\"></i>\n }\n <span>{{ isExporting ? 'Exporting...' : 'Export' }}</span>\n </button>\n }\n </div>\n </div>\n\n <!-- Entity Viewer -->\n <mj-entity-viewer\n #entityViewer\n [Entity]=\"entityInfo\"\n [Provider]=\"Provider\"\n [ViewEntity]=\"viewEntity\"\n [GridState]=\"gridState\"\n [AutoSaveView]=\"true\"\n (RecordOpened)=\"onRecordOpened($any($event))\"\n (OpenRelatedRecordRequested)=\"onOpenRelatedRecord($event)\"\n (AfterViewTypeChange)=\"onViewTypeChanged()\"\n (DataLoaded)=\"onDataLoaded()\">\n </mj-entity-viewer>\n\n <!-- Save-as-List dialog -->\n <mj-save-view-as-list-dialog\n [Provider]=\"ProviderToUse\"\n [Visible]=\"saveAsListDialogVisible\"\n [ViewId]=\"viewEntity?.ID ?? null\"\n [ViewName]=\"viewEntity?.Name ?? null\"\n [RecordCount]=\"saveAsListRecordCount\"\n (Save)=\"onSaveAsListSubmit($event)\"\n (Cancel)=\"onSaveAsListCancelled()\">\n </mj-save-view-as-list-dialog>\n }\n</div>\n"]}
|
|
@@ -18,11 +18,15 @@ export declare class StartupValidationService {
|
|
|
18
18
|
/**
|
|
19
19
|
* Runs all validation checks
|
|
20
20
|
*/
|
|
21
|
+
ValidateSystemSetup(): void;
|
|
22
|
+
/** @deprecated Use {@link ValidateSystemSetup}. */
|
|
21
23
|
validateSystemSetup(): void;
|
|
22
24
|
/**
|
|
23
25
|
* Directly adds a validation issue for no user roles
|
|
24
26
|
* This is used when we detect the missing roles error during GraphQL setup
|
|
25
27
|
*/
|
|
28
|
+
AddNoRolesValidationIssue(): void;
|
|
29
|
+
/** @deprecated Use {@link AddNoRolesValidationIssue}. */
|
|
26
30
|
addNoRolesValidationIssue(): void;
|
|
27
31
|
/**
|
|
28
32
|
* Validates that the current user has at least one role assigned
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup-validation.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/startup-validation.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;;AAEtE;;GAEG;AACH,qBAGa,wBAAwB;IACvB,OAAO,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,uBAAuB;IAE9D;;;;OAIG;IACH,OAAO,CAAC,SAAS,CAAkC;IAEnD,IAAW,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,EAElD;IAED,IAAW,QAAQ,IAAI,iBAAiB,CAEvC;IAED;;OAEG;IACI,mBAAmB,IAAI,IAAI;IAKlC;;;OAGG;IACI,yBAAyB,IAAI,IAAI;IAUxC;;OAEG;IACH,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"startup-validation.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/startup-validation.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;;AAEtE;;GAEG;AACH,qBAGa,wBAAwB;IACvB,OAAO,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,uBAAuB;IAE9D;;;;OAIG;IACH,OAAO,CAAC,SAAS,CAAkC;IAEnD,IAAW,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,EAElD;IAED,IAAW,QAAQ,IAAI,iBAAiB,CAEvC;IAED;;OAEG;IACI,mBAAmB,IAAI,IAAI;IAKlC,mDAAmD;IAC5C,mBAAmB,IAAI,IAAI;IAIlC;;;OAGG;IACI,yBAAyB,IAAI,IAAI;IAUxC,yDAAyD;IAClD,yBAAyB,IAAI,IAAI;IAIxC;;OAEG;IACH,OAAO,CAAC,iBAAiB;yCArDd,wBAAwB;6CAAxB,wBAAwB;CA2FpC"}
|
|
@@ -25,15 +25,19 @@ export class StartupValidationService {
|
|
|
25
25
|
/**
|
|
26
26
|
* Runs all validation checks
|
|
27
27
|
*/
|
|
28
|
-
|
|
28
|
+
ValidateSystemSetup() {
|
|
29
29
|
this.validateUserRoles();
|
|
30
30
|
// Add more validation checks here as needed
|
|
31
31
|
}
|
|
32
|
+
/** @deprecated Use {@link ValidateSystemSetup}. */
|
|
33
|
+
validateSystemSetup() {
|
|
34
|
+
return this.ValidateSystemSetup();
|
|
35
|
+
}
|
|
32
36
|
/**
|
|
33
37
|
* Directly adds a validation issue for no user roles
|
|
34
38
|
* This is used when we detect the missing roles error during GraphQL setup
|
|
35
39
|
*/
|
|
36
|
-
|
|
40
|
+
AddNoRolesValidationIssue() {
|
|
37
41
|
this.validationService.addIssue({
|
|
38
42
|
id: 'no-user-roles',
|
|
39
43
|
message: 'Missing User Roles - Cannot Access Application',
|
|
@@ -42,6 +46,10 @@ export class StartupValidationService {
|
|
|
42
46
|
help: 'Please contact your system administrator to have appropriate roles assigned to your account. At minimum, a "UI" role is required.'
|
|
43
47
|
});
|
|
44
48
|
}
|
|
49
|
+
/** @deprecated Use {@link AddNoRolesValidationIssue}. */
|
|
50
|
+
addNoRolesValidationIssue() {
|
|
51
|
+
return this.AddNoRolesValidationIssue();
|
|
52
|
+
}
|
|
45
53
|
/**
|
|
46
54
|
* Validates that the current user has at least one role assigned
|
|
47
55
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup-validation.service.js","sourceRoot":"","sources":["../../../src/lib/services/startup-validation.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAA+B,MAAM,sBAAsB,CAAC;;;AAG7E;;GAEG;AAIH,MAAM,OAAO,wBAAwB;IACf;IAApB,YAAoB,iBAA0C;QAA1C,sBAAiB,GAAjB,iBAAiB,CAAyB;IAAI,CAAC;IAEnE;;;;OAIG;IACK,SAAS,GAA6B,IAAI,CAAC;IAEnD,IAAW,QAAQ,CAAC,KAA+B;QAC/C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAC/C,CAAC;IAED;;OAEG;IACI,mBAAmB;QACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,4CAA4C;IAC9C,CAAC;IAED;;;OAGG;IACI,yBAAyB;QAC9B,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YAC9B,EAAE,EAAE,eAAe;YACnB,OAAO,EAAE,gDAAgD;YACzD,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,kKAAkK;YAC3K,IAAI,EAAE,mIAAmI;SAC1I,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;YAEnC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;gBAC/D,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;oBAC9B,EAAE,EAAE,gBAAgB;oBACpB,OAAO,EAAE,wBAAwB;oBACjC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,qDAAqD;oBAC9D,IAAI,EAAE,8EAA8E;iBACrF,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjE,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;gBACtF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;oBAC9B,EAAE,EAAE,eAAe;oBACnB,OAAO,EAAE,mCAAmC;oBAC5C,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,8GAA8G;oBACvH,IAAI,EAAE,uFAAuF;iBAC9F,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,6DAA6D,EAAE,GAAG,CAAC,CAAC;YAClF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;gBAC9B,EAAE,EAAE,yBAAyB;gBAC7B,OAAO,EAAE,4BAA4B;gBACrC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,mDAAmD;gBAC5D,IAAI,EAAE,sFAAsF;aAC7F,CAAC,CAAC;QACL,CAAC;IACH,CAAC;
|
|
1
|
+
{"version":3,"file":"startup-validation.service.js","sourceRoot":"","sources":["../../../src/lib/services/startup-validation.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAA+B,MAAM,sBAAsB,CAAC;;;AAG7E;;GAEG;AAIH,MAAM,OAAO,wBAAwB;IACf;IAApB,YAAoB,iBAA0C;QAA1C,sBAAiB,GAAjB,iBAAiB,CAAyB;IAAI,CAAC;IAEnE;;;;OAIG;IACK,SAAS,GAA6B,IAAI,CAAC;IAEnD,IAAW,QAAQ,CAAC,KAA+B;QAC/C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAC/C,CAAC;IAED;;OAEG;IACI,mBAAmB;QACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,4CAA4C;IAC9C,CAAC;IAED,mDAAmD;IAC5C,mBAAmB;QACxB,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,yBAAyB;QAC9B,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YAC9B,EAAE,EAAE,eAAe;YACnB,OAAO,EAAE,gDAAgD;YACzD,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,kKAAkK;YAC3K,IAAI,EAAE,mIAAmI;SAC1I,CAAC,CAAC;IACL,CAAC;IAED,yDAAyD;IAClD,yBAAyB;QAC9B,OAAO,IAAI,CAAC,yBAAyB,EAAE,CAAC;IAC1C,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;YAEnC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;gBAC/D,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;oBAC9B,EAAE,EAAE,gBAAgB;oBACpB,OAAO,EAAE,wBAAwB;oBACjC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,qDAAqD;oBAC9D,IAAI,EAAE,8EAA8E;iBACrF,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjE,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;gBACtF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;oBAC9B,EAAE,EAAE,eAAe;oBACnB,OAAO,EAAE,mCAAmC;oBAC5C,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,8GAA8G;oBACvH,IAAI,EAAE,uFAAuF;iBAC9F,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,6DAA6D,EAAE,GAAG,CAAC,CAAC;YAClF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;gBAC9B,EAAE,EAAE,yBAAyB;gBAC7B,OAAO,EAAE,4BAA4B;gBACrC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,mDAAmD;gBAC5D,IAAI,EAAE,sFAAsF;aAC7F,CAAC,CAAC;QACL,CAAC;IACH,CAAC;kHA1FU,wBAAwB;gEAAxB,wBAAwB,WAAxB,wBAAwB,mBAFvB,MAAM;;iFAEP,wBAAwB;cAHpC,UAAU;eAAC;gBACV,UAAU,EAAE,MAAM;aACnB","sourcesContent":["import { Injectable } from '@angular/core';\nimport { Metadata, UserInfo, IMetadataProvider } from '@memberjunction/core';\nimport { SystemValidationService } from './system-validation.service';\n\n/**\n * Service that performs validation checks during application startup\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class StartupValidationService {\n constructor(private validationService: SystemValidationService) { }\n\n /**\n * Optional explicit metadata provider. Set via `setProvider()` from a caller\n * with provider context (e.g. the shell). Falls back to `Metadata.Provider`\n * when not set, which is fine for single-provider apps.\n */\n private _provider: IMetadataProvider | null = null;\n\n public set Provider(value: IMetadataProvider | null) {\n this._provider = value;\n }\n\n public get Provider(): IMetadataProvider {\n return this._provider ?? Metadata.Provider;\n }\n \n /**\n * Runs all validation checks\n */\n public ValidateSystemSetup(): void {\n this.validateUserRoles();\n // Add more validation checks here as needed\n }\n\n /** @deprecated Use {@link ValidateSystemSetup}. */\n public validateSystemSetup(): void {\n return this.ValidateSystemSetup();\n }\n \n /**\n * Directly adds a validation issue for no user roles\n * This is used when we detect the missing roles error during GraphQL setup\n */\n public AddNoRolesValidationIssue(): void {\n this.validationService.addIssue({\n id: 'no-user-roles',\n message: 'Missing User Roles - Cannot Access Application',\n severity: 'error',\n details: 'Your account does not have any roles assigned, which is required to use the application. This is preventing the system from loading core resources and metadata.',\n help: 'Please contact your system administrator to have appropriate roles assigned to your account. At minimum, a \"UI\" role is required.'\n });\n }\n\n /** @deprecated Use {@link AddNoRolesValidationIssue}. */\n public addNoRolesValidationIssue(): void {\n return this.AddNoRolesValidationIssue();\n }\n\n /**\n * Validates that the current user has at least one role assigned\n */\n private validateUserRoles(): void {\n try {\n const md = this.Provider;\n const currentUser = md.CurrentUser;\n \n if (!currentUser) {\n console.log('StartupValidationService: No current user found');\n this.validationService.addIssue({\n id: 'user-not-found',\n message: 'User account not found',\n severity: 'error',\n details: 'Your user account could not be found in the system.',\n help: 'Contact your system administrator to ensure your account is properly set up.'\n });\n return;\n }\n \n if (!currentUser.UserRoles || currentUser.UserRoles.length === 0) {\n console.log('StartupValidationService: No user roles found, adding validation issue');\n this.validationService.addIssue({\n id: 'no-user-roles',\n message: 'No roles assigned to your account',\n severity: 'error',\n details: 'Your user account does not have any roles assigned. This will prevent you from accessing most functionality.',\n help: 'Contact your system administrator to have appropriate roles assigned to your account.'\n });\n }\n } catch (err) {\n console.error('StartupValidationService: Error during user role validation', err);\n this.validationService.addIssue({\n id: 'user-roles-check-failed',\n message: 'Failed to check user roles',\n severity: 'error',\n details: 'An error occurred while checking your user roles.',\n help: 'Try refreshing the page. If the problem persists, contact your system administrator.'\n });\n }\n }\n}"]}
|
|
@@ -16,23 +16,35 @@ export interface SystemValidationIssue {
|
|
|
16
16
|
*/
|
|
17
17
|
export declare class SystemValidationService {
|
|
18
18
|
private _validationIssues;
|
|
19
|
-
|
|
19
|
+
ValidationIssues$: Observable<SystemValidationIssue[]>;
|
|
20
|
+
/** @deprecated Use {@link ValidationIssues$}. */
|
|
21
|
+
get validationIssues$(): Observable<SystemValidationIssue[]>;
|
|
22
|
+
/** @deprecated Use {@link ValidationIssues$}. */
|
|
23
|
+
set validationIssues$(value: Observable<SystemValidationIssue[]>);
|
|
20
24
|
constructor();
|
|
21
25
|
/**
|
|
22
26
|
* Adds a new validation issue to the list
|
|
23
27
|
*/
|
|
28
|
+
AddIssue(issue: Omit<SystemValidationIssue, 'timestamp'>): void;
|
|
29
|
+
/** @deprecated Use {@link AddIssue}. */
|
|
24
30
|
addIssue(issue: Omit<SystemValidationIssue, 'timestamp'>): void;
|
|
25
31
|
/**
|
|
26
32
|
* Removes a validation issue by id
|
|
27
33
|
*/
|
|
34
|
+
RemoveIssue(id: string): void;
|
|
35
|
+
/** @deprecated Use {@link RemoveIssue}. */
|
|
28
36
|
removeIssue(id: string): void;
|
|
29
37
|
/**
|
|
30
38
|
* Clears all validation issues
|
|
31
39
|
*/
|
|
40
|
+
ClearIssues(): void;
|
|
41
|
+
/** @deprecated Use {@link ClearIssues}. */
|
|
32
42
|
clearIssues(): void;
|
|
33
43
|
/**
|
|
34
44
|
* Checks if there are any validation issues with error severity
|
|
35
45
|
*/
|
|
46
|
+
HasErrors(): boolean;
|
|
47
|
+
/** @deprecated Use {@link HasErrors}. */
|
|
36
48
|
hasErrors(): boolean;
|
|
37
49
|
static ɵfac: i0.ɵɵFactoryDeclaration<SystemValidationService, never>;
|
|
38
50
|
static ɵprov: i0.ɵɵInjectableDeclaration<SystemValidationService>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-validation.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/system-validation.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,UAAU,EAAE,MAAM,MAAM,CAAC;;AAGnD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,qBAGa,uBAAuB;IAClC,OAAO,CAAC,iBAAiB,CAAoD;IAEtE,iBAAiB,EAAE,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAyC;;
|
|
1
|
+
{"version":3,"file":"system-validation.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/system-validation.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,UAAU,EAAE,MAAM,MAAM,CAAC;;AAGnD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,qBAGa,uBAAuB;IAClC,OAAO,CAAC,iBAAiB,CAAoD;IAEtE,iBAAiB,EAAE,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAyC;IAEtG,iDAAiD;IACjD,IAAW,iBAAiB,IAAI,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAElE;IACD,iDAAiD;IACjD,IAAW,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,qBAAqB,EAAE,CAAC,EAEtE;;IAID;;OAEG;IACI,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,WAAW,CAAC,GAAG,IAAI;IAmBtE,wCAAwC;IACjC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,WAAW,CAAC,GAAG,IAAI;IAItE;;OAEG;IACI,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAapC,2CAA2C;IACpC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACI,WAAW,IAAI,IAAI;IAI1B,2CAA2C;IACpC,WAAW,IAAI,IAAI;IAI1B;;OAEG;IACI,SAAS,IAAI,OAAO;IAI3B,yCAAyC;IAClC,SAAS,IAAI,OAAO;yCApFhB,uBAAuB;6CAAvB,uBAAuB;CAuFnC"}
|
|
@@ -7,12 +7,20 @@ import * as i0 from "@angular/core";
|
|
|
7
7
|
*/
|
|
8
8
|
export class SystemValidationService {
|
|
9
9
|
_validationIssues = new BehaviorSubject([]);
|
|
10
|
-
|
|
10
|
+
ValidationIssues$ = this._validationIssues.asObservable();
|
|
11
|
+
/** @deprecated Use {@link ValidationIssues$}. */
|
|
12
|
+
get validationIssues$() {
|
|
13
|
+
return this.ValidationIssues$;
|
|
14
|
+
}
|
|
15
|
+
/** @deprecated Use {@link ValidationIssues$}. */
|
|
16
|
+
set validationIssues$(value) {
|
|
17
|
+
this.ValidationIssues$ = value;
|
|
18
|
+
}
|
|
11
19
|
constructor() { }
|
|
12
20
|
/**
|
|
13
21
|
* Adds a new validation issue to the list
|
|
14
22
|
*/
|
|
15
|
-
|
|
23
|
+
AddIssue(issue) {
|
|
16
24
|
try {
|
|
17
25
|
const newIssue = {
|
|
18
26
|
...issue,
|
|
@@ -29,10 +37,14 @@ export class SystemValidationService {
|
|
|
29
37
|
console.error('Error adding validation issue', err);
|
|
30
38
|
}
|
|
31
39
|
}
|
|
40
|
+
/** @deprecated Use {@link AddIssue}. */
|
|
41
|
+
addIssue(issue) {
|
|
42
|
+
return this.AddIssue(issue);
|
|
43
|
+
}
|
|
32
44
|
/**
|
|
33
45
|
* Removes a validation issue by id
|
|
34
46
|
*/
|
|
35
|
-
|
|
47
|
+
RemoveIssue(id) {
|
|
36
48
|
try {
|
|
37
49
|
const currentIssues = this._validationIssues.getValue();
|
|
38
50
|
const updatedIssues = currentIssues.filter(issue => issue.id !== id);
|
|
@@ -44,18 +56,30 @@ export class SystemValidationService {
|
|
|
44
56
|
console.error('Error removing validation issue', err);
|
|
45
57
|
}
|
|
46
58
|
}
|
|
59
|
+
/** @deprecated Use {@link RemoveIssue}. */
|
|
60
|
+
removeIssue(id) {
|
|
61
|
+
return this.RemoveIssue(id);
|
|
62
|
+
}
|
|
47
63
|
/**
|
|
48
64
|
* Clears all validation issues
|
|
49
65
|
*/
|
|
50
|
-
|
|
66
|
+
ClearIssues() {
|
|
51
67
|
this._validationIssues.next([]);
|
|
52
68
|
}
|
|
69
|
+
/** @deprecated Use {@link ClearIssues}. */
|
|
70
|
+
clearIssues() {
|
|
71
|
+
return this.ClearIssues();
|
|
72
|
+
}
|
|
53
73
|
/**
|
|
54
74
|
* Checks if there are any validation issues with error severity
|
|
55
75
|
*/
|
|
56
|
-
|
|
76
|
+
HasErrors() {
|
|
57
77
|
return this._validationIssues.getValue().some(issue => issue.severity === 'error');
|
|
58
78
|
}
|
|
79
|
+
/** @deprecated Use {@link HasErrors}. */
|
|
80
|
+
hasErrors() {
|
|
81
|
+
return this.HasErrors();
|
|
82
|
+
}
|
|
59
83
|
static ɵfac = function SystemValidationService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SystemValidationService)(); };
|
|
60
84
|
static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: SystemValidationService, factory: SystemValidationService.ɵfac, providedIn: 'root' });
|
|
61
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-validation.service.js","sourceRoot":"","sources":["../../../src/lib/services/system-validation.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAc,MAAM,MAAM,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;;AAchD;;GAEG;AAIH,MAAM,OAAO,uBAAuB;IAC1B,iBAAiB,GAAG,IAAI,eAAe,CAA0B,EAAE,CAAC,CAAC;IAEtE,iBAAiB,GAAwC,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;IAEtG,gBAAgB,CAAC;IAEjB;;OAEG;IACI,QAAQ,CAAC,KAA+C;QAC7D,IAAI,CAAC;YACH,MAAM,QAAQ,GAA0B;gBACtC,GAAG,KAAK;gBACR,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YAEF,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;YAExD,wCAAwC;YACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAC1D,QAAQ,CAAC,4BAA4B,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED;;OAEG;IACI,WAAW,CAAC,EAAU;QAC3B,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;YACxD,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAErE,IAAI,aAAa,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC;gBAClD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;OAEG;IACI,WAAW;QAChB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,SAAS;QACd,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IACrF,CAAC;
|
|
1
|
+
{"version":3,"file":"system-validation.service.js","sourceRoot":"","sources":["../../../src/lib/services/system-validation.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { LogError } from '@memberjunction/core';\n\n/**\n * Represents a system validation issue with its severity level\n */\nexport interface SystemValidationIssue {\n id: string;\n message: string;\n details?: string;\n severity: 'error' | 'warning' | 'info';\n help?: string;\n timestamp: Date;\n}\n\n/**\n * Service for checking system validation issues and displaying error messages to users\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SystemValidationService {\n private _validationIssues = new BehaviorSubject<SystemValidationIssue[]>([]);\n \n public ValidationIssues$: Observable<SystemValidationIssue[]> = this._validationIssues.asObservable();\n\n /** @deprecated Use {@link ValidationIssues$}. */\n public get validationIssues$(): Observable<SystemValidationIssue[]> {\n return this.ValidationIssues$;\n }\n /** @deprecated Use {@link ValidationIssues$}. */\n public set validationIssues$(value: Observable<SystemValidationIssue[]>) {\n this.ValidationIssues$ = value;\n }\n\n constructor() { }\n\n /**\n * Adds a new validation issue to the list\n */\n public AddIssue(issue: Omit<SystemValidationIssue, 'timestamp'>): void {\n try {\n const newIssue: SystemValidationIssue = {\n ...issue,\n timestamp: new Date()\n };\n\n const currentIssues = this._validationIssues.getValue();\n \n // Don't add duplicates with the same ID\n if (!currentIssues.some(i => i.id === issue.id)) {\n this._validationIssues.next([...currentIssues, newIssue]);\n LogError(`System Validation Issue: ${issue.message} (${issue.id})`);\n }\n } catch (err) {\n console.error('Error adding validation issue', err);\n }\n }\n\n /** @deprecated Use {@link AddIssue}. */\n public addIssue(issue: Omit<SystemValidationIssue, 'timestamp'>): void {\n return this.AddIssue(issue);\n }\n\n /**\n * Removes a validation issue by id\n */\n public RemoveIssue(id: string): void {\n try {\n const currentIssues = this._validationIssues.getValue();\n const updatedIssues = currentIssues.filter(issue => issue.id !== id);\n \n if (updatedIssues.length !== currentIssues.length) {\n this._validationIssues.next(updatedIssues);\n }\n } catch (err) {\n console.error('Error removing validation issue', err);\n }\n }\n\n /** @deprecated Use {@link RemoveIssue}. */\n public removeIssue(id: string): void {\n return this.RemoveIssue(id);\n }\n\n /**\n * Clears all validation issues\n */\n public ClearIssues(): void {\n this._validationIssues.next([]);\n }\n\n /** @deprecated Use {@link ClearIssues}. */\n public clearIssues(): void {\n return this.ClearIssues();\n }\n\n /**\n * Checks if there are any validation issues with error severity\n */\n public HasErrors(): boolean {\n return this._validationIssues.getValue().some(issue => issue.severity === 'error');\n }\n\n /** @deprecated Use {@link HasErrors}. */\n public hasErrors(): boolean {\n return this.HasErrors();\n }\n}"]}
|
|
@@ -26,22 +26,54 @@ export interface AppAccessDialogResult {
|
|
|
26
26
|
*/
|
|
27
27
|
export declare class AppAccessDialogComponent implements OnDestroy {
|
|
28
28
|
private cdr;
|
|
29
|
-
|
|
29
|
+
Visible: boolean;
|
|
30
|
+
/** @deprecated Use {@link Visible}. */
|
|
31
|
+
set visible(value: AppAccessDialogComponent['Visible']);
|
|
32
|
+
/** @deprecated Use {@link Visible}. */
|
|
33
|
+
get visible(): AppAccessDialogComponent['Visible'];
|
|
34
|
+
VisibleChange: EventEmitter<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* @deprecated Use {@link VisibleChange}.
|
|
37
|
+
*
|
|
38
|
+
* The same emitter under the old binding name, so a template still binding
|
|
39
|
+
* (visibleChange) keeps working. Must stay AFTER VisibleChange: class fields
|
|
40
|
+
* initialise in order, and the other way round this captures undefined.
|
|
41
|
+
*/
|
|
30
42
|
visibleChange: EventEmitter<boolean>;
|
|
43
|
+
Result: EventEmitter<AppAccessDialogResult>;
|
|
44
|
+
/**
|
|
45
|
+
* @deprecated Use {@link Result}.
|
|
46
|
+
*
|
|
47
|
+
* The same emitter under the old binding name, so a template still binding
|
|
48
|
+
* (result) keeps working. Must stay AFTER Result: class fields
|
|
49
|
+
* initialise in order, and the other way round this captures undefined.
|
|
50
|
+
*/
|
|
31
51
|
result: EventEmitter<AppAccessDialogResult>;
|
|
32
52
|
config: AppAccessDialogConfig | null;
|
|
33
|
-
|
|
53
|
+
IsProcessing: boolean;
|
|
54
|
+
/** @deprecated Use {@link IsProcessing}. */
|
|
55
|
+
get isProcessing(): boolean;
|
|
56
|
+
/** @deprecated Use {@link IsProcessing}. */
|
|
57
|
+
set isProcessing(value: boolean);
|
|
34
58
|
private countdownInterval;
|
|
35
|
-
|
|
59
|
+
CountdownSeconds: number;
|
|
60
|
+
/** @deprecated Use {@link CountdownSeconds}. */
|
|
61
|
+
get countdownSeconds(): number;
|
|
62
|
+
/** @deprecated Use {@link CountdownSeconds}. */
|
|
63
|
+
set countdownSeconds(value: number);
|
|
36
64
|
private readonly AUTO_DISMISS_SECONDS;
|
|
37
65
|
constructor(cdr: ChangeDetectorRef);
|
|
38
66
|
/**
|
|
39
67
|
* Show the dialog with the specified configuration
|
|
40
68
|
*/
|
|
69
|
+
Show(config: AppAccessDialogConfig): void;
|
|
70
|
+
/** @deprecated Use {@link Show}. */
|
|
41
71
|
show(config: AppAccessDialogConfig): void;
|
|
42
72
|
/**
|
|
43
73
|
* Hide the dialog
|
|
44
74
|
*/
|
|
75
|
+
Hide(): void;
|
|
76
|
+
/** @deprecated Use {@link Hide}. */
|
|
45
77
|
hide(): void;
|
|
46
78
|
ngOnDestroy(): void;
|
|
47
79
|
/**
|
|
@@ -51,10 +83,14 @@ export declare class AppAccessDialogComponent implements OnDestroy {
|
|
|
51
83
|
/**
|
|
52
84
|
* Get the dialog icon based on type
|
|
53
85
|
*/
|
|
86
|
+
get Icon(): string;
|
|
87
|
+
/** @deprecated Use {@link Icon}. */
|
|
54
88
|
get icon(): string;
|
|
55
89
|
/**
|
|
56
90
|
* Get the dialog icon color based on type
|
|
57
91
|
*/
|
|
92
|
+
get IconColor(): string;
|
|
93
|
+
/** @deprecated Use {@link IconColor}. */
|
|
58
94
|
get iconColor(): string;
|
|
59
95
|
/**
|
|
60
96
|
* Get the main message based on type
|
|
@@ -63,20 +99,28 @@ export declare class AppAccessDialogComponent implements OnDestroy {
|
|
|
63
99
|
/**
|
|
64
100
|
* Get the secondary/help message based on type
|
|
65
101
|
*/
|
|
102
|
+
get HelpMessage(): string;
|
|
103
|
+
/** @deprecated Use {@link HelpMessage}. */
|
|
66
104
|
get helpMessage(): string;
|
|
67
105
|
/**
|
|
68
106
|
* Check if the primary action button should be shown
|
|
69
107
|
*/
|
|
108
|
+
get ShowPrimaryAction(): boolean;
|
|
109
|
+
/** @deprecated Use {@link ShowPrimaryAction}. */
|
|
70
110
|
get showPrimaryAction(): boolean;
|
|
71
111
|
/**
|
|
72
112
|
* Get the primary action button text
|
|
73
113
|
*/
|
|
114
|
+
get PrimaryActionText(): string;
|
|
115
|
+
/** @deprecated Use {@link PrimaryActionText}. */
|
|
74
116
|
get primaryActionText(): string;
|
|
75
117
|
/**
|
|
76
118
|
* Get the secondary/dismiss button text with countdown if applicable
|
|
77
119
|
* For actionable dialogs (install/enable), show "Cancel"
|
|
78
120
|
* For non-actionable dialogs (errors), show "OK" with countdown
|
|
79
121
|
*/
|
|
122
|
+
get DismissButtonText(): string;
|
|
123
|
+
/** @deprecated Use {@link DismissButtonText}. */
|
|
80
124
|
get dismissButtonText(): string;
|
|
81
125
|
/**
|
|
82
126
|
* Check if this dialog type should auto-dismiss
|
|
@@ -93,14 +137,20 @@ export declare class AppAccessDialogComponent implements OnDestroy {
|
|
|
93
137
|
/**
|
|
94
138
|
* Handle primary action (install/enable)
|
|
95
139
|
*/
|
|
140
|
+
OnPrimaryAction(): Promise<void>;
|
|
141
|
+
/** @deprecated Use {@link OnPrimaryAction}. */
|
|
96
142
|
onPrimaryAction(): Promise<void>;
|
|
97
143
|
/**
|
|
98
144
|
* Handle dismiss/redirect action
|
|
99
145
|
*/
|
|
146
|
+
OnDismiss(): void;
|
|
147
|
+
/** @deprecated Use {@link OnDismiss}. */
|
|
100
148
|
onDismiss(): void;
|
|
101
149
|
/**
|
|
102
150
|
* Mark processing as complete (called by parent after install/enable)
|
|
103
151
|
*/
|
|
152
|
+
CompleteProcessing(): void;
|
|
153
|
+
/** @deprecated Use {@link CompleteProcessing}. */
|
|
104
154
|
completeProcessing(): void;
|
|
105
155
|
/**
|
|
106
156
|
* Handle keyboard events for the dialog
|
|
@@ -109,6 +159,6 @@ export declare class AppAccessDialogComponent implements OnDestroy {
|
|
|
109
159
|
*/
|
|
110
160
|
handleKeyDown(event: KeyboardEvent): void;
|
|
111
161
|
static ɵfac: i0.ɵɵFactoryDeclaration<AppAccessDialogComponent, never>;
|
|
112
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AppAccessDialogComponent, "mj-app-access-dialog", never, { "visible": { "alias": "visible"; "required": false; }; }, { "visibleChange": "visibleChange"; "result": "result"; }, never, never, false, never>;
|
|
162
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AppAccessDialogComponent, "mj-app-access-dialog", never, { "Visible": { "alias": "Visible"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; }, { "VisibleChange": "VisibleChange"; "visibleChange": "visibleChange"; "Result": "Result"; "result": "result"; }, never, never, false, never>;
|
|
113
163
|
}
|
|
114
164
|
//# sourceMappingURL=app-access-dialog.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-access-dialog.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/shell/components/dialogs/app-access-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAgB,MAAM,eAAe,CAAC;;AAEnH;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACf,UAAU,GACV,WAAW,GACX,WAAW,GACX,UAAU,GACV,SAAS,GACT,cAAc,CAAC;AAEnB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,qBAMa,wBAAyB,YAAW,SAAS;
|
|
1
|
+
{"version":3,"file":"app-access-dialog.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/shell/components/dialogs/app-access-dialog.component.ts"],"names":[],"mappings":"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"}
|