@memberjunction/ng-explorer-core 5.34.1 → 5.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/generated/lazy-feature-config.d.ts +1 -1
  2. package/dist/generated/lazy-feature-config.d.ts.map +1 -1
  3. package/dist/generated/lazy-feature-config.js +5 -3
  4. package/dist/generated/lazy-feature-config.js.map +1 -1
  5. package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts.map +1 -1
  6. package/dist/lib/resource-wrappers/chat-collections-resource.component.js +9 -2
  7. package/dist/lib/resource-wrappers/chat-collections-resource.component.js.map +1 -1
  8. package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts +8 -0
  9. package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -1
  10. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +25 -0
  11. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
  12. package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
  13. package/dist/lib/resource-wrappers/dashboard-resource.component.js +23 -1
  14. package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
  15. package/dist/lib/resource-wrappers/search-results-resource.component.d.ts +6 -0
  16. package/dist/lib/resource-wrappers/search-results-resource.component.d.ts.map +1 -1
  17. package/dist/lib/resource-wrappers/search-results-resource.component.js +21 -0
  18. package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
  19. package/dist/lib/resource-wrappers/view-resource.component.d.ts +12 -0
  20. package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
  21. package/dist/lib/resource-wrappers/view-resource.component.js +107 -15
  22. package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
  23. package/dist/lib/shell/components/tabs/component-cache-manager.d.ts +11 -0
  24. package/dist/lib/shell/components/tabs/component-cache-manager.d.ts.map +1 -1
  25. package/dist/lib/shell/components/tabs/component-cache-manager.js +26 -0
  26. package/dist/lib/shell/components/tabs/component-cache-manager.js.map +1 -1
  27. package/dist/lib/shell/components/tabs/tab-container.component.d.ts +26 -0
  28. package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
  29. package/dist/lib/shell/components/tabs/tab-container.component.js +75 -3
  30. package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
  31. package/dist/lib/shell/shell.component.d.ts.map +1 -1
  32. package/dist/lib/shell/shell.component.js +42 -7
  33. package/dist/lib/shell/shell.component.js.map +1 -1
  34. package/dist/lib/single-list-detail/single-list-detail.component.d.ts +153 -3
  35. package/dist/lib/single-list-detail/single-list-detail.component.d.ts.map +1 -1
  36. package/dist/lib/single-list-detail/single-list-detail.component.js +1479 -271
  37. package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
  38. package/dist/module.d.ts +4 -3
  39. package/dist/module.d.ts.map +1 -1
  40. package/dist/module.js +4 -0
  41. package/dist/module.js.map +1 -1
  42. package/package.json +44 -42
