{"version":3,"file":"constructor-recommendations.js","sources":["../../../resources/javascript/entrypoint/constructor-recommendations.js","../../../resources/javascript/features/content-block/constructor-recommendation-engine/index.js"],"sourcesContent":["import { initConstructorRecommendationBlocks } from '../features/content-block/constructor-recommendation-engine';\nimport { onDOMContentLoaded } from '../util/loaded';\n\nonDOMContentLoaded(() => {\n  const main = document.querySelector('main');\n  initConstructorRecommendationBlocks(main);\n});\n","import { initRecommendationBlock } from '../../recommendations/block';\nimport { addRecommendationsContainerAttributes, addRecommendationsItemAttributes, getRecommendations } from '../../recommendations/constructor';\nimport { dataLayerPush } from '../../tracking';\n\n/**\n * Initialise Constructor Recommendation Engine content blocks.\n *\n * This function must be called on pages that include Constructor Recommendation\n * Engine content blocks, but no more than once per page load.\n *\n * @param {HTMLElement} container - The container element that contains the blocks.\n */\nexport const initConstructorRecommendationBlocks = async (container) => {\n  for (const block of container.querySelectorAll('.block--constructor-recommendation-engine')) {\n    let renderedCallback;\n\n    initRecommendationBlock(block, {\n      loadRecommendations: async ({ engineId: podId, container }) => {\n        let params = {};\n        if (container.dataset.recEngineParams) {\n          params = JSON.parse(container.dataset.recEngineParams);\n        }\n\n        const result = await getRecommendations(podId, params);\n\n        const productCodes = [];\n        for (const item of result.response.results) {\n          if (!item.data?.id?.startsWith('S') || !item.data?.code) {\n            // Maybe it's a set? We don't support those yet.\n            throw new Error('Invalid product data');\n          }\n          productCodes.push(item.data.code);\n        }\n\n        renderedCallback = async ({ container, hasQuickAdd }) => {\n          addRecommendationsContainerAttributes(\n            container.querySelector('.carousel__content'),\n            result,\n          );\n\n          for (const item of container.querySelectorAll('.product-preview')) {\n            const index = parseInt(item.dataset.resultIndex, 10);\n            addRecommendationsItemAttributes(item, result, index, hasQuickAdd);\n          }\n        };\n\n        if (result?.request?.feature_variants) {\n            dataLayerPush({\n                event: 'constructorRecommendationResults',\n                constructorFeatureVariants: result.request.feature_variants\n            });\n        }\n\n        return productCodes;\n      },\n      renderedCallback: async (args) => await renderedCallback?.(args),\n\n      // Constructor does click tracking automatically, using values from\n      // data-cnstrc-* attributes in the HTML.\n      trackClick: undefined,\n    });\n  }\n};\n"],"names":["onDOMContentLoaded","async","block","container","querySelectorAll","renderedCallback","initRecommendationBlock","loadRecommendations","engineId","podId","_result$request","params","dataset","recEngineParams","JSON","parse","result","getRecommendations","productCodes","item","response","results","_item$data","_item$data2","data","id","startsWith","code","Error","push","hasQuickAdd","addRecommendationsContainerAttributes","querySelector","index","parseInt","resultIndex","addRecommendationsItemAttributes","request","feature_variants","dataLayerPush","event","constructorFeatureVariants","args","trackClick","undefined","initConstructorRecommendationBlocks","document"],"mappings":"8bAGAA,GAAmB,KCSgCC,WACjD,IAAK,MAAMC,KAASC,EAAUC,iBAAiB,6CAA8C,CAC3F,IAAIC,EAEJC,EAAwBJ,EAAO,CAC7BK,oBAAqBN,OAASO,SAAUC,EAAON,gBAAgB,IAAAO,EAC7D,IAAIC,EAAS,CAAA,EACTR,EAAUS,QAAQC,kBACpBF,EAASG,KAAKC,MAAMZ,EAAUS,QAAQC,kBAGxC,MAAMG,QAAeC,EAAmBR,EAAOE,GAEzCO,EAAe,GACrB,IAAK,MAAMC,KAAQH,EAAOI,SAASC,QAAS,CAAA,IAAAC,EAAAC,EAC1C,GAAcD,OAAVA,EAACH,EAAKK,cAAIF,EAATA,EAAWG,MAAXH,EAAeI,WAAW,MAAkB,OAAVH,EAACJ,EAAKK,QAALD,EAAWI,KAEjD,MAAM,IAAIC,MAAM,wBAElBV,EAAaW,KAAKV,EAAKK,KAAKG,KAC7B,CAqBD,OAnBAtB,EAAmBJ,OAASE,YAAW2B,kBACrCC,EACE5B,EAAU6B,cAAc,sBACxBhB,GAGF,IAAK,MAAMG,KAAQhB,EAAUC,iBAAiB,oBAAqB,CACjE,MAAM6B,EAAQC,SAASf,EAAKP,QAAQuB,YAAa,IACjDC,EAAiCjB,EAAMH,EAAQiB,EAAOH,EACvD,GAGOpB,MAANM,GAAAN,OAAMA,EAANM,EAAQqB,UAAR3B,EAAiB4B,kBACjBC,EAAc,CACVC,MAAO,mCACPC,2BAA4BzB,EAAOqB,QAAQC,mBAI5CpB,CAAY,EAErBb,iBAAkBJ,eAAsBI,MAAAA,OAAAA,EAAAA,EAAmBqC,IAI3DC,gBAAYC,GAEf,GDxDDC,CADaC,SAASd,cAAc,QACK"}