{"version":3,"file":"global_messages.c37b39a2.js","mappings":"65CAOA,IAAMA,EAAoB,SAAHC,GAejB,IAdJC,EAAQD,EAARC,SACAC,EAAWF,EAAXE,YACAC,EAAcH,EAAdG,eACAC,EAAMJ,EAANI,OACAC,EAAOL,EAAPK,QACAC,EAASN,EAATM,UACAC,EAAIP,EAAJO,KACAC,EAAOR,EAAPQ,QACAC,EAAWT,EAAXS,YACAC,EAAMV,EAANU,OACAC,EAAeX,EAAfW,gBACAC,EAAWZ,EAAXY,YACAC,EAAWb,EAAXa,YACAC,EAAiBd,EAAjBc,kBAEMC,GAAOC,EAAAA,EAAAA,KACsDC,EAAAC,GAAfC,EAAAA,EAAAA,WAAS,GAAM,GAA5DC,EAAkBH,EAAA,GAAEI,EAAqBJ,EAAA,GACGK,EAAAJ,GAAfC,EAAAA,EAAAA,WAAS,GAAM,GAA5CI,EAAUD,EAAA,GAAEE,EAAaF,EAAA,GAE1BG,GAAmBC,EAAAA,EAAAA,QAAO,MAE1BC,IAAWtB,KAAaC,EAExBsB,GAAeC,EAAAA,EAAAA,UAAQ,WAC3B,I,EAAIC,EAAS,EAMb,OALI3B,I,EACE4B,SAASC,iBAAiB7B,G,uVAAiB8B,SAAQ,SAAAC,GACrDJ,IAAUK,EAAAA,EAAAA,IAA0BD,EACtC,IAEKJ,CACT,GAAG,CAAC3B,IAEJ,SAASiC,IACHhB,IACFC,GAAsB,GACtBb,IAEJ,CAEA,SAAS6B,IACP,IAAMC,EAAmBC,OAAOC,YAAcZ,EAC1CL,IAAee,GACjBd,EAAcc,EAElB,CAEA,SAASG,IACPpB,GAAsB,EACxB,CA2BA,IAzBAqB,EAAAA,EAAAA,YAAU,WACR,IAAIC,EAAQ,KAKZ,OAJI1C,IACF0C,EAAQJ,OAAOK,WAAWH,EAA6B,IAAd5B,IAGpC,kBAAM0B,OAAOM,aAAaF,EAAM,CACzC,GAAG,CAAC1C,EAAUY,KAEd6B,EAAAA,EAAAA,YAAU,WACR,IAAMI,EAAqBrB,EAAiBsB,QAS5C,OARI3C,GAAUuB,GACZI,SAASiB,iBAAiB,SAAUX,GAGtCS,EAAmBE,iBAAiB,gBAAiBZ,GAErDC,IAEO,WACLN,SAASkB,oBAAoB,SAAUZ,GACvCS,EAAmBG,oBAAoB,gBAAiBb,EAC1D,CACF,KAEKT,EAAQ,OAAOuB,EAAAA,cAAA,OAAKC,IAAK1B,IAE9B,IAAM2B,EAAiB,GAEnBhD,IACFgD,EAAeC,KAAK,aAChB9B,GACF6B,EAAeC,KAAK5C,IAIpBW,EACFgC,EAAeC,KAAK,cACX1B,EACTyB,EAAeC,KAAK,WAEpBD,EAAeC,KAAK,aAGtB,IAAIC,EAOJ,OALEA,EADEhD,EACe4C,EAAAA,cAACK,EAAAA,EAAgB,CAAC7C,OAAQA,EAAQ8C,GAAIlD,EAAWmD,YAAY,gBAE7DP,EAAAA,cAAA,OAAKQ,wBAAyB,CAAEC,OAAQtD,KAIzD6C,EAAAA,cAAA,OACEU,UAAS,aAAAC,OAAetD,EAAI,KAAAsD,OAAI3D,EAAW,KAAA2D,OAAIT,EAAeU,KAAK,MACnEX,IAAK1B,EACLsC,KAAK,QACL,cAAY,OACZC,MAAO,CAAEC,gBAAiBrD,IAEzB0C,EACAxC,GACEH,GACCuC,EAAAA,cAAA,UACE,aAAYnC,EAAKmD,cAAc,CAAEV,GAAI,gCACrCI,UAAU,8BACVrD,KAAK,SACL4D,QAAS,kBAAM9C,GAAsB,EAAK,IAKtD,EAEAtB,EAAkBqE,aAAe,CAC/BnE,UAAU,EACVC,YAAa,GACbC,eAAgB,GAChBE,QAAS,GACTC,UAAW,GACXC,KAAM,GACNH,QAAQ,EACRK,YAAa,mBACbC,OAAQ,CAAC,EACTC,iBAAiB,EACjBH,QAAS,kBAAM,CAAI,EACnBI,YAAa,GACbC,YAAawD,EAAAA,GACbvD,kBAAmB,MAGrBf,EAAkBuE,UAAY,CAC5BrE,SAAUsE,IAAAA,KACVrE,YAAaqE,IAAAA,OACbpE,eAAgBoE,IAAAA,OAChBlE,QAASkE,IAAAA,OACTjE,UAAWiE,IAAAA,OACXhE,KAAMgE,IAAAA,OACN/D,QAAS+D,IAAAA,KACTnE,OAAQmE,IAAAA,KACR9D,YAAa8D,IAAAA,OACb7D,OAAQ6D,IAAAA,SAAmBA,IAAAA,UAAoB,CAACA,IAAAA,OAAkBA,IAAAA,UAClE5D,gBAAiB4D,IAAAA,KACjB3D,YAAa2D,IAAAA,OACb1D,YAAa0D,IAAAA,OACbzD,kBAAmByD,IAAAA,SAGrB,U,24CCnKA,IAAQC,EAAajC,OAAOkC,mBAApBD,SAED,SAASE,IACd,I,IAAgEzD,G,GAAdE,EAAAA,EAAAA,UAAS,M,EAAK,E,k5BAAzDwD,EAAiB1D,EAAA,GAAE2D,EAAoB3D,EAAA,GAE9C,SAAS4D,EAAYC,GAQrB,IAAyBzE,EAPvBuE,GAOuBvE,EAPcyE,GAQvBC,EAAAA,EAAAA,EAAA,IAELC,EAAAA,EAAAA,IAAuB3E,EAAQmE,UAAYA,IAC3CnE,GAAO,IACVG,QAAS,WACPyE,IACI5E,EAAQG,SACVH,EAAQG,SAEZ,IAEF,KAlBN,CAEA,SAASyE,IACPL,EAAqB,KACvB,CAwBA,OAPAlC,EAAAA,EAAAA,YAAU,WACR,IAAMwC,GAAeC,EAAAA,EAAAA,MACjBD,GACFL,EAAYK,EAEhB,IAEO,CACLE,eAAgBT,EAChBE,YAAAA,EACAI,YAAAA,EAEJ,CCrCA,IAAMI,GAAqBC,EAAAA,EAAAA,IAAAA,ECC3B,SAA+BC,GAC7B,IAAAC,EAAqDd,IAA7CU,EAAcI,EAAdJ,eAAgBP,EAAWW,EAAXX,YAAaI,EAAWO,EAAXP,YAC/B9B,GAAMzB,EAAAA,EAAAA,SAAO+D,EAAAA,EAAAA,OAGbC,GAA8BC,EAAAA,EAAAA,cAClC,SAAAC,GACE,OAAOC,EAAAA,EAAAA,IAAmBD,KAAeC,EAAAA,EAAAA,IAAmBT,EAC9D,GACA,CAACA,IAGGU,GAAgBH,EAAAA,EAAAA,cACpB,SAAAI,GACE,IAAMH,EAAaG,EAAMC,OACpBZ,IAAkBM,EAA4BE,IACjDf,EAAYe,EAEhB,GACA,CAACR,EAAgBM,EAA6Bb,IAkBhD,OAfAnC,EAAAA,EAAAA,YAAU,WACR,IAAMuD,EAAqB9C,EAAIJ,QAO/B,OANAkD,SAAAA,EAAoBjD,iBAAiBkD,EAAAA,GAAoBJ,GACzDG,SAAAA,EAAoBjD,iBAAiBmD,EAAAA,GAAoBlB,IAEzDmB,EAAAA,EAAAA,MACA7D,OAAOS,kBAAiBqD,EAAAA,EAAAA,KAAU,WAAa,eAAgBC,EAAAA,IAExD,WACLL,SAAAA,EAAoBhD,oBAAoBiD,EAAAA,GAAoBJ,GAC5DG,SAAAA,EAAoBhD,oBAAoBkD,EAAAA,GAAoBlB,GAC5D1C,OAAOU,qBAAoBoD,EAAAA,EAAAA,KAAU,WAAa,eAAgBC,EAAAA,GACpE,CACF,GAAG,CAACrB,EAAaa,IAEV5C,EAAAA,cAACnD,EAAsBqF,EAChC,KDrCAmB,EAAAA,EAAAA,IAAWd,EAAAA,EAAAA,OAAyBe,OAAOtD,EAAAA,cAACmC,EAAkB,M,wDERjDgB,EAAQ,WAAH,OAASI,UAAUC,UAAUC,MAAM,gBAAgB,C","sources":["webpack://fitflop-storefront/./core-app/grails-app/assets/javascripts/app/globalMessages/globalMessagesApp.js","webpack://fitflop-storefront/./core-app/grails-app/assets/javascripts/app/globalMessages/globalMessagesHooks.js","webpack://fitflop-storefront/./core-app/grails-app/assets/javascripts/app/globalMessages/globalMessagesRoot.js","webpack://fitflop-storefront/./core-app/grails-app/assets/javascripts/app/globalMessages/globalMessagesService.js","webpack://fitflop-storefront/./core-app/grails-app/assets/javascripts/app/utils/browserHelpers.js"],"sourcesContent":["import React, { useRef, useState, useEffect, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage, useIntl } from 'react-intl';\nimport { getElementHeightNoPadding } from 'app/utils/helpers';\nimport { MAX_DISPLAY_TIME } from './globalMessagesConstants';\nimport './alerts.scss';\n\nconst GlobalMessagesApp = ({\n autoHide,\n customClass,\n headerSelector,\n sticky,\n message,\n messageId,\n type,\n onClose,\n stickyClass,\n values,\n showCloseButton,\n customColor,\n displayTime,\n customCloseButton,\n}) => {\n const intl = useIntl();\n const [isFadeOutInProcess, setIsFadeOutInProcess] = useState(false);\n const [isSticking, setIsSticking] = useState(false);\n\n const globalMessageDIV = useRef(null);\n\n const isOpen = !!message || !!messageId;\n\n const headerHeight = useMemo(() => {\n let height = 0;\n if (headerSelector) {\n [...document.querySelectorAll(headerSelector)].forEach(headerElement => {\n height += getElementHeightNoPadding(headerElement);\n });\n }\n return height;\n }, [headerSelector]);\n\n function handleTransition() {\n if (isFadeOutInProcess) {\n setIsFadeOutInProcess(false);\n onClose();\n }\n }\n\n function handleScrollEvent() {\n const shouldBeSticking = window.pageYOffset > headerHeight;\n if (isSticking !== shouldBeSticking) {\n setIsSticking(shouldBeSticking);\n }\n }\n\n function closeAlertBox() {\n setIsFadeOutInProcess(true);\n }\n\n useEffect(() => {\n let timer = null;\n if (autoHide) {\n timer = window.setTimeout(closeAlertBox, displayTime * 1000);\n }\n\n return () => window.clearTimeout(timer);\n }, [autoHide, displayTime]);\n\n useEffect(() => {\n const globalMessageDivEl = globalMessageDIV.current;\n if (sticky && isOpen) {\n document.addEventListener('scroll', handleScrollEvent);\n }\n\n globalMessageDivEl.addEventListener('transitionend', handleTransition);\n\n handleScrollEvent();\n\n return () => {\n document.removeEventListener('scroll', handleScrollEvent);\n globalMessageDivEl.removeEventListener('transitionend', handleTransition);\n };\n });\n\n if (!isOpen) return
;\n\n const dynamicClasses = [];\n\n if (sticky) {\n dynamicClasses.push('is-sticky');\n if (isSticking) {\n dynamicClasses.push(stickyClass);\n }\n }\n\n if (isFadeOutInProcess) {\n dynamicClasses.push('is-closing');\n } else if (isOpen) {\n dynamicClasses.push('is-open');\n } else {\n dynamicClasses.push('is-closed');\n }\n\n let messageElement = null;\n if (messageId) {\n messageElement = ;\n } else {\n messageElement =
;\n }\n\n return (\n \n {messageElement}\n {customCloseButton ||\n (showCloseButton && (\n setIsFadeOutInProcess(true)}\n />\n ))}\n
\n );\n};\n\nGlobalMessagesApp.defaultProps = {\n autoHide: false,\n customClass: '',\n headerSelector: '',\n message: '',\n messageId: '',\n type: '',\n sticky: false,\n stickyClass: 'is-sticky--fixed',\n values: {},\n showCloseButton: true,\n onClose: () => true,\n customColor: '',\n displayTime: MAX_DISPLAY_TIME,\n customCloseButton: null,\n};\n\nGlobalMessagesApp.propTypes = {\n autoHide: PropTypes.bool,\n customClass: PropTypes.string,\n headerSelector: PropTypes.string,\n message: PropTypes.string,\n messageId: PropTypes.string,\n type: PropTypes.string,\n onClose: PropTypes.func,\n sticky: PropTypes.bool,\n stickyClass: PropTypes.string,\n values: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])),\n showCloseButton: PropTypes.bool,\n customColor: PropTypes.string,\n displayTime: PropTypes.number,\n customCloseButton: PropTypes.element,\n};\n\nexport default GlobalMessagesApp;\n","import { useEffect, useState } from 'react';\nimport { getFlashStorageRecord, getPageSpecificOptions } from './globalMessagesUtils';\n\nconst { pageType } = window.inlineGlobalConfig;\n\nexport function useServiceBootstrapper() {\n const [messageDescriptor, setMessageDescriptor] = useState(null);\n\n function showMessage(originalDescriptor) {\n setMessageDescriptor(populatePresets(originalDescriptor));\n }\n\n function hideMessage() {\n setMessageDescriptor(null);\n }\n\n function populatePresets(message) {\n return message\n ? {\n ...getPageSpecificOptions(message.pageType || pageType),\n ...message,\n onClose: () => {\n hideMessage();\n if (message.onClose) {\n message.onClose();\n }\n },\n }\n : null;\n }\n\n useEffect(() => {\n const flashMessage = getFlashStorageRecord();\n if (flashMessage) {\n showMessage(flashMessage);\n }\n });\n\n return {\n currentMessage: messageDescriptor,\n showMessage,\n hideMessage,\n };\n}\n","import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport providerHOC from 'app/utils/providerHOC/providerHOC';\nimport GlobalMessagesService from './globalMessagesService';\nimport { getGlobalMessagesRoot } from './globalMessagesUtils';\n\nconst GlobalMessagesRoot = providerHOC()(GlobalMessagesService);\n\ncreateRoot(getGlobalMessagesRoot()).render();\n","import React, { useCallback, useEffect, useRef } from 'react';\nimport { isIOS } from 'app/utils/browserHelpers';\nimport GlobalMessagesApp from './globalMessagesApp';\nimport { useServiceBootstrapper } from './globalMessagesHooks';\nimport { SHOW_MESSAGE_EVENT, HIDE_MESSAGE_EVENT } from './globalMessagesConstants';\nimport { getGlobalMessagesRoot, getMessagePriority, onServiceStart, onServiceStop } from './globalMessagesUtils';\n\nfunction GlobalMessagesService(props) {\n const { currentMessage, showMessage, hideMessage } = useServiceBootstrapper(props);\n const ref = useRef(getGlobalMessagesRoot());\n\n // lower value means higher priority\n const shouldReplaceCurrentMessage = useCallback(\n newMessage => {\n return getMessagePriority(newMessage) <= getMessagePriority(currentMessage);\n },\n [currentMessage]\n );\n\n const onShowMessage = useCallback(\n event => {\n const newMessage = event.detail;\n if (!currentMessage || shouldReplaceCurrentMessage(newMessage)) {\n showMessage(newMessage);\n }\n },\n [currentMessage, shouldReplaceCurrentMessage, showMessage]\n );\n\n useEffect(() => {\n const globalMessagesRoot = ref.current;\n globalMessagesRoot?.addEventListener(SHOW_MESSAGE_EVENT, onShowMessage);\n globalMessagesRoot?.addEventListener(HIDE_MESSAGE_EVENT, hideMessage);\n\n onServiceStart();\n window.addEventListener(isIOS() ? 'pagehide' : 'beforeunload', onServiceStop);\n\n return () => {\n globalMessagesRoot?.removeEventListener(SHOW_MESSAGE_EVENT, onShowMessage);\n globalMessagesRoot?.removeEventListener(HIDE_MESSAGE_EVENT, hideMessage);\n window.removeEventListener(isIOS() ? 'pagehide' : 'beforeunload', onServiceStop);\n };\n }, [hideMessage, onShowMessage]);\n\n return ;\n}\n\nexport default GlobalMessagesService;\n","export const isIOS = () => navigator.userAgent.match(/(iPhone|iPad)/);\n"],"names":["GlobalMessagesApp","_ref","autoHide","customClass","headerSelector","sticky","message","messageId","type","onClose","stickyClass","values","showCloseButton","customColor","displayTime","customCloseButton","intl","useIntl","_useState2","_slicedToArray","useState","isFadeOutInProcess","setIsFadeOutInProcess","_useState4","isSticking","setIsSticking","globalMessageDIV","useRef","isOpen","headerHeight","useMemo","height","document","querySelectorAll","forEach","headerElement","getElementHeightNoPadding","handleTransition","handleScrollEvent","shouldBeSticking","window","pageYOffset","closeAlertBox","useEffect","timer","setTimeout","clearTimeout","globalMessageDivEl","current","addEventListener","removeEventListener","React","ref","dynamicClasses","push","messageElement","FormattedMessage","id","description","dangerouslySetInnerHTML","__html","className","concat","join","role","style","backgroundColor","formatMessage","onClick","defaultProps","MAX_DISPLAY_TIME","propTypes","PropTypes","pageType","inlineGlobalConfig","useServiceBootstrapper","messageDescriptor","setMessageDescriptor","showMessage","originalDescriptor","_objectSpread","getPageSpecificOptions","hideMessage","flashMessage","getFlashStorageRecord","currentMessage","GlobalMessagesRoot","providerHOC","props","_useServiceBootstrapp","getGlobalMessagesRoot","shouldReplaceCurrentMessage","useCallback","newMessage","getMessagePriority","onShowMessage","event","detail","globalMessagesRoot","SHOW_MESSAGE_EVENT","HIDE_MESSAGE_EVENT","onServiceStart","isIOS","onServiceStop","createRoot","render","navigator","userAgent","match"],"sourceRoot":""}