diff --git a/src-ui/src/app/components/common/input/document-link/document-link.component.html b/src-ui/src/app/components/common/input/document-link/document-link.component.html index 01df7c324..f60420791 100644 --- a/src-ui/src/app/components/common/input/document-link/document-link.component.html +++ b/src-ui/src/app/components/common/input/document-link/document-link.component.html @@ -47,8 +47,8 @@ {{document.title}} } @else { - - Not found + + Unavailable } diff --git a/src-ui/src/app/components/common/input/document-link/document-link.component.spec.ts b/src-ui/src/app/components/common/input/document-link/document-link.component.spec.ts index f872cb4b9..be479f2a4 100644 --- a/src-ui/src/app/components/common/input/document-link/document-link.component.spec.ts +++ b/src-ui/src/app/components/common/input/document-link/document-link.component.spec.ts @@ -151,6 +151,23 @@ describe('DocumentLinkComponent', () => { expect(component.selectedDocuments).toEqual([]) }) + it('should preserve and neutrally label unavailable document IDs', async () => { + jest.spyOn(documentService, 'getFew').mockReturnValue( + of({ + count: 0, + all: [], + results: [], + }) + ) + + component.writeValue([99]) + await fixture.whenStable() + + expect(component.selectedDocuments).toEqual([{ id: 99 }]) + expect(fixture.nativeElement.textContent).toContain('Unavailable') + expect(fixture.nativeElement.textContent).not.toContain('Not found') + }) + it('should support unselect', () => { const getSpy = jest.spyOn(documentService, 'getFew') getSpy.mockImplementation((ids) => { @@ -167,6 +184,15 @@ describe('DocumentLinkComponent', () => { expect(component.selectedDocuments).toEqual([documents[1]]) }) + it('should not unselect documents when disabled', () => { + component.disabled = true + component.selectedDocuments = [documents[0]] + + component.unselect(documents[0]) + + expect(component.selectedDocuments).toEqual([documents[0]]) + }) + it('should use correct compare, trackBy functions', () => { expect(component.compareDocuments(documents[0], { id: 1 })).toBeTruthy() expect(component.compareDocuments(documents[0], { id: 2 })).toBeFalsy() diff --git a/src-ui/src/app/components/common/input/document-link/document-link.component.ts b/src-ui/src/app/components/common/input/document-link/document-link.component.ts index cc6b8a6a7..4209bb9d0 100644 --- a/src-ui/src/app/components/common/input/document-link/document-link.component.ts +++ b/src-ui/src/app/components/common/input/document-link/document-link.component.ts @@ -101,7 +101,7 @@ export class DocumentLinkComponent .subscribe((documentResults) => { this.loading.set(false) this.selectedDocuments = documentIDs.map( - (id) => documentResults.results.find((d) => d.id === id) ?? {} + (id) => documentResults.results.find((d) => d.id === id) ?? { id } ) super.writeValue(documentIDs) }) @@ -142,6 +142,8 @@ export class DocumentLinkComponent } unselect(document: Document): void { + if (this.disabled) return + this.selectedDocuments = this.selectedDocuments.filter( (d) => d && d.id !== document.id ) diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html index 94c4dba9a..df9d5c299 100644 --- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html +++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html @@ -114,13 +114,23 @@
- - - + @if (permissionService.currentUserCan(PermissionAction.Add, PermissionType.ShareLinkBundle)) { + + } + @if (permissionService.currentUserCan(PermissionAction.View, PermissionType.ShareLinkBundle)) { + + } + @if ( + emailEnabled && + (permissionService.currentUserCan(PermissionAction.Add, PermissionType.ShareLinkBundle) || + permissionService.currentUserCan(PermissionAction.View, PermissionType.ShareLinkBundle)) + ) { + + } @if (emailEnabled) {