{"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"}