{"version":3,"sources":["webpack:///../node_modules/@ux/reactive-button/dist/es/reactive-button.js","webpack:///./presentation/components/common/CallToAction.tsx","webpack:///./application/actions/reactive-knowledge/useShowToast.ts","webpack:///./domain/constants/callToAction.ts","webpack:///./presentation/hooks/usePostActionNavigate.ts","webpack:///./presentation/hooks/useAddToBasket.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/callToAction.js","webpack:///./presentation/hocs/callToActionHandlers/handleConfigureClick.ts","webpack:///./presentation/hocs/callToActionHandlers/handlePlayVideoClick.ts","webpack:///./presentation/hocs/callToActionHandlers/handleAddToBasketClick.ts","webpack:///./presentation/hocs/callToActionHandlers/handleSetVisibilityClick.ts"],"names":["_defineProperty","obj","key","value","Object","defineProperty","enumerable","configurable","writable","_extends","assign","target","i","arguments","length","source","prototype","hasOwnProperty","call","apply","this","Status","Animate","_ref","children","duration","entering","entered","leave","styles","transition","concat","opacity","createElement","style","isAgainstPrimary","against","PRIMARY","isAgainstDark","DARK","isAgainstHighlight","HIGHLIGHT","isAgainst","againsts","includes","colorMatrix","theme","kind","isKindPrimary","palette","primary","highlight","ctaContrast","SECONDARY","isKindSecondary","grey12","primaryContrast","highlightContrast","grey01","TERTIARY","isKindTertiary","grey11","grey02","isKindHighlight","DETRIMENTAL","isKindDetrimental","POSITIVE","isKindPositive","Content","props","_useStyles","size","status","spacing","accentColor","default","loader","color","iconContainer","position","top","left","width","height","display","justifyContent","alignItems","icon","animation","DEFAULT","text","PENDING","SUCCESS","FAILURE","SM","LG","stylesheet","enhance","_contentMap","contentMap","src","alt","loading","Fragment","render","getButtonKind","isDisabled","disabled","ReactiveButton","MD","NEUTRAL","ownerProps","glyph","root","cursor","stylesheet$1","enhance$1","_a","buttonProps","s","e","t","p","indexOf","getOwnPropertySymbols","__rest","styleOverrides","PureCallToAction","Against","LIGHT","label","addingStatus","handleClick","behavior","getStatus","goto","newTab","rel","openNewWindowProps","omit","onClick","to","displayName","callToAction","useShowToast","dispatch","useDispatch","message","type","KnowledgeType","SMIRK","messages","ADD","payload","Behavior","usePostActionNavigate","postAction","url","history","useHistory","isInternal","isInternalUrl","orderUrl","useOrderProcessUrl","window","useWindow","navigateUrl","push","location","href","drivers","makeDrivers","useAddToBasket","data","brandId","useBrandId","showToast","refetch","refetchBasket","useBasket","postActionNavigate","useMutation","productId","pricingTier","addons","quantity","productData","setAddingStatus","handleAnalytics","skuId","addonSkuIds","add","onError","ERK","onSuccess","onSettled","setTimeout","sendProductClicked","list","getProductData","locale","browserCookies","get","then","product","id","name","price","productSelectors","getPrice","includeTax","notifyCradle","Level","CRITICAL","ecommerce","sendProductOnAddToBasket","currency","category","categoryName","dispatchFBEvent","content_ids","content_name","content_type","sendPromotion","promotion","ec","ecomm","promoNameToPromoId","ctaType","analytics","ribbonList","formatPricingTier","tier","paymentInterval","term","compose","withProps","ribbon","useRibbon","ribbonId","externalRoutes","useExternalRoutes","useState","connect","state","buttonId","index","ribbonType","ribbonName","linkAttribution","createRibbonName","isNilOrEmpty","bindActionCreators","openReduxModal","signals","open","stateProps","dispatchProps","ownProps","actions","withHandlers","handleConfigureClick","query","URLSearchParams","append","q","toString","handlePlayVideoClick","videoId","provider","route","params","ADD_TO_BASKET","defaultSkuId","selectors","useCurrency","useAnalytics","mutateAsync","addToBasket","undefined","handleAddToBasketClick","CONFIGURE","PLAY_VIDEO","SET_VISIBILITY","setVisibility","useVisibilitySetsAction","visibilitySet","handleSetVisibilityClick","NAVIGATION"],"mappings":"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","file":"pex-static/90/4.90663513b3f3a1eb2852.chunk.js","sourcesContent":["import Button, { Size, Kind, Against } from '@ux/button';\nexport { Against, Kind, Size } from '@ux/button';\nimport React, { Fragment } from 'react';\nimport { puree } from '@ux/pure-enhance';\nimport { withProps, defaultProps } from '@team-griffin/rehook';\nimport Transition from '@team-griffin/react-transition';\nimport { PulseLoader } from '@ux/penders';\nimport { createPaintbrushUrl } from '@ux/glyphs';\nimport { modifier, opacify } from '@ux/style-utils';\nimport { useTheme, gu2px } from '@ux/theme-utils';\nimport { useStyles } from '@team-griffin/stylr';\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\n\nvar Animate = function Animate(_ref) {\n var children = _ref.children,\n duration = _ref.duration,\n entering = _ref.entering,\n entered = _ref.entered,\n leave = _ref.leave;\n var styles = {\n transition: \"opacity \".concat(duration, \"ms ease-in-out\"),\n opacity: entering || entered || leave ? 1 : 0\n };\n return React.createElement(\"span\", {\n style: styles\n }, children);\n};\n\nvar Status;\n\n(function (Status) {\n Status[\"DEFAULT\"] = \"DEFAULT\";\n Status[\"PENDING\"] = \"PENDING\";\n Status[\"SUCCESS\"] = \"SUCCESS\";\n Status[\"FAILURE\"] = \"FAILURE\";\n})(Status || (Status = {}));\n\nvar isKindPrimary = function isKindPrimary(kind) {\n return kind === Kind.PRIMARY;\n};\n\nvar isKindSecondary = function isKindSecondary(kind) {\n return kind === Kind.SECONDARY;\n};\n\nvar isKindTertiary = function isKindTertiary(kind) {\n return kind === Kind.TERTIARY;\n};\n\nvar isKindHighlight = function isKindHighlight(kind) {\n return kind === Kind.HIGHLIGHT;\n};\n\nvar isKindDetrimental = function isKindDetrimental(kind) {\n return kind === Kind.DETRIMENTAL;\n};\n\nvar isKindPositive = function isKindPositive(kind) {\n return kind === Kind.POSITIVE;\n};\n\nvar isAgainstPrimary = function isAgainstPrimary(against) {\n return against === Against.PRIMARY;\n};\n\nvar isAgainstDark = function isAgainstDark(against) {\n return against === Against.DARK;\n};\n\nvar isAgainstHighlight = function isAgainstHighlight(against) {\n return against === Against.HIGHLIGHT;\n};\n\nvar isAgainst = function isAgainst(againsts, against) {\n return againsts.includes(against);\n};\n\nvar colorMatrix = function colorMatrix(_ref) {\n var theme = _ref.theme,\n kind = _ref.kind,\n against = _ref.against;\n\n if (isKindPrimary(kind)) {\n if (isAgainstPrimary(against)) {\n return theme.palette.primary;\n }\n\n if (isAgainstHighlight(against)) {\n return theme.palette.highlight;\n }\n\n return theme.palette.ctaContrast;\n }\n\n if (isKindSecondary(kind)) {\n if (isAgainstDark(against)) {\n return opacify(theme.palette.grey12, 0.85);\n }\n\n if (isAgainstPrimary(against)) {\n return opacify(theme.palette.primaryContrast, 0.85);\n }\n\n if (isAgainstHighlight(against)) {\n return opacify(theme.palette.highlightContrast, 0.85);\n }\n\n return opacify(theme.palette.grey01, 0.85);\n }\n\n if (isKindTertiary(kind)) {\n if (isAgainstDark(against)) {\n return opacify(theme.palette.grey11, 0.85);\n }\n\n if (isAgainstPrimary(against)) {\n return opacify(theme.palette.primaryContrast, 0.9);\n }\n\n if (isAgainstHighlight(against)) {\n return opacify(theme.palette.highlightContrast, 0.9);\n }\n\n return opacify(theme.palette.grey02, 0.85);\n }\n\n if (isKindHighlight(kind)) {\n if (isAgainstHighlight(against)) {\n return theme.palette.highlight;\n }\n\n return theme.palette.highlightContrast;\n }\n\n if (isKindDetrimental(kind)) {\n if (isAgainst([Against.PRIMARY, Against.HIGHLIGHT], against)) {\n return '#000';\n }\n\n return '#fff';\n }\n\n if (isKindPositive(kind)) {\n if (isAgainst([Against.PRIMARY, Against.HIGHLIGHT], against)) {\n return '#000';\n }\n\n return '#fff';\n }\n};\n\nvar stylesheet = (function (props) {\n var _useStyles;\n\n var size = props.size,\n kind = props.kind,\n against = props.against,\n status = props.status;\n\n var _useTheme = useTheme(),\n theme = _useTheme.theme;\n\n var spacing = theme.spacing;\n var accentColor = colorMatrix({\n theme: theme,\n kind: kind,\n against: against\n });\n return useStyles((_useStyles = {\n default: {\n loader: {\n color: accentColor,\n size: gu2px(4, spacing)\n },\n iconContainer: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n icon: {\n animation: 'iconPulseIn 0.3s ease-in-out 1',\n display: 'block',\n width: gu2px(4, spacing),\n height: gu2px(4, spacing),\n color: accentColor\n }\n }\n }, _defineProperty(_useStyles, modifier('status', Status.DEFAULT), {\n text: {\n opacity: 1\n }\n }), _defineProperty(_useStyles, modifier('status', Status.PENDING), {\n text: {\n opacity: 0.2\n }\n }), _defineProperty(_useStyles, modifier('status', Status.SUCCESS), {\n text: {\n opacity: 0.001\n }\n }), _defineProperty(_useStyles, modifier('status', Status.FAILURE), {\n text: {\n opacity: 0.001\n }\n }), _defineProperty(_useStyles, modifier('size', Size.SM), {\n icon: {\n width: gu2px(3, spacing),\n height: gu2px(3, spacing)\n }\n }), _defineProperty(_useStyles, modifier('size', Size.LG), {\n icon: {\n width: gu2px(5, spacing),\n height: gu2px(5, spacing)\n }\n }), _useStyles), [{\n status: status\n }, {\n size: size\n }]);\n});\n\nvar enhance = puree('ReactiveButtonContent')(withProps(function (props) {\n return stylesheet(props);\n}));\n\nvar PureReactiveButtonContent = function PureReactiveButtonContent(_ref) {\n var _contentMap;\n\n var styles = _ref.styles,\n status = _ref.status,\n children = _ref.children;\n var contentMap = (_contentMap = {}, _defineProperty(_contentMap, Status.DEFAULT, null), _defineProperty(_contentMap, Status.PENDING, React.createElement(PulseLoader, {\n key: \"pulseLoader\",\n color: styles.loader.color,\n size: styles.loader.size\n })), _defineProperty(_contentMap, Status.SUCCESS, React.createElement(\"img\", {\n style: styles.icon,\n src: createPaintbrushUrl('smallTick', [styles.icon.color]),\n alt: \"smallTick\" //@ts-ignore\n ,\n loading: \"lazy\"\n })), _defineProperty(_contentMap, Status.FAILURE, React.createElement(\"img\", {\n style: styles.icon,\n src: createPaintbrushUrl('smallCross', [styles.icon.color]),\n alt: \"cross\" //@ts-ignore\n ,\n loading: \"lazy\"\n })), _contentMap);\n return React.createElement(React.Fragment, null, React.createElement(\"span\", {\n key: \"text\",\n style: styles.text\n }, children), React.createElement(Transition, {\n key: \"icon\",\n duration: 200,\n render: Animate\n }, React.createElement(\"span\", {\n style: styles.iconContainer\n }, contentMap[status])));\n};\n\nvar Content = enhance(PureReactiveButtonContent); // eslint-disable-next-line no-underscore-dangle\n\nvar getReactiveButtonStatus = function getReactiveButtonStatus(formProps) {\n var pristine = formProps.pristine,\n submitting = formProps.submitting,\n submitSucceeded = formProps.submitSucceeded,\n submitFailed = formProps.submitFailed,\n error = formProps.error,\n invalid = formProps.invalid;\n var status = Status.DEFAULT;\n\n if (pristine === true) {\n status = Status.DEFAULT;\n }\n\n if (submitting === true) {\n status = Status.PENDING;\n }\n\n if (submitSucceeded === true) {\n status = Status.SUCCESS;\n }\n\n if (submitFailed === true) {\n status = Status.FAILURE;\n }\n\n if (error === true) {\n status = Status.FAILURE;\n }\n\n if (invalid === true) {\n status = Status.FAILURE;\n }\n\n return status;\n};\nvar getButtonKind = function getButtonKind(_ref) {\n var status = _ref.status,\n kind = _ref.kind,\n against = _ref.against;\n\n if (against === Against.PRIMARY) {\n return kind;\n }\n\n if (against === Against.HIGHLIGHT) {\n return kind;\n }\n\n if (status === Status.FAILURE) {\n return Kind.DETRIMENTAL;\n }\n\n if (status === Status.SUCCESS) {\n return Kind.POSITIVE;\n }\n\n return kind;\n};\n\nvar stylesheet$1 = (function (props) {\n var _useStyles;\n\n var status = props.status;\n return useStyles((_useStyles = {\n default: {\n glyph: {\n transition: 'opacity 0.2s ease-in-out'\n }\n }\n }, _defineProperty(_useStyles, modifier('status', Status.PENDING), {\n root: {\n cursor: 'progress',\n opacity: 1\n },\n glyph: {\n opacity: 0.2\n }\n }), _defineProperty(_useStyles, modifier('status', Status.SUCCESS), {\n root: {\n cursor: 'not-allowed',\n opacity: 1\n },\n glyph: {\n opacity: 0\n }\n }), _defineProperty(_useStyles, modifier('status', Status.FAILURE), {\n root: {\n cursor: 'not-allowed',\n opacity: 1\n },\n glyph: {\n opacity: 0\n }\n }), _useStyles), [{\n status: status\n }]);\n});\n\nvar isDisabled = function isDisabled(props) {\n return props.disabled || [Status.PENDING, Status.SUCCESS, Status.FAILURE].includes(props.status);\n};\n\nvar enhance$1 = puree('ReactiveButton')(defaultProps({\n status: Status.DEFAULT,\n size: Size.MD,\n against: Against.NEUTRAL\n}), withProps(function (ownerProps) {\n return {\n disabled: isDisabled(ownerProps),\n kind: getButtonKind(ownerProps)\n };\n}), withProps(function (props) {\n return stylesheet$1(props);\n}));\n\nvar PureReactiveButton = function PureReactiveButton(_a) {\n var styles = _a.styles,\n status = _a.status,\n children = _a.children,\n kind = _a.kind,\n size = _a.size,\n against = _a.against,\n buttonProps = __rest(_a, [\"styles\", \"status\", \"children\", \"kind\", \"size\", \"against\"]);\n\n return React.createElement(Fragment, null, React.createElement(\"style\", null, \"\\n @keyframes iconPulseIn {\\n 0% { transform: scale(0); }\\n 75% { transform: scale(1.1); }\\n 100% { transform: scale(1); }\\n }\\n \"), React.createElement(Button, _extends({\n styleOverrides: styles,\n kind: kind,\n size: size,\n against: against\n }, buttonProps), React.createElement(Content, {\n status: status,\n kind: kind,\n size: size,\n against: against\n }, children)));\n};\n\nvar ReactiveButton = enhance$1(PureReactiveButton); // eslint-disable-next-line no-underscore-dangle\n\nexport default ReactiveButton;\nexport { Status, getReactiveButtonStatus };\n","import React from 'react';\nimport Button, { Against, Status, Size } from '@ux/reactive-button';\nimport callToAction from 'presentation/hocs/callToAction';\nimport { CTA } from 'core/ribbons/cta';\nimport { Product } from '@uds/product';\nimport { omit } from 'presentation/utils/generalUtils';\n\ninterface OuterProps extends CTA {\n product?: Product;\n against?: Against;\n block?: boolean;\n size?: Size;\n ribbonId: string;\n index: number;\n glyph?: string;\n}\n\ninterface InnerProps extends OuterProps {\n addingStatus: Status;\n handleClick: (props: any) => () => void;\n}\n\nconst getStatus = (addingStatus: string) => {\n switch (addingStatus) {\n case 'REQUESTED':\n return Status.PENDING;\n case 'SUCCESS':\n return Status.SUCCESS;\n case 'FAILED':\n return Status.FAILURE;\n default:\n return Status.DEFAULT;\n }\n};\n\nconst PureCallToAction = ({\n kind,\n against = Against.LIGHT,\n label,\n addingStatus,\n handleClick,\n behavior,\n ...props\n}: InnerProps) => {\n const status = getStatus(addingStatus);\n // @ts-ignore goto exists on NavigationCTA\n const goto = behavior?.goto ?? null;\n // @ts-ignore newTab exists on NavigationCTA\n const newTab = behavior?.newTab ?? null;\n // @ts-ignore rel exists on NavigationCTA\n const rel = behavior?.rel ?? null;\n\n const openNewWindowProps =\n newTab === 'true'\n ? {\n rel: rel,\n target: '_blank',\n }\n : {};\n\n const buttonProps = omit(\n [\n 'colorway',\n 'actions',\n 'buttonId',\n 'ribbonId',\n 'index',\n 'handlePlayVideoClick',\n 'handleSetVisibilityClick',\n 'handleConfigureClick',\n 'handleAddToBasketClick',\n 'handleNavigateClick',\n 'handleAnalytics',\n 'ribbonList',\n ],\n props,\n );\n\n return (\n \n {label}\n \n );\n};\n\nPureCallToAction.displayName = 'CallToAction';\n\nexport default callToAction(PureCallToAction);\n","import { useDispatch } from 'react-redux';\nimport { messages, KnowledgeType } from '@ux/reactive-knowledge';\n\nexport type ShowToast = (messageId: string, type?: KnowledgeType) => void;\n\nexport default function useShowToast(): ShowToast {\n const dispatch = useDispatch();\n return (message: string, type: KnowledgeType = KnowledgeType.SMIRK) => {\n dispatch({\n type: messages.ADD,\n payload: {\n type,\n message,\n },\n });\n };\n}\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 { useHistory } from 'react-router';\nimport { useWindow } from '@ux/hooks';\nimport { isInternalUrl } from 'domain/url';\nimport { useOrderProcessUrl } from 'domain/selectors/common';\n\nconst usePostActionNavigate = (postAction: { type: string; url: string }) => {\n const { type, url } = postAction ?? {};\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;","import { useMutation } from 'react-query';\nimport useShowToast from 'application/actions/reactive-knowledge/useShowToast';\nimport makeDrivers from 'infrastructure/drivers/middleware';\nimport { ProductData } from 'core/basket';\nimport { useBrandId } from '@ux/whitelabel';\nimport { useBasket } from '@uds/bookends';\nimport { KnowledgeType } from '@ux/reactive-knowledge';\nimport { Dispatch } from 'react';\nimport usePostActionNavigate from 'presentation/hooks/usePostActionNavigate';\n\nconst drivers = makeDrivers();\n\nconst add = ({\n brandId,\n productId,\n pricingTier,\n addons,\n quantity,\n productData,\n setAddingStatus,\n handleAnalytics,\n}: {\n brandId: string;\n productId: string;\n pricingTier?: string;\n addons: unknown;\n quantity?: number;\n productData?: ProductData;\n setAddingStatus: Dispatch;\n handleAnalytics: () => void;\n}) => {\n const data = {} as {\n pricingTier?: string;\n quantity?: number;\n brandId: string;\n skuId: string | number;\n addonSkuIds: unknown;\n };\n handleAnalytics();\n setAddingStatus('REQUESTED');\n data.pricingTier = pricingTier;\n if (quantity) {\n data.quantity = quantity;\n }\n data.brandId = brandId;\n data.skuId = productData?.skuId ?? productId;\n data.addonSkuIds = addons;\n return drivers('0', 'addBasketItem', data);\n};\n\nconst useAddToBasket = (data: {\n productId: string;\n pricingTier?: string;\n addons: unknown;\n quantity?: number;\n productData?: ProductData;\n setAddingStatus: Dispatch;\n handleAnalytics: () => void;\n postAction: {\n type: string;\n url: string;\n };\n}) => {\n const brandId = useBrandId();\n const showToast = useShowToast();\n const { refetch: refetchBasket } = useBasket();\n const addToBasket = () => add({ ...data, brandId });\n const postActionNavigate = usePostActionNavigate(data.postAction);\n return useMutation(addToBasket, {\n onError: () => {\n showToast('usf.addToBasket.failure', KnowledgeType.ERK);\n data.setAddingStatus('FAILURE');\n },\n onSuccess: () => {\n refetchBasket();\n showToast('usf.addToBasket.success');\n data.setAddingStatus('SUCCESS');\n postActionNavigate();\n },\n onSettled: () => {\n setTimeout(() => data.setAddingStatus('DEFAULT'), 1000);\n },\n });\n};\n\nexport default useAddToBasket;\n","import { ecommerce } from '@ux/tagmg';\nimport browserCookies from 'browser-cookies';\nimport { GetProductData } from 'core/cta';\nimport { Level, notifyCradle } from '@ux/cradle';\nimport { selectors as productSelectors } from '@uds/product';\n\nconst sendProductClicked = ({\n productId,\n list,\n getProductData,\n}: {\n list: string;\n productId: string;\n getProductData: GetProductData;\n}) => {\n const locale = browserCookies.get('ux-language-preferred');\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 notifyCradle(Level.CRITICAL, e, 'Malformed product');\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;","import { dispatchFBEvent, ecommerce } from '@ux/tagmg';\nimport { selectors as productSelectors } from '@uds/product';\nimport browserCookies from 'browser-cookies';\nimport { GetProductData } from 'core/cta';\n\nconst sendProductOnAddToBasket = ({\n productId,\n list,\n getProductData,\n currency,\n}: {\n list: string;\n productId: string;\n getProductData: GetProductData;\n currency?: string;\n}) => {\n const locale = browserCookies.get('ux-language-preferred');\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 '@ux/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 { sendProductClicked, sendProductOnAddToBasket, sendPromotion } from 'application/actions/cta';\nimport { GetProductData } from 'core/cta';\n\nexport default (props: {\n behavior: {\n type: any;\n analytics: {\n type: string;\n productId: string;\n promotion: string;\n };\n productId: string;\n };\n ribbonList: string;\n getProductData: GetProductData;\n currency?: string;\n}) => {\n const ctaType = props.behavior?.type;\n const type = props.behavior?.analytics?.type;\n const list = props.ribbonList;\n const currency = props.currency;\n const getProductData = props.getProductData;\n return () => {\n if (type === 'PRODUCT') {\n const productId = props.behavior?.analytics?.productId;\n sendProductClicked({\n productId,\n list,\n getProductData,\n });\n } else if (type === 'PROMOTION') {\n const promotion = props.behavior?.analytics?.promotion;\n sendPromotion({ promotion });\n } else if (ctaType === 'addToBasket') {\n const productId = props.behavior?.productId;\n sendProductOnAddToBasket({ productId, list, getProductData, currency });\n }\n };\n};\n","import { compose, withProps, withHandlers } from 'recompose';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { useWindow } from '@ux/hooks';\nimport { useExternalRoutes } from 'domain/selectors/common';\nimport { createRibbonName } from 'domain/transformers/ribbons';\nimport { useRibbon } from 'domain/selectors/ribbons';\nimport { Behavior } from 'domain/constants/callToAction';\nimport { signals } from '@team-griffin/redux-modal-router';\nimport { isNilOrEmpty } from 'presentation/utils/generalUtils';\nimport { useState } from 'react';\nimport { getProductData } from 'infrastructure/cta';\n\nimport {\n handleAddToBasketClick,\n handleConfigureClick,\n handlePlayVideoClick,\n handleAnalytics,\n handleSetVisibilityClick,\n} from './callToActionHandlers';\n\nexport const formatPricingTier = (tier) => {\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\nconst mapStateToProps = (state, props) => {\n const buttonId = `${props.ribbonId}-cta-${props.index}`;\n const ribbonType = props?.ribbon?.type;\n const ribbonName = props?.ribbon?.props?.name;\n const product = props?.product;\n // add an analytics prefixed `id` to the cta if required\n const id = (() => {\n const behavior = props.behavior;\n const id = props.id;\n if (behavior?.analytics?.linkAttribution) {\n return `usf-cta-${behavior.analytics.linkAttribution}`;\n }\n return id;\n })();\n const ribbonList = createRibbonName(ribbonType, ribbonName);\n const behavior = isNilOrEmpty(props.behavior) ? {} : props.behavior;\n return {\n buttonId,\n ribbonList,\n product,\n id,\n behavior,\n };\n};\n\nconst mapDispatchToProps = (dispatch) =>\n bindActionCreators(\n {\n openReduxModal: signals.open,\n },\n dispatch,\n );\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => {\n return {\n ...stateProps,\n ...ownProps,\n actions: {\n ...dispatchProps,\n ...ownProps.actions,\n },\n };\n};\n\nexport default compose(\n withProps((ownerProps) => ({\n ribbon: useRibbon(ownerProps.ribbonId),\n externalRoutes: useExternalRoutes(),\n })),\n withProps((ownerProps) => ({\n window: useWindow(),\n getProductData,\n ...(() => {\n const [addingStatus, setAddingStatus] = useState('DEFAULT');\n return {\n setAddingStatus,\n addingStatus,\n };\n })(ownerProps),\n })),\n connect(mapStateToProps, mapDispatchToProps, mergeProps),\n withHandlers({\n handleConfigureClick: handleConfigureClick,\n handlePlayVideoClick: handlePlayVideoClick,\n }),\n withProps((ownerProps) => ({\n handleClick: (() => {\n switch (ownerProps.behavior?.type) {\n case Behavior.ADD_TO_BASKET:\n return handleAddToBasketClick(ownerProps);\n case Behavior.CONFIGURE:\n return ownerProps.handleConfigureClick;\n case Behavior.PLAY_VIDEO:\n return ownerProps.handlePlayVideoClick;\n case Behavior.SET_VISIBILITY:\n return handleSetVisibilityClick(ownerProps);\n case Behavior.NAVIGATION:\n return handleAnalytics(ownerProps);\n default:\n return () => null;\n }\n })(),\n })),\n);\n","import { formatPricingTier } from '../callToAction';\n\nexport default ({\n window,\n behavior: { productId, pricingTier },\n}: {\n window: Window;\n behavior: {\n productId: string;\n pricingTier: string;\n };\n}) => {\n return () => {\n const tier = formatPricingTier(pricingTier);\n const query = new URLSearchParams();\n query.append('productId', productId);\n if (tier) {\n query.append('pricingTier', tier);\n }\n const q = query.toString();\n window.location.href = `/configure?${q}`;\n };\n};\n","export default ({\n actions: { openReduxModal },\n behavior: { videoId, provider },\n }: {\n actions: {\n openReduxModal: any;\n };\n behavior: {\n videoId: string;\n provider: string;\n };\n }) =>\n () => {\n openReduxModal({\n route: 'PLAY_VIDEO',\n params: {\n videoId,\n provider,\n },\n });\n };\n","import { useCurrency } from '@ux/currency';\nimport { Product, selectors } from '@uds/product';\nimport { ProductData } from 'core/basket';\nimport { GetProductData } from 'core/cta';\nimport useAddToBasket from 'presentation/hooks/useAddToBasket';\nimport { Dispatch } from 'react';\n\nimport { formatPricingTier } from '../callToAction';\nimport handleAnalytics from './handleAnalytics';\n\nexport default (props: {\n ribbonList: string;\n getProductData: GetProductData;\n product: Product;\n setAddingStatus: Dispatch;\n behavior: {\n type: string;\n productId: string;\n postAction: {\n type: string;\n url: string;\n };\n pricingTier: string;\n analytics: {\n type: string;\n productId: string;\n promotion: string;\n };\n };\n}) => {\n const {\n product,\n setAddingStatus,\n behavior: { productId, postAction, pricingTier },\n } = props;\n const productData = {\n skuId: product ? product.defaultSkuId : null,\n name: product ? product.name : null,\n price: product\n ? selectors.getPrice({\n product,\n includeTax: false,\n })\n : null,\n category: product ? product.categoryName : null,\n } as ProductData;\n\n const currency = useCurrency();\n const useAnalytics = handleAnalytics({ ...props, currency });\n const { mutateAsync: addToBasket } = useAddToBasket({\n productId,\n pricingTier: formatPricingTier(pricingTier),\n productData,\n addons: undefined,\n quantity: 1,\n setAddingStatus,\n postAction,\n handleAnalytics: useAnalytics,\n });\n\n return addToBasket;\n};\n","import { useVisibilitySetsAction } from 'presentation/context/VisibilitySets';\n\nexport default ({ behavior }: { behavior: { visibilitySet: any } }) => {\n const setVisibility = useVisibilitySetsAction();\n if (setVisibility == null) {\n // eslint-disable-next-line react/display-name\n return () => null;\n }\n\n return () => {\n setVisibility(behavior?.visibilitySet);\n };\n};\n"],"sourceRoot":""}