diff --git a/lib/content-services/src/lib/content-node-selector/content-node-selector-panel.component.spec.ts b/lib/content-services/src/lib/content-node-selector/content-node-selector-panel.component.spec.ts index a192879c0d..eef77df6d7 100644 --- a/lib/content-services/src/lib/content-node-selector/content-node-selector-panel.component.spec.ts +++ b/lib/content-services/src/lib/content-node-selector/content-node-selector-panel.component.spec.ts @@ -269,7 +269,7 @@ describe('ContentNodeSelectorPanelComponent', () => { }); - it('should show the breadcrumb for the selected node when search results are displayed', async () => { + it('should show the breadcrumb in search results for a valid node selection', async () => { searchQueryBuilderService.userQuery = 'mock-search-term'; searchQueryBuilderService.update(); triggerSearchResults(fakeResultSetPaging); @@ -283,6 +283,21 @@ describe('ContentNodeSelectorPanelComponent', () => { expect(breadcrumb.componentInstance.folderNode.path).toBe(chosenNode.path); }); + it('should show the breadcrumb in search results even for an invalid node selection', async () => { + component.isSelectionValid = (node: Node) => node.isFile; + searchQueryBuilderService.userQuery = 'mock-search-term'; + searchQueryBuilderService.update(); + triggerSearchResults(fakeResultSetPaging); + + const chosenNode = new Node({ path: { elements: ['fake-path'] }, isFile: false, isFolder: true }); + component.onCurrentSelection([{ entry: chosenNode }]); + fixture.detectChanges(); + + const breadcrumb = fixture.debugElement.query(By.directive(DropdownBreadcrumbComponent)); + expect(breadcrumb).not.toBeNull(); + expect(breadcrumb.componentInstance.folderNode.path).toBe(chosenNode.path); + }); + it('should NOT show the breadcrumb for the selected node when not on search results list', async () => { triggerSearchResults(fakeResultSetPaging); fixture.detectChanges(); diff --git a/lib/content-services/src/lib/content-node-selector/content-node-selector-panel.component.ts b/lib/content-services/src/lib/content-node-selector/content-node-selector-panel.component.ts index a8076730d0..2600e378c7 100644 --- a/lib/content-services/src/lib/content-node-selector/content-node-selector-panel.component.ts +++ b/lib/content-services/src/lib/content-node-selector/content-node-selector-panel.component.ts @@ -248,7 +248,8 @@ export class ContentNodeSelectorPanelComponent implements OnInit, OnDestroy { showingSearchResults: boolean = false; loadingSearchResults: boolean = false; inDialog: boolean = false; - _chosenNode: Node [] = null; + _chosenNode: Node[] = null; + selectionWithoutValidation: Node[] = null; folderIdToShow: string | null = null; breadcrumbFolderTitle: string | null = null; startSiteGuid: string | null = null; @@ -454,8 +455,8 @@ export class ContentNodeSelectorPanelComponent implements OnInit, OnDestroy { get breadcrumbFolderNode(): Node | null { let folderNode: Node; - if (this.showingSearchResults && this.chosenNode) { - folderNode = this.chosenNode[0]; + if (this.showingSearchResults && this.selectionWithoutValidation?.length) { + folderNode = this.selectionWithoutValidation[0]; } else { folderNode = this.documentList.folderNode; } @@ -629,6 +630,7 @@ export class ContentNodeSelectorPanelComponent implements OnInit, OnDestroy { onCurrentSelection(nodesEntries: NodeEntry[]): void { const validNodesEntity = nodesEntries.filter((node) => this.isSelectionValid(node.entry)); this.chosenNode = validNodesEntity.map((node) => node.entry); + this.selectionWithoutValidation = nodesEntries.map(node => node.entry); } setTitleIfCustomSite(site: SiteEntry) {