{"version":3,"names":["bindLogDocumentOpenOnResult","engine","result","resultElement","selector","interactiveResult","buildInteractiveResult","options","eventsMap","contextmenu","select","click","mouseup","mousedown","touchstart","beginDelayedSelect","touchend","cancelPendingSelect","elements","querySelectorAll","forEach","element","Object","keys","key","addEventListener","removeEventListener","buildStringTemplateFromResult","template","bindings","replace","value","substring","length","newValue","readFromObject","window","logger","warn","uniqueId","getStringValueFromResultOrNull","field","ResultTemplatesHelpers","getResultProperty","trim","object","firstPeriodIndex","indexOf","newKey","undefined"],"sources":["src/utils/result-utils.ts"],"sourcesContent":["import {\n buildInteractiveResult,\n SearchEngine,\n Result,\n ResultTemplatesHelpers,\n} from '@coveo/headless';\nimport {Bindings} from '../components/search/atomic-search-interface/atomic-search-interface';\n\n/**\n * Binds the logging of document\n * @returns An unbind function for the events\n * @param engine A headless search engine instance.\n * @param result The result object\n * @param resultElement Parent result element\n * @param selector Optional. Css selector that selects all links to the document. Default: \"a\" tags with the clickUri as \"href\" parameter.\n */\nexport function bindLogDocumentOpenOnResult(\n engine: SearchEngine,\n result: Result,\n resultElement: Element | ShadowRoot,\n selector?: string\n) {\n const interactiveResult = buildInteractiveResult(engine, {\n options: {result},\n });\n\n const eventsMap: Record<string, EventListenerOrEventListenerObject> = {\n contextmenu: () => interactiveResult.select(),\n click: () => interactiveResult.select(),\n mouseup: () => interactiveResult.select(),\n mousedown: () => interactiveResult.select(),\n touchstart: () => interactiveResult.beginDelayedSelect(),\n touchend: () => interactiveResult.cancelPendingSelect(),\n };\n const elements = resultElement.querySelectorAll(selector || 'a');\n\n elements.forEach((element) => {\n Object.keys(eventsMap).forEach((key) =>\n element.addEventListener(key, eventsMap[key])\n );\n });\n\n return () => {\n elements.forEach((element) => {\n Object.keys(eventsMap).forEach((key) =>\n element.removeEventListener(key, eventsMap[key])\n );\n });\n };\n}\n\nexport function buildStringTemplateFromResult(\n template: string,\n result: Result,\n bindings: Bindings\n) {\n return template.replace(/\\${(.*?)}/g, (value: string) => {\n const key = value.substring(2, value.length - 1);\n let newValue = readFromObject(result, key);\n if (!newValue) {\n newValue = readFromObject(window, key);\n }\n\n if (!newValue) {\n bindings.engine.logger.warn(\n `${key} used in the href template is undefined for this result: ${result.uniqueId}`\n );\n return '';\n }\n\n return newValue;\n });\n}\n\nexport function getStringValueFromResultOrNull(result: Result, field: string) {\n const value = ResultTemplatesHelpers.getResultProperty(result, field);\n\n if (typeof value !== 'string' || value.trim() === '') {\n return null;\n }\n\n return value;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction readFromObject(object: any, key: string): string {\n const firstPeriodIndex = key.indexOf('.');\n if (object && firstPeriodIndex !== -1) {\n const newKey = key.substring(firstPeriodIndex + 1);\n key = key.substring(0, firstPeriodIndex);\n return readFromObject(object[key], newKey);\n }\n return object ? object[key] : undefined;\n}\n"],"mappings":"oDAgBgBA,EACdC,EACAC,EACAC,EACAC,GAEA,MAAMC,EAAoBC,EAAuBL,EAAQ,CACvDM,QAAS,CAACL,YAGZ,MAAMM,EAAgE,CACpEC,YAAa,IAAMJ,EAAkBK,SACrCC,MAAO,IAAMN,EAAkBK,SAC/BE,QAAS,IAAMP,EAAkBK,SACjCG,UAAW,IAAMR,EAAkBK,SACnCI,WAAY,IAAMT,EAAkBU,qBACpCC,SAAU,IAAMX,EAAkBY,uBAEpC,MAAMC,EAAWf,EAAcgB,iBAAiBf,GAAY,KAE5Dc,EAASE,SAASC,IAChBC,OAAOC,KAAKf,GAAWY,SAASI,GAC9BH,EAAQI,iBAAiBD,EAAKhB,EAAUgB,KACzC,IAGH,MAAO,KACLN,EAASE,SAASC,IAChBC,OAAOC,KAAKf,GAAWY,SAASI,GAC9BH,EAAQK,oBAAoBF,EAAKhB,EAAUgB,KAC5C,GACD,CAEN,C,SAEgBG,EACdC,EACA1B,EACA2B,GAEA,OAAOD,EAASE,QAAQ,cAAeC,IACrC,MAAMP,EAAMO,EAAMC,UAAU,EAAGD,EAAME,OAAS,GAC9C,IAAIC,EAAWC,EAAejC,EAAQsB,GACtC,IAAKU,EAAU,CACbA,EAAWC,EAAeC,OAAQZ,E,CAGpC,IAAKU,EAAU,CACbL,EAAS5B,OAAOoC,OAAOC,KACrB,GAAGd,6DAA+DtB,EAAOqC,YAE3E,MAAO,E,CAGT,OAAOL,CAAQ,GAEnB,C,SAEgBM,EAA+BtC,EAAgBuC,GAC7D,MAAMV,EAAQW,EAAuBC,kBAAkBzC,EAAQuC,GAE/D,UAAWV,IAAU,UAAYA,EAAMa,SAAW,GAAI,CACpD,OAAO,I,CAGT,OAAOb,CACT,CAGA,SAASI,EAAeU,EAAarB,GACnC,MAAMsB,EAAmBtB,EAAIuB,QAAQ,KACrC,GAAIF,GAAUC,KAAsB,EAAG,CACrC,MAAME,EAASxB,EAAIQ,UAAUc,EAAmB,GAChDtB,EAAMA,EAAIQ,UAAU,EAAGc,GACvB,OAAOX,EAAeU,EAAOrB,GAAMwB,E,CAErC,OAAOH,EAASA,EAAOrB,GAAOyB,SAChC,Q"}