@@ -1 +1 @@
1
- {"version":3,"file":"single-list-detail.component.js","sourceRoot":"","sources":["../../../src/lib/single-list-detail/single-list-detail.component.ts","../../../src/lib/single-list-detail/single-list-detail.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnInit, ViewChild, ChangeDetectorRef, HostListener, ElementRef } from '@angular/core';\nimport { BaseEntity, CompositeKey, LogError, LogErrorEx, LogStatus, Metadata, RunView, RunViewResult } from '@memberjunction/core';\nimport { MJListDetailEntity, MJListDetailEntityExtended, MJListEntity, MJUserViewEntityExtended } from '@memberjunction/core-entities';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { ListDetailGridComponent, ListGridRowClickedEvent } from '@memberjunction/ng-list-detail-grid';\nimport { GridToolbarConfig } from '@memberjunction/ng-entity-viewer';\nimport { Subject, debounceTime } from 'rxjs';\nimport { NewItemOption } from '../../generic/Item.types';\nimport { UUIDsEqual, NormalizeUUID } from '@memberjunction/global';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n/**\n * Represents a record that can be added to a list\n */\ninterface AddableRecord {\n ID: string;\n Name: string;\n isInList: boolean;\n isSelected: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-list-detail',\n templateUrl: './single-list-detail.component.html',\n styleUrls: ['./single-list-detail.component.css', '../../shared/first-tab-styles.css']\n})\nexport class SingleListDetailComponent extends BaseAngularComponent implements OnInit {\n\n @Input() public ListID: string = \"\";\n\n @ViewChild('listDetailGrid') listDetailGrid: ListDetailGridComponent | undefined;\n\n // List record\n public listRecord: MJListEntity | null = null;\n public showLoader: boolean = false;\n\n // Grid state\n public selectedKeys: string[] = [];\n public rowCount: number = 0;\n\n // Toolbar config - hide EDG toolbar, we'll use our own\n public gridToolbarConfig: GridToolbarConfig = {\n showSearch: false,\n showRefresh: false,\n showAdd: false,\n showDelete: false,\n showExport: false,\n showRowCount: false,\n showSelectionCount: false\n };\n\n // Remove from list dialog\n public showRemoveDialog: boolean = false;\n public isRemoving: boolean = false;\n public removeProgress: number = 0;\n public removeTotal: number = 0;\n\n // Add records dialog\n public showAddRecordsDialog: boolean = false;\n public addDialogLoading: boolean = false;\n public addDialogSaving: boolean = false;\n public addableRecords: AddableRecord[] = [];\n public addRecordsSearchFilter: string = \"\";\n public existingListDetailIds: Set<string> = new Set();\n public addProgress: number = 0;\n public addTotal: number = 0;\n private searchSubject: Subject<string> = new Subject();\n\n // Add from view dialog (existing)\n public showAddFromViewDialog: boolean = false;\n public showAddFromViewLoader: boolean = false;\n public userViews: MJUserViewEntityExtended[] | null = null;\n public userViewsToAdd: MJUserViewEntityExtended[] = [];\n public addFromViewProgress: number = 0;\n public addFromViewTotal: number = 0;\n public fetchingRecordsToSave: boolean = false;\n\n // Dropdown button toggle state\n public showAddDropdown: boolean = false;\n\n // Dropdown menu options\n public addOptions: NewItemOption[] = [\n {\n Text: 'Add Records',\n Description: 'Search and add specific records to this list',\n Icon: 'search',\n Action: () => this.openAddRecordsDialog()\n },\n {\n Text: 'Add From View',\n Description: 'Add all records from a saved view',\n Icon: 'folder',\n Action: () => this.openAddFromViewDialog()\n }\n ];\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.showAddDropdown) {\n const target = event.target as HTMLElement;\n if (!this.elementRef.nativeElement.querySelector('.add-dropdown-wrapper')?.contains(target)) {\n this.showAddDropdown = false;\n }\n }\n }\n\n constructor(\n private sharedService: SharedService,\n private cdr: ChangeDetectorRef,\n private elementRef: ElementRef\n ) {\n super();\n // Debounce search input\n this.searchSubject\n .pipe(debounceTime(300))\n .subscribe((searchText) => this.searchRecords(searchText));\n }\n\n public async ngOnInit(): Promise<void> {\n if (this.ListID) {\n await this.loadListRecord();\n }\n }\n\n /**\n * Load the list entity record\n */\n private async loadListRecord(): Promise<void> {\n if (!this.ListID) return;\n\n this.showLoader = true;\n\n try {\n const md = this.ProviderToUse;\n this.listRecord = await md.GetEntityObject<MJListEntity>(\"MJ: Lists\");\n const loadResult = await this.listRecord.Load(this.ListID);\n\n if (!loadResult) {\n LogError(\"Error loading list with ID \" + this.ListID, undefined, this.listRecord.LatestResult);\n this.listRecord = null;\n }\n } catch (error) {\n LogError(\"Error loading list\", undefined, error);\n this.listRecord = null;\n } finally {\n this.showLoader = false;\n this.cdr.detectChanges();\n }\n }\n\n // ==========================================\n // Grid Event Handlers\n // ==========================================\n\n onRowClicked(_event: ListGridRowClickedEvent): void {\n // Selection is handled by the grid\n }\n\n onRowDoubleClicked(_event: ListGridRowClickedEvent): void {\n // Navigation is handled by mj-list-detail-grid\n }\n\n onSelectionChange(keys: string[]): void {\n this.selectedKeys = keys;\n }\n\n onDataLoaded(event: { totalCount: number }): void {\n this.rowCount = event.totalCount;\n }\n\n refreshGrid(): void {\n if (this.listDetailGrid) {\n this.listDetailGrid.refresh();\n }\n }\n\n // ==========================================\n // Toolbar Actions\n // ==========================================\n\n // ==========================================\n // Progress Percentage Getters\n // ==========================================\n\n get removeProgressPercent(): number {\n return this.removeTotal > 0 ? Math.round((this.removeProgress / this.removeTotal) * 100) : 0;\n }\n\n get addProgressPercent(): number {\n return this.addTotal > 0 ? Math.round((this.addProgress / this.addTotal) * 100) : 0;\n }\n\n get addFromViewProgressPercent(): number {\n return this.addFromViewTotal > 0 ? Math.round((this.addFromViewProgress / this.addFromViewTotal) * 100) : 0;\n }\n\n onRefreshClick(): void {\n this.refreshGrid();\n }\n\n onExportClick(): void {\n // Trigger export on the underlying grid\n if (this.listDetailGrid) {\n this.listDetailGrid.export();\n }\n }\n\n toggleAddDropdown(): void {\n this.showAddDropdown = !this.showAddDropdown;\n }\n\n onDropdownItemClick(item: NewItemOption): void {\n this.showAddDropdown = false;\n if (item.Action) {\n item.Action();\n }\n }\n\n // ==========================================\n // Remove from List Dialog\n // ==========================================\n\n openRemoveDialog(): void {\n if (this.selectedKeys.length === 0) {\n this.sharedService.CreateSimpleNotification(\"Please select records to remove\", 'warning', 2500);\n return;\n }\n this.showRemoveDialog = true;\n }\n\n closeRemoveDialog(): void {\n this.showRemoveDialog = false;\n this.isRemoving = false;\n this.removeProgress = 0;\n this.removeTotal = 0;\n }\n\n async confirmRemoveFromList(): Promise<void> {\n if (!this.listRecord || this.selectedKeys.length === 0) return;\n\n this.isRemoving = true;\n this.removeTotal = this.selectedKeys.length;\n this.removeProgress = 0;\n\n const md = this.ProviderToUse;\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const entityInfo = md.EntityByID(this.listRecord.EntityID);\n\n // selectedKeys from grid are in concatenated format (ID|value)\n // For single PK entities, RecordID in DB is just the raw value\n // For composite PK entities, RecordID in DB is the concatenated format\n // Extract the appropriate format for the query\n const selectedRecordIds = this.selectedKeys.map(key => {\n if (entityInfo && entityInfo.PrimaryKeys.length === 1) {\n // Single PK: extract just the value from concatenated format\n const compositeKey = new CompositeKey();\n compositeKey.LoadFromConcatenatedString(key);\n return compositeKey.KeyValuePairs[0]?.Value || key;\n } else {\n // Composite PK: use full concatenated format as-is\n return key;\n }\n });\n\n const listDetailsFilter = `ListID = '${this.listRecord.ID}' AND RecordID IN (${selectedRecordIds.map(id => `'${id}'`).join(',')})`;\n\n const listDetailsResult = await rv.RunView<MJListDetailEntity>({\n EntityName: 'MJ: List Details',\n ExtraFilter: listDetailsFilter,\n ResultType: 'entity_object'\n }, md.CurrentUser);\n\n if (!listDetailsResult.Success) {\n LogError(\"Error loading list details for removal\", undefined, listDetailsResult.ErrorMessage);\n this.sharedService.CreateSimpleNotification(\"Failed to remove records\", 'error', 2500);\n this.isRemoving = false;\n return;\n }\n\n // Use transaction group for bulk delete\n const tg = await md.CreateTransactionGroup();\n const listDetails = listDetailsResult.Results;\n\n for (const listDetail of listDetails) {\n listDetail.TransactionGroup = tg;\n await listDetail.Delete();\n }\n\n const success = await tg.Submit();\n\n if (success) {\n this.removeProgress = this.removeTotal;\n this.sharedService.CreateSimpleNotification(\n `Removed ${listDetails.length} record${listDetails.length !== 1 ? 's' : ''} from list`,\n 'success',\n 2500\n );\n this.closeRemoveDialog();\n this.listDetailGrid?.clearSelection();\n this.refreshGrid();\n } else {\n LogError(\"Error removing records from list\");\n this.sharedService.CreateSimpleNotification(\"Failed to remove some records\", 'error', 2500);\n this.isRemoving = false;\n }\n }\n\n // ==========================================\n // Add Records Dialog\n // ==========================================\n\n async openAddRecordsDialog(): Promise<void> {\n this.showAddRecordsDialog = true;\n this.addableRecords = [];\n this.addRecordsSearchFilter = \"\";\n this.addDialogLoading = true;\n this.addDialogSaving = false;\n\n // Load existing list detail IDs to mark which records are already in the list\n await this.loadExistingListDetailIds();\n this.addDialogLoading = false;\n }\n\n closeAddRecordsDialog(): void {\n this.showAddRecordsDialog = false;\n this.addableRecords = [];\n this.addRecordsSearchFilter = \"\";\n this.existingListDetailIds.clear();\n this.addDialogSaving = false;\n this.addProgress = 0;\n this.addTotal = 0;\n }\n\n private async loadExistingListDetailIds(): Promise<void> {\n if (!this.listRecord) return;\n\n const md = this.ProviderToUse;\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n\n const result = await rv.RunView<{ RecordID: string }>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${this.listRecord.ID}'`,\n Fields: ['RecordID'],\n ResultType: 'simple'\n }, md.CurrentUser);\n\n if (result.Success) {\n this.existingListDetailIds = new Set(result.Results.map(r => NormalizeUUID(r.RecordID)));\n }\n }\n\n onAddRecordsSearchInputEvent(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.onAddRecordsSearchChange(value);\n }\n\n onAddRecordsSearchChange(value: string): void {\n this.addRecordsSearchFilter = value;\n this.searchSubject.next(value);\n }\n\n private async searchRecords(searchText: string): Promise<void> {\n if (!this.listRecord || !searchText || searchText.length < 2) {\n this.addableRecords = [];\n return;\n }\n\n this.addDialogLoading = true;\n\n const md = this.ProviderToUse;\n const sourceEntityInfo = md.EntityByID(this.listRecord.EntityID);\n if (!sourceEntityInfo) {\n this.addDialogLoading = false;\n return;\n }\n\n const nameField = sourceEntityInfo.Fields.find(field => field.IsNameField);\n const pkField = sourceEntityInfo.FirstPrimaryKey?.Name || 'ID';\n\n let filter: string | undefined;\n if (nameField) {\n filter = `${nameField.Name} LIKE '%${searchText}%'`;\n }\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result: RunViewResult = await rv.RunView({\n EntityName: this.listRecord.Entity,\n ExtraFilter: filter,\n MaxRows: 100,\n ResultType: 'simple'\n });\n\n if (result.Success) {\n this.addableRecords = result.Results.map((record: Record<string, unknown>) => {\n const recordId = String(record[pkField]);\n return {\n ID: recordId,\n Name: nameField ? String(record[nameField.Name]) : recordId,\n isInList: this.existingListDetailIds.has(NormalizeUUID(recordId)),\n isSelected: false\n };\n });\n }\n\n this.addDialogLoading = false;\n this.cdr.detectChanges();\n }\n\n toggleRecordSelection(record: AddableRecord): void {\n if (record.isInList) return; // Can't select records already in list\n record.isSelected = !record.isSelected;\n }\n\n get selectedAddableRecords(): AddableRecord[] {\n return this.addableRecords.filter(r => r.isSelected);\n }\n\n selectAllAddable(): void {\n this.addableRecords.forEach(r => {\n if (!r.isInList) r.isSelected = true;\n });\n }\n\n deselectAllAddable(): void {\n this.addableRecords.forEach(r => r.isSelected = false);\n }\n\n async confirmAddRecords(): Promise<void> {\n const recordsToAdd = this.selectedAddableRecords;\n if (recordsToAdd.length === 0 || !this.listRecord) return;\n\n this.addDialogSaving = true;\n // Reserve 20% of progress for tg.Submit()\n this.addTotal = recordsToAdd.length;\n this.addProgress = 0;\n const progressPerRecord = 0.8 / recordsToAdd.length; // 80% for individual saves\n\n const md = this.ProviderToUse;\n\n // Use transaction group for bulk insert\n const tg = await md.CreateTransactionGroup();\n\n for (let i = 0; i < recordsToAdd.length; i++) {\n const record = recordsToAdd[i];\n const listDetail = await md.GetEntityObject<MJListDetailEntityExtended>(\"MJ: List Details\", md.CurrentUser);\n listDetail.ListID = this.listRecord.ID;\n listDetail.RecordID = record.ID;\n listDetail.TransactionGroup = tg;\n const result = await listDetail.Save();\n if (!result) {\n LogErrorEx({\n message: listDetail.LatestResult?.CompleteMessage\n });\n }\n // Update progress (0-80%)\n this.addProgress = Math.round((i + 1) * progressPerRecord * this.addTotal);\n }\n\n // Show 80% complete before submit\n this.addProgress = Math.round(this.addTotal * 0.8);\n\n const success = await tg.Submit();\n\n if (success) {\n this.addProgress = this.addTotal;\n this.sharedService.CreateSimpleNotification(\n `Added ${recordsToAdd.length} record${recordsToAdd.length !== 1 ? 's' : ''} to list`,\n 'success',\n 2500\n );\n this.closeAddRecordsDialog();\n this.refreshGrid();\n } else {\n LogError(\"Error adding records to list\");\n this.sharedService.CreateSimpleNotification(\"Failed to add some records\", 'error', 2500);\n this.addDialogSaving = false;\n }\n }\n\n // ==========================================\n // Add From View Dialog (existing functionality, cleaned up)\n // ==========================================\n\n async openAddFromViewDialog(): Promise<void> {\n this.showAddFromViewDialog = true;\n this.userViewsToAdd = [];\n\n if (!this.userViews) {\n await this.loadEntityViews();\n }\n }\n\n closeAddFromViewDialog(): void {\n this.showAddFromViewDialog = false;\n this.userViewsToAdd = [];\n this.showAddFromViewLoader = false;\n this.addFromViewProgress = 0;\n this.addFromViewTotal = 0;\n }\n\n private async loadEntityViews(): Promise<void> {\n if (!this.listRecord || !this.listRecord.Entity) return;\n\n this.showAddFromViewLoader = true;\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const md = this.ProviderToUse;\n\n const runViewResult = await rv.RunView<MJUserViewEntityExtended>({\n EntityName: \"MJ: User Views\",\n ExtraFilter: `UserID = '${md.CurrentUser.ID}' AND EntityID = '${this.listRecord.EntityID}'`,\n ResultType: 'entity_object'\n }, md.CurrentUser);\n\n if (!runViewResult.Success) {\n LogError(`Error loading User Views for entity ${this.listRecord.Entity}`);\n } else {\n this.userViews = runViewResult.Results;\n }\n\n this.showAddFromViewLoader = false;\n this.cdr.detectChanges();\n }\n\n toggleViewSelection(view: MJUserViewEntityExtended): void {\n const index = this.userViewsToAdd.findIndex(v => UUIDsEqual(v.ID, view.ID));\n if (index >= 0) {\n this.userViewsToAdd.splice(index, 1);\n } else {\n this.userViewsToAdd.push(view);\n }\n }\n\n isViewSelected(view: MJUserViewEntityExtended): boolean {\n return this.userViewsToAdd.some(v => UUIDsEqual(v.ID, view.ID));\n }\n\n async confirmAddFromView(): Promise<void> {\n if (!this.listRecord || this.userViewsToAdd.length === 0) return;\n\n this.showAddFromViewLoader = true;\n this.fetchingRecordsToSave = true;\n this.cdr.detectChanges();\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const md = this.ProviderToUse;\n\n // Collect all unique record IDs from selected views\n const recordIdSet = new Set<string>();\n\n for (const userView of this.userViewsToAdd) {\n const runViewResult = await rv.RunView({\n ViewID: userView.ID,\n ViewEntity: userView,\n Fields: [\"ID\"]\n }, md.CurrentUser);\n\n if (runViewResult.Success) {\n const records = runViewResult.Results as Array<Record<string, string>>;\n records.forEach(r => recordIdSet.add(NormalizeUUID(r.ID)));\n }\n }\n\n // Filter out records already in the list\n await this.loadExistingListDetailIds();\n const recordsToAdd = [...recordIdSet].filter(id => !this.existingListDetailIds.has(id));\n\n this.addFromViewTotal = recordsToAdd.length;\n this.addFromViewProgress = 0;\n this.fetchingRecordsToSave = false;\n this.cdr.detectChanges();\n const progressPerRecord = 0.8 / Math.max(recordsToAdd.length, 1); // 80% for individual saves\n\n if (recordsToAdd.length === 0) {\n this.sharedService.CreateSimpleNotification(\"All records already in list\", 'info', 2500);\n this.showAddFromViewLoader = false;\n this.cdr.detectChanges();\n return;\n }\n\n LogStatus(`Adding ${recordsToAdd.length} records to list`);\n\n // Use transaction group for bulk insert\n const tg = await md.CreateTransactionGroup();\n\n for (let i = 0; i < recordsToAdd.length; i++) {\n const recordID = recordsToAdd[i];\n const listDetail = await md.GetEntityObject<MJListDetailEntityExtended>(\"MJ: List Details\", md.CurrentUser);\n listDetail.ListID = this.listRecord.ID;\n listDetail.RecordID = recordID;\n listDetail.TransactionGroup = tg;\n const result = await listDetail.Save();\n if (!result) {\n LogErrorEx({\n message: listDetail.LatestResult?.CompleteMessage\n });\n }\n // Update progress (0-80%)\n this.addFromViewProgress = Math.round((i + 1) * progressPerRecord * this.addFromViewTotal);\n }\n\n // Show 80% complete before submit\n this.addFromViewProgress = Math.round(this.addFromViewTotal * 0.8);\n\n const success = await tg.Submit();\n\n if (success) {\n this.addFromViewProgress = this.addFromViewTotal;\n this.sharedService.CreateSimpleNotification(\n `Added ${recordsToAdd.length} record${recordsToAdd.length !== 1 ? 's' : ''} to list`,\n 'success',\n 2500\n );\n this.closeAddFromViewDialog();\n this.refreshGrid();\n } else {\n LogError(\"Error adding records from view to list\");\n this.sharedService.CreateSimpleNotification(\"Failed to add some records\", 'error', 2500);\n this.showAddFromViewLoader = false;\n }\n }\n}\n","<div class=\"list-detail-container\">\n <!-- Header with title and Add button -->\n <div class=\"list-header\">\n <h1>{{ listRecord ? listRecord.Name : \"List\" }}</h1>\n <div class=\"add-dropdown-wrapper\">\n <button mjButton variant=\"primary\" class=\"add-btn\" (click)=\"toggleAddDropdown()\">\n <span class=\"fa-solid fa-plus\"></span>\n Add to List\n <span class=\"fa-solid fa-chevron-down add-dropdown-arrow\"></span>\n </button>\n @if (showAddDropdown) {\n <div class=\"add-dropdown-panel\">\n @for (option of addOptions; track option.Text) {\n <div class=\"add-dropdown-item\" (click)=\"onDropdownItemClick(option)\">\n <span class=\"add-dropdown-item-text\">{{ option.Text }}</span>\n @if (option.Description) {\n <span class=\"add-dropdown-item-desc\">{{ option.Description }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Custom Toolbar -->\n @if (!showLoader && listRecord) {\n <div class=\"custom-toolbar\">\n <div class=\"toolbar-left\">\n <span class=\"row-count\">{{ rowCount }} row{{ rowCount !== 1 ? 's' : '' }}</span>\n @if (selectedKeys.length > 0) {\n <span class=\"selection-count\">({{ selectedKeys.length }} selected)</span>\n }\n </div>\n <div class=\"toolbar-right\">\n @if (selectedKeys.length > 0) {\n <button mjButton\n (click)=\"openRemoveDialog()\"\n variant=\"flat\"\n class=\"toolbar-button remove-btn\">\n <span class=\"fa-solid fa-trash\"></span>\n Remove from List\n </button>\n }\n <button mjButton\n (click)=\"onRefreshClick()\"\n variant=\"flat\"\n class=\"toolbar-button\">\n <span class=\"fa-solid fa-rotate\"></span>\n Refresh\n </button>\n <button mjButton\n (click)=\"onExportClick()\"\n variant=\"flat\"\n class=\"toolbar-button\">\n <span class=\"fa-solid fa-file-export\"></span>\n Export\n </button>\n </div>\n </div>\n }\n\n <!-- Loading State -->\n @if (showLoader) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading list...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n <!-- Grid -->\n @if (!showLoader && listRecord) {\n <div class=\"grid-container\">\n <mj-list-detail-grid\n #listDetailGrid\n [listId]=\"ListID\"\n [listEntity]=\"listRecord\"\n [autoNavigate]=\"true\"\n [height]=\"'auto'\"\n [showToolbar]=\"false\"\n [toolbarConfig]=\"gridToolbarConfig\"\n [selectionMode]=\"'checkbox'\"\n (rowClicked)=\"onRowClicked($event)\"\n (rowDoubleClicked)=\"onRowDoubleClicked($event)\"\n (selectionChange)=\"onSelectionChange($event)\"\n (dataLoaded)=\"onDataLoaded($event)\">\n </mj-list-detail-grid>\n </div>\n }\n</div>\n\n<!-- Remove from List Confirmation Dialog -->\n@if (showRemoveDialog) {\n <mj-dialog\n [Visible]=\"true\"\n Title=\"Remove from List\"\n (Close)=\"closeRemoveDialog()\"\n [MinWidth]=\"350\"\n [Width]=\"450\">\n <div class=\"dialog-content\">\n @if (isRemoving) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Removing records...\" size=\"small\"></mj-loading>\n @if (removeTotal > 0) {\n <mj-progress-bar\n [Value]=\"removeProgressPercent\"\n class=\"progress-bar\">\n </mj-progress-bar>\n }\n </div>\n } @else {\n <div class=\"dialog-message\">\n <span class=\"fa-solid fa-triangle-exclamation warning-icon\"></span>\n <p>Are you sure you want to remove <strong>{{ selectedKeys.length }}</strong> record{{ selectedKeys.length !== 1 ? 's' : '' }} from this list?</p>\n <p class=\"dialog-note\">This will not delete the records, only remove them from this list.</p>\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton\n (click)=\"confirmRemoveFromList()\"\n [disabled]=\"isRemoving\"\n variant=\"danger\">\n Remove\n </button>\n <button mjButton\n (click)=\"closeRemoveDialog()\"\n [disabled]=\"isRemoving\"\n variant=\"outline\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Add Records Dialog -->\n@if (showAddRecordsDialog) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"'Add ' + (listRecord?.Entity || 'Records') + ' to List'\"\n (Close)=\"closeAddRecordsDialog()\"\n [MinWidth]=\"500\"\n [Width]=\"700\"\n [Height]=\"650\">\n <div class=\"dialog-content add-records-dialog\">\n @if (addDialogSaving) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Adding records to list...\" size=\"small\"></mj-loading>\n @if (addTotal > 0) {\n <mj-progress-bar\n [Value]=\"addProgressPercent\"\n class=\"progress-bar\">\n </mj-progress-bar>\n }\n </div>\n } @else {\n <!-- Search Input -->\n <div class=\"search-section\">\n <div class=\"search-input-wrapper\">\n <span class=\"fa-solid fa-search search-icon\"></span>\n <input\n class=\"mj-input search-input\"\n type=\"text\"\n [placeholder]=\"'Search ' + (listRecord?.Entity || 'records') + '...'\"\n [value]=\"addRecordsSearchFilter\"\n (input)=\"onAddRecordsSearchInputEvent($event)\" />\n </div>\n <span class=\"search-hint\">Type at least 2 characters to search</span>\n </div>\n <!-- Records List -->\n <div class=\"records-list\">\n @if (addDialogLoading) {\n <div class=\"list-loading\">\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n </div>\n } @else if (addableRecords.length === 0 && addRecordsSearchFilter.length >= 2) {\n <div class=\"empty-results\">\n <span class=\"fa-solid fa-search empty-icon\"></span>\n <p>No records found matching \"{{ addRecordsSearchFilter }}\"</p>\n </div>\n } @else if (addableRecords.length === 0) {\n <div class=\"empty-results\">\n <span class=\"fa-solid fa-list empty-icon\"></span>\n <p>Search for records to add to this list</p>\n </div>\n } @else {\n <!-- Selection controls -->\n <div class=\"selection-controls\">\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"selectAllAddable()\">Select All</button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"deselectAllAddable()\">Deselect All</button>\n <span class=\"selection-info\">{{ selectedAddableRecords.length }} selected</span>\n </div>\n <!-- Records -->\n <div class=\"records-scroll\">\n @for (record of addableRecords; track record.ID) {\n <div class=\"record-item\"\n [class.in-list]=\"record.isInList\"\n [class.selected]=\"record.isSelected\"\n (click)=\"toggleRecordSelection(record)\">\n <div class=\"record-checkbox\">\n @if (record.isInList) {\n <span class=\"fa-solid fa-check in-list-icon\" title=\"Already in list\"></span>\n } @else {\n <input type=\"checkbox\"\n [checked]=\"record.isSelected\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleRecordSelection(record)\">\n }\n </div>\n <div class=\"record-name\">{{ record.Name }}</div>\n @if (record.isInList) {\n <span class=\"in-list-badge\">In List</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton\n (click)=\"confirmAddRecords()\"\n [disabled]=\"addDialogSaving || selectedAddableRecords.length === 0\"\n variant=\"primary\">\n Add {{ selectedAddableRecords.length > 0 ? selectedAddableRecords.length : '' }} Record{{ selectedAddableRecords.length !== 1 ? 's' : '' }}\n </button>\n <button mjButton\n (click)=\"closeAddRecordsDialog()\"\n [disabled]=\"addDialogSaving\"\n variant=\"outline\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Add From View Dialog -->\n@if (showAddFromViewDialog) {\n <mj-dialog\n [Visible]=\"true\"\n Title=\"Add Records from Views\"\n (Close)=\"closeAddFromViewDialog()\"\n [MinWidth]=\"400\"\n [Width]=\"600\"\n [Height]=\"500\">\n <div class=\"dialog-content\">\n @if (showAddFromViewLoader && fetchingRecordsToSave) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Loading records from views...\" size=\"small\"></mj-loading>\n </div>\n } @else if (showAddFromViewLoader && addFromViewTotal > 0) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Adding records to list...\" size=\"small\"></mj-loading>\n <mj-progress-bar\n [Value]=\"addFromViewProgressPercent\"\n class=\"progress-bar\">\n </mj-progress-bar>\n </div>\n } @else if (showAddFromViewLoader) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Loading views...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n <p class=\"dialog-instruction\">Select views to add their records to this list:</p>\n <div class=\"views-list\">\n @if (!userViews || userViews.length === 0) {\n <div class=\"empty-results\">\n <span class=\"fa-solid fa-folder-open empty-icon\"></span>\n <p>No saved views found for this entity</p>\n </div>\n } @else {\n @for (view of userViews; track view.ID) {\n <div class=\"view-item\"\n [class.selected]=\"isViewSelected(view)\"\n (click)=\"toggleViewSelection(view)\">\n <input type=\"checkbox\"\n [checked]=\"isViewSelected(view)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleViewSelection(view)\">\n <span class=\"fa-solid fa-table-list view-icon\"></span>\n <span class=\"view-name\">{{ view.Name }}</span>\n </div>\n }\n }\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton\n (click)=\"confirmAddFromView()\"\n [disabled]=\"showAddFromViewLoader || userViewsToAdd.length === 0\"\n variant=\"primary\">\n Add from {{ userViewsToAdd.length }} View{{ userViewsToAdd.length !== 1 ? 's' : '' }}\n </button>\n <button mjButton\n (click)=\"closeAddFromViewDialog()\"\n [disabled]=\"showAddFromViewLoader\"\n variant=\"outline\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n"]}
1
+ {"version":3,"file":"single-list-detail.component.js","sourceRoot":"","sources":["../../../src/lib/single-list-detail/single-list-detail.component.ts","../../../src/lib/single-list-detail/single-list-detail.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnInit, ViewChild, ChangeDetectorRef, HostListener, ElementRef } from '@angular/core';\nimport { BaseEntity, CompositeKey, LogError, LogErrorEx, LogStatus, Metadata, RunView, RunViewResult } from '@memberjunction/core';\nimport { MJListDetailEntity, MJListDetailEntityExtended, MJListEntity, MJUserViewEntityExtended } from '@memberjunction/core-entities';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { ListDetailGridComponent, ListGridRowClickedEvent } from '@memberjunction/ng-list-detail-grid';\nimport { GridToolbarConfig } from '@memberjunction/ng-entity-viewer';\nimport { GraphQLDataProvider, GraphQLListsClient } from '@memberjunction/graphql-dataprovider';\nimport { CapabilitiesForLevel, type ListCapabilities, type ListDelta, type ListRefreshMode, type SharePermissionLevel } from '@memberjunction/lists-base';\nimport { ListSharingService } from '@memberjunction/ng-list-management';\nimport { ExportService } from '@memberjunction/ng-export-service';\nimport { Subject, debounceTime } from 'rxjs';\nimport { NewItemOption } from '../../generic/Item.types';\nimport { UUIDsEqual, NormalizeUUID } from '@memberjunction/global';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n/**\n * Represents a record that can be added to a list\n */\ninterface AddableRecord {\n ID: string;\n Name: string;\n isInList: boolean;\n isSelected: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-list-detail',\n templateUrl: './single-list-detail.component.html',\n styleUrls: ['./single-list-detail.component.css', '../../shared/first-tab-styles.css']\n})\nexport class SingleListDetailComponent extends BaseAngularComponent implements OnInit {\n\n @Input() public ListID: string = \"\";\n\n /**\n * Bumped on every list-membership mutation so the Usage stats sidebar\n * re-queries member count / growth / last-activity. Without this nudge,\n * those numbers drift from reality until a full page reload because the\n * stats component otherwise only loads on init.\n */\n public statsRefreshTrigger = 0;\n private bumpStatsRefresh(): void { this.statsRefreshTrigger++; }\n\n @ViewChild('listDetailGrid') listDetailGrid: ListDetailGridComponent | undefined;\n\n // List record\n public listRecord: MJListEntity | null = null;\n public showLoader: boolean = false;\n\n // Permission-level gating (Phase 2.8). Resolved lazily after the list\n // loads. Capabilities is exposed to the template for `@if` gating; the\n // server-side enforcement remains the source of truth — these flags\n // are a UX convenience so users don't see buttons they'll be rejected on.\n public capabilities: ListCapabilities = CapabilitiesForLevel(null);\n public currentLevel: SharePermissionLevel | null = null;\n\n // Lineage / refresh-from-source state. `sourceViewName` is loaded after\n // listRecord so the lineage badge can show a friendly view name; the\n // refresh-mode default falls back to the list's RefreshMode field but\n // can be overridden per-user via localStorage (see `loadLastUsedMode`).\n public sourceViewName: string | null = null;\n\n // Bulk-edit (Phase 5.2). Status, Move, Copy, Remove. Move flows through\n // the delta-confirm dialog because it produces drops on the source list.\n public bulkStatus: 'Active' | 'Complete' | 'Disabled' | 'Pending' | 'Rejected' | '' = '';\n public isApplyingBulkStatus = false;\n\n // Move / Copy state (mockups 23, 24). The picker dialog lists candidate\n // target lists scoped to the same entity. We load it lazily on first\n // open and cache for the session — opening the picker twice in a row\n // doesn't re-fetch unless the user explicitly hits \"Refresh\".\n public showMoveCopyDialog = false;\n public moveCopyMode: 'move' | 'copy' = 'move';\n public moveCopyTargetSearch = '';\n public moveCopyTargetCandidates: MJListEntity[] = [];\n public moveCopyTargetCandidatesLoading = false;\n public moveCopySelectedTarget: MJListEntity | null = null;\n public isApplyingMoveCopy = false;\n public moveCopyProgress = 0;\n public moveCopyTotal = 0;\n\n // Move delta-confirm. Built locally from the in-hand RecordIDs — no\n // server round-trip needed since we already know exactly what will be\n // added to the target and removed from the source. The drop-guard is\n // enforced at confirm time (mode='move' + ack checkbox).\n public moveDeltaConfirmVisible = false;\n public moveDelta: ListDelta | null = null;\n\n // Export picker (Phase 5.1, mockup 26). Opens before any export; lets\n // the user pick format + which entity fields to include. Fields are\n // resolved from EntityInfo on the loaded provider — no separate fetch.\n public showExportDialog = false;\n public exportFormat: 'excel' | 'csv' | 'json' = 'excel';\n public exportFields: Array<{ Name: string; DisplayName: string; Selected: boolean }> = [];\n public exportRecordCount = 0;\n public isExporting = false;\n public refreshMode: ListRefreshMode = 'Additive';\n public isPreviewingRefresh = false;\n public isApplyingRefresh = false;\n public refreshDelta: ListDelta | null = null;\n public refreshConfirmVisible = false;\n\n // Grid state\n public selectedKeys: string[] = [];\n public rowCount: number = 0;\n\n // Toolbar config - hide EDG toolbar, we'll use our own\n public gridToolbarConfig: GridToolbarConfig = {\n showSearch: false,\n showRefresh: false,\n showAdd: false,\n showDelete: false,\n showExport: false,\n showRowCount: false,\n showSelectionCount: false\n };\n\n // Remove from list dialog\n public showRemoveDialog: boolean = false;\n public isRemoving: boolean = false;\n public removeProgress: number = 0;\n public removeTotal: number = 0;\n\n // Add records dialog\n public showAddRecordsDialog: boolean = false;\n public addDialogLoading: boolean = false;\n public addDialogSaving: boolean = false;\n public addableRecords: AddableRecord[] = [];\n public addRecordsSearchFilter: string = \"\";\n public existingListDetailIds: Set<string> = new Set();\n public addProgress: number = 0;\n public addTotal: number = 0;\n private searchSubject: Subject<string> = new Subject();\n\n // Add from view dialog (existing)\n public showAddFromViewDialog: boolean = false;\n public showAddFromViewLoader: boolean = false;\n public userViews: MJUserViewEntityExtended[] | null = null;\n public userViewsToAdd: MJUserViewEntityExtended[] = [];\n public addFromViewProgress: number = 0;\n public addFromViewTotal: number = 0;\n /**\n * Stored percent (0–100) for the progress bar. Backed instead of computed\n * via getter because the original getter recomputed on every Angular CD\n * read and the async save loop mutated addFromViewProgress between the\n * initial check and dev-mode re-check — producing NG0100\n * ExpressionChangedAfterItHasBeenCheckedError floods in the console.\n * Updated via setAddFromViewProgress(...) at controlled points.\n */\n public addFromViewProgressPercent: number = 0;\n public fetchingRecordsToSave: boolean = false;\n\n // Dropdown button toggle state\n public showAddDropdown: boolean = false;\n\n // Dropdown menu options\n public addOptions: NewItemOption[] = [\n {\n Text: 'Add Records',\n Description: 'Search and add specific records to this list',\n Icon: 'search',\n Action: () => this.openAddRecordsDialog()\n },\n {\n Text: 'Add From View',\n Description: 'Add all records from a saved view',\n Icon: 'folder',\n Action: () => this.openAddFromViewDialog()\n }\n ];\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.showAddDropdown) {\n const target = event.target as HTMLElement;\n if (!this.elementRef.nativeElement.querySelector('.add-dropdown-wrapper')?.contains(target)) {\n this.showAddDropdown = false;\n }\n }\n }\n\n constructor(\n private sharedService: SharedService,\n private cdr: ChangeDetectorRef,\n private elementRef: ElementRef,\n private exportService: ExportService,\n private listSharingService: ListSharingService,\n ) {\n super();\n // Debounce search input\n this.searchSubject\n .pipe(debounceTime(300))\n .subscribe((searchText) => this.searchRecords(searchText));\n }\n\n public ngOnInit(): void {\n if (this.ListID) {\n // Defer the load to a macrotask so the initial assignment of\n // `listRecord` cannot land during Angular's dev-mode verify pass\n // (NG0100). The first CD cycle renders with listRecord=null\n // (\"List\"); the macrotask then loads, assigns, and fires its own\n // detectChanges in a fresh cycle.\n setTimeout(() => { void this.loadListRecord(); }, 0);\n }\n }\n\n /**\n * Load the list entity record\n */\n private async loadListRecord(): Promise<void> {\n if (!this.ListID) return;\n\n this.showLoader = true;\n\n try {\n const md = this.ProviderToUse;\n // Build + load against a LOCAL handle. Only assign to\n // this.listRecord after Load() succeeds — otherwise Angular's\n // change detector sees a transiently-populated half-loaded\n // entity (Name=null) before Load fills it in, and the title\n // binding throws ExpressionChangedAfterItHasBeenCheckedError.\n const list = await md.GetEntityObject<MJListEntity>(\"MJ: Lists\");\n const loadResult = await list.Load(this.ListID);\n\n if (!loadResult) {\n LogError(\"Error loading list with ID \" + this.ListID, undefined, list.LatestResult);\n this.listRecord = null;\n } else {\n this.listRecord = list;\n await this.loadLineageContext();\n await this.loadCapabilities();\n }\n } catch (error) {\n LogError(\"Error loading list\", undefined, error);\n this.listRecord = null;\n } finally {\n this.showLoader = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Load lineage context for the refresh-from-source UI:\n * - Resolve the source view's display name for the lineage badge.\n * - Initialize the refresh-mode dropdown from per-user last-used\n * preference, falling back to the list's RefreshMode field.\n * Silent on failure — the badge / refresh button just won't render\n * rather than blocking the rest of the detail view.\n */\n private async loadLineageContext(): Promise<void> {\n if (!this.listRecord?.SourceViewID) {\n this.sourceViewName = null;\n return;\n }\n this.refreshMode = this.loadLastUsedMode() ?? this.listRecord.RefreshMode;\n try {\n const view = await this.ProviderToUse.GetEntityObject<MJUserViewEntityExtended>('MJ: User Views');\n const loaded = await view.Load(this.listRecord.SourceViewID);\n this.sourceViewName = loaded ? view.Name : null;\n } catch (e) {\n LogError(`Failed to load source view name for list ${this.ListID}: ${e}`);\n this.sourceViewName = null;\n }\n }\n\n /**\n * Resolve the caller's permission level for this list (Owner / Edit /\n * View / null) and derive UI capability flags. Best-effort — if the\n * resolve fails we conservatively default to no-mutation (Viewer-like)\n * so we don't accidentally surface buttons the server will reject.\n */\n private async loadCapabilities(): Promise<void> {\n if (!this.listRecord) {\n this.capabilities = CapabilitiesForLevel(null);\n this.currentLevel = null;\n return;\n }\n try {\n const currentUserId = this.ProviderToUse.CurrentUser?.ID;\n if (!currentUserId) {\n this.capabilities = CapabilitiesForLevel('View');\n this.currentLevel = 'View';\n return;\n }\n // Fast path: the list's UserID is its owner. Owners always have full\n // capabilities and don't carry a Resource Permission row (ownership\n // is implicit), so the permission-row lookup below would return null\n // and incorrectly hide all edit/share/delete buttons. Mirrors the\n // owner short-circuit in the server-side ListSharing.ResolveEffectivePermission.\n if (UUIDsEqual(this.listRecord.UserID, currentUserId)) {\n this.currentLevel = 'Owner';\n this.capabilities = CapabilitiesForLevel('Owner');\n return;\n }\n // Non-owner: resolve via ListSharingService (GraphQL). Never instantiate\n // the server-side `ListSharing` class from a browser bundle.\n const level = (await this.listSharingService.getUserPermissionLevel(this.listRecord.ID, currentUserId)) as SharePermissionLevel | null;\n this.currentLevel = level;\n this.capabilities = CapabilitiesForLevel(level);\n } catch (e) {\n LogError(`loadCapabilities failed: ${e instanceof Error ? e.message : String(e)}`);\n this.capabilities = CapabilitiesForLevel('View');\n this.currentLevel = 'View';\n }\n }\n\n public get hasLineage(): boolean {\n return !!this.listRecord?.SourceViewID;\n }\n\n private loadLastUsedMode(): ListRefreshMode | null {\n try {\n const stored = localStorage.getItem(`mj.lists.refreshMode.${this.ListID}`);\n if (stored === 'Additive' || stored === 'Sync') return stored;\n } catch {\n // localStorage may not be available (SSR, private mode) — fall through.\n }\n return null;\n }\n\n private saveLastUsedMode(mode: ListRefreshMode): void {\n try {\n localStorage.setItem(`mj.lists.refreshMode.${this.ListID}`, mode);\n } catch {\n // ignore\n }\n }\n\n /**\n * Kick off a refresh-from-source preview. Builds the delta server-side\n * and opens the confirm dialog when it returns. The dialog enforces the\n * acknowledgement UX; the server enforces the actual drop guard.\n */\n public async onRefreshFromSource(): Promise<void> {\n if (!this.hasLineage || this.isPreviewingRefresh) return;\n this.isPreviewingRefresh = true;\n this.refreshDelta = null;\n this.cdr.detectChanges();\n try {\n const provider = this.ProviderToUse as unknown as GraphQLDataProvider;\n const client = new GraphQLListsClient(provider);\n const delta = await client.PreviewListDelta({\n Target: this.ListID,\n Source: { kind: 'view', viewId: this.listRecord!.SourceViewID! },\n Mode: this.refreshMode,\n });\n this.refreshDelta = delta;\n this.refreshConfirmVisible = true;\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n this.sharedService.CreateSimpleNotification(`Refresh preview failed: ${message}`, 'error', 5000);\n } finally {\n this.isPreviewingRefresh = false;\n this.cdr.detectChanges();\n }\n }\n\n public onRefreshConfirmCancel(): void {\n this.refreshConfirmVisible = false;\n this.refreshDelta = null;\n this.cdr.detectChanges();\n }\n\n public async onRefreshConfirmCommit(deltaToken: string): Promise<void> {\n if (!this.refreshDelta) return;\n this.isApplyingRefresh = true;\n this.cdr.detectChanges();\n try {\n const provider = this.ProviderToUse as unknown as GraphQLDataProvider;\n const client = new GraphQLListsClient(provider);\n const result = await client.ApplyListDelta({\n Delta: { ...this.refreshDelta, DeltaToken: deltaToken },\n ConfirmDrops: (this.refreshDelta.Counts.Remove ?? 0) > 0,\n });\n if (result.Success) {\n this.saveLastUsedMode(this.refreshMode);\n this.refreshConfirmVisible = false;\n this.refreshDelta = null;\n this.sharedService.CreateSimpleNotification(\n `Refresh applied: +${result.Counts?.Added ?? 0} / -${result.Counts?.Removed ?? 0}`,\n 'success',\n 3000,\n );\n // Reload list (for LastRefreshedAt) + grid in parallel.\n await this.loadListRecord();\n this.refreshGrid();\n this.bumpStatsRefresh();\n } else {\n this.sharedService.CreateSimpleNotification(`Refresh failed: ${result.Message}`, 'error', 5000);\n }\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n this.sharedService.CreateSimpleNotification(`Refresh failed: ${message}`, 'error', 5000);\n } finally {\n this.isApplyingRefresh = false;\n this.cdr.detectChanges();\n }\n }\n\n public onRefreshModeChange(mode: ListRefreshMode): void {\n this.refreshMode = mode;\n }\n\n // ==========================================\n // Grid Event Handlers\n // ==========================================\n\n onRowClicked(_event: ListGridRowClickedEvent): void {\n // Selection is handled by the grid\n }\n\n onRowDoubleClicked(_event: ListGridRowClickedEvent): void {\n // Navigation is handled by mj-list-detail-grid\n }\n\n onSelectionChange(keys: string[]): void {\n this.selectedKeys = keys;\n }\n\n onDataLoaded(event: { totalCount: number }): void {\n this.rowCount = event.totalCount;\n }\n\n refreshGrid(): void {\n if (this.listDetailGrid) {\n this.listDetailGrid.refresh();\n }\n }\n\n // ==========================================\n // Toolbar Actions\n // ==========================================\n\n // ==========================================\n // Progress Percentage Getters\n // ==========================================\n\n get removeProgressPercent(): number {\n return this.removeTotal > 0 ? Math.round((this.removeProgress / this.removeTotal) * 100) : 0;\n }\n\n get addProgressPercent(): number {\n return this.addTotal > 0 ? Math.round((this.addProgress / this.addTotal) * 100) : 0;\n }\n\n /** Update progress + recompute the stored percent atomically. Call this\n * from inside the save loop so the bound value is set in lockstep with\n * the underlying counter (avoids NG0100). */\n private setAddFromViewProgress(progress: number): void {\n this.addFromViewProgress = progress;\n this.addFromViewProgressPercent = this.addFromViewTotal > 0\n ? Math.round((progress / this.addFromViewTotal) * 100)\n : 0;\n }\n\n onRefreshClick(): void {\n this.refreshGrid();\n }\n\n onExportClick(): void {\n this.openExportDialog();\n }\n\n /**\n * Open the format + column picker (mockup 26). Resolves the candidate\n * field list from EntityInfo on the loaded provider — no extra\n * RunView. Default selection is every non-virtual entity field, which\n * matches what the underlying grid's \"export all\" path produced.\n */\n public openExportDialog(): void {\n if (!this.listRecord) {\n this.sharedService.CreateSimpleNotification('Load a list first before exporting.', 'info', 3000);\n return;\n }\n const md = this.ProviderToUse;\n const entityInfo = md.EntityByID(this.listRecord.EntityID);\n if (!entityInfo) {\n this.sharedService.CreateSimpleNotification(\n `Entity for this list not found in metadata.`,\n 'error', 4000,\n );\n return;\n }\n if (entityInfo.PrimaryKeys.length !== 1) {\n this.sharedService.CreateSimpleNotification(\n `Composite-PK entities ('${entityInfo.Name}') aren't yet supported for List export.`,\n 'warning', 5000,\n );\n return;\n }\n this.exportFields = entityInfo.Fields\n .filter((f) => f.IsVirtual !== true)\n .map((f) => ({\n Name: f.Name,\n DisplayName: f.DisplayName || f.Name,\n Selected: true,\n }));\n this.exportRecordCount = this.rowCount;\n this.exportFormat = 'excel';\n this.showExportDialog = true;\n this.cdr.detectChanges();\n }\n\n public closeExportDialog(): void {\n this.showExportDialog = false;\n this.cdr.detectChanges();\n }\n\n public selectAllExportFields(): void {\n for (const f of this.exportFields) f.Selected = true;\n }\n public selectNoneExportFields(): void {\n for (const f of this.exportFields) f.Selected = false;\n }\n public get selectedExportFieldCount(): number {\n return this.exportFields.filter((f) => f.Selected).length;\n }\n\n /**\n * Run the export with the user's chosen format + columns. Resolves\n * the list's member RecordIDs from the in-memory grid when possible\n * (avoids an extra RunView), then bulk-loads the underlying entity\n * rows restricted to the chosen Fields. Output is projected to\n * exactly the user's selected columns + ordering.\n */\n public async executeExport(): Promise<void> {\n if (!this.listRecord) return;\n const selectedFields = this.exportFields.filter((f) => f.Selected).map((f) => f.Name);\n if (selectedFields.length === 0) return;\n\n this.isExporting = true;\n this.cdr.detectChanges();\n try {\n const md = this.ProviderToUse;\n const entityInfo = md.EntityByID(this.listRecord.EntityID)!;\n const pk = entityInfo.PrimaryKeys[0].Name;\n\n // Fetch the list's member record IDs. The grid only holds the\n // current page, so we hit MJ: List Details directly to get the\n // full set — same single-PK assumption guarded at dialog open.\n const rv = RunView.FromMetadataProvider(md);\n const memberResult = await rv.RunView<{ RecordID: string }>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID='${this.listRecord.ID}'`,\n Fields: ['RecordID'],\n ResultType: 'simple',\n });\n if (!memberResult.Success) {\n this.sharedService.CreateSimpleNotification(\n `Export failed loading members: ${memberResult.ErrorMessage}`, 'error', 5000,\n );\n return;\n }\n const recordIds = (memberResult.Results ?? []).map((r) => String(r.RecordID));\n if (recordIds.length === 0) {\n this.sharedService.CreateSimpleNotification(\n 'List is empty — nothing to export.', 'info', 3000,\n );\n this.showExportDialog = false;\n return;\n }\n\n // Pull underlying entity rows restricted to the chosen fields.\n // Always include the PK so the projection round-trips cleanly.\n const fieldsForQuery = Array.from(new Set([pk, ...selectedFields]));\n const escaped = recordIds.map((id) => `'${id.replace(/'/g, \"''\")}'`).join(',');\n const rowResult = await rv.RunView<Record<string, unknown>>({\n EntityName: entityInfo.Name,\n ExtraFilter: `${pk} IN (${escaped})`,\n Fields: fieldsForQuery,\n ResultType: 'simple',\n });\n if (!rowResult.Success) {\n this.sharedService.CreateSimpleNotification(\n `Export failed loading rows: ${rowResult.ErrorMessage}`, 'error', 5000,\n );\n return;\n }\n // Project rows to exactly the columns + ordering the user picked.\n const rows = (rowResult.Results ?? []).map((row) => {\n const projected: Record<string, unknown> = {};\n for (const f of selectedFields) projected[f] = row[f];\n return projected;\n });\n\n const dateStamp = new Date().toISOString().slice(0, 10);\n const safeName = (this.listRecord.Name || 'list').replace(/[^a-z0-9_-]+/gi, '_');\n const ext = this.exportFormat === 'excel' ? 'xlsx' : this.exportFormat;\n const fileName = `${safeName}-${dateStamp}.${ext}`;\n const exportResult = this.exportFormat === 'excel'\n ? await this.exportService.toExcel(rows, { fileName, includeHeaders: true })\n : this.exportFormat === 'csv'\n ? await this.exportService.toCSV(rows, { fileName, includeHeaders: true })\n : await this.exportService.toJSON(rows, { fileName });\n\n if (exportResult.success) {\n this.exportService.downloadResult(exportResult);\n this.sharedService.CreateSimpleNotification(\n `Exported ${rows.length} record(s)`, 'success', 3000,\n );\n this.showExportDialog = false;\n } else {\n this.sharedService.CreateSimpleNotification('Export failed', 'error', 5000);\n }\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n this.sharedService.CreateSimpleNotification(`Export error: ${message}`, 'error', 5000);\n } finally {\n this.isExporting = false;\n this.cdr.detectChanges();\n }\n }\n\n toggleAddDropdown(): void {\n this.showAddDropdown = !this.showAddDropdown;\n }\n\n onDropdownItemClick(item: NewItemOption): void {\n this.showAddDropdown = false;\n if (item.Action) {\n item.Action();\n }\n }\n\n // ==========================================\n /**\n * Apply the chosen status to all selected list-detail rows. Re-uses\n * the existing extract-record-id-from-composite-key logic to map\n * `selectedKeys` to the actual `MJ: List Detail.RecordID` values.\n */\n public async applyBulkStatus(): Promise<void> {\n if (!this.listRecord || this.selectedKeys.length === 0 || !this.bulkStatus) return;\n this.isApplyingBulkStatus = true;\n this.cdr.detectChanges();\n try {\n const md = this.ProviderToUse;\n const rv = RunView.FromMetadataProvider(md);\n const entityInfo = md.EntityByID(this.listRecord.EntityID);\n const recordIds = this.selectedKeys.map((key) => {\n if (entityInfo && entityInfo.PrimaryKeys.length === 1) {\n const ck = new CompositeKey();\n ck.LoadFromConcatenatedString(key);\n return ck.KeyValuePairs[0]?.Value || key;\n }\n return key;\n });\n const filter = `ListID='${this.listRecord.ID}' AND RecordID IN (${recordIds.map((id) => `'${String(id).replace(/'/g, \"''\")}'`).join(',')})`;\n // Two-step: fetch just the IDs via a 'simple' RunView, then load each\n // entity through GetEntityObject(..., CurrentUser) so the entity is\n // born with the user context that Save() requires. RunView with\n // 'entity_object' returns entities WITHOUT a CurrentUser bound — fine\n // for read-only use, broken for Save (`ContextCurrentUser cannot be\n // null`).\n const idResult = await rv.RunView<{ ID: string }>({\n EntityName: 'MJ: List Details',\n ExtraFilter: filter,\n Fields: ['ID'],\n ResultType: 'simple',\n });\n if (!idResult.Success) {\n this.sharedService.CreateSimpleNotification(`Failed to load list details: ${idResult.ErrorMessage}`, 'error', 4000);\n return;\n }\n let updated = 0;\n let failed = 0;\n const failureMessages: string[] = [];\n for (const row of idResult.Results ?? []) {\n const detail = await md.GetEntityObject<MJListDetailEntity>('MJ: List Details', md.CurrentUser);\n const loaded = await detail.Load(row.ID);\n if (!loaded) {\n failed++;\n const reason = detail.LatestResult?.CompleteMessage ?? 'load failed';\n if (failureMessages.length < 3) failureMessages.push(reason);\n continue;\n }\n detail.Status = this.bulkStatus as never;\n const ok = await detail.Save();\n if (ok) {\n updated++;\n } else {\n failed++;\n const reason = detail.LatestResult?.CompleteMessage ?? 'unknown error';\n if (failureMessages.length < 3) failureMessages.push(reason);\n LogError(`Bulk status update failed for List Detail ${row.ID}: ${reason}`);\n }\n }\n this.sharedService.CreateSimpleNotification(\n failed === 0\n ? `Updated ${updated} item(s) to '${this.bulkStatus}'`\n : `Updated ${updated}, ${failed} failed: ${failureMessages.join(' | ')}`,\n failed === 0 ? 'success' : 'warning',\n failed === 0 ? 3000 : 8000,\n );\n this.bulkStatus = '';\n // Defer the grid refresh to the next microtask — see comment in\n // confirmRemoveFromList for why running it synchronously here\n // triggers NG0100 and silently breaks the UI refresh.\n await Promise.resolve();\n this.refreshGrid();\n this.bumpStatsRefresh();\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n this.sharedService.CreateSimpleNotification(`Bulk update failed: ${message}`, 'error', 5000);\n } finally {\n this.isApplyingBulkStatus = false;\n this.cdr.detectChanges();\n }\n }\n\n // ==========================================\n // Bulk Move / Copy (mockups 23, 24)\n //\n // Move = insert into target + delete from source (drops on source).\n // Copy = insert into target only (additive — no drops).\n //\n // The drop-guard for Move is enforced by routing through the local\n // delta-confirm dialog: the user must ack the removal before the\n // mutation runs. We build a synthetic ListDelta locally because we\n // already know the exact ToAdd / ToRemove sets — no server round-trip\n // needed for the preview. Apply step uses direct entity Save/Delete\n // inside a single TransactionGroup (same pattern as Remove).\n // ==========================================\n\n public openMoveDialog(): void { this.openMoveCopyDialog('move'); }\n public openCopyDialog(): void { this.openMoveCopyDialog('copy'); }\n\n private openMoveCopyDialog(mode: 'move' | 'copy'): void {\n if (!this.listRecord || this.selectedKeys.length === 0) {\n this.sharedService.CreateSimpleNotification('Please select records first', 'warning', 2500);\n return;\n }\n this.moveCopyMode = mode;\n this.moveCopySelectedTarget = null;\n this.moveCopyTargetSearch = '';\n this.showMoveCopyDialog = true;\n // Load candidates once per dialog open. We don't keep them in\n // permanent component state because the user could create/delete\n // lists between opens, and the target picker isn't visible often\n // enough to justify long-lived caching.\n void this.loadMoveCopyTargets();\n this.cdr.detectChanges();\n }\n\n public closeMoveCopyDialog(): void {\n this.showMoveCopyDialog = false;\n this.moveCopyTargetCandidates = [];\n this.moveCopySelectedTarget = null;\n this.cdr.detectChanges();\n }\n\n public selectMoveCopyTarget(target: MJListEntity): void {\n this.moveCopySelectedTarget = target;\n }\n\n public get filteredMoveCopyTargets(): MJListEntity[] {\n const term = this.moveCopyTargetSearch.trim().toLowerCase();\n if (!term) return this.moveCopyTargetCandidates;\n return this.moveCopyTargetCandidates.filter((l) =>\n l.Name.toLowerCase().includes(term) ||\n (l.Description?.toLowerCase().includes(term) ?? false)\n );\n }\n\n public get moveCopyProgressPercent(): number {\n return this.moveCopyTotal > 0 ? Math.round((this.moveCopyProgress / this.moveCopyTotal) * 100) : 0;\n }\n\n /** Load candidate target lists — same Entity, owned by or shared with\n * the current user, excluding the list we're standing on. One RunView\n * on open; results stay in memory until the dialog closes. */\n private async loadMoveCopyTargets(): Promise<void> {\n if (!this.listRecord) return;\n this.moveCopyTargetCandidatesLoading = true;\n this.cdr.detectChanges();\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n // Filter to same EntityID + exclude the current list. UserID filter\n // would over-restrict (Shared-With-Me lists should be valid targets\n // when the user has Edit there); the server enforces the real\n // permission on the per-row Save, so listing extra entries is fine.\n const filter = `EntityID='${this.listRecord.EntityID}' AND ID<>'${this.listRecord.ID}'`;\n const result = await rv.RunView<MJListEntity>({\n EntityName: 'MJ: Lists',\n ExtraFilter: filter,\n OrderBy: 'Name',\n ResultType: 'simple',\n MaxRows: 500,\n });\n if (result.Success) {\n this.moveCopyTargetCandidates = (result.Results ?? []) as MJListEntity[];\n } else {\n this.moveCopyTargetCandidates = [];\n this.sharedService.CreateSimpleNotification(`Failed to load target lists: ${result.ErrorMessage}`, 'error', 4000);\n }\n } catch (e) {\n this.moveCopyTargetCandidates = [];\n const message = e instanceof Error ? e.message : String(e);\n this.sharedService.CreateSimpleNotification(`Failed to load target lists: ${message}`, 'error', 4000);\n } finally {\n this.moveCopyTargetCandidatesLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * \"Continue\" / \"Copy\" click in the target picker. For Copy we apply\n * immediately. For Move we build a local Delta and show the confirm\n * dialog — the actual mutation fires from onMoveConfirmCommit().\n */\n public async confirmMoveCopy(): Promise<void> {\n if (!this.listRecord || !this.moveCopySelectedTarget || this.selectedKeys.length === 0) return;\n if (this.moveCopyMode === 'copy') {\n await this.applyMoveCopy(false);\n return;\n }\n // Move: show delta-confirm so the user explicitly acks the source-side drop.\n const recordIds = this.extractSelectedRecordIds();\n this.moveDelta = this.buildMoveDelta(recordIds);\n this.showMoveCopyDialog = false;\n this.moveDeltaConfirmVisible = true;\n this.cdr.detectChanges();\n }\n\n public onMoveConfirmCancel(): void {\n this.moveDeltaConfirmVisible = false;\n this.moveDelta = null;\n // Re-open the target picker so the user can change their mind without\n // losing their selection.\n this.showMoveCopyDialog = true;\n this.cdr.detectChanges();\n }\n\n public async onMoveConfirmCommit(_deltaToken: string): Promise<void> {\n this.moveDeltaConfirmVisible = false;\n this.cdr.detectChanges();\n await this.applyMoveCopy(true);\n }\n\n /**\n * Pull RecordIDs out of selectedKeys. selectedKeys arrive from the\n * grid in concatenated-key format (\"ID|<value>\"). For single-PK entities\n * MJ: List Details stores the raw value; for composite-PK entities it\n * stores the full concatenated string. We normalize based on entity\n * metadata — same logic as confirmRemoveFromList.\n */\n private extractSelectedRecordIds(): string[] {\n const md = this.ProviderToUse;\n const entityInfo = this.listRecord ? md.EntityByID(this.listRecord.EntityID) : null;\n return this.selectedKeys.map((key) => {\n if (entityInfo && entityInfo.PrimaryKeys.length === 1) {\n const ck = new CompositeKey();\n ck.LoadFromConcatenatedString(key);\n return String(ck.KeyValuePairs[0]?.Value ?? key);\n }\n return key;\n });\n }\n\n /**\n * Build a synthetic ListDelta for the Move-confirm dialog. Token is\n * a sentinel — we never call server-side ApplyDelta for this flow,\n * the mutations run client-side inside a transaction group. The\n * delta-confirm component only reads counts + ToAdd/ToRemove + Warnings;\n * the token round-trips through the (Confirm) emit but is unused.\n */\n private buildMoveDelta(recordIds: string[]): ListDelta {\n const removeCount = recordIds.length;\n return {\n TargetListId: this.listRecord!.ID,\n EntityName: this.listRecord!.Entity ?? '',\n ToAdd: [],\n ToRemove: recordIds,\n Unchanged: [],\n Counts: {\n Add: 0,\n Remove: removeCount,\n Unchanged: 0,\n SourceTotal: 0,\n TargetTotal: this.rowCount,\n },\n Warnings: [{\n Code: 'WILL_REMOVE_RECORDS',\n Message: `${removeCount} record(s) will be removed from \"${this.listRecord!.Name}\" as part of the move`,\n Details: { Count: removeCount },\n }],\n // Sentinel — client-side flow doesn't round-trip this.\n DeltaToken: 'client-move-delta',\n };\n }\n\n /**\n * Execute the move/copy. Insert all records into the target, and for\n * Move also delete the matching MJ: List Details from the source. All\n * mutations run in a single TransactionGroup so partial failures don't\n * leave records duplicated in both lists.\n */\n private async applyMoveCopy(isMove: boolean): Promise<void> {\n if (!this.listRecord || !this.moveCopySelectedTarget) return;\n const source = this.listRecord;\n const target = this.moveCopySelectedTarget;\n const recordIds = this.extractSelectedRecordIds();\n if (recordIds.length === 0) return;\n\n this.isApplyingMoveCopy = true;\n this.moveCopyTotal = recordIds.length;\n this.moveCopyProgress = 0;\n this.cdr.detectChanges();\n\n const md = this.ProviderToUse;\n const rv = RunView.FromMetadataProvider(md);\n\n try {\n // Dedupe against the target: skip records already present so a\n // partially-completed previous run can be re-tried cleanly.\n const filterIds = recordIds.map((id) => `'${String(id).replace(/'/g, \"''\")}'`).join(',');\n const existingTarget = await rv.RunView<{ RecordID: string }>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID='${target.ID}' AND RecordID IN (${filterIds})`,\n Fields: ['RecordID'],\n ResultType: 'simple',\n });\n const alreadyInTarget = new Set(\n (existingTarget.Results ?? []).map((r) => String((r as { RecordID: string }).RecordID))\n );\n const toAdd = recordIds.filter((id) => !alreadyInTarget.has(id));\n\n // For Move, look up the source-side ListDetail rows to delete.\n let sourceRows: MJListDetailEntity[] = [];\n if (isMove) {\n const lookup = await rv.RunView<MJListDetailEntity>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID='${source.ID}' AND RecordID IN (${filterIds})`,\n ResultType: 'entity_object',\n });\n if (!lookup.Success) {\n throw new Error(`Failed to load source rows: ${lookup.ErrorMessage}`);\n }\n sourceRows = lookup.Results ?? [];\n }\n\n const tg = await md.CreateTransactionGroup();\n\n // Queue inserts into target.\n for (const recordId of toAdd) {\n const newDetail = await md.GetEntityObject<MJListDetailEntity>('MJ: List Details', md.CurrentUser);\n newDetail.NewRecord();\n newDetail.ListID = target.ID;\n newDetail.RecordID = recordId;\n newDetail.Sequence = 0;\n newDetail.TransactionGroup = tg;\n await newDetail.Save();\n }\n\n // Queue source-side deletes for Move only.\n if (isMove) {\n for (const row of sourceRows) {\n row.TransactionGroup = tg;\n await row.Delete();\n }\n }\n\n const ok = await tg.Submit();\n this.moveCopyProgress = this.moveCopyTotal;\n\n if (!ok) {\n this.sharedService.CreateSimpleNotification(\n `${isMove ? 'Move' : 'Copy'} partially failed — some changes may not have applied`,\n 'error',\n 5000,\n );\n return;\n }\n\n const skippedNote = alreadyInTarget.size > 0\n ? ` (${alreadyInTarget.size} already in target — skipped)`\n : '';\n this.sharedService.CreateSimpleNotification(\n `${isMove ? 'Moved' : 'Copied'} ${toAdd.length} record(s) to \"${target.Name}\"${skippedNote}`,\n 'success',\n 3000,\n );\n\n // Same NG0100 pattern as confirmRemoveFromList — defer cleanup +\n // refresh by a microtask so the dialog/visibility flips happen in\n // a fresh change-detection cycle.\n await Promise.resolve();\n this.closeMoveCopyDialog();\n this.moveDelta = null;\n if (isMove) {\n this.listDetailGrid?.clearSelection();\n this.refreshGrid();\n this.bumpStatsRefresh();\n }\n this.cdr.detectChanges();\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n LogError(`Move/Copy failed: ${message}`);\n this.sharedService.CreateSimpleNotification(`${isMove ? 'Move' : 'Copy'} failed: ${message}`, 'error', 5000);\n } finally {\n this.isApplyingMoveCopy = false;\n this.cdr.detectChanges();\n }\n }\n\n // ==========================================\n // Remove from List Dialog\n // ==========================================\n\n openRemoveDialog(): void {\n if (this.selectedKeys.length === 0) {\n this.sharedService.CreateSimpleNotification(\"Please select records to remove\", 'warning', 2500);\n return;\n }\n this.showRemoveDialog = true;\n }\n\n closeRemoveDialog(): void {\n this.showRemoveDialog = false;\n this.isRemoving = false;\n this.removeProgress = 0;\n this.removeTotal = 0;\n }\n\n async confirmRemoveFromList(): Promise<void> {\n if (!this.listRecord || this.selectedKeys.length === 0) return;\n\n this.isRemoving = true;\n this.removeTotal = this.selectedKeys.length;\n this.removeProgress = 0;\n\n const md = this.ProviderToUse;\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const entityInfo = md.EntityByID(this.listRecord.EntityID);\n\n // selectedKeys from grid are in concatenated format (ID|value)\n // For single PK entities, RecordID in DB is just the raw value\n // For composite PK entities, RecordID in DB is the concatenated format\n // Extract the appropriate format for the query\n const selectedRecordIds = this.selectedKeys.map(key => {\n if (entityInfo && entityInfo.PrimaryKeys.length === 1) {\n // Single PK: extract just the value from concatenated format\n const compositeKey = new CompositeKey();\n compositeKey.LoadFromConcatenatedString(key);\n return compositeKey.KeyValuePairs[0]?.Value || key;\n } else {\n // Composite PK: use full concatenated format as-is\n return key;\n }\n });\n\n const listDetailsFilter = `ListID = '${this.listRecord.ID}' AND RecordID IN (${selectedRecordIds.map(id => `'${id}'`).join(',')})`;\n\n const listDetailsResult = await rv.RunView<MJListDetailEntity>({\n EntityName: 'MJ: List Details',\n ExtraFilter: listDetailsFilter,\n ResultType: 'entity_object'\n }, md.CurrentUser);\n\n if (!listDetailsResult.Success) {\n LogError(\"Error loading list details for removal\", undefined, listDetailsResult.ErrorMessage);\n this.sharedService.CreateSimpleNotification(\"Failed to remove records\", 'error', 2500);\n this.isRemoving = false;\n return;\n }\n\n // Use transaction group for bulk delete\n const tg = await md.CreateTransactionGroup();\n const listDetails = listDetailsResult.Results;\n\n for (const listDetail of listDetails) {\n listDetail.TransactionGroup = tg;\n await listDetail.Delete();\n }\n\n const success = await tg.Submit();\n\n if (success) {\n this.removeProgress = this.removeTotal;\n this.sharedService.CreateSimpleNotification(\n `Removed ${listDetails.length} record${listDetails.length !== 1 ? 's' : ''} from list`,\n 'success',\n 2500\n );\n // Defer cleanup + refresh to the next microtask. Running these\n // synchronously inside the current change-detection cycle\n // triggers NG0100 (`@if (showRemoveDialog)` flips false while\n // children are still being checked), which leaves the grid in a\n // stale state — the deletion succeeds server-side but the UI\n // doesn't re-fetch until the user navigates away and back.\n await Promise.resolve();\n this.closeRemoveDialog();\n this.listDetailGrid?.clearSelection();\n this.refreshGrid();\n this.bumpStatsRefresh();\n this.cdr.detectChanges();\n } else {\n LogError(\"Error removing records from list\");\n this.sharedService.CreateSimpleNotification(\"Failed to remove some records\", 'error', 2500);\n this.isRemoving = false;\n }\n }\n\n // ==========================================\n // Add Records Dialog\n // ==========================================\n\n async openAddRecordsDialog(): Promise<void> {\n this.showAddRecordsDialog = true;\n this.addableRecords = [];\n this.addRecordsSearchFilter = \"\";\n this.addDialogLoading = true;\n this.addDialogSaving = false;\n\n // Load existing list detail IDs to mark which records are already in the list\n await this.loadExistingListDetailIds();\n this.addDialogLoading = false;\n }\n\n closeAddRecordsDialog(): void {\n this.showAddRecordsDialog = false;\n this.addableRecords = [];\n this.addRecordsSearchFilter = \"\";\n this.existingListDetailIds.clear();\n this.addDialogSaving = false;\n this.addProgress = 0;\n this.addTotal = 0;\n }\n\n private async loadExistingListDetailIds(): Promise<void> {\n if (!this.listRecord) return;\n\n const md = this.ProviderToUse;\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n\n const result = await rv.RunView<{ RecordID: string }>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${this.listRecord.ID}'`,\n Fields: ['RecordID'],\n ResultType: 'simple'\n }, md.CurrentUser);\n\n if (result.Success) {\n this.existingListDetailIds = new Set(result.Results.map(r => NormalizeUUID(r.RecordID)));\n }\n }\n\n onAddRecordsSearchInputEvent(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.onAddRecordsSearchChange(value);\n }\n\n onAddRecordsSearchChange(value: string): void {\n this.addRecordsSearchFilter = value;\n this.searchSubject.next(value);\n }\n\n private async searchRecords(searchText: string): Promise<void> {\n if (!this.listRecord || !searchText || searchText.length < 2) {\n this.addableRecords = [];\n return;\n }\n\n this.addDialogLoading = true;\n\n const md = this.ProviderToUse;\n const sourceEntityInfo = md.EntityByID(this.listRecord.EntityID);\n if (!sourceEntityInfo) {\n this.addDialogLoading = false;\n return;\n }\n\n const nameField = sourceEntityInfo.Fields.find(field => field.IsNameField);\n const pkField = sourceEntityInfo.FirstPrimaryKey?.Name || 'ID';\n\n let filter: string | undefined;\n if (nameField) {\n filter = `${nameField.Name} LIKE '%${searchText}%'`;\n }\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result: RunViewResult = await rv.RunView({\n EntityName: this.listRecord.Entity,\n ExtraFilter: filter,\n MaxRows: 100,\n ResultType: 'simple'\n });\n\n if (result.Success) {\n this.addableRecords = result.Results.map((record: Record<string, unknown>) => {\n const recordId = String(record[pkField]);\n return {\n ID: recordId,\n Name: nameField ? String(record[nameField.Name]) : recordId,\n isInList: this.existingListDetailIds.has(NormalizeUUID(recordId)),\n isSelected: false\n };\n });\n }\n\n this.addDialogLoading = false;\n this.cdr.detectChanges();\n }\n\n toggleRecordSelection(record: AddableRecord): void {\n if (record.isInList) return; // Can't select records already in list\n record.isSelected = !record.isSelected;\n }\n\n get selectedAddableRecords(): AddableRecord[] {\n return this.addableRecords.filter(r => r.isSelected);\n }\n\n selectAllAddable(): void {\n this.addableRecords.forEach(r => {\n if (!r.isInList) r.isSelected = true;\n });\n }\n\n deselectAllAddable(): void {\n this.addableRecords.forEach(r => r.isSelected = false);\n }\n\n async confirmAddRecords(): Promise<void> {\n const recordsToAdd = this.selectedAddableRecords;\n if (recordsToAdd.length === 0 || !this.listRecord) return;\n\n this.addDialogSaving = true;\n // Reserve 20% of progress for tg.Submit()\n this.addTotal = recordsToAdd.length;\n this.addProgress = 0;\n const progressPerRecord = 0.8 / recordsToAdd.length; // 80% for individual saves\n\n const md = this.ProviderToUse;\n\n // Use transaction group for bulk insert\n const tg = await md.CreateTransactionGroup();\n\n for (let i = 0; i < recordsToAdd.length; i++) {\n const record = recordsToAdd[i];\n const listDetail = await md.GetEntityObject<MJListDetailEntityExtended>(\"MJ: List Details\", md.CurrentUser);\n listDetail.ListID = this.listRecord.ID;\n listDetail.RecordID = record.ID;\n listDetail.TransactionGroup = tg;\n const result = await listDetail.Save();\n if (!result) {\n LogErrorEx({\n message: listDetail.LatestResult?.CompleteMessage\n });\n }\n // Update progress (0-80%)\n this.addProgress = Math.round((i + 1) * progressPerRecord * this.addTotal);\n }\n\n // Show 80% complete before submit\n this.addProgress = Math.round(this.addTotal * 0.8);\n\n const success = await tg.Submit();\n\n if (success) {\n this.addProgress = this.addTotal;\n this.sharedService.CreateSimpleNotification(\n `Added ${recordsToAdd.length} record${recordsToAdd.length !== 1 ? 's' : ''} to list`,\n 'success',\n 2500\n );\n // Defer dialog close + grid refresh to the next microtask. See\n // confirmRemoveFromList for the NG0100 background.\n await Promise.resolve();\n this.closeAddRecordsDialog();\n this.refreshGrid();\n this.bumpStatsRefresh();\n this.cdr.detectChanges();\n } else {\n LogError(\"Error adding records to list\");\n this.sharedService.CreateSimpleNotification(\"Failed to add some records\", 'error', 2500);\n this.addDialogSaving = false;\n }\n }\n\n // ==========================================\n // Add From View Dialog (existing functionality, cleaned up)\n // ==========================================\n\n async openAddFromViewDialog(): Promise<void> {\n this.showAddFromViewDialog = true;\n this.userViewsToAdd = [];\n\n if (!this.userViews) {\n await this.loadEntityViews();\n }\n }\n\n closeAddFromViewDialog(): void {\n this.showAddFromViewDialog = false;\n this.userViewsToAdd = [];\n this.showAddFromViewLoader = false;\n this.addFromViewTotal = 0;\n this.setAddFromViewProgress(0);\n }\n\n private async loadEntityViews(): Promise<void> {\n if (!this.listRecord || !this.listRecord.Entity) return;\n\n this.showAddFromViewLoader = true;\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const md = this.ProviderToUse;\n\n const runViewResult = await rv.RunView<MJUserViewEntityExtended>({\n EntityName: \"MJ: User Views\",\n ExtraFilter: `UserID = '${md.CurrentUser.ID}' AND EntityID = '${this.listRecord.EntityID}'`,\n ResultType: 'entity_object'\n }, md.CurrentUser);\n\n if (!runViewResult.Success) {\n LogError(`Error loading User Views for entity ${this.listRecord.Entity}`);\n } else {\n this.userViews = runViewResult.Results;\n }\n\n this.showAddFromViewLoader = false;\n this.cdr.detectChanges();\n }\n\n toggleViewSelection(view: MJUserViewEntityExtended): void {\n const index = this.userViewsToAdd.findIndex(v => UUIDsEqual(v.ID, view.ID));\n if (index >= 0) {\n this.userViewsToAdd.splice(index, 1);\n } else {\n this.userViewsToAdd.push(view);\n }\n }\n\n isViewSelected(view: MJUserViewEntityExtended): boolean {\n return this.userViewsToAdd.some(v => UUIDsEqual(v.ID, view.ID));\n }\n\n async confirmAddFromView(): Promise<void> {\n if (!this.listRecord || this.userViewsToAdd.length === 0) return;\n\n this.showAddFromViewLoader = true;\n this.fetchingRecordsToSave = true;\n this.cdr.detectChanges();\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const md = this.ProviderToUse;\n\n // Collect all unique record IDs from selected views\n const recordIdSet = new Set<string>();\n\n for (const userView of this.userViewsToAdd) {\n const runViewResult = await rv.RunView({\n ViewID: userView.ID,\n ViewEntity: userView,\n Fields: [\"ID\"]\n }, md.CurrentUser);\n\n if (runViewResult.Success) {\n const records = runViewResult.Results as Array<Record<string, string>>;\n records.forEach(r => recordIdSet.add(NormalizeUUID(r.ID)));\n }\n }\n\n // Filter out records already in the list\n await this.loadExistingListDetailIds();\n const recordsToAdd = [...recordIdSet].filter(id => !this.existingListDetailIds.has(id));\n\n this.addFromViewTotal = recordsToAdd.length;\n this.setAddFromViewProgress(0);\n this.fetchingRecordsToSave = false;\n this.cdr.detectChanges();\n const progressPerRecord = 0.8 / Math.max(recordsToAdd.length, 1); // 80% for individual saves\n\n if (recordsToAdd.length === 0) {\n this.sharedService.CreateSimpleNotification(\"All records already in list\", 'info', 2500);\n this.showAddFromViewLoader = false;\n this.cdr.detectChanges();\n return;\n }\n\n LogStatus(`Adding ${recordsToAdd.length} records to list`);\n\n // Use transaction group for bulk insert\n const tg = await md.CreateTransactionGroup();\n\n for (let i = 0; i < recordsToAdd.length; i++) {\n const recordID = recordsToAdd[i];\n const listDetail = await md.GetEntityObject<MJListDetailEntityExtended>(\"MJ: List Details\", md.CurrentUser);\n listDetail.ListID = this.listRecord.ID;\n listDetail.RecordID = recordID;\n listDetail.TransactionGroup = tg;\n const result = await listDetail.Save();\n if (!result) {\n LogErrorEx({\n message: listDetail.LatestResult?.CompleteMessage\n });\n }\n // Update progress (0-80%) via the helper so both the counter and the\n // bound percent move in lockstep, then detectChanges() to close the\n // CD cycle on this iteration. Without detectChanges() the next await\n // can yield in the middle of a cycle and Angular's dev-mode re-check\n // catches the percent changing → NG0100 flood.\n this.setAddFromViewProgress(Math.round((i + 1) * progressPerRecord * this.addFromViewTotal));\n this.cdr.detectChanges();\n }\n\n // Show 80% complete before submit\n this.setAddFromViewProgress(Math.round(this.addFromViewTotal * 0.8));\n this.cdr.detectChanges();\n\n const success = await tg.Submit();\n\n if (success) {\n this.setAddFromViewProgress(this.addFromViewTotal);\n this.sharedService.CreateSimpleNotification(\n `Added ${recordsToAdd.length} record${recordsToAdd.length !== 1 ? 's' : ''} to list`,\n 'success',\n 2500\n );\n // Defer dialog close + grid refresh to the next microtask. See\n // confirmRemoveFromList for the NG0100 background.\n await Promise.resolve();\n this.closeAddFromViewDialog();\n this.refreshGrid();\n this.bumpStatsRefresh();\n this.cdr.detectChanges();\n } else {\n LogError(\"Error adding records from view to list\");\n this.sharedService.CreateSimpleNotification(\"Failed to add some records\", 'error', 2500);\n this.showAddFromViewLoader = false;\n }\n }\n}\n","<div class=\"list-detail-container\">\n <!-- Header with title and Add button -->\n <div class=\"list-header\">\n <div class=\"list-header__titleblock\">\n @if (listRecord) {\n <h1>{{ listRecord.Name }}</h1>\n } @else {\n <h1>List</h1>\n }\n @if (hasLineage) {\n <div class=\"lineage-badge\" [title]=\"'Source view: ' + (sourceViewName ?? 'unknown')\">\n <i class=\"fa-solid fa-link\"></i>\n <span>\n @if (listRecord?.UseSnapshot) {\n Snapshot of: <strong>{{ sourceViewName ?? '(unknown view)' }}</strong>\n } @else {\n Live view: <strong>{{ sourceViewName ?? '(unknown view)' }}</strong>\n }\n </span>\n @if (listRecord?.LastRefreshedAt) {\n <span class=\"lineage-badge__refreshed\">\n · last refreshed {{ listRecord!.LastRefreshedAt | date:'medium' }}\n </span>\n }\n </div>\n }\n @if (listRecord) {\n <!-- Tags section (Phase 4.2). Editable on the detail view. -->\n <div class=\"list-detail__tags\">\n <mj-tag-chips\n [Provider]=\"Provider\"\n EntityName=\"MJ: Lists\"\n [RecordID]=\"listRecord.ID\"\n [Editable]=\"capabilities.CanEdit\"\n [MaxDisplay]=\"20\">\n </mj-tag-chips>\n </div>\n }\n </div>\n @if (capabilities.CanEdit) {\n <div class=\"add-dropdown-wrapper\">\n <button mjButton variant=\"primary\" class=\"add-btn\" (click)=\"toggleAddDropdown()\">\n <span class=\"fa-solid fa-plus\"></span>\n Add to List\n <span class=\"fa-solid fa-chevron-down add-dropdown-arrow\"></span>\n </button>\n @if (showAddDropdown) {\n <div class=\"add-dropdown-panel\">\n @for (option of addOptions; track option.Text) {\n <div class=\"add-dropdown-item\" (click)=\"onDropdownItemClick(option)\">\n <span class=\"add-dropdown-item-text\">{{ option.Text }}</span>\n @if (option.Description) {\n <span class=\"add-dropdown-item-desc\">{{ option.Description }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n } @else if (currentLevel) {\n <!-- Viewer-perspective badge so users understand why mutation\n controls are absent. Mirrors mockup 19. -->\n <span class=\"permission-badge permission-badge--viewer\">\n <i class=\"fa-solid fa-eye\"></i>\n Viewer access\n </span>\n }\n </div>\n\n <!-- Custom Toolbar -->\n @if (!showLoader && listRecord) {\n <div class=\"custom-toolbar\">\n <div class=\"toolbar-left\">\n <span class=\"row-count\">{{ rowCount }} row{{ rowCount !== 1 ? 's' : '' }}</span>\n @if (selectedKeys.length > 0) {\n <span class=\"selection-count\">({{ selectedKeys.length }} selected)</span>\n }\n </div>\n <div class=\"toolbar-right\">\n @if (selectedKeys.length > 0 && capabilities.CanEdit) {\n <!-- Bulk-edit toolbar (Phase 5.2, mockups 23/24).\n Move/Copy open the target-list picker. Move then routes\n through the delta-confirm dialog because the source side\n drops; Copy is additive and applies directly. -->\n <button mjButton\n (click)=\"openMoveDialog()\"\n variant=\"flat\"\n class=\"toolbar-button\"\n title=\"Move selected records to another list\">\n <span class=\"fa-solid fa-arrow-right-arrow-left\"></span>\n Move…\n </button>\n <button mjButton\n (click)=\"openCopyDialog()\"\n variant=\"flat\"\n class=\"toolbar-button\"\n title=\"Copy selected records to another list (keeps them here too)\">\n <span class=\"fa-solid fa-copy\"></span>\n Copy…\n </button>\n <select\n class=\"mj-input mj-select bulk-status-select\"\n [(ngModel)]=\"bulkStatus\"\n [disabled]=\"isApplyingBulkStatus\"\n title=\"Set status on selected items\">\n <option value=\"\">Set status…</option>\n <option value=\"Active\">Active</option>\n <option value=\"Complete\">Complete</option>\n <option value=\"Pending\">Pending</option>\n <option value=\"Disabled\">Disabled</option>\n <option value=\"Rejected\">Rejected</option>\n </select>\n <button mjButton\n (click)=\"applyBulkStatus()\"\n [disabled]=\"!bulkStatus || isApplyingBulkStatus\"\n variant=\"flat\"\n class=\"toolbar-button\">\n @if (isApplyingBulkStatus) {\n <span class=\"fa-solid fa-spinner fa-spin\"></span>\n Applying…\n } @else {\n <span class=\"fa-solid fa-pen-to-square\"></span>\n Apply Status\n }\n </button>\n <button mjButton\n (click)=\"openRemoveDialog()\"\n variant=\"flat\"\n class=\"toolbar-button remove-btn\">\n <span class=\"fa-solid fa-trash\"></span>\n Remove from List\n </button>\n }\n @if (hasLineage && capabilities.CanRefresh) {\n <select\n class=\"mj-input mj-select refresh-mode-select\"\n [ngModel]=\"refreshMode\"\n (ngModelChange)=\"onRefreshModeChange($event)\"\n [disabled]=\"isPreviewingRefresh || isApplyingRefresh\"\n title=\"Refresh mode\">\n <option value=\"Additive\">Additive</option>\n <option value=\"Sync\">Sync</option>\n </select>\n <button mjButton\n (click)=\"onRefreshFromSource()\"\n [disabled]=\"isPreviewingRefresh || isApplyingRefresh\"\n variant=\"flat\"\n class=\"toolbar-button\">\n @if (isPreviewingRefresh) {\n <span class=\"fa-solid fa-spinner fa-spin\"></span>\n Previewing...\n } @else {\n <span class=\"fa-solid fa-cloud-arrow-down\"></span>\n Refresh from Source\n }\n </button>\n }\n <button mjButton\n (click)=\"onRefreshClick()\"\n variant=\"flat\"\n class=\"toolbar-button\">\n <span class=\"fa-solid fa-rotate\"></span>\n Refresh\n </button>\n <button mjButton\n (click)=\"onExportClick()\"\n variant=\"flat\"\n class=\"toolbar-button\">\n <span class=\"fa-solid fa-file-export\"></span>\n Export\n </button>\n </div>\n </div>\n }\n\n <!-- Loading State -->\n @if (showLoader) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading list...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n <!-- Grid + side stats panel (Phase 5.4). -->\n @if (!showLoader && listRecord) {\n <div class=\"grid-with-stats\">\n <div class=\"grid-container\">\n <mj-list-detail-grid\n #listDetailGrid\n [listId]=\"ListID\"\n [listEntity]=\"listRecord\"\n [autoNavigate]=\"true\"\n [height]=\"'auto'\"\n [showToolbar]=\"false\"\n [toolbarConfig]=\"gridToolbarConfig\"\n [selectionMode]=\"'checkbox'\"\n (rowClicked)=\"onRowClicked($event)\"\n (rowDoubleClicked)=\"onRowDoubleClicked($event)\"\n (selectionChange)=\"onSelectionChange($event)\"\n (dataLoaded)=\"onDataLoaded($event)\">\n </mj-list-detail-grid>\n </div>\n <aside class=\"list-detail__stats\">\n <mj-list-stats [Provider]=\"Provider\" [ListID]=\"listRecord.ID\" [RefreshTrigger]=\"statsRefreshTrigger\"></mj-list-stats>\n </aside>\n </div>\n }\n\n <!-- Refresh-from-source delta-confirm dialog -->\n <mj-list-delta-confirm\n [Visible]=\"refreshConfirmVisible && !!refreshDelta\"\n [Delta]=\"refreshDelta\"\n [TargetListName]=\"listRecord?.Name ?? null\"\n [SourceLabel]=\"sourceViewName\"\n (Confirm)=\"onRefreshConfirmCommit($event)\"\n (Cancel)=\"onRefreshConfirmCancel()\">\n </mj-list-delta-confirm>\n\n <!-- Move delta-confirm dialog (mockup 24). Shown only for Move,\n never for Copy. Drops on the source side require the user to\n acknowledge before Confirm enables. -->\n <mj-list-delta-confirm\n [Visible]=\"moveDeltaConfirmVisible && !!moveDelta\"\n [Delta]=\"moveDelta\"\n [TargetListName]=\"listRecord?.Name ?? null\"\n [SourceLabel]=\"'Move to ' + (moveCopySelectedTarget?.Name ?? 'target list')\"\n (Confirm)=\"onMoveConfirmCommit($event)\"\n (Cancel)=\"onMoveConfirmCancel()\">\n </mj-list-delta-confirm>\n</div>\n\n<!-- Move/Copy target picker (mockup 23). Lists every list owned by /\n shared with the current user that targets the same entity. -->\n@if (showMoveCopyDialog) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"(moveCopyMode === 'move' ? 'Move ' : 'Copy ') + selectedKeys.length + ' record' + (selectedKeys.length === 1 ? '' : 's') + ' to…'\"\n (Close)=\"closeMoveCopyDialog()\"\n [MinWidth]=\"480\"\n [Width]=\"640\"\n [Height]=\"560\">\n <div class=\"dialog-content move-copy-dialog\">\n @if (isApplyingMoveCopy) {\n <div class=\"dialog-loading\">\n <mj-loading [text]=\"(moveCopyMode === 'move' ? 'Moving' : 'Copying') + ' records...'\" size=\"small\"></mj-loading>\n @if (moveCopyTotal > 0) {\n <mj-progress-bar\n [Value]=\"moveCopyProgressPercent\"\n class=\"progress-bar\">\n </mj-progress-bar>\n }\n </div>\n } @else {\n <p class=\"dialog-instruction\">\n Choose the target list. Both lists must hold the same entity ({{ listRecord?.Entity ?? 'records' }}).\n </p>\n <div class=\"search-section\">\n <div class=\"search-input-wrapper\">\n <span class=\"fa-solid fa-search search-icon\"></span>\n <input\n class=\"mj-input search-input\"\n type=\"text\"\n placeholder=\"Filter lists by name…\"\n [(ngModel)]=\"moveCopyTargetSearch\" />\n </div>\n </div>\n @if (moveCopyTargetCandidatesLoading) {\n <div class=\"list-loading\">\n <mj-loading text=\"Loading lists...\" size=\"small\"></mj-loading>\n </div>\n } @else if (filteredMoveCopyTargets.length === 0) {\n <div class=\"empty-results\">\n <span class=\"fa-solid fa-list empty-icon\"></span>\n <p>No other lists found for this entity.</p>\n <p class=\"dialog-note\">Create a new list first if you need a new target.</p>\n </div>\n } @else {\n <div class=\"records-scroll move-copy-targets\">\n @for (target of filteredMoveCopyTargets; track target.ID) {\n <div class=\"record-item\"\n [class.selected]=\"moveCopySelectedTarget?.ID === target.ID\"\n (click)=\"selectMoveCopyTarget(target)\">\n <div class=\"record-checkbox\">\n <input type=\"radio\"\n name=\"moveCopyTarget\"\n [checked]=\"moveCopySelectedTarget?.ID === target.ID\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"selectMoveCopyTarget(target)\">\n </div>\n <div class=\"record-name\">\n <strong>{{ target.Name }}</strong>\n @if (target.Description) {\n <span class=\"target-desc\"> — {{ target.Description }}</span>\n }\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n <mj-dialog-actions>\n <button mjButton\n (click)=\"confirmMoveCopy()\"\n [disabled]=\"!moveCopySelectedTarget || isApplyingMoveCopy\"\n variant=\"primary\">\n @if (moveCopyMode === 'move') {\n <span class=\"fa-solid fa-arrow-right-arrow-left\"></span>\n Continue\n } @else {\n <span class=\"fa-solid fa-copy\"></span>\n Copy {{ selectedKeys.length }}\n }\n </button>\n <button mjButton\n (click)=\"closeMoveCopyDialog()\"\n [disabled]=\"isApplyingMoveCopy\"\n variant=\"outline\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Remove from List Confirmation Dialog -->\n@if (showRemoveDialog) {\n <mj-dialog\n [Visible]=\"true\"\n Title=\"Remove from List\"\n (Close)=\"closeRemoveDialog()\"\n [MinWidth]=\"350\"\n [Width]=\"450\">\n <div class=\"dialog-content\">\n @if (isRemoving) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Removing records...\" size=\"small\"></mj-loading>\n @if (removeTotal > 0) {\n <mj-progress-bar\n [Value]=\"removeProgressPercent\"\n class=\"progress-bar\">\n </mj-progress-bar>\n }\n </div>\n } @else {\n <div class=\"dialog-message\">\n <span class=\"fa-solid fa-triangle-exclamation warning-icon\"></span>\n <p>Are you sure you want to remove <strong>{{ selectedKeys.length }}</strong> record{{ selectedKeys.length !== 1 ? 's' : '' }} from this list?</p>\n <p class=\"dialog-note\">This will not delete the records, only remove them from this list.</p>\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton\n (click)=\"confirmRemoveFromList()\"\n [disabled]=\"isRemoving\"\n variant=\"danger\">\n Remove\n </button>\n <button mjButton\n (click)=\"closeRemoveDialog()\"\n [disabled]=\"isRemoving\"\n variant=\"outline\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Add Records Dialog -->\n@if (showAddRecordsDialog) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"'Add ' + (listRecord?.Entity || 'Records') + ' to List'\"\n (Close)=\"closeAddRecordsDialog()\"\n [MinWidth]=\"500\"\n [Width]=\"700\"\n [Height]=\"650\">\n <div class=\"dialog-content add-records-dialog\">\n @if (addDialogSaving) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Adding records to list...\" size=\"small\"></mj-loading>\n @if (addTotal > 0) {\n <mj-progress-bar\n [Value]=\"addProgressPercent\"\n class=\"progress-bar\">\n </mj-progress-bar>\n }\n </div>\n } @else {\n <!-- Search Input -->\n <div class=\"search-section\">\n <div class=\"search-input-wrapper\">\n <span class=\"fa-solid fa-search search-icon\"></span>\n <input\n class=\"mj-input search-input\"\n type=\"text\"\n [placeholder]=\"'Search ' + (listRecord?.Entity || 'records') + '...'\"\n [value]=\"addRecordsSearchFilter\"\n (input)=\"onAddRecordsSearchInputEvent($event)\" />\n </div>\n <span class=\"search-hint\">Type at least 2 characters to search</span>\n </div>\n <!-- Records List -->\n <div class=\"records-list\">\n @if (addDialogLoading) {\n <div class=\"list-loading\">\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n </div>\n } @else if (addableRecords.length === 0 && addRecordsSearchFilter.length >= 2) {\n <div class=\"empty-results\">\n <span class=\"fa-solid fa-search empty-icon\"></span>\n <p>No records found matching \"{{ addRecordsSearchFilter }}\"</p>\n </div>\n } @else if (addableRecords.length === 0) {\n <div class=\"empty-results\">\n <span class=\"fa-solid fa-list empty-icon\"></span>\n <p>Search for records to add to this list</p>\n </div>\n } @else {\n <!-- Selection controls -->\n <div class=\"selection-controls\">\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"selectAllAddable()\">Select All</button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"deselectAllAddable()\">Deselect All</button>\n <span class=\"selection-info\">{{ selectedAddableRecords.length }} selected</span>\n </div>\n <!-- Records -->\n <div class=\"records-scroll\">\n @for (record of addableRecords; track record.ID) {\n <div class=\"record-item\"\n [class.in-list]=\"record.isInList\"\n [class.selected]=\"record.isSelected\"\n (click)=\"toggleRecordSelection(record)\">\n <div class=\"record-checkbox\">\n @if (record.isInList) {\n <span class=\"fa-solid fa-check in-list-icon\" title=\"Already in list\"></span>\n } @else {\n <input type=\"checkbox\"\n [checked]=\"record.isSelected\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleRecordSelection(record)\">\n }\n </div>\n <div class=\"record-name\">{{ record.Name }}</div>\n @if (record.isInList) {\n <span class=\"in-list-badge\">In List</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton\n (click)=\"confirmAddRecords()\"\n [disabled]=\"addDialogSaving || selectedAddableRecords.length === 0\"\n variant=\"primary\">\n Add {{ selectedAddableRecords.length > 0 ? selectedAddableRecords.length : '' }} Record{{ selectedAddableRecords.length !== 1 ? 's' : '' }}\n </button>\n <button mjButton\n (click)=\"closeAddRecordsDialog()\"\n [disabled]=\"addDialogSaving\"\n variant=\"outline\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Export Dialog (mockup 26) — format + column picker -->\n@if (showExportDialog && listRecord) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"'Export ' + exportRecordCount + ' Record' + (exportRecordCount === 1 ? '' : 's')\"\n (Close)=\"closeExportDialog()\"\n [MinWidth]=\"520\"\n [Width]=\"640\"\n [Height]=\"640\">\n <div class=\"dialog-content export-dialog\">\n <label class=\"export-section-label\">Format</label>\n <div class=\"export-format-row\">\n <label class=\"export-format-option\"\n [class.export-format-option--selected]=\"exportFormat === 'excel'\"\n (click)=\"exportFormat = 'excel'\">\n <input type=\"radio\" name=\"exportFormat\" value=\"excel\" [(ngModel)]=\"exportFormat\">\n <i class=\"fa-solid fa-file-excel\" style=\"color: var(--mj-status-success);\"></i>\n <span>Excel (.xlsx)</span>\n </label>\n <label class=\"export-format-option\"\n [class.export-format-option--selected]=\"exportFormat === 'csv'\"\n (click)=\"exportFormat = 'csv'\">\n <input type=\"radio\" name=\"exportFormat\" value=\"csv\" [(ngModel)]=\"exportFormat\">\n <i class=\"fa-solid fa-file-csv\" style=\"color: var(--mj-text-secondary);\"></i>\n <span>CSV</span>\n </label>\n <label class=\"export-format-option\"\n [class.export-format-option--selected]=\"exportFormat === 'json'\"\n (click)=\"exportFormat = 'json'\">\n <input type=\"radio\" name=\"exportFormat\" value=\"json\" [(ngModel)]=\"exportFormat\">\n <i class=\"fa-solid fa-file-code\" style=\"color: var(--mj-brand-primary);\"></i>\n <span>JSON</span>\n </label>\n </div>\n\n <div class=\"export-section-divider\"></div>\n\n <label class=\"export-section-label\">Columns to include</label>\n <div class=\"export-fields-list\">\n @for (f of exportFields; track f.Name) {\n <label class=\"export-field-row\">\n <input type=\"checkbox\" [(ngModel)]=\"f.Selected\">\n <span>{{ f.DisplayName }}</span>\n </label>\n }\n </div>\n <div class=\"export-field-actions\">\n <a href=\"#\" (click)=\"selectAllExportFields(); $event.preventDefault()\">Select All</a>\n <a href=\"#\" (click)=\"selectNoneExportFields(); $event.preventDefault()\">Select None</a>\n <span class=\"muted\">{{ selectedExportFieldCount }} of {{ exportFields.length }} selected</span>\n </div>\n </div>\n <mj-dialog-actions>\n <button mjButton variant=\"primary\"\n [disabled]=\"selectedExportFieldCount === 0 || isExporting\"\n (click)=\"executeExport()\">\n @if (isExporting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Exporting…\n } @else {\n <i class=\"fa-solid fa-download\"></i>\n Export {{ exportRecordCount }} Record{{ exportRecordCount === 1 ? '' : 's' }}\n }\n </button>\n <button mjButton variant=\"outline\" [disabled]=\"isExporting\" (click)=\"closeExportDialog()\">Cancel</button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Add From View Dialog -->\n@if (showAddFromViewDialog) {\n <mj-dialog\n [Visible]=\"true\"\n Title=\"Add Records from Views\"\n (Close)=\"closeAddFromViewDialog()\"\n [MinWidth]=\"400\"\n [Width]=\"600\"\n [Height]=\"500\">\n <div class=\"dialog-content\">\n @if (showAddFromViewLoader && fetchingRecordsToSave) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Loading records from views...\" size=\"small\"></mj-loading>\n </div>\n } @else if (showAddFromViewLoader && addFromViewTotal > 0) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Adding records to list...\" size=\"small\"></mj-loading>\n <mj-progress-bar\n [Value]=\"addFromViewProgressPercent\"\n class=\"progress-bar\">\n </mj-progress-bar>\n </div>\n } @else if (showAddFromViewLoader) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Loading views...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n <p class=\"dialog-instruction\">Select views to add their records to this list:</p>\n <div class=\"views-list\">\n @if (!userViews || userViews.length === 0) {\n <div class=\"empty-results\">\n <span class=\"fa-solid fa-folder-open empty-icon\"></span>\n <p>No saved views found for this entity</p>\n </div>\n } @else {\n @for (view of userViews; track view.ID) {\n <div class=\"view-item\"\n [class.selected]=\"isViewSelected(view)\"\n (click)=\"toggleViewSelection(view)\">\n <input type=\"checkbox\"\n [checked]=\"isViewSelected(view)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleViewSelection(view)\">\n <span class=\"fa-solid fa-table-list view-icon\"></span>\n <span class=\"view-name\">{{ view.Name }}</span>\n </div>\n }\n }\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton\n (click)=\"confirmAddFromView()\"\n [disabled]=\"showAddFromViewLoader || userViewsToAdd.length === 0\"\n variant=\"primary\">\n Add from {{ userViewsToAdd.length }} View{{ userViewsToAdd.length !== 1 ? 's' : '' }}\n </button>\n <button mjButton\n (click)=\"closeAddFromViewDialog()\"\n [disabled]=\"showAddFromViewLoader\"\n variant=\"outline\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n"]}
package/dist/module.d.ts CHANGED
@@ -49,11 +49,12 @@ import * as i47 from "@memberjunction/ng-artifacts";
49
49
  import * as i48 from "@memberjunction/ng-shared-generic";
