From cd3c162e6ef1062ccf19c9f7c84b477a77b72108 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 23 Jul 2026 09:22:27 -0700 Subject: [PATCH] Fix: ensure create dialog uses correct attribute type (#13221) --- .../document-attributes.component.spec.ts | 25 ++++++++++++++++++- .../document-attributes.component.ts | 9 +++---- 2 files changed, 27 insertions(+), 7 deletions(-) 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 b0d010e19..97a8bfd1f 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 { ManagementListComponent } from './management-list/management-list.component' @Component({ selector: 'pngx-dummy-section', @@ -170,10 +171,32 @@ describe('DocumentAttributesComponent', () => { expect(component.activeManagementList).toBeNull() component.activeNavID.set(1) + const managementList = Object.create(ManagementListComponent.prototype) + component.activeOutlet = { + componentInstance: managementList, + } as any expect(component.activeSection.kind).toBe( DocumentAttributesSectionKind.ManagementList ) - expect(component.activeManagementList).toBeDefined() + expect(component.activeManagementList).toBe(managementList) + }) + + it('should use the current component instance when the outlet is reused', () => { + jest.spyOn(permissionsService, 'currentUserCan').mockReturnValue(true) + component.activeNavID.set(1) + const firstManagementList = Object.create(ManagementListComponent.prototype) + const secondManagementList = Object.create( + ManagementListComponent.prototype + ) + component.activeOutlet = { + componentInstance: firstManagementList, + } as any + + expect(component.activeManagementList).toBe(firstManagementList) + + component.activeOutlet.componentInstance = secondManagementList + + expect(component.activeManagementList).toBe(secondManagementList) }) it('should return activeCustomFields correctly', () => { 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 d5e1e3c3a..482149ff0 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 @@ -132,11 +132,8 @@ export class DocumentAttributesComponent implements OnInit, OnDestroy { ] @ViewChild('activeOutlet', { read: NgComponentOutlet }) - set activeOutlet(outlet: NgComponentOutlet | undefined) { - this.activeComponent.set(outlet?.componentInstance ?? null) - } + activeOutlet: NgComponentOutlet - readonly activeComponent = signal(null) readonly activeNavID = signal(null) get visibleSections(): DocumentAttributesSection[] { @@ -161,14 +158,14 @@ export class DocumentAttributesComponent implements OnInit, OnDestroy { this.activeSection?.kind !== DocumentAttributesSectionKind.ManagementList ) return null - const instance = this.activeComponent() + const instance = this.activeOutlet?.componentInstance return instance instanceof ManagementListComponent ? instance : null } get activeCustomFields(): CustomFieldsComponent | null { if (this.activeSection?.kind !== DocumentAttributesSectionKind.CustomFields) return null - const instance = this.activeComponent() + const instance = this.activeOutlet?.componentInstance return instance instanceof CustomFieldsComponent ? instance : null }