{"version":3,"file":"localizationApp.js","mappings":"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","sources":["webpack://pizza-hut/webpack/runtime/chunk loaded","webpack://pizza-hut/./src/shared/utils.ts","webpack://pizza-hut/./src/shared/helpers/routing-helpers.ts","webpack://pizza-hut/./src/shared/types.ts","webpack://pizza-hut/./src/shared/helpers/index.ts","webpack://pizza-hut/./src/shared/api/axios.ts","webpack://pizza-hut/./src/shared/store/static-content/static-content.actions.ts","webpack://pizza-hut/./src/shared/components/loader.component.tsx","webpack://pizza-hut/./src/shared/components/toast.component.tsx","webpack://pizza-hut/./src/shared/tools/api-response-wrapper.ts","webpack://pizza-hut/./src/shared/store/global/global.actions.ts","webpack://pizza-hut/./src/apps/LocalizationApp/Components/stores-list.component.tsx","webpack://pizza-hut/./src/shared/components/suggestions.component.tsx","webpack://pizza-hut/./src/hooks/useShowDelay.ts","webpack://pizza-hut/./src/apps/LocalizationApp/Components/address-input.component.tsx","webpack://pizza-hut/./src/apps/LocalizationApp/Containers/info-panel.container.tsx","webpack://pizza-hut/./src/apps/LocalizationApp/Components/localization-addition.component.tsx","webpack://pizza-hut/./src/apps/LocalizationApp/Components/last-used-addresses.component.tsx","webpack://pizza-hut/./src/shared/validators/index.ts","webpack://pizza-hut/./src/apps/LocalizationApp/Validators/address.validator.ts","webpack://pizza-hut/./src/typings/web-bridge.types.ts","webpack://pizza-hut/./src/apps/LocalizationApp/types/localization.types.ts","webpack://pizza-hut/./src/apps/LocalizationApp/Store/actions.ts","webpack://pizza-hut/./src/apps/LocalizationApp/helpers/store-status.ts","webpack://pizza-hut/./src/apps/LocalizationApp/Containers/localization-search.container.tsx","webpack://pizza-hut/./src/hooks/useVisible.ts","webpack://pizza-hut/./src/shared/components/modal.compontent.tsx","webpack://pizza-hut/./src/shared/components/select-time.component.tsx","webpack://pizza-hut/./src/shared/tools/uuid-generator.ts","webpack://pizza-hut/./src/apps/LocalizationApp/Components/store-unavailable.component.tsx","webpack://pizza-hut/./src/apps/LocalizationApp/Containers/choose-time.container.tsx","webpack://pizza-hut/./src/apps/LocalizationApp/Components/order-type-switch.component.tsx","webpack://pizza-hut/./src/shared/components/change-address-alert.component.tsx","webpack://pizza-hut/./src/apps/LocalizationApp/Components/change-store.component.tsx","webpack://pizza-hut/./src/shared/components/single-action-modal.component.tsx","webpack://pizza-hut/./src/hooks/useKeyPress.ts","webpack://pizza-hut/./src/apps/LocalizationApp/Containers/store-status-info.container.tsx","webpack://pizza-hut/./src/apps/LocalizationApp/Store/static-content/localization-static-content.actions.ts","webpack://pizza-hut/./src/apps/LocalizationApp/Containers/search-window.container.tsx","webpack://pizza-hut/./src/shared/store/static-content/static-content.reducer.ts","webpack://pizza-hut/./src/shared/store/global/global.reducer.ts","webpack://pizza-hut/./src/apps/LocalizationApp/Store/reducers.ts","webpack://pizza-hut/./src/apps/LocalizationApp/Store/static-content/localization-static-content.reducer.ts","webpack://pizza-hut/./src/apps/LocalizationApp/Store/index.ts","webpack://pizza-hut/./src/apps/LocalizationApp/index.tsx","webpack://pizza-hut/./src/apps/LocalizationApp/App.tsx","webpack://pizza-hut/./src/shared/helpers/mobile-app-helper.ts","webpack://pizza-hut/webpack/bootstrap","webpack://pizza-hut/webpack/runtime/compat get default export","webpack://pizza-hut/webpack/runtime/define property getters","webpack://pizza-hut/webpack/runtime/global","webpack://pizza-hut/webpack/runtime/hasOwnProperty shorthand","webpack://pizza-hut/webpack/runtime/make namespace object","webpack://pizza-hut/webpack/runtime/runtimeId","webpack://pizza-hut/webpack/runtime/jsonp chunk loading","webpack://pizza-hut/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","import { compose } from 'redux';\r\n\r\nconst composeEnhancers = (process.env.NODE_ENV === 'development' && window && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || compose;\r\n\r\nexport default composeEnhancers;\r\n\r\nexport interface LoadReduxFromLocalStorageParams {\r\n state: TState;\r\n key: string;\r\n}\r\nexport function LoadReduxFromLocalStorage({ state, key }: LoadReduxFromLocalStorageParams): TState {\r\n try {\r\n const sessionItem = localStorage.getItem(key);\r\n\r\n if (!sessionItem) {\r\n return state;\r\n }\r\n\r\n return {\r\n ...state,\r\n ...JSON.parse(sessionItem),\r\n };\r\n } catch (ex) {\r\n console.debug(`Problem with loading state from session storage for key ${key}`);\r\n console.log(ex);\r\n }\r\n\r\n return state;\r\n}\r\n\r\nexport function LoadReduxItemFromLocalStorage(defaultValue: T, key: string): T {\r\n try {\r\n const sessionItem = localStorage.getItem(key);\r\n\r\n if (!sessionItem) {\r\n return defaultValue;\r\n }\r\n\r\n return JSON.parse(sessionItem);\r\n } catch (ex) {\r\n console.debug(`Problem with loading redux state item from session storage for key ${key}`);\r\n console.log(ex);\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function storeDataInCookie(key: string, value: T, expirationDate?: Date): void {\r\n const cookieValue = `${encodeURIComponent(String(value))}; path=/${\r\n expirationDate ? `; expires=${expirationDate.toUTCString()}` : ''\r\n }`;\r\n document.cookie = `${key}=${cookieValue}`;\r\n}\r\n\r\nexport function removeDataFromCookie(key: string) {\r\n document.cookie = `${encodeURIComponent(key)}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;\r\n}\r\n\r\nexport function LoadReduxFromCookie({ state, key }: LoadReduxFromLocalStorageParams): TState {\r\n try {\r\n const cookieState = document.cookie.split('; ')?.find((row) => row.startsWith(`${key}=`));\r\n\r\n if (!cookieState) {\r\n return state;\r\n }\r\n\r\n const decodedCookieState = decodeURIComponent(cookieState).split('=')[1].split('; ')[0];\r\n\r\n return {\r\n ...state,\r\n ...JSON.parse(decodedCookieState),\r\n };\r\n } catch (ex) {\r\n console.debug(`Problem with loading state from session storage for key ${key}`);\r\n console.log(ex);\r\n }\r\n\r\n return state;\r\n}\r\n\r\nexport function cookieExists(key: string) {\r\n const cookieData = document.cookie.split('; ')?.find((row) => row.startsWith(`${key}=`));\r\n if (!cookieData) return false;\r\n return true;\r\n}\r\nexport function removeBasketFromLocalStorage() {\r\n localStorage.removeItem('basket');\r\n localStorage.removeItem('addressWizzard');\r\n}\r\n\r\nexport function capitalizeFirstLetter(value?: string): string {\r\n if (!value) return '';\r\n return value.charAt(0).toUpperCase() + value.slice(1);\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nimport { removeDataFromCookie } from 'shared/utils';\r\n\r\nexport const redirectToHomePage = (): void => {\r\n window.location.href = hostURL();\r\n};\r\n\r\nexport const logout = (): void => {\r\n removeDataFromCookie('pizza-hut-access-token');\r\n window.location.href = `${hostURL()}account/sign-out`;\r\n};\r\n\r\nexport const hostURL = (): string => {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const url = (document.getElementById('baseUrl') as any).value;\r\n return `${url}/`;\r\n};\r\nexport const appCulture = (): string => {\r\n const culture = (document.getElementById('requestedCulture') as any).value;\r\n return culture;\r\n};\r\n\r\nconst getClientURL = (): string => {\r\n const host = hostURL();\r\n const href = document.getElementsByTagName('base')[0].getAttribute('href');\r\n return host + href;\r\n};\r\n\r\nexport const getRedirectURL = (href: string): string => {\r\n const url = `${getClientURL()}/${href}`;\r\n return url;\r\n};\r\n\r\nexport const getOtherAppRedirectURL = (href: string): string => {\r\n const url = hostURL() + href;\r\n return url;\r\n};\r\n\r\nexport const redirectToOtherAppURL = (href: string): void => {\r\n const url = hostURL() + href;\r\n window.location.href = url;\r\n};\r\n\r\nexport const redirectToExternalURL = (href: string): void => {\r\n window.location.href = href;\r\n};\r\n\r\nexport const redirectToURL = (href: string): void => {\r\n const url = hostURL() + href;\r\n window.location.href = url;\r\n};\r\n\r\nexport const redirectToNotFound = (): void => {\r\n const url = `${hostURL()}not-found`;\r\n window.location.href = url;\r\n};\r\n\r\nexport const backToHistory = (): void => {\r\n // eslint-disable-next-line no-restricted-globals\r\n history.back();\r\n};\r\nexport const redirectToMainPage = (): void => {\r\n window.location.href = hostURL();\r\n};\r\n\r\nexport const parametersToObject = (args: string): any => {\r\n const value = args.substring(1, args.length);\r\n const obj: any = {};\r\n\r\n if (value == null || value === undefined) return obj;\r\n\r\n const splitOperator = '&';\r\n const equalOperator = '=';\r\n const parameters = value.split(splitOperator);\r\n\r\n for (let index = 0; index < parameters.length; index++) {\r\n const element = parameters[index];\r\n const keyAndValueArray = element.split(equalOperator);\r\n // eslint-disable-next-line prefer-destructuring\r\n obj[keyAndValueArray[0]] = keyAndValueArray[1];\r\n }\r\n\r\n return obj;\r\n};\r\n\r\nexport const openNewWindow = (href: string): void => {\r\n const url = hostURL() + href;\r\n window.open(url);\r\n};\r\n","import { openNewWindow } from './helpers/routing-helpers';\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable no-extend-native */\r\n/* eslint-disable func-names */\r\ndeclare global {\r\n interface Array {\r\n orderByDesc(propertyName: string): void;\r\n orderByAsc(propertyName: string): void;\r\n removeDuplicates(): any[];\r\n }\r\n}\r\n\r\nArray.prototype.orderByAsc = function (propertyName: string): void {\r\n this.sort((a, b) => {\r\n return a[propertyName] - b[propertyName];\r\n });\r\n};\r\nArray.prototype.orderByDesc = function (propertyName: string): void {\r\n this.sort((a, b) => {\r\n return b[propertyName] - a[propertyName];\r\n });\r\n};\r\nArray.prototype.removeDuplicates = function (): any[] {\r\n const removedDuplicates = new Set(this);\r\n const arrayWithoutDuplicates = Array.from(removedDuplicates);\r\n return arrayWithoutDuplicates;\r\n};\r\n\r\nexport interface StaticContent {\r\n messages: {\r\n tooltipsGeoDisabled: string;\r\n tooltipsFillAddress: string;\r\n tooltipsFillStreetNumber: string;\r\n tooltipsAdressConfirmation: string;\r\n errorMessagesWrongAddress: string;\r\n errorMessagesWrongStreetNumber: string;\r\n errorMessagesImpossibleToLocateDelivery: string;\r\n errorMessagesImpossibleToLocatePickup: string;\r\n errorMessagesNoStores: string;\r\n errorModalTitle: string;\r\n errorModalDescription: string;\r\n\r\n // TODO update to return not as a part of messages\r\n apiKey: string;\r\n };\r\n simplifiedFooter: {\r\n Name: string;\r\n Url: string;\r\n OpenInNewWindow?: { Value: boolean };\r\n }[];\r\n configuration: {\r\n hideCouponsScratchedPrices: boolean;\r\n }\r\n}\r\n\r\nexport interface PropertyChangedPayload {\r\n name: string;\r\n value: string;\r\n}\r\n\r\nexport interface PropertyChangedEventArgs {\r\n target: {\r\n name: string;\r\n value: T;\r\n };\r\n}\r\n\r\nexport interface ServerSideValidationPayload {\r\n fieldName: string;\r\n message: string;\r\n status: number;\r\n errorCode: string;\r\n}\r\n\r\nexport interface GeneralServerError {\r\n succeeded: boolean;\r\n status: number;\r\n errorCode: string;\r\n contentMessageForErrorFound: boolean;\r\n contextDescription: string;\r\n errorDescription: string;\r\n errorTranslations: {\r\n title: string;\r\n description: string;\r\n },\r\n detail: string;\r\n}\r\n\r\nexport interface PlaceOrderError extends GeneralServerError {\r\n entitiesErrors: {\r\n entityIdentifier: string;\r\n entityType: string;\r\n errorCode: string;\r\n }[];\r\n}\r\n\r\nexport interface LoaderPayload {\r\n value: boolean;\r\n}\r\n\r\nexport enum UserMessageType {\r\n INFO,\r\n WARNING,\r\n ERROR,\r\n}\r\nexport interface UserMessage {\r\n type: UserMessageType;\r\n message: string;\r\n status?: number;\r\n}\r\n\r\nexport enum OrderDistributionType {\r\n Delivery = 'DELIVERY',\r\n Pickup = 'PICKUP',\r\n}\r\n\r\nexport interface ValidatorItem {\r\n fn(value: string): boolean;\r\n message: string;\r\n messageType: UserMessageType;\r\n}\r\n\r\nexport interface ValidationResult {\r\n messages: UserMessage[];\r\n success: boolean;\r\n}\r\n\r\nexport interface AppCookies {\r\n 'pizza-hut-access-token': {\r\n email: string;\r\n phone: string;\r\n };\r\n}\r\n\r\nexport interface SupportedCulture {\r\n isDefault: boolean;\r\n id: string;\r\n fullName: string;\r\n shortName: string;\r\n}\r\n\r\nexport interface ModalProps {\r\n submitCallbackFn?(): void;\r\n cancelCallbackFn(): void;\r\n}\r\n\r\nexport enum OrderStatusEnum {\r\n CreatingOrder = 0,\r\n AwaitingExternalPayment = 1,\r\n PaymentSettledButNotYetSuppliedToStore = 2,\r\n ReceivedByStore = 3,\r\n InOven = 4,\r\n ReadyForDispatch = 5,\r\n OutForDelivery = 6,\r\n Completed = 7,\r\n Cancelled = 8,\r\n ReceivedButFutureOrder = 9,\r\n ExternalPaymentFailed = 10,\r\n AwaitingExternalValidation = 11,\r\n ExternalValidationFailed = 12,\r\n AwaitingExternalCreation = 13,\r\n ExternalCreationFailed = 14,\r\n ExternalCreationTimedOut = 15,\r\n}\r\n\r\nexport enum AppReviewTarget {\r\n NATIVE_STORE = 'NATIVE_STORE',\r\n DB = 'DB'\r\n}\r\n\r\nexport interface AppConfiguration {\r\n maxChangeableToppingsForEditPizza: number;\r\n maxExtraToppingsForEditPizza: number;\r\n maxToppingsForCustomPizza: number;\r\n appReviewsEnabled: boolean;\r\n positiveReviewsTarget: AppReviewTarget;\r\n negativeReviewsTarget: AppReviewTarget;\r\n}\r\n\r\nexport enum ApplicationType {\r\n MOBILE = 'Mobile',\r\n WEBSITE = 'Website'\r\n}\r\n","/* eslint-disable no-restricted-globals */\r\nimport * as _routingHelpers from './routing-helpers';\r\n\r\n// exports\r\nexport const RoutingHelpers = _routingHelpers;\r\n\r\nexport const DateTime = {\r\n now: (): string => {\r\n const date = new Date();\r\n const timestamp = `${date.getFullYear()}-${\r\n date.getMonth() + 1\r\n }-${date.getDate()} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`;\r\n return timestamp;\r\n },\r\n formatTimeHHMM: (date: Date): string => {\r\n const hour = date.getHours().toString().length === 1 ? `0${date.getHours()}` : date.getHours().toString();\r\n const minutes = date.getMinutes().toString().length === 1 ? `0${date.getMinutes()}` : date.getMinutes().toString();\r\n\r\n return `${hour}:${minutes}`;\r\n },\r\n // method to format DD/MM/YYYY to Date object\r\n formatToDateObject: (date: string): Date | undefined => {\r\n if (!date || date.length === 0) return undefined;\r\n const year = date.slice(6);\r\n const month = date.slice(3, 5);\r\n const day = date.slice(0, 2);\r\n\r\n return new Date(`${year}-${month}-${day}`);\r\n },\r\n};\r\n\r\nexport const StringHelper = {\r\n GetFirstNWords: (sourceString: string, n: number): string => {\r\n return sourceString && typeof n === 'number' ? sourceString.split(' ').slice(0, n).join(' ') : '';\r\n },\r\n OmitFirstNWords: (sourceString: string, n: number): string => {\r\n if (sourceString && typeof n === 'number') {\r\n const words = sourceString.split(' ');\r\n return words.slice(n, words.length).join(' ');\r\n }\r\n return '';\r\n },\r\n};\r\n\r\nexport const PaymentHelper = {\r\n getCurrencyISOCode(): string {\r\n const currency = (document.getElementById('defaultCurrency') as any).value;\r\n return currency;\r\n },\r\n getDefaultCulture(): string {\r\n const culture = (document.getElementById('defaultCulture') as any).value;\r\n return culture;\r\n },\r\n formatToDisplay(value: number): string {\r\n return new Intl.NumberFormat(this.getDefaultCulture(), { style: 'currency', currency: this.getCurrencyISOCode() }).format(\r\n value,\r\n );\r\n },\r\n formatStringToDisplay(value: string): string {\r\n const valAsNumber = parseFloat(value.replace(',', '.'));\r\n if (isNaN(valAsNumber)) return '';\r\n return this.formatToDisplay(valAsNumber);\r\n },\r\n};\r\n\r\n// eslint-disable-next-line\r\nexport const FieldsToBooleanCondition = (obj: any): boolean => {\r\n const keys = Object.keys(obj);\r\n let result = false;\r\n keys.forEach((key) => {\r\n if (obj[key] !== false) result = obj[key] !== false;\r\n });\r\n return result;\r\n};\r\n","import axios, { AxiosInstance } from 'axios';\r\n\r\nconst baseURL = (document.getElementById('baseUrl') as any).value;\r\n\r\nconst instance: AxiosInstance = axios.create({\r\n baseURL,\r\n});\r\n\r\nexport default instance;\r\n","import { AxiosResponse } from 'axios';\r\nimport { Action } from 'redux';\r\nimport { ThunkAction } from 'redux-thunk';\r\nimport Axios from '../../api/axios';\r\nimport { StaticContent } from '../../types';\r\n\r\nexport enum StaticContentActionTypes {\r\n SET_STATIC_CONTENT = '[Shared.StaticContent] SET_STATIC_CONTENT',\r\n SET_SIMPLIFIED_FOOTER = '[Shared.StaticContent] SET_SIMPLIFIED_FOOTER',\r\n SET_CONFIGURATION = '[Shared.StaticContent] SET_CONFIGURATION'\r\n}\r\n\r\ninterface SetStaticContent {\r\n type: StaticContentActionTypes.SET_STATIC_CONTENT;\r\n payload: StaticContent['messages'];\r\n}\r\ninterface SetSimplifiedFooter {\r\n type: StaticContentActionTypes.SET_SIMPLIFIED_FOOTER;\r\n payload: StaticContent['simplifiedFooter'];\r\n}\r\n\r\ninterface SetConfiguration {\r\n type: StaticContentActionTypes.SET_CONFIGURATION;\r\n payload: StaticContent['configuration'];\r\n}\r\n\r\nexport const getStaticContent =\r\n (): ThunkAction =>\r\n async (dispatch): Promise => {\r\n try {\r\n const value: AxiosResponse = await Axios.get('api/static-content');\r\n dispatch({\r\n type: StaticContentActionTypes.SET_STATIC_CONTENT,\r\n payload: value.data,\r\n });\r\n } catch (err) {\r\n console.error(err);\r\n throw err;\r\n }\r\n };\r\n\r\nexport const getSimplifiedFooterStaticContent =\r\n (): ThunkAction =>\r\n async (dispatch): Promise => {\r\n try {\r\n const footer: AxiosResponse = await Axios.get('api/static-content/simplified-footer');\r\n dispatch({ type: StaticContentActionTypes.SET_SIMPLIFIED_FOOTER, payload: footer.data });\r\n } catch (err) {\r\n console.error(err);\r\n throw err;\r\n }\r\n };\r\n\r\nexport const getCmsConfiguration =\r\n (): ThunkAction =>\r\n async (dispatch): Promise => {\r\n try {\r\n const value: AxiosResponse = await Axios.get('api/static-content/cms-configuration');\r\n dispatch({\r\n type: StaticContentActionTypes.SET_CONFIGURATION,\r\n payload: value.data,\r\n });\r\n } catch (err) {\r\n console.error(err);\r\n throw err;\r\n }\r\n };\r\n\r\nexport type StaticContentActions = SetStaticContent | SetSimplifiedFooter | SetConfiguration;\r\n","import React, { useEffect, useState } from 'react';\r\n\r\nexport interface LoaderProps {\r\n text?: string;\r\n fullScreen?: boolean;\r\n}\r\n\r\nconst Loader: React.FC = ({ text, fullScreen }) => {\r\n const mobile = window.S4DWebBridge();\r\n const delay = 1000;\r\n const [show, setShowLoader] = useState(false);\r\n\r\n useEffect(() => {\r\n setShowLoader(false);\r\n mobile && mobile?.hideLoader();\r\n const delayedLoader = setTimeout(() => {\r\n mobile && mobile?.showLoader();\r\n setShowLoader(true);\r\n }, delay);\r\n return () => {\r\n clearTimeout(delayedLoader);\r\n mobile && mobile?.hideLoader();\r\n setShowLoader(false);\r\n };\r\n }, []);\r\n\r\n if (!show) return null;\r\n return (\r\n \r\n \r\n {text && (\r\n \r\n {text}\r\n \r\n )}\r\n \r\n );\r\n};\r\nexport default Loader;\r\n","import React from 'react';\r\n\r\ninterface ToastProps {\r\n show: boolean;\r\n message: string;\r\n onClose(): void;\r\n}\r\n\r\nconst Toast: React.FC = ({ message, onClose, show }) => {\r\n return (\r\n \r\n {message}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Toast;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Dispatch } from 'redux';\r\nimport { UserMessage, UserMessageType } from 'shared/types';\r\nimport { GlobalActionTypes } from '../store/global/global.actions';\r\n\r\ninterface ResponseWrapperArgs {\r\n action(): Promise;\r\n dispatch: Dispatch;\r\n errMessage?: UserMessage;\r\n allowedErr?: {\r\n statusArr?: number[];\r\n errorCodes?: string[];\r\n action?(err: any): void;\r\n };\r\n errorCallback?(err: any): Promise;\r\n withoutGlobalNotification?: boolean;\r\n}\r\n\r\nasync function ResponseWrapper({\r\n action,\r\n dispatch,\r\n errMessage,\r\n allowedErr,\r\n errorCallback,\r\n withoutGlobalNotification = false,\r\n}: ResponseWrapperArgs): Promise {\r\n let message = errMessage;\r\n try {\r\n dispatch({\r\n type: GlobalActionTypes.CLEAR_MESSAGES,\r\n });\r\n return await action();\r\n } catch (error: any) {\r\n if (allowedErr?.statusArr?.includes(error.response.status)) {\r\n allowedErr.action && allowedErr.action(error);\r\n return undefined;\r\n }\r\n if (allowedErr?.errorCodes?.includes(error.response.data.errorCode)) {\r\n allowedErr.action && allowedErr.action(error);\r\n return undefined;\r\n }\r\n if (errMessage == null || errMessage === undefined) {\r\n const { errorCode, status } = error.response.data;\r\n\r\n message = {\r\n message: errorCode || 'Server error.',\r\n type: UserMessageType.ERROR,\r\n status,\r\n };\r\n }\r\n\r\n if (!withoutGlobalNotification) {\r\n dispatch({ type: GlobalActionTypes.SET_MESSAGES, payload: [message] });\r\n }\r\n\r\n console.error(error);\r\n\r\n if (errorCallback) {\r\n return errorCallback(error);\r\n }\r\n dispatch({ type: GlobalActionTypes.SET_LOADER_STATE, payload: false });\r\n dispatch({ type: GlobalActionTypes.SHOW_UNHANDLED_ERROR_MODAL, payload: true });\r\n }\r\n}\r\n\r\nexport default ResponseWrapper;\r\n","/* eslint-disable no-use-before-define */\r\nimport { ApplicationState } from 'apps/LocalizationApp/Store';\r\nimport { Action, Dispatch } from 'redux';\r\nimport { ThunkAction } from 'redux-thunk';\r\nimport { FormValidatorHandler } from 'shared/validators';\r\nimport { logout } from 'shared/helpers/routing-helpers';\r\nimport axios from 'shared/api/axios';\r\nimport { PushNotificationsProvider } from 'typings/web-bridge.types';\r\nimport ResponseWrapper from 'shared/tools/api-response-wrapper';\r\nimport { AxiosResponse } from 'axios';\r\nimport { UserMessage, UserMessageType, LoaderPayload, SupportedCulture, AppConfiguration } from '../../types';\r\n\r\nexport enum GlobalActionTypes {\r\n SET_MESSAGES = '[Shared.Global] SET_MESSAGES',\r\n CLEAR_MESSAGES = '[Shared.Global] CLEAR_MESSAGES',\r\n SET_USER_STATUS = '[Shared.Global] SET_USER_STATUS',\r\n SET_LOADER_STATE = '[Shared.Global] SET_LOADER_STATE',\r\n SHOW_UNHANDLED_ERROR_MODAL = '[Shared.Global] SHOW_UNHANDLED_ERROR_MODAL',\r\n SET_SUPPORTED_CULTURES = '[Shared.Global] SET_SUPPORTED_CULTURES',\r\n SET_APP_CONFIGURATION = '[Shared.Global] SET_APP_CONFIGURATION',\r\n}\r\n\r\nexport interface SetMessages {\r\n type: GlobalActionTypes.SET_MESSAGES;\r\n payload: UserMessage[];\r\n}\r\n\r\nexport interface ClearMessages {\r\n type: GlobalActionTypes.CLEAR_MESSAGES;\r\n}\r\n\r\nexport interface SetSupportedCultures {\r\n type: GlobalActionTypes.SET_SUPPORTED_CULTURES;\r\n payload: SupportedCulture[];\r\n}\r\nexport interface SetLoaderState {\r\n type: GlobalActionTypes.SET_LOADER_STATE;\r\n payload: LoaderPayload;\r\n}\r\n\r\nexport interface SetShowUnhandledError {\r\n type: GlobalActionTypes.SHOW_UNHANDLED_ERROR_MODAL;\r\n payload: boolean;\r\n}\r\n\r\ninterface SetUserStatusPayload {\r\n signedin: boolean;\r\n}\r\n\r\ninterface SetUserStatus extends Action {\r\n type: GlobalActionTypes.SET_USER_STATUS;\r\n payload: SetUserStatusPayload;\r\n}\r\n\r\ninterface SetMessageWithExpirationTimeArgs {\r\n type: UserMessageType;\r\n message: string;\r\n expirationTime?: number;\r\n}\r\n\r\nexport interface SetAppConfiguration {\r\n type: GlobalActionTypes.SET_APP_CONFIGURATION;\r\n payload: AppConfiguration;\r\n}\r\n\r\nexport const setMessageWithExpirationTime =\r\n ({\r\n message,\r\n type,\r\n expirationTime = 5000,\r\n }: SetMessageWithExpirationTimeArgs): ThunkAction =>\r\n async (dispatch): Promise => {\r\n const action: SetMessages = {\r\n payload: [\r\n {\r\n message,\r\n type,\r\n },\r\n ],\r\n type: GlobalActionTypes.SET_MESSAGES,\r\n };\r\n dispatch(action);\r\n const tooltipTimer = setTimeout(() => {\r\n dispatch({\r\n type: GlobalActionTypes.CLEAR_MESSAGES,\r\n });\r\n clearTimeout(tooltipTimer);\r\n }, expirationTime);\r\n };\r\n\r\ninterface ValidateAndNotifyArgs {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n dispatch: Dispatch;\r\n validator: FormValidatorHandler;\r\n}\r\n\r\nexport function ValidateAndNotify({ dispatch, validator }: ValidateAndNotifyArgs): boolean {\r\n const result = validator.validate();\r\n if (result.success) {\r\n return true;\r\n }\r\n\r\n dispatch(\r\n setMessageWithExpirationTime({\r\n message: result.messages[0].message,\r\n type: result.messages[0].type,\r\n }),\r\n );\r\n\r\n return false;\r\n}\r\n\r\nexport const SetLoader =\r\n (value: boolean): ThunkAction =>\r\n async (dispatch): Promise => {\r\n dispatch({\r\n type: GlobalActionTypes.SET_LOADER_STATE,\r\n payload: {\r\n value,\r\n },\r\n });\r\n };\r\n\r\nconst mobileLogout = (): void => {\r\n const mobile = window.S4DWebBridge();\r\n if (mobile == null) {\r\n return;\r\n }\r\n mobile.userLoggedOut();\r\n};\r\n\r\nexport const logoutHandler =\r\n (): ThunkAction =>\r\n async (dispatch): Promise => {\r\n const deviceTokens: string | null = localStorage.getItem('deviceTokens');\r\n\r\n if (deviceTokens) {\r\n const parsedDeviceTokens: { deviceId: string; installationId: string; provider: PushNotificationsProvider } =\r\n JSON.parse(deviceTokens);\r\n const { deviceId, installationId, provider } = parsedDeviceTokens;\r\n\r\n ResponseWrapper({\r\n action: () => {\r\n return axios.post('api/accounts/remove-tokens', { deviceId, installationId, provider });\r\n },\r\n dispatch,\r\n });\r\n }\r\n\r\n mobileLogout();\r\n logout();\r\n };\r\n\r\nexport const getLanguages =\r\n (): ThunkAction =>\r\n async (dispatch): Promise => {\r\n ResponseWrapper({\r\n action: async () => {\r\n const cultures: AxiosResponse = await axios.get('api/culture');\r\n dispatch({\r\n type: GlobalActionTypes.SET_SUPPORTED_CULTURES,\r\n payload: cultures.data,\r\n });\r\n },\r\n dispatch,\r\n });\r\n };\r\n\r\nexport const getAppConfiguration =\r\n (): ThunkAction =>\r\n async (dispatch): Promise => {\r\n ResponseWrapper({\r\n action: async () => {\r\n const value: AxiosResponse = await axios.get('api/configuration');\r\n dispatch({\r\n type: GlobalActionTypes.SET_APP_CONFIGURATION,\r\n payload: value.data,\r\n });\r\n },\r\n dispatch,\r\n });\r\n };\r\n\r\n\r\nexport type GlobalActions =\r\n | SetSupportedCultures\r\n | SetMessages\r\n | ClearMessages\r\n | SetUserStatus\r\n | SetLoaderState\r\n | SetShowUnhandledError\r\n | SetAppConfiguration;\r\n","import { LocalizationStaticContent } from 'apps/LocalizationApp/Store/static-content/localization-static-content.reducer';\r\nimport React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { ApplicationState } from '../Store';\r\nimport { LocalizationState } from '../Store/reducers';\r\nimport { StoreDto } from '../types/dto.types';\r\n\r\ninterface StoresListProps {\r\n onSelect(store: StoreDto): void;\r\n show: boolean;\r\n onToggle(): void;\r\n distanceUnit: string;\r\n}\r\n\r\nconst StoresList: React.FC = ({ onSelect, show, onToggle, distanceUnit }) => {\r\n const { nearbyStores, selectedAddress } = useSelector((state) => state.localization);\r\n const { dropdownLabelPickupResults } = useSelector(\r\n (state) => state.localizationStaticContent,\r\n );\r\n\r\n function renderStores(): JSX.Element {\r\n return (\r\n <>\r\n \r\n

{dropdownLabelPickupResults}

\r\n \r\n \r\n
\r\n {show &&\r\n nearbyStores.map((store) => {\r\n return (\r\n {\r\n gtm.localizationModule.submitClickedOnCollection();\r\n onSelect(store);\r\n }}\r\n key={store.id}\r\n className=\"store-suggestion-item p-2 px-lg-3 d-flex\"\r\n data-testid=\"localization__button--select-store\"\r\n >\r\n
\r\n \r\n
\r\n

\r\n {`${store.street}, ${store.streetNumber}${\r\n selectedAddress.isCompleteAddress\r\n ? ` (${(store.distance / 1000).toFixed(1)} ${distanceUnit})`\r\n : ''\r\n }`}\r\n

\r\n

\r\n {store.city}\r\n

\r\n
\r\n
\r\n
\r\n );\r\n })}\r\n \r\n \r\n );\r\n }\r\n\r\n return <>{nearbyStores.length > 0 && renderStores()};\r\n};\r\n\r\nexport default StoresList;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { AddressDetailsDto, AddressSuggestionDto } from '../../apps/LocalizationApp/types/dto.types';\r\n\r\ninterface PredictionsProps {\r\n suggestions: AddressSuggestionDto[];\r\n onSelect(placeId: string): void;\r\n selectedAddress: AddressDetailsDto;\r\n}\r\n\r\nconst Suggestions: React.FC = ({ suggestions, onSelect, selectedAddress }) => {\r\n const [selectedSuggestion, setSelectedSuggestion] = useState();\r\n const suggestionsIds = suggestions.map((suggestion) => suggestion.placeId);\r\n\r\n useEffect(() => {\r\n window.addEventListener('keydown', handleKeyboardNavigation);\r\n if (selectedSuggestion) {\r\n document.getElementById(selectedSuggestion)?.classList.add('selected');\r\n }\r\n return () => {\r\n window.removeEventListener('keydown', handleKeyboardNavigation);\r\n };\r\n });\r\n\r\n const handleKeyboardNavigation = (e: KeyboardEvent) => {\r\n switch (e.key) {\r\n case 'Down':\r\n e.preventDefault();\r\n moveDown();\r\n case 'ArrowDown':\r\n e.preventDefault();\r\n moveDown();\r\n break;\r\n case 'Up':\r\n e.preventDefault();\r\n moveUp();\r\n case 'ArrowUp':\r\n e.preventDefault();\r\n moveUp();\r\n break;\r\n case 'Enter':\r\n e.preventDefault();\r\n selectedSuggestion && onSelect(selectedSuggestion);\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n const moveDown = () => {\r\n if (selectedSuggestion) {\r\n const currentSuggestion = document.getElementById(selectedSuggestion);\r\n const currentSuggestionIndex = suggestionsIds.indexOf(selectedSuggestion);\r\n const nextSuggestion = suggestionsIds[currentSuggestionIndex < suggestionsIds.length - 1 ? currentSuggestionIndex + 1 : 0];\r\n currentSuggestion?.classList.remove('selected');\r\n setSelectedSuggestion(nextSuggestion);\r\n } else {\r\n setSelectedSuggestion(suggestionsIds[0]);\r\n }\r\n };\r\n\r\n const moveUp = () => {\r\n if (selectedSuggestion) {\r\n const currentSuggestion = document.getElementById(selectedSuggestion);\r\n const currentSuggestionIndex = suggestionsIds.indexOf(selectedSuggestion);\r\n const nextSuggestion =\r\n suggestionsIds[currentSuggestionIndex === 0 ? suggestionsIds.length - 1 : currentSuggestionIndex - 1];\r\n currentSuggestion?.classList.remove('selected');\r\n setSelectedSuggestion(nextSuggestion);\r\n } else {\r\n setSelectedSuggestion(suggestionsIds[-1]);\r\n }\r\n };\r\n\r\n function renderSuggestion(suggestion: AddressSuggestionDto): JSX.Element {\r\n const isSuggestionSubstr = suggestion.mainText.toLowerCase().includes(selectedAddress.value.toLowerCase());\r\n const formattedSuggestion =\r\n isSuggestionSubstr && suggestion.mainText.toLowerCase().split(selectedAddress.value.toLowerCase(), 2);\r\n return (\r\n <>\r\n {formattedSuggestion ? (\r\n

\r\n {formattedSuggestion[0]}\r\n {selectedAddress.value}\r\n {formattedSuggestion[1]}\r\n

\r\n ) : (\r\n

\r\n {suggestion.mainText}\r\n

\r\n )}\r\n {suggestion.secondaryText && (\r\n

\r\n {suggestion.secondaryText}\r\n

\r\n )}\r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {suggestions &&\r\n suggestions.map((suggestion) => (\r\n {\r\n onSelect(suggestion.placeId);\r\n }}\r\n key={suggestion.placeId}\r\n className=\"address-suggestion-item d-flex p-1\"\r\n data-testid=\"localization__button--select-suggestion\"\r\n tabIndex={0}\r\n id={suggestion.placeId}\r\n >\r\n
\r\n \r\n
{renderSuggestion(suggestion)}
\r\n
\r\n \r\n ))}{' '}\r\n \r\n );\r\n};\r\n\r\nexport default Suggestions;\r\n","import { useEffect, useState } from 'react';\r\n\r\ninterface ShowDelay {\r\n show: ShowOptions;\r\n}\r\n\r\nenum ShowOptions {\r\n show = 'show',\r\n hide = 'd-none',\r\n none = '',\r\n}\r\n\r\nexport default function useShowDelay(isVisible: boolean): ShowDelay {\r\n const [show, setShow] = useState(ShowOptions.none);\r\n\r\n useEffect(() => {\r\n setShow(ShowOptions.none);\r\n setTimeout(() => {\r\n setShow(isVisible ? ShowOptions.show : ShowOptions.hide);\r\n }, 100);\r\n }, [isVisible]);\r\n\r\n return { show };\r\n}\r\n","import React from 'react';\r\nimport useShowDelay from 'hooks/useShowDelay';\r\nimport { ApplicationState } from 'apps/LocalizationApp/Store';\r\nimport { useSelector } from 'react-redux';\r\nimport { LocalizationStaticContent } from '../Store/static-content/localization-static-content.reducer';\r\nimport { AddressDetailsDto } from '../types/dto.types';\r\n\r\ninterface AddressInputProps {\r\n address: AddressDetailsDto;\r\n isPickup: boolean;\r\n onChangeFn(sender?: React.ChangeEvent, clear?: boolean): void;\r\n onClear(): void;\r\n suggestionsHelper(): void;\r\n showStreetNumberInput: boolean;\r\n}\r\n\r\nconst AddressInput: React.FC = ({\r\n address,\r\n isPickup,\r\n onChangeFn,\r\n onClear,\r\n suggestionsHelper,\r\n showStreetNumberInput,\r\n}) => {\r\n const { localizationInputPlaceholder } = useSelector(\r\n (state) => state.localizationStaticContent,\r\n );\r\n\r\n const { value, streetNumber } = address;\r\n const { show: showClear } = useShowDelay(!!value);\r\n\r\n function onClickHandler(): void {\r\n if (value) {\r\n suggestionsHelper();\r\n }\r\n isPickup ? gtm.localizationModule.inputClickedOnCollection() : gtm.localizationModule.inputClickedOnDelivery();\r\n }\r\n\r\n function getInputStyle(): string {\r\n if (!showStreetNumberInput) return 'rounded-top';\r\n return 'rounded';\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n\r\n {showStreetNumberInput && (\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default AddressInput;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\n\r\n// shared\r\nimport { GlobalState } from 'shared/store/global/global.reducer';\r\nimport { StaticContent, UserMessageType } from 'shared/types';\r\nimport { ApplicationState } from '../Store';\r\n\r\ninterface InfoPanelContainerProps {\r\n testId: string;\r\n}\r\n\r\nfunction getContainerClassByType(type: UserMessageType): string {\r\n switch (type) {\r\n case UserMessageType.INFO:\r\n return 'bg-white';\r\n case UserMessageType.WARNING:\r\n return 'bg-warning';\r\n default:\r\n return 'bg-white';\r\n }\r\n}\r\n\r\nfunction getTextClassByType(type: UserMessageType): string {\r\n switch (type) {\r\n case UserMessageType.INFO:\r\n return '';\r\n case UserMessageType.WARNING:\r\n return 'px-3 py-2';\r\n default:\r\n return 'text-danger p-bold';\r\n }\r\n}\r\n\r\nfunction getArrowClassByType(type: UserMessageType): string {\r\n switch (type) {\r\n case UserMessageType.INFO:\r\n return 'border-0';\r\n case UserMessageType.WARNING:\r\n return 'border-warning';\r\n default:\r\n return 'border-0';\r\n }\r\n}\r\n\r\nconst InfoPanelContainer: React.FC = ({ testId }) => {\r\n const globalState = useSelector((e) => e.global);\r\n const { messages } = useSelector((state) => state.staticContent);\r\n const [offset, setOffset] = useState<{}>();\r\n\r\n const firstElement = globalState.messages[0];\r\n\r\n useEffect((): void => {\r\n if (firstElement && firstElement.message) {\r\n if (firstElement.message === messages.tooltipsFillStreetNumber) {\r\n setOffset({ right: 20 });\r\n return;\r\n }\r\n setOffset(undefined);\r\n }\r\n }, [globalState]);\r\n\r\n if (globalState.messages.length === 0) return <>;\r\n\r\n return (\r\n \r\n

{firstElement.message}

\r\n {offset &&
}\r\n
\r\n );\r\n};\r\n\r\nexport default InfoPanelContainer;\r\n","import React from 'react';\r\nimport { LocalizationAdditionContent } from '../Store/static-content/localization-static-content.reducer';\r\n\r\ninterface LocalizationAdditionProps {\r\n additionData?: LocalizationAdditionContent;\r\n}\r\n\r\nconst LocalizationAddition: React.FC = ({ additionData }) => {\r\n if (!additionData) return null;\r\n return (\r\n
\r\n {additionData.headerText}\r\n

\r\n {additionData.paragraphText}\r\n {additionData.linkText && additionData.linkHref && (\r\n \r\n {additionData.linkText}\r\n \r\n )}\r\n

\r\n
\r\n );\r\n};\r\n\r\nexport default LocalizationAddition;\r\n","import React from 'react';\r\nimport { OrderDistributionType } from 'shared/types';\r\nimport { AddressDetailsDto, StoreDto } from '../types/dto.types';\r\n\r\ninterface Props {\r\n onSelectStoreFn(store: StoreDto): void;\r\n onSelectAddressFn(address: AddressDetailsDto): void;\r\n lastAddresses: AddressDetailsDto[];\r\n lastStores: StoreDto[];\r\n distributionType: OrderDistributionType;\r\n dropdownLabel: string;\r\n onToggleFn(): void;\r\n showLastUsed: boolean;\r\n}\r\n\r\nconst LastUsedAddresses = ({\r\n onSelectAddressFn,\r\n onSelectStoreFn,\r\n lastAddresses,\r\n lastStores,\r\n distributionType,\r\n dropdownLabel,\r\n onToggleFn,\r\n showLastUsed,\r\n}: Props) => {\r\n if (distributionType === OrderDistributionType.Delivery && lastAddresses.length < 1) {\r\n return <>;\r\n }\r\n if (distributionType === OrderDistributionType.Pickup && lastStores.length < 1) {\r\n return <>;\r\n }\r\n\r\n function renderAddress(address: AddressDetailsDto): JSX.Element {\r\n return (\r\n onSelectAddressFn(address)}\r\n key={address.city + address.street + address.streetNumber}\r\n className=\"store-suggestion-item p-2 px-lg-3 d-flex\"\r\n data-testid=\"localization__button--select-store\"\r\n >\r\n
\r\n \r\n
\r\n {`${address.street}, ${address.streetNumber}`}

\r\n

\r\n {address.city}\r\n

\r\n
\r\n
\r\n \r\n );\r\n }\r\n\r\n function renderStore(store: StoreDto) {\r\n return (\r\n onSelectStoreFn(store)}\r\n key={store.id}\r\n className=\"store-suggestion-item p-2 px-lg-3 d-flex\"\r\n data-testid=\"localization__button--select-store\"\r\n >\r\n
\r\n \r\n
\r\n {`${store.street}, ${store.streetNumber}`}

\r\n

\r\n {store.city}\r\n

\r\n
\r\n
\r\n \r\n );\r\n }\r\n\r\n function renderItems(): JSX.Element {\r\n if (distributionType === OrderDistributionType.Delivery) {\r\n return <>{lastAddresses.map((address) => renderAddress(address))};\r\n }\r\n return <>{lastStores.map((store) => renderStore(store))};\r\n }\r\n\r\n return (\r\n <>\r\n \r\n

{dropdownLabel}

\r\n \r\n \r\n
\r\n {showLastUsed && renderItems()}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default LastUsedAddresses;\r\n","import { UserMessage, UserMessageType, ValidatorItem, ValidationResult } from '../types';\r\n\r\nexport interface FormValidatorHandlerArgs {\r\n value: string;\r\n validators: ValidatorItem[];\r\n name?: string;\r\n}\r\nexport class FormValidatorHandler {\r\n value: string;\r\n\r\n name?: string;\r\n\r\n validators: ValidatorItem[];\r\n\r\n constructor({ value, validators = [], name }: FormValidatorHandlerArgs) {\r\n this.value = value;\r\n this.validators = validators;\r\n this.name = name;\r\n this.validate = this.validate.bind(this);\r\n }\r\n\r\n validate(): ValidationResult {\r\n const messages: UserMessage[] = [];\r\n\r\n for (let index = 0; index < this.validators.length; index++) {\r\n const validator = this.validators[index];\r\n const result = validator.fn(this.value);\r\n\r\n if (result !== true) {\r\n messages.push({\r\n message: validator.message,\r\n type: validator.messageType,\r\n });\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n success: messages.length === 0,\r\n messages,\r\n };\r\n }\r\n}\r\ninterface ValidatorArgs {\r\n message: string;\r\n messageType: UserMessageType;\r\n}\r\n\r\ninterface LengthValidatorArgs extends ValidatorArgs {\r\n length: number;\r\n}\r\ninterface MaxValueArgs extends ValidatorArgs {\r\n maxValue: number;\r\n}\r\ninterface MinValueArgs extends ValidatorArgs {\r\n minValue: number;\r\n}\r\ninterface RegexArgs extends ValidatorArgs {\r\n pattern: string;\r\n}\r\n\r\nexport const CommonValidators = {\r\n required: ({ message = 'Required field.', messageType }: ValidatorArgs): ValidatorItem => ({\r\n fn: (value): boolean => {\r\n return value !== undefined && value != null && value.length > 0;\r\n },\r\n message,\r\n messageType,\r\n }),\r\n maxValue: ({ message = 'Required field.', messageType, maxValue }: MaxValueArgs): ValidatorItem => ({\r\n fn: (value): boolean => {\r\n if (!value && value.length < 1) return false;\r\n const valAsNumber = parseFloat(value.replace(',', '.'));\r\n if (valAsNumber === undefined || valAsNumber == null || Number.isNaN(valAsNumber)) {\r\n return false;\r\n }\r\n\r\n if (valAsNumber > maxValue) {\r\n return false;\r\n }\r\n\r\n return true;\r\n },\r\n message,\r\n messageType,\r\n }),\r\n minValue: ({ message = 'Required field.', messageType, minValue }: MinValueArgs): ValidatorItem => ({\r\n fn: (value): boolean => {\r\n if (!value && value.length < 1) return false;\r\n const valAsNumber = parseFloat(value.replace(',', '.'));\r\n if (valAsNumber === undefined || valAsNumber == null || Number.isNaN(valAsNumber)) {\r\n return false;\r\n }\r\n\r\n if (valAsNumber < minValue) {\r\n return false;\r\n }\r\n\r\n return true;\r\n },\r\n message,\r\n messageType,\r\n }),\r\n minLength: ({ message = 'Required field.', messageType, length }: LengthValidatorArgs): ValidatorItem => ({\r\n fn: (value): boolean => {\r\n if (value === undefined || value == null || value.length === 0) {\r\n return true;\r\n }\r\n\r\n return value.length >= length;\r\n },\r\n message,\r\n messageType,\r\n }),\r\n maxLength: ({ message = 'Required field.', messageType, length }: LengthValidatorArgs): ValidatorItem => ({\r\n fn: (value): boolean => {\r\n if (value === undefined || value == null || value.length === 0) {\r\n return true;\r\n }\r\n\r\n return value.length <= length;\r\n },\r\n message,\r\n messageType,\r\n }),\r\n email: ({ message = 'Incorrect e-mail.', messageType }: ValidatorArgs): ValidatorItem => ({\r\n fn: (value): boolean => {\r\n if (value === undefined || value == null || value.length === 0) {\r\n return false;\r\n }\r\n\r\n const mainTest = (v: string): boolean =>\r\n // eslint-disable-next-line no-control-regex\r\n /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])/i.test(\r\n v,\r\n );\r\n\r\n const arr = [mainTest];\r\n\r\n for (let i = 0; i < arr.length; i++) {\r\n const testFn = arr[i];\r\n const isValid = testFn(value);\r\n\r\n if (!isValid) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n message,\r\n messageType,\r\n }),\r\n regex: ({ message = 'Value does not match pattern.', messageType, pattern }: RegexArgs): ValidatorItem => ({\r\n fn: (value): boolean => {\r\n const regex = new RegExp(pattern);\r\n if (!regex.test(value)) return false;\r\n return true;\r\n },\r\n message,\r\n messageType,\r\n }),\r\n phoneNumber: ({ message = 'Phone number invalid.', messageType }: ValidatorArgs): ValidatorItem => ({\r\n fn: (value): boolean => {\r\n if (!value) return true;\r\n const regex = new RegExp(`^\\\\d{9,11}$`);\r\n if (!regex.test(value)) return false;\r\n return true;\r\n },\r\n message,\r\n messageType,\r\n }),\r\n date: ({ message = 'Invalid date', messageType }: ValidatorArgs): ValidatorItem => ({\r\n fn: (value): boolean => {\r\n if (!value) return true;\r\n // eslint-disable-next-line no-useless-escape\r\n const regex = new RegExp(`^([0-2][0-9]|(3)[0-1])(\\/)(((0)[0-9])|((1)[0-2]))(\\/)\\\\d{4}$`);\r\n if (!regex.test(value)) return false;\r\n return true;\r\n },\r\n message,\r\n messageType,\r\n }),\r\n};\r\n","import { Dispatch } from 'redux';\r\nimport { AddressDetailsDto } from '../types/dto.types';\r\nimport { FormValidatorHandler, CommonValidators } from '../../../shared/validators';\r\nimport { setMessageWithExpirationTime, ValidateAndNotify } from '../../../shared/store/global/global.actions';\r\nimport { UserMessageType, StaticContent } from '../../../shared/types';\r\n\r\ninterface ValidateAddressArgs {\r\n address: AddressDetailsDto;\r\n messages: StaticContent['messages'];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n dispatch: Dispatch;\r\n}\r\n\r\nexport const ValidatePickupAddress = ({ dispatch, address, messages }: ValidateAddressArgs): boolean => {\r\n const { tooltipsFillAddress, errorMessagesWrongAddress } = messages;\r\n const validators: FormValidatorHandler[] = [\r\n new FormValidatorHandler({\r\n value: address.street,\r\n validators: [CommonValidators.required({ message: tooltipsFillAddress, messageType: UserMessageType.WARNING })],\r\n }),\r\n new FormValidatorHandler({\r\n value: address.city,\r\n validators: [CommonValidators.required({ message: tooltipsFillAddress, messageType: UserMessageType.WARNING })],\r\n }),\r\n ];\r\n\r\n let isAtLeastOneValid = false;\r\n\r\n validators.forEach((validator) => {\r\n const result = validator.validate();\r\n if (result.success) {\r\n isAtLeastOneValid = true;\r\n }\r\n });\r\n\r\n if (!isAtLeastOneValid) {\r\n if (address.value) {\r\n dispatch(\r\n setMessageWithExpirationTime({\r\n message: errorMessagesWrongAddress,\r\n type: UserMessageType.ERROR,\r\n }),\r\n );\r\n return false;\r\n }\r\n for (let index = 0; index < validators.length; index++) {\r\n const validator = validators[index];\r\n if (\r\n !ValidateAndNotify({\r\n dispatch,\r\n validator,\r\n })\r\n ) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n};\r\nexport enum ValidateDeliveryResponse {\r\n StreetErr = 'STREET',\r\n NumberErr = 'NUMBER',\r\n Valid = 'VALID',\r\n}\r\nexport const ValidateDeliveryAddress = ({ dispatch, address, messages }: ValidateAddressArgs): ValidateDeliveryResponse => {\r\n const { tooltipsFillAddress, tooltipsFillStreetNumber, errorMessagesWrongAddress } = messages;\r\n const validators: FormValidatorHandler[] = [\r\n new FormValidatorHandler({\r\n value: address.value,\r\n validators: [CommonValidators.required({ message: tooltipsFillAddress, messageType: UserMessageType.WARNING })],\r\n }),\r\n new FormValidatorHandler({\r\n value: address.street,\r\n validators: [CommonValidators.required({ message: errorMessagesWrongAddress, messageType: UserMessageType.ERROR })],\r\n }),\r\n new FormValidatorHandler({\r\n value: address.streetNumber,\r\n validators: [CommonValidators.required({ message: tooltipsFillStreetNumber, messageType: UserMessageType.WARNING })],\r\n }),\r\n ];\r\n\r\n for (let index = 0; index < validators.length; index++) {\r\n const validator = validators[index];\r\n\r\n if (\r\n !ValidateAndNotify({\r\n dispatch,\r\n validator,\r\n })\r\n ) {\r\n return index === 0 ? ValidateDeliveryResponse.StreetErr : ValidateDeliveryResponse.NumberErr;\r\n }\r\n }\r\n\r\n return ValidateDeliveryResponse.Valid;\r\n};\r\n","export enum LocalizationRequestErrorType {\r\n ERROR = 'Error',\r\n LOCALIZATION_DISABLED = 'LocalizationDisabled',\r\n}\r\n\r\nexport type LocationRequestSuccessCallback = (latitude: number, longitude: number) => void;\r\nexport type LocationRequestErrorCallback = (errorType: LocalizationRequestErrorType) => void;\r\n\r\nexport enum PushNotificationsProvider {\r\n FIREBASE = 0,\r\n HMS = 1,\r\n}\r\n","export enum StoreState {\r\n OPEN,\r\n OPEN_BUT_NO_ONLINE_ORDERS,\r\n OPEN_BUT_NO_DELIVERY_ORDERS,\r\n OPEN_BUT_NO_DELIVERY_BASED_ON_DELIVERY_HOURS,\r\n OPEN_BUT_NO_PICKUP_BASED_ON_PICKU_PHOURS,\r\n CLOSED,\r\n OPEN_BUT_NO_PICKUP_ORDERS,\r\n}\r\n\r\nexport enum LocalizationStrategy {\r\n PH_ES = 'PHES',\r\n PH_MX = 'PHMX'\r\n}\r\n","/* eslint-disable @typescript-eslint/no-throw-literal */\r\n/* eslint-disable import/no-cycle */\r\nimport { Action } from 'redux';\r\nimport { ThunkAction } from 'redux-thunk';\r\nimport Axios from 'shared/api/axios';\r\nimport axios, { AxiosResponse } from 'axios';\r\n\r\n// shared\r\nimport { GlobalActionTypes, SetLoader, setMessageWithExpirationTime } from 'shared/store/global/global.actions';\r\nimport { UserMessageType, PropertyChangedPayload, OrderDistributionType } from 'shared/types';\r\nimport ResponseWrapper from 'shared/tools/api-response-wrapper';\r\nimport { LocalizationRequestErrorType } from 'typings/web-bridge.types';\r\nimport { AdditionalAddressInfoDto, SelectedDateTimeFrame } from 'apps/LocalizationApp/types/dto.types';\r\nimport { AccountDetailsAddressDto } from 'apps/AccountManagementApp/account-details.types';\r\nimport { storeDataInCookie } from 'shared/utils';\r\nimport { add } from 'date-fns';\r\nimport { ApplicationState } from '.';\r\nimport { CurrentStore, StoreStatus } from './reducers';\r\nimport { AddressDetailsDto, AddressSuggestionDto, AvailableHoursDto, StoreDto } from '../types/dto.types';\r\nimport { LocalizationStrategy } from '../types/localization.types';\r\n\r\n// store\r\nimport { getStoreStatus } from '../helpers/store-status';\r\n\r\nexport enum LocalizationActionTypes {\r\n CHANGE_ORDER_DISTRIBUTION = '[LOCALIZATION_APP] CHANGE_ORDER_DISTRIBUTION',\r\n ON_PROPERTY_CHANGED = '[LOCALIZATION_APP] ON_PROPERTY_CHANGED',\r\n SET_SUGGESTIONS = '[LOCALIZATION_APP] SET_SUGGESTIONS',\r\n SET_SELECTED_ADDRESS = '[LOCALIZATION_APP] SET_SELECTED_ADDRESS',\r\n SET_ORDER_TIME = '[LOCALIZATION_APP] SET_ORDER_TIME',\r\n SET_NEARBY_STORES = '[LOCALIZATION_APP] SET_NEARBY_STORES',\r\n SET_CURRENT_STORE = '[LOCALIZATION_APP] SET_CURRENT_STORE',\r\n CLEAR_STORE = '[LOCALIZATION_APP] CLEAR_STORE',\r\n SHOW_TOAST = '[LOCALIZATION_APP] SHOW_TOAST',\r\n SHOW_MODAL = '[LOCALIZATION_APP] SHOW_MODAL',\r\n SHOW_NUMBER_INPUT = '[LOCALIZATION_APP] SHOW_NUMBER_INPUT',\r\n SET_LAST_USED_ADDRESSES = '[LOCALIZATION_APP] SET_LAST_USED_ADDRESSES',\r\n SET_LAST_USED_STORES = '[LOCALIZATION_APP] SET_LAST_USED_STORES',\r\n SET_FORCE_DELIVERY_DISTRIBUTION = '[LOCALIZATION_APP] SET_FORCE_DELIVERY_DISTRIBUTION',\r\n SET_SELECTED_STORE_STATUS = '[LOCALIZATION_APP] SET_CURRENT_STORE_STATUS',\r\n SET_ADDRESS_ADDITIONAL_INFO = '[LOCALIZATION_APP] SET_ADDRESS_ADDITIONAL_INFO',\r\n}\r\n\r\ninterface ChangeOrderDistribution {\r\n type: LocalizationActionTypes.CHANGE_ORDER_DISTRIBUTION;\r\n payload: OrderDistributionType;\r\n}\r\ninterface OnPropertyChanged {\r\n type: LocalizationActionTypes.ON_PROPERTY_CHANGED;\r\n payload: PropertyChangedPayload;\r\n}\r\ninterface SetSuggestions {\r\n type: LocalizationActionTypes.SET_SUGGESTIONS;\r\n payload: AddressSuggestionDto[];\r\n}\r\ninterface SetSelectedAddress {\r\n type: LocalizationActionTypes.SET_SELECTED_ADDRESS;\r\n payload?: AddressDetailsDto;\r\n}\r\ninterface SetSelectedOrderTime {\r\n type: LocalizationActionTypes.SET_ORDER_TIME;\r\n payload: SelectedDateTimeFrame;\r\n}\r\ninterface SetNearbyStores {\r\n type: LocalizationActionTypes.SET_NEARBY_STORES;\r\n payload: StoreDto[];\r\n}\r\ninterface ClearStore extends Action {\r\n type: LocalizationActionTypes.CLEAR_STORE;\r\n}\r\ninterface ShowToast extends Action {\r\n type: LocalizationActionTypes.SHOW_TOAST;\r\n payload: boolean;\r\n}\r\ninterface ShowModal extends Action {\r\n type: LocalizationActionTypes.SHOW_MODAL;\r\n payload: boolean;\r\n}\r\ninterface ShowNumberInput extends Action {\r\n type: LocalizationActionTypes.SHOW_NUMBER_INPUT;\r\n payload: boolean;\r\n}\r\ninterface SetLastUsedAddresses extends Action {\r\n type: LocalizationActionTypes.SET_LAST_USED_ADDRESSES;\r\n payload: AccountDetailsAddressDto[];\r\n}\r\ninterface SetLastUsedStores extends Action {\r\n type: LocalizationActionTypes.SET_LAST_USED_STORES;\r\n payload: StoreDto[];\r\n}\r\ninterface SetForceDeliveryDistribution extends Action {\r\n type: LocalizationActionTypes.SET_FORCE_DELIVERY_DISTRIBUTION;\r\n payload: boolean;\r\n}\r\ninterface SetSelectedtStoreStatus extends Action {\r\n type: LocalizationActionTypes.SET_SELECTED_STORE_STATUS;\r\n payload: StoreStatus;\r\n}\r\ninterface SetAddressAdditionalInfo extends Action {\r\n type: LocalizationActionTypes.SET_ADDRESS_ADDITIONAL_INFO;\r\n payload: AdditionalAddressInfoDto;\r\n}\r\n\r\nconst CancellationToken = axios.CancelToken;\r\nlet suggestionCancel: () => void;\r\n\r\nexport const getSuggestions =\r\n (input: string): ThunkAction =>\r\n async (dispatch): Promise => {\r\n if (input.length < 3) {\r\n return; // to short address\r\n }\r\n\r\n if (suggestionCancel) {\r\n suggestionCancel();\r\n }\r\n\r\n ResponseWrapper({\r\n action: async () => {\r\n const value: AxiosResponse = await Axios.get('api/locations/suggestions', {\r\n params: { input },\r\n cancelToken: new CancellationToken((cancelExecutor: () => void) => {\r\n suggestionCancel = cancelExecutor;\r\n }),\r\n });\r\n dispatch({\r\n type: LocalizationActionTypes.SET_SUGGESTIONS,\r\n payload: value.data,\r\n });\r\n },\r\n dispatch,\r\n });\r\n };\r\n\r\nexport const getSelectedAddress =\r\n (placeId: string): ThunkAction =>\r\n async (dispatch, getState): Promise => {\r\n const state = getState();\r\n ResponseWrapper({\r\n action: async () => {\r\n const value: AxiosResponse = await Axios.get('api/locations/details', { params: { placeId } });\r\n const isDelivery = state.localization.distributionType === OrderDistributionType.Delivery;\r\n\r\n dispatch({\r\n type: LocalizationActionTypes.SHOW_NUMBER_INPUT,\r\n payload: isDelivery && !value.data.isCompleteAddress,\r\n });\r\n\r\n dispatch({\r\n type: LocalizationActionTypes.SET_SELECTED_ADDRESS,\r\n payload: value.data,\r\n });\r\n\r\n if (!value.data.streetNumber && state.localization.distributionType === OrderDistributionType.Delivery) {\r\n dispatch(\r\n setMessageWithExpirationTime({\r\n message: state.staticContent.messages.tooltipsFillStreetNumber,\r\n type: UserMessageType.WARNING,\r\n }),\r\n );\r\n }\r\n\r\n if (value.data.isCompleteAddress && state.localization.distributionType === OrderDistributionType.Delivery) {\r\n dispatch(\r\n setMessageWithExpirationTime({\r\n message: state.staticContent.messages.tooltipsAdressConfirmation,\r\n type: UserMessageType.WARNING,\r\n }),\r\n );\r\n }\r\n\r\n if (!isDelivery) {\r\n dispatch(getNearbyStores());\r\n }\r\n },\r\n dispatch,\r\n });\r\n };\r\n\r\nexport const getCoordsSuggestions =\r\n (): ThunkAction =>\r\n async (dispatch, getState): Promise => {\r\n const state = getState();\r\n const { tooltipsGeoDisabled, errorMessagesImpossibleToLocateDelivery } = state.staticContent.messages;\r\n\r\n navigator.geolocation.getCurrentPosition(\r\n (position) => {\r\n dispatch(SetLoader(true));\r\n dispatch(prepareCoordsSuggestions(position.coords.latitude, position.coords.longitude));\r\n },\r\n (err) => {\r\n const warning = err.code === 1;\r\n const message = warning ? tooltipsGeoDisabled : errorMessagesImpossibleToLocateDelivery;\r\n const type = warning ? UserMessageType.WARNING : UserMessageType.ERROR;\r\n dispatch(SetLoader(false));\r\n dispatch(\r\n setMessageWithExpirationTime({\r\n message,\r\n type,\r\n }),\r\n );\r\n },\r\n );\r\n };\r\n\r\nexport const prepareCoordsSuggestions =\r\n (latitude: number, longitude: number): ThunkAction =>\r\n async (dispatch, getState): Promise => {\r\n const state = getState();\r\n const { errorMessagesImpossibleToLocateDelivery } = state.staticContent.messages;\r\n\r\n ResponseWrapper({\r\n action: async () => {\r\n const apiResponse: AxiosResponse = await Axios.get('api/locations/suggestion-for-coordinates', {\r\n params: {\r\n latitude,\r\n longitude,\r\n language: 'es',\r\n },\r\n });\r\n\r\n if (!apiResponse.data.isCompleteAddress) {\r\n dispatch({\r\n type: LocalizationActionTypes.SHOW_NUMBER_INPUT,\r\n payload: true,\r\n });\r\n }\r\n\r\n dispatch({ type: LocalizationActionTypes.SET_SELECTED_ADDRESS, payload: apiResponse.data });\r\n\r\n if (apiResponse.data.isCompleteAddress) {\r\n dispatch(\r\n setMessageWithExpirationTime({\r\n message: state.staticContent.messages.tooltipsAdressConfirmation,\r\n type: UserMessageType.WARNING,\r\n }),\r\n );\r\n }\r\n\r\n if (state.localization.distributionType === OrderDistributionType.Pickup) {\r\n dispatch(getNearbyStores());\r\n }\r\n dispatch(SetLoader(false));\r\n },\r\n dispatch,\r\n errMessage: {\r\n type: UserMessageType.ERROR,\r\n message: errorMessagesImpossibleToLocateDelivery,\r\n },\r\n });\r\n };\r\n\r\nexport const setRequestLocalizationError =\r\n (error: LocalizationRequestErrorType): ThunkAction =>\r\n async (dispatch, getState): Promise => {\r\n const state = getState();\r\n const { errorMessagesImpossibleToLocateDelivery, tooltipsGeoDisabled } = state.staticContent.messages;\r\n\r\n const errorMessage =\r\n error === LocalizationRequestErrorType.LOCALIZATION_DISABLED\r\n ? tooltipsGeoDisabled\r\n : errorMessagesImpossibleToLocateDelivery;\r\n dispatch(\r\n setMessageWithExpirationTime({\r\n message: errorMessage,\r\n type: UserMessageType.WARNING,\r\n }),\r\n );\r\n };\r\n\r\nconst getNearbyStores =\r\n (): ThunkAction =>\r\n async (dispatch, getState): Promise => {\r\n const state = getState();\r\n const { selectedAddressDetails } = state.localization;\r\n\r\n ResponseWrapper({\r\n action: async () => {\r\n const value: AxiosResponse = await Axios.get('api/stores/nearby-pickup-stores', {\r\n params: {\r\n address: selectedAddressDetails,\r\n limit: 5,\r\n includeDistance: true,\r\n },\r\n });\r\n\r\n if (value.data.length <= 0) {\r\n dispatch(\r\n setMessageWithExpirationTime({\r\n message: state.staticContent.messages.errorMessagesNoStores,\r\n type: UserMessageType.ERROR,\r\n }),\r\n );\r\n dispatch(clearCurrentStoreStatus());\r\n }\r\n dispatch({\r\n type: LocalizationActionTypes.SET_NEARBY_STORES,\r\n payload: value.data,\r\n });\r\n },\r\n dispatch,\r\n });\r\n };\r\n\r\nconst getStoreAvailableHours = async (storeId: string, distributionType: OrderDistributionType): Promise => {\r\n const apiUrl =\r\n distributionType === OrderDistributionType.Delivery\r\n ? 'api/stores/available-times-for-delivery'\r\n : 'api/stores/available-times-for-pickup';\r\n\r\n const value: AxiosResponse = await Axios.get(apiUrl, {\r\n params: {\r\n storeId,\r\n },\r\n });\r\n\r\n return value?.data;\r\n};\r\n\r\nexport const getCurrentStore =\r\n (): ThunkAction =>\r\n async (dispatch, getState): Promise => {\r\n const state = getState();\r\n const { selectedAddress, distributionType, selectedAddressDetails: selectedAddressOriginalValue } = state.localization;\r\n\r\n return ResponseWrapper({\r\n action: async (): Promise => {\r\n const storeToDeliveryResponse: AxiosResponse = await Axios.get('api/stores/store-delivering-to-address', {\r\n params: {\r\n address: selectedAddressOriginalValue,\r\n },\r\n });\r\n const storeToDelivery = storeToDeliveryResponse.data;\r\n\r\n if (\r\n storeToDelivery &&\r\n !storeToDelivery.isUsingS4DRegistry &&\r\n selectedAddress.localizationStrategy === LocalizationStrategy.PH_MX\r\n ) {\r\n if (!storeToDelivery.externalStoreId) throw 'Store external ID not provided';\r\n\r\n const additionalAddressInfo = await getAdditionalAddressInfo(selectedAddress, storeToDelivery.externalStoreId);\r\n dispatch({ type: LocalizationActionTypes.SET_ADDRESS_ADDITIONAL_INFO, payload: additionalAddressInfo });\r\n }\r\n\r\n const storeStatus = await getStoreStatus(storeToDelivery.id, distributionType);\r\n const dataReady = storeToDelivery && storeStatus;\r\n dispatch({\r\n type: LocalizationActionTypes.SET_SELECTED_STORE_STATUS,\r\n payload: { ...storeStatus, storePhoneNumber: storeToDelivery.phoneNumber },\r\n });\r\n\r\n if (dataReady && !storeStatus.canPlaceOrder) {\r\n dispatch({ type: LocalizationActionTypes.CLEAR_STORE });\r\n dispatch(SetLoader(false));\r\n dispatch({ type: LocalizationActionTypes.SHOW_MODAL, payload: true });\r\n return;\r\n }\r\n\r\n // it is possible that getStoreStatus method will return canPlaceOrder with TRUE value, but there will be no available opening hours\r\n // this situation will occur when the store is ALREADY closed this day - we are checking it here and showing toast\r\n const availableHours = await getStoreAvailableHours(storeToDelivery.id, distributionType);\r\n if (!availableHours.timeframes || availableHours?.timeframes.length === 0) {\r\n dispatch(SetLoader(false));\r\n dispatch({ type: LocalizationActionTypes.CLEAR_STORE });\r\n dispatch({\r\n type: LocalizationActionTypes.SHOW_TOAST,\r\n payload: true,\r\n });\r\n setTimeout(\r\n () =>\r\n dispatch({\r\n type: LocalizationActionTypes.SHOW_TOAST,\r\n payload: false,\r\n }),\r\n 5000,\r\n );\r\n return;\r\n }\r\n\r\n dispatch({\r\n type: LocalizationActionTypes.SET_CURRENT_STORE,\r\n payload: {\r\n ...storeToDelivery,\r\n availableHours,\r\n isOpen: storeStatus.canPlaceOrder,\r\n },\r\n });\r\n\r\n dispatch(SetLoader(false));\r\n dispatch({ type: LocalizationActionTypes.SHOW_MODAL, payload: true });\r\n },\r\n dispatch,\r\n allowedErr: {\r\n statusArr: [404],\r\n action: (): void => {\r\n gtm.localizationModule.localizationError();\r\n dispatch(SetLoader(false));\r\n dispatch({ type: LocalizationActionTypes.SHOW_MODAL, payload: true });\r\n dispatch(clearCurrentStoreStatus());\r\n dispatch(getNearbyStores());\r\n },\r\n },\r\n });\r\n };\r\n\r\nexport const setCurrentStoreForPickup =\r\n (store: StoreDto): ThunkAction =>\r\n async (dispatch, getState): Promise => {\r\n const { distributionType } = getState().localization;\r\n return ResponseWrapper({\r\n action: async (): Promise => {\r\n const storeStatus = await getStoreStatus(store.id, distributionType);\r\n const dataReady = storeStatus;\r\n dispatch({\r\n type: LocalizationActionTypes.SET_SELECTED_STORE_STATUS,\r\n payload: { ...storeStatus, storePhoneNumber: store.phoneNumber },\r\n });\r\n\r\n if (dataReady && !storeStatus.canPlaceOrder) {\r\n dispatch({ type: LocalizationActionTypes.CLEAR_STORE });\r\n dispatch({ type: LocalizationActionTypes.SHOW_MODAL, payload: true });\r\n return;\r\n }\r\n\r\n // it is possible that getStoreStatus method will return canPlaceOrder with TRUE value, but there will be no available opening hours\r\n // this situation will occur when the store is ALREADY closed this day - we are checking it here and showing toast\r\n const availableHours = await getStoreAvailableHours(store.id, distributionType);\r\n if (!availableHours.timeframes || availableHours?.timeframes.length === 0) {\r\n dispatch({ type: LocalizationActionTypes.CLEAR_STORE });\r\n dispatch({\r\n type: LocalizationActionTypes.SHOW_TOAST,\r\n payload: true,\r\n });\r\n setTimeout(\r\n () =>\r\n dispatch({\r\n type: LocalizationActionTypes.SHOW_TOAST,\r\n payload: false,\r\n }),\r\n 5000,\r\n );\r\n return;\r\n }\r\n\r\n if (distributionType === OrderDistributionType.Delivery) {\r\n dispatch({ type: LocalizationActionTypes.CHANGE_ORDER_DISTRIBUTION, payload: OrderDistributionType.Pickup });\r\n dispatch({ type: LocalizationActionTypes.SET_NEARBY_STORES, payload: [] });\r\n }\r\n\r\n dispatch({\r\n type: LocalizationActionTypes.SET_CURRENT_STORE,\r\n payload: {\r\n availableHours,\r\n isOpen: storeStatus.canPlaceOrder,\r\n ...store,\r\n },\r\n });\r\n\r\n dispatch({ type: LocalizationActionTypes.SHOW_MODAL, payload: true });\r\n },\r\n dispatch,\r\n });\r\n };\r\n\r\nexport type GetAvailableHours = (\r\n storeId: string,\r\n distributionType: OrderDistributionType,\r\n) => ThunkAction;\r\ninterface SetCurrentStore extends Action {\r\n type: LocalizationActionTypes.SET_CURRENT_STORE;\r\n payload: CurrentStore;\r\n}\r\n\r\nexport const getCityBySelectedAddress = async (selectedAddress: AddressDetailsDto): Promise => {\r\n const input = `${selectedAddress.street}, ${selectedAddress.streetNumber}`;\r\n const suggestions: AxiosResponse = await Axios.get('api/locations/suggestions', { params: { input } });\r\n\r\n if (suggestions.data.length > 0) {\r\n const value: AxiosResponse = await Axios.get('api/locations/details', {\r\n params: { placeId: suggestions.data[0].placeId },\r\n });\r\n\r\n return value.data.city;\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport const validateAddress = async (\r\n selectedAddress: AddressDetailsDto,\r\n dispatch: any,\r\n message: string,\r\n): Promise => {\r\n const input = `${selectedAddress.street}, ${selectedAddress.streetNumber}, ${selectedAddress.city}, ${selectedAddress.postalCode}, ${selectedAddress.region}`;\r\n const suggestions: AxiosResponse = await Axios.get('api/locations/suggestions', { params: { input } });\r\n\r\n if (suggestions.data?.length == 0){\r\n dispatch(setMessageWithExpirationTime({ message, type: UserMessageType.ERROR }));\r\n return undefined;\r\n }\r\n\r\n if (!selectedAddress){\r\n return undefined;\r\n }\r\n\r\n // for not complete addresses and historic ones we need to choose the MOST PROBABLE suggestion\r\n const addressForValidation = selectedAddress.isCompleteAddress && selectedAddress.placeId\r\n ? suggestions.data.find(s => s.placeId === selectedAddress.placeId)\r\n : suggestions.data[0];\r\n\r\n if (addressForValidation){\r\n const primaryAddress: AxiosResponse = await Axios.get('api/locations/details', {\r\n params: { placeId: addressForValidation.placeId },\r\n });\r\n\r\n if (primaryAddress?.data?.isCompleteAddress) {\r\n return { ...selectedAddress, ...primaryAddress.data };\r\n }\r\n }\r\n\r\n // alternate address from suggestions - for MX locations, location with street number is often returned as second suggestion\r\n const alternateAddressForValidation = suggestions.data[1];\r\n if (alternateAddressForValidation) {\r\n const secondaryAddress: AxiosResponse = await Axios.get('api/locations/details', {\r\n params: { placeId: alternateAddressForValidation.placeId },\r\n });\r\n\r\n if (secondaryAddress?.data?.isCompleteAddress) {\r\n return { ...selectedAddress, ...secondaryAddress.data };\r\n }\r\n }\r\n\r\n dispatch(setMessageWithExpirationTime({ message, type: UserMessageType.ERROR }));\r\n return undefined;\r\n};\r\n\r\nexport const getAdditionalAddressInfo = async (\r\n selectedAddress: AddressDetailsDto,\r\n storeExternalId: string,\r\n): Promise => {\r\n const result: AxiosResponse = await Axios.get('api/locations/additional-info', {\r\n params: {\r\n streetName: selectedAddress.street,\r\n streetNumber: selectedAddress.streetNumber,\r\n city: selectedAddress.city,\r\n state: selectedAddress.region,\r\n postalCode: selectedAddress.postalCode,\r\n country: selectedAddress.country,\r\n latitude: selectedAddress.latitude,\r\n longitude: selectedAddress.longitude,\r\n storeId: storeExternalId,\r\n },\r\n });\r\n\r\n return result.data;\r\n};\r\n\r\nexport const setStoreAndSave =\r\n (store?: StoreDto, isOpen?: boolean): ThunkAction =>\r\n async (dispatch, getState): Promise => {\r\n if (store && isOpen !== undefined) {\r\n dispatch({\r\n type: LocalizationActionTypes.SET_CURRENT_STORE,\r\n payload: {\r\n isOpen,\r\n ...store,\r\n },\r\n });\r\n }\r\n\r\n const state = getState();\r\n const { currentStore, selectedAddress, distributionType, selectedOrderTime } = state.localization;\r\n const updatedCurrentStore = { ...currentStore, availableHours: undefined };\r\n\r\n const json = JSON.stringify({\r\n currentStore: updatedCurrentStore,\r\n selectedAddress,\r\n distributionType,\r\n selectedOrderTime,\r\n });\r\n\r\n const expirationDate = selectedOrderTime?.isAsap\r\n ? add(new Date(), { minutes: 30 })\r\n : new Date(selectedOrderTime?.utcDateTimeFrame as Date);\r\n\r\n storeDataInCookie('localization', json, expirationDate);\r\n\r\n if (currentStore.id !== '') {\r\n gtm.localizationModule.localizationSuccess(distributionType, currentStore.id);\r\n }\r\n };\r\n\r\nexport const refreshSelectedAddressAndSave =\r\n (addressAddition: string, addressRemarks: string): ThunkAction =>\r\n async (dispatch, getState): Promise => {\r\n const state = getState();\r\n const { currentStore, selectedAddress, distributionType, selectedOrderTime } = state.localization;\r\n\r\n const updatedSelectedAddress = { ...selectedAddress, addressAddition, remark: addressRemarks };\r\n dispatch({\r\n type: LocalizationActionTypes.SET_SELECTED_ADDRESS,\r\n payload: updatedSelectedAddress,\r\n });\r\n\r\n const json = JSON.stringify({\r\n currentStore,\r\n selectedAddress: updatedSelectedAddress,\r\n distributionType,\r\n selectedOrderTime,\r\n });\r\n\r\n const expirationDate = selectedOrderTime?.isAsap\r\n ? add(new Date(), { minutes: 30 })\r\n : new Date(selectedOrderTime?.utcDateTimeFrame as Date);\r\n\r\n storeDataInCookie('localization', json, expirationDate);\r\n };\r\n\r\nexport const changeDistributionType =\r\n (distributionType: OrderDistributionType): ThunkAction =>\r\n async (dispatch): Promise => {\r\n dispatch({\r\n type: GlobalActionTypes.CLEAR_MESSAGES,\r\n });\r\n dispatch({\r\n type: LocalizationActionTypes.SET_FORCE_DELIVERY_DISTRIBUTION,\r\n payload: false,\r\n });\r\n dispatch({\r\n type: LocalizationActionTypes.CHANGE_ORDER_DISTRIBUTION,\r\n payload: distributionType,\r\n });\r\n dispatch({ type: LocalizationActionTypes.SET_NEARBY_STORES, payload: [] });\r\n };\r\n\r\nexport const getLastAddresses =\r\n (): ThunkAction =>\r\n async (dispatch): Promise => {\r\n return ResponseWrapper({\r\n action: async (): Promise => {\r\n const addresses = await Axios.get('api/accounts/addresses', { params: { limit: 5 } });\r\n\r\n dispatch({ type: LocalizationActionTypes.SET_LAST_USED_ADDRESSES, payload: addresses.data });\r\n },\r\n dispatch,\r\n });\r\n };\r\n\r\nexport const getLastStores =\r\n (): ThunkAction =>\r\n async (dispatch): Promise => {\r\n return ResponseWrapper({\r\n action: async (): Promise => {\r\n const addresses = await Axios.get('api/accounts/last-pickup-stores');\r\n\r\n dispatch({ type: LocalizationActionTypes.SET_LAST_USED_STORES, payload: addresses.data });\r\n },\r\n dispatch,\r\n });\r\n };\r\n\r\nexport const clearStoreAndSave =\r\n (): ThunkAction =>\r\n async (dispatch): Promise => {\r\n dispatch({ type: LocalizationActionTypes.CLEAR_STORE });\r\n dispatch(setStoreAndSave());\r\n };\r\n\r\nexport const setCurrentStoreStatus =\r\n (store: StoreDto, toDeliver: boolean): ThunkAction =>\r\n async (dispatch): Promise => {\r\n return ResponseWrapper({\r\n action: async (): Promise => {\r\n const params = { storeId: store.id, toDeliver };\r\n const storeStatus = await Axios.get('api/stores/store-status', { params });\r\n dispatch({\r\n type: LocalizationActionTypes.SET_SELECTED_STORE_STATUS,\r\n payload: { ...storeStatus, storePhoneNumber: store.phoneNumber },\r\n });\r\n },\r\n dispatch,\r\n });\r\n };\r\n\r\nexport const clearCurrentStoreStatus =\r\n (): ThunkAction =>\r\n async (dispatch): Promise => {\r\n dispatch({ type: LocalizationActionTypes.SET_SELECTED_STORE_STATUS, payload: undefined });\r\n };\r\n\r\nexport type LocalizationActions =\r\n | ChangeOrderDistribution\r\n | OnPropertyChanged\r\n | SetSuggestions\r\n | SetSelectedAddress\r\n | SetSelectedOrderTime\r\n | SetCurrentStore\r\n | SetNearbyStores\r\n | ClearStore\r\n | ShowToast\r\n | ShowModal\r\n | ShowNumberInput\r\n | SetLastUsedAddresses\r\n | SetLastUsedStores\r\n | SetForceDeliveryDistribution\r\n | SetSelectedtStoreStatus\r\n | SetAddressAdditionalInfo;\r\n","import Axios from 'shared/api/axios';\r\n\r\nimport { OrderDistributionType } from 'shared/types';\r\nimport { DateTime } from 'shared/helpers';\r\nimport { StoreDto, StoreStatusDto } from '../types/dto.types';\r\n\r\nexport const getStoreStatus = async (storeId: string, distributionType: OrderDistributionType): Promise => {\r\n const params = { storeId, toDeliver: distributionType === OrderDistributionType.Delivery };\r\n const storeStatusResponse = await Axios.get('api/stores/store-status', { params });\r\n\r\n return storeStatusResponse.data;\r\n};\r\n","/* eslint-disable react/jsx-no-bind */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport useVisible from 'hooks/useVisible';\r\n\r\n// shared\r\nimport { StringHelper } from 'shared/helpers';\r\nimport { OrderDistributionType, UserMessageType, StaticContent } from 'shared/types';\r\nimport { SetLoader, setMessageWithExpirationTime } from 'shared/store/global/global.actions';\r\nimport { LocalizationRequestErrorType } from 'typings/web-bridge.types';\r\n\r\n// components\r\nimport { GlobalState } from 'shared/store/global/global.reducer';\r\nimport StoresList from '../Components/stores-list.component';\r\nimport Suggestions from '../../../shared/components/suggestions.component';\r\nimport AddressInput from '../Components/address-input.component';\r\nimport InfoPanelContainer from './info-panel.container';\r\nimport LocalizationAddition from '../Components/localization-addition.component';\r\nimport LastUsedAddresses from '../Components/last-used-addresses.component';\r\n\r\n// validators\r\nimport { ValidateDeliveryAddress, ValidateDeliveryResponse } from '../Validators/address.validator';\r\n\r\n// store\r\nimport { LocalizationActionTypes, validateAddress, getCityBySelectedAddress } from '../Store/actions';\r\nimport * as LocalizationActions from '../Store/actions';\r\nimport { LocalizationState } from '../Store/reducers';\r\nimport { ApplicationState } from '../Store';\r\nimport { LocalizationStaticContent } from '../Store/static-content/localization-static-content.reducer';\r\n\r\nlet predictionsTimer: ReturnType;\r\n\r\nconst LocalizationSearch: React.FC = () => {\r\n const { messages } = useSelector((state) => state.staticContent);\r\n const {\r\n mainCTA,\r\n geolocationTextDelivery,\r\n geolocationTextPickup,\r\n signInLink,\r\n deliveryAddition,\r\n pickupAddition,\r\n dropdownDeliveryLabelRegisteredUser,\r\n dropdownPickupLabelRegisteredUser,\r\n storeDistanceUnit,\r\n } = useSelector((state) => state.localizationStaticContent);\r\n\r\n const { signedin } = useSelector((state) => state.global);\r\n\r\n const { ref, isVisible, setIsVisible } = useVisible(false);\r\n const [showStores, setShowStores] = useState(true);\r\n const [showLastUsed, setShowLastUsed] = useState(false);\r\n\r\n const dispatch = useDispatch();\r\n const { selectedAddress, suggestions, distributionType, showNumberInput, lastAddresses, lastStores } = useSelector<\r\n ApplicationState,\r\n LocalizationState\r\n >((state) => state.localization);\r\n\r\n const isDelivery = distributionType === OrderDistributionType.Delivery;\r\n const showSuggestions = suggestions && suggestions.length > 0 && isVisible;\r\n\r\n function setFocusOnInput(input: 'address' | 'number'): void {\r\n if (input === 'address') {\r\n // eslint-disable-next-line no-unused-expressions\r\n document.getElementById('address-input--main-field')?.focus();\r\n } else {\r\n // eslint-disable-next-line no-unused-expressions\r\n document.getElementById('address-input--street-number')?.focus();\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (showNumberInput && selectedAddress.value) {\r\n setFocusOnInput('number');\r\n }\r\n }, [showNumberInput]);\r\n\r\n useEffect(() => {\r\n if (signedin) {\r\n dispatch(LocalizationActions.getLastAddresses());\r\n dispatch(LocalizationActions.getLastStores());\r\n }\r\n }, [signedin]);\r\n\r\n function userLocationHandler(): void {\r\n isDelivery ? gtm.localizationModule.geolocationClickedOnDelivery() : gtm.localizationModule.geolocationClickedOnCollection();\r\n\r\n const mobile = window.S4DWebBridge();\r\n if (mobile == null) {\r\n dispatch(LocalizationActions.getCoordsSuggestions());\r\n } else {\r\n dispatch(SetLoader(true));\r\n mobile.requestLocation(successMobileLocationRequestHandler, failedMobileLocationRequestHandler);\r\n }\r\n\r\n if (!isDelivery) {\r\n setShowStores(true);\r\n setShowLastUsed(false);\r\n }\r\n }\r\n\r\n function successMobileLocationRequestHandler(latitude: number, longitude: number): void {\r\n dispatch(LocalizationActions.prepareCoordsSuggestions(latitude, longitude));\r\n }\r\n\r\n function failedMobileLocationRequestHandler(error: LocalizationRequestErrorType): void {\r\n dispatch(LocalizationActions.setRequestLocalizationError(error));\r\n dispatch(SetLoader(false));\r\n }\r\n\r\n function selectSuggestionHandler(placeId: string): void {\r\n isDelivery ? gtm.localizationModule.suggestionClickedOnDelivery() : gtm.localizationModule.suggestionClickedOnCollection();\r\n dispatch(LocalizationActions.getSelectedAddress(placeId));\r\n setIsVisible(false);\r\n\r\n if (!isDelivery) {\r\n setShowStores(true);\r\n setShowLastUsed(false);\r\n }\r\n }\r\n\r\n async function goToTimeSlotSelect(): Promise {\r\n if (!selectedAddress.value) {\r\n dispatch(setMessageWithExpirationTime({ message: messages.tooltipsFillAddress, type: UserMessageType.WARNING }));\r\n setFocusOnInput('address');\r\n return;\r\n }\r\n if (!selectedAddress.street) {\r\n dispatch(setMessageWithExpirationTime({ message: messages.errorMessagesWrongAddress, type: UserMessageType.ERROR }));\r\n setFocusOnInput('address');\r\n return;\r\n }\r\n const validationResult = ValidateDeliveryAddress({ address: selectedAddress, dispatch, messages });\r\n if (validationResult !== ValidateDeliveryResponse.Valid) {\r\n if (validationResult === ValidateDeliveryResponse.NumberErr) {\r\n setFocusOnInput('number');\r\n return;\r\n }\r\n setFocusOnInput('address');\r\n return;\r\n }\r\n if (!selectedAddress.city) {\r\n // Google's api sometimes can't return the city for address that don't provide an house number\r\n // At this stage we know for sure the value of house number and we can make a new request to get the city\r\n const city = await getCityBySelectedAddress(selectedAddress);\r\n if (city) {\r\n selectedAddress.city = city;\r\n }\r\n }\r\n dispatch(SetLoader(true));\r\n const validAddress = await validateAddress(selectedAddress, dispatch, messages.errorMessagesWrongStreetNumber);\r\n if (validAddress) {\r\n dispatch({ type: LocalizationActions.LocalizationActionTypes.SET_SELECTED_ADDRESS, payload: validAddress });\r\n dispatch(LocalizationActions.getCurrentStore());\r\n } else {\r\n dispatch(SetLoader(false));\r\n setFocusOnInput('number');\r\n }\r\n }\r\n\r\n function getSuggestions(value: string): void {\r\n clearTimeout(predictionsTimer);\r\n predictionsTimer = setTimeout(() => {\r\n dispatch(LocalizationActions.getSuggestions(value));\r\n setIsVisible(true);\r\n }, 250);\r\n }\r\n\r\n function onPropertyChange(sender: React.ChangeEvent): void {\r\n const { name, value } = sender.target;\r\n dispatch({ type: LocalizationActionTypes.ON_PROPERTY_CHANGED, payload: { name, value } });\r\n\r\n name !== 'streetNumber' && getSuggestions(value);\r\n }\r\n\r\n function getGeolocationStyle(): string {\r\n if (!isDelivery) return 'border-top-0';\r\n if (showNumberInput) return 'rounded mt-1';\r\n return 'border-top-0';\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n {\r\n dispatch({ type: LocalizationActionTypes.SET_SELECTED_ADDRESS });\r\n dispatch({ type: LocalizationActionTypes.CLEAR_STORE });\r\n }}\r\n suggestionsHelper={(): void => setIsVisible(true)}\r\n showStreetNumberInput={showNumberInput}\r\n />\r\n {showSuggestions && (\r\n
\r\n \r\n \r\n
\r\n
\r\n )}\r\n
\r\n \r\n \r\n {isDelivery ? geolocationTextDelivery : geolocationTextPickup}\r\n \r\n
\r\n {isDelivery && (\r\n {\r\n gtm.localizationModule.submitClickedOnDelivery();\r\n goToTimeSlotSelect();\r\n }}\r\n data-testid=\"localization__button--get-to-select-hour-modal\"\r\n >\r\n {mainCTA}\r\n \r\n )}\r\n {!isDelivery && (\r\n {\r\n dispatch(LocalizationActions.setCurrentStoreForPickup(store));\r\n }}\r\n show={showStores}\r\n onToggle={(): void => {\r\n setShowStores((prevState) => !prevState);\r\n showLastUsed && setShowLastUsed(false);\r\n }}\r\n />\r\n )}\r\n\r\n {!signedin && (\r\n

\r\n \r\n {StringHelper.GetFirstNWords(signInLink, 2)}\r\n \r\n {StringHelper.OmitFirstNWords(signInLink, 2)}\r\n

\r\n )}\r\n {signedin && (\r\n {\r\n dispatch({\r\n type: LocalizationActionTypes.SET_SELECTED_ADDRESS,\r\n payload: { ...address, isCompleteAddress: true },\r\n });\r\n }}\r\n onSelectStoreFn={(store) => {\r\n dispatch(LocalizationActions.setCurrentStoreForPickup(store));\r\n }}\r\n lastAddresses={lastAddresses}\r\n lastStores={lastStores}\r\n distributionType={distributionType}\r\n dropdownLabel={\r\n distributionType === OrderDistributionType.Delivery\r\n ? dropdownDeliveryLabelRegisteredUser\r\n : dropdownPickupLabelRegisteredUser\r\n }\r\n onToggleFn={(): void => {\r\n setShowLastUsed((prev) => !prev);\r\n showStores && setShowStores(false);\r\n }}\r\n showLastUsed={showLastUsed}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default LocalizationSearch;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useState, useRef, useEffect, MouseEvent, MutableRefObject } from 'react';\r\n\r\ninterface ObjectVisibleHook {\r\n ref: React.MutableRefObject;\r\n isVisible: boolean;\r\n setIsVisible: React.Dispatch>;\r\n}\r\n\r\nfunction useVisible(initialIsVisible?: boolean): ObjectVisibleHook {\r\n const [isVisible, setIsVisible] = useState(initialIsVisible ?? false);\r\n const ref = useRef(null);\r\n\r\n const handleClickOutside = (ev: globalThis.MouseEvent): any => {\r\n if (ref.current !== null) {\r\n if (!ref.current.contains(ev.target)) {\r\n setIsVisible(false);\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.addEventListener('click', handleClickOutside, true);\r\n return (): void => {\r\n document.removeEventListener('click', handleClickOutside, true);\r\n };\r\n }, []);\r\n\r\n return { ref, isVisible, setIsVisible };\r\n}\r\nexport default useVisible;\r\n","import React, { ReactNode, useEffect } from 'react';\r\nimport useShowDelay from 'hooks/useShowDelay';\r\nimport { ModalProps as _modalProps } from '../types';\r\n\r\ninterface BackdropComponentProps {\r\n children: ReactNode;\r\n isVisible: boolean;\r\n transparent?: boolean;\r\n onClose?(): void;\r\n closeButton?(): void;\r\n closeButtonTestId?: string;\r\n fullWidth?: boolean;\r\n backdropButton?: { visible: boolean; fixedPosition?: boolean };\r\n}\r\n\r\nconst BackdropComponent: React.FC = ({\r\n children,\r\n isVisible,\r\n onClose,\r\n transparent,\r\n closeButton,\r\n closeButtonTestId,\r\n fullWidth,\r\n backdropButton,\r\n}) => {\r\n const { show } = useShowDelay(isVisible);\r\n\r\n useEffect(() => {\r\n const body: HTMLBodyElement = document.getElementsByTagName('body')[0];\r\n if (isVisible) {\r\n body.style.overflowY = 'hidden';\r\n } else {\r\n body.style.overflowY = 'auto';\r\n }\r\n // eslint-disable-next-line no-unused-expressions\r\n return (): void => {\r\n body.style.overflowY = 'auto';\r\n };\r\n }, [isVisible]);\r\n\r\n const showCloseButton = !!closeButton && !backdropButton?.visible;\r\n\r\n return (\r\n
\r\n
\r\n {backdropButton?.visible && (\r\n \r\n )}\r\n
\r\n
\r\n {\r\n e.stopPropagation();\r\n }}\r\n style={\r\n fullWidth\r\n ? {\r\n maxWidth: 'unset',\r\n }\r\n : {}\r\n }\r\n >\r\n \r\n {showCloseButton && (\r\n
\r\n \r\n
\r\n )}\r\n {backdropButton?.visible && !backdropButton.fixedPosition && (\r\n \r\n )}\r\n {children}\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default BackdropComponent;\r\n\r\nexport type ModalProps = _modalProps;\r\n","/* eslint-disable no-use-before-define */\r\nimport React, { useEffect, useState } from 'react';\r\nimport uuidGenerator from 'shared/tools/uuid-generator';\r\nimport { AvailableDateTimeFrame, SelectedDateTimeFrame } from 'apps/LocalizationApp/types/dto.types';\r\n\r\ninterface SelectTimeProps {\r\n availableHours: AvailableDateTimeFrame[];\r\n onSetTimeFn(orderTime: SelectedDateTimeFrame): void;\r\n labels: {\r\n mainCTA: string;\r\n chooseTimeHeading: string;\r\n chooseTimeAsap: string;\r\n };\r\n}\r\n\r\nconst SelectTime: React.FC = function ({ availableHours, onSetTimeFn, labels }) {\r\n useEffect(() => {\r\n gtm.modalLoad('order-time-select');\r\n }, []);\r\n\r\n const [selectedDateTimeFrame, setSelectedDateTimeFrame] = useState();\r\n\r\n function onTimeSelected(index: number): void {\r\n const baseDateTimeFrame = availableHours[index];\r\n setSelectedDateTimeFrame({\r\n dateTimeFrame: baseDateTimeFrame.isAsap ? undefined : baseDateTimeFrame.dateTimeFrame,\r\n isAsap: baseDateTimeFrame.isAsap,\r\n timeFrame: baseDateTimeFrame.timeFrame,\r\n isFirstAvailableDateFrame: index === 0,\r\n utcDateTimeFrame: baseDateTimeFrame.utcDateTimeFrame,\r\n });\r\n }\r\n\r\n function setOrderTime(): void {\r\n selectedDateTimeFrame && onSetTimeFn(selectedDateTimeFrame);\r\n }\r\n\r\n function renderHourDisplayValue(index: number): string {\r\n if (index < 0) return '';\r\n const hour = availableHours[index].timeFrame;\r\n return printHour(hour, availableHours[index].isAsap, index === 0);\r\n }\r\n\r\n function printHour(hour: string, isAsap: boolean, isFirstOnList: boolean) {\r\n if (isAsap) {\r\n return labels.chooseTimeAsap;\r\n }\r\n if (isFirstOnList) {\r\n return `${labels.chooseTimeAsap} ${hour}`;\r\n }\r\n return hour;\r\n }\r\n\r\n useEffect(() => {\r\n onTimeSelected(0);\r\n }, []);\r\n\r\n return (\r\n
\r\n {labels.chooseTimeHeading}\r\n
\r\n \r\n \r\n \r\n {renderHourDisplayValue(\r\n (selectedDateTimeFrame &&\r\n availableHours.findIndex((ah) => ah.timeFrame === selectedDateTimeFrame.timeFrame)) ??\r\n 0,\r\n )}\r\n \r\n \r\n
\r\n {availableHours.map((hour, index) => (\r\n onTimeSelected(index)}\r\n data-testid={`localization__button--available-hour-${hour?.timeFrame}`}\r\n >\r\n {renderHourDisplayValue(index)}\r\n \r\n ))}\r\n
\r\n
\r\n \r\n {labels.mainCTA}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default SelectTime;\r\n","function uuidGenerator(): string {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function replacing(c): string {\r\n const r = (Math.random() * 16) | 0;\r\n const v = c === 'x' ? r : r & (0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nexport default uuidGenerator;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { ApplicationState } from '../Store';\r\nimport { LocalizationStaticContent } from '../Store/static-content/localization-static-content.reducer';\r\nimport { StoreDto } from '../types/dto.types';\r\n\r\ninterface StoreUnavailableProps {\r\n nearbyStores: StoreDto[];\r\n currentStoreId: string;\r\n onSelect(store: StoreDto): void;\r\n onReturn(): void;\r\n}\r\n\r\nconst StoreUnavailable: React.FC = ({ nearbyStores, currentStoreId, onSelect, onReturn }) => {\r\n const { storeUnavailable } = useSelector((state) => state.localizationStaticContent);\r\n const storesList: StoreDto[] = nearbyStores.filter((store) => store.id !== currentStoreId);\r\n\r\n return (\r\n <>\r\n {storesList.length > 0 && (\r\n
\r\n
\r\n

\r\n {storeUnavailable.outOfDeliveryRangeHeading}\r\n

\r\n

{storeUnavailable.outOfDeliveryRangeText}

\r\n
\r\n {storesList.map((store) => {\r\n return (\r\n onSelect(store)}\r\n key={store.id}\r\n data-testid=\"localization__button--select-another-store\"\r\n >\r\n

{`${store.street}, ${store.streetNumber} (${store.city})`}

\r\n

{`${storeUnavailable.distancePrefix}${(\r\n store.distance / 1000\r\n ).toFixed(2)}${storeUnavailable.distanceSuffix}`}

\r\n \r\n
\r\n );\r\n })}\r\n \r\n )}\r\n {storesList.length <= 0 && (\r\n \r\n

\r\n {storeUnavailable.noStoreAvailable}\r\n

\r\n \r\n {storeUnavailable.returnButton}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default StoreUnavailable;\r\n","import React from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\n// components\r\nimport Backdrop from 'shared/components/modal.compontent';\r\nimport SelectTime from 'shared/components/select-time.component';\r\nimport StoreUnavailable from '../Components/store-unavailable.component';\r\n\r\n// store\r\nimport { LocalizationActionTypes, setCurrentStoreForPickup, setStoreAndSave } from '../Store/actions';\r\nimport { LocalizationState } from '../Store/reducers';\r\nimport { ApplicationState } from '../Store';\r\nimport { StoreDto } from '../types/dto.types';\r\nimport { LocalizationStaticContent } from '../Store/static-content/localization-static-content.reducer';\r\n\r\nconst ChooseTime: React.FC = () => {\r\n const { currentStore, nearbyStores, distributionType, showModal } = useSelector(\r\n (state) => state.localization,\r\n );\r\n const { mainCTA, chooseTimeHeading, chooseTimeAsap } = useSelector(\r\n (state) => state.localizationStaticContent,\r\n );\r\n\r\n const dispatch = useDispatch();\r\n\r\n if (!showModal) return <>;\r\n\r\n function selectStoreHandler(store: StoreDto): void {\r\n dispatch(setCurrentStoreForPickup(store));\r\n }\r\n\r\n function onClose(): void {\r\n dispatch({ type: LocalizationActionTypes.CLEAR_STORE });\r\n dispatch({ type: LocalizationActionTypes.CHANGE_ORDER_DISTRIBUTION, payload: distributionType });\r\n dispatch({ type: LocalizationActionTypes.SHOW_MODAL, payload: false });\r\n }\r\n\r\n function renderData(): JSX.Element {\r\n if (currentStore?.isOpen && currentStore.availableHours && currentStore.availableHours.timeframes.length > 0) {\r\n return (\r\n {\r\n dispatch({\r\n type: LocalizationActionTypes.SET_ORDER_TIME,\r\n payload: orderTime,\r\n });\r\n dispatch(setStoreAndSave());\r\n gtm.localizationModule.orderTimeSelected();\r\n window.location.href = '/products/offers';\r\n }}\r\n labels={{ mainCTA, chooseTimeHeading, chooseTimeAsap }}\r\n />\r\n );\r\n }\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {renderData()}\r\n \r\n );\r\n};\r\n\r\nexport default ChooseTime;\r\n","import { ApplicationState } from 'apps/LocalizationApp/Store';\r\nimport { LocalizationStaticContent } from 'apps/LocalizationApp/Store/static-content/localization-static-content.reducer';\r\nimport React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { OrderDistributionType } from 'shared/types';\r\n\r\nexport interface OrderDistributionSwitchProps {\r\n distributionType: OrderDistributionType;\r\n distributionChange: (type: OrderDistributionType) => void;\r\n}\r\n\r\nconst OrderTypeSwitch: React.FC = ({ distributionType, distributionChange }) => {\r\n const { pickupIcon, pickupIconDisabled, deliveryIcon, deliveryIconDisabled } = useSelector<\r\n ApplicationState,\r\n LocalizationStaticContent\r\n >((state) => state.localizationStaticContent);\r\n const isPickup = distributionType === OrderDistributionType.Pickup;\r\n const { deliveryTabText, pickupTabText } = useSelector(\r\n (state) => state.localizationStaticContent,\r\n );\r\n return (\r\n
\r\n {\r\n distributionChange(OrderDistributionType.Delivery);\r\n gtm.localizationModule.deliveryTabClicked();\r\n }}\r\n className={`d-flex font-weight-bold justify-content-center align-items-center mr-1 w-100 ${\r\n distributionType === OrderDistributionType.Delivery ? 'active' : ''\r\n }`}\r\n data-testid=\"localization__button--delivery-switch\"\r\n >\r\n
\r\n \r\n
\r\n \r\n {deliveryTabText}\r\n \r\n
\r\n {\r\n distributionChange(OrderDistributionType.Pickup);\r\n gtm.localizationModule.collectionTabClicked();\r\n }}\r\n className={`d-flex font-weight-bold justify-content-center align-items-center ml-1 w-100 ${\r\n distributionType === OrderDistributionType.Pickup ? 'active' : ''\r\n }`}\r\n data-testid=\"localization__button--pickup-switch\"\r\n >\r\n
\r\n \r\n
\r\n \r\n {pickupTabText}\r\n \r\n \r\n \r\n );\r\n};\r\nexport default OrderTypeSwitch;\r\n","import React from 'react';\r\n\r\ninterface ChangeAddressAlertProps {\r\n labels: {\r\n title: string;\r\n informationText: string;\r\n confirmButton: string;\r\n cancelButton: string;\r\n };\r\n onConfirmFn(): void;\r\n onCancelFn(): void;\r\n}\r\n\r\nconst ChangeAddressAlert: React.FC = ({ labels, onConfirmFn, onCancelFn }) => {\r\n const { title, informationText, confirmButton, cancelButton } = labels;\r\n\r\n return (\r\n
\r\n
\r\n

\r\n {title}\r\n

\r\n \r\n {informationText}\r\n

\r\n \r\n {confirmButton}\r\n \r\n \r\n {cancelButton}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ChangeAddressAlert;\r\n","import React, { useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\n\r\n// store\r\nimport { OrderDistributionType } from 'shared/types';\r\nimport ChangeAddressAlert from 'shared/components/change-address-alert.component';\r\nimport { ApplicationState } from '../Store';\r\nimport { LocalizationState } from '../Store/reducers';\r\nimport { LocalizationStaticContent } from '../Store/static-content/localization-static-content.reducer';\r\n\r\ninterface ChangeStoreProps {\r\n onContinueFn(): void;\r\n onChangeStoreFn(): void;\r\n}\r\n\r\nconst ChangeStore: React.FC = ({ onContinueFn, onChangeStoreFn }) => {\r\n // store\r\n const { changeStore, addressAlertModal } = useSelector(\r\n (state) => state.localizationStaticContent,\r\n );\r\n const { selectedAddress, distributionType, currentStore } = useSelector(\r\n (state) => state.localization,\r\n );\r\n\r\n const [showConfirm, setShowConfirm] = useState(false);\r\n\r\n // actions\r\n const onChangeStore = (): void => {\r\n gtm.localizationModule.changeAddressClicked();\r\n const basket = localStorage.getItem('basket');\r\n const parsedBasket = basket ? JSON.parse(basket) : null;\r\n if (parsedBasket?.basket?.items?.length > 0) {\r\n setShowConfirm(true);\r\n return;\r\n }\r\n\r\n onChangeStoreFn();\r\n };\r\n\r\n if (showConfirm) {\r\n return (\r\n {\r\n setShowConfirm(false);\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

\r\n {distributionType === OrderDistributionType.Delivery\r\n ? changeStore.changeDeliveryTitle\r\n : changeStore.changePickupTitle}\r\n

\r\n

\r\n {distributionType === OrderDistributionType.Delivery\r\n ? `${selectedAddress.street}, ${selectedAddress.streetNumber}. ${selectedAddress.city}`\r\n : `${currentStore.street}, ${currentStore.streetNumber}. ${currentStore.city}`}\r\n

\r\n \r\n {changeStore.changeStoreButton}\r\n \r\n \r\n {changeStore.goToCatalogButton}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ChangeStore;\r\n","import useKeyPress from 'hooks/useKeyPress';\r\nimport React from 'react';\r\nimport Modal, { ModalProps } from 'shared/components/modal.compontent';\r\n\r\ninterface Props extends ModalProps {\r\n labels: {\r\n header: string;\r\n subHeader: string;\r\n ctaText?: string;\r\n };\r\n isVisible: boolean;\r\n onConfirmFn?: () => void;\r\n testId: string;\r\n}\r\n\r\nconst SingleActionModal = ({ labels, isVisible, cancelCallbackFn, onConfirmFn, testId }: Props) => {\r\n useKeyPress('ENTER', onConfirmFn || cancelCallbackFn);\r\n\r\n return (\r\n \r\n
\r\n
\r\n {labels.header}\r\n
\r\n

\r\n {labels.subHeader}\r\n

\r\n {labels.ctaText && (\r\n \r\n {labels.ctaText}\r\n \r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default SingleActionModal;\r\n","import { useEffect } from 'react';\r\n\r\nexport default function useKeyPress(keyCode: KeyboardEvent['code'], callback: () => void, deps?: React.DependencyList): void {\r\n const keyPressHandler = (event: KeyboardEvent) => {\r\n if (event.key?.toUpperCase() === keyCode.toUpperCase()) {\r\n event.preventDefault();\r\n callback();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n window.addEventListener('keydown', keyPressHandler);\r\n return () => {\r\n window.removeEventListener('keydown', keyPressHandler);\r\n };\r\n }, deps);\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport SingleActionModal from 'shared/components/single-action-modal.component';\r\n\r\nimport { OrderDistributionType } from 'shared/types';\r\nimport { LocalizationState } from '../Store/reducers';\r\nimport { ApplicationState } from '../Store';\r\nimport { LocalizationStaticContent } from '../Store/static-content/localization-static-content.reducer';\r\nimport { StoreState } from '../types/localization.types';\r\nimport { LocalizationActionTypes } from '../Store/actions';\r\n\r\ninterface Props {\r\n isVisible: boolean;\r\n}\r\n\r\nconst StoreStatusInfo = ({ isVisible }: Props): JSX.Element => {\r\n const { selectedStoreStatus, distributionType } = useSelector((state) => state.localization);\r\n const { storeStatusInfo } = useSelector((state) => state.localizationStaticContent);\r\n const dispatch = useDispatch();\r\n\r\n const renderModalSwitch = (): JSX.Element | null => {\r\n switch (selectedStoreStatus.state) {\r\n case StoreState.OPEN_BUT_NO_ONLINE_ORDERS:\r\n const modalText = `${storeStatusInfo.noOnlineOrdersModalText} ${selectedStoreStatus.storePhoneNumber}`;\r\n return (\r\n {\r\n dispatch({ type: LocalizationActionTypes.SHOW_MODAL, payload: false });\r\n }}\r\n onConfirmFn={() => {\r\n dispatch({ type: LocalizationActionTypes.SHOW_MODAL, payload: false });\r\n }}\r\n isVisible\r\n testId=\"no-online-orders-modal\"\r\n />\r\n );\r\n case StoreState.OPEN_BUT_NO_DELIVERY_ORDERS:\r\n return (\r\n {\r\n dispatch({ type: LocalizationActionTypes.SHOW_MODAL, payload: false });\r\n }}\r\n onConfirmFn={() => {\r\n dispatch({ type: LocalizationActionTypes.SHOW_MODAL, payload: false });\r\n }}\r\n isVisible\r\n testId=\"no-delivery-orders-modal\"\r\n />\r\n );\r\n case StoreState.OPEN_BUT_NO_PICKUP_ORDERS:\r\n return (\r\n {\r\n dispatch({ type: LocalizationActionTypes.SHOW_MODAL, payload: false });\r\n }}\r\n onConfirmFn={() => {\r\n dispatch({ type: LocalizationActionTypes.SHOW_MODAL, payload: false });\r\n }}\r\n isVisible\r\n testId=\"no-pickup-orders-modal\"\r\n />\r\n );\r\n case StoreState.CLOSED:\r\n const header =\r\n distributionType === OrderDistributionType.Delivery\r\n ? storeStatusInfo.noDeliveryOrdersModalHeader\r\n : storeStatusInfo.noPickupOrdersModalHeader;\r\n const subheader =\r\n distributionType === OrderDistributionType.Delivery\r\n ? storeStatusInfo.noDeliveryOrdersModalText\r\n : storeStatusInfo.noPickupOrdersModalText;\r\n\r\n return (\r\n {\r\n dispatch({ type: LocalizationActionTypes.SHOW_MODAL, payload: false });\r\n }}\r\n onConfirmFn={() => {\r\n dispatch({ type: LocalizationActionTypes.SHOW_MODAL, payload: false });\r\n }}\r\n isVisible\r\n testId=\"no-pickup-orders-modal\"\r\n />\r\n );\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n return
{isVisible ? renderModalSwitch() : null}
;\r\n};\r\n\r\nexport default StoreStatusInfo;\r\n","import Axios from 'shared/api/axios';\r\nimport { AxiosResponse } from 'axios';\r\nimport { Action } from 'redux';\r\nimport { ThunkAction } from 'redux-thunk';\r\nimport ResponseWrapper from 'shared/tools/api-response-wrapper';\r\nimport { LocalizationStaticContent } from './localization-static-content.reducer';\r\nimport { ApplicationState } from '../index';\r\n\r\nexport enum LocalizationStaticContentActionTypes {\r\n SET_STATIC_CONTENT = '[Localization.StaticContent] SET_STATIC_CONTENT',\r\n}\r\n\r\ninterface SetStaticContent {\r\n type: LocalizationStaticContentActionTypes.SET_STATIC_CONTENT;\r\n payload: LocalizationStaticContent;\r\n}\r\n\r\nexport const getStaticContent =\r\n (): ThunkAction =>\r\n async (dispatch): Promise => {\r\n ResponseWrapper({\r\n action: async () => {\r\n const value: AxiosResponse = await Axios.get('api/static-content/localization');\r\n dispatch({\r\n type: LocalizationStaticContentActionTypes.SET_STATIC_CONTENT,\r\n payload: value.data,\r\n });\r\n },\r\n dispatch,\r\n });\r\n };\r\n\r\nexport type StaticContentActions = SetStaticContent;\r\n","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\n// shared\r\nimport { RoutingHelpers } from 'shared/helpers';\r\nimport { OrderDistributionType } from 'shared/types';\r\nimport { getStaticContent } from 'shared/store/static-content/static-content.actions';\r\nimport { GlobalState } from 'shared/store/global/global.reducer';\r\nimport Loader from 'shared/components/loader.component';\r\n\r\n// components\r\nimport Toast from 'shared/components/toast.component';\r\nimport LocalizationSearch from './localization-search.container';\r\nimport ChooseTime from './choose-time.container';\r\nimport OrderTypeSwitch from '../Components/order-type-switch.component';\r\nimport ChangeStore from '../Components/change-store.component';\r\nimport StoreStatusInfo from './store-status-info.container';\r\n\r\n// store\r\nimport { LocalizationState } from '../Store/reducers';\r\nimport * as LocalizationActions from '../Store/actions';\r\nimport { ApplicationState } from '../Store';\r\nimport { getStaticContent as getLocalizationStaticContent } from '../Store/static-content/localization-static-content.actions';\r\nimport { LocalizationStaticContent } from '../Store/static-content/localization-static-content.reducer';\r\nimport { cookieExists } from 'shared/utils';\r\n\r\nconst SearchWindow = (): JSX.Element => {\r\n const { currentStore, distributionType, forceDeliveryDistributionType, selectedStoreStatus, showModal, nearbyStores, showToast } =\r\n useSelector((state) => state.localization);\r\n const { storeIsClosedToast } = useSelector(\r\n (state) => state.localizationStaticContent,\r\n );\r\n const { loader } = useSelector((state) => state.global);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(getStaticContent());\r\n dispatch(getLocalizationStaticContent());\r\n }, []);\r\n\r\n const storeSelected = currentStore.id !== '' && cookieExists('localization');\r\n\r\n return (\r\n
\r\n {storeSelected ? (\r\n {\r\n dispatch(LocalizationActions.clearStoreAndSave());\r\n forceDeliveryDistributionType &&\r\n dispatch(LocalizationActions.changeDistributionType(OrderDistributionType.Delivery));\r\n localStorage.removeItem('basket');\r\n }}\r\n />\r\n ) : (\r\n
\r\n {\r\n dispatch(LocalizationActions.changeDistributionType(type));\r\n }}\r\n />\r\n
\r\n \r\n
\r\n
\r\n )}\r\n {!selectedStoreStatus.canPlaceOrder &&\r\n selectedStoreStatus.state !== undefined &&\r\n nearbyStores.length === 0 &&\r\n showModal ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {loader && }\r\n {\r\n dispatch({ type: LocalizationActions.LocalizationActionTypes.SHOW_TOAST, payload: false });\r\n }}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport default SearchWindow;\r\n\r\nconst redirectToOffers = (): void => {\r\n const { redirectToOtherAppURL } = RoutingHelpers;\r\n redirectToOtherAppURL('products/offers');\r\n};\r\n","import { StaticContentActionTypes, StaticContentActions } from './static-content.actions';\r\nimport { StaticContent } from '../../types';\r\n\r\nexport const initialState: StaticContent = {\r\n messages: {\r\n tooltipsGeoDisabled: '',\r\n tooltipsFillAddress: '',\r\n tooltipsFillStreetNumber: '',\r\n tooltipsAdressConfirmation: '',\r\n errorMessagesWrongAddress: '',\r\n errorMessagesWrongStreetNumber: '',\r\n errorMessagesImpossibleToLocateDelivery: '',\r\n errorMessagesImpossibleToLocatePickup: '',\r\n errorMessagesNoStores: '',\r\n errorModalTitle: 'Ooops....!',\r\n errorModalDescription: 'Something went terribly wrong...',\r\n apiKey: '',\r\n },\r\n simplifiedFooter: [],\r\n configuration: {\r\n hideCouponsScratchedPrices: false,\r\n }\r\n};\r\n\r\nconst staticContentReducer = (state = initialState, action: StaticContentActions): StaticContent => {\r\n switch (action.type) {\r\n case StaticContentActionTypes.SET_STATIC_CONTENT: {\r\n return {\r\n ...state,\r\n messages: action.payload,\r\n };\r\n }\r\n case StaticContentActionTypes.SET_SIMPLIFIED_FOOTER: {\r\n return {\r\n ...state,\r\n simplifiedFooter: action.payload,\r\n };\r\n }\r\n case StaticContentActionTypes.SET_CONFIGURATION: {\r\n return {\r\n ...state,\r\n configuration: action.payload,\r\n }\r\n }\r\n default: {\r\n return { ...state };\r\n }\r\n }\r\n};\r\n\r\nexport default staticContentReducer;\r\n","import { AppConfiguration, AppReviewTarget, SupportedCulture, UserMessage } from '../../types';\r\nimport { GlobalActions, GlobalActionTypes } from './global.actions';\r\n\r\nconst { SET_USER_STATUS, SET_MESSAGES, CLEAR_MESSAGES, SET_LOADER_STATE, SHOW_UNHANDLED_ERROR_MODAL, SET_SUPPORTED_CULTURES, SET_APP_CONFIGURATION } =\r\n GlobalActionTypes;\r\n\r\nexport interface UserInfo {\r\n email: string;\r\n phone: string;\r\n firstName?: string;\r\n lastName?: string;\r\n lastActiveOrder?: string;\r\n}\r\n\r\nexport interface GlobalState {\r\n messages: UserMessage[];\r\n host: string;\r\n signedin: boolean;\r\n currentUser?: UserInfo;\r\n loader: boolean;\r\n showErrorModal: boolean;\r\n supportedCultures: SupportedCulture[];\r\n appConfiguration: AppConfiguration;\r\n}\r\n\r\nconst initialState: GlobalState = {\r\n messages: [],\r\n host: (document.getElementById('baseUrl') as HTMLInputElement).value,\r\n signedin: false,\r\n loader: false,\r\n showErrorModal: false,\r\n supportedCultures: [],\r\n appConfiguration: {\r\n maxChangeableToppingsForEditPizza: 8,\r\n maxExtraToppingsForEditPizza: 8,\r\n maxToppingsForCustomPizza: 8,\r\n appReviewsEnabled: false,\r\n positiveReviewsTarget: AppReviewTarget.NATIVE_STORE,\r\n negativeReviewsTarget: AppReviewTarget.DB\r\n }\r\n};\r\n\r\nconst authCookies = document.cookie;\r\n\r\nif (authCookies) {\r\n const items = authCookies.split(';');\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n const name = items[i].substring(0, items[i].indexOf('='));\r\n const value = items[i].substring(items[i].indexOf('=') + 1);\r\n\r\n if (name.toLowerCase().replace(/ /g, '') === 'pizza-hut-access-token') {\r\n const json = decodeURIComponent(value);\r\n const obj = JSON.parse(json);\r\n\r\n initialState.currentUser = {\r\n email: obj.Email,\r\n phone: obj.Phone,\r\n firstName: obj.FirstName,\r\n lastName: obj.LastName,\r\n lastActiveOrder: obj.LastActiveOrder,\r\n };\r\n initialState.signedin = true;\r\n }\r\n }\r\n}\r\n\r\nconst globalReducer = (state = initialState, action: GlobalActions): GlobalState => {\r\n switch (action.type) {\r\n case SET_MESSAGES: {\r\n return {\r\n ...state,\r\n messages: action.payload,\r\n };\r\n }\r\n case CLEAR_MESSAGES: {\r\n return {\r\n ...state,\r\n messages: initialState.messages,\r\n };\r\n }\r\n case SET_USER_STATUS: {\r\n const { signedin } = action.payload;\r\n return {\r\n ...state,\r\n signedin,\r\n };\r\n }\r\n case SET_LOADER_STATE: {\r\n const { value } = action.payload;\r\n return {\r\n ...state,\r\n loader: value,\r\n };\r\n }\r\n case SHOW_UNHANDLED_ERROR_MODAL: {\r\n return {\r\n ...state,\r\n showErrorModal: action.payload,\r\n };\r\n }\r\n case SET_SUPPORTED_CULTURES: {\r\n return {\r\n ...state,\r\n supportedCultures: action.payload,\r\n };\r\n }\r\n case SET_APP_CONFIGURATION: {\r\n return {\r\n ...state,\r\n appConfiguration: action.payload,\r\n };\r\n }\r\n default:\r\n return {\r\n ...state,\r\n };\r\n }\r\n};\r\n\r\nexport default globalReducer;\r\n","import { OrderDistributionType } from 'shared/types';\r\nimport { SelectedDateTimeFrame } from 'apps/LocalizationApp/types/dto.types';\r\nimport { LocalizationActionTypes, LocalizationActions } from './actions';\r\nimport { AddressDetailsDto, AddressSuggestionDto, AvailableHoursDto, StoreDto, StoreStatusDto } from '../types/dto.types';\r\n\r\nexport interface CurrentStore extends StoreDto {\r\n isOpen?: boolean;\r\n availableHours?: AvailableHoursDto;\r\n}\r\nexport interface StoreStatus extends StoreStatusDto {\r\n storePhoneNumber: string;\r\n}\r\n\r\nexport interface LocalizationState {\r\n distributionType: OrderDistributionType;\r\n suggestions: AddressSuggestionDto[];\r\n nearbyStores: StoreDto[];\r\n currentStore: CurrentStore;\r\n selectedStoreStatus: StoreStatus;\r\n selectedAddress: AddressDetailsDto;\r\n selectedAddressDetails: string;\r\n availableHours?: AvailableHoursDto;\r\n selectedOrderTime?: SelectedDateTimeFrame;\r\n fetched: boolean;\r\n showToast: boolean;\r\n showModal: boolean;\r\n showNumberInput: boolean;\r\n lastAddresses: AddressDetailsDto[];\r\n lastStores: StoreDto[];\r\n forceDeliveryDistributionType: boolean;\r\n}\r\n\r\nconst emptySelectedAddress = {\r\n city: '',\r\n country: '',\r\n isCompleteAddress: false,\r\n region: '',\r\n street: '',\r\n streetNumber: '',\r\n addressAddition: '',\r\n remark: '',\r\n value: '',\r\n placeId: '',\r\n longitude: undefined,\r\n latitude: undefined,\r\n postalCode: '',\r\n localizationStrategy: '',\r\n additionalInfo: undefined\r\n};\r\n\r\nexport const initialState: LocalizationState = {\r\n distributionType: OrderDistributionType.Delivery,\r\n fetched: false,\r\n suggestions: [],\r\n nearbyStores: [],\r\n selectedAddress: emptySelectedAddress,\r\n selectedAddressDetails: '',\r\n currentStore: {\r\n city: '',\r\n distance: 0,\r\n id: '',\r\n name: '',\r\n street: '',\r\n streetNumber: '',\r\n phoneNumber: '',\r\n },\r\n selectedStoreStatus: {\r\n state: undefined,\r\n stateDescription: '',\r\n reason: '',\r\n canPlaceOrder: false,\r\n timestamp: '',\r\n storePhoneNumber: '',\r\n },\r\n showToast: false,\r\n showModal: false,\r\n showNumberInput: false,\r\n lastAddresses: [],\r\n lastStores: [],\r\n forceDeliveryDistributionType: false,\r\n};\r\n\r\nconst localizationReducer = (state = initialState, action: LocalizationActions): LocalizationState => {\r\n switch (action.type) {\r\n case LocalizationActionTypes.CHANGE_ORDER_DISTRIBUTION: {\r\n const updatedSelectedAddress = { ...state.selectedAddress };\r\n const { streetNumber, street, city } = state.selectedAddress;\r\n const showNumberInput = action.payload === OrderDistributionType.Delivery && !!street && !streetNumber;\r\n\r\n if (updatedSelectedAddress.street && updatedSelectedAddress.city) {\r\n if (action.payload !== OrderDistributionType.Delivery) {\r\n updatedSelectedAddress.value = `${street}, ${streetNumber ? `${streetNumber}, ${city}` : city}`;\r\n } else if (showNumberInput) {\r\n updatedSelectedAddress.value = `${street}, ${city}`;\r\n } else {\r\n updatedSelectedAddress.value = `${street}, ${streetNumber}, ${city}`;\r\n }\r\n }\r\n return {\r\n ...state,\r\n fetched: false,\r\n selectedAddress: updatedSelectedAddress,\r\n distributionType: action.payload,\r\n showNumberInput,\r\n };\r\n }\r\n case LocalizationActionTypes.ON_PROPERTY_CHANGED: {\r\n const { value, name } = action.payload;\r\n const selectedAddress = name === 'value' ? emptySelectedAddress : state.selectedAddress;\r\n\r\n return {\r\n ...state,\r\n selectedAddress: {\r\n ...selectedAddress,\r\n [name]: value,\r\n },\r\n };\r\n }\r\n case LocalizationActionTypes.SET_SUGGESTIONS: {\r\n return {\r\n ...state,\r\n suggestions: action.payload,\r\n };\r\n }\r\n\r\n case LocalizationActionTypes.SET_SELECTED_ADDRESS: {\r\n if (!action.payload) {\r\n return {\r\n ...state,\r\n selectedAddress: { ...initialState.selectedAddress },\r\n };\r\n }\r\n\r\n const { streetNumber, street, city, postalCode, region, value } = action.payload;\r\n // \"value\" has the most details, but when we are using \"stored\" addresses (last 5 ones) we do not have this value\r\n const addressDetails = value && value.length > 1 \r\n ? value\r\n : `${street} ${streetNumber}, ${city}, ${postalCode}, ${region}`;\r\n\r\n let displayValue = value;\r\n if (street && city) {\r\n if (state.distributionType !== OrderDistributionType.Delivery) {\r\n displayValue = `${street}, ${streetNumber ? `${streetNumber}, ${city}` : city}`;\r\n } else if ((state.showNumberInput && streetNumber) || streetNumber) {\r\n displayValue = `${street}, ${streetNumber}, ${city}`;\r\n } else {\r\n displayValue = `${street}, ${city}`;\r\n }\r\n }\r\n\r\n return {\r\n ...state,\r\n selectedAddress: {\r\n ...action.payload,\r\n streetNumber: streetNumber || '',\r\n value: displayValue || state.selectedAddress.value,\r\n },\r\n selectedAddressDetails: addressDetails\r\n };\r\n }\r\n case LocalizationActionTypes.SET_ORDER_TIME: {\r\n return {\r\n ...state,\r\n selectedOrderTime: action.payload,\r\n };\r\n }\r\n case LocalizationActionTypes.SET_CURRENT_STORE: {\r\n return {\r\n ...state,\r\n currentStore: {\r\n ...state.currentStore,\r\n ...action.payload,\r\n },\r\n };\r\n }\r\n case LocalizationActionTypes.SET_NEARBY_STORES: {\r\n return {\r\n ...state,\r\n nearbyStores: action.payload,\r\n };\r\n }\r\n case LocalizationActionTypes.CLEAR_STORE: {\r\n return {\r\n ...state,\r\n selectedAddress: emptySelectedAddress,\r\n currentStore: { ...initialState.currentStore },\r\n nearbyStores: [],\r\n showNumberInput: false,\r\n };\r\n }\r\n case LocalizationActionTypes.SHOW_TOAST: {\r\n return {\r\n ...state,\r\n showToast: action.payload,\r\n };\r\n }\r\n case LocalizationActionTypes.SHOW_MODAL: {\r\n return {\r\n ...state,\r\n showModal: action.payload,\r\n };\r\n }\r\n case LocalizationActionTypes.SHOW_NUMBER_INPUT: {\r\n return {\r\n ...state,\r\n showNumberInput: action.payload,\r\n };\r\n }\r\n case LocalizationActionTypes.SET_LAST_USED_ADDRESSES: {\r\n return {\r\n ...state,\r\n lastAddresses: action.payload.map((accAddress) => {\r\n return {\r\n city: accAddress.city,\r\n isCompleteAddress: true,\r\n region: accAddress.district,\r\n street: accAddress.street,\r\n streetNumber: accAddress.streetNumber,\r\n addressAddition: accAddress.addressAddition,\r\n remark: accAddress.remark,\r\n value: '',\r\n placeId: '',\r\n country: accAddress.country,\r\n latitude: accAddress.latitude,\r\n longitude: accAddress.longitude,\r\n postalCode: accAddress.postalCode,\r\n localizationStrategy: accAddress.localizationStrategy,\r\n additionalInfo: accAddress.additionalInfo\r\n };\r\n }),\r\n };\r\n }\r\n case LocalizationActionTypes.SET_LAST_USED_STORES: {\r\n return {\r\n ...state,\r\n lastStores: action.payload,\r\n };\r\n }\r\n case LocalizationActionTypes.SET_FORCE_DELIVERY_DISTRIBUTION: {\r\n return {\r\n ...state,\r\n forceDeliveryDistributionType: action.payload,\r\n };\r\n }\r\n case LocalizationActionTypes.SET_SELECTED_STORE_STATUS: {\r\n const storeStatus = action.payload ?? state.selectedStoreStatus;\r\n return {\r\n ...state,\r\n selectedStoreStatus: {\r\n ...storeStatus,\r\n },\r\n };\r\n }\r\n case LocalizationActionTypes.SET_ADDRESS_ADDITIONAL_INFO: {\r\n return {\r\n ...state,\r\n selectedAddress: {\r\n ...state.selectedAddress,\r\n additionalInfo: action.payload\r\n },\r\n };\r\n }\r\n\r\n default: {\r\n return { ...state };\r\n }\r\n }\r\n};\r\n\r\nexport default localizationReducer;\r\n","import { LocalizationStaticContentActionTypes, StaticContentActions } from './localization-static-content.actions';\r\n\r\nexport interface LocalizationAdditionContent {\r\n // this is text displayed above localization input\r\n headerText: string;\r\n paragraphText: string;\r\n linkText?: string;\r\n linkHref?: string;\r\n}\r\n\r\ninterface ChangeStoreLabels {\r\n changeDeliveryTitle: string;\r\n changePickupTitle: string;\r\n changeStoreButton: string;\r\n goToCatalogButton: string;\r\n}\r\n\r\nexport interface LocalizationStaticContent {\r\n localizationInputPlaceholder: string;\r\n deliveryAddition?: LocalizationAdditionContent;\r\n deliveryIcon: string;\r\n deliveryIconDisabled: string;\r\n deliveryTabText: string;\r\n dropdownLabelPickupResults: string;\r\n dropdownDeliveryLabelRegisteredUser: string;\r\n dropdownPickupLabelRegisteredUser: string;\r\n geolocationTextDelivery: string;\r\n geolocationTextPickup: string;\r\n mainCTA: string;\r\n pickupAddition?: LocalizationAdditionContent;\r\n pickupIcon: string;\r\n pickupIconDisabled: string;\r\n pickupTabText: string;\r\n signInLink: string;\r\n changeStore: ChangeStoreLabels;\r\n storeIsClosedToast: string;\r\n chooseTimeHeading: string;\r\n chooseTimeAsap: string;\r\n storeDistanceUnit: string;\r\n storeUnavailable: {\r\n outOfDeliveryRangeHeading: string;\r\n outOfDeliveryRangeText: string;\r\n distancePrefix: string;\r\n distanceSuffix: string;\r\n noStoreAvailable: string;\r\n returnButton: string;\r\n };\r\n addressAlertModal: {\r\n title: string;\r\n confirmButton: string;\r\n cancelButton: string;\r\n informationText: string;\r\n };\r\n storeStatusInfo: {\r\n noOnlineOrdersModalHeader: string;\r\n noOnlineOrdersModalText: string;\r\n noDeliveryOrdersModalHeader: string;\r\n noDeliveryOrdersModalText: string;\r\n noPickupOrdersModalHeader: string;\r\n noPickupOrdersModalText: string;\r\n customStoreUnavailabilityModalHeader: string;\r\n customStoreUnavailabilityModalText: string;\r\n storeStatusModalConfirmButtonText: string;\r\n };\r\n}\r\n\r\nconst initialState: LocalizationStaticContent = {\r\n deliveryIcon: '../../assets/icons/Delivery_circle.svg',\r\n deliveryIconDisabled: '../../assets/icons/Delivery_gray_circle.svg',\r\n deliveryTabText: 'Delivery',\r\n dropdownLabelPickupResults: 'Elige tu tienda más cercana',\r\n dropdownDeliveryLabelRegisteredUser: 'Mis direcciones de entrega',\r\n dropdownPickupLabelRegisteredUser: 'Mis tiendas favoritas',\r\n geolocationTextDelivery: 'Usar mi ubicación actual',\r\n geolocationTextPickup: 'Encontrar mi Pizza Hut mas cercano',\r\n localizationInputPlaceholder: 'Eg. Katowice, Sowińskiego 46',\r\n mainCTA: 'Empezar pedido',\r\n pickupIcon: '../../assets/icons/Takeaway_circle.svg',\r\n pickupIconDisabled: '../../assets/icons/Takeaway_gray_circle.svg',\r\n pickupTabText: 'Pickup',\r\n signInLink: 'Inicia sesión para pedir mucho más rápido',\r\n storeDistanceUnit: '[km]',\r\n changeStore: {\r\n changeDeliveryTitle: 'Recibirás tu pedido en',\r\n changePickupTitle: 'Podres recoger tu pedidio en',\r\n changeStoreButton: 'Cambiar dirección',\r\n goToCatalogButton: 'Ver ofertas',\r\n },\r\n storeIsClosedToast: '¡Vaya! Parece que esta tienda aún no ha abierto. Por favor, inténtalo más tarde.',\r\n chooseTimeHeading: '¿Cuándo quieres tu pedido?',\r\n chooseTimeAsap: 'Lo antes posible',\r\n storeUnavailable: {\r\n outOfDeliveryRangeHeading: 'Vaya, aún no repartimos en esta área',\r\n outOfDeliveryRangeText: 'Elige tu tienda más cercana y recoge allí tu pedido.',\r\n distancePrefix: 'A ',\r\n distanceSuffix: ' Kms de distancia de ti',\r\n noStoreAvailable: 'Vaya, aún no repartimos en esta área, pero pronto lo haremos.',\r\n returnButton: 'Volver',\r\n },\r\n addressAlertModal: {\r\n title: '',\r\n confirmButton: '',\r\n cancelButton: '',\r\n informationText: '',\r\n },\r\n storeStatusInfo: {\r\n noOnlineOrdersModalHeader: '',\r\n noOnlineOrdersModalText: '',\r\n noDeliveryOrdersModalHeader: '',\r\n noDeliveryOrdersModalText: '',\r\n noPickupOrdersModalHeader: '',\r\n noPickupOrdersModalText: '',\r\n customStoreUnavailabilityModalHeader: '',\r\n customStoreUnavailabilityModalText: '',\r\n storeStatusModalConfirmButtonText: '',\r\n },\r\n};\r\n\r\nconst localizationStaticContentReducer = (state = initialState, action: StaticContentActions): LocalizationStaticContent => {\r\n switch (action.type) {\r\n case LocalizationStaticContentActionTypes.SET_STATIC_CONTENT: {\r\n const { payload } = action;\r\n return {\r\n ...state,\r\n ...payload,\r\n };\r\n }\r\n default: {\r\n return { ...state };\r\n }\r\n }\r\n};\r\n\r\nexport default localizationStaticContentReducer;\r\n","import { createStore, applyMiddleware, compose, combineReducers } from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport { LoadReduxFromCookie } from 'shared/utils';\r\n\r\nimport staticContent from 'shared/store/static-content/static-content.reducer';\r\nimport globalReducer, { GlobalState } from 'shared/store/global/global.reducer';\r\nimport { StaticContent } from 'shared/types';\r\nimport localization, { LocalizationState as _localizationState, initialState as localizationInitialState } from './reducers';\r\nimport localizationStaticContent, { LocalizationStaticContent } from './static-content/localization-static-content.reducer';\r\n\r\nexport interface ApplicationState {\r\n localization: LocalizationState;\r\n staticContent: StaticContent;\r\n localizationStaticContent: LocalizationStaticContent;\r\n global: GlobalState;\r\n}\r\n\r\nconst localizationReducers = {\r\n localization,\r\n localizationStaticContent,\r\n staticContent,\r\n};\r\n\r\nconst rootReducer = combineReducers({\r\n global: globalReducer,\r\n ...localizationReducers,\r\n});\r\n\r\nconst composeEnhancers = (process.env.NODE_ENV === 'development' && window && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || compose;\r\n\r\nconst middlewares = [thunk];\r\nconst enhancer = composeEnhancers(applyMiddleware(...middlewares));\r\n\r\nconst store = createStore(\r\n rootReducer,\r\n {\r\n localization: LoadReduxFromCookie({\r\n state: localizationInitialState,\r\n key: 'localization',\r\n }),\r\n },\r\n enhancer,\r\n);\r\n\r\nexport default store;\r\nexport const LocalizationReducers = localizationReducers;\r\nexport type LocalizationState = _localizationState;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport App from './App';\r\n\r\nReactDOM.render(, document.querySelector('#localization-app-root'));\r\n","import React, { useEffect } from 'react';\r\nimport { Provider } from 'react-redux';\r\nimport { cookieExists, removeBasketFromLocalStorage } from 'shared/utils';\r\nimport SearchWindow from 'apps/LocalizationApp/Containers/search-window.container';\r\nimport store from './Store';\r\nimport { changeMobileBarsColor } from 'shared/helpers/mobile-app-helper';\r\n\r\nexport default function App(): JSX.Element {\r\n const localizationCookieExpired = !cookieExists('localization');\r\n\r\n useEffect(() => {\r\n if (localizationCookieExpired) {\r\n removeBasketFromLocalStorage();\r\n }\r\n changeMobileBarsColor('#231f20', '#ffffff');\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","export const changeMobileBarsColor = (lowerBarColor: string | undefined, upperBarColor: string | undefined): void => {\r\n const mobile = window.S4DWebBridge();\r\n if (mobile) {\r\n if (lowerBarColor){\r\n mobile.setBackgroundColor(lowerBarColor, 2);\r\n }\r\n if (upperBarColor){\r\n mobile.setBackgroundColor(upperBarColor, 1);\r\n }\r\n }\r\n};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.j = 89;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t89: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkpizza_hut\"] = self[\"webpackChunkpizza_hut\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [96], () => (__webpack_require__(7663)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","cookieExists","key","document","cookie","split","find","row","startsWith","OrderDistributionType","OrderStatusEnum","AppReviewTarget","ApplicationType","UserMessageType","redirectToHomePage","window","location","href","hostURL","encodeURIComponent","url","getElementById","value","appCulture","getRedirectURL","getElementsByTagName","getAttribute","getOtherAppRedirectURL","redirectToOtherAppURL","redirectToExternalURL","redirectToURL","redirectToNotFound","backToHistory","history","back","redirectToMainPage","parametersToObject","args","substring","length","obj","undefined","parameters","index","keyAndValueArray","openNewWindow","open","RoutingHelpers","Array","prototype","orderByAsc","propertyName","this","sort","a","b","orderByDesc","removeDuplicates","removedDuplicates","Set","from","baseURL","StaticContentActionTypes","text","fullScreen","mobile","S4DWebBridge","useState","show","setShowLoader","useEffect","hideLoader","delayedLoader","setTimeout","showLoader","clearTimeout","className","src","message","onClose","onClick","action","dispatch","errMessage","allowedErr","errorCallback","withoutGlobalNotification","type","GlobalActionTypes","CLEAR_MESSAGES","statusArr","includes","response","status","errorCodes","data","errorCode","ERROR","SET_MESSAGES","payload","console","error","SET_LOADER_STATE","SHOW_UNHANDLED_ERROR_MODAL","expirationTime","tooltipTimer","result","validate","success","messages","SetLoader","onSelect","onToggle","distanceUnit","state","localization","nearbyStores","selectedAddress","dropdownLabelPickupResults","localizationStaticContent","map","store","gtm","localizationModule","submitClickedOnCollection","id","street","streetNumber","isCompleteAddress","distance","toFixed","city","suggestions","selectedSuggestion","setSelectedSuggestion","suggestionsIds","suggestion","placeId","addEventListener","handleKeyboardNavigation","classList","add","removeEventListener","e","preventDefault","moveDown","moveUp","currentSuggestion","currentSuggestionIndex","indexOf","nextSuggestion","remove","tabIndex","formattedSuggestion","mainText","toLowerCase","secondaryText","renderSuggestion","ShowOptions","useShowDelay","isVisible","none","setShow","hide","address","isPickup","onChangeFn","onClear","suggestionsHelper","showStreetNumberInput","localizationInputPlaceholder","showClear","autoComplete","name","placeholder","onChange","inputClickedOnCollection","inputClickedOnDelivery","getContainerClassByType","INFO","WARNING","getTextClassByType","getArrowClassByType","testId","globalState","global","staticContent","offset","setOffset","firstElement","tooltipsFillStreetNumber","right","style","additionData","headerText","paragraphText","linkText","linkHref","onSelectAddressFn","onSelectStoreFn","lastAddresses","lastStores","distributionType","dropdownLabel","onToggleFn","showLastUsed","Delivery","Pickup","renderAddress","renderStore","ValidateDeliveryResponse","LocalizationRequestErrorType","PushNotificationsProvider","validators","bind","validator","fn","push","messageType","StoreState","LocalizationStrategy","LocalizationActionTypes","getStoreStatus","storeId","params","toDeliver","get","suggestionCancel","predictionsTimer","CancellationToken","prepareCoordsSuggestions","latitude","longitude","getState","errorMessagesImpossibleToLocateDelivery","language","apiResponse","SHOW_NUMBER_INPUT","SET_SELECTED_ADDRESS","tooltipsAdressConfirmation","getNearbyStores","selectedAddressDetails","limit","includeDistance","errorMessagesNoStores","clearCurrentStoreStatus","SET_NEARBY_STORES","getStoreAvailableHours","apiUrl","setCurrentStoreForPickup","storeStatus","dataReady","SET_SELECTED_STORE_STATUS","storePhoneNumber","phoneNumber","canPlaceOrder","CLEAR_STORE","SHOW_MODAL","availableHours","timeframes","CHANGE_ORDER_DISTRIBUTION","SET_CURRENT_STORE","isOpen","SHOW_TOAST","getCityBySelectedAddress","input","validateAddress","postalCode","region","addressForValidation","s","primaryAddress","alternateAddressForValidation","secondaryAddress","getAdditionalAddressInfo","storeExternalId","streetName","country","setStoreAndSave","currentStore","selectedOrderTime","updatedCurrentStore","json","JSON","stringify","expirationDate","isAsap","Date","minutes","utcDateTimeFrame","cookieValue","String","toUTCString","localizationSuccess","changeDistributionType","SET_FORCE_DELIVERY_DISTRIBUTION","sourceString","n","mainCTA","geolocationTextDelivery","geolocationTextPickup","signInLink","deliveryAddition","pickupAddition","dropdownDeliveryLabelRegisteredUser","dropdownPickupLabelRegisteredUser","storeDistanceUnit","signedin","initialIsVisible","setIsVisible","ref","useRef","handleClickOutside","ev","current","contains","target","showStores","setShowStores","setShowLastUsed","showNumberInput","isDelivery","showSuggestions","setFocusOnInput","focus","successMobileLocationRequestHandler","failedMobileLocationRequestHandler","tooltipsGeoDisabled","errorMessage","LOCALIZATION_DISABLED","goToTimeSlotSelect","validationResult","tooltipsFillAddress","errorMessagesWrongAddress","StreetErr","NumberErr","Valid","ValidateDeliveryAddress","errorMessagesWrongStreetNumber","validAddress","selectedAddressOriginalValue","storeToDeliveryResponse","storeToDelivery","isUsingS4DRegistry","localizationStrategy","PH_MX","externalStoreId","additionalAddressInfo","SET_ADDRESS_ADDITIONAL_INFO","localizationError","addresses","SET_LAST_USED_ADDRESSES","SET_LAST_USED_STORES","sender","ON_PROPERTY_CHANGED","cancelToken","cancelExecutor","SET_SUGGESTIONS","getSuggestions","suggestionClickedOnDelivery","suggestionClickedOnCollection","geolocationClickedOnDelivery","geolocationClickedOnCollection","navigator","geolocation","getCurrentPosition","position","coords","err","warning","code","requestLocation","submitClickedOnDelivery","prevState","slice","join","words","StringHelper","prev","children","transparent","closeButton","closeButtonTestId","fullWidth","backdropButton","body","overflowY","showCloseButton","visible","fixedPosition","stopPropagation","maxWidth","backgroundColor","border","onSetTimeFn","labels","modalLoad","selectedDateTimeFrame","setSelectedDateTimeFrame","onTimeSelected","baseDateTimeFrame","dateTimeFrame","timeFrame","isFirstAvailableDateFrame","renderHourDisplayValue","hour","isFirstOnList","chooseTimeAsap","chooseTimeHeading","findIndex","ah","replace","c","r","Math","random","toString","currentStoreId","onReturn","storeUnavailable","storesList","filter","fontSize","outOfDeliveryRangeHeading","outOfDeliveryRangeText","distancePrefix","distanceSuffix","noStoreAvailable","returnButton","showModal","orderTime","SET_ORDER_TIME","orderTimeSelected","distributionChange","pickupIcon","pickupIconDisabled","deliveryIcon","deliveryIconDisabled","deliveryTabText","pickupTabText","deliveryTabClicked","background","collectionTabClicked","onConfirmFn","onCancelFn","title","informationText","confirmButton","cancelButton","onContinueFn","onChangeStoreFn","changeStore","addressAlertModal","showConfirm","setShowConfirm","changeDeliveryTitle","changePickupTitle","changeAddressClicked","basket","localStorage","getItem","parsedBasket","parse","items","changeStoreButton","goToCatalogButton","callback","keyPressHandler","cancelCallbackFn","event","toUpperCase","deps","header","subHeader","ctaText","selectedStoreStatus","storeStatusInfo","OPEN_BUT_NO_ONLINE_ORDERS","modalText","noOnlineOrdersModalText","noOnlineOrdersModalHeader","OPEN_BUT_NO_DELIVERY_ORDERS","noDeliveryOrdersModalHeader","noDeliveryOrdersModalText","OPEN_BUT_NO_PICKUP_ORDERS","noPickupOrdersModalHeader","noPickupOrdersModalText","CLOSED","subheader","storeStatusModalConfirmButtonText","renderModalSwitch","LocalizationStaticContentActionTypes","forceDeliveryDistributionType","showToast","storeIsClosedToast","loader","SET_STATIC_CONTENT","storeSelected","redirectToOffers","removeItem","initialState","errorMessagesImpossibleToLocatePickup","errorModalTitle","errorModalDescription","apiKey","simplifiedFooter","configuration","hideCouponsScratchedPrices","SET_USER_STATUS","SET_SUPPORTED_CULTURES","SET_APP_CONFIGURATION","host","showErrorModal","supportedCultures","appConfiguration","maxChangeableToppingsForEditPizza","maxExtraToppingsForEditPizza","maxToppingsForCustomPizza","appReviewsEnabled","positiveReviewsTarget","NATIVE_STORE","negativeReviewsTarget","DB","authCookies","i","decodeURIComponent","currentUser","email","Email","phone","Phone","firstName","FirstName","lastName","LastName","lastActiveOrder","LastActiveOrder","emptySelectedAddress","addressAddition","remark","additionalInfo","fetched","stateDescription","reason","timestamp","customStoreUnavailabilityModalHeader","customStoreUnavailabilityModalText","localizationReducers","updatedSelectedAddress","addressDetails","displayValue","accAddress","district","SET_SIMPLIFIED_FOOTER","SET_CONFIGURATION","rootReducer","middlewares","enhancer","cookieState","decodedCookieState","ex","debug","log","LoadReduxFromCookie","localizationCookieExpired","lowerBarColor","upperBarColor","setBackgroundColor","querySelector","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","m","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","Object","keys","every","splice","getter","__esModule","d","definition","o","defineProperty","enumerable","g","globalThis","Function","prop","hasOwnProperty","call","Symbol","toStringTag","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","forEach","__webpack_exports__"],"sourceRoot":""}