50
50
  import * as i49 from "@memberjunction/ng-entity-viewer";
51
51
  import * as i50 from "@memberjunction/ng-list-detail-grid";
52
- import * as i51 from "@memberjunction/ng-search";
53
- import * as i52 from "@memberjunction/ng-word-cloud";
52
+ import * as i51 from "@memberjunction/ng-list-management";
53
+ import * as i52 from "@memberjunction/ng-search";
54
+ import * as i53 from "@memberjunction/ng-word-cloud";
54
55
  export declare class ExplorerCoreModule {
55
56
  static ɵfac: i0.ɵɵFactoryDeclaration<ExplorerCoreModule, never>;
56
- static ɵmod: i0.ɵɵNgModuleDeclaration<ExplorerCoreModule, [typeof i1.OAuthCallbackComponent, typeof i2.ResourceContainerComponent, typeof i3.DashboardResource, typeof i4.EntityRecordResource, typeof i5.SearchResultsResource, typeof i6.UserViewResource, typeof i7.SingleRecordComponent, typeof i8.SingleSearchResultComponent, typeof i9.SingleQueryComponent, typeof i10.UserProfileComponent, typeof i11.SingleDashboardComponent, typeof i12.AddItemComponent, typeof i13.DeleteItemComponent, typeof i14.EditDashboardComponent, typeof i15.UserNotificationsComponent, typeof i16.QueryResource, typeof i17.SingleListDetailComponent, typeof i18.ListDetailResource, typeof i19.ChatConversationsResource, typeof i20.ChatCollectionsResource, typeof i21.ChatTasksResource, typeof i22.ArtifactResource, typeof i23.NotificationsResource, typeof i24.DashboardPreferencesDialogComponent], [typeof i25.AppRoutingModule, typeof i26.CommonModule, typeof i27.FormsModule, typeof i27.ReactiveFormsModule, typeof i28.RouterModule, typeof i29.ExportServiceModule, typeof i30.RecordChangesModule, typeof i31.ContainerDirectivesModule, typeof i32.BaseFormsModule, typeof i33.QueryViewerModule, typeof i34.MemberJunctionSharedModule, typeof i35.ConversationsModule, typeof i36.CoreDashboardsModule, typeof i37.DashboardViewerModule, typeof i38.ExplorerSettingsModule, typeof i39.FileStorageModule, typeof i40.EntityFormDialogModule, typeof i41.RecordSelectorModule, typeof i42.ResourcePermissionsModule, typeof i43.GenericDialogModule, typeof i44.MJProgressBarComponent, typeof i45.DragDropModule, typeof i46.AITestHarnessModule, typeof i47.ArtifactsModule, typeof i48.SharedGenericModule, typeof i49.EntityViewerModule, typeof i50.ListDetailGridModule, typeof i51.SearchModule, typeof i52.MJWordCloudComponent, typeof i44.MJButtonDirective, typeof i44.MJDialogComponent, typeof i44.MJDialogTitlebarComponent, typeof i44.MJDialogActionsComponent, typeof i44.MJDropdownComponent, typeof i44.MJWindowComponent, typeof i44.MJWindowTitlebarComponent], [typeof i2.ResourceContainerComponent, typeof i3.DashboardResource, typeof i4.EntityRecordResource, typeof i5.SearchResultsResource, typeof i6.UserViewResource, typeof i7.SingleRecordComponent, typeof i8.SingleSearchResultComponent, typeof i10.UserProfileComponent, typeof i11.SingleDashboardComponent, typeof i12.AddItemComponent, typeof i13.DeleteItemComponent, typeof i14.EditDashboardComponent, typeof i15.UserNotificationsComponent, typeof i18.ListDetailResource, typeof i24.DashboardPreferencesDialogComponent]>;
57
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ExplorerCoreModule, [typeof i1.OAuthCallbackComponent, typeof i2.ResourceContainerComponent, typeof i3.DashboardResource, typeof i4.EntityRecordResource, typeof i5.SearchResultsResource, typeof i6.UserViewResource, typeof i7.SingleRecordComponent, typeof i8.SingleSearchResultComponent, typeof i9.SingleQueryComponent, typeof i10.UserProfileComponent, typeof i11.SingleDashboardComponent, typeof i12.AddItemComponent, typeof i13.DeleteItemComponent, typeof i14.EditDashboardComponent, typeof i15.UserNotificationsComponent, typeof i16.QueryResource, typeof i17.SingleListDetailComponent, typeof i18.ListDetailResource, typeof i19.ChatConversationsResource, typeof i20.ChatCollectionsResource, typeof i21.ChatTasksResource, typeof i22.ArtifactResource, typeof i23.NotificationsResource, typeof i24.DashboardPreferencesDialogComponent], [typeof i25.AppRoutingModule, typeof i26.CommonModule, typeof i27.FormsModule, typeof i27.ReactiveFormsModule, typeof i28.RouterModule, typeof i29.ExportServiceModule, typeof i30.RecordChangesModule, typeof i31.ContainerDirectivesModule, typeof i32.BaseFormsModule, typeof i33.QueryViewerModule, typeof i34.MemberJunctionSharedModule, typeof i35.ConversationsModule, typeof i36.CoreDashboardsModule, typeof i37.DashboardViewerModule, typeof i38.ExplorerSettingsModule, typeof i39.FileStorageModule, typeof i40.EntityFormDialogModule, typeof i41.RecordSelectorModule, typeof i42.ResourcePermissionsModule, typeof i43.GenericDialogModule, typeof i44.MJProgressBarComponent, typeof i45.DragDropModule, typeof i46.AITestHarnessModule, typeof i47.ArtifactsModule, typeof i48.SharedGenericModule, typeof i49.EntityViewerModule, typeof i50.ListDetailGridModule, typeof i51.ListManagementModule, typeof i52.SearchModule, typeof i53.MJWordCloudComponent, typeof i44.MJButtonDirective, typeof i44.MJDialogComponent, typeof i44.MJDialogTitlebarComponent, typeof i44.MJDialogActionsComponent, typeof i44.MJDropdownComponent, typeof i44.MJWindowComponent, typeof i44.MJWindowTitlebarComponent], [typeof i2.ResourceContainerComponent, typeof i3.DashboardResource, typeof i4.EntityRecordResource, typeof i5.SearchResultsResource, typeof i6.UserViewResource, typeof i7.SingleRecordComponent, typeof i8.SingleSearchResultComponent, typeof i10.UserProfileComponent, typeof i11.SingleDashboardComponent, typeof i12.AddItemComponent, typeof i13.DeleteItemComponent, typeof i14.EditDashboardComponent, typeof i15.UserNotificationsComponent, typeof i18.ListDetailResource, typeof i24.DashboardPreferencesDialogComponent]>;
57
58
  static ɵinj: i0.ɵɵInjectorDeclaration<ExplorerCoreModule>;
58
59
  }
