From 282257e8ba89d135d866053ddaee4a041a3e21b8 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Thu, 20 Nov 2025 13:24:37 +0100 Subject: [PATCH 1/2] Allowed selection of all available fields in Examine search results, and fix layout issue when not all records have all fields. --- .../views/section-view-examine-searchers.ts | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/search/examine-management-dashboard/views/section-view-examine-searchers.ts b/src/Umbraco.Web.UI.Client/src/packages/core/search/examine-management-dashboard/views/section-view-examine-searchers.ts index e19081640a84..8633be8b773a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/search/examine-management-dashboard/views/section-view-examine-searchers.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/search/examine-management-dashboard/views/section-view-examine-searchers.ts @@ -97,6 +97,8 @@ export class UmbDashboardExamineSearcherElement extends UmbLitElement { } private _updateFieldFilter() { + const documentFields: ExposedSearchResultField[] = []; + this._searchResults?.map((doc) => { const document = doc.fields?.filter((field) => { return field.name?.toUpperCase() !== 'NODENAME'; @@ -106,16 +108,16 @@ export class UmbDashboardExamineSearcherElement extends UmbLitElement { return field.name ?? ''; }); - // TODO: I don't get this code, not sure what the purpose is, it seems like a mistake: [NL] - this._exposedFields = this._exposedFields - ? this._exposedFields.filter((field) => { - return { name: field.name, exposed: field.exposed }; - }) - : newFieldNames?.map((name) => { - return { name, exposed: false }; - }); + newFieldNames.forEach((name) => { + if (!documentFields.find((field) => field.name === name)) { + const exposed = this._exposedFields?.find((field) => field.name === name)?.exposed ?? false; + documentFields.push({ name, exposed }); + } + }); } }); + + this._exposedFields = documentFields.sort((a, b) => a.name.localeCompare(b.name)); } async #onFieldFilterClick() { @@ -286,11 +288,17 @@ export class UmbDashboardExamineSearcherElement extends UmbLitElement { renderBodyCells(cellData: UmbSearchFieldPresentationModel[]) { return html`${this._exposedFields?.map((slot) => { - return cellData.map((field) => { - return slot.exposed && field.name == slot.name - ? html`${field.values}` - : html``; - }); + if (slot.exposed) { + const field = cellData.find((field) => field.name == slot.name); + if (field) { + return html`${field.values}`; + } + + // Exposed field not found for this record, render empty cell. + return html``; + } + + return html``; })}`; } From 23a66ac0370980aa39c606cc32602002da862e77 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Thu, 20 Nov 2025 13:41:28 +0100 Subject: [PATCH 2/2] Updates from code review. --- .../views/section-view-examine-searchers.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/search/examine-management-dashboard/views/section-view-examine-searchers.ts b/src/Umbraco.Web.UI.Client/src/packages/core/search/examine-management-dashboard/views/section-view-examine-searchers.ts index 8633be8b773a..b43b03a56d5a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/search/examine-management-dashboard/views/section-view-examine-searchers.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/search/examine-management-dashboard/views/section-view-examine-searchers.ts @@ -99,7 +99,7 @@ export class UmbDashboardExamineSearcherElement extends UmbLitElement { private _updateFieldFilter() { const documentFields: ExposedSearchResultField[] = []; - this._searchResults?.map((doc) => { + this._searchResults?.forEach((doc) => { const document = doc.fields?.filter((field) => { return field.name?.toUpperCase() !== 'NODENAME'; }); @@ -289,7 +289,7 @@ export class UmbDashboardExamineSearcherElement extends UmbLitElement { renderBodyCells(cellData: UmbSearchFieldPresentationModel[]) { return html`${this._exposedFields?.map((slot) => { if (slot.exposed) { - const field = cellData.find((field) => field.name == slot.name); + const field = cellData.find((field) => field.name === slot.name); if (field) { return html`${field.values}`; }