@memberjunction/ng-explorer-core 6.2.0-edge.0 → 6.2.0-edge.2

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.
Files changed (190) hide show
  1. package/dist/app-routing.module.d.ts +23 -1
  2. package/dist/app-routing.module.d.ts.map +1 -1
  3. package/dist/app-routing.module.js +50 -14
  4. package/dist/app-routing.module.js.map +1 -1
  5. package/dist/generated/lazy-feature-config.d.ts +1 -1
  6. package/dist/generated/lazy-feature-config.d.ts.map +1 -1
  7. package/dist/generated/lazy-feature-config.js +12 -1
  8. package/dist/generated/lazy-feature-config.js.map +1 -1
  9. package/dist/lib/command-palette/command-palette.component.d.ts +7 -1
  10. package/dist/lib/command-palette/command-palette.component.d.ts.map +1 -1
  11. package/dist/lib/command-palette/command-palette.component.js +28 -14
  12. package/dist/lib/command-palette/command-palette.component.js.map +1 -1
  13. package/dist/lib/conversation-feedback/conversation-feedback.d.ts +103 -13
  14. package/dist/lib/conversation-feedback/conversation-feedback.d.ts.map +1 -1
  15. package/dist/lib/conversation-feedback/conversation-feedback.js +219 -67
  16. package/dist/lib/conversation-feedback/conversation-feedback.js.map +1 -1
  17. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts +64 -10
  18. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts.map +1 -1
  19. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +172 -66
  20. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js.map +1 -1
  21. package/dist/lib/generic/resource-container-component.d.ts +19 -5
  22. package/dist/lib/generic/resource-container-component.d.ts.map +1 -1
  23. package/dist/lib/generic/resource-container-component.js +43 -13
  24. package/dist/lib/generic/resource-container-component.js.map +1 -1
  25. package/dist/lib/guards/entities.guard.d.ts +4 -0
  26. package/dist/lib/guards/entities.guard.d.ts.map +1 -1
  27. package/dist/lib/guards/entities.guard.js +10 -2
  28. package/dist/lib/guards/entities.guard.js.map +1 -1
  29. package/dist/lib/identity-claims/claim-redeem.component.d.ts +4 -0
  30. package/dist/lib/identity-claims/claim-redeem.component.d.ts.map +1 -1
  31. package/dist/lib/identity-claims/claim-redeem.component.js +10 -2
  32. package/dist/lib/identity-claims/claim-redeem.component.js.map +1 -1
  33. package/dist/lib/oauth/oauth-callback.component.d.ts +4 -0
  34. package/dist/lib/oauth/oauth-callback.component.d.ts.map +1 -1
  35. package/dist/lib/oauth/oauth-callback.component.js +10 -2
  36. package/dist/lib/oauth/oauth-callback.component.js.map +1 -1
  37. package/dist/lib/profile/profile-dialog.component.d.ts.map +1 -1
  38. package/dist/lib/profile/profile-dialog.component.js +194 -191
  39. package/dist/lib/profile/profile-dialog.component.js.map +1 -1
  40. package/dist/lib/resource-wrappers/artifact-resource.component.d.ts +20 -2
  41. package/dist/lib/resource-wrappers/artifact-resource.component.d.ts.map +1 -1
  42. package/dist/lib/resource-wrappers/artifact-resource.component.js +33 -9
  43. package/dist/lib/resource-wrappers/artifact-resource.component.js.map +1 -1
  44. package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts +80 -10
  45. package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts.map +1 -1
  46. package/dist/lib/resource-wrappers/chat-collections-resource.component.js +168 -56
  47. package/dist/lib/resource-wrappers/chat-collections-resource.component.js.map +1 -1
  48. package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts +199 -25
  49. package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -1
  50. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +534 -182
  51. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
  52. package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts +2 -0
  53. package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts.map +1 -1
  54. package/dist/lib/resource-wrappers/chat-deeplink-params.js +5 -1
  55. package/dist/lib/resource-wrappers/chat-deeplink-params.js.map +1 -1
  56. package/dist/lib/resource-wrappers/chat-search-routing.d.ts +25 -0
  57. package/dist/lib/resource-wrappers/chat-search-routing.d.ts.map +1 -0
  58. package/dist/lib/resource-wrappers/chat-search-routing.js +24 -0
  59. package/dist/lib/resource-wrappers/chat-search-routing.js.map +1 -0
  60. package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts +14 -2
  61. package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts.map +1 -1
  62. package/dist/lib/resource-wrappers/chat-tasks-resource.component.js +32 -8
  63. package/dist/lib/resource-wrappers/chat-tasks-resource.component.js.map +1 -1
  64. package/dist/lib/resource-wrappers/compose-email-fallback.d.ts +46 -0
  65. package/dist/lib/resource-wrappers/compose-email-fallback.d.ts.map +1 -0
  66. package/dist/lib/resource-wrappers/compose-email-fallback.js +62 -0
  67. package/dist/lib/resource-wrappers/compose-email-fallback.js.map +1 -0
  68. package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts +54 -8
  69. package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
  70. package/dist/lib/resource-wrappers/dashboard-resource.component.js +138 -46
  71. package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
  72. package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts +223 -30
  73. package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts.map +1 -1
  74. package/dist/lib/resource-wrappers/livekit-room-resource.component.js +438 -118
  75. package/dist/lib/resource-wrappers/livekit-room-resource.component.js.map +1 -1
  76. package/dist/lib/resource-wrappers/search-results-resource.component.d.ts +7 -3
  77. package/dist/lib/resource-wrappers/search-results-resource.component.d.ts.map +1 -1
  78. package/dist/lib/resource-wrappers/search-results-resource.component.js +23 -15
  79. package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
  80. package/dist/lib/resource-wrappers/view-resource.component.d.ts +74 -11
  81. package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
  82. package/dist/lib/resource-wrappers/view-resource.component.js +214 -68
  83. package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
  84. package/dist/lib/services/server-connectivity.service.d.ts +9 -4
  85. package/dist/lib/services/server-connectivity.service.d.ts.map +1 -1
  86. package/dist/lib/services/server-connectivity.service.js +56 -12
  87. package/dist/lib/services/server-connectivity.service.js.map +1 -1
  88. package/dist/lib/services/startup-validation.service.d.ts +4 -0
  89. package/dist/lib/services/startup-validation.service.d.ts.map +1 -1
  90. package/dist/lib/services/startup-validation.service.js +10 -2
  91. package/dist/lib/services/startup-validation.service.js.map +1 -1
  92. package/dist/lib/services/system-validation.service.d.ts +13 -1
  93. package/dist/lib/services/system-validation.service.d.ts.map +1 -1
  94. package/dist/lib/services/system-validation.service.js +29 -5
  95. package/dist/lib/services/system-validation.service.js.map +1 -1
  96. package/dist/lib/shell/components/dialogs/app-access-dialog.component.d.ts +54 -4
  97. package/dist/lib/shell/components/dialogs/app-access-dialog.component.d.ts.map +1 -1
  98. package/dist/lib/shell/components/dialogs/app-access-dialog.component.js +130 -40
  99. package/dist/lib/shell/components/dialogs/app-access-dialog.component.js.map +1 -1
  100. package/dist/lib/shell/components/header/app-nav.component.d.ts +29 -1
  101. package/dist/lib/shell/components/header/app-nav.component.d.ts.map +1 -1
  102. package/dist/lib/shell/components/header/app-nav.component.js +56 -12
  103. package/dist/lib/shell/components/header/app-nav.component.js.map +1 -1
  104. package/dist/lib/shell/components/header/app-switcher.component.d.ts +33 -5
  105. package/dist/lib/shell/components/header/app-switcher.component.d.ts.map +1 -1
  106. package/dist/lib/shell/components/header/app-switcher.component.js +85 -29
  107. package/dist/lib/shell/components/header/app-switcher.component.js.map +1 -1
  108. package/dist/lib/shell/components/record-open/record-origin-crumb.component.js +1 -1
  109. package/dist/lib/shell/components/record-open/record-origin-crumb.component.js.map +1 -1
  110. package/dist/lib/shell/components/tabs/component-cache-manager.d.ts +50 -6
  111. package/dist/lib/shell/components/tabs/component-cache-manager.d.ts.map +1 -1
  112. package/dist/lib/shell/components/tabs/component-cache-manager.js +95 -22
  113. package/dist/lib/shell/components/tabs/component-cache-manager.js.map +1 -1
  114. package/dist/lib/shell/components/tabs/tab-container.component.d.ts +91 -9
  115. package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
  116. package/dist/lib/shell/components/tabs/tab-container.component.js +257 -101
  117. package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
  118. package/dist/lib/shell/loading-themes.d.ts +16 -12
  119. package/dist/lib/shell/loading-themes.d.ts.map +1 -1
  120. package/dist/lib/shell/loading-themes.js +145 -137
  121. package/dist/lib/shell/loading-themes.js.map +1 -1
  122. package/dist/lib/shell/readiness-beacon.d.ts +2 -0
  123. package/dist/lib/shell/readiness-beacon.d.ts.map +1 -1
  124. package/dist/lib/shell/readiness-beacon.js +5 -1
  125. package/dist/lib/shell/readiness-beacon.js.map +1 -1
  126. package/dist/lib/shell/services/about-dialog.service.d.ts +6 -0
  127. package/dist/lib/shell/services/about-dialog.service.d.ts.map +1 -1
  128. package/dist/lib/shell/services/about-dialog.service.js +16 -4
  129. package/dist/lib/shell/services/about-dialog.service.js.map +1 -1
  130. package/dist/lib/shell/services/profile-dialog.service.d.ts +6 -0
  131. package/dist/lib/shell/services/profile-dialog.service.d.ts.map +1 -1
  132. package/dist/lib/shell/services/profile-dialog.service.js +16 -4
  133. package/dist/lib/shell/services/profile-dialog.service.js.map +1 -1
  134. package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts +6 -0
  135. package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts.map +1 -1
  136. package/dist/lib/shell/services/user-sharing-center-dialog.service.js +15 -3
  137. package/dist/lib/shell/services/user-sharing-center-dialog.service.js.map +1 -1
  138. package/dist/lib/shell/shell.component.d.ts +264 -39
  139. package/dist/lib/shell/shell.component.d.ts.map +1 -1
  140. package/dist/lib/shell/shell.component.js +697 -294
  141. package/dist/lib/shell/shell.component.js.map +1 -1
  142. package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts +64 -8
  143. package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts.map +1 -1
  144. package/dist/lib/single-dashboard/Components/add-item/add-item.component.js +129 -37
  145. package/dist/lib/single-dashboard/Components/add-item/add-item.component.js.map +1 -1
  146. package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.d.ts +26 -2
  147. package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.d.ts.map +1 -1
  148. package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js +48 -10
  149. package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js.map +1 -1
  150. package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.d.ts +84 -6
  151. package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.d.ts.map +1 -1
  152. package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js +133 -29
  153. package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js.map +1 -1
  154. package/dist/lib/single-dashboard/single-dashboard.component.d.ts +173 -23
  155. package/dist/lib/single-dashboard/single-dashboard.component.d.ts.map +1 -1
  156. package/dist/lib/single-dashboard/single-dashboard.component.js +383 -109
  157. package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
  158. package/dist/lib/single-list-detail/single-list-detail.component.d.ts +383 -55
  159. package/dist/lib/single-list-detail/single-list-detail.component.d.ts.map +1 -1
  160. package/dist/lib/single-list-detail/single-list-detail.component.js +962 -326
  161. package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
  162. package/dist/lib/single-query/single-query.component.d.ts +22 -2
  163. package/dist/lib/single-query/single-query.component.d.ts.map +1 -1
  164. package/dist/lib/single-query/single-query.component.js +40 -10
  165. package/dist/lib/single-query/single-query.component.js.map +1 -1
  166. package/dist/lib/single-record/single-record.component.d.ts +41 -3
  167. package/dist/lib/single-record/single-record.component.d.ts.map +1 -1
  168. package/dist/lib/single-record/single-record.component.js +71 -11
  169. package/dist/lib/single-record/single-record.component.js.map +1 -1
  170. package/dist/lib/single-search-result/single-search-result.component.d.ts +23 -3
  171. package/dist/lib/single-search-result/single-search-result.component.d.ts.map +1 -1
  172. package/dist/lib/single-search-result/single-search-result.component.js +42 -12
  173. package/dist/lib/single-search-result/single-search-result.component.js.map +1 -1
  174. package/dist/lib/system-validation/system-validation-banner.component.d.ts +12 -2
  175. package/dist/lib/system-validation/system-validation-banner.component.d.ts.map +1 -1
  176. package/dist/lib/system-validation/system-validation-banner.component.js +25 -5
  177. package/dist/lib/system-validation/system-validation-banner.component.js.map +1 -1
  178. package/dist/lib/user-menu/user-menu.types.d.ts +4 -0
  179. package/dist/lib/user-menu/user-menu.types.d.ts.map +1 -1
  180. package/dist/lib/user-menu/user-menu.types.js +10 -2
  181. package/dist/lib/user-menu/user-menu.types.js.map +1 -1
  182. package/dist/lib/user-notifications/user-notifications.component.d.ts +59 -7
  183. package/dist/lib/user-notifications/user-notifications.component.d.ts.map +1 -1
  184. package/dist/lib/user-notifications/user-notifications.component.js +151 -47
  185. package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
  186. package/dist/lib/user-profile/user-profile.component.d.ts +3 -2
  187. package/dist/lib/user-profile/user-profile.component.d.ts.map +1 -1
  188. package/dist/lib/user-profile/user-profile.component.js +5 -4
  189. package/dist/lib/user-profile/user-profile.component.js.map +1 -1
  190. package/package.json +52 -52
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-preferences-dialog.component.js","sourceRoot":"","sources":["../../../src/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.ts","../../../src/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { LogError, Metadata, RunView } from '@memberjunction/core';\nimport { MJDashboardEntityExtended, MJDashboardUserPreferenceEntity, MJApplicationEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nexport interface DashboardPreferencesResult {\n saved: boolean;\n preferences?: MJDashboardUserPreferenceEntity[];\n}\n\n@Component({\n standalone: false,\n selector: 'mj-dashboard-preferences-dialog',\n templateUrl: './dashboard-preferences-dialog.component.html',\n styleUrls: ['./dashboard-preferences-dialog.component.css']\n})\nexport class DashboardPreferencesDialogComponent extends BaseAngularComponent implements OnInit {\n @Input() public applicationId: string | null = null;\n @Input() public scope: 'Global' | 'App' = 'Global';\n @Output() public result = new EventEmitter<DashboardPreferencesResult>();\n\n public availableDashboards: MJDashboardEntityExtended[] = [];\n public configuredDashboards: MJDashboardEntityExtended[] = [];\n public applicationName: string = '';\n public loading: boolean = true;\n public saving: boolean = false;\n public error: string | null = null;\n public hasChanges: boolean = false;\n public isSysAdmin: boolean = false;\n public preferenceMode: 'personal' | 'system' = 'personal';\n\n private originalConfiguredIds: string[] = [];\n private currentUserPreferences: MJDashboardUserPreferenceEntity[] = [];\n private allAvailableDashboards: MJDashboardEntityExtended[] = [];\n\n async ngOnInit(): Promise<void> {\n try {\n await this.loadData();\n } catch (error) {\n LogError('Error initializing dashboard preferences dialog', null, error);\n this.error = 'Failed to load dashboard preferences';\n } finally {\n this.loading = false;\n }\n }\n\n private async loadData(): Promise<void> {\n const md = this.ProviderToUse;\n \n // Check if current user is sysadmin\n this.isSysAdmin = md.CurrentUser.Type.trim().toLowerCase() === 'owner';\n console.log('User is sysadmin:', this.isSysAdmin);\n \n // Default to personal preferences for all users (including sysadmin)\n this.preferenceMode = 'personal';\n \n // Load application name if we're in app scope\n if (this.scope === 'App' && this.applicationId) {\n await this.loadApplicationName();\n }\n\n // Get cached dashboards from MJ_Metadata dataset\n const ds = await md.GetAndCacheDatasetByName(\"MJ_Metadata\");\n if (!ds || !ds.Success) {\n throw new Error(ds?.Status || 'Failed to load metadata dataset');\n }\n\n const dashList = ds.Results.find(r => r.Code === 'Dashboards');\n if (!dashList) {\n throw new Error('Dashboards dataset not found');\n }\n\n // Filter dashboards by scope\n const appFilter = this.applicationId ? ` AND ApplicationID='${this.applicationId}'` : ' AND ApplicationID IS NULL';\n this.allAvailableDashboards = dashList.Results.filter((d: MJDashboardEntityExtended) => {\n if (this.scope === 'Global') {\n return d.Scope === 'Global' && !d.ApplicationID;\n } else {\n return UUIDsEqual(d.ApplicationID, this.applicationId) // ignore scope for dashboards that match app id, sometimes they have a global scope as they can be shown globally as well as app specific\n }\n });\n\n // Load current user preferences\n await this.loadCurrentPreferences();\n \n // Split dashboards into available and configured\n this.splitDashboards();\n \n // Store original state to detect changes\n this.originalConfiguredIds = this.configuredDashboards.map(d => d.ID);\n }\n\n private async loadApplicationName(): Promise<void> {\n if (!this.applicationId) return;\n \n try {\n const md = this.ProviderToUse;\n const ds = await md.GetAndCacheDatasetByName(\"MJ_Metadata\");\n const appList = ds.Results.find(r => r.Code === 'Applications');\n if (appList) {\n const app = appList.Results.find((a: MJApplicationEntity) => UUIDsEqual(a.ID, this.applicationId));\n this.applicationName = app?.Name || 'Unknown Application';\n }\n } catch (error) {\n LogError('Error loading application name', null, error);\n this.applicationName = 'Unknown Application';\n }\n }\n\n private async loadCurrentPreferences(): Promise<void> {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const md = this.ProviderToUse;\n \n const appFilter = this.applicationId ? ` AND ApplicationID='${this.applicationId}'` : '';\n const baseCondition = `Scope='${this.scope}'${appFilter}`;\n \n let filter: string;\n \n if (this.isSysAdmin && this.scope === 'Global' && this.preferenceMode === 'system') {\n // Load system defaults only (UserID IS NULL)\n filter = `UserID IS NULL AND ${baseCondition}`;\n } else {\n // Load personal user preferences (including for sysadmin when in personal mode)\n // For personal mode, we ONLY load the user's specific preferences, no fallback to system defaults\n // This allows sysadmin to see their actual personal preferences vs system defaults\n filter = `UserID='${md.CurrentUser.ID}' AND ${baseCondition}`;\n }\n\n console.log('Loading preferences with filter:', filter);\n\n const prefsResult = await rv.RunView<MJDashboardUserPreferenceEntity>({\n EntityName: 'MJ: Dashboard User Preferences',\n ExtraFilter: filter,\n ResultType: 'entity_object',\n OrderBy: 'DisplayOrder',\n });\n\n this.currentUserPreferences = prefsResult?.Results || [];\n console.log('Loaded preferences:', this.currentUserPreferences.length);\n }\n\n private splitDashboards(): void {\n const configuredIds = new Set(this.currentUserPreferences.map(p => p.DashboardID));\n \n // Get configured dashboards in the right order\n this.configuredDashboards = this.currentUserPreferences\n .map(pref => this.allAvailableDashboards.find(d => UUIDsEqual(d.ID, pref.DashboardID)))\n .filter((d): d is MJDashboardEntityExtended => d !== undefined);\n \n // Get available dashboards (not configured)\n this.availableDashboards = this.allAvailableDashboards\n .filter(d => !configuredIds.has(d.ID))\n .sort((a, b) => a.Name.localeCompare(b.Name));\n }\n\n public onDrop(event: CdkDragDrop<MJDashboardEntityExtended[]>): void {\n try {\n if (event.previousContainer === event.container) {\n // Reordering within the same list\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n } else {\n // Moving between lists\n transferArrayItem(\n event.previousContainer.data,\n event.container.data,\n event.previousIndex,\n event.currentIndex\n );\n \n // If moving to configured dashboards, sort the available list\n if (event.container.data === this.configuredDashboards) {\n this.availableDashboards.sort((a, b) => a.Name.localeCompare(b.Name));\n }\n }\n \n this.checkForChanges();\n } catch (error) {\n LogError('Error in drag drop operation', null, error);\n this.error = 'Error reordering dashboards. Please try again.';\n \n // Clear error after 3 seconds\n setTimeout(() => {\n this.error = null;\n }, 3000);\n }\n }\n\n public addDashboard(dashboard: MJDashboardEntityExtended): void {\n try {\n const index = this.availableDashboards.findIndex(d => UUIDsEqual(d.ID, dashboard.ID));\n if (index !== -1) {\n this.availableDashboards.splice(index, 1);\n this.configuredDashboards.push(dashboard);\n this.checkForChanges();\n }\n } catch (error) {\n LogError('Error adding dashboard', null, error);\n this.error = 'Error adding dashboard. Please try again.';\n \n // Clear error after 3 seconds\n setTimeout(() => {\n this.error = null;\n }, 3000);\n }\n }\n\n public removeDashboard(dashboard: MJDashboardEntityExtended): void {\n try {\n const index = this.configuredDashboards.findIndex(d => UUIDsEqual(d.ID, dashboard.ID));\n if (index !== -1) {\n this.configuredDashboards.splice(index, 1);\n this.availableDashboards.push(dashboard);\n this.availableDashboards.sort((a, b) => a.Name.localeCompare(b.Name));\n this.checkForChanges();\n }\n } catch (error) {\n LogError('Error removing dashboard', null, error);\n this.error = 'Error removing dashboard. Please try again.';\n \n // Clear error after 3 seconds\n setTimeout(() => {\n this.error = null;\n }, 3000);\n }\n }\n\n public async onPreferenceModeChange(): Promise<void> {\n try {\n this.loading = true;\n this.error = null;\n \n // Reload preferences with new mode\n await this.loadCurrentPreferences();\n this.splitDashboards();\n this.originalConfiguredIds = this.configuredDashboards.map(d => d.ID);\n this.hasChanges = false;\n \n } catch (error) {\n LogError('Error changing preference mode', null, error);\n this.error = 'Error loading preferences. Please try again.';\n } finally {\n this.loading = false;\n }\n }\n\n private checkForChanges(): void {\n try {\n const currentConfiguredIds = this.configuredDashboards.map(d => d.ID);\n \n // Check if the order or selection has changed\n this.hasChanges = currentConfiguredIds.length !== this.originalConfiguredIds.length ||\n currentConfiguredIds.some((id, index) => id !== this.originalConfiguredIds[index]);\n \n // Debug logging\n console.log('Dashboard preferences change check:', {\n original: this.originalConfiguredIds,\n current: currentConfiguredIds,\n hasChanges: this.hasChanges\n });\n } catch (error) {\n LogError('Error checking for changes', null, error);\n this.hasChanges = false;\n }\n }\n\n public async onSave(): Promise<void> {\n if (this.saving || !this.hasChanges) {\n console.log('Save cancelled:', { saving: this.saving, hasChanges: this.hasChanges });\n return;\n }\n\n try {\n this.saving = true;\n console.log('Starting save process with configured dashboards:', this.configuredDashboards.map(d => ({ id: d.ID, name: d.Name })));\n \n const md = this.ProviderToUse;\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n\n // Get existing preferences for this scope\n const baseCondition = this.scope === 'Global' \n ? `Scope='Global' AND ApplicationID IS NULL`\n : `Scope='App' AND ApplicationID='${this.applicationId}'`;\n \n let userFilter: string;\n \n if (this.isSysAdmin && this.scope === 'Global' && this.preferenceMode === 'system') {\n // Managing system defaults\n userFilter = `UserID IS NULL AND ${baseCondition}`;\n } else {\n // Managing personal preferences\n userFilter = `UserID='${md.CurrentUser.ID}' AND ${baseCondition}`;\n }\n \n console.log('Loading existing preferences with filter:', userFilter);\n \n const existingPrefs = await rv.RunView<MJDashboardUserPreferenceEntity>({\n EntityName: 'MJ: Dashboard User Preferences',\n ExtraFilter: userFilter,\n ResultType: 'entity_object',\n });\n\n const existingPreferences = existingPrefs?.Results || [];\n console.log('Found existing preferences:', existingPreferences.length);\n\n // Create maps for efficient lookups\n const existingByDashboardId = new Map<string, MJDashboardUserPreferenceEntity>();\n existingPreferences.forEach(pref => {\n existingByDashboardId.set(pref.DashboardID, pref);\n });\n\n const configuredDashboardIds = new Set(this.configuredDashboards.map(d => d.ID));\n\n // Step 1: Delete preferences that are no longer configured\n const prefsToDelete = existingPreferences.filter(pref => !configuredDashboardIds.has(pref.DashboardID));\n console.log('Preferences to delete:', prefsToDelete.length);\n \n for (const pref of prefsToDelete) {\n console.log('Deleting preference for dashboard:', pref.DashboardID);\n if (!await pref.Delete()) {\n const errorMsg = pref.LatestResult?.Error || pref.LatestResult?.Message || 'Unknown error';\n throw new Error(`Failed to delete preference: ${errorMsg}`);\n }\n }\n\n // Step 2: Update existing preferences or create new ones\n const newPreferences: MJDashboardUserPreferenceEntity[] = [];\n \n for (let i = 0; i < this.configuredDashboards.length; i++) {\n const dashboard = this.configuredDashboards[i];\n const newDisplayOrder = i + 1;\n \n let prefEntity = existingByDashboardId.get(dashboard.ID);\n \n if (prefEntity) {\n // Update existing preference\n console.log(`Updating existing preference for dashboard ${dashboard.Name}, new order: ${newDisplayOrder}`);\n prefEntity.DisplayOrder = newDisplayOrder;\n \n if (!await prefEntity.Save()) {\n const errorMsg = prefEntity.LatestResult?.Error || prefEntity.LatestResult?.Message || 'Unknown error';\n throw new Error(`Failed to update preference for dashboard ${dashboard.Name}: ${errorMsg}`);\n }\n } else {\n // Create new preference\n console.log(`Creating new preference for dashboard ${dashboard.Name}, order: ${newDisplayOrder}`);\n prefEntity = await md.GetEntityObject<MJDashboardUserPreferenceEntity>('MJ: Dashboard User Preferences');\n \n // Set UserID based on preference mode\n if (this.isSysAdmin && this.scope === 'Global' && this.preferenceMode === 'system') {\n prefEntity.UserID = null; // System default\n } else {\n prefEntity.UserID = md.CurrentUser.ID; // Personal preference\n }\n \n prefEntity.DashboardID = dashboard.ID;\n prefEntity.DisplayOrder = newDisplayOrder;\n prefEntity.Scope = this.scope;\n prefEntity.ApplicationID = this.applicationId;\n\n console.log('Creating preference entity:', {\n UserID: prefEntity.UserID,\n DashboardID: prefEntity.DashboardID,\n DisplayOrder: prefEntity.DisplayOrder,\n Scope: prefEntity.Scope,\n ApplicationID: prefEntity.ApplicationID\n });\n\n if (!await prefEntity.Save()) {\n const errorMsg = prefEntity.LatestResult?.Error || prefEntity.LatestResult?.Message || 'Unknown error';\n throw new Error(`Failed to create preference for dashboard ${dashboard.Name}: ${errorMsg}`);\n }\n }\n \n newPreferences.push(prefEntity);\n }\n\n console.log('Successfully processed', newPreferences.length, 'preferences');\n\n // Emit success result\n this.result.emit({\n saved: true,\n preferences: newPreferences\n });\n\n } catch (error) {\n console.error('Save error:', error);\n LogError('Error saving dashboard preferences', null, error);\n this.error = `Failed to save preferences: ${error instanceof Error ? error.message : 'Unknown error'}`;\n \n // Clear error after 5 seconds\n setTimeout(() => {\n this.error = null;\n }, 5000);\n } finally {\n this.saving = false;\n }\n }\n\n public onCancel(): void {\n this.result.emit({ saved: false });\n }\n}","<mj-dialog [Visible]=\"true\" Title=\"Dashboard Preferences\"\n [Width]=\"800\"\n [Height]=\"600\"\n [MinWidth]=\"600\"\n (Close)=\"onCancel()\">\n<div class=\"dashboard-preferences-dialog\">\n <div class=\"dialog-header\">\n <h3><i class=\"fa-solid fa-sliders\"></i> Dashboard Preferences</h3>\n <p class=\"scope-indicator\">\n @if (scope === 'Global') {\n <i class=\"fa-solid fa-globe\"></i> Global Scope\n } @else {\n <i class=\"fa-solid fa-layer-group\"></i> Application: {{ applicationName }}\n }\n </p>\n @if (isSysAdmin && scope === 'Global') {\n <div class=\"preference-mode-selector\">\n <label>\n <input type=\"radio\"\n name=\"preferenceMode\"\n value=\"personal\"\n [(ngModel)]=\"preferenceMode\"\n (change)=\"onPreferenceModeChange()\">\n Personal Preferences\n </label>\n <label>\n <input type=\"radio\"\n name=\"preferenceMode\"\n value=\"system\"\n [(ngModel)]=\"preferenceMode\"\n (change)=\"onPreferenceModeChange()\">\n System Defaults\n </label>\n </div>\n }\n </div>\n\n <div class=\"dialog-content\">\n @if (loading) {\n <div class=\"loading-overlay\">\n <mj-loading text=\"Loading preferences...\" size=\"large\"></mj-loading>\n </div>\n }\n\n @if (error) {\n <mj-empty-state\n Variant=\"error\"\n Size=\"compact\"\n Icon=\"fa-solid fa-triangle-exclamation\"\n [Title]=\"error\" />\n }\n\n @if (!loading && !error) {\n <div class=\"preferences-panels\">\n <!-- Available Dashboards Panel -->\n <div class=\"panel available-panel\">\n <h4><i class=\"fa-solid fa-list\"></i> Available Dashboards</h4>\n <div class=\"dashboard-list\"\n cdkDropList\n #availableList=\"cdkDropList\"\n [cdkDropListData]=\"availableDashboards\"\n [cdkDropListConnectedTo]=\"[configuredList]\"\n (cdkDropListDropped)=\"onDrop($event)\">\n\n @if (availableDashboards.length === 0) {\n <mj-empty-state\n Variant=\"success\"\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-check\"\n Title=\"All dashboards are configured\" />\n }\n\n @for (dashboard of availableDashboards; track dashboard.ID) {\n <div class=\"dashboard-item available-item\"\n cdkDrag\n [cdkDragData]=\"dashboard\">\n <div class=\"dashboard-item-content\">\n <i class=\"fa-solid fa-grip-vertical drag-handle\"></i>\n <div class=\"dashboard-info\">\n <span class=\"dashboard-name\">{{ dashboard.Name }}</span>\n @if (dashboard.Description) {\n <span class=\"dashboard-description\">{{ dashboard.Description }}</span>\n }\n </div>\n <button type=\"button\"\n class=\"add-button\"\n (click)=\"addDashboard(dashboard)\"\n title=\"Add to configured dashboards\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Configured Dashboards Panel -->\n <div class=\"panel configured-panel\">\n <h4><i class=\"fa-solid fa-list-ol\"></i> Configured Dashboards</h4>\n <div class=\"dashboard-list\"\n cdkDropList\n #configuredList=\"cdkDropList\"\n [cdkDropListData]=\"configuredDashboards\"\n [cdkDropListConnectedTo]=\"[availableList]\"\n (cdkDropListDropped)=\"onDrop($event)\">\n\n @if (configuredDashboards.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No dashboards configured\" />\n }\n\n @for (dashboard of configuredDashboards; track dashboard.ID; let i = $index) {\n <div class=\"dashboard-item configured-item\"\n cdkDrag\n [cdkDragData]=\"dashboard\">\n <div class=\"dashboard-item-content\">\n <i class=\"fa-solid fa-grip-vertical drag-handle\"></i>\n <span class=\"order-number\">{{ i + 1 }}</span>\n <div class=\"dashboard-info\">\n <span class=\"dashboard-name\">{{ dashboard.Name }}</span>\n @if (dashboard.Description) {\n <span class=\"dashboard-description\">{{ dashboard.Description }}</span>\n }\n </div>\n <button type=\"button\"\n class=\"remove-button\"\n (click)=\"removeDashboard(dashboard)\"\n title=\"Remove from configured dashboards\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n\n <mj-dialog-actions>\n <button type=\"button\"\n class=\"btn btn-secondary\"\n (click)=\"onCancel()\">\n <i class=\"fa-solid fa-times\"></i> Cancel\n </button>\n <button type=\"button\"\n class=\"btn btn-primary\"\n [disabled]=\"!hasChanges || saving\"\n (click)=\"onSave()\">\n @if (saving) {\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n Saving...\n } @else {\n <i class=\"fa-solid fa-check\"></i> Save Changes\n }\n </button>\n </mj-dialog-actions>\n</div>\n</mj-dialog>\n"]}
1
+ {"version":3,"file":"dashboard-preferences-dialog.component.js","sourceRoot":"","sources":["../../../src/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.ts","../../../src/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { LogError, Metadata, RunView } from '@memberjunction/core';\nimport { MJDashboardEntityExtended, MJDashboardUserPreferenceEntity, MJApplicationEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nexport interface DashboardPreferencesResult {\n saved: boolean;\n preferences?: MJDashboardUserPreferenceEntity[];\n}\n\n@Component({\n standalone: false,\n selector: 'mj-dashboard-preferences-dialog',\n templateUrl: './dashboard-preferences-dialog.component.html',\n styleUrls: ['./dashboard-preferences-dialog.component.css']\n})\nexport class DashboardPreferencesDialogComponent extends BaseAngularComponent implements OnInit {\n @Input() public ApplicationId: string | null = null;\n\n /** @deprecated Use {@link ApplicationId}. */\n @Input() public set applicationId(value: string | null) {\n this.ApplicationId = value;\n }\n /** @deprecated Use {@link ApplicationId}. */\n public get applicationId(): string | null {\n return this.ApplicationId;\n }\n @Input() public Scope: 'Global' | 'App' = 'Global';\n\n /** @deprecated Use {@link Scope}. */\n @Input() public set scope(value: 'Global' | 'App') {\n this.Scope = value;\n }\n /** @deprecated Use {@link Scope}. */\n public get scope(): 'Global' | 'App' {\n return this.Scope;\n }\n @Output() public Result = new EventEmitter<DashboardPreferencesResult>();\n\n /**\n * @deprecated Use {@link Result}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (result) keeps working. Must stay AFTER Result: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() public result = this.Result;\n\n public AvailableDashboards: MJDashboardEntityExtended[] = [];\n\n /** @deprecated Use {@link AvailableDashboards}. */\n public get availableDashboards(): MJDashboardEntityExtended[] {\n return this.AvailableDashboards;\n }\n /** @deprecated Use {@link AvailableDashboards}. */\n public set availableDashboards(value: MJDashboardEntityExtended[]) {\n this.AvailableDashboards = value;\n }\n public ConfiguredDashboards: MJDashboardEntityExtended[] = [];\n\n /** @deprecated Use {@link ConfiguredDashboards}. */\n public get configuredDashboards(): MJDashboardEntityExtended[] {\n return this.ConfiguredDashboards;\n }\n /** @deprecated Use {@link ConfiguredDashboards}. */\n public set configuredDashboards(value: MJDashboardEntityExtended[]) {\n this.ConfiguredDashboards = value;\n }\n public ApplicationName: string = '';\n\n /** @deprecated Use {@link ApplicationName}. */\n public get applicationName(): string {\n return this.ApplicationName;\n }\n /** @deprecated Use {@link ApplicationName}. */\n public set applicationName(value: string) {\n this.ApplicationName = value;\n }\n public Loading: boolean = true;\n\n /** @deprecated Use {@link Loading}. */\n public get loading(): boolean {\n return this.Loading;\n }\n /** @deprecated Use {@link Loading}. */\n public set loading(value: boolean) {\n this.Loading = value;\n }\n public saving: boolean = false;\n public error: string | null = null;\n public HasChanges: boolean = false;\n\n /** @deprecated Use {@link HasChanges}. */\n public get hasChanges(): boolean {\n return this.HasChanges;\n }\n /** @deprecated Use {@link HasChanges}. */\n public set hasChanges(value: boolean) {\n this.HasChanges = value;\n }\n public IsSysAdmin: boolean = false;\n\n /** @deprecated Use {@link IsSysAdmin}. */\n public get isSysAdmin(): boolean {\n return this.IsSysAdmin;\n }\n /** @deprecated Use {@link IsSysAdmin}. */\n public set isSysAdmin(value: boolean) {\n this.IsSysAdmin = value;\n }\n public PreferenceMode: 'personal' | 'system' = 'personal';\n\n /** @deprecated Use {@link PreferenceMode}. */\n public get preferenceMode(): 'personal' | 'system' {\n return this.PreferenceMode;\n }\n /** @deprecated Use {@link PreferenceMode}. */\n public set preferenceMode(value: 'personal' | 'system') {\n this.PreferenceMode = value;\n }\n\n private originalConfiguredIds: string[] = [];\n private currentUserPreferences: MJDashboardUserPreferenceEntity[] = [];\n private allAvailableDashboards: MJDashboardEntityExtended[] = [];\n\n async ngOnInit(): Promise<void> {\n try {\n await this.loadData();\n } catch (error) {\n LogError('Error initializing dashboard preferences dialog', null, error);\n this.error = 'Failed to load dashboard preferences';\n } finally {\n this.Loading = false;\n }\n }\n\n private async loadData(): Promise<void> {\n const md = this.ProviderToUse;\n \n // Check if current user is sysadmin\n this.IsSysAdmin = md.CurrentUser.Type.trim().toLowerCase() === 'owner';\n console.log('User is sysadmin:', this.IsSysAdmin);\n \n // Default to personal preferences for all users (including sysadmin)\n this.PreferenceMode = 'personal';\n \n // Load application name if we're in app scope\n if (this.Scope === 'App' && this.ApplicationId) {\n await this.loadApplicationName();\n }\n\n // Get cached dashboards from MJ_Metadata dataset\n const ds = await md.GetAndCacheDatasetByName(\"MJ_Metadata\");\n if (!ds || !ds.Success) {\n throw new Error(ds?.Status || 'Failed to load metadata dataset');\n }\n\n const dashList = ds.Results.find(r => r.Code === 'Dashboards');\n if (!dashList) {\n throw new Error('Dashboards dataset not found');\n }\n\n // Filter dashboards by scope\n const appFilter = this.ApplicationId ? ` AND ApplicationID='${this.ApplicationId}'` : ' AND ApplicationID IS NULL';\n this.allAvailableDashboards = dashList.Results.filter((d: MJDashboardEntityExtended) => {\n if (this.Scope === 'Global') {\n return d.Scope === 'Global' && !d.ApplicationID;\n } else {\n return UUIDsEqual(d.ApplicationID, this.ApplicationId) // ignore scope for dashboards that match app id, sometimes they have a global scope as they can be shown globally as well as app specific\n }\n });\n\n // Load current user preferences\n await this.loadCurrentPreferences();\n \n // Split dashboards into available and configured\n this.splitDashboards();\n \n // Store original state to detect changes\n this.originalConfiguredIds = this.ConfiguredDashboards.map(d => d.ID);\n }\n\n private async loadApplicationName(): Promise<void> {\n if (!this.ApplicationId) return;\n \n try {\n const md = this.ProviderToUse;\n const ds = await md.GetAndCacheDatasetByName(\"MJ_Metadata\");\n const appList = ds.Results.find(r => r.Code === 'Applications');\n if (appList) {\n const app = appList.Results.find((a: MJApplicationEntity) => UUIDsEqual(a.ID, this.ApplicationId));\n this.ApplicationName = app?.Name || 'Unknown Application';\n }\n } catch (error) {\n LogError('Error loading application name', null, error);\n this.ApplicationName = 'Unknown Application';\n }\n }\n\n private async loadCurrentPreferences(): Promise<void> {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const md = this.ProviderToUse;\n \n const appFilter = this.ApplicationId ? ` AND ApplicationID='${this.ApplicationId}'` : '';\n const baseCondition = `Scope='${this.Scope}'${appFilter}`;\n \n let filter: string;\n \n if (this.IsSysAdmin && this.Scope === 'Global' && this.PreferenceMode === 'system') {\n // Load system defaults only (UserID IS NULL)\n filter = `UserID IS NULL AND ${baseCondition}`;\n } else {\n // Load personal user preferences (including for sysadmin when in personal mode)\n // For personal mode, we ONLY load the user's specific preferences, no fallback to system defaults\n // This allows sysadmin to see their actual personal preferences vs system defaults\n filter = `UserID='${md.CurrentUser.ID}' AND ${baseCondition}`;\n }\n\n console.log('Loading preferences with filter:', filter);\n\n const prefsResult = await rv.RunView<MJDashboardUserPreferenceEntity>({\n EntityName: 'MJ: Dashboard User Preferences',\n ExtraFilter: filter,\n ResultType: 'entity_object',\n OrderBy: 'DisplayOrder',\n });\n\n this.currentUserPreferences = prefsResult?.Results || [];\n console.log('Loaded preferences:', this.currentUserPreferences.length);\n }\n\n private splitDashboards(): void {\n const configuredIds = new Set(this.currentUserPreferences.map(p => p.DashboardID));\n \n // Get configured dashboards in the right order\n this.ConfiguredDashboards = this.currentUserPreferences\n .map(pref => this.allAvailableDashboards.find(d => UUIDsEqual(d.ID, pref.DashboardID)))\n .filter((d): d is MJDashboardEntityExtended => d !== undefined);\n \n // Get available dashboards (not configured)\n this.AvailableDashboards = this.allAvailableDashboards\n .filter(d => !configuredIds.has(d.ID))\n .sort((a, b) => a.Name.localeCompare(b.Name));\n }\n\n public OnDrop(event: CdkDragDrop<MJDashboardEntityExtended[]>): void {\n try {\n if (event.previousContainer === event.container) {\n // Reordering within the same list\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n } else {\n // Moving between lists\n transferArrayItem(\n event.previousContainer.data,\n event.container.data,\n event.previousIndex,\n event.currentIndex\n );\n \n // If moving to configured dashboards, sort the available list\n if (event.container.data === this.ConfiguredDashboards) {\n this.AvailableDashboards.sort((a, b) => a.Name.localeCompare(b.Name));\n }\n }\n \n this.checkForChanges();\n } catch (error) {\n LogError('Error in drag drop operation', null, error);\n this.error = 'Error reordering dashboards. Please try again.';\n \n // Clear error after 3 seconds\n setTimeout(() => {\n this.error = null;\n }, 3000);\n }\n }\n\n /** @deprecated Use {@link OnDrop}. */\n public onDrop(event: CdkDragDrop<MJDashboardEntityExtended[]>): void {\n return this.OnDrop(event);\n }\n\n public AddDashboard(dashboard: MJDashboardEntityExtended): void {\n try {\n const index = this.AvailableDashboards.findIndex(d => UUIDsEqual(d.ID, dashboard.ID));\n if (index !== -1) {\n this.AvailableDashboards.splice(index, 1);\n this.ConfiguredDashboards.push(dashboard);\n this.checkForChanges();\n }\n } catch (error) {\n LogError('Error adding dashboard', null, error);\n this.error = 'Error adding dashboard. Please try again.';\n \n // Clear error after 3 seconds\n setTimeout(() => {\n this.error = null;\n }, 3000);\n }\n }\n\n /** @deprecated Use {@link AddDashboard}. */\n public addDashboard(dashboard: MJDashboardEntityExtended): void {\n return this.AddDashboard(dashboard);\n }\n\n public RemoveDashboard(dashboard: MJDashboardEntityExtended): void {\n try {\n const index = this.ConfiguredDashboards.findIndex(d => UUIDsEqual(d.ID, dashboard.ID));\n if (index !== -1) {\n this.ConfiguredDashboards.splice(index, 1);\n this.AvailableDashboards.push(dashboard);\n this.AvailableDashboards.sort((a, b) => a.Name.localeCompare(b.Name));\n this.checkForChanges();\n }\n } catch (error) {\n LogError('Error removing dashboard', null, error);\n this.error = 'Error removing dashboard. Please try again.';\n \n // Clear error after 3 seconds\n setTimeout(() => {\n this.error = null;\n }, 3000);\n }\n }\n\n /** @deprecated Use {@link RemoveDashboard}. */\n public removeDashboard(dashboard: MJDashboardEntityExtended): void {\n return this.RemoveDashboard(dashboard);\n }\n\n public async OnPreferenceModeChange(): Promise<void> {\n try {\n this.Loading = true;\n this.error = null;\n \n // Reload preferences with new mode\n await this.loadCurrentPreferences();\n this.splitDashboards();\n this.originalConfiguredIds = this.ConfiguredDashboards.map(d => d.ID);\n this.HasChanges = false;\n \n } catch (error) {\n LogError('Error changing preference mode', null, error);\n this.error = 'Error loading preferences. Please try again.';\n } finally {\n this.Loading = false;\n }\n }\n\n /** @deprecated Use {@link OnPreferenceModeChange}. */\n public async onPreferenceModeChange(): Promise<void> {\n return this.OnPreferenceModeChange();\n }\n\n private checkForChanges(): void {\n try {\n const currentConfiguredIds = this.ConfiguredDashboards.map(d => d.ID);\n \n // Check if the order or selection has changed\n this.HasChanges = currentConfiguredIds.length !== this.originalConfiguredIds.length ||\n currentConfiguredIds.some((id, index) => id !== this.originalConfiguredIds[index]);\n \n // Debug logging\n console.log('Dashboard preferences change check:', {\n original: this.originalConfiguredIds,\n current: currentConfiguredIds,\n hasChanges: this.HasChanges\n });\n } catch (error) {\n LogError('Error checking for changes', null, error);\n this.HasChanges = false;\n }\n }\n\n public async OnSave(): Promise<void> {\n if (this.saving || !this.HasChanges) {\n console.log('Save cancelled:', { saving: this.saving, hasChanges: this.HasChanges });\n return;\n }\n\n try {\n this.saving = true;\n console.log('Starting save process with configured dashboards:', this.ConfiguredDashboards.map(d => ({ id: d.ID, name: d.Name })));\n \n const md = this.ProviderToUse;\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n\n // Get existing preferences for this scope\n const baseCondition = this.Scope === 'Global' \n ? `Scope='Global' AND ApplicationID IS NULL`\n : `Scope='App' AND ApplicationID='${this.ApplicationId}'`;\n \n let userFilter: string;\n \n if (this.IsSysAdmin && this.Scope === 'Global' && this.PreferenceMode === 'system') {\n // Managing system defaults\n userFilter = `UserID IS NULL AND ${baseCondition}`;\n } else {\n // Managing personal preferences\n userFilter = `UserID='${md.CurrentUser.ID}' AND ${baseCondition}`;\n }\n \n console.log('Loading existing preferences with filter:', userFilter);\n \n const existingPrefs = await rv.RunView<MJDashboardUserPreferenceEntity>({\n EntityName: 'MJ: Dashboard User Preferences',\n ExtraFilter: userFilter,\n ResultType: 'entity_object',\n });\n\n const existingPreferences = existingPrefs?.Results || [];\n console.log('Found existing preferences:', existingPreferences.length);\n\n // Create maps for efficient lookups\n const existingByDashboardId = new Map<string, MJDashboardUserPreferenceEntity>();\n existingPreferences.forEach(pref => {\n existingByDashboardId.set(pref.DashboardID, pref);\n });\n\n const configuredDashboardIds = new Set(this.ConfiguredDashboards.map(d => d.ID));\n\n // Step 1: Delete preferences that are no longer configured\n const prefsToDelete = existingPreferences.filter(pref => !configuredDashboardIds.has(pref.DashboardID));\n console.log('Preferences to delete:', prefsToDelete.length);\n \n for (const pref of prefsToDelete) {\n console.log('Deleting preference for dashboard:', pref.DashboardID);\n if (!await pref.Delete()) {\n const errorMsg = pref.LatestResult?.Error || pref.LatestResult?.Message || 'Unknown error';\n throw new Error(`Failed to delete preference: ${errorMsg}`);\n }\n }\n\n // Step 2: Update existing preferences or create new ones\n const newPreferences: MJDashboardUserPreferenceEntity[] = [];\n \n for (let i = 0; i < this.ConfiguredDashboards.length; i++) {\n const dashboard = this.ConfiguredDashboards[i];\n const newDisplayOrder = i + 1;\n \n let prefEntity = existingByDashboardId.get(dashboard.ID);\n \n if (prefEntity) {\n // Update existing preference\n console.log(`Updating existing preference for dashboard ${dashboard.Name}, new order: ${newDisplayOrder}`);\n prefEntity.DisplayOrder = newDisplayOrder;\n \n if (!await prefEntity.Save()) {\n const errorMsg = prefEntity.LatestResult?.Error || prefEntity.LatestResult?.Message || 'Unknown error';\n throw new Error(`Failed to update preference for dashboard ${dashboard.Name}: ${errorMsg}`);\n }\n } else {\n // Create new preference\n console.log(`Creating new preference for dashboard ${dashboard.Name}, order: ${newDisplayOrder}`);\n prefEntity = await md.GetEntityObject<MJDashboardUserPreferenceEntity>('MJ: Dashboard User Preferences');\n \n // Set UserID based on preference mode\n if (this.IsSysAdmin && this.Scope === 'Global' && this.PreferenceMode === 'system') {\n prefEntity.UserID = null; // System default\n } else {\n prefEntity.UserID = md.CurrentUser.ID; // Personal preference\n }\n \n prefEntity.DashboardID = dashboard.ID;\n prefEntity.DisplayOrder = newDisplayOrder;\n prefEntity.Scope = this.Scope;\n prefEntity.ApplicationID = this.ApplicationId;\n\n console.log('Creating preference entity:', {\n UserID: prefEntity.UserID,\n DashboardID: prefEntity.DashboardID,\n DisplayOrder: prefEntity.DisplayOrder,\n Scope: prefEntity.Scope,\n ApplicationID: prefEntity.ApplicationID\n });\n\n if (!await prefEntity.Save()) {\n const errorMsg = prefEntity.LatestResult?.Error || prefEntity.LatestResult?.Message || 'Unknown error';\n throw new Error(`Failed to create preference for dashboard ${dashboard.Name}: ${errorMsg}`);\n }\n }\n \n newPreferences.push(prefEntity);\n }\n\n console.log('Successfully processed', newPreferences.length, 'preferences');\n\n // Emit success result\n this.Result.emit({\n saved: true,\n preferences: newPreferences\n });\n\n } catch (error) {\n console.error('Save error:', error);\n LogError('Error saving dashboard preferences', null, error);\n this.error = `Failed to save preferences: ${error instanceof Error ? error.message : 'Unknown error'}`;\n \n // Clear error after 5 seconds\n setTimeout(() => {\n this.error = null;\n }, 5000);\n } finally {\n this.saving = false;\n }\n }\n\n /** @deprecated Use {@link OnSave}. */\n public async onSave(): Promise<void> {\n return this.OnSave();\n }\n\n public onCancel(): void {\n this.Result.emit({ saved: false });\n }\n}","<mj-dialog [Visible]=\"true\" Title=\"Dashboard Preferences\"\n [Width]=\"800\"\n [Height]=\"600\"\n [MinWidth]=\"600\"\n (Close)=\"onCancel()\">\n<div class=\"dashboard-preferences-dialog\">\n <div class=\"dialog-header\">\n <h3><i class=\"fa-solid fa-sliders\"></i> Dashboard Preferences</h3>\n <p class=\"scope-indicator\">\n @if (scope === 'Global') {\n <i class=\"fa-solid fa-globe\"></i> Global Scope\n } @else {\n <i class=\"fa-solid fa-layer-group\"></i> Application: {{ applicationName }}\n }\n </p>\n @if (isSysAdmin && scope === 'Global') {\n <div class=\"preference-mode-selector\">\n <label>\n <input type=\"radio\"\n name=\"preferenceMode\"\n value=\"personal\"\n [(ngModel)]=\"preferenceMode\"\n (change)=\"onPreferenceModeChange()\">\n Personal Preferences\n </label>\n <label>\n <input type=\"radio\"\n name=\"preferenceMode\"\n value=\"system\"\n [(ngModel)]=\"preferenceMode\"\n (change)=\"onPreferenceModeChange()\">\n System Defaults\n </label>\n </div>\n }\n </div>\n\n <div class=\"dialog-content\">\n @if (loading) {\n <div class=\"loading-overlay\">\n <mj-loading text=\"Loading preferences...\" size=\"large\"></mj-loading>\n </div>\n }\n\n @if (error) {\n <mj-empty-state\n Variant=\"error\"\n Size=\"compact\"\n Icon=\"fa-solid fa-triangle-exclamation\"\n [Title]=\"error\" />\n }\n\n @if (!loading && !error) {\n <div class=\"preferences-panels\">\n <!-- Available Dashboards Panel -->\n <div class=\"panel available-panel\">\n <h4><i class=\"fa-solid fa-list\"></i> Available Dashboards</h4>\n <div class=\"dashboard-list\"\n cdkDropList\n #availableList=\"cdkDropList\"\n [cdkDropListData]=\"availableDashboards\"\n [cdkDropListConnectedTo]=\"[configuredList]\"\n (cdkDropListDropped)=\"onDrop($event)\">\n\n @if (availableDashboards.length === 0) {\n <mj-empty-state\n Variant=\"success\"\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-check\"\n Title=\"All dashboards are configured\" />\n }\n\n @for (dashboard of availableDashboards; track dashboard.ID) {\n <div class=\"dashboard-item available-item\"\n cdkDrag\n [cdkDragData]=\"dashboard\">\n <div class=\"dashboard-item-content\">\n <i class=\"fa-solid fa-grip-vertical drag-handle\"></i>\n <div class=\"dashboard-info\">\n <span class=\"dashboard-name\">{{ dashboard.Name }}</span>\n @if (dashboard.Description) {\n <span class=\"dashboard-description\">{{ dashboard.Description }}</span>\n }\n </div>\n <button type=\"button\"\n class=\"add-button\"\n (click)=\"addDashboard(dashboard)\"\n title=\"Add to configured dashboards\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Configured Dashboards Panel -->\n <div class=\"panel configured-panel\">\n <h4><i class=\"fa-solid fa-list-ol\"></i> Configured Dashboards</h4>\n <div class=\"dashboard-list\"\n cdkDropList\n #configuredList=\"cdkDropList\"\n [cdkDropListData]=\"configuredDashboards\"\n [cdkDropListConnectedTo]=\"[availableList]\"\n (cdkDropListDropped)=\"onDrop($event)\">\n\n @if (configuredDashboards.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No dashboards configured\" />\n }\n\n @for (dashboard of configuredDashboards; track dashboard.ID; let i = $index) {\n <div class=\"dashboard-item configured-item\"\n cdkDrag\n [cdkDragData]=\"dashboard\">\n <div class=\"dashboard-item-content\">\n <i class=\"fa-solid fa-grip-vertical drag-handle\"></i>\n <span class=\"order-number\">{{ i + 1 }}</span>\n <div class=\"dashboard-info\">\n <span class=\"dashboard-name\">{{ dashboard.Name }}</span>\n @if (dashboard.Description) {\n <span class=\"dashboard-description\">{{ dashboard.Description }}</span>\n }\n </div>\n <button type=\"button\"\n class=\"remove-button\"\n (click)=\"removeDashboard(dashboard)\"\n title=\"Remove from configured dashboards\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n\n <mj-dialog-actions>\n <button type=\"button\"\n class=\"btn btn-secondary\"\n (click)=\"onCancel()\">\n <i class=\"fa-solid fa-times\"></i> Cancel\n </button>\n <button type=\"button\"\n class=\"btn btn-primary\"\n [disabled]=\"!hasChanges || saving\"\n (click)=\"onSave()\">\n @if (saving) {\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n Saving...\n } @else {\n <i class=\"fa-solid fa-check\"></i> Save Changes\n }\n </button>\n </mj-dialog-actions>\n</div>\n</mj-dialog>\n"]}
@@ -5,9 +5,13 @@ import { BaseEntity } from '@memberjunction/core';
5
5
  import { ResourceData } from '@memberjunction/core-entities';
6
6
  import * as i0 from "@angular/core";
7
7
  export declare class ResourceContainerComponent implements OnChanges, OnDestroy {
8
- sharedService: SharedService;
8
+ SharedService: SharedService;
9
9
  Data: ResourceData;
10
- isVisible: boolean;
10
+ IsVisible: boolean;
11
+ /** @deprecated Use {@link IsVisible}. */
12
+ set isVisible(value: boolean);
13
+ /** @deprecated Use {@link IsVisible}. */
14
+ get isVisible(): boolean;
11
15
  ResourceRecordSaved: EventEmitter<BaseEntity>;
12
16
  ContentLoadingStarted: EventEmitter<ResourceContainerComponent>;
13
17
  ContentLoadingComplete: EventEmitter<ResourceContainerComponent>;
@@ -15,18 +19,28 @@ export declare class ResourceContainerComponent implements OnChanges, OnDestroy
15
19
  get LoadStarted(): boolean;
16
20
  private _loadComplete;
17
21
  get LoadComplete(): boolean;
18
- resourceContainer: Container;
22
+ ResourceContainer: Container;
23
+ /** @deprecated Use {@link ResourceContainer}. */
24
+ get resourceContainer(): Container;
25
+ /** @deprecated Use {@link ResourceContainer}. */
26
+ set resourceContainer(value: Container);
19
27
  private _loaded;
20
28
  private _componentRef;
21
29
  /** Root environment injector, used when creating dynamic resource components so their
22
30
  * NgModule-declared pipes/directives/sub-components (e.g. mj-mcp-filter-panel, | date,
23
31
  * cdkVirtualFor) resolve correctly. */
24
32
  private readonly envInjector;
25
- constructor(sharedService: SharedService);
33
+ constructor(SharedService: SharedService);
34
+ /** @deprecated Use {@link SharedService}. */
35
+ get sharedService(): SharedService;
36
+ /** @deprecated Use {@link SharedService}. */
37
+ set sharedService(value: SharedService);
26
38
  ngOnChanges(changes: SimpleChanges): void;
39
+ LoadComponent(): Promise<void>;
40
+ /** @deprecated Use {@link LoadComponent}. */
27
41
  loadComponent(): Promise<void>;
28
42
  ngOnDestroy(): void;
29
43
  static ɵfac: i0.ɵɵFactoryDeclaration<ResourceContainerComponent, never>;
30
- static ɵcmp: i0.ɵɵComponentDeclaration<ResourceContainerComponent, "mj-resource", never, { "Data": { "alias": "Data"; "required": false; }; "isVisible": { "alias": "isVisible"; "required": false; }; }, { "ResourceRecordSaved": "ResourceRecordSaved"; "ContentLoadingStarted": "ContentLoadingStarted"; "ContentLoadingComplete": "ContentLoadingComplete"; }, never, never, false, never>;
44
+ static ɵcmp: i0.ɵɵComponentDeclaration<ResourceContainerComponent, "mj-resource", never, { "Data": { "alias": "Data"; "required": false; }; "IsVisible": { "alias": "IsVisible"; "required": false; }; "isVisible": { "alias": "isVisible"; "required": false; }; }, { "ResourceRecordSaved": "ResourceRecordSaved"; "ContentLoadingStarted": "ContentLoadingStarted"; "ContentLoadingComplete": "ContentLoadingComplete"; }, never, never, false, never>;
31
45
  }
32
46
  //# sourceMappingURL=resource-container-component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource-container-component.d.ts","sourceRoot":"","sources":["../../../src/lib/generic/resource-container-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,YAAY,EAAS,SAAS,EAAE,SAAS,EAAU,aAAa,EAAqB,MAAM,eAAe,CAAC;AAClK,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAY,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;;AAE7D,qBAKa,0BAA2B,YAAW,SAAS,EAAE,SAAS;IA2BlD,aAAa,EAAE,aAAa;IA1B/B,IAAI,EAAG,YAAY,CAAC;IACpB,SAAS,EAAE,OAAO,CAAS;IAC1B,mBAAmB,EAAE,YAAY,CAAC,UAAU,CAAC,CAAkC;IAC/E,qBAAqB,EAAE,YAAY,CAAC,0BAA0B,CAAC,CAAkD;IACjH,sBAAsB,EAAE,YAAY,CAAC,0BAA0B,CAAC,CAAkD;IAEnI,OAAO,CAAC,YAAY,CAAkB;IACtC,IAAW,WAAW,IAAI,OAAO,CAEhC;IAED,OAAO,CAAC,aAAa,CAAkB;IACvC,IAAW,YAAY,IAAI,OAAO,CAEjC;IAEuC,iBAAiB,EAAG,SAAS,CAAC;IAEtE,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,aAAa,CAAkC;IAEvD;;4CAEwC;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;gBAExC,aAAa,EAAE,aAAa;IAE9C,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAepC,aAAa;IAmDnB,WAAW,IAAI,IAAI;yCA/FR,0BAA0B;2CAA1B,0BAA0B;CAgHtC"}
1
+ {"version":3,"file":"resource-container-component.d.ts","sourceRoot":"","sources":["../../../src/lib/generic/resource-container-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,YAAY,EAAS,SAAS,EAAE,SAAS,EAAU,aAAa,EAAqB,MAAM,eAAe,CAAC;AAClK,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAY,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;;AAE7D,qBAKa,0BAA2B,YAAW,SAAS,EAAE,SAAS;IA6ClD,aAAa,EAAE,aAAa;IA5C/B,IAAI,EAAG,YAAY,CAAC;IACpB,SAAS,EAAE,OAAO,CAAS;IAE3C,yCAAyC;IACzC,IAAoB,SAAS,CAAC,KAAK,EAAE,OAAO,EAE3C;IACD,yCAAyC;IACzC,IAAW,SAAS,IAAI,OAAO,CAE9B;IACgB,mBAAmB,EAAE,YAAY,CAAC,UAAU,CAAC,CAAkC;IAC/E,qBAAqB,EAAE,YAAY,CAAC,0BAA0B,CAAC,CAAkD;IACjH,sBAAsB,EAAE,YAAY,CAAC,0BAA0B,CAAC,CAAkD;IAEnI,OAAO,CAAC,YAAY,CAAkB;IACtC,IAAW,WAAW,IAAI,OAAO,CAEhC;IAED,OAAO,CAAC,aAAa,CAAkB;IACvC,IAAW,YAAY,IAAI,OAAO,CAEjC;IAEuC,iBAAiB,EAAG,SAAS,CAAC;IAEtE,iDAAiD;IACjD,IAAI,iBAAiB,IAAI,SAAS,CAEjC;IACD,iDAAiD;IACjD,IAAI,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAErC;IAED,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,aAAa,CAAkC;IAEvD;;4CAEwC;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;gBAExC,aAAa,EAAE,aAAa;IAE/C,6CAA6C;IAC7C,IAAW,aAAa,IAAI,aAAa,CAExC;IACD,6CAA6C;IAC7C,IAAW,aAAa,CAAC,KAAK,EAAE,aAAa,EAE5C;IAEA,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAepC,aAAa;IAmDnB,6CAA6C;IACvC,aAAa;IAInB,WAAW,IAAI,IAAI;yCA/HR,0BAA0B;2CAA1B,0BAA0B;CAgJtC"}
@@ -8,9 +8,17 @@ import * as i1 from "@memberjunction/ng-shared";
8
8
  import * as i2 from "@memberjunction/ng-container-directives";
9
9
  function ResourceContainerComponent_ng_template_1_Template(rf, ctx) { }
10
10
  export class ResourceContainerComponent {
11
- sharedService;
11
+ SharedService;
12
12
  Data;
13
- isVisible = false;
13
+ IsVisible = false;
14
+ /** @deprecated Use {@link IsVisible}. */
15
+ set isVisible(value) {
16
+ this.IsVisible = value;
17
+ }
18
+ /** @deprecated Use {@link IsVisible}. */
19
+ get isVisible() {
20
+ return this.IsVisible;
21
+ }
14
22
  ResourceRecordSaved = new EventEmitter();
15
23
  ContentLoadingStarted = new EventEmitter();
16
24
  ContentLoadingComplete = new EventEmitter();
@@ -22,15 +30,31 @@ export class ResourceContainerComponent {
22
30
  get LoadComplete() {
23
31
  return this._loadComplete;
24
32
  }
25
- resourceContainer;
33
+ ResourceContainer;
34
+ /** @deprecated Use {@link ResourceContainer}. */
35
+ get resourceContainer() {
36
+ return this.ResourceContainer;
37
+ }
38
+ /** @deprecated Use {@link ResourceContainer}. */
39
+ set resourceContainer(value) {
40
+ this.ResourceContainer = value;
41
+ }
26
42
  _loaded = false;
27
43
  _componentRef = null;
28
44
  /** Root environment injector, used when creating dynamic resource components so their
29
45
  * NgModule-declared pipes/directives/sub-components (e.g. mj-mcp-filter-panel, | date,
30
46
  * cdkVirtualFor) resolve correctly. */
31
47
  envInjector = inject(EnvironmentInjector);
32
- constructor(sharedService) {
33
- this.sharedService = sharedService;
48
+ constructor(SharedService) {
49
+ this.SharedService = SharedService;
50
+ }
51
+ /** @deprecated Use {@link SharedService}. */
52
+ get sharedService() {
53
+ return this.SharedService;
54
+ }
55
+ /** @deprecated Use {@link SharedService}. */
56
+ set sharedService(value) {
57
+ this.SharedService = value;
34
58
  }
35
59
  ngOnChanges(changes) {
36
60
  if (changes['isVisible']) {
@@ -40,19 +64,19 @@ export class ResourceContainerComponent {
40
64
  // visible state has changed
41
65
  if (!this._loaded && currentValue) {
42
66
  // first time we are loading this resource, so go ahead and load whatever our component type is
43
- this.loadComponent();
67
+ this.LoadComponent();
44
68
  }
45
69
  }
46
70
  }
47
71
  }
48
- async loadComponent() {
72
+ async LoadComponent() {
49
73
  try {
50
74
  this._loaded = true;
51
75
  const resourceReg = await MJGlobal.Instance.ClassFactory.GetRegistrationAsync(BaseResourceComponent, this.Data.ResourceType);
52
76
  if (!resourceReg) {
53
77
  throw new Error(`Unable to find resource registration for ${this.Data.ResourceType}`);
54
78
  }
55
- const viewContainerRef = this.resourceContainer.viewContainerRef;
79
+ const viewContainerRef = this.ResourceContainer.viewContainerRef;
56
80
  if (!viewContainerRef) {
57
81
  throw new Error(`Unable to find viewContainerRef`);
58
82
  }
@@ -84,6 +108,10 @@ export class ResourceContainerComponent {
84
108
  LogError(e);
85
109
  }
86
110
  }
111
+ /** @deprecated Use {@link LoadComponent}. */
112
+ async loadComponent() {
113
+ return this.LoadComponent();
114
+ }
87
115
  ngOnDestroy() {
88
116
  // CRITICAL: Destroy the dynamically created component to prevent zombie components
89
117
  if (this._componentRef) {
@@ -91,8 +119,8 @@ export class ResourceContainerComponent {
91
119
  this._componentRef = null;
92
120
  }
93
121
  // Clear the view container to ensure no lingering references
94
- if (this.resourceContainer?.viewContainerRef) {
95
- this.resourceContainer.viewContainerRef.clear();
122
+ if (this.ResourceContainer?.viewContainerRef) {
123
+ this.ResourceContainer.viewContainerRef.clear();
96
124
  }
97
125
  // Reset state
98
126
  this._loaded = false;
@@ -104,8 +132,8 @@ export class ResourceContainerComponent {
104
132
  i0.ɵɵviewQuery(Container, 7);
105
133
  } if (rf & 2) {
106
134
  let _t;
107
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.resourceContainer = _t.first);
108
- } }, inputs: { Data: "Data", isVisible: "isVisible" }, outputs: { ResourceRecordSaved: "ResourceRecordSaved", ContentLoadingStarted: "ContentLoadingStarted", ContentLoadingComplete: "ContentLoadingComplete" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 2, vars: 2, consts: [["mjContainer", ""]], template: function ResourceContainerComponent_Template(rf, ctx) { if (rf & 1) {
135
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.ResourceContainer = _t.first);
136
+ } }, inputs: { Data: "Data", IsVisible: "IsVisible", isVisible: "isVisible" }, outputs: { ResourceRecordSaved: "ResourceRecordSaved", ContentLoadingStarted: "ContentLoadingStarted", ContentLoadingComplete: "ContentLoadingComplete" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 2, vars: 2, consts: [["mjContainer", ""]], template: function ResourceContainerComponent_Template(rf, ctx) { if (rf & 1) {
109
137
  i0.ɵɵelementStart(0, "div");
110
138
  i0.ɵɵtemplate(1, ResourceContainerComponent_ng_template_1_Template, 0, 0, "ng-template", 0);
111
139
  i0.ɵɵelementEnd();
@@ -122,6 +150,8 @@ export class ResourceContainerComponent {
122
150
  }]
123
151
  }], () => [{ type: i1.SharedService }], { Data: [{
124
152
  type: Input
153
+ }], IsVisible: [{
154
+ type: Input
125
155
  }], isVisible: [{
126
156
  type: Input
127
157
  }], ResourceRecordSaved: [{
@@ -130,7 +160,7 @@ export class ResourceContainerComponent {
130
160
  type: Output
131
161
  }], ContentLoadingComplete: [{
132
162
  type: Output
133
- }], resourceContainer: [{
163
+ }], ResourceContainer: [{
134
164
  type: ViewChild,
135
165
  args: [Container, { static: true }]
136
166
  }] }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"resource-container-component.js","sourceRoot":"","sources":["../../../src/lib/generic/resource-container-component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ComponentRef, EnvironmentInjector, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges, ViewChild, inject } from '@angular/core';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { Container } from '@memberjunction/ng-container-directives';\nimport { BaseEntity, LogError } from '@memberjunction/core';\nimport { MJGlobal } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\n\n@Component({\n standalone: false,\n selector: 'mj-resource',\n template: `<div [style.display]=\"!isVisible ? 'none' : 'block'\" ><ng-template mjContainer ></ng-template></div>`,\n})\nexport class ResourceContainerComponent implements OnChanges, OnDestroy {\n @Input() public Data!: ResourceData;\n @Input() public isVisible: boolean = false;\n @Output() public ResourceRecordSaved: EventEmitter<BaseEntity> = new EventEmitter<BaseEntity>();\n @Output() public ContentLoadingStarted: EventEmitter<ResourceContainerComponent> = new EventEmitter<ResourceContainerComponent>();\n @Output() public ContentLoadingComplete: EventEmitter<ResourceContainerComponent> = new EventEmitter<ResourceContainerComponent>();\n\n private _loadStarted: boolean = false;\n public get LoadStarted(): boolean {\n return this._loadStarted;\n }\n\n private _loadComplete: boolean = false;\n public get LoadComplete(): boolean {\n return this._loadComplete;\n }\n\n @ViewChild(Container, { static: true }) resourceContainer!: Container;\n\n private _loaded: boolean = false;\n private _componentRef: ComponentRef<any> | null = null;\n\n /** Root environment injector, used when creating dynamic resource components so their\n * NgModule-declared pipes/directives/sub-components (e.g. mj-mcp-filter-panel, | date,\n * cdkVirtualFor) resolve correctly. */\n private readonly envInjector = inject(EnvironmentInjector);\n\n constructor(public sharedService: SharedService) { }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['isVisible']) {\n const previousValue = changes['isVisible'].previousValue;\n const currentValue = changes['isVisible'].currentValue;\n\n if (previousValue !== currentValue) {\n // visible state has changed\n if (!this._loaded && currentValue) {\n // first time we are loading this resource, so go ahead and load whatever our component type is\n this.loadComponent();\n }\n }\n }\n }\n\n async loadComponent() {\n try {\n this._loaded = true;\n const resourceReg = await MJGlobal.Instance.ClassFactory.GetRegistrationAsync(BaseResourceComponent, this.Data.ResourceType);\n\n if (!resourceReg) {\n throw new Error(`Unable to find resource registration for ${this.Data.ResourceType}`);\n }\n\n const viewContainerRef = this.resourceContainer.viewContainerRef;\n if (!viewContainerRef) {\n throw new Error(`Unable to find viewContainerRef`);\n }\n\n viewContainerRef.clear();\n // Pass environmentInjector so dynamically-created resource components (e.g. MCPResource)\n // can resolve their NgModule's declarations — sub-components, directives, and pipes —\n // at render time. Without it, things declared in the feature module silently fail.\n const componentRef = viewContainerRef.createComponent<typeof resourceReg.SubClass>(\n resourceReg.SubClass,\n { environmentInjector: this.envInjector }\n );\n\n // Track the component reference for cleanup\n this._componentRef = componentRef;\n\n componentRef.instance.LoadCompleteEvent = () => {\n this._loadComplete = true;\n this.ContentLoadingComplete.emit(this);\n }\n\n componentRef.instance.ResourceRecordSavedEvent = (resourceRecordEntity: BaseEntity) => {\n // bubble up the event\n this.ResourceRecordSaved.emit(resourceRecordEntity);\n }\n\n componentRef.instance.Data = this.Data;\n\n // do this right away since we have started\n this.ContentLoadingStarted.emit(this);\n // AND - wire up the event because we might start again in the future - example dashboards where a user can change the dashboard and add items etc\n componentRef.instance.LoadStartedEvent = () => {\n this._loadStarted = true;\n this.ContentLoadingStarted.emit(this);\n }\n }\n catch (e) {\n LogError(e);\n }\n }\n\n ngOnDestroy(): void {\n // CRITICAL: Destroy the dynamically created component to prevent zombie components\n if (this._componentRef) {\n this._componentRef.destroy();\n this._componentRef = null;\n }\n \n // Clear the view container to ensure no lingering references\n if (this.resourceContainer?.viewContainerRef) {\n this.resourceContainer.viewContainerRef.clear();\n }\n \n // Reset state\n this._loaded = false;\n this._loadStarted = false;\n this._loadComplete = false;\n }\n}\n"]}
1
+ {"version":3,"file":"resource-container-component.js","sourceRoot":"","sources":["../../../src/lib/generic/resource-container-component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ComponentRef, EnvironmentInjector, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges, ViewChild, inject } from '@angular/core';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { Container } from '@memberjunction/ng-container-directives';\nimport { BaseEntity, LogError } from '@memberjunction/core';\nimport { MJGlobal } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\n\n@Component({\n standalone: false,\n selector: 'mj-resource',\n template: `<div [style.display]=\"!isVisible ? 'none' : 'block'\" ><ng-template mjContainer ></ng-template></div>`,\n})\nexport class ResourceContainerComponent implements OnChanges, OnDestroy {\n @Input() public Data!: ResourceData;\n @Input() public IsVisible: boolean = false;\n\n /** @deprecated Use {@link IsVisible}. */\n @Input() public set isVisible(value: boolean) {\n this.IsVisible = value;\n }\n /** @deprecated Use {@link IsVisible}. */\n public get isVisible(): boolean {\n return this.IsVisible;\n }\n @Output() public ResourceRecordSaved: EventEmitter<BaseEntity> = new EventEmitter<BaseEntity>();\n @Output() public ContentLoadingStarted: EventEmitter<ResourceContainerComponent> = new EventEmitter<ResourceContainerComponent>();\n @Output() public ContentLoadingComplete: EventEmitter<ResourceContainerComponent> = new EventEmitter<ResourceContainerComponent>();\n\n private _loadStarted: boolean = false;\n public get LoadStarted(): boolean {\n return this._loadStarted;\n }\n\n private _loadComplete: boolean = false;\n public get LoadComplete(): boolean {\n return this._loadComplete;\n }\n\n @ViewChild(Container, { static: true }) ResourceContainer!: Container;\n\n /** @deprecated Use {@link ResourceContainer}. */\n get resourceContainer(): Container {\n return this.ResourceContainer;\n }\n /** @deprecated Use {@link ResourceContainer}. */\n set resourceContainer(value: Container) {\n this.ResourceContainer = value;\n }\n\n private _loaded: boolean = false;\n private _componentRef: ComponentRef<any> | null = null;\n\n /** Root environment injector, used when creating dynamic resource components so their\n * NgModule-declared pipes/directives/sub-components (e.g. mj-mcp-filter-panel, | date,\n * cdkVirtualFor) resolve correctly. */\n private readonly envInjector = inject(EnvironmentInjector);\n\n constructor(public SharedService: SharedService) { }\n\n /** @deprecated Use {@link SharedService}. */\n public get sharedService(): SharedService {\n return this.SharedService;\n }\n /** @deprecated Use {@link SharedService}. */\n public set sharedService(value: SharedService) {\n this.SharedService = value;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['isVisible']) {\n const previousValue = changes['isVisible'].previousValue;\n const currentValue = changes['isVisible'].currentValue;\n\n if (previousValue !== currentValue) {\n // visible state has changed\n if (!this._loaded && currentValue) {\n // first time we are loading this resource, so go ahead and load whatever our component type is\n this.LoadComponent();\n }\n }\n }\n }\n\n async LoadComponent() {\n try {\n this._loaded = true;\n const resourceReg = await MJGlobal.Instance.ClassFactory.GetRegistrationAsync(BaseResourceComponent, this.Data.ResourceType);\n\n if (!resourceReg) {\n throw new Error(`Unable to find resource registration for ${this.Data.ResourceType}`);\n }\n\n const viewContainerRef = this.ResourceContainer.viewContainerRef;\n if (!viewContainerRef) {\n throw new Error(`Unable to find viewContainerRef`);\n }\n\n viewContainerRef.clear();\n // Pass environmentInjector so dynamically-created resource components (e.g. MCPResource)\n // can resolve their NgModule's declarations — sub-components, directives, and pipes —\n // at render time. Without it, things declared in the feature module silently fail.\n const componentRef = viewContainerRef.createComponent<typeof resourceReg.SubClass>(\n resourceReg.SubClass,\n { environmentInjector: this.envInjector }\n );\n\n // Track the component reference for cleanup\n this._componentRef = componentRef;\n\n componentRef.instance.LoadCompleteEvent = () => {\n this._loadComplete = true;\n this.ContentLoadingComplete.emit(this);\n }\n\n componentRef.instance.ResourceRecordSavedEvent = (resourceRecordEntity: BaseEntity) => {\n // bubble up the event\n this.ResourceRecordSaved.emit(resourceRecordEntity);\n }\n\n componentRef.instance.Data = this.Data;\n\n // do this right away since we have started\n this.ContentLoadingStarted.emit(this);\n // AND - wire up the event because we might start again in the future - example dashboards where a user can change the dashboard and add items etc\n componentRef.instance.LoadStartedEvent = () => {\n this._loadStarted = true;\n this.ContentLoadingStarted.emit(this);\n }\n }\n catch (e) {\n LogError(e);\n }\n }\n\n /** @deprecated Use {@link LoadComponent}. */\n async loadComponent() {\n return this.LoadComponent();\n }\n\n ngOnDestroy(): void {\n // CRITICAL: Destroy the dynamically created component to prevent zombie components\n if (this._componentRef) {\n this._componentRef.destroy();\n this._componentRef = null;\n }\n \n // Clear the view container to ensure no lingering references\n if (this.ResourceContainer?.viewContainerRef) {\n this.ResourceContainer.viewContainerRef.clear();\n }\n \n // Reset state\n this._loaded = false;\n this._loadStarted = false;\n this._loadComplete = false;\n }\n}\n"]}
@@ -1,5 +1,9 @@
1
1
  import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
2
2
  import { EntityPermissionType, IMetadataProvider } from "@memberjunction/core";
3
+ export declare function SetEntitiesGuardProvider(p: IMetadataProvider): void;
4
+ /** @deprecated Use {@link SetEntitiesGuardProvider}. */
3
5
  export declare function setEntitiesGuardProvider(p: IMetadataProvider): void;
6
+ export declare function CheckUserEntityPermissions(type: EntityPermissionType): (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => any;
7
+ /** @deprecated Use {@link CheckUserEntityPermissions}. */
4
8
  export declare function checkUserEntityPermissions(type: EntityPermissionType): (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => any;
5
9
  //# sourceMappingURL=entities.guard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entities.guard.d.ts","sourceRoot":"","sources":["../../../src/lib/guards/entities.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,oBAAoB,EAAY,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAUvF,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAEnE;AAMD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,oBAAoB,GAAG,CAAC,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,mBAAmB,KAAK,GAAG,CAuCvI"}
1
+ {"version":3,"file":"entities.guard.d.ts","sourceRoot":"","sources":["../../../src/lib/guards/entities.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,oBAAoB,EAAY,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAUvF,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAEnE;AAED,wDAAwD;AACxD,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAEnE;AAMD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,oBAAoB,GAAG,CAAC,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,mBAAmB,KAAK,GAAG,CAuCvI;AAEH,0DAA0D;AAC1D,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,oBAAoB,GAAG,CAAC,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,mBAAmB,KAAK,GAAG,CAEzI"}
@@ -6,13 +6,17 @@ import { EntityPermissionType, Metadata } from "@memberjunction/core";
6
6
  * don't have a natural per-component provider context.
7
7
  */
8
8
  let _guardProvider = null;
9
- export function setEntitiesGuardProvider(p) {
9
+ export function SetEntitiesGuardProvider(p) {
10
10
  _guardProvider = p;
11
11
  }
12
+ /** @deprecated Use {@link SetEntitiesGuardProvider}. */
13
+ export function setEntitiesGuardProvider(p) {
14
+ return SetEntitiesGuardProvider(p);
15
+ }
12
16
  function getGuardProvider() {
13
17
  return _guardProvider ?? Metadata.Provider;
14
18
  }
15
- export function checkUserEntityPermissions(type) {
19
+ export function CheckUserEntityPermissions(type) {
16
20
  return (route, state) => {
17
21
  const md = getGuardProvider();
18
22
  const appName = route.params['appName'];
@@ -49,4 +53,8 @@ export function checkUserEntityPermissions(type) {
49
53
  }
50
54
  };
51
55
  }
56
+ /** @deprecated Use {@link CheckUserEntityPermissions}. */
57
+ export function checkUserEntityPermissions(type) {
58
+ return CheckUserEntityPermissions(type);
59
+ }
52
60
  //# sourceMappingURL=entities.guard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entities.guard.js","sourceRoot":"","sources":["../../../src/lib/guards/entities.guard.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,oBAAoB,EAAE,QAAQ,EAAoB,MAAM,sBAAsB,CAAC;AAEvF;;;;;GAKG;AACH,IAAI,cAAc,GAA6B,IAAI,CAAC;AAEpD,MAAM,UAAU,wBAAwB,CAAC,CAAoB;IAC3D,cAAc,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,cAAc,IAAI,QAAQ,CAAC,QAAQ,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAA0B;IACjE,OAAO,CAAC,KAA6B,EAAE,KAA0B,EAAE,EAAE;QACnE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAE9C,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAClC,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,CAAA;YAC9B,CAAC,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,MAAM,EAAE,iBAAiB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YAE9D,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,QAAQ,GAAY,KAAK,CAAC;gBAC9B,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,oBAAoB,CAAC,MAAM;wBAC9B,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC;wBACjC,MAAM;oBACR,KAAK,oBAAoB,CAAC,IAAI;wBAC5B,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC;wBAC/B,MAAM;oBACR,KAAK,oBAAoB,CAAC,MAAM;wBAC9B,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC;wBACjC,MAAM;oBACR,KAAK,oBAAoB,CAAC,MAAM;wBAC9B,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC;wBACjC,MAAM;gBACV,CAAC;gBACD,OAAO,QAAQ,CAAA;YACjB,CAAC;iBACI,CAAC;gBACJ,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;aACI,CAAC;YACJ,OAAO,KAAK,CAAC,CAAC,iCAAiC;QACjD,CAAC;IACH,CAAC,CAAA;AACH,CAAC","sourcesContent":["import {\n ActivatedRouteSnapshot,\n RouterStateSnapshot,\n} from '@angular/router';\nimport {EntityPermissionType, Metadata, IMetadataProvider} from \"@memberjunction/core\";\n\n/**\n * Module-level provider for the route guard. Set via `setEntitiesGuardProvider()`\n * from app-init / shell. Falls back to `Metadata.Provider` when not set, which\n * is fine for single-provider apps — guards are constructed by Angular DI and\n * don't have a natural per-component provider context.\n */\nlet _guardProvider: IMetadataProvider | null = null;\n\nexport function setEntitiesGuardProvider(p: IMetadataProvider): void {\n _guardProvider = p;\n}\n\nfunction getGuardProvider(): IMetadataProvider {\n return _guardProvider ?? Metadata.Provider;\n}\n\nexport function checkUserEntityPermissions(type: EntityPermissionType): (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => any {\n return (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n const md = getGuardProvider();\n const appName = route.params['appName'];\n const entityName = route.params['entityName'];\n \n if (md && md.Entities) {\n const entity = md.Entities.find(e => {\n return e.Name === entityName \n });\n \n const permissions = entity?.GetUserPermisions(md.CurrentUser);\n \n if (permissions) {\n let bAllowed: boolean = false;\n switch (type) {\n case EntityPermissionType.Create:\n bAllowed = permissions.CanCreate;\n break;\n case EntityPermissionType.Read:\n bAllowed = permissions.CanRead;\n break;\n case EntityPermissionType.Update:\n bAllowed = permissions.CanUpdate;\n break;\n case EntityPermissionType.Delete:\n bAllowed = permissions.CanDelete;\n break;\n }\n return bAllowed\n }\n else {\n return false;\n }\n }\n else {\n return false; // entity metadata not loaded yet\n }\n }\n }\n "]}
1
+ {"version":3,"file":"entities.guard.js","sourceRoot":"","sources":["../../../src/lib/guards/entities.guard.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,oBAAoB,EAAE,QAAQ,EAAoB,MAAM,sBAAsB,CAAC;AAEvF;;;;;GAKG;AACH,IAAI,cAAc,GAA6B,IAAI,CAAC;AAEpD,MAAM,UAAU,wBAAwB,CAAC,CAAoB;IAC3D,cAAc,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,wBAAwB,CAAC,CAAoB;IAC3D,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,cAAc,IAAI,QAAQ,CAAC,QAAQ,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAA0B;IACjE,OAAO,CAAC,KAA6B,EAAE,KAA0B,EAAE,EAAE;QACnE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAE9C,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAClC,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,CAAA;YAC9B,CAAC,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,MAAM,EAAE,iBAAiB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YAE9D,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,QAAQ,GAAY,KAAK,CAAC;gBAC9B,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,oBAAoB,CAAC,MAAM;wBAC9B,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC;wBACjC,MAAM;oBACR,KAAK,oBAAoB,CAAC,IAAI;wBAC5B,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC;wBAC/B,MAAM;oBACR,KAAK,oBAAoB,CAAC,MAAM;wBAC9B,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC;wBACjC,MAAM;oBACR,KAAK,oBAAoB,CAAC,MAAM;wBAC9B,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC;wBACjC,MAAM;gBACV,CAAC;gBACD,OAAO,QAAQ,CAAA;YACjB,CAAC;iBACI,CAAC;gBACJ,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;aACI,CAAC;YACJ,OAAO,KAAK,CAAC,CAAC,iCAAiC;QACjD,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAEH,0DAA0D;AAC1D,MAAM,UAAU,0BAA0B,CAAC,IAA0B;IACnE,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC","sourcesContent":["import {\n ActivatedRouteSnapshot,\n RouterStateSnapshot,\n} from '@angular/router';\nimport {EntityPermissionType, Metadata, IMetadataProvider} from \"@memberjunction/core\";\n\n/**\n * Module-level provider for the route guard. Set via `setEntitiesGuardProvider()`\n * from app-init / shell. Falls back to `Metadata.Provider` when not set, which\n * is fine for single-provider apps — guards are constructed by Angular DI and\n * don't have a natural per-component provider context.\n */\nlet _guardProvider: IMetadataProvider | null = null;\n\nexport function SetEntitiesGuardProvider(p: IMetadataProvider): void {\n _guardProvider = p;\n}\n\n/** @deprecated Use {@link SetEntitiesGuardProvider}. */\nexport function setEntitiesGuardProvider(p: IMetadataProvider): void {\n return SetEntitiesGuardProvider(p);\n}\n\nfunction getGuardProvider(): IMetadataProvider {\n return _guardProvider ?? Metadata.Provider;\n}\n\nexport function CheckUserEntityPermissions(type: EntityPermissionType): (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => any {\n return (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n const md = getGuardProvider();\n const appName = route.params['appName'];\n const entityName = route.params['entityName'];\n \n if (md && md.Entities) {\n const entity = md.Entities.find(e => {\n return e.Name === entityName \n });\n \n const permissions = entity?.GetUserPermisions(md.CurrentUser);\n \n if (permissions) {\n let bAllowed: boolean = false;\n switch (type) {\n case EntityPermissionType.Create:\n bAllowed = permissions.CanCreate;\n break;\n case EntityPermissionType.Read:\n bAllowed = permissions.CanRead;\n break;\n case EntityPermissionType.Update:\n bAllowed = permissions.CanUpdate;\n break;\n case EntityPermissionType.Delete:\n bAllowed = permissions.CanDelete;\n break;\n }\n return bAllowed\n }\n else {\n return false;\n }\n }\n else {\n return false; // entity metadata not loaded yet\n }\n }\n }\n\n/** @deprecated Use {@link CheckUserEntityPermissions}. */\nexport function checkUserEntityPermissions(type: EntityPermissionType): (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => any {\n return CheckUserEntityPermissions(type);\n}\n "]}
@@ -55,8 +55,12 @@ export declare class ClaimRedeemComponent extends BaseAngularComponent implement
55
55
  /** Shows the terminal error state */
56
56
  private showError;
57
57
  /** Navigates into the app shell (which handles sign-in when needed) */
58
+ OnGoToApp(): void;
59
+ /** @deprecated Use {@link OnGoToApp}. */
58
60
  onGoToApp(): void;
59
61
  /** Retries redemption from scratch (fresh component state) */
62
+ OnRetry(): void;
63
+ /** @deprecated Use {@link OnRetry}. */
60
64
  onRetry(): void;
61
65
  static ɵfac: i0.ɵɵFactoryDeclaration<ClaimRedeemComponent, never>;
62
66
  static ɵcmp: i0.ɵɵComponentDeclaration<ClaimRedeemComponent, "mj-claim-redeem", never, {}, {}, never, never, false, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"claim-redeem.component.d.ts","sourceRoot":"","sources":["../../../src/lib/identity-claims/claim-redeem.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAa,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AA2BrE,qBAMa,oBAAqB,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAuBnF,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,GAAG;IAxBf,4DAA4D;IACrD,SAAS,UAAQ;IAExB,2BAA2B;IACpB,QAAQ,UAAS;IAExB,+BAA+B;IACxB,YAAY,SAAM;IAEzB,kFAAkF;IAC3E,WAAW,UAAS;IAE3B,6CAA6C;IACtC,aAAa,SAA0B;IAE9C,2CAA2C;IAC3C,OAAO,CAAC,SAAS,CAA+C;IAEhE,wCAAwC;IACxC,OAAO,CAAC,YAAY,CAAS;gBAGjB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,iBAAiB;IAK5B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,WAAW,IAAI,IAAI;IAOnB;;;OAGG;YACW,wBAAwB;IA2CtC,uEAAuE;IACvE,OAAO,CAAC,eAAe;IAavB,sEAAsE;YACxD,UAAU;IAcxB,+DAA+D;YACjD,WAAW;IA6BzB,qCAAqC;IACrC,OAAO,CAAC,SAAS;IAOjB,uEAAuE;IAChE,SAAS,IAAI,IAAI;IAIxB,8DAA8D;IACvD,OAAO,IAAI,IAAI;yCAjKb,oBAAoB;2CAApB,oBAAoB;CAyKhC"}
1
+ {"version":3,"file":"claim-redeem.component.d.ts","sourceRoot":"","sources":["../../../src/lib/identity-claims/claim-redeem.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAa,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AA2BrE,qBAMa,oBAAqB,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAuBnF,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,GAAG;IAxBf,4DAA4D;IACrD,SAAS,UAAQ;IAExB,2BAA2B;IACpB,QAAQ,UAAS;IAExB,+BAA+B;IACxB,YAAY,SAAM;IAEzB,kFAAkF;IAC3E,WAAW,UAAS;IAE3B,6CAA6C;IACtC,aAAa,SAA0B;IAE9C,2CAA2C;IAC3C,OAAO,CAAC,SAAS,CAA+C;IAEhE,wCAAwC;IACxC,OAAO,CAAC,YAAY,CAAS;gBAGjB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,iBAAiB;IAK5B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,WAAW,IAAI,IAAI;IAOnB;;;OAGG;YACW,wBAAwB;IA2CtC,uEAAuE;IACvE,OAAO,CAAC,eAAe;IAavB,sEAAsE;YACxD,UAAU;IAcxB,+DAA+D;YACjD,WAAW;IA6BzB,qCAAqC;IACrC,OAAO,CAAC,SAAS;IAOjB,uEAAuE;IAChE,SAAS,IAAI,IAAI;IAIxB,yCAAyC;IAClC,SAAS,IAAI,IAAI;IAIxB,8DAA8D;IACvD,OAAO,IAAI,IAAI;IAStB,uCAAuC;IAChC,OAAO,IAAI,IAAI;yCAhLb,oBAAoB;2CAApB,oBAAoB;CAmLhC"}
@@ -240,11 +240,15 @@ export class ClaimRedeemComponent extends BaseAngularComponent {
240
240
  this.cdr.detectChanges();
241
241
  }
242
242
  /** Navigates into the app shell (which handles sign-in when needed) */
243
- onGoToApp() {
243
+ OnGoToApp() {
244
244
  this.router.navigateByUrl('/');
245
245
  }
246
+ /** @deprecated Use {@link OnGoToApp}. */
247
+ onGoToApp() {
248
+ return this.OnGoToApp();
249
+ }
246
250
  /** Retries redemption from scratch (fresh component state) */
247
- onRetry() {
251
+ OnRetry() {
248
252
  this.IsLoading = true;
249
253
  this.HasError = false;
250
254
  this.NeedsSignIn = false;
@@ -252,6 +256,10 @@ export class ClaimRedeemComponent extends BaseAngularComponent {
252
256
  this.isProcessing = false;
253
257
  void this.waitForProviderAndRedeem();
254
258
  }
259
+ /** @deprecated Use {@link OnRetry}. */
260
+ onRetry() {
261
+ return this.OnRetry();
262
+ }
255
263
  static ɵfac = function ClaimRedeemComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ClaimRedeemComponent)(i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
256
264
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ClaimRedeemComponent, selectors: [["mj-claim-redeem"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 5, vars: 3, consts: [[1, "claim-redeem-container"], [1, "claim-redeem-card"], [1, "claim-status", "loading"], [1, "claim-status", "error"], [1, "claim-status", "success"], [3, "text"], [1, "icon-container", "error-icon"], [1, "fa-solid", "fa-circle-exclamation"], [1, "error-message"], [1, "button-group"], ["mjButton", "", "variant", "secondary"], ["mjButton", "", 3, "click", "variant"], [1, "fa-solid", "fa-arrow-right-to-bracket"], ["mjButton", "", "variant", "secondary", 3, "click"], [1, "fa-solid", "fa-rotate-right"], [1, "icon-container", "success-icon"], [1, "fa-solid", "fa-circle-check"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-house"]], template: function ClaimRedeemComponent_Template(rf, ctx) { if (rf & 1) {
257
265
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);