59
60
  //# sourceMappingURL=module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiEA,qBAwFa,kBAAkB;yCAAlB,kBAAkB;0CAAlB,kBAAkB;0CAAlB,kBAAkB;CAAG"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkEA,qBAyFa,kBAAkB;yCAAlB,kBAAkB;0CAAlB,kBAAkB;0CAAlB,kBAAkB;CAAG"}
package/dist/module.js CHANGED
@@ -21,6 +21,7 @@ import { RecordSelectorModule } from '@memberjunction/ng-record-selector';
21
21
  import { ResourcePermissionsModule } from '@memberjunction/ng-resource-permissions';
22
22
  import { EntityViewerModule } from '@memberjunction/ng-entity-viewer';
23
23
  import { ListDetailGridModule } from '@memberjunction/ng-list-detail-grid';
24
+ import { ListManagementModule } from '@memberjunction/ng-list-management';
24
25
  // Local Components
25
26
  import { ConversationsModule } from '@memberjunction/ng-conversations';
26
27
  import { CoreDashboardsModule } from '@memberjunction/ng-dashboards/core-dashboards.module';
@@ -94,6 +95,7 @@ export class ExplorerCoreModule {
94
95
  SharedGenericModule,
95
96
  EntityViewerModule,
96
97
  ListDetailGridModule,
98
+ ListManagementModule,
97
99
  SearchModule,
98
100
  MJWordCloudComponent,
99
101
  MJDialogComponent,
@@ -160,6 +162,7 @@ export class ExplorerCoreModule {
160
162
  SharedGenericModule,
161
163
  EntityViewerModule,
162
164
  ListDetailGridModule,
165
+ ListManagementModule,
163
166
  SearchModule,
164
167
  MJWordCloudComponent,
165
168
  MJButtonDirective,
@@ -244,6 +247,7 @@ export class ExplorerCoreModule {
244
247
  SharedGenericModule,
245
248
  EntityViewerModule,
246
249
  ListDetailGridModule,
250
+ ListManagementModule,
247
251
  SearchModule,
248
252
  MJWordCloudComponent,
249
253
  MJButtonDirective,
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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","sourcesContent":["import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule, RouteReuseStrategy } from '@angular/router';\n\n// Services\nimport { SystemValidationService } from './lib/services/system-validation.service';\nimport { StartupValidationService } from './lib/services/startup-validation.service';\n\nimport { ExportServiceModule } from '@memberjunction/ng-export-service';\nimport { MJProgressBarComponent } from '@memberjunction/ng-ui-components';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\n// MJ\nimport { MJButtonDirective, MJDialogComponent, MJDialogTitlebarComponent, MJDialogActionsComponent, MJDropdownComponent, MJWindowComponent, MJWindowTitlebarComponent } from '@memberjunction/ng-ui-components';\nimport { ContainerDirectivesModule } from '@memberjunction/ng-container-directives';\nimport { FileStorageModule } from '@memberjunction/ng-file-storage';\nimport { QueryViewerModule } from '@memberjunction/ng-query-viewer';\nimport { BaseFormsModule } from '@memberjunction/ng-base-forms';\nimport { RecordChangesModule } from '@memberjunction/ng-record-changes';\n// RecordTagsModule removed — now imported by @memberjunction/ng-base-forms\nimport { EntityFormDialogModule } from '@memberjunction/ng-entity-form-dialog';\nimport { RecordSelectorModule } from '@memberjunction/ng-record-selector';\nimport { ResourcePermissionsModule } from '@memberjunction/ng-resource-permissions';\nimport { EntityViewerModule } from '@memberjunction/ng-entity-viewer';\nimport { ListDetailGridModule } from '@memberjunction/ng-list-detail-grid';\n\n// Local Components\nimport { ConversationsModule } from '@memberjunction/ng-conversations';\nimport { CoreDashboardsModule } from '@memberjunction/ng-dashboards/core-dashboards.module';\nimport { DashboardViewerModule } from '@memberjunction/ng-dashboard-viewer';\nimport { ExplorerSettingsModule } from '@memberjunction/ng-explorer-settings';\nimport { AITestHarnessModule } from '@memberjunction/ng-ai-test-harness';\nimport { ArtifactsModule } from '@memberjunction/ng-artifacts';\nimport { MemberJunctionSharedModule } from '@memberjunction/ng-shared';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport { ResourceContainerComponent } from './lib/generic/resource-container-component';\nimport { DashboardPreferencesDialogComponent } from './lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component';\nimport { DashboardResource } from './lib/resource-wrappers/dashboard-resource.component';\nimport { QueryResource } from './lib/resource-wrappers/query-resource.component';\nimport { EntityRecordResource } from './lib/resource-wrappers/record-resource.component';\nimport { SearchResultsResource } from './lib/resource-wrappers/search-results-resource.component';\nimport { UserViewResource } from './lib/resource-wrappers/view-resource.component';\nimport { AddItemComponent } from './lib/single-dashboard/Components/add-item/add-item.component';\nimport { DeleteItemComponent } from './lib/single-dashboard/Components/delete-item/delete-item.component';\nimport { EditDashboardComponent } from './lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component';\nimport { SingleDashboardComponent } from './lib/single-dashboard/single-dashboard.component';\nimport { SingleQueryComponent } from './lib/single-query/single-query.component';\nimport { SingleRecordComponent } from './lib/single-record/single-record.component';\nimport { SingleSearchResultComponent } from './lib/single-search-result/single-search-result.component';\nimport { UserNotificationsComponent } from './lib/user-notifications/user-notifications.component';\nimport { UserProfileComponent } from './lib/user-profile/user-profile.component';\nimport { AppRoutingModule, CustomReuseStrategy } from './app-routing.module';\nimport { GenericDialogModule } from '@memberjunction/ng-generic-dialog';\nimport {SingleListDetailComponent} from './lib/single-list-detail/single-list-detail.component';\nimport { ListDetailResource } from './lib/resource-wrappers/list-detail-resource.component';\nimport { ChatConversationsResource } from './lib/resource-wrappers/chat-conversations-resource.component';\nimport { ChatCollectionsResource } from './lib/resource-wrappers/chat-collections-resource.component';\nimport { ChatTasksResource } from './lib/resource-wrappers/chat-tasks-resource.component';\nimport { ArtifactResource } from './lib/resource-wrappers/artifact-resource.component';\nimport { NotificationsResource } from './lib/resource-wrappers/notifications-resource.component';\nimport { OAuthCallbackComponent } from './lib/oauth/oauth-callback.component';\nimport { SearchModule } from '@memberjunction/ng-search';\nimport { MJWordCloudComponent } from '@memberjunction/ng-word-cloud';\n\n@NgModule({\n declarations: [\n OAuthCallbackComponent,\n ResourceContainerComponent,\n DashboardResource,\n EntityRecordResource,\n SearchResultsResource,\n UserViewResource,\n SingleRecordComponent,\n SingleSearchResultComponent,\n SingleQueryComponent,\n UserProfileComponent,\n SingleDashboardComponent,\n AddItemComponent,\n DeleteItemComponent,\n EditDashboardComponent,\n UserNotificationsComponent,\n QueryResource,\n SingleListDetailComponent,\n ListDetailResource,\n ChatConversationsResource,\n ChatCollectionsResource,\n ChatTasksResource,\n ArtifactResource,\n NotificationsResource,\n DashboardPreferencesDialogComponent,\n ],\n imports: [\n AppRoutingModule,\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterModule,\n ExportServiceModule,\n RecordChangesModule,\n ContainerDirectivesModule,\n BaseFormsModule,\n QueryViewerModule,\n MemberJunctionSharedModule,\n ConversationsModule,\n CoreDashboardsModule,\n DashboardViewerModule,\n ExplorerSettingsModule,\n FileStorageModule,\n EntityFormDialogModule,\n RecordSelectorModule,\n ResourcePermissionsModule,\n GenericDialogModule,\n MJProgressBarComponent,\n DragDropModule,\n AITestHarnessModule, // [3.0] TO DO TO-DO Need to verify this works correctly!\n ArtifactsModule,\n SharedGenericModule,\n EntityViewerModule,\n ListDetailGridModule,\n SearchModule,\n MJWordCloudComponent,\n MJButtonDirective,\n MJDialogComponent,\n MJDialogTitlebarComponent,\n MJDialogActionsComponent,\n MJDropdownComponent,\n MJWindowComponent,\n MJWindowTitlebarComponent\n ],\n exports: [\n ResourceContainerComponent,\n DashboardResource,\n EntityRecordResource,\n SearchResultsResource,\n UserViewResource,\n SingleRecordComponent,\n SingleSearchResultComponent,\n UserProfileComponent,\n SingleDashboardComponent,\n AddItemComponent,\n DeleteItemComponent,\n EditDashboardComponent,\n UserNotificationsComponent,\n ListDetailResource,\n DashboardPreferencesDialogComponent \n ],\n providers: [\n { provide: RouteReuseStrategy, useClass: CustomReuseStrategy },\n SystemValidationService,\n StartupValidationService\n ],\n})\nexport class ExplorerCoreModule {}\n"]}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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","sourcesContent":["import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule, RouteReuseStrategy } from '@angular/router';\n\n// Services\nimport { SystemValidationService } from './lib/services/system-validation.service';\nimport { StartupValidationService } from './lib/services/startup-validation.service';\n\nimport { ExportServiceModule } from '@memberjunction/ng-export-service';\nimport { MJProgressBarComponent } from '@memberjunction/ng-ui-components';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\n// MJ\nimport { MJButtonDirective, MJDialogComponent, MJDialogTitlebarComponent, MJDialogActionsComponent, MJDropdownComponent, MJWindowComponent, MJWindowTitlebarComponent } from '@memberjunction/ng-ui-components';\nimport { ContainerDirectivesModule } from '@memberjunction/ng-container-directives';\nimport { FileStorageModule } from '@memberjunction/ng-file-storage';\nimport { QueryViewerModule } from '@memberjunction/ng-query-viewer';\nimport { BaseFormsModule } from '@memberjunction/ng-base-forms';\nimport { RecordChangesModule } from '@memberjunction/ng-record-changes';\n// RecordTagsModule removed — now imported by @memberjunction/ng-base-forms\nimport { EntityFormDialogModule } from '@memberjunction/ng-entity-form-dialog';\nimport { RecordSelectorModule } from '@memberjunction/ng-record-selector';\nimport { ResourcePermissionsModule } from '@memberjunction/ng-resource-permissions';\nimport { EntityViewerModule } from '@memberjunction/ng-entity-viewer';\nimport { ListDetailGridModule } from '@memberjunction/ng-list-detail-grid';\nimport { ListManagementModule } from '@memberjunction/ng-list-management';\n\n// Local Components\nimport { ConversationsModule } from '@memberjunction/ng-conversations';\nimport { CoreDashboardsModule } from '@memberjunction/ng-dashboards/core-dashboards.module';\nimport { DashboardViewerModule } from '@memberjunction/ng-dashboard-viewer';\nimport { ExplorerSettingsModule } from '@memberjunction/ng-explorer-settings';\nimport { AITestHarnessModule } from '@memberjunction/ng-ai-test-harness';\nimport { ArtifactsModule } from '@memberjunction/ng-artifacts';\nimport { MemberJunctionSharedModule } from '@memberjunction/ng-shared';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport { ResourceContainerComponent } from './lib/generic/resource-container-component';\nimport { DashboardPreferencesDialogComponent } from './lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component';\nimport { DashboardResource } from './lib/resource-wrappers/dashboard-resource.component';\nimport { QueryResource } from './lib/resource-wrappers/query-resource.component';\nimport { EntityRecordResource } from './lib/resource-wrappers/record-resource.component';\nimport { SearchResultsResource } from './lib/resource-wrappers/search-results-resource.component';\nimport { UserViewResource } from './lib/resource-wrappers/view-resource.component';\nimport { AddItemComponent } from './lib/single-dashboard/Components/add-item/add-item.component';\nimport { DeleteItemComponent } from './lib/single-dashboard/Components/delete-item/delete-item.component';\nimport { EditDashboardComponent } from './lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component';\nimport { SingleDashboardComponent } from './lib/single-dashboard/single-dashboard.component';\nimport { SingleQueryComponent } from './lib/single-query/single-query.component';\nimport { SingleRecordComponent } from './lib/single-record/single-record.component';\nimport { SingleSearchResultComponent } from './lib/single-search-result/single-search-result.component';\nimport { UserNotificationsComponent } from './lib/user-notifications/user-notifications.component';\nimport { UserProfileComponent } from './lib/user-profile/user-profile.component';\nimport { AppRoutingModule, CustomReuseStrategy } from './app-routing.module';\nimport { GenericDialogModule } from '@memberjunction/ng-generic-dialog';\nimport {SingleListDetailComponent} from './lib/single-list-detail/single-list-detail.component';\nimport { ListDetailResource } from './lib/resource-wrappers/list-detail-resource.component';\nimport { ChatConversationsResource } from './lib/resource-wrappers/chat-conversations-resource.component';\nimport { ChatCollectionsResource } from './lib/resource-wrappers/chat-collections-resource.component';\nimport { ChatTasksResource } from './lib/resource-wrappers/chat-tasks-resource.component';\nimport { ArtifactResource } from './lib/resource-wrappers/artifact-resource.component';\nimport { NotificationsResource } from './lib/resource-wrappers/notifications-resource.component';\nimport { OAuthCallbackComponent } from './lib/oauth/oauth-callback.component';\nimport { SearchModule } from '@memberjunction/ng-search';\nimport { MJWordCloudComponent } from '@memberjunction/ng-word-cloud';\n\n@NgModule({\n declarations: [\n OAuthCallbackComponent,\n ResourceContainerComponent,\n DashboardResource,\n EntityRecordResource,\n SearchResultsResource,\n UserViewResource,\n SingleRecordComponent,\n SingleSearchResultComponent,\n SingleQueryComponent,\n UserProfileComponent,\n SingleDashboardComponent,\n AddItemComponent,\n DeleteItemComponent,\n EditDashboardComponent,\n UserNotificationsComponent,\n QueryResource,\n SingleListDetailComponent,\n ListDetailResource,\n ChatConversationsResource,\n ChatCollectionsResource,\n ChatTasksResource,\n ArtifactResource,\n NotificationsResource,\n DashboardPreferencesDialogComponent,\n ],\n imports: [\n AppRoutingModule,\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterModule,\n ExportServiceModule,\n RecordChangesModule,\n ContainerDirectivesModule,\n BaseFormsModule,\n QueryViewerModule,\n MemberJunctionSharedModule,\n ConversationsModule,\n CoreDashboardsModule,\n DashboardViewerModule,\n ExplorerSettingsModule,\n FileStorageModule,\n EntityFormDialogModule,\n RecordSelectorModule,\n ResourcePermissionsModule,\n GenericDialogModule,\n MJProgressBarComponent,\n DragDropModule,\n AITestHarnessModule, // [3.0] TO DO TO-DO Need to verify this works correctly!\n ArtifactsModule,\n SharedGenericModule,\n EntityViewerModule,\n ListDetailGridModule,\n ListManagementModule,\n SearchModule,\n MJWordCloudComponent,\n MJButtonDirective,\n MJDialogComponent,\n MJDialogTitlebarComponent,\n MJDialogActionsComponent,\n MJDropdownComponent,\n MJWindowComponent,\n MJWindowTitlebarComponent\n ],\n exports: [\n ResourceContainerComponent,\n DashboardResource,\n EntityRecordResource,\n SearchResultsResource,\n UserViewResource,\n SingleRecordComponent,\n SingleSearchResultComponent,\n UserProfileComponent,\n SingleDashboardComponent,\n AddItemComponent,\n DeleteItemComponent,\n EditDashboardComponent,\n UserNotificationsComponent,\n ListDetailResource,\n DashboardPreferencesDialogComponent \n ],\n providers: [\n { provide: RouteReuseStrategy, useClass: CustomReuseStrategy },\n SystemValidationService,\n StartupValidationService\n ],\n})\nexport class ExplorerCoreModule {}\n"]}