{"version":3,"file":"8.chunk.js","mappings":"8LAAA,MAEaA,EAAaC,IACxB,MAAMC,EAAQC,SAASC,OAAOF,MAHND,IAAiB,IAAII,OAAO,QAAQJ,aAGxBK,CAAiBL,IAErD,OAAQC,GAAS,IAAI,EAAE,ECEZK,EAAcA,IAAMC,OAAOC,SAASC,IAAIC,OAExCC,EAA+BA,CAACC,EAAQC,IAEnDN,OAAOC,SAASM,KAAKF,EAAQC,GAUlBE,EAAcA,IAAMR,OAAOC,SAASC,IAAIO,OAExCC,EAAiBA,IAAMV,OAAOC,SAASC,IAAIS,UClBlDC,EAAY,wBAgCLC,EAAmBA,EAAGC,aAAYC,aAC7C,MAAMC,GAASC,EAAAA,EAAAA,cAAY,IAAMb,EAAYU,EAAYC,IAAS,CAACD,EAAYC,KAC/EG,EAAAA,EAAAA,YAAU,KACR,MAAMC,EA/BYH,KACpB,IAAIG,EAASxB,SAASyB,eAAeR,GAWrC,OAVe,OAAXO,IACFA,EAASxB,SAAS0B,cAAc,UAChCF,EAAOG,OAAQ,EACfH,EAAOI,QAAU,OACjBJ,EAAOK,GAAKZ,EACZO,EAAOM,IATQ,mFAUfN,EAAOO,KAAO,kBACdP,EAAOQ,iBAAiB,OAAQX,IAG3BG,CAAM,EAmBIS,CAAaZ,GAG5B,MAnBqBG,KACvB,MACMU,EADUlC,SAASmC,qBAAqB,UAClBC,KAAK,GAC5BF,GAAaG,YAAYC,SAASd,IACrCU,GAAaG,YAAYE,aAAaf,EAAQU,EAChD,EAYEM,CAAgBhB,GAET,KACLT,IACAS,EAAOiB,oBAAoB,OAAQpB,GACnCG,EAAOkB,QAAQ,CAChB,GACA,CAACrB,GAAQ,E,iFC3CP,MAAMsB,EAASA,EAAGC,WAAUC,SAAQC,kBAAiBC,UAASC,WACnEC,EAAAA,EAAAA,KAACC,EAAAA,GAAW,CACVJ,gBAAiBA,EACjBE,KAAMA,EACNG,KAAK,QACLJ,QAASA,EAAQH,UAEjBQ,EAAAA,EAAAA,MAACC,EAAAA,EAAG,CACFC,WAAW,SACXC,QAAQ,OACRC,cAAc,SACdC,OAAO,OACPC,eAAe,SACfC,UAAU,SACVC,MAAM,OAAMhB,SAAA,EAEZK,EAAAA,EAAAA,KAACY,EAAAA,EAAU,CACTC,SAAU,GACVC,WAAW,OACXC,GAAI,EACJC,GAAI,GACJC,GAAI,GACJC,QAAQ,YAAWvB,SAElBC,KAEHI,EAAAA,EAAAA,KAACI,EAAAA,EAAG,CAACW,GAAI,EAAEpB,SAAEA,SCzBNwB,EAAUA,EAAGtD,QAAO,MAC/B,MAAM,aAAEuD,IAAiBC,EAAAA,EAAAA,KAEzB,OACErB,EAAAA,EAAAA,KAACN,EAAM,CACLG,iBAAe,EACfE,KAAMlC,EACN+B,OAAQwB,EAAaE,eAAe3B,UAEpCK,EAAAA,EAAAA,KAACuB,EAAAA,EAAgB,CAACC,MAAM,aACjB,E,eChBN,MAAMC,EAAmB,CAAEC,GAAI,SAAUC,GAAI,OCQvCC,EAAUA,EAAG9B,UAAS+B,aAAYC,UAASjE,QAAO,MAC7D,MAAOkC,EAAMgC,IAAWC,EAAAA,EAAAA,UAASnE,IAC3B,aAAEuD,IAAiBC,EAAAA,EAAAA,KACnBY,GAAgB5D,EAAAA,EAAAA,cAAY,KAChC0D,GAAQ,GACRjC,GAAS,GACR,CAACA,IAKJ,OAJAxB,EAAAA,EAAAA,YAAU,KACRyD,EAAQlE,EAAK,GACZ,CAACA,KAGFmC,EAAAA,EAAAA,KAACN,EAAM,CACLE,OAAQwB,EAAac,eACrBnC,KAAMA,EACND,QAASmC,EAActC,UAEvBQ,EAAAA,EAAAA,MAACC,EAAAA,EAAG,CACFE,QAAQ,OACRC,cAAekB,EACfU,IAAK,EACLC,GAAI,EAAEzC,SAAA,EAENK,EAAAA,EAAAA,KAACqC,EAAAA,EAAM,CACLb,MAAM,YACNN,QAAQ,WACRhB,KAAK,QACLoC,QAASR,EAAQnC,SAEhByB,EAAamB,wBAEhBvC,EAAAA,EAAAA,KAACqC,EAAAA,EAAM,CACLb,MAAM,UACNN,QAAQ,YACRhB,KAAK,QACLoC,QAAST,EAAWlC,SAEnByB,EAAaoB,4BAGX,EChDAC,EAAgB,gBAChBC,EAAgB,gBAChBC,EAAiB,iBAIjBC,EAAgC,CAAC,eAAgB,0BACjDC,EAAkC,CAAC,eAAgB,4B,0BCHhE,MAAMC,EAAS,kBAgBFC,EAAmBA,KAC9B,MAAMC,GAAUC,EAAAA,EAAAA,UAGhB,OAFA3E,EAAAA,EAAAA,YAAU,IAAM,IAAM4E,aAAaF,EAAQG,YAEpC9E,EAAAA,EAAAA,cAAY,EAAG+E,UAASC,QAAQ,EAAGC,aACxC,MAAMC,EAnBQC,GAAG5E,KAAI2E,SACnBA,EACK,GAAGA,IAAMT,IAGX,GAAG1F,OAAOqG,SAASX,gCAAgClE,IAAKkE,IAcjDU,CAAUJ,GAEtBJ,EAAQG,QAAUO,YADDC,IAAOL,EAASlG,OAAO2C,KAAKwD,EAAK,UAAYnG,OAAOqG,SAASG,OAAOL,IAC9CF,EAAM,GAC5C,GAAG,E,eC1BD,MCQDQ,EAAgBA,IAAM,WTLqCjH,EAAUkH,EAAAA,cSO9DC,EAAoBA,EAC/BC,6BAA+BC,cAAaC,iBAE5C,MAAMC,EAAa,WAAWD,KAAaD,IACrCG,GAAQ/F,EAAAA,EAAAA,cAAY,KACxBjB,OAAOiH,eAAeC,WAAWH,GACjC/G,OAAOiH,eAAeC,WAAWT,IAAgB,GAChD,CAACM,IACEI,GAAiBlG,EAAAA,EAAAA,cAAY,KACjC,MAAM+E,EAAUhG,OAAOiH,eAAeG,QAAQX,KAE9C,OAAOT,EAAWqB,KAAKC,MAAMtB,QAA8BuB,CAAS,GACnE,IACGC,GAAevG,EAAAA,EAAAA,cAClB+E,GAA4BhG,OAAOiH,eAAeQ,QAAQhB,IAAiBY,KAAKK,UAAU1B,KAC3F,IAGF,OAAO2B,EAAAA,EAAAA,UAAQ,KAAM,CAAGX,QAAOG,iBAAgBK,kBAAiB,CAACR,EAAOG,EAAgBK,GAAc,ECYjG,IAAKI,EAAkB,SAAlBA,GAAkB,OAAlBA,EAAkB,0BAAlBA,EAAkB,0BAAlBA,EAAkB,0CAAlBA,EAAkB,cAAlBA,CAAkB,M,qCC5BvB,MAAMC,EAAcA,EAAGrG,QAC5BxB,OAAO8H,cACL,IAAIC,YAAmCC,EAAAA,GAAuB,CAC5DC,OAAQ,CAAEC,SAAU1G,EAAI2G,SAAU,MAI3BC,EAAiBA,EAAGC,cAC/B,GAAIA,EAAQA,QAAS,CACnB,MAAM,SAAEC,EAAQ,MAAEC,GAAUF,EAAQA,QLlBgB,2BKmBhDC,GAAyDC,GAC3DC,EAAAA,GAAoB,IACf/C,EACH8C,EAAME,KAAKC,GAAkCA,EAAEC,UAASC,KAAK,MAGnE,CACA,OAAQP,EAAQQ,OACd,IL7BqC,aK8BnCL,EAAAA,GAAoB,IAAIhD,ELxBA,mBKyBxB,MACF,IL/BiC,SKgC/BgD,EAAAA,GAAoB,IAAIhD,EL5BH,gBKgCzB,EC5BWsD,EAAaA,EAAGlC,8BAA6BmC,qBACxD,MAAM,YAAElC,EAAW,UAAEC,EAAS,0BAAEkC,GAA8BpC,EACxDqC,EAA0BF,IAAmBG,EAAAA,IAC7C,iBAAEC,IAAqBC,EAAAA,EAAAA,MACvBC,EAAgB1D,IAChB2D,EJfiBC,MACvB,MAAM,SAAEC,IAAaC,EAAAA,EAAAA,kCACdH,GAAUE,EAASE,MAAM,KAEhC,OAAOJ,CAAM,EIWEC,IACRI,EAAOC,IAAYhF,EAAAA,EAAAA,UAAuBS,IAC3C,MAAEwE,EAAK,KAAElH,EAAI,MAAEmH,GCRUC,GAAGnD,kCAClC,MAAM,MAAEI,GAAUL,EAAkB,CAAEC,gCAChCkD,GAAQ7I,EAAAA,EAAAA,cACXZ,IACCK,IACAsG,IACA5G,EAAYC,EAAO,GAErB,CAAC2G,IAGH,OAAOW,EAAAA,EAAAA,UAAQ,KAAM,CAAGkC,MAAO9J,EAAa4C,KAAMnC,EAAasJ,WAAU,CAACA,GAAO,EDHlDC,CAAkB,CAAEnD,iCAC7C,eAAEO,EAAc,aAAEK,GAAiBb,EAAkB,CACzDC,gCAEIoD,GAAsB/I,EAAAA,EAAAA,cAAY,KAClCgI,IACFgB,EAAAA,EAAAA,KACF,GACC,CAAChB,IACEiB,GAAsBjJ,EAAAA,EAAAA,cAAY,KAClCgI,IACFkB,EAAAA,EAAAA,KACF,GACC,CAAClB,IACEmB,GAAgBnJ,EAAAA,EAAAA,cAAY,KAChC,MAAM+E,EAAUmB,IACZnB,GACFqD,EAAc,CAAErD,WAClB,GACC,CAACqD,EAAelC,IACbkD,GAAcpJ,EAAAA,EAAAA,cAAY,KAC9B2I,EAASvE,GACT2E,GAAqB,GACpB,CAACA,IACEM,GAAarJ,EAAAA,EAAAA,cAAY,KAC7BiJ,IACI/C,IACFyC,EAASrE,GAET5C,GACF,GACC,CAACuH,EAAqBvH,EAAMwE,IACzBoD,GAAiBtJ,EAAAA,EAAAA,cACrB,EAAGO,SACD2H,EAAiB,CAAEqB,YAAahJ,GAAK,GAEvC,CAAC2H,IAGGrI,GAAa6G,EAAAA,EAAAA,UAA2B,KAC5C,MAAM8C,KZ7CHjL,EAAUkL,EAAAA,IAIR,IAAI7K,OAAO,eAAe8K,EAAAA,UAAmCC,KAAKpL,EAAUkL,EAAAA,IAA2B,KY2C5G,MAAO,CACLG,IAAKhE,EACLyC,SAEAwB,WAAYhE,EACZiE,UAAW,CACTC,sBAAuBP,EACvBQ,wBAAyBR,EACzBS,sBAAuBT,GAEzB/H,QAAS2H,EACTc,YAAcC,IACRC,MAAMC,QAAQF,GAChBA,EAAKG,QAAQ1D,GAEbA,EAAYuD,EACd,EAEFI,iBAAkBjB,EAClBkB,eAAgBA,CAACzF,EAAS0F,KACpBA,IAAW9D,EAAmB+D,aAAeD,IAAW9D,EAAmBgE,sBAC7E1B,IACA1C,EAAaxB,GACbqD,EAAc,CAAErD,UAASE,QAAQ,IACnC,EAEF2F,WAAYA,KACV,MAAM1F,GAAM2F,EAAAA,EAAAA,KACZ3F,EAAI4F,SAAW,mBACf5F,EAAI6F,aAAaC,OAAOC,EAAAA,IACxBlM,OAAOqG,SAASG,OAAOL,EAAI,EAE7BgG,kBAAmBA,CAACC,EAAWC,KAC7B,GAAIrD,EACF,OAEF,MAAMhD,EAAUqG,EAAS,GACrBrG,IACFkE,IACA1C,EAAaxB,GACbqD,EAAc,CAAErD,UAASC,MAAO,MAClC,EAEFqG,gBAAiBlE,EACjBmE,gBAAiBA,KACXvD,IAGJa,IACAD,EAAStE,GAAc,EAEzBkH,sBAAuBjC,EACxB,GACA,CACDV,EACAhD,EACAwD,EACAf,EACAxC,EACAkC,EACAK,EACAa,EACA1C,EACA+C,IAEIxJ,GAASE,EAAAA,EAAAA,cAAY,KACrB8H,GACFuB,GACF,GACC,CAACA,EAAYvB,IACV0D,GAAcxL,EAAAA,EAAAA,cAAY,KAC9B2I,EAASvE,GACTyE,EAAMhJ,GACNwJ,GAAY,GACX,CAACA,EAAYxJ,EAAYgJ,IAE5B,OAAOnC,EAAAA,EAAAA,UACL,KAAM,CACJkC,MAAOQ,EACPD,gBACAtJ,aACAC,SACA4B,KAAM2H,EACNR,MAAO2C,EACP9C,WAEF,CAACS,EAAeC,EAAaC,EAAYmC,EAAa3L,EAAYC,EAAQ4I,GAC3E,EE5IU1J,EAAWyM,IACtB,MAAM,MAAE7C,EAAK,cAAEO,EAAa,WAAEtJ,EAAU,OAAEC,EAAM,KAAE4B,EAAI,MAAEmH,EAAK,MAAEH,GAAUb,EAAW4D,GAIpF,OAHA7L,EAAiB,CAAEC,aAAYC,YAC/B4L,EAAAA,EAAAA,GAAe,CAAEC,KAAMC,EAAAA,GAAqB3H,QAASvC,KAGnDI,EAAAA,EAAAA,MAAA+J,EAAAA,SAAA,CAAAvK,SAAA,EACEK,EAAAA,EAAAA,KAACmB,EAAO,CAACtD,KAAMkJ,IAAUrE,KACzB1C,EAAAA,EAAAA,KAAC4B,EAAO,CACN/D,KAAMkJ,IAAUpE,EAChB7C,QAASmH,EACTpF,WAAY2F,EACZ1F,QAASoF,MAEV,C","sources":["webpack://orinovageskincareadvisorapp/../../../src/utils/cookies.ts","webpack://orinovageskincareadvisorapp/../../../src/utils/revieve.ts","webpack://orinovageskincareadvisorapp/../../../src/hooks/useRevieveScript.ts","webpack://orinovageskincareadvisorapp/../../../../src/components/Dialog/Dialog.tsx","webpack://orinovageskincareadvisorapp/../../../../src/components/Loading/Loading.tsx","webpack://orinovageskincareadvisorapp/../../../../src/components/Restore/styles.ts","webpack://orinovageskincareadvisorapp/../../../../src/components/Restore/Restore.tsx","webpack://orinovageskincareadvisorapp/../../../../src/components/Revieve/constants.ts","webpack://orinovageskincareadvisorapp/../../../src/hooks/useRedirectToPdp.ts","webpack://orinovageskincareadvisorapp/../../../src/hooks/useLocale.ts","webpack://orinovageskincareadvisorapp/../../../src/hooks/useSessionStorage.ts","webpack://orinovageskincareadvisorapp/../../../src/models/Revieve.ts","webpack://orinovageskincareadvisorapp/../../../../src/components/Revieve/utils.ts","webpack://orinovageskincareadvisorapp/../../../../src/components/Revieve/hooks.ts","webpack://orinovageskincareadvisorapp/../../../src/hooks/useRevieveAdvisor.ts","webpack://orinovageskincareadvisorapp/../../../../src/components/Revieve/Revieve.tsx"],"sourcesContent":["const createNameRegExp = (name: string) => new RegExp(`(^| )${name}=([^;]+)`);\n\nexport const getCookie = (name: string) => {\n const match = document.cookie.match(createNameRegExp(name));\n\n return (match ?? [])[2];\n};\n","/* istanbul ignore file */\nimport { ONE_TRUST_GROUP_PERFORMANCE, OPTANON_CONSENT_COOKIE, REVIEVE_USER_ID_COOKIE } from '../constants';\nimport type { Revieve, RevieveUserId } from '../models';\nimport { getCookie } from './cookies';\n\nexport const getRevieveUserId = (): RevieveUserId | undefined => getCookie(REVIEVE_USER_ID_COOKIE);\n\nexport const hideRevieve = () => window.Revieve?.API.hide();\n\nexport const initRevieve: Revieve['Init'] = (config, callback) =>\n // eslint-disable-next-line new-cap -- 3rd party naming\n window.Revieve?.Init(config, callback);\n\nexport const isAnalyticsConsentGranted = (): boolean => {\n if (!getCookie(OPTANON_CONSENT_COOKIE)) {\n return true;\n }\n\n return new RegExp(`groups=[^;]*${ONE_TRUST_GROUP_PERFORMANCE}%3A1`).test(getCookie(OPTANON_CONSENT_COOKIE) ?? '');\n};\n\nexport const showRevieve = () => window.Revieve?.API.show();\n\nexport const unmountRevieve = () => window.Revieve?.API.unmount();\n","import { useCallback, useEffect } from 'react';\n\nimport type { RevieveInitConfig } from '../models';\nimport { initRevieve, unmountRevieve } from '../utils';\n\nconst SCRIPT_ID = 'revieve-plugin-loader';\n\nconst SCRIPT_URL = 'https://d38knilzwtuys1.cloudfront.net/revieve-plugin-v4/revieve-plugin-loader.js';\n\nconst getScriptTag = (onLoad: () => void) => {\n let script = document.getElementById(SCRIPT_ID) as HTMLScriptElement | null;\n if (script === null) {\n script = document.createElement('script');\n script.async = true;\n script.charset = 'utf8';\n script.id = SCRIPT_ID;\n script.src = SCRIPT_URL;\n script.type = 'text/javascript';\n script.addEventListener('load', onLoad);\n }\n\n return script;\n};\n\nconst insertScriptTag = (script: HTMLScriptElement) => {\n const scripts = document.getElementsByTagName('script');\n const firstScript = scripts.item(0);\n if (!firstScript?.parentNode?.contains(script)) {\n firstScript?.parentNode?.insertBefore(script, firstScript);\n }\n};\n\nexport interface UseRevieveScriptProps {\n initConfig: RevieveInitConfig;\n onInit?: () => void;\n}\n\nexport const useRevieveScript = ({ initConfig, onInit }: UseRevieveScriptProps) => {\n const onLoad = useCallback(() => initRevieve(initConfig, onInit), [initConfig, onInit]);\n useEffect(() => {\n const script = getScriptTag(onLoad);\n insertScriptTag(script);\n\n return () => {\n unmountRevieve();\n script.removeEventListener('load', onLoad);\n script.remove();\n };\n }, [onLoad]);\n};\n","import { Dialog as OriUIDialog } from '@ori-ui/components';\nimport { Box, Typography } from '@ori-ui/mui';\n\nimport type { DialogProps } from './types';\n\nexport const Dialog = ({ children, header, hideCloseButton, onClose, open }: DialogProps) => (\n \n \n \n {header}\n \n {children}\n \n \n);\n","import { CircularProgress } from '@ori-ui/mui';\n\nimport { useTranslations } from '../../hooks';\nimport { Dialog } from '../Dialog';\nimport type { LoadingProps } from './types';\n\nexport const Loading = ({ show = false }: LoadingProps) => {\n const { translations } = useTranslations();\n\n return (\n \n \n \n );\n};\n","export const boxFlexDirection = { xs: 'column', sm: 'row' } as const;\n","import { Box, Button } from '@ori-ui/mui';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { useTranslations } from '../../hooks';\nimport { Dialog } from '../Dialog';\nimport { boxFlexDirection } from './styles';\nimport type { RestoreProps } from './types';\n\nexport const Restore = ({ onClose, onContinue, onReset, show = false }: RestoreProps) => {\n const [open, setOpen] = useState(show);\n const { translations } = useTranslations();\n const handleOnClose = useCallback(() => {\n setOpen(false);\n onClose();\n }, [onClose]);\n useEffect(() => {\n setOpen(show);\n }, [show]);\n\n return (\n \n \n \n {translations.GetNewRecommendation}\n \n \n {translations.SeeRecommendedProduct}\n \n \n \n );\n};\n","export const STATE_DEFAULT = 'state:default';\nexport const STATE_LOADING = 'state:loading';\nexport const STATE_RESTORED = 'state:restored';\nexport const TRACKING_TITLE_CONDITIONS = 'Conditions';\nexport const TRACKING_TITLE_SELFIE = 'Selfie';\nexport const TRACKING_CATEGORY_PRODUCT_RECOMMENDATION = 'Product Recommendation';\nexport const USER_ACTION_DIAGNOSIS_STARTED = ['skin_advisor', 'Skin diagnosis started'];\nexport const USER_ACTION_DIAGNOSIS_COMPLETED = ['skin_advisor', 'Skin diagnosis completed'];\nexport const WITH_SELFIE = 'With selfie';\nexport const WITHOUT_SELFIE = 'Without selfie';\n","import { useCallback, useEffect, useRef } from 'react';\n\nimport type { RevieveProduct } from '../models';\n\nconst origin = '&origin=revieve';\n\nconst getPdpUrl = ({ id, url }: RevieveProduct) => {\n if (url) {\n return `${url}${origin}`;\n }\n\n return `${window.location.origin}/products/product?code=${id}${origin}`;\n};\n\nexport interface RedirectToPdpParams {\n product: RevieveProduct;\n delay?: number;\n newTab?: boolean;\n}\n\nexport const useRedirectToPdp = () => {\n const timeout = useRef();\n useEffect(() => () => clearTimeout(timeout.current));\n\n return useCallback(({ product, delay = 0, newTab }: RedirectToPdpParams) => {\n const url = getPdpUrl(product);\n const redirect = () => (newTab ? window.open(url, '_blank') : window.location.assign(url));\n timeout.current = setTimeout(redirect, delay);\n }, []);\n};\n","import { useTranslationsWithNamespaces } from '@ori/i18n';\n\nexport const useLocale = () => {\n const { language } = useTranslationsWithNamespaces();\n const [locale] = language.split('-');\n\n return locale;\n};\n","import type { StaticApplicationsAdvisorNovAgeSkincareConfigurationDto } from '@ori/static-api-client-react';\nimport { useCallback, useMemo } from 'react';\n\nimport type { RevieveProduct } from '../models';\nimport { getRevieveUserId } from '../utils';\n\nexport interface UseSessionStorageProps {\n novageSkincareConfiguration: StaticApplicationsAdvisorNovAgeSkincareConfigurationDto;\n}\n\nconst getProductKey = () => `persist:${getRevieveUserId()}:product`;\n\nexport const useSessionStorage = ({\n novageSkincareConfiguration: { environment, partnerId },\n}: UseSessionStorageProps) => {\n const advisorKey = `persist:${partnerId}-${environment}`;\n const clear = useCallback(() => {\n window.sessionStorage.removeItem(advisorKey);\n window.sessionStorage.removeItem(getProductKey());\n }, [advisorKey]);\n const restoreProduct = useCallback(() => {\n const product = window.sessionStorage.getItem(getProductKey());\n\n return product ? (JSON.parse(product) as RevieveProduct) : undefined;\n }, []);\n const storeProduct = useCallback(\n (product: RevieveProduct) => window.sessionStorage.setItem(getProductKey(), JSON.stringify(product)),\n [],\n );\n\n return useMemo(() => ({ clear, restoreProduct, storeProduct }), [clear, restoreProduct, storeProduct]);\n};\n","export interface RevieveProduct {\n bundle?: string;\n category: string;\n description: string;\n id: string;\n image: string;\n manufacturer: string;\n name: string;\n // eslint-disable-next-line @typescript-eslint/naming-convention -- 3rd party naming\n parent_id: string;\n price: number;\n url: string;\n}\nexport interface RevieveTrackingViewItemList {\n category?: string;\n items?: RevieveTrackingProductItem[];\n}\nexport interface RevieveTrackingProductItem {\n /* eslint-disable @typescript-eslint/naming-convention -- 3rd party naming */\n item_brand?: string;\n item_category?: string;\n item_category2?: string;\n item_category3?: string;\n item_id: string;\n item_name?: string;\n item_variant?: string;\n /* eslint-enable @typescript-eslint/naming-convention */\n price?: number;\n}\nexport interface RevieveTrackingData {\n path?: string;\n payload?: RevieveTrackingViewItemList;\n title?: string;\n}\nexport interface RevieveTrackingPayload {\n partnerId?: string;\n payload: RevieveTrackingData;\n type?: string;\n}\n\nexport type RevieveUserId = string;\n\nexport enum ClickProductSource {\n /** If source is `productCard` then it means that user clicked in the areas of the product card in the grid recommended product page. The area is the same as the area that by default will open the expanded product card(product detail modal). */\n productCard = 'productCard',\n /** If source is productList then it means that user clicked on a button in the product card that redirects user to another url(moreInfo action). */\n productList = 'productList',\n /** If source is `expandedProductCard` then it means that user clicked on a button in the expanded product card(product detail modal) that redirects user to another url(moreInfo action in modal). */\n expandedProductCard = 'expandedProductCard',\n /** `other` is the default source and any callbacks from other places will have it as the source. */\n other = 'other',\n}\n\nexport interface RevieveInitConfig {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- 3rd party naming\n partner_id: string;\n locale?: string;\n env: string;\n analytics?: {\n disableUsageAnalytics?: boolean;\n disableProductAnalytics?: boolean;\n disableErrorReporting?: boolean;\n };\n onAddToCart?: (data: RevieveProduct | RevieveProduct[]) => void;\n onAddToFavorites?: (product: RevieveProduct) => void;\n onCheckout?: () => void;\n onClickProduct?: (product: RevieveProduct, source: ClickProductSource) => void;\n onClose?: () => void;\n onDisplayProducts?: (historyId: string, products: RevieveProduct[], sessionId: string) => void;\n onFetchProducts?: () => void;\n onRemoveFromFavorites?: (product: RevieveProduct) => void;\n onTrackingEvent?: (payload: RevieveTrackingPayload) => void;\n}\n\nexport interface Revieve {\n Init: (config: RevieveInitConfig, callback?: () => void) => void;\n API: {\n show: () => void;\n hide: () => void;\n unmount: () => void;\n };\n}\n","import * as AddToBasketEvent from '@ori-events/add-to-basket';\nimport * as UserAction from '@ori-events/user-action';\n\nimport type { RevieveProduct, RevieveTrackingPayload, RevieveTrackingProductItem } from '../../models';\nimport {\n TRACKING_CATEGORY_PRODUCT_RECOMMENDATION,\n TRACKING_TITLE_CONDITIONS,\n TRACKING_TITLE_SELFIE,\n USER_ACTION_DIAGNOSIS_COMPLETED,\n USER_ACTION_DIAGNOSIS_STARTED,\n WITHOUT_SELFIE,\n WITH_SELFIE,\n} from './constants';\n\nexport const addToBasket = ({ id }: RevieveProduct) =>\n window.dispatchEvent(\n new CustomEvent(AddToBasketEvent.Name, {\n detail: { itemCode: id, quantity: 1 },\n }),\n );\n\nexport const sendUserEvents = ({ payload }: RevieveTrackingPayload) => {\n if (payload.payload) {\n const { category, items } = payload.payload;\n if (category === TRACKING_CATEGORY_PRODUCT_RECOMMENDATION && items) {\n UserAction.dispatch([\n ...USER_ACTION_DIAGNOSIS_COMPLETED,\n items.map((p: RevieveTrackingProductItem) => p.item_id).join(','),\n ]);\n }\n }\n switch (payload.title) {\n case TRACKING_TITLE_CONDITIONS:\n UserAction.dispatch([...USER_ACTION_DIAGNOSIS_STARTED, WITHOUT_SELFIE]);\n break;\n case TRACKING_TITLE_SELFIE:\n UserAction.dispatch([...USER_ACTION_DIAGNOSIS_STARTED, WITH_SELFIE]);\n break;\n default:\n break;\n }\n};\n","import { useFavorites } from '@ori/favorites-heart';\nimport { getCurrentUrl } from '@ori/presentation-utils';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport { OPEN_QUERY_PARAM, OPEN_QUERY_PARAM_ALWAYS } from '../../constants';\nimport { useLocale, useRedirectToPdp, useRevieveAdvisor, useSessionStorage } from '../../hooks';\nimport { ClickProductSource, type RevieveProduct, type RevieveInitConfig } from '../../models';\nimport { isAnalyticsConsentGranted, removeOpenQueryParam, setOpenQueryParam } from '../../utils';\nimport { STATE_DEFAULT, STATE_LOADING, STATE_RESTORED } from './constants';\nimport type { RevieveProps, RevieveState } from './types';\nimport { addToBasket, sendUserEvents } from './utils';\n\nexport const useRevieve = ({ novageSkincareConfiguration, openQueryParam }: RevieveProps) => {\n const { environment, partnerId, recommendationPageEnabled } = novageSkincareConfiguration;\n const canChangeOpenQueryParam = openQueryParam !== OPEN_QUERY_PARAM_ALWAYS;\n const { onFavoritesClick } = useFavorites();\n const redirectToPdp = useRedirectToPdp();\n const locale = useLocale();\n const [state, setState] = useState(STATE_DEFAULT);\n const { close, open, reset } = useRevieveAdvisor({ novageSkincareConfiguration });\n const { restoreProduct, storeProduct } = useSessionStorage({\n novageSkincareConfiguration,\n });\n const clearOpenQueryParam = useCallback(() => {\n if (canChangeOpenQueryParam) {\n removeOpenQueryParam();\n }\n }, [canChangeOpenQueryParam]);\n const setupOpenQueryParam = useCallback(() => {\n if (canChangeOpenQueryParam) {\n setOpenQueryParam();\n }\n }, [canChangeOpenQueryParam]);\n const continueToPdp = useCallback(() => {\n const product = restoreProduct();\n if (product) {\n redirectToPdp({ product });\n }\n }, [redirectToPdp, restoreProduct]);\n const handleClose = useCallback(() => {\n setState(STATE_DEFAULT);\n clearOpenQueryParam();\n }, [clearOpenQueryParam]);\n const handleOpen = useCallback(() => {\n setupOpenQueryParam();\n if (restoreProduct()) {\n setState(STATE_RESTORED);\n } else {\n open();\n }\n }, [setupOpenQueryParam, open, restoreProduct]);\n const toggleFavorite = useCallback(\n ({ id }: RevieveProduct) => {\n onFavoritesClick({ productCode: id });\n },\n [onFavoritesClick],\n );\n\n const initConfig = useMemo(() => {\n const disableAnalytics = !isAnalyticsConsentGranted();\n\n return {\n env: environment,\n locale,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- 3rd party naming\n partner_id: partnerId,\n analytics: {\n disableUsageAnalytics: disableAnalytics,\n disableProductAnalytics: disableAnalytics,\n disableErrorReporting: disableAnalytics,\n },\n onClose: handleClose,\n onAddToCart: (data) => {\n if (Array.isArray(data)) {\n data.forEach(addToBasket);\n } else {\n addToBasket(data);\n }\n },\n onAddToFavorites: toggleFavorite,\n onClickProduct: (product, source) => {\n if (source === ClickProductSource.productList || source === ClickProductSource.expandedProductCard) {\n setupOpenQueryParam();\n storeProduct(product);\n redirectToPdp({ product, newTab: true });\n }\n },\n onCheckout: () => {\n const url = getCurrentUrl();\n url.pathname = '/shopping/basket';\n url.searchParams.delete(OPEN_QUERY_PARAM);\n window.location.assign(url);\n },\n onDisplayProducts: (historyId, products) => {\n if (recommendationPageEnabled) {\n return;\n }\n const product = products[0];\n if (product) {\n setupOpenQueryParam();\n storeProduct(product);\n redirectToPdp({ product, delay: 2000 });\n }\n },\n onTrackingEvent: sendUserEvents,\n onFetchProducts: () => {\n if (recommendationPageEnabled) {\n return;\n }\n close();\n setState(STATE_LOADING);\n },\n onRemoveFromFavorites: toggleFavorite,\n };\n }, [\n close,\n environment,\n handleClose,\n locale,\n partnerId,\n recommendationPageEnabled,\n redirectToPdp,\n setupOpenQueryParam,\n storeProduct,\n toggleFavorite,\n ]);\n const onInit = useCallback(() => {\n if (openQueryParam) {\n handleOpen();\n }\n }, [handleOpen, openQueryParam]);\n const handleReset = useCallback(() => {\n setState(STATE_DEFAULT);\n reset(initConfig);\n handleOpen();\n }, [handleOpen, initConfig, reset]);\n\n return useMemo(\n () => ({\n close: handleClose,\n continueToPdp,\n initConfig,\n onInit,\n open: handleOpen,\n reset: handleReset,\n state,\n }),\n [continueToPdp, handleClose, handleOpen, handleReset, initConfig, onInit, state],\n );\n};\n","import type { StaticApplicationsAdvisorNovAgeSkincareConfigurationDto } from '@ori/static-api-client-react';\nimport { useCallback, useMemo } from 'react';\n\nimport type { RevieveInitConfig } from '../models';\nimport { hideRevieve, initRevieve, showRevieve, unmountRevieve } from '../utils';\nimport { useSessionStorage } from './useSessionStorage';\n\nexport interface UseRevieveAdvisorProps {\n novageSkincareConfiguration: StaticApplicationsAdvisorNovAgeSkincareConfigurationDto;\n}\n\nexport const useRevieveAdvisor = ({ novageSkincareConfiguration }: UseRevieveAdvisorProps) => {\n const { clear } = useSessionStorage({ novageSkincareConfiguration });\n const reset = useCallback(\n (config: RevieveInitConfig) => {\n unmountRevieve();\n clear();\n initRevieve(config);\n },\n [clear],\n );\n\n return useMemo(() => ({ close: hideRevieve, open: showRevieve, reset }), [reset]);\n};\n","import { OPEN_HREF_ATTRIBUTE } from '../../constants';\nimport { useOnHrefClick, useRevieveScript } from '../../hooks';\nimport { Loading } from '../Loading';\nimport { Restore } from '../Restore';\nimport { STATE_LOADING, STATE_RESTORED } from './constants';\nimport { useRevieve } from './hooks';\nimport type { RevieveProps } from './types';\n\nexport const Revieve = (props: RevieveProps) => {\n const { close, continueToPdp, initConfig, onInit, open, reset, state } = useRevieve(props);\n useRevieveScript({ initConfig, onInit });\n useOnHrefClick({ href: OPEN_HREF_ATTRIBUTE, onClick: open });\n\n return (\n <>\n \n \n \n );\n};\n"],"names":["getCookie","name","match","document","cookie","RegExp","createNameRegExp","hideRevieve","window","Revieve","API","hide","initRevieve","config","callback","Init","showRevieve","show","unmountRevieve","unmount","SCRIPT_ID","useRevieveScript","initConfig","onInit","onLoad","useCallback","useEffect","script","getElementById","createElement","async","charset","id","src","type","addEventListener","getScriptTag","firstScript","getElementsByTagName","item","parentNode","contains","insertBefore","insertScriptTag","removeEventListener","remove","Dialog","children","header","hideCloseButton","onClose","open","_jsx","OriUIDialog","size","_jsxs","Box","alignItems","display","flexDirection","height","justifyContent","textAlign","width","Typography","fontSize","fontWeight","pb","pt","px","variant","Loading","translations","useTranslations","FindingProduct","CircularProgress","color","boxFlexDirection","xs","sm","Restore","onContinue","onReset","setOpen","useState","handleOnClose","Recommendation","gap","mx","Button","onClick","GetNewRecommendation","SeeRecommendedProduct","STATE_DEFAULT","STATE_LOADING","STATE_RESTORED","USER_ACTION_DIAGNOSIS_STARTED","USER_ACTION_DIAGNOSIS_COMPLETED","origin","useRedirectToPdp","timeout","useRef","clearTimeout","current","product","delay","newTab","url","getPdpUrl","location","setTimeout","redirect","assign","getProductKey","REVIEVE_USER_ID_COOKIE","useSessionStorage","novageSkincareConfiguration","environment","partnerId","advisorKey","clear","sessionStorage","removeItem","restoreProduct","getItem","JSON","parse","undefined","storeProduct","setItem","stringify","useMemo","ClickProductSource","addToBasket","dispatchEvent","CustomEvent","AddToBasketEvent","detail","itemCode","quantity","sendUserEvents","payload","category","items","UserAction","map","p","item_id","join","title","useRevieve","openQueryParam","recommendationPageEnabled","canChangeOpenQueryParam","OPEN_QUERY_PARAM_ALWAYS","onFavoritesClick","useFavorites","redirectToPdp","locale","useLocale","language","useTranslationsWithNamespaces","split","state","setState","close","reset","useRevieveAdvisor","clearOpenQueryParam","removeOpenQueryParam","setupOpenQueryParam","setOpenQueryParam","continueToPdp","handleClose","handleOpen","toggleFavorite","productCode","disableAnalytics","OPTANON_CONSENT_COOKIE","ONE_TRUST_GROUP_PERFORMANCE","test","env","partner_id","analytics","disableUsageAnalytics","disableProductAnalytics","disableErrorReporting","onAddToCart","data","Array","isArray","forEach","onAddToFavorites","onClickProduct","source","productList","expandedProductCard","onCheckout","getCurrentUrl","pathname","searchParams","delete","OPEN_QUERY_PARAM","onDisplayProducts","historyId","products","onTrackingEvent","onFetchProducts","onRemoveFromFavorites","handleReset","props","useOnHrefClick","href","OPEN_HREF_ATTRIBUTE","_Fragment"],"sourceRoot":""}