diff --git a/src-ui/src/app/components/manage/document-attributes/document-attributes.component.html b/src-ui/src/app/components/manage/document-attributes/document-attributes.component.html index da6077039..38f449956 100644 --- a/src-ui/src/app/components/manage/document-attributes/document-attributes.component.html +++ b/src-ui/src/app/components/manage/document-attributes/document-attributes.component.html @@ -51,8 +51,8 @@ *pngxIfPermissions="{ action: PermissionAction.Add, type: activeManagementList.permissionType }"> Create - } @else if (activeCustomFields) { - diff --git a/src-ui/src/app/components/manage/document-attributes/document-attributes.component.spec.ts b/src-ui/src/app/components/manage/document-attributes/document-attributes.component.spec.ts index 97a8bfd1f..b40c35692 100644 --- a/src-ui/src/app/components/manage/document-attributes/document-attributes.component.spec.ts +++ b/src-ui/src/app/components/manage/document-attributes/document-attributes.component.spec.ts @@ -18,6 +18,7 @@ import { DocumentAttributesComponent, DocumentAttributesSectionKind, } from './document-attributes.component' +import { CustomFieldsComponent } from './custom-fields/custom-fields.component' import { ManagementListComponent } from './management-list/management-list.component' @Component({ @@ -207,6 +208,29 @@ describe('DocumentAttributesComponent', () => { expect(component.activeSection.kind).toBe( DocumentAttributesSectionKind.CustomFields ) - expect(component.activeCustomFields).toBeDefined() + const customFields = Object.create(CustomFieldsComponent.prototype) + customFields.editField = jest.fn() + component.activeOutlet = { + componentInstance: customFields, + } as any + expect(component.activeCustomFields).toBe(customFields) + + component.addCustomField() + expect(customFields.editField).toHaveBeenCalled() + }) + + it('should show the add field button before the custom fields instance is available', async () => { + jest.spyOn(permissionsService, 'currentUserCan').mockReturnValue(true) + + fixture.detectChanges() + component.activeNavID.set(2) + await fixture.whenStable() + + expect(component.activeCustomFields).toBeNull() + expect( + fixture.nativeElement.querySelector( + 'pngx-page-header .btn-outline-primary' + )?.textContent + ).toContain('Add Field') }) }) diff --git a/src-ui/src/app/components/manage/document-attributes/document-attributes.component.ts b/src-ui/src/app/components/manage/document-attributes/document-attributes.component.ts index 482149ff0..0ff747407 100644 --- a/src-ui/src/app/components/manage/document-attributes/document-attributes.component.ts +++ b/src-ui/src/app/components/manage/document-attributes/document-attributes.component.ts @@ -163,12 +163,17 @@ export class DocumentAttributesComponent implements OnInit, OnDestroy { } get activeCustomFields(): CustomFieldsComponent | null { - if (this.activeSection?.kind !== DocumentAttributesSectionKind.CustomFields) - return null + if (!this.customFieldsActive) return null const instance = this.activeOutlet?.componentInstance return instance instanceof CustomFieldsComponent ? instance : null } + get customFieldsActive(): boolean { + return ( + this.activeSection?.kind === DocumentAttributesSectionKind.CustomFields + ) + } + get activeTabLabel(): string { return this.activeSection?.label ?? '' } @@ -224,6 +229,10 @@ export class DocumentAttributesComponent implements OnInit, OnDestroy { this.router.navigate(['attributes', nextSection]) } + addCustomField(): void { + this.activeCustomFields?.editField(null) + } + private getDefaultNavID(): DocumentAttributesNavIDs | null { return this.visibleSections[0]?.id ?? null }