/*! * SAPUI5 * Copyright (c) 2025 SAP SE or an SAP affiliate company. All rights reserved. */ import { NavigationTarget } from "../sinaNexTS/sina/NavigationTarget"; import { SearchResultSetItemAttribute } from "../sinaNexTS/sina/SearchResultSetItemAttribute"; import { SearchResultSetItemAttributeBase } from "../sinaNexTS/sina/SearchResultSetItemAttributeBase"; import { SearchResultSetItemAttributeGroup } from "../sinaNexTS/sina/SearchResultSetItemAttributeGroup"; import { Assembler } from "./assembler/Assembler"; import { createSubAttributeMap, isIcon, isText, parseTemplate } from "./util"; export function assembleAttributeWithNavigationTarget( assembler: Assembler, attribute: SearchResultSetItemAttributeBase ) { return assembleAttributesWithNavigationTarget(assembler, [attribute], attribute.defaultNavigationTarget); } export function assembleAttributesWithNavigationTarget( assembler: Assembler, attributes: Array, navigationTarget: NavigationTarget ) { // start icon const iconAttribute = attributes .flatMap((attribute) => attribute.getSubAttributes()) .find((attribute) => isIcon(attribute)); const icon = iconAttribute?.value; // end icon const endIconAttribute = attributes .flatMap((attribute) => attribute.getSubAttributes()) .reverse() .find((attribute) => isIcon(attribute)); let endIcon: string; if (endIconAttribute && endIconAttribute !== iconAttribute) { endIcon = endIconAttribute.value; } // text const text = attributes.map((attribute) => getAttributeText(attribute)).join(" "); // create searchlink assembler.addLink({ navigationTarget: navigationTarget, icon: icon, endIcon: endIcon, text: text, }); } function getAttributeText(attribute: SearchResultSetItemAttributeBase): string { if (attribute instanceof SearchResultSetItemAttribute) { return getSimpleAttributeText(attribute as SearchResultSetItemAttribute); } else { return getGroupAttributeText(attribute as SearchResultSetItemAttributeGroup); } } function getSimpleAttributeText(attribute: SearchResultSetItemAttribute): string { return isText(attribute) ? attribute.valueHighlighted : ""; } function getGroupAttributeText(attribute: SearchResultSetItemAttributeGroup): string { const parts = parseTemplate((attribute as SearchResultSetItemAttributeGroup).template); const textParts = []; const subAttributeMap = createSubAttributeMap(attribute as SearchResultSetItemAttributeGroup); let subAttribute: SearchResultSetItemAttributeBase; for (const part of parts) { switch (part.type) { case "string": textParts.push(part.value); break; case "placeholder": subAttribute = subAttributeMap[part.value]; if (subAttribute) { textParts.push(getAttributeText(subAttribute)); } break; } } return textParts.join(""); }