{"version":3,"sources":["webpack:///./presentation/components/Shortcode/Alt.tsx","webpack:///./presentation/components/Shortcode/Bold.tsx","webpack:///./presentation/components/Shortcode/Italic.tsx","webpack:///./presentation/components/Shortcode/Link.tsx","webpack:///./presentation/components/Shortcode/Text.tsx","webpack:///src/presentation/components/Shortcode/Tooltip.tsx","webpack:///./presentation/components/Shortcode/PendingShortcode.tsx","webpack:///./presentation/components/Shortcode/Shortcode.tsx","webpack:///./presentation/components/Shortcode/index.ts","webpack:///./domain/constants/alignment.ts","webpack:///./presentation/components/common/CallToAction.tsx","webpack:///./domain/constants/callToAction.ts","webpack:///./application/actions/reactive-knowledge/useShowToast.ts","webpack:///./infrastructure/basket/createBasket.ts","webpack:///./infrastructure/basket/addToBasket.ts","webpack:///./application/actions/cta/useAddProductToBasket.ts","webpack:///./application/actions/cta/usePostActionNavigate.ts","webpack:///./application/actions/cta/sendProductClicked.ts","webpack:///./application/actions/cta/sendProductOnAddToBasket.ts","webpack:///./application/actions/cta/sendPromotion.ts","webpack:///./presentation/hocs/callToActionHandlers/handleAnalytics.ts","webpack:///./presentation/hocs/callToActionHandlers/handleAddToBasketClick.ts","webpack:///./presentation/hocs/callToActionHandlers/handleConfigureClick.ts","webpack:///./presentation/hocs/callToAction.tsx","webpack:///./presentation/hocs/callToActionHandlers/utils.ts","webpack:///./presentation/hocs/callToActionHandlers/handlePlayVideoClick.ts","webpack:///./presentation/hocs/callToActionHandlers/handleSetVisibilityClick.ts","webpack:///src/presentation/components/ribbons/info/Info.stylesheet.ts","webpack:///./presentation/components/ribbons/info/Info.tsx","webpack:///./presentation/components/ribbons/info/index.ts"],"names":["getColor","theme","against","Against","LIGHT","NEUTRAL","palette","primary","DARK","tertiary","Alt","RecursiveShortcode","elements","rest","useTheme","style","color","displayName","Bold","fontWeight","fontStyle","Link","contentType","attributes","isExternalRoute","route","useIsExternalRoute","goto","href","id","analyticskey","size","TextButtonSize","INHERIT","rel","target","newTab","formatText","text","newline","values","formattedText","replace","_","match","replaceValues","split","join","escapeShortCodes","string","reduce","prev","cur","i","nl2br","Text","ReactTooltip","lazy","TooltipShortcode","isMinLg","useBreakpoints","eventToggle","undefined","padding","cssTheme","CallToAction","fallback","tagName","useDefaultStyles","content","maxWidth","randomWidth","Math","floor","random","PendingShortcode","code","display","width","lines","Glyph","Sup","List","OrderedList","ListItem","TickListItem","ProductPrice","PhoneNumber","map","element","index","Shortcode","JSON","stringify","props","String","getAgainst","type","name","glyph","Italic","Tooltip","ShortcodeWrapper","Alignment","PureCallToAction","kind","label","addingStatus","handleClick","behavior","status","Status","PENDING","SUCCESS","FAILURE","DEFAULT","getStatus","isExternal","url","openNewWindowProps","buttonProps","omit","onClick","alt","callToAction","Behavior","useShowToast","add","useAdd","intl","useIntl","message","KnowledgeType","SMIRK","formatMessage","createBasket","async","driver","makeDriver","response","method","Method","POST","headers","brandId","basketId","body","setCookie","makeAddToBasket","items","localeCode","getLanguageCookie","cookie","getCookie","cookieDecoded","decode","e","getBaskedId","data","useAddProductToBasket","postActionNavigate","handleAnalytics","useBrandId","showToast","refetchBasket","useRefreshBasketCount","useMutation","onError","ERK","onSuccess","usePostActionNavigate","postAction","history","useHistory","isInternal","isInternalUrl","orderUrl","useOrderProcessUrl","window","useWindow","navigateUrl","push","location","sendProductClicked","productId","list","getProductData","locale","skuId","then","product","price","productSelectors","getPrice","includeTax","ecommerce","sendProductOnAddToBasket","currency","category","categoryName","dispatchFBEvent","content_ids","content_name","value","quantity","content_type","sendPromotion","promotion","ec","ecomm","promoNameToPromoId","ribbonId","useCurrency","ribbon","useRibbon","createRibbonName","ctaType","analytics","statusMap","idle","loading","success","error","VideoModal","Component","externalRoutes","useExternalRoutes","ctaId","linkAttribution","actionType","setAddingStatus","useState","isVideoModalOpen","setIsVideoModalOpen","toggleVideoModal","isOpen","ADD_TO_BASKET","mutateAsync","addToBasket","useEffect","timeoutRef","setTimeout","clearTimeout","defaultSkuId","term","pricingTier","paymentInterval","handleAddToBasketClick","CONFIGURE","tier","formatPricingTier","query","URLSearchParams","append","q","toString","handleConfigureClick","PLAY_VIDEO","handlePlayVideoClick","SET_VISIBILITY","setVisibility","useVisibilitySetsAction","visibilitySet","handleSetVisibilityClick","NAVIGATION","videoId","provider","closeModal","root","cta","ctas","Info","title","subtitle","colorway","hBaseline","layout","hasTitle","isNilOrEmpty","hasSubtitle","hasCta","isMinSm","classNames","alignment","cx","getClassNames","findResponsiveItem","alignmentMobile","STARTING","alignmentTablet","Ribbon","Type","INFO","className","depth","component","block","concat","errorBoundary"],"mappings":"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","file":"pex-static/164/36.a6490710593b439d5d0e.chunk.js","sourcesContent":["import React from 'react';\nimport { Theme, useTheme, Colorway as Against } from '@uds/theme-utils';\n\nimport { RecursiveShortcodeProps } from './Shortcode';\n\nconst getColor = (theme: Theme, against: Against | undefined) => {\n switch (against) {\n case Against.LIGHT:\n return theme.palette.primary;\n case Against.NEUTRAL:\n return theme.palette.primary;\n case Against.DARK:\n return theme.palette.tertiary;\n default:\n return 'inherit';\n }\n};\nconst Alt = ({ RecursiveShortcode, elements, against, ...rest }: RecursiveShortcodeProps) => {\n const { theme } = useTheme();\n return (\n \n {RecursiveShortcode ? : null}\n \n );\n};\n\nAlt.displayName = 'Alt';\n\nexport default Alt;\n","import React from 'react';\n\nimport { RecursiveShortcodeProps } from './Shortcode';\n\nconst Bold = ({ elements, RecursiveShortcode, ...rest }: RecursiveShortcodeProps) => (\n \n {RecursiveShortcode ? : null}\n \n);\n\nBold.displayName = 'Bold';\n\nexport default Bold;\n","import React from 'react';\n\nimport { RecursiveShortcodeProps } from './Shortcode';\n\nconst Bold = ({ elements, RecursiveShortcode, ...rest }: RecursiveShortcodeProps) => (\n \n {RecursiveShortcode ? : null}\n \n);\n\nBold.displayName = 'Bold';\n\nexport default Bold;\n","import React from 'react';\nimport { ReactRouterTextButton } from '@uds/react-router-adapter';\nimport { Size as TextButtonSize } from '@uds/text-button';\nimport { useIsExternalRoute } from 'domain/selectors/common';\n\nimport { RecursiveShortcodeProps } from './Shortcode';\n\nconst Link = ({ RecursiveShortcode, elements, contentType, attributes, against, ...rest }: RecursiveShortcodeProps) => {\n const [isExternalRoute, route] = useIsExternalRoute(attributes?.goto);\n return (\n \n {/* @ts-ignore: error when upgrading to @ux/config */}\n \n \n );\n};\n\nLink.displayName = 'Link';\n\nexport default Link;\n","import React, { Fragment } from 'react';\n\nconst escapeShortCodes = (text: string) => {\n if (typeof text !== 'string') {\n return null;\n }\n const replaceA = (text ?? '').split('[!').join('[');\n const replaceB = replaceA.split('!/]').join('/]');\n const replaceC = replaceB.split('[/!').join('[/');\n return replaceC;\n // using split/join because for some reason replaceAll fails for backstop\n // tests but not for backstop storybook?\n // if anyone can tell me why, I'd appreciate it.\n // return (text ?? '').replaceAll('[!', '[').replaceAll('!/]', '/]')\n // .replaceAll('[/!', '[/');\n};\n\nconst replaceValues = (text: string, values?: Record) => {\n if (values == null) {\n return text;\n }\n return text.replace(/{(?[^{]*)}/g, (_, match) => {\n return values[match];\n });\n};\n\nconst nl2br = (string: string) =>\n (string ?? '')\n .split('\\n')\n // @ts-ignore typescript cant figure typing out\n // eslint-disable-next-line react/no-array-index-key\n .reduce((prev, cur, i) => [prev, , cur]);\n\nconst formatText = (text: string, newline: boolean | Element | undefined, values?: Record) => {\n const formattedText = replaceValues(escapeShortCodes(text) ?? '', values);\n if (newline === false) {\n return formattedText;\n }\n return nl2br(formattedText);\n};\n\ninterface OuterProps {\n text?: string | undefined;\n nl2br?: boolean | Element;\n values?: Record;\n}\nconst Text = ({ text, nl2br, values }: OuterProps) => {formatText(text ?? '', nl2br, values)};\n\nText.displayName = 'Text';\n\nexport default Text;\n","import React, { lazy, Suspense } from 'react';\nimport TextButton, { Size as TextButtonSize } from '@uds/text-button';\nimport { cssTheme } from '@uds/theme-utils';\nimport { useBreakpoints } from '@uds/responsive';\n\nimport { RecursiveShortcodeProps } from './Shortcode';\n\n/*\n React-Tooltip is a heavy dependency therefore we asynchronously load it in\n and gracefully decorate the functionality in once it has loaded\n*/\nconst ReactTooltip = lazy(\n () =>\n import(\n /* webpackChunkName: \"react-tooltip-lite\" */\n 'react-tooltip-lite'\n ),\n);\n\nconst TooltipShortcode = ({ RecursiveShortcode, attributes, elements }: RecursiveShortcodeProps) => {\n const { isMinLg } = useBreakpoints();\n const eventToggle = isMinLg ? undefined : 'onClick';\n const padding = cssTheme.gu2;\n const CallToAction = {attributes?.label};\n\n return (\n \n {/* @ts-ignore children doesnt exist */}\n \n {/* @ts-ignore: error when upgrading to @ux/config */}\n \n \n }\n >\n {CallToAction}\n \n \n );\n};\n\nTooltipShortcode.displayName = 'TooltipShortcode';\n\nexport default TooltipShortcode;\n","import React from 'react';\nimport { Shimmer } from '@uds/penders';\n\nimport { ShortcodeProps } from './';\n\nexport interface OuterProps {\n code?: ShortcodeProps;\n}\n\n// random % width for shimmer betwen 50% and 95%\nconst randomWidth = () => Math.floor(Math.random() * (95 - 50) + 50);\n\nconst PendingShortcode = ({ code }: OuterProps) => (\n \n \n \n);\n\nPendingShortcode.displayName = 'PendingShortcode';\n\nexport default PendingShortcode;\n","import React, { Suspense, lazy, ReactNode } from 'react';\nimport { getAgainst } from 'presentation/utils/colorway';\nimport { Layout } from 'domain/constants/layout';\n/*\n These shortcodes should not be lazy loaded in as they are already in the\n main bundle and it causes a unnecessary shimmer which makes the page feel\n less responsive\n*/\nimport { Colorway as Against } from '@uds/theme-utils';\nimport { IconName } from '@uds/glyphs';\n\nimport Alt from './Alt';\nimport Bold from './Bold';\nimport Italic from './Italic';\nimport Link from './Link';\nimport Text from './Text';\nimport Tooltip from './Tooltip';\nimport PendingShortcode from './PendingShortcode';\n\nimport { ShortcodeProps } from '.';\n\nconst Glyph = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-glyph\" */\n './Glyph'\n ),\n);\n\nconst Sup = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-sup\" */\n './Sup'\n ),\n);\n\nconst List = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-list\" */\n './List'\n ),\n);\n\nconst OrderedList = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-ordered-list\" */\n './OrderedList'\n ),\n);\n\nconst ListItem = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-list-item\" */\n './ListItem'\n ),\n);\n\nconst TickListItem = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-tick-list-item\" */\n './TickListItem'\n ),\n);\n\nconst ProductPrice = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-product-price\" */\n './ProductPrice'\n ),\n);\n\nconst PhoneNumber = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-phone-number\" */\n './PhoneNumber'\n ),\n);\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ndeclare const i: number;\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ndeclare const element: ShortcodeProps;\n\nexport interface ShortcodeAttributesProps {\n glyph: string;\n use?: number;\n number?: number;\n RecursiveShortcode: (props: RecursiveShortcodeProps) => JSX.Element;\n analyticskey?: string;\n goto?: string;\n label?: ReactNode;\n icon: IconName;\n prices?: Array<{\n gross: number;\n net: number;\n raw: number;\n tax: number;\n }>;\n inctax?: string;\n style?: string;\n rel?: string;\n newTab?: string;\n}\nexport interface RecursiveShortcodeProps {\n elements?: Array;\n RecursiveShortcode?: (props: RecursiveShortcodeProps) => JSX.Element;\n type?: string;\n name?: string;\n layout?: Layout;\n against?: Against;\n attributes?: ShortcodeAttributesProps | undefined;\n nl2br?: boolean;\n rest?: {\n [key: string]: any;\n };\n [key: string]: any;\n}\n\nconst RecursiveShortcode = ({ elements = [], ...rest }: RecursiveShortcodeProps) => (\n <>\n {elements.map((element, index) => (\n // Temporarily allow index as key waiting for BE to add ids\n // eslint-disable-next-line react/no-array-index-key\n \n ))}\n >\n);\n\nexport interface ShortcodeOuterProps {\n against?: Against;\n code: RecursiveShortcodeProps;\n type?: string;\n name?: string;\n values?: Record;\n}\n\nconst Shortcode = ({ code, ...rest }: RecursiveShortcodeProps) => {\n let props = {\n ...rest,\n } as RecursiveShortcodeProps;\n if (typeof code === 'string' || code instanceof String) {\n props.code = code;\n } else {\n props = {\n ...props,\n ...code,\n };\n }\n\n props.against = getAgainst(props.against);\n props.RecursiveShortcode = RecursiveShortcode;\n props.attributes = props?.attributes ?? ({} as ShortcodeAttributesProps);\n\n const { type, name, values } = props;\n if (typeof props.code === 'string') {\n return ;\n }\n if (props.type === 'text') {\n return ;\n }\n if (type === 'element') {\n switch (name) {\n case 'list':\n if (props?.attributes?.style === 'number') {\n return ;\n }\n return ;\n case 'li':\n if (props?.attributes?.style === 'glyph') {\n return ;\n }\n return ;\n case 'i':\n return ;\n case 'b':\n return ;\n case 'alt':\n return ;\n case 'sup':\n return ;\n case 'glyph':\n return ;\n case 'tel':\n return ;\n case 'link':\n return ;\n case 'productprice':\n return ;\n case 'tooltip':\n return ;\n case 'root':\n return ;\n default:\n return null;\n }\n }\n return null;\n};\n\nconst ShortcodeWrapper = (props: RecursiveShortcodeProps) => (\n }>\n \n \n);\n\nShortcodeWrapper.displayName = 'Shortcode';\n\nexport default ShortcodeWrapper;\n","import Shortcode, { RecursiveShortcodeProps } from './Shortcode';\n\n// TODO: help.. please.\nexport type ShortcodeProps = RecursiveShortcodeProps;\n\nexport default Shortcode;\n","export enum Alignment {\n STARTING = 'STARTING',\n CENTER = 'CENTER',\n}\n\nexport default null;\n","import React from 'react';\nimport { Status, Size } from '@uds/button';\nimport { CTA } from 'core/ribbons/cta';\nimport { Product } from '@uds/product';\nimport { Glyph, IconName } from '@uds/glyphs';\nimport callToAction from 'presentation/hocs/callToAction';\nimport { omit } from 'presentation/utils/generalUtils';\nimport { ReactRouterButton } from '@uds/react-router-adapter';\nimport { useIsExternalRoute } from 'domain/selectors/common';\n\ninterface OuterProps extends CTA {\n product?: Product;\n block?: boolean;\n size?: Size;\n ribbonId: string;\n index: number;\n glyph?: IconName;\n}\n\ninterface InnerProps extends OuterProps {\n addingStatus?: Status;\n handleClick: (props: any) => () => void;\n}\n\nconst getStatus = (addingStatus: string | undefined) => {\n switch (addingStatus) {\n case 'PENDING':\n return Status.PENDING;\n case 'SUCCESS':\n return Status.SUCCESS;\n case 'FAILURE':\n return Status.FAILURE;\n default:\n return Status.DEFAULT;\n }\n};\n\nconst PureCallToAction = ({ kind, label, addingStatus, handleClick, behavior, ...props }: InnerProps) => {\n const status = getStatus(addingStatus);\n const goto = 'goto' in behavior ? behavior.goto : undefined;\n const [isExternal, url] = useIsExternalRoute(goto);\n const newTab = 'newTab' in behavior ? behavior.newTab : null;\n const rel = 'rel' in behavior ? behavior.rel : undefined;\n\n const openNewWindowProps =\n newTab === 'true'\n ? {\n rel: rel,\n target: '_blank',\n }\n : {};\n\n const buttonProps = omit(\n [\n 'actions',\n 'buttonId',\n 'ribbonId',\n 'index',\n 'handlePlayVideoClick',\n 'handleSetVisibilityClick',\n 'handleConfigureClick',\n 'handleAddToBasketClick',\n 'handleNavigateClick',\n 'handleAnalytics',\n 'ribbonList',\n 'glyph',\n ],\n props,\n );\n\n return (\n }\n >\n {label}\n \n );\n};\n\nPureCallToAction.displayName = 'CallToAction';\n\nexport default callToAction(PureCallToAction);\n","export enum Behavior {\n NAVIGATION = 'navigation',\n ADD_TO_BASKET = 'addToBasket',\n CONFIGURE = 'configure',\n SET_VISIBILITY = 'changeActiveVisibilitySet',\n PLAY_VIDEO = 'playVideo',\n}\n\nexport default null;\n","import { useAdd, KnowledgeType } from '@uds/reactive-knowledge';\nimport { useIntl } from 'react-intl';\n\nexport type ShowToast = (messageId: string, type?: KnowledgeType) => void;\n\nexport default function useShowToast(): ShowToast {\n const add = useAdd();\n const intl = useIntl();\n return (message: string, type: KnowledgeType = KnowledgeType.SMIRK) => {\n add({\n type,\n message: intl.formatMessage({ id: message }),\n });\n };\n}\n","import { Http, Method } from '@ux/drivers';\nimport { setCookie } from '@uds/cookies';\nimport { CreateBasket } from 'core/basket';\nimport makeDriver from 'infrastructure/drivers/json';\n\nconst createBasket: CreateBasket = async (brandId: string) => {\n const driver: Http = makeDriver();\n\n const response = await driver({\n url: '/api/basket/api/v2/baskets',\n method: Method.POST,\n headers: {\n 'X-Tenant': brandId,\n },\n });\n\n const basketId = (await response.body.id) ?? null;\n if (basketId != null) {\n setCookie('basket', basketId);\n }\n\n return basketId;\n};\n\nexport default createBasket;\n","import decode from 'jwt-decode';\nimport { Http, Method } from '@ux/drivers';\nimport { getCookie } from '@uds/cookies';\nimport { AddToBasket } from 'core/basket';\nimport makeDriver from 'infrastructure/drivers/json';\nimport { getLanguageCookie } from 'domain/selectors/common';\n\nimport createBasket from './createBasket';\n\ntype CookieDecoded =\n | {\n basketId: string;\n }\n | {\n [key: string]: never;\n };\n\nconst makeAddToBasket = (brandId: string): AddToBasket => {\n const driver: Http = makeDriver();\n\n const getBaskedId = () => {\n const cookie = getCookie('basket');\n let basketId;\n\n try {\n const cookieDecoded: CookieDecoded = cookie != null ? decode(cookie) : {};\n if (cookieDecoded.basketId != null) {\n basketId = cookieDecoded.basketId;\n return basketId;\n }\n return createBasket(brandId);\n } catch (e: unknown) {\n basketId = cookie;\n return basketId;\n }\n };\n\n return async ({ items }) => {\n const localeCode = getLanguageCookie();\n const basketId = await getBaskedId();\n\n return driver({\n url: `/api/basket/api/v2/baskets/${basketId}/items?localeCode=${localeCode}`,\n method: Method.POST,\n data: { items },\n headers: {\n 'X-Tenant': brandId,\n },\n });\n };\n};\n\nexport default makeAddToBasket;\n","import { useMutation } from 'react-query';\nimport { useBrandId } from '@ux/whitelabel';\nimport { useRefreshBasketCount } from '@uds/bookends';\nimport { KnowledgeType } from '@uds/reactive-knowledge';\nimport makeAddToBasket from 'infrastructure/basket/addToBasket';\nimport { AddProductToBasketArgs } from 'core/basket';\n\nimport useShowToast from '../reactive-knowledge/useShowToast';\n\ninterface AddProductToBasketProps {\n handleAnalytics: () => void;\n postActionNavigate: () => void;\n}\n\nconst useAddProductToBasket = ({ postActionNavigate, handleAnalytics }: AddProductToBasketProps) => {\n const brandId = useBrandId();\n const showToast = useShowToast();\n const refetchBasket = useRefreshBasketCount();\n const addToBasket = (items: Array) => {\n handleAnalytics();\n return makeAddToBasket(brandId)({ items });\n };\n\n return useMutation(addToBasket, {\n onError: () => {\n showToast('usf.addToBasket.failure', KnowledgeType.ERK);\n },\n onSuccess: () => {\n refetchBasket();\n showToast('usf.addToBasket.success');\n postActionNavigate();\n },\n });\n};\n\nexport default useAddProductToBasket;\n","import { useHistory } from 'react-router';\nimport { useWindow } from '@uds/hooks';\nimport { isInternalUrl } from 'domain/url';\nimport { useOrderProcessUrl } from 'domain/selectors/common';\n\nconst usePostActionNavigate = (postAction?: { type: string; url?: string }) => {\n const type = postAction?.type;\n const url = postAction?.url;\n const history = useHistory();\n const isInternal = isInternalUrl(url);\n const orderUrl = useOrderProcessUrl();\n const window = useWindow();\n const navigateUrl = type === 'CHECKOUT' ? orderUrl : url;\n\n return () => {\n if (navigateUrl == null) {\n return;\n }\n if (isInternal) {\n history.push(navigateUrl);\n } else {\n window.location.href = navigateUrl;\n }\n };\n};\n\nexport default usePostActionNavigate;\n","import { ecommerce } from '@uds/tagmg';\nimport { selectors as productSelectors } from '@uds/product';\nimport { GetProductData } from 'core/cta';\nimport { getLanguageCookie } from 'domain/selectors/common';\n\nconst sendProductClicked = ({\n productId,\n list,\n getProductData,\n}: {\n list: string;\n productId?: string | null;\n getProductData: GetProductData;\n}) => {\n const locale = getLanguageCookie();\n\n if (!productId) {\n return;\n }\n return getProductData({\n skuId: productId,\n locale,\n }).then((product) => {\n const id = product?.id;\n const name = product?.name;\n let price = 0;\n // in case we ever get a malformed product, getPrice would throw an error\n try {\n price = productSelectors.getPrice({\n product,\n includeTax: false,\n });\n } catch (e) {\n return;\n }\n\n ecommerce([\n [\n 'addProduct',\n {\n id: `${id}`,\n name,\n price,\n },\n ],\n ['setAction', 'click', { list }],\n ]);\n });\n};\n\nexport default sendProductClicked;\n","import { dispatchFBEvent, ecommerce } from '@uds/tagmg';\nimport { selectors as productSelectors } from '@uds/product';\nimport { GetProductData } from 'core/cta';\nimport { getLanguageCookie } from 'domain/selectors/common';\n\nconst sendProductOnAddToBasket = ({\n productId,\n list,\n getProductData,\n currency,\n}: {\n list: string;\n productId?: string | null;\n getProductData: GetProductData;\n currency?: string;\n}) => {\n const locale = getLanguageCookie();\n if (!productId) {\n return;\n }\n return getProductData({\n skuId: productId,\n locale,\n }).then((product) => {\n let price = 0;\n // in case we ever get a malformed product, getPrice would throw an error\n try {\n price = productSelectors.getPrice({\n product,\n includeTax: false,\n });\n } catch (e) {\n return;\n }\n if (product == null) return;\n const id = product.id;\n const name = product.name;\n const category = product.categoryName;\n dispatchFBEvent('AddToCart', {\n // eslint-disable-next-line camelcase\n content_ids: [id],\n // eslint-disable-next-line camelcase\n content_name: name,\n value: price,\n quantity: 1,\n // eslint-disable-next-line camelcase\n content_type: category,\n currency: currency,\n });\n ecommerce([\n [\n 'addProduct',\n {\n id: `${id}`,\n name,\n price,\n },\n ],\n [\n 'setAction',\n 'add',\n {\n list,\n },\n ],\n ]);\n });\n};\n\nexport default sendProductOnAddToBasket;\n","import { Ecommerce, ecommerce } from '@uds/tagmg';\nimport { promoNameToPromoId } from 'domain/logic/promotion';\n\nconst sendPromotion = ({ promotion, ec }: { promotion?: string; ec?: Ecommerce }) => {\n // for test purposes, we allow an overwrite\n const ecomm = ec || ecommerce;\n if (!promotion) {\n return;\n }\n\n const promoId = promoNameToPromoId(promotion);\n ecomm([\n [\n 'addPromo',\n {\n id: promoId,\n name: promotion,\n },\n ],\n ['setAction', 'promo_click'],\n ]);\n};\n\nexport default sendPromotion;\n","import { useCurrency } from '@ux/currency';\nimport { Analytics } from 'core/ribbons/cta';\nimport { Behavior } from 'domain/constants/callToAction';\nimport { sendProductClicked, sendProductOnAddToBasket, sendPromotion } from 'application/actions/cta';\nimport { getProductData } from 'infrastructure/cta';\nimport { createRibbonName } from 'domain/transformers/ribbons';\nimport { useRibbon } from 'domain/selectors/ribbons';\n\ninterface Props {\n ribbonId?: string;\n behavior?: {\n type: Behavior;\n analytics?: Analytics;\n productId?: string | null;\n };\n}\n\nexport default ({ ribbonId, behavior }: Props) => {\n const currency = useCurrency();\n const ribbon = useRibbon(ribbonId);\n\n const list = createRibbonName(ribbon?.type, ribbon?.props?.name);\n const ctaType = behavior?.type;\n const type = behavior?.analytics?.type;\n\n return () => {\n if (type === 'PRODUCT') {\n const productId = behavior?.analytics?.productId;\n sendProductClicked({\n productId,\n list,\n getProductData,\n });\n } else if (type === 'PROMOTION') {\n const promotion = behavior?.analytics?.promotion;\n sendPromotion({ promotion });\n } else if (ctaType === 'addToBasket') {\n const productId = behavior?.productId;\n sendProductOnAddToBasket({ productId, list, getProductData, currency });\n }\n };\n};\n","import { Dispatch, useEffect } from 'react';\nimport { QueryStatus } from 'react-query';\nimport { Status } from '@uds/button';\nimport { Product } from '@uds/product';\nimport { AddProductToBasketArgs } from 'core/basket';\nimport { AddToBasketCta } from 'core/ribbons/cta';\nimport useAddProductToBasket from 'application/actions/cta/useAddProductToBasket';\nimport usePostActionNavigate from 'application/actions/cta/usePostActionNavigate';\n\nimport handleAnalytics from './handleAnalytics';\n\nconst statusMap: Record = {\n idle: Status.DEFAULT,\n loading: Status.PENDING,\n success: Status.SUCCESS,\n error: Status.FAILURE,\n};\n\ninterface HandleAddToBasketClick {\n ribbonId?: string;\n product?: Product;\n behavior?: AddToBasketCta;\n setAddingStatus: Dispatch;\n}\n\nexport default ({ ribbonId, product, setAddingStatus, behavior }: HandleAddToBasketClick) => {\n const { mutateAsync: addToBasket, status } = useAddProductToBasket({\n postActionNavigate: usePostActionNavigate(behavior?.postAction),\n handleAnalytics: handleAnalytics({ ribbonId, behavior }),\n });\n\n useEffect(() => {\n let timeoutRef: ReturnType;\n setAddingStatus(statusMap[status]);\n\n if (status === 'error' || status === 'success') {\n timeoutRef = setTimeout(() => {\n setAddingStatus(Status.DEFAULT);\n }, 1000);\n }\n\n return () => {\n clearTimeout(timeoutRef);\n };\n }, [status, setAddingStatus]);\n\n const items: Array = [];\n items.push({\n skuId: product?.defaultSkuId ?? behavior?.productId,\n quantity: 1,\n term: behavior?.pricingTier?.term,\n paymentInterval: behavior?.pricingTier?.paymentInterval,\n });\n\n return () => addToBasket(items);\n};\n","import { useWindow } from '@uds/hooks';\nimport { ConfigureProductCta } from 'core/ribbons/cta';\n\nimport { formatPricingTier } from './utils';\n\ninterface Props {\n behavior?: ConfigureProductCta;\n}\n\nexport default ({ behavior }: Props) => {\n const window = useWindow();\n\n return () => {\n const tier = formatPricingTier(behavior?.pricingTier);\n const productId = behavior?.productId;\n const query = new URLSearchParams();\n\n if (productId != null) {\n query.append('productId', productId);\n }\n\n if (tier != null) {\n query.append('pricingTier', tier);\n }\n\n const q = query.toString();\n window.location.href = `/configure?${q}`;\n };\n};\n","import { useState, Suspense, lazy, ElementType } from 'react';\nimport { Status } from '@uds/button';\nimport { Product } from '@uds/product';\nimport { BehaviorType } from 'core/ribbons/cta';\nimport { Behavior } from 'domain/constants/callToAction';\nimport { useExternalRoutes } from 'domain/selectors/common';\n\nimport {\n handleAddToBasketClick,\n handleConfigureClick,\n handlePlayVideoClick,\n handleAnalytics,\n handleSetVisibilityClick,\n} from './callToActionHandlers';\n\nconst VideoModal = lazy(() => import('presentation/components/modal/Video'));\n\ninterface Props {\n id?: string;\n ribbonId?: string;\n product?: Product;\n behavior?: BehaviorType;\n [key: string]: any;\n}\n\nexport default function (Component: ElementType) {\n return function CallToActionWrapper({ id, ribbonId, behavior, product, ...props }: Props) {\n const externalRoutes = useExternalRoutes();\n // add an analytics prefixed `id` to the cta if required\n const ctaId = behavior?.analytics?.linkAttribution == null ? id : `usf-cta-${behavior.analytics.linkAttribution}`;\n const actionType = behavior?.type;\n\n const [addingStatus, setAddingStatus] = useState(Status.DEFAULT);\n const [isVideoModalOpen, setIsVideoModalOpen] = useState(false);\n const toggleVideoModal = () => {\n return setIsVideoModalOpen((isOpen) => !isOpen);\n };\n\n const handleClick = (() => {\n if (actionType === Behavior.ADD_TO_BASKET) {\n return handleAddToBasketClick({ ribbonId, product, behavior, setAddingStatus });\n }\n if (actionType === Behavior.CONFIGURE) {\n return handleConfigureClick({ behavior });\n }\n if (actionType === Behavior.PLAY_VIDEO) {\n return handlePlayVideoClick({ toggleVideoModal });\n }\n if (actionType === Behavior.SET_VISIBILITY) {\n return handleSetVisibilityClick({ behavior });\n }\n if (actionType === Behavior.NAVIGATION) {\n return handleAnalytics({ ribbonId, behavior });\n }\n\n return () => null;\n })();\n\n if (actionType === Behavior.PLAY_VIDEO) {\n return (\n <>\n \n {isVideoModalOpen && (\n \n )}\n \n \n >\n );\n }\n\n return (\n \n );\n };\n}\n","export const formatPricingTier = (tier: { paymentInterval?: number; term?: number } | undefined) => {\n if (tier == null) {\n return;\n }\n if (tier.paymentInterval == null || tier.term == null) {\n return;\n }\n return `${tier.paymentInterval}:${tier.term}`;\n};\n","export default ({ toggleVideoModal }: { toggleVideoModal: () => void }) =>\n () =>\n toggleVideoModal();\n","import { VisibilitySetCta } from 'core/ribbons/cta';\nimport { useVisibilitySetsAction } from 'presentation/context/VisibilitySets';\n\nexport default ({ behavior }: { behavior?: VisibilitySetCta }) => {\n const setVisibility = useVisibilitySetsAction();\n if (setVisibility == null) {\n return () => null;\n }\n\n return () => {\n setVisibility(behavior?.visibilitySet);\n };\n};\n","import { Alignment } from 'domain/constants/alignment';\nimport { css, cx } from 'linaria';\nimport { cssTheme } from '@uds/theme-utils';\n\nconst subtitle = css`\n margin-top: ${cssTheme.gu2};\n`;\n\nconst root = {\n default: css`\n text-align: left;\n display: block;\n width: 100%;\n `,\n centered: css`\n text-align: center;\n `,\n};\n\nconst cta = {\n default: css`\n margin-top: ${cssTheme.gu1};\n &&& {\n ${cssTheme.breakpoints.sm} {\n margin-right: ${cssTheme.gu2};\n }\n }\n `,\n};\nconst ctas = {\n default: css`\n margin-top: ${cssTheme.gu2};\n overflow: hidden;\n &&& {\n ${cssTheme.breakpoints.sm} {\n display: flex;\n }\n }\n `,\n centered: css`\n justify-content: center;\n `,\n};\n\nexport default ({ alignment }: { alignment: Alignment }) => {\n return {\n root: cx(root.default, alignment === Alignment.CENTER && root.centered),\n cta: cta.default,\n ctas: cx(ctas.default, alignment === Alignment.CENTER && ctas.centered),\n subtitle,\n };\n};\n","import React, { ComponentType } from 'react';\nimport PaddingBox from '@uds/padding-box';\nimport { Container } from '@uds/grid';\nimport { Heading02, Heading04 } from '@uds/typography';\nimport Shortcode, { ShortcodeProps } from 'components/Shortcode';\nimport Ribbon from 'components/ribbons/Ribbon';\nimport CallToAction from 'components/common/CallToAction';\nimport { useBreakpoints } from '@ux/responsive';\nimport visibilitySet from 'presentation/hocs/visibilitySet';\nimport errorBoundary from 'presentation/hocs/errorBoundary';\nimport { RibbonProps, Type } from 'domain/constants/ribbons';\nimport { CTA } from 'core/ribbons/cta';\nimport { isNilOrEmpty } from 'presentation/utils/generalUtils';\nimport findResponsiveItem from 'presentation/utils/findResponsiveItem';\nimport { Alignment } from 'domain/constants/alignment';\n\nimport getClassNames from './Info.stylesheet';\n\ninterface OuterProps extends RibbonProps {\n title: ShortcodeProps;\n subtitle: ShortcodeProps;\n ctas: Array;\n}\n\nexport const Info = ({ id, loading, name, title, subtitle, ctas, colorway, hBaseline = 1, layout }: OuterProps) => {\n const hasTitle = !isNilOrEmpty(title);\n const hasSubtitle = !isNilOrEmpty(subtitle);\n const hasCta = !isNilOrEmpty(ctas);\n const { isMinSm } = useBreakpoints();\n\n const alignment = findResponsiveItem(useBreakpoints(), [\n layout?.alignmentMobile ?? Alignment.STARTING,\n layout?.alignmentTablet ?? Alignment.STARTING,\n layout?.alignment ?? Alignment.STARTING,\n ]);\n\n const classNames = getClassNames({\n alignment,\n });\n return (\n \n \n \n \n {hasTitle && (\n \n \n \n )}\n {hasSubtitle && (\n \n \n \n )}\n {hasCta && (\n \n {ctas.map((cta, i) => (\n \n \n \n ))}\n \n )}\n \n \n \n \n );\n};\n\nInfo.displayName = 'Info';\n\nexport default errorBoundary(visibilitySet(Info)) as ComponentType;\n","import Info from './Info';\n\nexport default Info;\n"],"sourceRoot":""}