@memberjunction/ng-list-management 5.30.1 → 5.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/components/list-management-dialog/list-management-dialog.component.d.ts +2 -1
- package/dist/lib/components/list-management-dialog/list-management-dialog.component.d.ts.map +1 -1
- package/dist/lib/components/list-management-dialog/list-management-dialog.component.js +6 -5
- package/dist/lib/components/list-management-dialog/list-management-dialog.component.js.map +1 -1
- package/dist/lib/components/list-share-dialog/list-share-dialog.component.d.ts +2 -1
- package/dist/lib/components/list-share-dialog/list-share-dialog.component.d.ts.map +1 -1
- package/dist/lib/components/list-share-dialog/list-share-dialog.component.js +6 -5
- package/dist/lib/components/list-share-dialog/list-share-dialog.component.js.map +1 -1
- package/dist/lib/services/list-management.service.d.ts +7 -0
- package/dist/lib/services/list-management.service.d.ts.map +1 -1
- package/dist/lib/services/list-management.service.js +22 -12
- package/dist/lib/services/list-management.service.js.map +1 -1
- package/dist/lib/services/list-sharing.service.d.ts +7 -0
- package/dist/lib/services/list-sharing.service.d.ts.map +1 -1
- package/dist/lib/services/list-sharing.service.js +26 -16
- package/dist/lib/services/list-sharing.service.js.map +1 -1
- package/package.json +11 -10
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EventEmitter, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
2
3
|
import { MJListEntity, MJListCategoryEntity } from '@memberjunction/core-entities';
|
|
3
4
|
import { ListManagementService } from '../../services/list-management.service';
|
|
4
5
|
import { ListManagementDialogConfig, ListManagementResult, ListItemViewModel, ListFilterTab, ListSortOption } from '../../models/list-management.models';
|
|
@@ -14,7 +15,7 @@ import * as i0 from "@angular/core";
|
|
|
14
15
|
* - Mobile-responsive bottom sheet on small screens
|
|
15
16
|
* - Batch operations with progress feedback
|
|
16
17
|
*/
|
|
17
|
-
export declare class ListManagementDialogComponent implements OnInit, OnDestroy {
|
|
18
|
+
export declare class ListManagementDialogComponent extends BaseAngularComponent implements OnInit, OnDestroy {
|
|
18
19
|
private listService;
|
|
19
20
|
private cdr;
|
|
20
21
|
/**
|
package/dist/lib/components/list-management-dialog/list-management-dialog.component.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-management-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/list-management-dialog/list-management-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EACZ,MAAM,EACN,SAAS,EACT,iBAAiB,EAClB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"list-management-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/list-management-dialog/list-management-dialog.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
2
|
import { Subject } from 'rxjs';
|
|
3
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
3
4
|
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
4
|
-
import { Metadata } from '@memberjunction/core';
|
|
5
5
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "../../services/list-management.service";
|
|
@@ -422,7 +422,7 @@ function ListManagementDialogComponent_Conditional_0_Template(rf, ctx) { if (rf
|
|
|
422
422
|
* - Mobile-responsive bottom sheet on small screens
|
|
423
423
|
* - Batch operations with progress feedback
|
|
424
424
|
*/
|
|
425
|
-
export class ListManagementDialogComponent {
|
|
425
|
+
export class ListManagementDialogComponent extends BaseAngularComponent {
|
|
426
426
|
listService;
|
|
427
427
|
cdr;
|
|
428
428
|
/**
|
|
@@ -474,6 +474,7 @@ export class ListManagementDialogComponent {
|
|
|
474
474
|
destroy$ = new Subject();
|
|
475
475
|
searchSubject = new Subject();
|
|
476
476
|
constructor(listService, cdr) {
|
|
477
|
+
super();
|
|
477
478
|
this.listService = listService;
|
|
478
479
|
this.cdr = cdr;
|
|
479
480
|
}
|
|
@@ -572,7 +573,7 @@ export class ListManagementDialogComponent {
|
|
|
572
573
|
this.loading = true;
|
|
573
574
|
this.cdr.detectChanges();
|
|
574
575
|
try {
|
|
575
|
-
const md =
|
|
576
|
+
const md = this.ProviderToUse;
|
|
576
577
|
// Load lists and membership in parallel
|
|
577
578
|
const [lists, membership, categories] = await Promise.all([
|
|
578
579
|
this.listService.getListsForEntity(this.config.entityId, md.CurrentUser.ID, true // Force refresh
|
|
@@ -924,7 +925,7 @@ export class ListManagementDialogComponent {
|
|
|
924
925
|
return vm.isFullMember || vm.isPartialMember || this.originalMembership.get(vm.list.ID) === true;
|
|
925
926
|
}
|
|
926
927
|
static ɵfac = function ListManagementDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ListManagementDialogComponent)(i0.ɵɵdirectiveInject(i1.ListManagementService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
927
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ListManagementDialogComponent, selectors: [["mj-list-management-dialog"]], inputs: { config: "config", visible: "visible" }, outputs: { complete: "complete", cancel: "cancel" }, standalone: false, decls: 1, vars: 1, consts: [[1, "dialog-overlay"], [1, "dialog-overlay", 3, "click"], [1, "dialog-container", 3, "click"], [1, "dialog-header"], [1, "header-content"], [1, "header-icon"], [1, "fa-solid", "fa-rectangle-list"], [1, "header-text"], [1, "dialog-title"], [1, "dialog-subtitle"], ["title", "Close", 1, "close-button", 3, "click"], [1, "fa-solid", "fa-times"], [1, "search-section"], [1, "search-bar"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", "placeholder", "Search lists...", 1, "search-input", 3, "input", "value"], [1, "clear-search"], [1, "create-button", 3, "disabled"], [1, "filter-tabs"], [1, "tabs-left"], [1, "tab-button", 3, "click"], [1, "tabs-right"], [1, "sort-select", 3, "change", "value"], ["value", "name"], ["value", "recent"], ["value", "item-count"], [1, "create-form"], [1, "list-content"], [1, "loading-state"], [1, "empty-state"], [1, "list-items"], [1, "dialog-footer"], [1, "footer-summary"], [1, "summary-empty"], [1, "footer-actions"], [1, "btn", "btn-secondary", 3, "click", "disabled"], [1, "btn", "btn-primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "clear-search", 3, "click"], [1, "fa-solid", "fa-times-circle"], [1, "create-button", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"], [1, "button-text"], [1, "create-form-header"], [1, "fa-solid", "fa-plus-circle"], [1, "create-form-body"], [1, "form-group"], ["type", "text", "placeholder", "List name *", 1, "form-input", 3, "ngModelChange", "keyup.enter", "ngModel", "disabled"], ["placeholder", "Description (optional)", "rows", "2", 1, "form-input", "form-textarea", 3, "ngModelChange", "ngModel", "disabled"], [1, "create-form-actions"], [1, "form-input", 3, "ngModelChange", "ngModel", "disabled"], [3, "ngValue"], ["text", "Loading lists...", "size", "medium"], [1, "fa-solid", "fa-search", "empty-icon"], [1, "empty-title"], [1, "empty-subtitle"], [1, "fa-solid", "fa-rectangle-list", "empty-icon"], [1, "btn", "btn-primary"], [1, "btn", "btn-primary", 3, "click"], [1, "list-item", 3, "selected-add", "selected-remove", "is-member"], [1, "list-item"], [1, "list-item-select"], [1, "select-btn", "add-btn", 3, "selected", "title"], [1, "select-btn", "remove-btn", 3, "selected", "title"], [1, "list-item-content"], [1, "list-item-header"], [1, "fa-solid", "fa-folder", "list-icon"], [1, "list-name"], [1, "badge", "badge-new"], [1, "list-item-meta"], [1, "list-count"], [1, "meta-separator"], [1, "list-updated"], [1, "membership-indicator", 3, "class"], [1, "select-btn", "add-btn", 3, "click", "title"], [1, "fa-solid", "fa-check"], [1, "select-btn", "remove-btn", 3, "click", "title"], [1, "fa-solid", "fa-undo"], [1, "fa-solid", "fa-minus"], [1, "list-description"], [1, "membership-indicator"], [1, "membership-text"], [1, "summary-item", "add"], [1, "summary-item", "remove"], [1, "fa-solid", "fa-minus-circle"]], template: function ListManagementDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
928
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ListManagementDialogComponent, selectors: [["mj-list-management-dialog"]], inputs: { config: "config", visible: "visible" }, outputs: { complete: "complete", cancel: "cancel" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[1, "dialog-overlay"], [1, "dialog-overlay", 3, "click"], [1, "dialog-container", 3, "click"], [1, "dialog-header"], [1, "header-content"], [1, "header-icon"], [1, "fa-solid", "fa-rectangle-list"], [1, "header-text"], [1, "dialog-title"], [1, "dialog-subtitle"], ["title", "Close", 1, "close-button", 3, "click"], [1, "fa-solid", "fa-times"], [1, "search-section"], [1, "search-bar"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", "placeholder", "Search lists...", 1, "search-input", 3, "input", "value"], [1, "clear-search"], [1, "create-button", 3, "disabled"], [1, "filter-tabs"], [1, "tabs-left"], [1, "tab-button", 3, "click"], [1, "tabs-right"], [1, "sort-select", 3, "change", "value"], ["value", "name"], ["value", "recent"], ["value", "item-count"], [1, "create-form"], [1, "list-content"], [1, "loading-state"], [1, "empty-state"], [1, "list-items"], [1, "dialog-footer"], [1, "footer-summary"], [1, "summary-empty"], [1, "footer-actions"], [1, "btn", "btn-secondary", 3, "click", "disabled"], [1, "btn", "btn-primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "clear-search", 3, "click"], [1, "fa-solid", "fa-times-circle"], [1, "create-button", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"], [1, "button-text"], [1, "create-form-header"], [1, "fa-solid", "fa-plus-circle"], [1, "create-form-body"], [1, "form-group"], ["type", "text", "placeholder", "List name *", 1, "form-input", 3, "ngModelChange", "keyup.enter", "ngModel", "disabled"], ["placeholder", "Description (optional)", "rows", "2", 1, "form-input", "form-textarea", 3, "ngModelChange", "ngModel", "disabled"], [1, "create-form-actions"], [1, "form-input", 3, "ngModelChange", "ngModel", "disabled"], [3, "ngValue"], ["text", "Loading lists...", "size", "medium"], [1, "fa-solid", "fa-search", "empty-icon"], [1, "empty-title"], [1, "empty-subtitle"], [1, "fa-solid", "fa-rectangle-list", "empty-icon"], [1, "btn", "btn-primary"], [1, "btn", "btn-primary", 3, "click"], [1, "list-item", 3, "selected-add", "selected-remove", "is-member"], [1, "list-item"], [1, "list-item-select"], [1, "select-btn", "add-btn", 3, "selected", "title"], [1, "select-btn", "remove-btn", 3, "selected", "title"], [1, "list-item-content"], [1, "list-item-header"], [1, "fa-solid", "fa-folder", "list-icon"], [1, "list-name"], [1, "badge", "badge-new"], [1, "list-item-meta"], [1, "list-count"], [1, "meta-separator"], [1, "list-updated"], [1, "membership-indicator", 3, "class"], [1, "select-btn", "add-btn", 3, "click", "title"], [1, "fa-solid", "fa-check"], [1, "select-btn", "remove-btn", 3, "click", "title"], [1, "fa-solid", "fa-undo"], [1, "fa-solid", "fa-minus"], [1, "list-description"], [1, "membership-indicator"], [1, "membership-text"], [1, "summary-item", "add"], [1, "summary-item", "remove"], [1, "fa-solid", "fa-minus-circle"]], template: function ListManagementDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
928
929
|
i0.ɵɵconditionalCreate(0, ListManagementDialogComponent_Conditional_0_Template, 50, 18, "div", 0);
|
|
929
930
|
} if (rf & 2) {
|
|
930
931
|
i0.ɵɵconditional(ctx.visible ? 0 : -1);
|
|
@@ -942,5 +943,5 @@ export class ListManagementDialogComponent {
|
|
|
942
943
|
}], cancel: [{
|
|
943
944
|
type: Output
|
|
944
945
|
}] }); })();
|
|
945
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ListManagementDialogComponent, { className: "ListManagementDialogComponent", filePath: "src/lib/components/list-management-dialog/list-management-dialog.component.ts", lineNumber:
|
|
946
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ListManagementDialogComponent, { className: "ListManagementDialogComponent", filePath: "src/lib/components/list-management-dialog/list-management-dialog.component.ts", lineNumber: 44 }); })();
|
|
946
947
|
//# sourceMappingURL=list-management-dialog.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-management-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/components/list-management-dialog/list-management-dialog.component.ts","../../../../src/lib/components/list-management-dialog/list-management-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n ChangeDetectorRef\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { Metadata } from '@memberjunction/core';\nimport { MJListEntity, MJListCategoryEntity } from '@memberjunction/core-entities';\nimport { ListManagementService } from '../../services/list-management.service';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport {\n ListManagementDialogConfig,\n ListManagementResult,\n ListItemViewModel,\n ListFilterTab,\n ListSortOption,\n CreateListConfig,\n ListOperationDetail\n} from '../../models/list-management.models';\n\n/**\n * A gorgeous, responsive dialog for managing list membership.\n * Supports adding/removing records from multiple lists with membership indicators.\n *\n * Features:\n * - Search and filter lists\n * - Visual membership indicators (full/partial/none)\n * - Inline list creation\n * - Mobile-responsive bottom sheet on small screens\n * - Batch operations with progress feedback\n */\n@Component({\n standalone: false,\n selector: 'mj-list-management-dialog',\n templateUrl: './list-management-dialog.component.html',\n styleUrls: ['./list-management-dialog.component.css']\n})\nexport class ListManagementDialogComponent implements OnInit, OnDestroy {\n /**\n * Configuration for the dialog\n */\n @Input() config!: ListManagementDialogConfig;\n\n /**\n * Controls dialog visibility\n */\n @Input()\n get visible(): boolean {\n return this._visible;\n }\n set visible(value: boolean) {\n if (value && !this._visible) {\n this.initializeDialog();\n }\n this._visible = value;\n }\n private _visible = false;\n\n /**\n * Emitted when dialog is closed with results\n */\n @Output() complete = new EventEmitter<ListManagementResult>();\n\n /**\n * Emitted when dialog is cancelled\n */\n @Output() cancel = new EventEmitter<void>();\n\n // State\n loading = false;\n saving = false;\n searchText = '';\n activeTab: ListFilterTab = 'all';\n sortOption: ListSortOption = 'name';\n showCreateForm = false;\n\n // Data\n allLists: ListItemViewModel[] = [];\n filteredLists: ListItemViewModel[] = [];\n categories: MJListCategoryEntity[] = [];\n\n // Create form state\n newListName = '';\n newListDescription = '';\n newListCategoryId: string | null = null;\n\n // Track changes\n private originalMembership = new Map<string, boolean>();\n public addedToLists: Set<string> = new Set();\n public removedFromLists: Set<string> = new Set();\n public newlyCreatedLists: MJListEntity[] = [];\n\n // Cleanup\n private destroy$ = new Subject<void>();\n private searchSubject = new Subject<string>();\n\n constructor(\n private listService: ListManagementService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.setupSearchDebounce();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Get dialog title based on config\n */\n get dialogTitle(): string {\n if (this.config?.dialogTitle) {\n return this.config.dialogTitle;\n }\n\n const recordCount = this.config?.recordIds?.length || 0;\n const recordText = recordCount === 1 ? '1 record' : `${recordCount} records`;\n\n switch (this.config?.mode) {\n case 'add':\n return `Add ${recordText} to Lists`;\n case 'remove':\n return `Remove ${recordText} from Lists`;\n default:\n return `Manage List Membership`;\n }\n }\n\n /**\n * Get subtitle showing context\n */\n get dialogSubtitle(): string {\n const recordCount = this.config?.recordIds?.length || 0;\n const entityName = this.config?.entityName || 'records';\n\n if (recordCount === 1 && this.config?.recordDisplayNames?.[0]) {\n return `\"${this.config.recordDisplayNames[0]}\" from ${entityName}`;\n }\n\n return `${recordCount} ${entityName} record${recordCount !== 1 ? 's' : ''}`;\n }\n\n /**\n * Check if there are pending changes\n */\n get hasChanges(): boolean {\n return this.addedToLists.size > 0 || this.removedFromLists.size > 0;\n }\n\n /**\n * Get count of lists to add to\n */\n get addCount(): number {\n return this.addedToLists.size;\n }\n\n /**\n * Get count of lists to remove from\n */\n get removeCount(): number {\n return this.removedFromLists.size;\n }\n\n /**\n * Setup search with debounce\n */\n private setupSearchDebounce(): void {\n this.searchSubject.pipe(\n debounceTime(300),\n takeUntil(this.destroy$)\n ).subscribe((searchText: string) => {\n this.searchText = searchText;\n this.applyFilters();\n });\n }\n\n /**\n * Initialize dialog when opened\n */\n private async initializeDialog(): Promise<void> {\n this.resetState();\n await this.loadData();\n }\n\n /**\n * Reset all state\n */\n private resetState(): void {\n this.searchText = '';\n this.activeTab = 'all';\n this.sortOption = 'name';\n this.showCreateForm = false;\n this.newListName = '';\n this.newListDescription = '';\n this.newListCategoryId = null;\n this.addedToLists.clear();\n this.removedFromLists.clear();\n this.newlyCreatedLists = [];\n this.originalMembership.clear();\n }\n\n /**\n * Load lists and membership data\n */\n private async loadData(): Promise<void> {\n if (!this.config) return;\n\n this.loading = true;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n\n // Load lists and membership in parallel\n const [lists, membership, categories] = await Promise.all([\n this.listService.getListsForEntity(\n this.config.entityId,\n md.CurrentUser.ID,\n true // Force refresh\n ),\n this.listService.getRecordMembership(\n this.config.entityId,\n this.config.recordIds\n ),\n this.listService.getListCategories()\n ]);\n\n this.categories = categories;\n\n // Build view models\n this.allLists = await this.listService.buildListViewModels(\n lists,\n this.config.recordIds,\n membership\n );\n\n // Store original membership state\n for (const vm of this.allLists) {\n this.originalMembership.set(vm.list.ID, vm.isFullMember || vm.isPartialMember);\n }\n\n // Pre-select lists if configured\n if (this.config.preSelectedListIds) {\n for (const listId of this.config.preSelectedListIds) {\n const vm = this.allLists.find(l => UUIDsEqual(l.list.ID, listId));\n if (vm) {\n vm.isSelectedForAdd = true;\n this.addedToLists.add(listId);\n }\n }\n }\n\n this.applyFilters();\n } catch (error) {\n console.error('Error loading list data:', error);\n } finally {\n this.loading = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Handle search input\n */\n onSearchInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.searchSubject.next(value);\n }\n\n /**\n * Clear search\n */\n clearSearch(): void {\n this.searchText = '';\n this.searchSubject.next('');\n }\n\n /**\n * Change active tab\n */\n setActiveTab(tab: ListFilterTab): void {\n this.activeTab = tab;\n this.applyFilters();\n }\n\n /**\n * Change sort option\n */\n setSortOption(option: ListSortOption): void {\n this.sortOption = option;\n this.applyFilters();\n }\n\n /**\n * Apply all filters and sorting\n */\n private applyFilters(): void {\n let result = [...this.allLists];\n\n // Apply search filter\n if (this.searchText.trim()) {\n const search = this.searchText.toLowerCase();\n result = result.filter(vm =>\n vm.list.Name.toLowerCase().includes(search) ||\n (vm.list.Description?.toLowerCase().includes(search))\n );\n }\n\n // Apply tab filter\n switch (this.activeTab) {\n case 'my-lists':\n // Already filtered by user in loadData\n break;\n case 'recent':\n // Sort by last updated and take top 10\n result = result\n .sort((a, b) => b.lastUpdated.getTime() - a.lastUpdated.getTime())\n .slice(0, 10);\n break;\n // 'all' and 'shared' - no additional filtering for now\n }\n\n // Apply sorting\n switch (this.sortOption) {\n case 'name':\n result.sort((a, b) => a.list.Name.localeCompare(b.list.Name));\n break;\n case 'recent':\n result.sort((a, b) => b.lastUpdated.getTime() - a.lastUpdated.getTime());\n break;\n case 'item-count':\n result.sort((a, b) => b.itemCount - a.itemCount);\n break;\n }\n\n this.filteredLists = result;\n this.cdr.detectChanges();\n }\n\n /**\n * Toggle list selection for adding\n */\n toggleListForAdd(vm: ListItemViewModel): void {\n if (this.config?.mode === 'remove') return;\n\n const listId = vm.list.ID;\n\n if (vm.isSelectedForAdd || this.addedToLists.has(listId)) {\n // Deselect\n vm.isSelectedForAdd = false;\n this.addedToLists.delete(listId);\n } else {\n // Select for add\n vm.isSelectedForAdd = true;\n vm.isSelectedForRemove = false;\n this.addedToLists.add(listId);\n this.removedFromLists.delete(listId);\n }\n\n this.cdr.detectChanges();\n }\n\n /**\n * Toggle list selection for removal\n */\n toggleListForRemove(vm: ListItemViewModel): void {\n if (this.config?.mode === 'add') return;\n if (!this.config?.allowRemove && this.config?.mode !== 'manage') return;\n\n const listId = vm.list.ID;\n\n if (vm.isSelectedForRemove || this.removedFromLists.has(listId)) {\n // Deselect\n vm.isSelectedForRemove = false;\n this.removedFromLists.delete(listId);\n } else {\n // Select for remove\n vm.isSelectedForRemove = true;\n vm.isSelectedForAdd = false;\n this.removedFromLists.add(listId);\n this.addedToLists.delete(listId);\n }\n\n this.cdr.detectChanges();\n }\n\n /**\n * Get membership indicator class\n */\n getMembershipClass(vm: ListItemViewModel): string {\n if (vm.isFullMember) return 'full-member';\n if (vm.isPartialMember) return 'partial-member';\n return 'not-member';\n }\n\n /**\n * Get membership indicator text\n */\n getMembershipText(vm: ListItemViewModel): string {\n if (vm.isFullMember) {\n return `${vm.membershipCount}/${vm.totalSelectedRecords}`;\n }\n if (vm.isPartialMember) {\n return `${vm.membershipCount}/${vm.totalSelectedRecords}`;\n }\n return `0/${vm.totalSelectedRecords}`;\n }\n\n /**\n * Get membership icon\n */\n getMembershipIcon(vm: ListItemViewModel): string {\n if (vm.isFullMember) return 'fa-solid fa-check-circle';\n if (vm.isPartialMember) return 'fa-solid fa-circle-half-stroke';\n return 'fa-regular fa-circle';\n }\n\n /**\n * Show create list form\n */\n showCreateListForm(): void {\n this.showCreateForm = true;\n this.newListName = '';\n this.newListDescription = '';\n this.newListCategoryId = null;\n }\n\n /**\n * Cancel create list form\n */\n cancelCreateList(): void {\n this.showCreateForm = false;\n this.newListName = '';\n this.newListDescription = '';\n this.newListCategoryId = null;\n }\n\n /**\n * Create a new list\n */\n async createList(): Promise<void> {\n if (!this.newListName.trim() || !this.config) return;\n\n this.saving = true;\n\n try {\n const createConfig: CreateListConfig = {\n name: this.newListName.trim(),\n description: this.newListDescription.trim() || undefined,\n categoryId: this.newListCategoryId || undefined,\n entityId: this.config.entityId\n };\n\n const newList = await this.listService.createList(createConfig);\n\n if (newList) {\n this.newlyCreatedLists.push(newList);\n\n // Add to view models and select for add\n const vm: ListItemViewModel = {\n list: newList,\n itemCount: 0,\n membershipCount: 0,\n totalSelectedRecords: this.config.recordIds.length,\n isFullMember: false,\n isPartialMember: false,\n isNotMember: true,\n lastUpdated: new Date(),\n isSelectedForAdd: true,\n isSelectedForRemove: false\n };\n\n this.allLists.unshift(vm);\n this.addedToLists.add(newList.ID);\n\n this.showCreateForm = false;\n this.newListName = '';\n this.newListDescription = '';\n this.newListCategoryId = null;\n\n this.applyFilters();\n }\n } catch (error) {\n console.error('Error creating list:', error);\n } finally {\n this.saving = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Apply changes and close dialog\n */\n async applyChanges(): Promise<void> {\n if (!this.config) return;\n\n this.saving = true;\n\n const result: ListManagementResult = {\n action: 'apply',\n added: [],\n removed: [],\n newListsCreated: this.newlyCreatedLists\n };\n\n try {\n // Process additions\n if (this.addedToLists.size > 0) {\n console.log(`[ListManagementDialog] Processing additions:`);\n console.log(` - Lists to add to:`, [...this.addedToLists]);\n console.log(` - Record IDs:`, this.config.recordIds);\n\n const addResult = await this.listService.addRecordsToLists(\n [...this.addedToLists],\n this.config.recordIds,\n true // Skip duplicates\n );\n\n console.log(`[ListManagementDialog] Add result:`, addResult);\n\n for (const listId of this.addedToLists) {\n const vm = this.allLists.find(l => UUIDsEqual(l.list.ID, listId));\n if (vm) {\n result.added.push({\n listId,\n listName: vm.list.Name,\n recordIds: this.config.recordIds\n });\n }\n }\n }\n\n // Process removals\n if (this.removedFromLists.size > 0) {\n const removeResult = await this.listService.removeRecordsFromLists(\n [...this.removedFromLists],\n this.config.recordIds\n );\n\n for (const listId of this.removedFromLists) {\n const vm = this.allLists.find(l => UUIDsEqual(l.list.ID, listId));\n if (vm) {\n result.removed.push({\n listId,\n listName: vm.list.Name,\n recordIds: this.config.recordIds\n });\n }\n }\n }\n\n this.complete.emit(result);\n } catch (error) {\n console.error('Error applying changes:', error);\n } finally {\n this.saving = false;\n this._visible = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Cancel and close dialog\n */\n onCancel(): void {\n const result: ListManagementResult = {\n action: 'cancel',\n added: [],\n removed: [],\n newListsCreated: []\n };\n\n this._visible = false;\n this.cancel.emit();\n }\n\n /**\n * Format date for display\n */\n formatDate(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n\n if (minutes < 1) return 'just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days < 7) return `${days}d ago`;\n\n return date.toLocaleDateString();\n }\n\n /**\n * Check if we should show the add button for a list\n */\n showAddButton(vm: ListItemViewModel): boolean {\n if (this.config?.mode === 'remove') return false;\n return !vm.isFullMember || !this.originalMembership.get(vm.list.ID);\n }\n\n /**\n * Check if we should show the remove button for a list\n */\n showRemoveButton(vm: ListItemViewModel): boolean {\n if (this.config?.mode === 'add') return false;\n if (!this.config?.allowRemove && this.config?.mode !== 'manage') return false;\n return vm.isFullMember || vm.isPartialMember || this.originalMembership.get(vm.list.ID) === true;\n }\n}\n","@if (visible) {\n <div class=\"dialog-overlay\" (click)=\"onCancel()\">\n <div class=\"dialog-container\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div class=\"dialog-header\">\n <div class=\"header-content\">\n <div class=\"header-icon\">\n <span class=\"fa-solid fa-rectangle-list\"></span>\n </div>\n <div class=\"header-text\">\n <h2 class=\"dialog-title\">{{ dialogTitle }}</h2>\n <p class=\"dialog-subtitle\">{{ dialogSubtitle }}</p>\n </div>\n </div>\n <button class=\"close-button\" (click)=\"onCancel()\" title=\"Close\">\n <span class=\"fa-solid fa-times\"></span>\n </button>\n </div>\n\n <!-- Search and Filters -->\n <div class=\"search-section\">\n <div class=\"search-bar\">\n <span class=\"fa-solid fa-search search-icon\"></span>\n <input\n type=\"text\"\n class=\"search-input\"\n placeholder=\"Search lists...\"\n [value]=\"searchText\"\n (input)=\"onSearchInput($event)\"\n />\n @if (searchText) {\n <button class=\"clear-search\" (click)=\"clearSearch()\">\n <span class=\"fa-solid fa-times-circle\"></span>\n </button>\n }\n </div>\n\n @if (config.allowCreate !== false) {\n <button class=\"create-button\" (click)=\"showCreateListForm()\" [disabled]=\"showCreateForm\">\n <span class=\"fa-solid fa-plus\"></span>\n <span class=\"button-text\">New</span>\n </button>\n }\n </div>\n\n <!-- Filter Tabs -->\n <div class=\"filter-tabs\">\n <div class=\"tabs-left\">\n <button\n class=\"tab-button\"\n [class.active]=\"activeTab === 'all'\"\n (click)=\"setActiveTab('all')\">\n All\n </button>\n <button\n class=\"tab-button\"\n [class.active]=\"activeTab === 'my-lists'\"\n (click)=\"setActiveTab('my-lists')\">\n My Lists\n </button>\n <button\n class=\"tab-button\"\n [class.active]=\"activeTab === 'recent'\"\n (click)=\"setActiveTab('recent')\">\n Recent\n </button>\n </div>\n <div class=\"tabs-right\">\n <select class=\"sort-select\" [value]=\"sortOption\" (change)=\"setSortOption($any($event.target).value)\">\n <option value=\"name\">Sort: Name</option>\n <option value=\"recent\">Sort: Recent</option>\n <option value=\"item-count\">Sort: Items</option>\n </select>\n </div>\n </div>\n\n <!-- Create List Form -->\n @if (showCreateForm) {\n <div class=\"create-form\">\n <div class=\"create-form-header\">\n <span class=\"fa-solid fa-plus-circle\"></span>\n <span>Create New List</span>\n </div>\n <div class=\"create-form-body\">\n <div class=\"form-group\">\n <input\n type=\"text\"\n class=\"form-input\"\n placeholder=\"List name *\"\n [(ngModel)]=\"newListName\"\n [disabled]=\"saving\"\n (keyup.enter)=\"createList()\"\n />\n </div>\n <div class=\"form-group\">\n <textarea\n class=\"form-input form-textarea\"\n placeholder=\"Description (optional)\"\n [(ngModel)]=\"newListDescription\"\n [disabled]=\"saving\"\n rows=\"2\">\n </textarea>\n </div>\n @if (categories.length > 0) {\n <div class=\"form-group\">\n <select class=\"form-input\" [(ngModel)]=\"newListCategoryId\" [disabled]=\"saving\">\n <option [ngValue]=\"null\">No category</option>\n @for (category of categories; track category.ID) {\n <option [ngValue]=\"category.ID\">{{ category.Name }}</option>\n }\n </select>\n </div>\n }\n <div class=\"create-form-actions\">\n <button\n class=\"btn btn-primary\"\n (click)=\"createList()\"\n [disabled]=\"!newListName.trim() || saving\">\n @if (saving) {\n <span class=\"fa-solid fa-spinner fa-spin\"></span>\n }\n Create List\n </button>\n <button class=\"btn btn-secondary\" (click)=\"cancelCreateList()\" [disabled]=\"saving\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- List Content -->\n <div class=\"list-content\">\n @if (loading) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading lists...\" size=\"medium\"></mj-loading>\n </div>\n } @else if (filteredLists.length === 0) {\n <div class=\"empty-state\">\n @if (searchText) {\n <span class=\"fa-solid fa-search empty-icon\"></span>\n <p class=\"empty-title\">No lists found</p>\n <p class=\"empty-subtitle\">Try a different search term</p>\n } @else {\n <span class=\"fa-solid fa-rectangle-list empty-icon\"></span>\n <p class=\"empty-title\">No lists yet</p>\n <p class=\"empty-subtitle\">Create your first list to get started</p>\n @if (config.allowCreate !== false) {\n <button class=\"btn btn-primary\" (click)=\"showCreateListForm()\">\n <span class=\"fa-solid fa-plus\"></span>\n Create List\n </button>\n }\n }\n </div>\n } @else {\n <div class=\"list-items\">\n @for (vm of filteredLists; track vm.list.ID) {\n <div\n class=\"list-item\"\n [class.selected-add]=\"vm.isSelectedForAdd || addedToLists.has(vm.list.ID)\"\n [class.selected-remove]=\"vm.isSelectedForRemove || removedFromLists.has(vm.list.ID)\"\n [class.is-member]=\"vm.isFullMember || vm.isPartialMember\">\n\n <!-- Checkbox / Selection Area -->\n <div class=\"list-item-select\">\n @if (showAddButton(vm)) {\n <button\n class=\"select-btn add-btn\"\n [class.selected]=\"vm.isSelectedForAdd || addedToLists.has(vm.list.ID)\"\n (click)=\"toggleListForAdd(vm)\"\n [title]=\"(vm.isSelectedForAdd || addedToLists.has(vm.list.ID)) ? 'Remove from selection' : 'Add to this list'\">\n @if (vm.isSelectedForAdd || addedToLists.has(vm.list.ID)) {\n <span class=\"fa-solid fa-check\"></span>\n } @else {\n <span class=\"fa-solid fa-plus\"></span>\n }\n </button>\n }\n @if (showRemoveButton(vm) && (vm.isFullMember || vm.isPartialMember)) {\n <button\n class=\"select-btn remove-btn\"\n [class.selected]=\"vm.isSelectedForRemove || removedFromLists.has(vm.list.ID)\"\n (click)=\"toggleListForRemove(vm)\"\n [title]=\"(vm.isSelectedForRemove || removedFromLists.has(vm.list.ID)) ? 'Cancel removal' : 'Remove from this list'\">\n @if (vm.isSelectedForRemove || removedFromLists.has(vm.list.ID)) {\n <span class=\"fa-solid fa-undo\"></span>\n } @else {\n <span class=\"fa-solid fa-minus\"></span>\n }\n </button>\n }\n </div>\n\n <!-- List Info -->\n <div class=\"list-item-content\">\n <div class=\"list-item-header\">\n <span class=\"fa-solid fa-folder list-icon\"></span>\n <span class=\"list-name\">{{ vm.list.Name }}</span>\n @if (newlyCreatedLists.includes(vm.list)) {\n <span class=\"badge badge-new\">New</span>\n }\n </div>\n <div class=\"list-item-meta\">\n @if (vm.list.Description) {\n <span class=\"list-description\">{{ vm.list.Description }}</span>\n <span class=\"meta-separator\">•</span>\n }\n <span class=\"list-count\">{{ vm.itemCount }} item{{ vm.itemCount !== 1 ? 's' : '' }}</span>\n <span class=\"meta-separator\">•</span>\n <span class=\"list-updated\">{{ formatDate(vm.lastUpdated) }}</span>\n </div>\n </div>\n\n <!-- Membership Indicator -->\n @if (config.showMembership !== false) {\n <div class=\"membership-indicator\" [class]=\"getMembershipClass(vm)\">\n <span [class]=\"getMembershipIcon(vm)\"></span>\n <span class=\"membership-text\">{{ getMembershipText(vm) }}</span>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Footer -->\n <div class=\"dialog-footer\">\n <div class=\"footer-summary\">\n @if (hasChanges) {\n @if (addCount > 0) {\n <span class=\"summary-item add\">\n <span class=\"fa-solid fa-plus-circle\"></span>\n {{ addCount }} list{{ addCount !== 1 ? 's' : '' }}\n </span>\n }\n @if (removeCount > 0) {\n <span class=\"summary-item remove\">\n <span class=\"fa-solid fa-minus-circle\"></span>\n {{ removeCount }} list{{ removeCount !== 1 ? 's' : '' }}\n </span>\n }\n } @else {\n <span class=\"summary-empty\">No changes</span>\n }\n </div>\n <div class=\"footer-actions\">\n <button class=\"btn btn-secondary\" (click)=\"onCancel()\" [disabled]=\"saving\">\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n (click)=\"applyChanges()\"\n [disabled]=\"!hasChanges || saving\">\n @if (saving) {\n <span class=\"fa-solid fa-spinner fa-spin\"></span>\n }\n Apply Changes\n </button>\n </div>\n </div>\n </div>\n </div>\n}\n"]}
|
|
1
|
+
{"version":3,"file":"list-management-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/components/list-management-dialog/list-management-dialog.component.ts","../../../../src/lib/components/list-management-dialog/list-management-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n ChangeDetectorRef\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { Metadata } from '@memberjunction/core';\nimport { MJListEntity, MJListCategoryEntity } from '@memberjunction/core-entities';\nimport { ListManagementService } from '../../services/list-management.service';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport {\n ListManagementDialogConfig,\n ListManagementResult,\n ListItemViewModel,\n ListFilterTab,\n ListSortOption,\n CreateListConfig,\n ListOperationDetail\n} from '../../models/list-management.models';\n\n/**\n * A gorgeous, responsive dialog for managing list membership.\n * Supports adding/removing records from multiple lists with membership indicators.\n *\n * Features:\n * - Search and filter lists\n * - Visual membership indicators (full/partial/none)\n * - Inline list creation\n * - Mobile-responsive bottom sheet on small screens\n * - Batch operations with progress feedback\n */\n@Component({\n standalone: false,\n selector: 'mj-list-management-dialog',\n templateUrl: './list-management-dialog.component.html',\n styleUrls: ['./list-management-dialog.component.css']\n})\nexport class ListManagementDialogComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n /**\n * Configuration for the dialog\n */\n @Input() config!: ListManagementDialogConfig;\n\n /**\n * Controls dialog visibility\n */\n @Input()\n get visible(): boolean {\n return this._visible;\n }\n set visible(value: boolean) {\n if (value && !this._visible) {\n this.initializeDialog();\n }\n this._visible = value;\n }\n private _visible = false;\n\n /**\n * Emitted when dialog is closed with results\n */\n @Output() complete = new EventEmitter<ListManagementResult>();\n\n /**\n * Emitted when dialog is cancelled\n */\n @Output() cancel = new EventEmitter<void>();\n\n // State\n loading = false;\n saving = false;\n searchText = '';\n activeTab: ListFilterTab = 'all';\n sortOption: ListSortOption = 'name';\n showCreateForm = false;\n\n // Data\n allLists: ListItemViewModel[] = [];\n filteredLists: ListItemViewModel[] = [];\n categories: MJListCategoryEntity[] = [];\n\n // Create form state\n newListName = '';\n newListDescription = '';\n newListCategoryId: string | null = null;\n\n // Track changes\n private originalMembership = new Map<string, boolean>();\n public addedToLists: Set<string> = new Set();\n public removedFromLists: Set<string> = new Set();\n public newlyCreatedLists: MJListEntity[] = [];\n\n // Cleanup\n private destroy$ = new Subject<void>();\n private searchSubject = new Subject<string>();\n\n constructor(\n private listService: ListManagementService,\n private cdr: ChangeDetectorRef\n ) {\n super();}\n\n ngOnInit(): void {\n this.setupSearchDebounce();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Get dialog title based on config\n */\n get dialogTitle(): string {\n if (this.config?.dialogTitle) {\n return this.config.dialogTitle;\n }\n\n const recordCount = this.config?.recordIds?.length || 0;\n const recordText = recordCount === 1 ? '1 record' : `${recordCount} records`;\n\n switch (this.config?.mode) {\n case 'add':\n return `Add ${recordText} to Lists`;\n case 'remove':\n return `Remove ${recordText} from Lists`;\n default:\n return `Manage List Membership`;\n }\n }\n\n /**\n * Get subtitle showing context\n */\n get dialogSubtitle(): string {\n const recordCount = this.config?.recordIds?.length || 0;\n const entityName = this.config?.entityName || 'records';\n\n if (recordCount === 1 && this.config?.recordDisplayNames?.[0]) {\n return `\"${this.config.recordDisplayNames[0]}\" from ${entityName}`;\n }\n\n return `${recordCount} ${entityName} record${recordCount !== 1 ? 's' : ''}`;\n }\n\n /**\n * Check if there are pending changes\n */\n get hasChanges(): boolean {\n return this.addedToLists.size > 0 || this.removedFromLists.size > 0;\n }\n\n /**\n * Get count of lists to add to\n */\n get addCount(): number {\n return this.addedToLists.size;\n }\n\n /**\n * Get count of lists to remove from\n */\n get removeCount(): number {\n return this.removedFromLists.size;\n }\n\n /**\n * Setup search with debounce\n */\n private setupSearchDebounce(): void {\n this.searchSubject.pipe(\n debounceTime(300),\n takeUntil(this.destroy$)\n ).subscribe((searchText: string) => {\n this.searchText = searchText;\n this.applyFilters();\n });\n }\n\n /**\n * Initialize dialog when opened\n */\n private async initializeDialog(): Promise<void> {\n this.resetState();\n await this.loadData();\n }\n\n /**\n * Reset all state\n */\n private resetState(): void {\n this.searchText = '';\n this.activeTab = 'all';\n this.sortOption = 'name';\n this.showCreateForm = false;\n this.newListName = '';\n this.newListDescription = '';\n this.newListCategoryId = null;\n this.addedToLists.clear();\n this.removedFromLists.clear();\n this.newlyCreatedLists = [];\n this.originalMembership.clear();\n }\n\n /**\n * Load lists and membership data\n */\n private async loadData(): Promise<void> {\n if (!this.config) return;\n\n this.loading = true;\n this.cdr.detectChanges();\n\n try {\n const md = this.ProviderToUse;\n\n // Load lists and membership in parallel\n const [lists, membership, categories] = await Promise.all([\n this.listService.getListsForEntity(\n this.config.entityId,\n md.CurrentUser.ID,\n true // Force refresh\n ),\n this.listService.getRecordMembership(\n this.config.entityId,\n this.config.recordIds\n ),\n this.listService.getListCategories()\n ]);\n\n this.categories = categories;\n\n // Build view models\n this.allLists = await this.listService.buildListViewModels(\n lists,\n this.config.recordIds,\n membership\n );\n\n // Store original membership state\n for (const vm of this.allLists) {\n this.originalMembership.set(vm.list.ID, vm.isFullMember || vm.isPartialMember);\n }\n\n // Pre-select lists if configured\n if (this.config.preSelectedListIds) {\n for (const listId of this.config.preSelectedListIds) {\n const vm = this.allLists.find(l => UUIDsEqual(l.list.ID, listId));\n if (vm) {\n vm.isSelectedForAdd = true;\n this.addedToLists.add(listId);\n }\n }\n }\n\n this.applyFilters();\n } catch (error) {\n console.error('Error loading list data:', error);\n } finally {\n this.loading = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Handle search input\n */\n onSearchInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.searchSubject.next(value);\n }\n\n /**\n * Clear search\n */\n clearSearch(): void {\n this.searchText = '';\n this.searchSubject.next('');\n }\n\n /**\n * Change active tab\n */\n setActiveTab(tab: ListFilterTab): void {\n this.activeTab = tab;\n this.applyFilters();\n }\n\n /**\n * Change sort option\n */\n setSortOption(option: ListSortOption): void {\n this.sortOption = option;\n this.applyFilters();\n }\n\n /**\n * Apply all filters and sorting\n */\n private applyFilters(): void {\n let result = [...this.allLists];\n\n // Apply search filter\n if (this.searchText.trim()) {\n const search = this.searchText.toLowerCase();\n result = result.filter(vm =>\n vm.list.Name.toLowerCase().includes(search) ||\n (vm.list.Description?.toLowerCase().includes(search))\n );\n }\n\n // Apply tab filter\n switch (this.activeTab) {\n case 'my-lists':\n // Already filtered by user in loadData\n break;\n case 'recent':\n // Sort by last updated and take top 10\n result = result\n .sort((a, b) => b.lastUpdated.getTime() - a.lastUpdated.getTime())\n .slice(0, 10);\n break;\n // 'all' and 'shared' - no additional filtering for now\n }\n\n // Apply sorting\n switch (this.sortOption) {\n case 'name':\n result.sort((a, b) => a.list.Name.localeCompare(b.list.Name));\n break;\n case 'recent':\n result.sort((a, b) => b.lastUpdated.getTime() - a.lastUpdated.getTime());\n break;\n case 'item-count':\n result.sort((a, b) => b.itemCount - a.itemCount);\n break;\n }\n\n this.filteredLists = result;\n this.cdr.detectChanges();\n }\n\n /**\n * Toggle list selection for adding\n */\n toggleListForAdd(vm: ListItemViewModel): void {\n if (this.config?.mode === 'remove') return;\n\n const listId = vm.list.ID;\n\n if (vm.isSelectedForAdd || this.addedToLists.has(listId)) {\n // Deselect\n vm.isSelectedForAdd = false;\n this.addedToLists.delete(listId);\n } else {\n // Select for add\n vm.isSelectedForAdd = true;\n vm.isSelectedForRemove = false;\n this.addedToLists.add(listId);\n this.removedFromLists.delete(listId);\n }\n\n this.cdr.detectChanges();\n }\n\n /**\n * Toggle list selection for removal\n */\n toggleListForRemove(vm: ListItemViewModel): void {\n if (this.config?.mode === 'add') return;\n if (!this.config?.allowRemove && this.config?.mode !== 'manage') return;\n\n const listId = vm.list.ID;\n\n if (vm.isSelectedForRemove || this.removedFromLists.has(listId)) {\n // Deselect\n vm.isSelectedForRemove = false;\n this.removedFromLists.delete(listId);\n } else {\n // Select for remove\n vm.isSelectedForRemove = true;\n vm.isSelectedForAdd = false;\n this.removedFromLists.add(listId);\n this.addedToLists.delete(listId);\n }\n\n this.cdr.detectChanges();\n }\n\n /**\n * Get membership indicator class\n */\n getMembershipClass(vm: ListItemViewModel): string {\n if (vm.isFullMember) return 'full-member';\n if (vm.isPartialMember) return 'partial-member';\n return 'not-member';\n }\n\n /**\n * Get membership indicator text\n */\n getMembershipText(vm: ListItemViewModel): string {\n if (vm.isFullMember) {\n return `${vm.membershipCount}/${vm.totalSelectedRecords}`;\n }\n if (vm.isPartialMember) {\n return `${vm.membershipCount}/${vm.totalSelectedRecords}`;\n }\n return `0/${vm.totalSelectedRecords}`;\n }\n\n /**\n * Get membership icon\n */\n getMembershipIcon(vm: ListItemViewModel): string {\n if (vm.isFullMember) return 'fa-solid fa-check-circle';\n if (vm.isPartialMember) return 'fa-solid fa-circle-half-stroke';\n return 'fa-regular fa-circle';\n }\n\n /**\n * Show create list form\n */\n showCreateListForm(): void {\n this.showCreateForm = true;\n this.newListName = '';\n this.newListDescription = '';\n this.newListCategoryId = null;\n }\n\n /**\n * Cancel create list form\n */\n cancelCreateList(): void {\n this.showCreateForm = false;\n this.newListName = '';\n this.newListDescription = '';\n this.newListCategoryId = null;\n }\n\n /**\n * Create a new list\n */\n async createList(): Promise<void> {\n if (!this.newListName.trim() || !this.config) return;\n\n this.saving = true;\n\n try {\n const createConfig: CreateListConfig = {\n name: this.newListName.trim(),\n description: this.newListDescription.trim() || undefined,\n categoryId: this.newListCategoryId || undefined,\n entityId: this.config.entityId\n };\n\n const newList = await this.listService.createList(createConfig);\n\n if (newList) {\n this.newlyCreatedLists.push(newList);\n\n // Add to view models and select for add\n const vm: ListItemViewModel = {\n list: newList,\n itemCount: 0,\n membershipCount: 0,\n totalSelectedRecords: this.config.recordIds.length,\n isFullMember: false,\n isPartialMember: false,\n isNotMember: true,\n lastUpdated: new Date(),\n isSelectedForAdd: true,\n isSelectedForRemove: false\n };\n\n this.allLists.unshift(vm);\n this.addedToLists.add(newList.ID);\n\n this.showCreateForm = false;\n this.newListName = '';\n this.newListDescription = '';\n this.newListCategoryId = null;\n\n this.applyFilters();\n }\n } catch (error) {\n console.error('Error creating list:', error);\n } finally {\n this.saving = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Apply changes and close dialog\n */\n async applyChanges(): Promise<void> {\n if (!this.config) return;\n\n this.saving = true;\n\n const result: ListManagementResult = {\n action: 'apply',\n added: [],\n removed: [],\n newListsCreated: this.newlyCreatedLists\n };\n\n try {\n // Process additions\n if (this.addedToLists.size > 0) {\n console.log(`[ListManagementDialog] Processing additions:`);\n console.log(` - Lists to add to:`, [...this.addedToLists]);\n console.log(` - Record IDs:`, this.config.recordIds);\n\n const addResult = await this.listService.addRecordsToLists(\n [...this.addedToLists],\n this.config.recordIds,\n true // Skip duplicates\n );\n\n console.log(`[ListManagementDialog] Add result:`, addResult);\n\n for (const listId of this.addedToLists) {\n const vm = this.allLists.find(l => UUIDsEqual(l.list.ID, listId));\n if (vm) {\n result.added.push({\n listId,\n listName: vm.list.Name,\n recordIds: this.config.recordIds\n });\n }\n }\n }\n\n // Process removals\n if (this.removedFromLists.size > 0) {\n const removeResult = await this.listService.removeRecordsFromLists(\n [...this.removedFromLists],\n this.config.recordIds\n );\n\n for (const listId of this.removedFromLists) {\n const vm = this.allLists.find(l => UUIDsEqual(l.list.ID, listId));\n if (vm) {\n result.removed.push({\n listId,\n listName: vm.list.Name,\n recordIds: this.config.recordIds\n });\n }\n }\n }\n\n this.complete.emit(result);\n } catch (error) {\n console.error('Error applying changes:', error);\n } finally {\n this.saving = false;\n this._visible = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Cancel and close dialog\n */\n onCancel(): void {\n const result: ListManagementResult = {\n action: 'cancel',\n added: [],\n removed: [],\n newListsCreated: []\n };\n\n this._visible = false;\n this.cancel.emit();\n }\n\n /**\n * Format date for display\n */\n formatDate(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n\n if (minutes < 1) return 'just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days < 7) return `${days}d ago`;\n\n return date.toLocaleDateString();\n }\n\n /**\n * Check if we should show the add button for a list\n */\n showAddButton(vm: ListItemViewModel): boolean {\n if (this.config?.mode === 'remove') return false;\n return !vm.isFullMember || !this.originalMembership.get(vm.list.ID);\n }\n\n /**\n * Check if we should show the remove button for a list\n */\n showRemoveButton(vm: ListItemViewModel): boolean {\n if (this.config?.mode === 'add') return false;\n if (!this.config?.allowRemove && this.config?.mode !== 'manage') return false;\n return vm.isFullMember || vm.isPartialMember || this.originalMembership.get(vm.list.ID) === true;\n }\n}\n","@if (visible) {\n <div class=\"dialog-overlay\" (click)=\"onCancel()\">\n <div class=\"dialog-container\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div class=\"dialog-header\">\n <div class=\"header-content\">\n <div class=\"header-icon\">\n <span class=\"fa-solid fa-rectangle-list\"></span>\n </div>\n <div class=\"header-text\">\n <h2 class=\"dialog-title\">{{ dialogTitle }}</h2>\n <p class=\"dialog-subtitle\">{{ dialogSubtitle }}</p>\n </div>\n </div>\n <button class=\"close-button\" (click)=\"onCancel()\" title=\"Close\">\n <span class=\"fa-solid fa-times\"></span>\n </button>\n </div>\n\n <!-- Search and Filters -->\n <div class=\"search-section\">\n <div class=\"search-bar\">\n <span class=\"fa-solid fa-search search-icon\"></span>\n <input\n type=\"text\"\n class=\"search-input\"\n placeholder=\"Search lists...\"\n [value]=\"searchText\"\n (input)=\"onSearchInput($event)\"\n />\n @if (searchText) {\n <button class=\"clear-search\" (click)=\"clearSearch()\">\n <span class=\"fa-solid fa-times-circle\"></span>\n </button>\n }\n </div>\n\n @if (config.allowCreate !== false) {\n <button class=\"create-button\" (click)=\"showCreateListForm()\" [disabled]=\"showCreateForm\">\n <span class=\"fa-solid fa-plus\"></span>\n <span class=\"button-text\">New</span>\n </button>\n }\n </div>\n\n <!-- Filter Tabs -->\n <div class=\"filter-tabs\">\n <div class=\"tabs-left\">\n <button\n class=\"tab-button\"\n [class.active]=\"activeTab === 'all'\"\n (click)=\"setActiveTab('all')\">\n All\n </button>\n <button\n class=\"tab-button\"\n [class.active]=\"activeTab === 'my-lists'\"\n (click)=\"setActiveTab('my-lists')\">\n My Lists\n </button>\n <button\n class=\"tab-button\"\n [class.active]=\"activeTab === 'recent'\"\n (click)=\"setActiveTab('recent')\">\n Recent\n </button>\n </div>\n <div class=\"tabs-right\">\n <select class=\"sort-select\" [value]=\"sortOption\" (change)=\"setSortOption($any($event.target).value)\">\n <option value=\"name\">Sort: Name</option>\n <option value=\"recent\">Sort: Recent</option>\n <option value=\"item-count\">Sort: Items</option>\n </select>\n </div>\n </div>\n\n <!-- Create List Form -->\n @if (showCreateForm) {\n <div class=\"create-form\">\n <div class=\"create-form-header\">\n <span class=\"fa-solid fa-plus-circle\"></span>\n <span>Create New List</span>\n </div>\n <div class=\"create-form-body\">\n <div class=\"form-group\">\n <input\n type=\"text\"\n class=\"form-input\"\n placeholder=\"List name *\"\n [(ngModel)]=\"newListName\"\n [disabled]=\"saving\"\n (keyup.enter)=\"createList()\"\n />\n </div>\n <div class=\"form-group\">\n <textarea\n class=\"form-input form-textarea\"\n placeholder=\"Description (optional)\"\n [(ngModel)]=\"newListDescription\"\n [disabled]=\"saving\"\n rows=\"2\">\n </textarea>\n </div>\n @if (categories.length > 0) {\n <div class=\"form-group\">\n <select class=\"form-input\" [(ngModel)]=\"newListCategoryId\" [disabled]=\"saving\">\n <option [ngValue]=\"null\">No category</option>\n @for (category of categories; track category.ID) {\n <option [ngValue]=\"category.ID\">{{ category.Name }}</option>\n }\n </select>\n </div>\n }\n <div class=\"create-form-actions\">\n <button\n class=\"btn btn-primary\"\n (click)=\"createList()\"\n [disabled]=\"!newListName.trim() || saving\">\n @if (saving) {\n <span class=\"fa-solid fa-spinner fa-spin\"></span>\n }\n Create List\n </button>\n <button class=\"btn btn-secondary\" (click)=\"cancelCreateList()\" [disabled]=\"saving\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- List Content -->\n <div class=\"list-content\">\n @if (loading) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading lists...\" size=\"medium\"></mj-loading>\n </div>\n } @else if (filteredLists.length === 0) {\n <div class=\"empty-state\">\n @if (searchText) {\n <span class=\"fa-solid fa-search empty-icon\"></span>\n <p class=\"empty-title\">No lists found</p>\n <p class=\"empty-subtitle\">Try a different search term</p>\n } @else {\n <span class=\"fa-solid fa-rectangle-list empty-icon\"></span>\n <p class=\"empty-title\">No lists yet</p>\n <p class=\"empty-subtitle\">Create your first list to get started</p>\n @if (config.allowCreate !== false) {\n <button class=\"btn btn-primary\" (click)=\"showCreateListForm()\">\n <span class=\"fa-solid fa-plus\"></span>\n Create List\n </button>\n }\n }\n </div>\n } @else {\n <div class=\"list-items\">\n @for (vm of filteredLists; track vm.list.ID) {\n <div\n class=\"list-item\"\n [class.selected-add]=\"vm.isSelectedForAdd || addedToLists.has(vm.list.ID)\"\n [class.selected-remove]=\"vm.isSelectedForRemove || removedFromLists.has(vm.list.ID)\"\n [class.is-member]=\"vm.isFullMember || vm.isPartialMember\">\n\n <!-- Checkbox / Selection Area -->\n <div class=\"list-item-select\">\n @if (showAddButton(vm)) {\n <button\n class=\"select-btn add-btn\"\n [class.selected]=\"vm.isSelectedForAdd || addedToLists.has(vm.list.ID)\"\n (click)=\"toggleListForAdd(vm)\"\n [title]=\"(vm.isSelectedForAdd || addedToLists.has(vm.list.ID)) ? 'Remove from selection' : 'Add to this list'\">\n @if (vm.isSelectedForAdd || addedToLists.has(vm.list.ID)) {\n <span class=\"fa-solid fa-check\"></span>\n } @else {\n <span class=\"fa-solid fa-plus\"></span>\n }\n </button>\n }\n @if (showRemoveButton(vm) && (vm.isFullMember || vm.isPartialMember)) {\n <button\n class=\"select-btn remove-btn\"\n [class.selected]=\"vm.isSelectedForRemove || removedFromLists.has(vm.list.ID)\"\n (click)=\"toggleListForRemove(vm)\"\n [title]=\"(vm.isSelectedForRemove || removedFromLists.has(vm.list.ID)) ? 'Cancel removal' : 'Remove from this list'\">\n @if (vm.isSelectedForRemove || removedFromLists.has(vm.list.ID)) {\n <span class=\"fa-solid fa-undo\"></span>\n } @else {\n <span class=\"fa-solid fa-minus\"></span>\n }\n </button>\n }\n </div>\n\n <!-- List Info -->\n <div class=\"list-item-content\">\n <div class=\"list-item-header\">\n <span class=\"fa-solid fa-folder list-icon\"></span>\n <span class=\"list-name\">{{ vm.list.Name }}</span>\n @if (newlyCreatedLists.includes(vm.list)) {\n <span class=\"badge badge-new\">New</span>\n }\n </div>\n <div class=\"list-item-meta\">\n @if (vm.list.Description) {\n <span class=\"list-description\">{{ vm.list.Description }}</span>\n <span class=\"meta-separator\">•</span>\n }\n <span class=\"list-count\">{{ vm.itemCount }} item{{ vm.itemCount !== 1 ? 's' : '' }}</span>\n <span class=\"meta-separator\">•</span>\n <span class=\"list-updated\">{{ formatDate(vm.lastUpdated) }}</span>\n </div>\n </div>\n\n <!-- Membership Indicator -->\n @if (config.showMembership !== false) {\n <div class=\"membership-indicator\" [class]=\"getMembershipClass(vm)\">\n <span [class]=\"getMembershipIcon(vm)\"></span>\n <span class=\"membership-text\">{{ getMembershipText(vm) }}</span>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Footer -->\n <div class=\"dialog-footer\">\n <div class=\"footer-summary\">\n @if (hasChanges) {\n @if (addCount > 0) {\n <span class=\"summary-item add\">\n <span class=\"fa-solid fa-plus-circle\"></span>\n {{ addCount }} list{{ addCount !== 1 ? 's' : '' }}\n </span>\n }\n @if (removeCount > 0) {\n <span class=\"summary-item remove\">\n <span class=\"fa-solid fa-minus-circle\"></span>\n {{ removeCount }} list{{ removeCount !== 1 ? 's' : '' }}\n </span>\n }\n } @else {\n <span class=\"summary-empty\">No changes</span>\n }\n </div>\n <div class=\"footer-actions\">\n <button class=\"btn btn-secondary\" (click)=\"onCancel()\" [disabled]=\"saving\">\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n (click)=\"applyChanges()\"\n [disabled]=\"!hasChanges || saving\">\n @if (saving) {\n <span class=\"fa-solid fa-spinner fa-spin\"></span>\n }\n Apply Changes\n </button>\n </div>\n </div>\n </div>\n </div>\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EventEmitter, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
2
3
|
import { ListSharingService } from '../../services/list-sharing.service';
|
|
3
4
|
import { ListShareDialogConfig, ListShareDialogResult, ListShareInfo, ListPermissionLevel, ShareRecipient } from '../../models/list-sharing.models';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
@@ -12,7 +13,7 @@ import * as i0 from "@angular/core";
|
|
|
12
13
|
* - Current shares management
|
|
13
14
|
* - Remove access functionality
|
|
14
15
|
*/
|
|
15
|
-
export declare class ListShareDialogComponent implements OnInit, OnDestroy {
|
|
16
|
+
export declare class ListShareDialogComponent extends BaseAngularComponent implements OnInit, OnDestroy {
|
|
16
17
|
private sharingService;
|
|
17
18
|
private cdr;
|
|
18
19
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-share-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/list-share-dialog/list-share-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EACZ,MAAM,EACN,SAAS,EACT,iBAAiB,EAClB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"list-share-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/list-share-dialog/list-share-dialog.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
2
|
import { Subject } from 'rxjs';
|
|
3
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
3
4
|
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
4
|
-
import { Metadata } from '@memberjunction/core';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "../../services/list-sharing.service";
|
|
7
7
|
import * as i2 from "@angular/forms";
|
|
@@ -302,7 +302,7 @@ function ListShareDialogComponent_Conditional_0_Template(rf, ctx) { if (rf & 1)
|
|
|
302
302
|
* - Current shares management
|
|
303
303
|
* - Remove access functionality
|
|
304
304
|
*/
|
|
305
|
-
export class ListShareDialogComponent {
|
|
305
|
+
export class ListShareDialogComponent extends BaseAngularComponent {
|
|
306
306
|
sharingService;
|
|
307
307
|
cdr;
|
|
308
308
|
/**
|
|
@@ -355,6 +355,7 @@ export class ListShareDialogComponent {
|
|
|
355
355
|
destroy$ = new Subject();
|
|
356
356
|
searchSubject = new Subject();
|
|
357
357
|
constructor(sharingService, cdr) {
|
|
358
|
+
super();
|
|
358
359
|
this.sharingService = sharingService;
|
|
359
360
|
this.cdr = cdr;
|
|
360
361
|
}
|
|
@@ -501,7 +502,7 @@ export class ListShareDialogComponent {
|
|
|
501
502
|
return;
|
|
502
503
|
this.saving = true;
|
|
503
504
|
try {
|
|
504
|
-
const md =
|
|
505
|
+
const md = this.ProviderToUse;
|
|
505
506
|
let result;
|
|
506
507
|
if (this.selectedRecipient.type === 'User') {
|
|
507
508
|
result = await this.sharingService.shareListWithUser(this.config.listId, this.selectedRecipient.id, this.selectedPermission, this.config.currentUserId);
|
|
@@ -635,7 +636,7 @@ export class ListShareDialogComponent {
|
|
|
635
636
|
return this.config?.isOwner === true;
|
|
636
637
|
}
|
|
637
638
|
static ɵfac = function ListShareDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ListShareDialogComponent)(i0.ɵɵdirectiveInject(i1.ListSharingService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
638
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ListShareDialogComponent, selectors: [["mj-list-share-dialog"]], inputs: { config: "config", visible: "visible" }, outputs: { complete: "complete", cancel: "cancel" }, standalone: false, decls: 1, vars: 1, consts: [["mjDropdownItem", ""], [3, "Visible", "Title", "Width"], [3, "Close", "Visible", "Title", "Width"], [1, "share-dialog-content"], [1, "loading-container"], ["mjButton", "", "variant", "primary", 3, "click"], ["mjButton", "", 3, "click"], ["text", "Loading shares..."], [1, "add-share-section"], [1, "section-divider"], [1, "current-shares-section"], [1, "empty-state"], [1, "readonly-notice"], [1, "section-title"], [1, "search-type-toggle"], ["mjButton", "", 3, "click", "variant"], [1, "fa-solid", "fa-user"], [1, "fa-solid", "fa-users"], [1, "search-container"], [1, "search-input-wrapper"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", 1, "mj-input", 3, "input", "blur", "value", "placeholder"], [1, "search-results"], [1, "selected-recipient"], [1, "search-result-item"], [1, "search-result-item", 3, "mousedown"], [1, "recipient-info"], [1, "recipient-name"], [1, "recipient-email"], [1, "recipient-chip"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click"], [1, "fa-solid", "fa-times"], ["TextField", "label", "ValueField", "value", 1, "permission-dropdown", 3, "ngModelChange", "Data", "ngModel", "ValuePrimitive"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"], [1, "permission-option"], [1, "permission-label"], [1, "permission-desc"], [1, "share-list"], [1, "share-item"], [1, "share-info"], [1, "share-type-icon"], [1, "share-details"], [1, "share-name"], [1, "share-email"], [1, "share-type-label"], [1, "share-actions"], ["TextField", "label", "ValueField", "value", 1, "permission-dropdown-small", 3, "Data", "ngModel", "ValuePrimitive", "Disabled"], [1, "permission-badge"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Remove access", 3, "disabled"], ["TextField", "label", "ValueField", "value", 1, "permission-dropdown-small", 3, "ValueChange", "Data", "ngModel", "ValuePrimitive", "Disabled"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Remove access", 3, "click", "disabled"], [1, "fa-solid", "fa-trash"], [1, "fa-solid", "fa-share-nodes", "empty-icon"], [1, "empty-hint"], [1, "fa-solid", "fa-info-circle"]], template: function ListShareDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
639
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ListShareDialogComponent, selectors: [["mj-list-share-dialog"]], inputs: { config: "config", visible: "visible" }, outputs: { complete: "complete", cancel: "cancel" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["mjDropdownItem", ""], [3, "Visible", "Title", "Width"], [3, "Close", "Visible", "Title", "Width"], [1, "share-dialog-content"], [1, "loading-container"], ["mjButton", "", "variant", "primary", 3, "click"], ["mjButton", "", 3, "click"], ["text", "Loading shares..."], [1, "add-share-section"], [1, "section-divider"], [1, "current-shares-section"], [1, "empty-state"], [1, "readonly-notice"], [1, "section-title"], [1, "search-type-toggle"], ["mjButton", "", 3, "click", "variant"], [1, "fa-solid", "fa-user"], [1, "fa-solid", "fa-users"], [1, "search-container"], [1, "search-input-wrapper"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", 1, "mj-input", 3, "input", "blur", "value", "placeholder"], [1, "search-results"], [1, "selected-recipient"], [1, "search-result-item"], [1, "search-result-item", 3, "mousedown"], [1, "recipient-info"], [1, "recipient-name"], [1, "recipient-email"], [1, "recipient-chip"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click"], [1, "fa-solid", "fa-times"], ["TextField", "label", "ValueField", "value", 1, "permission-dropdown", 3, "ngModelChange", "Data", "ngModel", "ValuePrimitive"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"], [1, "permission-option"], [1, "permission-label"], [1, "permission-desc"], [1, "share-list"], [1, "share-item"], [1, "share-info"], [1, "share-type-icon"], [1, "share-details"], [1, "share-name"], [1, "share-email"], [1, "share-type-label"], [1, "share-actions"], ["TextField", "label", "ValueField", "value", 1, "permission-dropdown-small", 3, "Data", "ngModel", "ValuePrimitive", "Disabled"], [1, "permission-badge"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Remove access", 3, "disabled"], ["TextField", "label", "ValueField", "value", 1, "permission-dropdown-small", 3, "ValueChange", "Data", "ngModel", "ValuePrimitive", "Disabled"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Remove access", 3, "click", "disabled"], [1, "fa-solid", "fa-trash"], [1, "fa-solid", "fa-share-nodes", "empty-icon"], [1, "empty-hint"], [1, "fa-solid", "fa-info-circle"]], template: function ListShareDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
639
640
|
i0.ɵɵconditionalCreate(0, ListShareDialogComponent_Conditional_0_Template, 9, 5, "mj-dialog", 1);
|
|
640
641
|
} if (rf & 2) {
|
|
641
642
|
i0.ɵɵconditional(ctx.visible ? 0 : -1);
|
|
@@ -653,5 +654,5 @@ export class ListShareDialogComponent {
|
|
|
653
654
|
}], cancel: [{
|
|
654
655
|
type: Output
|
|
655
656
|
}] }); })();
|
|
656
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ListShareDialogComponent, { className: "ListShareDialogComponent", filePath: "src/lib/components/list-share-dialog/list-share-dialog.component.ts", lineNumber:
|
|
657
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ListShareDialogComponent, { className: "ListShareDialogComponent", filePath: "src/lib/components/list-share-dialog/list-share-dialog.component.ts", lineNumber: 39 }); })();
|
|
657
658
|
//# sourceMappingURL=list-share-dialog.component.js.map
|