@memberjunction/ng-conversations 5.4.0 → 5.5.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/agent/agent-process-panel.component.d.ts.map +1 -1
- package/dist/lib/components/agent/agent-process-panel.component.js +3 -2
- package/dist/lib/components/agent/agent-process-panel.component.js.map +1 -1
- package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/artifact-collection-picker-modal.component.js +10 -9
- package/dist/lib/components/collection/artifact-collection-picker-modal.component.js.map +1 -1
- package/dist/lib/components/collection/artifact-create-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/artifact-create-modal.component.js +3 -2
- package/dist/lib/components/collection/artifact-create-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-form-modal.component.js +4 -3
- package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-share-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-share-modal.component.js +5 -4
- package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-tree.component.d.ts +2 -0
- package/dist/lib/components/collection/collection-tree.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-tree.component.js +24 -17
- package/dist/lib/components/collection/collection-tree.component.js.map +1 -1
- package/dist/lib/components/collection/collections-full-view.component.d.ts +1 -0
- package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collections-full-view.component.js +14 -10
- package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +21 -7
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +44 -14
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts +3 -0
- package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.js +21 -11
- package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.js +4 -3
- package/dist/lib/components/mention/mention-editor.component.js.map +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.d.ts.map +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.js +3 -2
- package/dist/lib/components/message/conversation-message-rating.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +21 -7
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +7 -6
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/project/project-selector.component.d.ts.map +1 -1
- package/dist/lib/components/project/project-selector.component.js +3 -2
- package/dist/lib/components/project/project-selector.component.js.map +1 -1
- package/dist/lib/components/task/tasks-full-view.component.d.ts.map +1 -1
- package/dist/lib/components/task/tasks-full-view.component.js +4 -3
- package/dist/lib/components/task/tasks-full-view.component.js.map +1 -1
- package/dist/lib/services/agent-state.service.d.ts +4 -0
- package/dist/lib/services/agent-state.service.d.ts.map +1 -1
- package/dist/lib/services/agent-state.service.js +15 -6
- package/dist/lib/services/agent-state.service.js.map +1 -1
- package/dist/lib/services/artifact-permission.service.d.ts.map +1 -1
- package/dist/lib/services/artifact-permission.service.js +3 -2
- package/dist/lib/services/artifact-permission.service.js.map +1 -1
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +5 -4
- package/dist/lib/services/conversation-agent.service.js.map +1 -1
- package/dist/lib/services/conversation-attachment.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-attachment.service.js +2 -1
- package/dist/lib/services/conversation-attachment.service.js.map +1 -1
- package/dist/lib/services/conversation-data.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-data.service.js +7 -6
- package/dist/lib/services/conversation-data.service.js.map +1 -1
- package/dist/lib/services/data-cache.service.d.ts.map +1 -1
- package/dist/lib/services/data-cache.service.js +9 -8
- package/dist/lib/services/data-cache.service.js.map +1 -1
- package/package.json +17 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-form-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/collection/collection-form-modal.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\nimport { UserInfo, Metadata } from '@memberjunction/core';\nimport { MJCollectionEntity } from '@memberjunction/core-entities';\nimport { DialogService } from '../../services/dialog.service';\nimport { ToastService } from '../../services/toast.service';\nimport { CollectionPermissionService } from '../../services/collection-permission.service';\n\n/**\n * Modal for creating and editing collections\n */\n@Component({\n standalone: false,\n selector: 'mj-collection-form-modal',\n template: `\n @if (isOpen) {\n <kendo-dialog\n [title]=\"collection?.ID ? 'Edit Collection' : 'New Collection'\"\n (close)=\"onCancel()\"\n [width]=\"500\"\n [minWidth]=\"300\">\n <div class=\"collection-form\">\n <div class=\"form-group\">\n <label class=\"form-label\">\n Name <span class=\"required\">*</span>\n </label>\n <input\n type=\"text\"\n class=\"k-textbox form-control\"\n [(ngModel)]=\"formData.name\"\n placeholder=\"Collection name\"\n #nameInput\n (keydown.enter)=\"onSave()\">\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">Description</label>\n <textarea\n class=\"k-textarea form-control\"\n [(ngModel)]=\"formData.description\"\n placeholder=\"Optional description\"\n rows=\"3\">\n </textarea>\n </div>\n @if (parentCollection) {\n <div class=\"form-group\">\n <label class=\"form-label\">Parent Collection</label>\n <div class=\"parent-info\">\n <i class=\"fas fa-folder\"></i>\n <span>{{ parentCollection.Name }}</span>\n </div>\n </div>\n }\n @if (errorMessage) {\n <div class=\"form-error\">\n <i class=\"fas fa-exclamation-circle\"></i>\n {{ errorMessage }}\n </div>\n }\n </div>\n <kendo-dialog-actions>\n <button kendoButton (click)=\"onCancel()\" [disabled]=\"isSaving\">\n Cancel\n </button>\n <button kendoButton\n [primary]=\"true\"\n (click)=\"onSave()\"\n [disabled]=\"!canSave || isSaving\">\n {{ isSaving ? 'Saving...' : 'Save' }}\n </button>\n </kendo-dialog-actions>\n </kendo-dialog>\n }\n `,\n styles: [`\n .collection-form {\n padding: 20px 0;\n }\n\n .form-group {\n margin-bottom: 20px;\n }\n\n .form-label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n }\n\n .required {\n color: #DC2626;\n }\n\n .form-control {\n width: 100%;\n }\n\n .parent-info {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: #F9FAFB;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n color: #6B7280;\n }\n\n .parent-info i {\n color: #1e40af;\n }\n\n .form-error {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: #FEE2E2;\n border: 1px solid #FCA5A5;\n border-radius: 6px;\n color: #DC2626;\n font-size: 14px;\n }\n\n .form-error i {\n flex-shrink: 0;\n }\n `]\n})\nexport class CollectionFormModalComponent implements OnChanges {\n @Input() isOpen: boolean = false;\n @Input() collection?: MJCollectionEntity;\n @Input() parentCollection?: MJCollectionEntity;\n @Input() environmentId!: string;\n @Input() currentUser!: UserInfo;\n\n @Output() saved = new EventEmitter<MJCollectionEntity>();\n @Output() cancelled = new EventEmitter<void>();\n\n public formData = {\n name: '',\n description: ''\n };\n\n public isSaving: boolean = false;\n public errorMessage: string = '';\n\n constructor(\n private toastService: ToastService,\n private permissionService: CollectionPermissionService\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['collection'] || changes['isOpen']) {\n if (this.isOpen && this.collection) {\n this.formData.name = this.collection.Name || '';\n this.formData.description = this.collection.Description || '';\n } else if (this.isOpen && !this.collection) {\n this.formData = { name: '', description: '' };\n }\n }\n }\n\n get canSave(): boolean {\n return this.formData.name.trim().length > 0;\n }\n\n async onSave(): Promise<void> {\n if (!this.canSave) return;\n\n this.isSaving = true;\n this.errorMessage = '';\n\n try {\n // Validate permissions before saving\n if (this.collection) {\n // Editing existing collection - need Edit permission\n if (this.collection.OwnerID && this.collection.OwnerID !== this.currentUser.ID) {\n const permission = await this.permissionService.checkPermission(\n this.collection.ID,\n this.currentUser.ID,\n this.currentUser\n );\n\n if (!permission?.canEdit) {\n this.errorMessage = 'You do not have Edit permission for this collection.';\n this.isSaving = false;\n return;\n }\n }\n } else if (this.parentCollection) {\n // Creating child collection - need Edit permission on parent\n if (this.parentCollection.OwnerID && this.parentCollection.OwnerID !== this.currentUser.ID) {\n const permission = await this.permissionService.checkPermission(\n this.parentCollection.ID,\n this.currentUser.ID,\n this.currentUser\n );\n\n if (!permission?.canEdit) {\n this.errorMessage = 'You do not have Edit permission for the parent collection.';\n this.isSaving = false;\n return;\n }\n }\n }\n\n const md = new Metadata();\n const collection = this.collection ||\n await md.GetEntityObject<MJCollectionEntity>('MJ: Collections', this.currentUser);\n\n collection.Name = this.formData.name.trim();\n collection.Description = this.formData.description.trim() || null;\n collection.EnvironmentID = this.environmentId;\n\n // Set owner and parent relationship if creating new collection\n if (!this.collection) {\n if (this.parentCollection) {\n // Child collection inherits parent's owner to maintain permission hierarchy\n collection.ParentID = this.parentCollection.ID;\n collection.OwnerID = this.parentCollection.OwnerID || this.currentUser.ID;\n } else {\n // Root collection - current user becomes owner\n collection.OwnerID = this.currentUser.ID;\n }\n } else if (this.parentCollection) {\n // Updating existing collection's parent\n collection.ParentID = this.parentCollection.ID;\n }\n\n const saved = await collection.Save();\n if (saved) {\n // If creating new collection, set up permissions\n if (!this.collection) {\n if (this.parentCollection) {\n // Child collection - copy all permissions from parent (including owner)\n await this.permissionService.copyParentPermissions(\n this.parentCollection.ID,\n collection.ID,\n this.currentUser\n );\n } else {\n // Root collection - create owner permission for current user\n await this.permissionService.createOwnerPermission(\n collection.ID,\n this.currentUser.ID,\n this.currentUser\n );\n }\n }\n\n this.toastService.success(\n this.collection ? 'Collection updated successfully' : 'Collection created successfully'\n );\n this.saved.emit(collection);\n this.resetForm();\n } else {\n this.errorMessage = collection.LatestResult?.Message || 'Failed to save collection';\n this.toastService.error(this.errorMessage);\n }\n } catch (error) {\n console.error('Error saving collection:', error);\n this.errorMessage = 'An unexpected error occurred';\n this.toastService.error(this.errorMessage);\n } finally {\n this.isSaving = false;\n }\n }\n\n onCancel(): void {\n this.resetForm();\n this.cancelled.emit();\n }\n\n private resetForm(): void {\n this.formData = {\n name: '',\n description: ''\n };\n this.errorMessage = '';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"collection-form-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/collection/collection-form-modal.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\nimport { UserInfo, Metadata } from '@memberjunction/core';\nimport { MJCollectionEntity } from '@memberjunction/core-entities';\nimport { DialogService } from '../../services/dialog.service';\nimport { ToastService } from '../../services/toast.service';\nimport { CollectionPermissionService } from '../../services/collection-permission.service';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Modal for creating and editing collections\n */\n@Component({\n standalone: false,\n selector: 'mj-collection-form-modal',\n template: `\n @if (isOpen) {\n <kendo-dialog\n [title]=\"collection?.ID ? 'Edit Collection' : 'New Collection'\"\n (close)=\"onCancel()\"\n [width]=\"500\"\n [minWidth]=\"300\">\n <div class=\"collection-form\">\n <div class=\"form-group\">\n <label class=\"form-label\">\n Name <span class=\"required\">*</span>\n </label>\n <input\n type=\"text\"\n class=\"k-textbox form-control\"\n [(ngModel)]=\"formData.name\"\n placeholder=\"Collection name\"\n #nameInput\n (keydown.enter)=\"onSave()\">\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">Description</label>\n <textarea\n class=\"k-textarea form-control\"\n [(ngModel)]=\"formData.description\"\n placeholder=\"Optional description\"\n rows=\"3\">\n </textarea>\n </div>\n @if (parentCollection) {\n <div class=\"form-group\">\n <label class=\"form-label\">Parent Collection</label>\n <div class=\"parent-info\">\n <i class=\"fas fa-folder\"></i>\n <span>{{ parentCollection.Name }}</span>\n </div>\n </div>\n }\n @if (errorMessage) {\n <div class=\"form-error\">\n <i class=\"fas fa-exclamation-circle\"></i>\n {{ errorMessage }}\n </div>\n }\n </div>\n <kendo-dialog-actions>\n <button kendoButton (click)=\"onCancel()\" [disabled]=\"isSaving\">\n Cancel\n </button>\n <button kendoButton\n [primary]=\"true\"\n (click)=\"onSave()\"\n [disabled]=\"!canSave || isSaving\">\n {{ isSaving ? 'Saving...' : 'Save' }}\n </button>\n </kendo-dialog-actions>\n </kendo-dialog>\n }\n `,\n styles: [`\n .collection-form {\n padding: 20px 0;\n }\n\n .form-group {\n margin-bottom: 20px;\n }\n\n .form-label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n }\n\n .required {\n color: #DC2626;\n }\n\n .form-control {\n width: 100%;\n }\n\n .parent-info {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: #F9FAFB;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n color: #6B7280;\n }\n\n .parent-info i {\n color: #1e40af;\n }\n\n .form-error {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: #FEE2E2;\n border: 1px solid #FCA5A5;\n border-radius: 6px;\n color: #DC2626;\n font-size: 14px;\n }\n\n .form-error i {\n flex-shrink: 0;\n }\n `]\n})\nexport class CollectionFormModalComponent implements OnChanges {\n @Input() isOpen: boolean = false;\n @Input() collection?: MJCollectionEntity;\n @Input() parentCollection?: MJCollectionEntity;\n @Input() environmentId!: string;\n @Input() currentUser!: UserInfo;\n\n @Output() saved = new EventEmitter<MJCollectionEntity>();\n @Output() cancelled = new EventEmitter<void>();\n\n public formData = {\n name: '',\n description: ''\n };\n\n public isSaving: boolean = false;\n public errorMessage: string = '';\n\n constructor(\n private toastService: ToastService,\n private permissionService: CollectionPermissionService\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['collection'] || changes['isOpen']) {\n if (this.isOpen && this.collection) {\n this.formData.name = this.collection.Name || '';\n this.formData.description = this.collection.Description || '';\n } else if (this.isOpen && !this.collection) {\n this.formData = { name: '', description: '' };\n }\n }\n }\n\n get canSave(): boolean {\n return this.formData.name.trim().length > 0;\n }\n\n async onSave(): Promise<void> {\n if (!this.canSave) return;\n\n this.isSaving = true;\n this.errorMessage = '';\n\n try {\n // Validate permissions before saving\n if (this.collection) {\n // Editing existing collection - need Edit permission\n if (this.collection.OwnerID && !UUIDsEqual(this.collection.OwnerID, this.currentUser.ID)) {\n const permission = await this.permissionService.checkPermission(\n this.collection.ID,\n this.currentUser.ID,\n this.currentUser\n );\n\n if (!permission?.canEdit) {\n this.errorMessage = 'You do not have Edit permission for this collection.';\n this.isSaving = false;\n return;\n }\n }\n } else if (this.parentCollection) {\n // Creating child collection - need Edit permission on parent\n if (this.parentCollection.OwnerID && !UUIDsEqual(this.parentCollection.OwnerID, this.currentUser.ID)) {\n const permission = await this.permissionService.checkPermission(\n this.parentCollection.ID,\n this.currentUser.ID,\n this.currentUser\n );\n\n if (!permission?.canEdit) {\n this.errorMessage = 'You do not have Edit permission for the parent collection.';\n this.isSaving = false;\n return;\n }\n }\n }\n\n const md = new Metadata();\n const collection = this.collection ||\n await md.GetEntityObject<MJCollectionEntity>('MJ: Collections', this.currentUser);\n\n collection.Name = this.formData.name.trim();\n collection.Description = this.formData.description.trim() || null;\n collection.EnvironmentID = this.environmentId;\n\n // Set owner and parent relationship if creating new collection\n if (!this.collection) {\n if (this.parentCollection) {\n // Child collection inherits parent's owner to maintain permission hierarchy\n collection.ParentID = this.parentCollection.ID;\n collection.OwnerID = this.parentCollection.OwnerID || this.currentUser.ID;\n } else {\n // Root collection - current user becomes owner\n collection.OwnerID = this.currentUser.ID;\n }\n } else if (this.parentCollection) {\n // Updating existing collection's parent\n collection.ParentID = this.parentCollection.ID;\n }\n\n const saved = await collection.Save();\n if (saved) {\n // If creating new collection, set up permissions\n if (!this.collection) {\n if (this.parentCollection) {\n // Child collection - copy all permissions from parent (including owner)\n await this.permissionService.copyParentPermissions(\n this.parentCollection.ID,\n collection.ID,\n this.currentUser\n );\n } else {\n // Root collection - create owner permission for current user\n await this.permissionService.createOwnerPermission(\n collection.ID,\n this.currentUser.ID,\n this.currentUser\n );\n }\n }\n\n this.toastService.success(\n this.collection ? 'Collection updated successfully' : 'Collection created successfully'\n );\n this.saved.emit(collection);\n this.resetForm();\n } else {\n this.errorMessage = collection.LatestResult?.Message || 'Failed to save collection';\n this.toastService.error(this.errorMessage);\n }\n } catch (error) {\n console.error('Error saving collection:', error);\n this.errorMessage = 'An unexpected error occurred';\n this.toastService.error(this.errorMessage);\n } finally {\n this.isSaving = false;\n }\n }\n\n onCancel(): void {\n this.resetForm();\n this.cancelled.emit();\n }\n\n private resetForm(): void {\n this.formData = {\n name: '',\n description: ''\n };\n this.errorMessage = '';\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-share-modal.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/collection/collection-share-modal.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAK5H,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAChI,OAAO,EAAuB,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;;
|
|
1
|
+
{"version":3,"file":"collection-share-modal.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/collection/collection-share-modal.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAK5H,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAChI,OAAO,EAAuB,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;;AAGxF,UAAU,iBAAkB,SAAQ,oBAAoB;IACpD,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,aAAa,CAAC;CACrC;AAED,qBA+Ma,6BAA8B,YAAW,MAAM,EAAE,SAAS;IAsB/D,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,GAAG;IAtBN,MAAM,EAAE,OAAO,CAAS;IACxB,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAAQ;IAC7C,WAAW,EAAG,QAAQ,CAAC;IACvB,sBAAsB,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IAE1D,KAAK,qBAA4B;IACjC,SAAS,qBAA4B;IAE/C,WAAW,EAAE,iBAAiB,EAAE,CAAM;IACtC,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAC7C,oBAAoB,EAAE,MAAM,EAAE,CAAM;IACpC,oBAAoB,EAAE,OAAO,CAAS;IAEtC,cAAc,EAAE,aAAa,CAK3B;gBAGU,iBAAiB,EAAE,2BAA2B,EAC9C,GAAG,EAAE,iBAAiB;IAG5B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQzB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAa1C,eAAe;IAiB7B,OAAO,CAAC,0BAA0B;IA0BlC,kBAAkB,IAAI,MAAM,EAAE;IAS9B,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAK5C,gBAAgB,IAAI,IAAI;IAWlB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAqChC,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAKrD,YAAY,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAW3C,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC9D,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBtE,QAAQ,IAAI,IAAI;yCA7NP,6BAA6B;2CAA7B,6BAA6B;CAgOzC"}
|
|
@@ -3,6 +3,7 @@ import { FormsModule } from '@angular/forms';
|
|
|
3
3
|
import { WindowModule } from '@progress/kendo-angular-dialog';
|
|
4
4
|
import { ButtonModule } from '@progress/kendo-angular-buttons';
|
|
5
5
|
import { UserPickerComponent } from '../shared/user-picker.component';
|
|
6
|
+
import { UUIDsEqual } from '@memberjunction/global';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "../../services/collection-permission.service";
|
|
8
9
|
import * as i2 from "@angular/forms";
|
|
@@ -383,7 +384,7 @@ export class CollectionShareModalComponent {
|
|
|
383
384
|
// User is owner if:
|
|
384
385
|
// 1. OwnerID is null/undefined (backwards compatibility with old collections)
|
|
385
386
|
// 2. OwnerID matches current user ID
|
|
386
|
-
const isOwner = !this.collection?.OwnerID || this.collection.OwnerID
|
|
387
|
+
const isOwner = !this.collection?.OwnerID || UUIDsEqual(this.collection.OwnerID, this.currentUser.ID);
|
|
387
388
|
// Allow modification if user is owner OR has Share permission
|
|
388
389
|
this.canModifyPermissions = isOwner || (this.currentUserPermissions?.canShare || false);
|
|
389
390
|
const userPerms = this.currentUserPermissions || {
|
|
@@ -428,7 +429,7 @@ export class CollectionShareModalComponent {
|
|
|
428
429
|
return;
|
|
429
430
|
try {
|
|
430
431
|
// User is owner if OwnerID is null (old collections) or matches current user
|
|
431
|
-
const isOwner = !this.collection.OwnerID || this.collection.OwnerID
|
|
432
|
+
const isOwner = !this.collection.OwnerID || UUIDsEqual(this.collection.OwnerID, this.currentUser.ID);
|
|
432
433
|
const userPerms = this.currentUserPermissions || {
|
|
433
434
|
canRead: true,
|
|
434
435
|
canShare: false,
|
|
@@ -468,7 +469,7 @@ export class CollectionShareModalComponent {
|
|
|
468
469
|
async onSavePermission(permission) {
|
|
469
470
|
try {
|
|
470
471
|
// User is owner if OwnerID is null (old collections) or matches current user
|
|
471
|
-
const isOwner = !this.collection?.OwnerID || this.collection?.OwnerID
|
|
472
|
+
const isOwner = !this.collection?.OwnerID || UUIDsEqual(this.collection?.OwnerID, this.currentUser.ID);
|
|
472
473
|
const userPerms = this.currentUserPermissions || {
|
|
473
474
|
canRead: true,
|
|
474
475
|
canShare: false,
|
|
@@ -731,5 +732,5 @@ export class CollectionShareModalComponent {
|
|
|
731
732
|
}], cancelled: [{
|
|
732
733
|
type: Output
|
|
733
734
|
}] }); })();
|
|
734
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CollectionShareModalComponent, { className: "CollectionShareModalComponent", filePath: "src/lib/components/collection/collection-share-modal.component.ts", lineNumber:
|
|
735
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CollectionShareModalComponent, { className: "CollectionShareModalComponent", filePath: "src/lib/components/collection/collection-share-modal.component.ts", lineNumber: 224 }); })();
|
|
735
736
|
//# sourceMappingURL=collection-share-modal.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-share-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/collection/collection-share-modal.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { WindowModule } from '@progress/kendo-angular-dialog';\nimport { ButtonModule } from '@progress/kendo-angular-buttons';\nimport { UserInfo } from '@memberjunction/core';\nimport { MJCollectionEntity } from '@memberjunction/core-entities';\nimport { CollectionPermissionService, CollectionPermission, PermissionSet } from '../../services/collection-permission.service';\nimport { UserPickerComponent, UserSearchResult } from '../shared/user-picker.component';\n\ninterface PermissionDisplay extends CollectionPermission {\n isEditing: boolean;\n editingPermissions: PermissionSet;\n}\n\n@Component({\n selector: 'mj-collection-share-modal',\n standalone: true,\n imports: [FormsModule, WindowModule, ButtonModule, UserPickerComponent],\n template: `\n @if (isOpen && collection) {\n <kendo-window\n [title]=\"'Share: ' + collection.Name\"\n [width]=\"600\"\n [height]=\"500\"\n [minWidth]=\"400\"\n [minHeight]=\"400\"\n (close)=\"onCancel()\"\n >\n <div class=\"share-modal-content\">\n <!-- Add User Section -->\n <div class=\"add-user-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-user-plus\"></i>\n Share with User\n </h3>\n\n <mj-user-picker\n [currentUser]=\"currentUser\"\n [excludeUserIds]=\"getExcludedUserIds()\"\n (userSelected)=\"onUserSelected($event)\"\n ></mj-user-picker>\n\n @if (selectedUser) {\n <div class=\"permissions-form\">\n <div class=\"selected-user-info\">\n <div class=\"user-avatar\">\n <i class=\"fa-solid fa-user\"></i>\n </div>\n <div class=\"user-details\">\n <div class=\"user-name\">{{ selectedUser.name }}</div>\n <div class=\"user-email\">{{ selectedUser.email }}</div>\n </div>\n </div>\n\n <div class=\"permissions-grid\">\n <label class=\"permission-checkbox disabled\">\n <input type=\"checkbox\" [checked]=\"true\" disabled>\n <span class=\"permission-label\">\n <i class=\"fa-solid fa-eye\"></i>\n Read\n </span>\n <span class=\"permission-desc\">View collection and artifacts</span>\n </label>\n\n @if (availablePermissions.includes('Share')) {\n <label class=\"permission-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"newPermissions.canShare\">\n <span class=\"permission-label\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n Share\n </span>\n <span class=\"permission-desc\">Share with others</span>\n </label>\n }\n\n @if (availablePermissions.includes('Edit')) {\n <label class=\"permission-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"newPermissions.canEdit\">\n <span class=\"permission-label\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n Edit\n </span>\n <span class=\"permission-desc\">Add/remove artifacts</span>\n </label>\n }\n\n @if (availablePermissions.includes('Delete')) {\n <label class=\"permission-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"newPermissions.canDelete\">\n <span class=\"permission-label\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </span>\n <span class=\"permission-desc\">Delete collection</span>\n </label>\n }\n </div>\n\n <div class=\"form-actions\">\n <button kendoButton (click)=\"onAddUser()\" [disabled]=\"!selectedUser\" class=\"btn-primary\">\n <i class=\"fa-solid fa-plus\"></i>\n Add User\n </button>\n <button kendoButton (click)=\"onClearSelection()\" class=\"btn-secondary\">\n Cancel\n </button>\n </div>\n </div>\n }\n </div>\n\n <!-- Current Permissions Section -->\n <div class=\"permissions-list-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-users\"></i>\n Shared With ({{ permissions.length }})\n </h3>\n\n @if (permissions.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-user-slash\"></i>\n <p>Not shared with anyone yet</p>\n </div>\n } @else {\n <div class=\"permissions-list\">\n @for (permission of permissions; track permission.id) {\n <div class=\"permission-item\">\n <div class=\"user-avatar\">\n <i class=\"fa-solid fa-user\"></i>\n </div>\n <div class=\"permission-details\">\n <div class=\"permission-user\">\n <span class=\"user-name\">{{ permission.userName }}</span>\n @if (permission.sharedByUserName) {\n <span class=\"shared-by\">shared by {{ permission.sharedByUserName }}</span>\n }\n </div>\n\n @if (!permission.isEditing) {\n <div class=\"permission-badges\">\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-eye\"></i> Read\n </span>\n @if (permission.canShare) {\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-share-nodes\"></i> Share\n </span>\n }\n @if (permission.canEdit) {\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-pen-to-square\"></i> Edit\n </span>\n }\n @if (permission.canDelete) {\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-trash\"></i> Delete\n </span>\n }\n </div>\n } @else {\n <div class=\"permissions-edit-grid\">\n <label class=\"permission-checkbox-small disabled\">\n <input type=\"checkbox\" [checked]=\"true\" disabled>\n <span>Read</span>\n </label>\n @if (availablePermissions.includes('Share')) {\n <label class=\"permission-checkbox-small\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.editingPermissions.canShare\">\n <span>Share</span>\n </label>\n }\n @if (availablePermissions.includes('Edit')) {\n <label class=\"permission-checkbox-small\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.editingPermissions.canEdit\">\n <span>Edit</span>\n </label>\n }\n @if (availablePermissions.includes('Delete')) {\n <label class=\"permission-checkbox-small\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.editingPermissions.canDelete\">\n <span>Delete</span>\n </label>\n }\n </div>\n }\n </div>\n\n @if (canModifyPermissions) {\n <div class=\"permission-actions\">\n @if (!permission.isEditing) {\n <button kendoButton class=\"btn-icon\" (click)=\"onEditPermission(permission)\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button kendoButton class=\"btn-icon btn-danger\" (click)=\"onRevokePermission(permission)\" title=\"Remove\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n } @else {\n <button kendoButton class=\"btn-icon btn-success\" (click)=\"onSavePermission(permission)\" title=\"Save\">\n <i class=\"fa-solid fa-check\"></i>\n </button>\n <button kendoButton class=\"btn-icon\" (click)=\"onCancelEdit(permission)\" title=\"Cancel\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"modal-actions\">\n <button kendoButton (click)=\"onCancel()\">Close</button>\n </div>\n </kendo-window>\n }\n `,\n styleUrls: ['./collection-share-modal.component.css']\n})\nexport class CollectionShareModalComponent implements OnInit, OnChanges {\n @Input() isOpen: boolean = false;\n @Input() collection: MJCollectionEntity | null = null;\n @Input() currentUser!: UserInfo;\n @Input() currentUserPermissions: CollectionPermission | null = null;\n\n @Output() saved = new EventEmitter<void>();\n @Output() cancelled = new EventEmitter<void>();\n\n permissions: PermissionDisplay[] = [];\n selectedUser: UserSearchResult | null = null;\n availablePermissions: string[] = [];\n canModifyPermissions: boolean = false;\n\n newPermissions: PermissionSet = {\n canRead: true,\n canShare: false,\n canEdit: false,\n canDelete: false\n };\n\n constructor(\n private permissionService: CollectionPermissionService,\n private cdr: ChangeDetectorRef\n ) {}\n\n async ngOnInit(): Promise<void> {\n if (this.collection) {\n await this.loadPermissions();\n this.updateAvailablePermissions();\n this.cdr.detectChanges(); // zone.js 0.15: sync changes after async don't trigger CD\n }\n }\n\n async ngOnChanges(changes: SimpleChanges): Promise<void> {\n // Reload permissions when modal opens or collection/permissions change\n const modalOpened = changes['isOpen']?.currentValue === true && changes['isOpen']?.previousValue === false;\n const collectionChanged = changes['collection'] && !changes['collection'].isFirstChange();\n const permissionsChanged = changes['currentUserPermissions'] && !changes['currentUserPermissions'].isFirstChange();\n\n if ((modalOpened || collectionChanged || permissionsChanged) && this.collection) {\n await this.loadPermissions();\n this.updateAvailablePermissions();\n this.cdr.detectChanges(); // zone.js 0.15: sync changes after async don't trigger CD\n }\n }\n\n private async loadPermissions(): Promise<void> {\n if (!this.collection) return;\n\n const perms = await this.permissionService.loadPermissions(this.collection.ID, this.currentUser);\n this.permissions = perms.map(p => ({\n ...p,\n isEditing: false,\n editingPermissions: {\n canRead: p.canRead,\n canShare: p.canShare,\n canEdit: p.canEdit,\n canDelete: p.canDelete\n }\n }));\n this.cdr.detectChanges();\n }\n\n private updateAvailablePermissions(): void {\n // User is owner if:\n // 1. OwnerID is null/undefined (backwards compatibility with old collections)\n // 2. OwnerID matches current user ID\n const isOwner = !this.collection?.OwnerID || this.collection.OwnerID === this.currentUser.ID;\n\n // Allow modification if user is owner OR has Share permission\n this.canModifyPermissions = isOwner || (this.currentUserPermissions?.canShare || false);\n\n const userPerms = this.currentUserPermissions || {\n canRead: true,\n canShare: false,\n canEdit: false,\n canDelete: false\n };\n\n this.availablePermissions = this.permissionService.getAvailablePermissions(userPerms, isOwner);\n console.log('Share modal permissions:', {\n collectionId: this.collection?.ID,\n ownerId: this.collection?.OwnerID,\n currentUserId: this.currentUser.ID,\n isOwner,\n availablePermissions: this.availablePermissions\n });\n }\n\n getExcludedUserIds(): string[] {\n const ids = this.permissions.map(p => p.userId);\n ids.push(this.currentUser.ID); // Can't share with yourself\n if (this.collection?.OwnerID) {\n ids.push(this.collection.OwnerID); // Owner already has all permissions\n }\n return ids;\n }\n\n onUserSelected(user: UserSearchResult): void {\n this.selectedUser = user;\n this.cdr.detectChanges();\n }\n\n onClearSelection(): void {\n this.selectedUser = null;\n this.newPermissions = {\n canRead: true,\n canShare: false,\n canEdit: false,\n canDelete: false\n };\n this.cdr.detectChanges();\n }\n\n async onAddUser(): Promise<void> {\n if (!this.selectedUser || !this.collection) return;\n\n try {\n // User is owner if OwnerID is null (old collections) or matches current user\n const isOwner = !this.collection.OwnerID || this.collection.OwnerID === this.currentUser.ID;\n const userPerms = this.currentUserPermissions || {\n canRead: true,\n canShare: false,\n canEdit: false,\n canDelete: false\n };\n\n // Validate permissions\n if (!this.permissionService.validatePermissions(this.newPermissions, userPerms, isOwner)) {\n alert('You cannot grant permissions you do not have');\n return;\n }\n\n // Use cascade grant to apply permissions to all child collections\n await this.permissionService.grantPermissionCascade(\n this.collection.ID,\n this.selectedUser.id,\n this.newPermissions,\n this.currentUser.ID,\n this.currentUser\n );\n\n await this.loadPermissions();\n this.onClearSelection();\n this.saved.emit();\n } catch (error) {\n console.error('Error adding user:', error);\n alert('Failed to add user. Please try again.');\n }\n }\n\n onEditPermission(permission: PermissionDisplay): void {\n permission.isEditing = true;\n this.cdr.detectChanges();\n }\n\n onCancelEdit(permission: PermissionDisplay): void {\n permission.isEditing = false;\n permission.editingPermissions = {\n canRead: permission.canRead,\n canShare: permission.canShare,\n canEdit: permission.canEdit,\n canDelete: permission.canDelete\n };\n this.cdr.detectChanges();\n }\n\n async onSavePermission(permission: PermissionDisplay): Promise<void> {\n try {\n // User is owner if OwnerID is null (old collections) or matches current user\n const isOwner = !this.collection?.OwnerID || this.collection?.OwnerID === this.currentUser.ID;\n const userPerms = this.currentUserPermissions || {\n canRead: true,\n canShare: false,\n canEdit: false,\n canDelete: false\n };\n\n // Validate permissions\n if (!this.permissionService.validatePermissions(permission.editingPermissions, userPerms, isOwner)) {\n alert('You cannot grant permissions you do not have');\n return;\n }\n\n // Use cascade update to apply changes to all child collections\n await this.permissionService.updatePermissionCascade(\n this.collection!.ID,\n permission.userId,\n permission.editingPermissions,\n this.currentUser\n );\n\n await this.loadPermissions();\n this.saved.emit();\n } catch (error) {\n console.error('Error updating permission:', error);\n alert('Failed to update permissions. Please try again.');\n }\n }\n\n async onRevokePermission(permission: PermissionDisplay): Promise<void> {\n if (!confirm(`Remove ${permission.userName}'s access to this collection and all its child collections?`)) {\n return;\n }\n\n try {\n // Use cascade revoke to remove access from all child collections\n await this.permissionService.revokePermissionCascade(\n this.collection!.ID,\n permission.userId,\n this.currentUser\n );\n await this.loadPermissions();\n this.saved.emit();\n } catch (error) {\n console.error('Error revoking permission:', error);\n alert('Failed to revoke permission. Please try again.');\n }\n }\n\n onCancel(): void {\n this.cancelled.emit();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"collection-share-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/collection/collection-share-modal.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { WindowModule } from '@progress/kendo-angular-dialog';\nimport { ButtonModule } from '@progress/kendo-angular-buttons';\nimport { UserInfo } from '@memberjunction/core';\nimport { MJCollectionEntity } from '@memberjunction/core-entities';\nimport { CollectionPermissionService, CollectionPermission, PermissionSet } from '../../services/collection-permission.service';\nimport { UserPickerComponent, UserSearchResult } from '../shared/user-picker.component';\nimport { UUIDsEqual } from '@memberjunction/global';\n\ninterface PermissionDisplay extends CollectionPermission {\n isEditing: boolean;\n editingPermissions: PermissionSet;\n}\n\n@Component({\n selector: 'mj-collection-share-modal',\n standalone: true,\n imports: [FormsModule, WindowModule, ButtonModule, UserPickerComponent],\n template: `\n @if (isOpen && collection) {\n <kendo-window\n [title]=\"'Share: ' + collection.Name\"\n [width]=\"600\"\n [height]=\"500\"\n [minWidth]=\"400\"\n [minHeight]=\"400\"\n (close)=\"onCancel()\"\n >\n <div class=\"share-modal-content\">\n <!-- Add User Section -->\n <div class=\"add-user-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-user-plus\"></i>\n Share with User\n </h3>\n\n <mj-user-picker\n [currentUser]=\"currentUser\"\n [excludeUserIds]=\"getExcludedUserIds()\"\n (userSelected)=\"onUserSelected($event)\"\n ></mj-user-picker>\n\n @if (selectedUser) {\n <div class=\"permissions-form\">\n <div class=\"selected-user-info\">\n <div class=\"user-avatar\">\n <i class=\"fa-solid fa-user\"></i>\n </div>\n <div class=\"user-details\">\n <div class=\"user-name\">{{ selectedUser.name }}</div>\n <div class=\"user-email\">{{ selectedUser.email }}</div>\n </div>\n </div>\n\n <div class=\"permissions-grid\">\n <label class=\"permission-checkbox disabled\">\n <input type=\"checkbox\" [checked]=\"true\" disabled>\n <span class=\"permission-label\">\n <i class=\"fa-solid fa-eye\"></i>\n Read\n </span>\n <span class=\"permission-desc\">View collection and artifacts</span>\n </label>\n\n @if (availablePermissions.includes('Share')) {\n <label class=\"permission-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"newPermissions.canShare\">\n <span class=\"permission-label\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n Share\n </span>\n <span class=\"permission-desc\">Share with others</span>\n </label>\n }\n\n @if (availablePermissions.includes('Edit')) {\n <label class=\"permission-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"newPermissions.canEdit\">\n <span class=\"permission-label\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n Edit\n </span>\n <span class=\"permission-desc\">Add/remove artifacts</span>\n </label>\n }\n\n @if (availablePermissions.includes('Delete')) {\n <label class=\"permission-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"newPermissions.canDelete\">\n <span class=\"permission-label\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </span>\n <span class=\"permission-desc\">Delete collection</span>\n </label>\n }\n </div>\n\n <div class=\"form-actions\">\n <button kendoButton (click)=\"onAddUser()\" [disabled]=\"!selectedUser\" class=\"btn-primary\">\n <i class=\"fa-solid fa-plus\"></i>\n Add User\n </button>\n <button kendoButton (click)=\"onClearSelection()\" class=\"btn-secondary\">\n Cancel\n </button>\n </div>\n </div>\n }\n </div>\n\n <!-- Current Permissions Section -->\n <div class=\"permissions-list-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-users\"></i>\n Shared With ({{ permissions.length }})\n </h3>\n\n @if (permissions.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-user-slash\"></i>\n <p>Not shared with anyone yet</p>\n </div>\n } @else {\n <div class=\"permissions-list\">\n @for (permission of permissions; track permission.id) {\n <div class=\"permission-item\">\n <div class=\"user-avatar\">\n <i class=\"fa-solid fa-user\"></i>\n </div>\n <div class=\"permission-details\">\n <div class=\"permission-user\">\n <span class=\"user-name\">{{ permission.userName }}</span>\n @if (permission.sharedByUserName) {\n <span class=\"shared-by\">shared by {{ permission.sharedByUserName }}</span>\n }\n </div>\n\n @if (!permission.isEditing) {\n <div class=\"permission-badges\">\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-eye\"></i> Read\n </span>\n @if (permission.canShare) {\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-share-nodes\"></i> Share\n </span>\n }\n @if (permission.canEdit) {\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-pen-to-square\"></i> Edit\n </span>\n }\n @if (permission.canDelete) {\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-trash\"></i> Delete\n </span>\n }\n </div>\n } @else {\n <div class=\"permissions-edit-grid\">\n <label class=\"permission-checkbox-small disabled\">\n <input type=\"checkbox\" [checked]=\"true\" disabled>\n <span>Read</span>\n </label>\n @if (availablePermissions.includes('Share')) {\n <label class=\"permission-checkbox-small\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.editingPermissions.canShare\">\n <span>Share</span>\n </label>\n }\n @if (availablePermissions.includes('Edit')) {\n <label class=\"permission-checkbox-small\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.editingPermissions.canEdit\">\n <span>Edit</span>\n </label>\n }\n @if (availablePermissions.includes('Delete')) {\n <label class=\"permission-checkbox-small\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.editingPermissions.canDelete\">\n <span>Delete</span>\n </label>\n }\n </div>\n }\n </div>\n\n @if (canModifyPermissions) {\n <div class=\"permission-actions\">\n @if (!permission.isEditing) {\n <button kendoButton class=\"btn-icon\" (click)=\"onEditPermission(permission)\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button kendoButton class=\"btn-icon btn-danger\" (click)=\"onRevokePermission(permission)\" title=\"Remove\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n } @else {\n <button kendoButton class=\"btn-icon btn-success\" (click)=\"onSavePermission(permission)\" title=\"Save\">\n <i class=\"fa-solid fa-check\"></i>\n </button>\n <button kendoButton class=\"btn-icon\" (click)=\"onCancelEdit(permission)\" title=\"Cancel\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"modal-actions\">\n <button kendoButton (click)=\"onCancel()\">Close</button>\n </div>\n </kendo-window>\n }\n `,\n styleUrls: ['./collection-share-modal.component.css']\n})\nexport class CollectionShareModalComponent implements OnInit, OnChanges {\n @Input() isOpen: boolean = false;\n @Input() collection: MJCollectionEntity | null = null;\n @Input() currentUser!: UserInfo;\n @Input() currentUserPermissions: CollectionPermission | null = null;\n\n @Output() saved = new EventEmitter<void>();\n @Output() cancelled = new EventEmitter<void>();\n\n permissions: PermissionDisplay[] = [];\n selectedUser: UserSearchResult | null = null;\n availablePermissions: string[] = [];\n canModifyPermissions: boolean = false;\n\n newPermissions: PermissionSet = {\n canRead: true,\n canShare: false,\n canEdit: false,\n canDelete: false\n };\n\n constructor(\n private permissionService: CollectionPermissionService,\n private cdr: ChangeDetectorRef\n ) {}\n\n async ngOnInit(): Promise<void> {\n if (this.collection) {\n await this.loadPermissions();\n this.updateAvailablePermissions();\n this.cdr.detectChanges(); // zone.js 0.15: sync changes after async don't trigger CD\n }\n }\n\n async ngOnChanges(changes: SimpleChanges): Promise<void> {\n // Reload permissions when modal opens or collection/permissions change\n const modalOpened = changes['isOpen']?.currentValue === true && changes['isOpen']?.previousValue === false;\n const collectionChanged = changes['collection'] && !changes['collection'].isFirstChange();\n const permissionsChanged = changes['currentUserPermissions'] && !changes['currentUserPermissions'].isFirstChange();\n\n if ((modalOpened || collectionChanged || permissionsChanged) && this.collection) {\n await this.loadPermissions();\n this.updateAvailablePermissions();\n this.cdr.detectChanges(); // zone.js 0.15: sync changes after async don't trigger CD\n }\n }\n\n private async loadPermissions(): Promise<void> {\n if (!this.collection) return;\n\n const perms = await this.permissionService.loadPermissions(this.collection.ID, this.currentUser);\n this.permissions = perms.map(p => ({\n ...p,\n isEditing: false,\n editingPermissions: {\n canRead: p.canRead,\n canShare: p.canShare,\n canEdit: p.canEdit,\n canDelete: p.canDelete\n }\n }));\n this.cdr.detectChanges();\n }\n\n private updateAvailablePermissions(): void {\n // User is owner if:\n // 1. OwnerID is null/undefined (backwards compatibility with old collections)\n // 2. OwnerID matches current user ID\n const isOwner = !this.collection?.OwnerID || UUIDsEqual(this.collection.OwnerID, this.currentUser.ID);\n\n // Allow modification if user is owner OR has Share permission\n this.canModifyPermissions = isOwner || (this.currentUserPermissions?.canShare || false);\n\n const userPerms = this.currentUserPermissions || {\n canRead: true,\n canShare: false,\n canEdit: false,\n canDelete: false\n };\n\n this.availablePermissions = this.permissionService.getAvailablePermissions(userPerms, isOwner);\n console.log('Share modal permissions:', {\n collectionId: this.collection?.ID,\n ownerId: this.collection?.OwnerID,\n currentUserId: this.currentUser.ID,\n isOwner,\n availablePermissions: this.availablePermissions\n });\n }\n\n getExcludedUserIds(): string[] {\n const ids = this.permissions.map(p => p.userId);\n ids.push(this.currentUser.ID); // Can't share with yourself\n if (this.collection?.OwnerID) {\n ids.push(this.collection.OwnerID); // Owner already has all permissions\n }\n return ids;\n }\n\n onUserSelected(user: UserSearchResult): void {\n this.selectedUser = user;\n this.cdr.detectChanges();\n }\n\n onClearSelection(): void {\n this.selectedUser = null;\n this.newPermissions = {\n canRead: true,\n canShare: false,\n canEdit: false,\n canDelete: false\n };\n this.cdr.detectChanges();\n }\n\n async onAddUser(): Promise<void> {\n if (!this.selectedUser || !this.collection) return;\n\n try {\n // User is owner if OwnerID is null (old collections) or matches current user\n const isOwner = !this.collection.OwnerID || UUIDsEqual(this.collection.OwnerID, this.currentUser.ID);\n const userPerms = this.currentUserPermissions || {\n canRead: true,\n canShare: false,\n canEdit: false,\n canDelete: false\n };\n\n // Validate permissions\n if (!this.permissionService.validatePermissions(this.newPermissions, userPerms, isOwner)) {\n alert('You cannot grant permissions you do not have');\n return;\n }\n\n // Use cascade grant to apply permissions to all child collections\n await this.permissionService.grantPermissionCascade(\n this.collection.ID,\n this.selectedUser.id,\n this.newPermissions,\n this.currentUser.ID,\n this.currentUser\n );\n\n await this.loadPermissions();\n this.onClearSelection();\n this.saved.emit();\n } catch (error) {\n console.error('Error adding user:', error);\n alert('Failed to add user. Please try again.');\n }\n }\n\n onEditPermission(permission: PermissionDisplay): void {\n permission.isEditing = true;\n this.cdr.detectChanges();\n }\n\n onCancelEdit(permission: PermissionDisplay): void {\n permission.isEditing = false;\n permission.editingPermissions = {\n canRead: permission.canRead,\n canShare: permission.canShare,\n canEdit: permission.canEdit,\n canDelete: permission.canDelete\n };\n this.cdr.detectChanges();\n }\n\n async onSavePermission(permission: PermissionDisplay): Promise<void> {\n try {\n // User is owner if OwnerID is null (old collections) or matches current user\n const isOwner = !this.collection?.OwnerID || UUIDsEqual(this.collection?.OwnerID, this.currentUser.ID);\n const userPerms = this.currentUserPermissions || {\n canRead: true,\n canShare: false,\n canEdit: false,\n canDelete: false\n };\n\n // Validate permissions\n if (!this.permissionService.validatePermissions(permission.editingPermissions, userPerms, isOwner)) {\n alert('You cannot grant permissions you do not have');\n return;\n }\n\n // Use cascade update to apply changes to all child collections\n await this.permissionService.updatePermissionCascade(\n this.collection!.ID,\n permission.userId,\n permission.editingPermissions,\n this.currentUser\n );\n\n await this.loadPermissions();\n this.saved.emit();\n } catch (error) {\n console.error('Error updating permission:', error);\n alert('Failed to update permissions. Please try again.');\n }\n }\n\n async onRevokePermission(permission: PermissionDisplay): Promise<void> {\n if (!confirm(`Remove ${permission.userName}'s access to this collection and all its child collections?`)) {\n return;\n }\n\n try {\n // Use cascade revoke to remove access from all child collections\n await this.permissionService.revokePermissionCascade(\n this.collection!.ID,\n permission.userId,\n this.currentUser\n );\n await this.loadPermissions();\n this.saved.emit();\n } catch (error) {\n console.error('Error revoking permission:', error);\n alert('Failed to revoke permission. Please try again.');\n }\n }\n\n onCancel(): void {\n this.cancelled.emit();\n }\n}\n"]}
|
|
@@ -28,6 +28,8 @@ export declare class CollectionTreeComponent implements OnInit {
|
|
|
28
28
|
private buildTree;
|
|
29
29
|
private buildNode;
|
|
30
30
|
toggleNode(node: TreeNode, event: Event): void;
|
|
31
|
+
IsCollectionSelected(node: TreeNode): boolean;
|
|
32
|
+
IsCollectionDragging(node: TreeNode): boolean;
|
|
31
33
|
onSelectCollection(collection: MJCollectionEntity): void;
|
|
32
34
|
onCreateCollection(parentId: string | null): Promise<void>;
|
|
33
35
|
onDeleteCollection(collection: MJCollectionEntity): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-tree.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/collection/collection-tree.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,QAAQ,EAA+B,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;;
|
|
1
|
+
{"version":3,"file":"collection-tree.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/collection/collection-tree.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,QAAQ,EAA+B,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;;AAGjH,UAAU,QAAQ;IAChB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAOD,qBAuJa,uBAAwB,YAAW,MAAM;IAexC,OAAO,CAAC,iBAAiB;IAd5B,aAAa,EAAG,MAAM,CAAC;IACvB,WAAW,EAAG,QAAQ,CAAC;IACvB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3C,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAa;IAE9D,kBAAkB,mCAA0C;IAC5D,iBAAiB,mCAA0C;IAC3D,iBAAiB,mCAA0C;IAE9D,WAAW,EAAE,kBAAkB,EAAE,CAAM;IACvC,SAAS,EAAE,QAAQ,EAAE,CAAM;IAC3B,WAAW,EAAE,QAAQ,GAAG,IAAI,CAAQ;IACpC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAExB,iBAAiB,EAAE,2BAA2B;IAElE,QAAQ;YAIM,eAAe;IAmB7B,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,SAAS;IAUjB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAK9C,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO;IAI7C,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO;IAI7C,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAKlD,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAoD1D,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BvE,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAanD,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAOjC,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,GAAG,IAAI;IAkBxD,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,GAAG,IAAI;IAMnD,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CnE,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAYhC,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BjD,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO;IAWhD,SAAS,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO;IAWlD,eAAe,IAAI,OAAO;yCA9Tf,uBAAuB;2CAAvB,uBAAuB;CAkUnC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
2
|
import { RunView, Metadata, LogError } from '@memberjunction/core';
|
|
3
|
+
import { UUIDsEqual } from '@memberjunction/global';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "../../services/collection-permission.service";
|
|
5
6
|
import * as i2 from "@angular/common";
|
|
@@ -73,7 +74,7 @@ function CollectionTreeComponent_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
|
73
74
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
74
75
|
i0.ɵɵadvance();
|
|
75
76
|
i0.ɵɵstyleProp("padding-left", node_r5.level * 20, "px");
|
|
76
|
-
i0.ɵɵclassProp("selected",
|
|
77
|
+
i0.ɵɵclassProp("selected", ctx_r2.IsCollectionSelected(node_r5))("drag-over", ctx_r2.dragOverNodeId === node_r5.collection.ID)("dragging", ctx_r2.IsCollectionDragging(node_r5));
|
|
77
78
|
i0.ɵɵproperty("draggable", true);
|
|
78
79
|
i0.ɵɵadvance();
|
|
79
80
|
i0.ɵɵconditional(node_r5.children.length > 0 ? 2 : -1);
|
|
@@ -149,7 +150,7 @@ function CollectionTreeComponent_ng_template_8_Template(rf, ctx) { if (rf & 1) {
|
|
|
149
150
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
150
151
|
i0.ɵɵadvance();
|
|
151
152
|
i0.ɵɵstyleProp("padding-left", node_r12.level * 20, "px");
|
|
152
|
-
i0.ɵɵclassProp("selected",
|
|
153
|
+
i0.ɵɵclassProp("selected", ctx_r2.IsCollectionSelected(node_r12))("drag-over", ctx_r2.dragOverNodeId === node_r12.collection.ID)("dragging", ctx_r2.IsCollectionDragging(node_r12));
|
|
153
154
|
i0.ɵɵproperty("draggable", true);
|
|
154
155
|
i0.ɵɵadvance();
|
|
155
156
|
i0.ɵɵconditional(node_r12.children.length > 0 ? 2 : -1);
|
|
@@ -206,7 +207,7 @@ export class CollectionTreeComponent {
|
|
|
206
207
|
this.treeNodes = rootCollections.map(c => this.buildNode(c, 0));
|
|
207
208
|
}
|
|
208
209
|
buildNode(collection, level) {
|
|
209
|
-
const children = this.collections.filter(c => c.ParentID
|
|
210
|
+
const children = this.collections.filter(c => UUIDsEqual(c.ParentID, collection.ID));
|
|
210
211
|
return {
|
|
211
212
|
collection,
|
|
212
213
|
children: children.map(c => this.buildNode(c, level + 1)),
|
|
@@ -218,6 +219,12 @@ export class CollectionTreeComponent {
|
|
|
218
219
|
event.stopPropagation();
|
|
219
220
|
node.expanded = !node.expanded;
|
|
220
221
|
}
|
|
222
|
+
IsCollectionSelected(node) {
|
|
223
|
+
return UUIDsEqual(node.collection.ID, this.selectedCollectionId);
|
|
224
|
+
}
|
|
225
|
+
IsCollectionDragging(node) {
|
|
226
|
+
return UUIDsEqual(this.draggedNode?.collection?.ID, node.collection.ID);
|
|
227
|
+
}
|
|
221
228
|
onSelectCollection(collection) {
|
|
222
229
|
this.selectedCollectionId = collection.ID;
|
|
223
230
|
this.collectionSelected.emit(collection);
|
|
@@ -225,10 +232,10 @@ export class CollectionTreeComponent {
|
|
|
225
232
|
async onCreateCollection(parentId) {
|
|
226
233
|
// Validate permission if creating child collection
|
|
227
234
|
if (parentId) {
|
|
228
|
-
const parentCollection = this.collections.find(c => c.ID
|
|
235
|
+
const parentCollection = this.collections.find(c => UUIDsEqual(c.ID, parentId));
|
|
229
236
|
if (parentCollection) {
|
|
230
237
|
// Check if user has Edit permission on parent
|
|
231
|
-
if (parentCollection.OwnerID && parentCollection.OwnerID
|
|
238
|
+
if (parentCollection.OwnerID && !UUIDsEqual(parentCollection.OwnerID, this.currentUser.ID)) {
|
|
232
239
|
const permission = await this.permissionService.checkPermission(parentId, this.currentUser.ID, this.currentUser);
|
|
233
240
|
if (!permission?.canEdit) {
|
|
234
241
|
alert('You do not have Edit permission to create a sub-collection.');
|
|
@@ -247,7 +254,7 @@ export class CollectionTreeComponent {
|
|
|
247
254
|
collection.EnvironmentID = this.environmentId;
|
|
248
255
|
if (parentId) {
|
|
249
256
|
// Child collection - inherit parent's owner and set parent
|
|
250
|
-
const parentCollection = this.collections.find(c => c.ID
|
|
257
|
+
const parentCollection = this.collections.find(c => UUIDsEqual(c.ID, parentId));
|
|
251
258
|
collection.ParentID = parentId;
|
|
252
259
|
collection.OwnerID = parentCollection?.OwnerID || this.currentUser.ID;
|
|
253
260
|
}
|
|
@@ -268,7 +275,7 @@ export class CollectionTreeComponent {
|
|
|
268
275
|
}
|
|
269
276
|
async onDeleteCollection(collection) {
|
|
270
277
|
// Validate Delete permission
|
|
271
|
-
if (collection.OwnerID && collection.OwnerID
|
|
278
|
+
if (collection.OwnerID && !UUIDsEqual(collection.OwnerID, this.currentUser.ID)) {
|
|
272
279
|
const permission = await this.permissionService.checkPermission(collection.ID, this.currentUser.ID, this.currentUser);
|
|
273
280
|
if (!permission?.canDelete) {
|
|
274
281
|
alert('You do not have Delete permission for this collection.');
|
|
@@ -308,7 +315,7 @@ export class CollectionTreeComponent {
|
|
|
308
315
|
}
|
|
309
316
|
onDragOver(event, targetNode) {
|
|
310
317
|
event.preventDefault(); // Required to allow drop
|
|
311
|
-
if (!this.draggedNode || this.draggedNode.collection.ID
|
|
318
|
+
if (!this.draggedNode || UUIDsEqual(this.draggedNode.collection.ID, targetNode.collection.ID)) {
|
|
312
319
|
event.dataTransfer.dropEffect = 'none';
|
|
313
320
|
return;
|
|
314
321
|
}
|
|
@@ -332,7 +339,7 @@ export class CollectionTreeComponent {
|
|
|
332
339
|
return;
|
|
333
340
|
}
|
|
334
341
|
// Don't allow dropping on itself
|
|
335
|
-
if (this.draggedNode.collection.ID
|
|
342
|
+
if (UUIDsEqual(this.draggedNode.collection.ID, targetNode.collection.ID)) {
|
|
336
343
|
this.dragOverNodeId = null;
|
|
337
344
|
return;
|
|
338
345
|
}
|
|
@@ -400,7 +407,7 @@ export class CollectionTreeComponent {
|
|
|
400
407
|
}
|
|
401
408
|
}
|
|
402
409
|
isDescendant(potentialDescendant, ancestor) {
|
|
403
|
-
if (potentialDescendant.collection.ParentID
|
|
410
|
+
if (UUIDsEqual(potentialDescendant.collection.ParentID, ancestor.collection.ID)) {
|
|
404
411
|
return true;
|
|
405
412
|
}
|
|
406
413
|
for (const child of ancestor.children) {
|
|
@@ -413,7 +420,7 @@ export class CollectionTreeComponent {
|
|
|
413
420
|
// Permission checking methods
|
|
414
421
|
canEdit(collection) {
|
|
415
422
|
// Backwards compatibility: treat null OwnerID as owned by current user
|
|
416
|
-
if (!collection.OwnerID || collection.OwnerID
|
|
423
|
+
if (!collection.OwnerID || UUIDsEqual(collection.OwnerID, this.currentUser.ID)) {
|
|
417
424
|
return true;
|
|
418
425
|
}
|
|
419
426
|
// Check permission record
|
|
@@ -422,7 +429,7 @@ export class CollectionTreeComponent {
|
|
|
422
429
|
}
|
|
423
430
|
canDelete(collection) {
|
|
424
431
|
// Backwards compatibility: treat null OwnerID as owned by current user
|
|
425
|
-
if (!collection.OwnerID || collection.OwnerID
|
|
432
|
+
if (!collection.OwnerID || UUIDsEqual(collection.OwnerID, this.currentUser.ID)) {
|
|
426
433
|
return true;
|
|
427
434
|
}
|
|
428
435
|
// Check permission record
|
|
@@ -477,9 +484,9 @@ export class CollectionTreeComponent {
|
|
|
477
484
|
<div class="tree-node-wrapper">
|
|
478
485
|
<div
|
|
479
486
|
class="tree-node"
|
|
480
|
-
[class.selected]="node
|
|
487
|
+
[class.selected]="IsCollectionSelected(node)"
|
|
481
488
|
[class.drag-over]="dragOverNodeId === node.collection.ID"
|
|
482
|
-
[class.dragging]="
|
|
489
|
+
[class.dragging]="IsCollectionDragging(node)"
|
|
483
490
|
[style.padding-left.px]="node.level * 20"
|
|
484
491
|
[draggable]="true"
|
|
485
492
|
(click)="onSelectCollection(node.collection)"
|
|
@@ -525,9 +532,9 @@ export class CollectionTreeComponent {
|
|
|
525
532
|
<div class="tree-node-wrapper">
|
|
526
533
|
<div
|
|
527
534
|
class="tree-node"
|
|
528
|
-
[class.selected]="node
|
|
535
|
+
[class.selected]="IsCollectionSelected(node)"
|
|
529
536
|
[class.drag-over]="dragOverNodeId === node.collection.ID"
|
|
530
|
-
[class.dragging]="
|
|
537
|
+
[class.dragging]="IsCollectionDragging(node)"
|
|
531
538
|
[style.padding-left.px]="node.level * 20"
|
|
532
539
|
[draggable]="true"
|
|
533
540
|
(click)="onSelectCollection(node.collection)"
|
|
@@ -582,5 +589,5 @@ export class CollectionTreeComponent {
|
|
|
582
589
|
}], collectionDeleted: [{
|
|
583
590
|
type: Output
|
|
584
591
|
}] }); })();
|
|
585
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CollectionTreeComponent, { className: "CollectionTreeComponent", filePath: "src/lib/components/collection/collection-tree.component.ts", lineNumber:
|
|
592
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CollectionTreeComponent, { className: "CollectionTreeComponent", filePath: "src/lib/components/collection/collection-tree.component.ts", lineNumber: 170 }); })();
|
|
586
593
|
//# sourceMappingURL=collection-tree.component.js.map
|