{"version":3,"file":"storeLocalizatorApp.js","mappings":"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","sources":["webpack://pizza-hut/webpack/runtime/chunk loaded","webpack://pizza-hut/./src/shared/types.ts","webpack://pizza-hut/./src/shared/api/axios.ts","webpack://pizza-hut/./src/shared/utils.ts","webpack://pizza-hut/./src/shared/helpers/routing-helpers.ts","webpack://pizza-hut/./src/shared/tools/api-response-wrapper.ts","webpack://pizza-hut/./src/shared/store/global/global.actions.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/Store/reducers.ts","webpack://pizza-hut/./src/apps/SelectStoreApp/store/actions.ts","webpack://pizza-hut/./src/apps/SelectStoreApp/store/reducer.ts","webpack://pizza-hut/./src/apps/StoresListApp/store/actions.ts","webpack://pizza-hut/./src/apps/StoresListApp/store/reducer.ts","webpack://pizza-hut/./src/shared/store/global/global.reducer.ts","webpack://pizza-hut/./src/shared/store/static-content/static-content.actions.ts","webpack://pizza-hut/./src/shared/store/static-content/static-content.reducer.ts","webpack://pizza-hut/./src/apps/LocalizationApp/Store/static-content/localization-static-content.actions.ts","webpack://pizza-hut/./src/apps/LocalizationApp/Store/static-content/localization-static-content.reducer.ts","webpack://pizza-hut/./src/apps/StoreLocalizatorApp/store/static-content/actions.ts","webpack://pizza-hut/./src/apps/StoreLocalizatorApp/store/static-content/reducer.ts","webpack://pizza-hut/./src/apps/StoreLocalizatorApp/store/store-localizator/actions.ts","webpack://pizza-hut/./src/apps/StoreLocalizatorApp/store/store-localizator/reducer.ts","webpack://pizza-hut/./src/apps/StoreLocalizatorApp/store/index.ts","webpack://pizza-hut/./src/hooks/useVisible.ts","webpack://pizza-hut/./src/shared/components/suggestions.component.tsx","webpack://pizza-hut/./src/shared/helpers/index.ts","webpack://pizza-hut/./src/shared/components/loader.component.tsx","webpack://pizza-hut/./src/shared/components/toast.component.tsx","webpack://pizza-hut/./src/apps/LocalizationApp/Components/stores-list.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/apps/LocalizationApp/Containers/localization-search.container.tsx","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/Containers/search-window.container.tsx","webpack://pizza-hut/./src/apps/StoreLocalizatorApp/components/localizator-heading.component.tsx","webpack://pizza-hut/./src/apps/StoreLocalizatorApp/components/search.component.tsx","webpack://pizza-hut/./src/shared/components/select-store.component.tsx","webpack://pizza-hut/./src/apps/StoreLocalizatorApp/components/store-list-item.component.tsx","webpack://pizza-hut/./src/apps/StoreLocalizatorApp/containers/stores-list.component.tsx","webpack://pizza-hut/./src/apps/StoreLocalizatorApp/components/map-wrapper.component.tsx","webpack://pizza-hut/./src/apps/StoreLocalizatorApp/containers/store-localizator.container.tsx","webpack://pizza-hut/./src/apps/StoreLocalizatorApp/index.tsx","webpack://pizza-hut/./src/apps/StoreLocalizatorApp/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 { 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","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 { 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","/* 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","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","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 { AvailableHoursDto } from 'apps/LocalizationApp/types/dto.types';\r\nimport { AxiosResponse } from 'axios';\r\nimport { Action } from 'redux';\r\nimport { SetLoader } from 'shared/store/global/global.actions';\r\nimport { ThunkAction } from 'redux-thunk';\r\nimport ResponseWrapper from 'shared/tools/api-response-wrapper';\r\nimport Axios from 'shared/api/axios';\r\nimport { LocalizationActionTypes } from 'apps/LocalizationApp/Store/actions';\r\nimport { OrderDistributionType } from 'shared/types';\r\nimport { getStoreStatus } from 'apps/LocalizationApp/helpers/store-status';\r\nimport { ApplicationState } from '.';\r\n\r\nexport enum SelectStoreActionTypes {\r\n SET_TOOLTIP_VISIBILITY = '[STORE SELECT] SET_TOOLTIP_VISIBILITY',\r\n SET_LOCALIZATION_VISIBILITY = '[STORE SELECT] SET_LOCALIZATION_VISIBILITY',\r\n}\r\n\r\ninterface SetTooltipVisibility extends Action {\r\n type: SelectStoreActionTypes.SET_TOOLTIP_VISIBILITY;\r\n payload: boolean;\r\n}\r\n\r\ninterface SetLocalizationVisibility extends Action {\r\n type: SelectStoreActionTypes.SET_LOCALIZATION_VISIBILITY;\r\n payload: boolean;\r\n}\r\n\r\nexport const setStoreForPickup =\r\n (\r\n id: string,\r\n street: string,\r\n streetNumber: string,\r\n city: string,\r\n phoneNumber: string,\r\n ): ThunkAction =>\r\n async (dispatch): Promise => {\r\n ResponseWrapper({\r\n action: async () => {\r\n dispatch(SetLoader(true));\r\n const params = { storeId: id };\r\n const storeStatus = await getStoreStatus(id, OrderDistributionType.Pickup);\r\n const { canPlaceOrder } = storeStatus;\r\n\r\n dispatch({\r\n type: LocalizationActionTypes.SET_SELECTED_STORE_STATUS,\r\n payload: { ...storeStatus, storePhoneNumber: phoneNumber },\r\n });\r\n\r\n if (!canPlaceOrder) {\r\n dispatch({ type: LocalizationActionTypes.CLEAR_STORE });\r\n dispatch({\r\n type: LocalizationActionTypes.SHOW_MODAL,\r\n payload: true,\r\n });\r\n dispatch(SetLoader(false));\r\n dispatch(setLocalizationVisibility(true));\r\n return;\r\n }\r\n\r\n const response: AxiosResponse = await Axios.get('api/stores/available-times-for-pickup', {\r\n params,\r\n });\r\n const availableHours = response.data;\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 if (!availableHours.timeframes || availableHours?.timeframes.length === 0) {\r\n dispatch(SetLoader(false));\r\n dispatch({\r\n type: SelectStoreActionTypes.SET_TOOLTIP_VISIBILITY,\r\n payload: true,\r\n });\r\n setTimeout(\r\n () =>\r\n dispatch({\r\n type: SelectStoreActionTypes.SET_TOOLTIP_VISIBILITY,\r\n payload: false,\r\n }),\r\n 5000,\r\n );\r\n return;\r\n }\r\n\r\n dispatch(SetLoader(false));\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: OrderDistributionType.Pickup,\r\n });\r\n dispatch({\r\n type: LocalizationActionTypes.SET_CURRENT_STORE,\r\n payload: { id, city, street, streetNumber, availableHours, isOpen: canPlaceOrder },\r\n });\r\n\r\n dispatch({\r\n type: LocalizationActionTypes.SHOW_MODAL,\r\n payload: true,\r\n });\r\n\r\n dispatch(setLocalizationVisibility(true));\r\n },\r\n dispatch,\r\n });\r\n };\r\n\r\nexport const setStoreForDelivery =\r\n (): ThunkAction =>\r\n async (dispatch): Promise => {\r\n dispatch({\r\n type: LocalizationActionTypes.SET_FORCE_DELIVERY_DISTRIBUTION,\r\n payload: true,\r\n });\r\n dispatch(setLocalizationVisibility(true));\r\n };\r\n\r\nexport const setLocalizationVisibility =\r\n (value: boolean): ThunkAction =>\r\n async (dispatch): Promise => {\r\n dispatch({ type: SelectStoreActionTypes.SET_LOCALIZATION_VISIBILITY, payload: value });\r\n };\r\n\r\nexport type SelectStoreActions = SetTooltipVisibility | SetLocalizationVisibility;\r\n","import { SelectStoreActionTypes, SelectStoreActions } from './actions';\r\n\r\nexport interface SelectStore {\r\n showToast: boolean;\r\n showLocalization: boolean;\r\n}\r\n\r\nconst initialState = {\r\n showToast: false,\r\n showLocalization: false,\r\n};\r\n\r\nconst selectStoreReducer = (state = initialState, action: SelectStoreActions): SelectStore => {\r\n switch (action.type) {\r\n case SelectStoreActionTypes.SET_TOOLTIP_VISIBILITY: {\r\n return {\r\n ...state,\r\n showToast: action.payload,\r\n };\r\n }\r\n case SelectStoreActionTypes.SET_LOCALIZATION_VISIBILITY: {\r\n return {\r\n ...state,\r\n showLocalization: action.payload,\r\n };\r\n }\r\n default:\r\n return { ...state };\r\n }\r\n};\r\n\r\nexport default selectStoreReducer;\r\n","import { Action } from 'redux';\r\nimport { ThunkAction } from 'redux-thunk';\r\nimport Axios from 'shared/api/axios';\r\nimport { AxiosResponse } from 'axios';\r\nimport ResponseWrapper from 'shared/tools/api-response-wrapper';\r\nimport { SetLoader } from 'shared/store/global/global.actions';\r\nimport { AvailableHoursDto, StoreDto } from 'apps/LocalizationApp/types/dto.types';\r\nimport { redirectToURL } from 'shared/helpers/routing-helpers';\r\nimport { OrderDistributionType } from 'shared/types';\r\nimport { LocalizationActionTypes } from 'apps/LocalizationApp/Store/actions';\r\nimport { getStoreStatus } from 'apps/LocalizationApp/helpers/store-status';\r\nimport { ApplicationState } from '.';\r\n\r\nexport enum StoresListActionTypes {\r\n SET_AVAILABLE_STORES = '[STORES LIST] SET_AVAILABLE_STORES',\r\n SET_TOAST_VISIBILITY = '[STORES LIST] SET_TOOLTIP_VISIBILITY',\r\n SET_LOCALIZATION_VISIBILITY = '[STORES LIST] SET_LOCALIZATION_VISIBILITY',\r\n}\r\n\r\ninterface SetAvailableStores extends Action {\r\n type: StoresListActionTypes.SET_AVAILABLE_STORES;\r\n payload: StoreDto[];\r\n}\r\ninterface SetToastVisibility extends Action {\r\n type: StoresListActionTypes.SET_TOAST_VISIBILITY;\r\n payload: boolean;\r\n}\r\ninterface SetLocalizationVisibility extends Action {\r\n type: StoresListActionTypes.SET_LOCALIZATION_VISIBILITY;\r\n payload: boolean;\r\n}\r\n\r\nexport const getAvailableStores =\r\n (city: string): ThunkAction =>\r\n async (dispatch): Promise => {\r\n ResponseWrapper({\r\n action: async () => {\r\n const result: AxiosResponse = await Axios.get(`api/stores/cities/${city}`);\r\n\r\n dispatch({ type: StoresListActionTypes.SET_AVAILABLE_STORES, payload: result.data });\r\n setTimeout(() => {\r\n document.getElementById('content')?.scrollIntoView({ block: 'start', behavior: 'smooth' });\r\n }, 250);\r\n },\r\n dispatch,\r\n });\r\n };\r\n\r\nexport const goToDetails =\r\n (id: string): ThunkAction =>\r\n async (dispatch): Promise => {\r\n const result: AxiosResponse = await Axios.get(`api/stores/${id}`);\r\n\r\n if (result.data?.alias) {\r\n redirectToURL(`pizzerias/store/${result.data?.alias}`);\r\n }\r\n };\r\n\r\nexport const setStoreForPickup =\r\n (store: StoreDto): ThunkAction =>\r\n async (dispatch): Promise => {\r\n ResponseWrapper({\r\n action: async () => {\r\n dispatch(SetLoader(true));\r\n const params = { storeId: store.id };\r\n const storeStatus = await getStoreStatus(store.id, OrderDistributionType.Pickup);\r\n const { canPlaceOrder } = storeStatus;\r\n\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 (!canPlaceOrder) {\r\n dispatch(SetLoader(false));\r\n dispatch({ type: LocalizationActionTypes.CLEAR_STORE });\r\n dispatch({\r\n type: LocalizationActionTypes.SHOW_MODAL,\r\n payload: true,\r\n });\r\n dispatch(setLocalizationVisibility(true));\r\n return;\r\n }\r\n\r\n const response: AxiosResponse = await Axios.get('api/stores/available-times-for-pickup', {\r\n params,\r\n });\r\n const availableHours = response.data;\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 if (!availableHours.timeframes || availableHours?.timeframes.length === 0) {\r\n dispatch(SetLoader(false));\r\n dispatch({\r\n type: StoresListActionTypes.SET_TOAST_VISIBILITY,\r\n payload: true,\r\n });\r\n setTimeout(\r\n () =>\r\n dispatch({\r\n type: StoresListActionTypes.SET_TOAST_VISIBILITY,\r\n payload: false,\r\n }),\r\n 5000,\r\n );\r\n return;\r\n }\r\n\r\n dispatch(SetLoader(false));\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: OrderDistributionType.Pickup,\r\n });\r\n dispatch({\r\n type: LocalizationActionTypes.SET_CURRENT_STORE,\r\n payload: { ...store, availableHours, isOpen: canPlaceOrder },\r\n });\r\n\r\n dispatch({\r\n type: LocalizationActionTypes.SHOW_MODAL,\r\n payload: true,\r\n });\r\n\r\n dispatch(setLocalizationVisibility(true));\r\n },\r\n dispatch,\r\n });\r\n };\r\n\r\nexport const setStoreForDelivery =\r\n (): ThunkAction =>\r\n async (dispatch): Promise => {\r\n dispatch({\r\n type: LocalizationActionTypes.SET_FORCE_DELIVERY_DISTRIBUTION,\r\n payload: true,\r\n });\r\n dispatch(setLocalizationVisibility(true));\r\n };\r\n\r\nexport const setLocalizationVisibility =\r\n (value: boolean): ThunkAction =>\r\n async (dispatch): Promise => {\r\n dispatch({ type: StoresListActionTypes.SET_LOCALIZATION_VISIBILITY, payload: value });\r\n };\r\n\r\nexport type StoresListActions = SetAvailableStores | SetToastVisibility | SetLocalizationVisibility;\r\n","import { StoreDto } from 'apps/LocalizationApp/types/dto.types';\r\nimport { StoresListActionTypes, StoresListActions } from './actions';\r\n\r\nexport interface StoresList {\r\n availableStores: StoreDto[];\r\n showToast: boolean;\r\n showLocalization: boolean;\r\n}\r\n\r\nconst initialState: StoresList = {\r\n availableStores: [],\r\n showToast: false,\r\n showLocalization: false,\r\n};\r\n\r\nconst storesListReducer = (state = initialState, action: StoresListActions): StoresList => {\r\n switch (action.type) {\r\n case StoresListActionTypes.SET_AVAILABLE_STORES: {\r\n return {\r\n ...state,\r\n availableStores: action.payload,\r\n };\r\n }\r\n case StoresListActionTypes.SET_LOCALIZATION_VISIBILITY: {\r\n return {\r\n ...state,\r\n showLocalization: action.payload,\r\n };\r\n }\r\n case StoresListActionTypes.SET_TOAST_VISIBILITY: {\r\n return {\r\n ...state,\r\n showToast: action.payload,\r\n };\r\n }\r\n default:\r\n return { ...state };\r\n }\r\n};\r\n\r\nexport default storesListReducer;\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 { 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 { 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 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 { 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 { Action } from 'redux';\r\nimport { ThunkAction } from 'redux-thunk';\r\nimport { AxiosResponse } from 'axios';\r\nimport Axios from 'shared/api/axios';\r\nimport ResponseWrapper from 'shared/tools/api-response-wrapper';\r\nimport { ApplicationState } from '..';\r\nimport { LocalizatorStaticContentState } from './reducer';\r\n\r\nexport enum LocalizatorStaticContentActionTypes {\r\n SET_STATIC_CONTENT = '[STORE_LOCALIZATOR] SET_STATIC_CONTENT',\r\n}\r\n\r\ninterface SetStaticContent extends Action {\r\n type: LocalizatorStaticContentActionTypes.SET_STATIC_CONTENT;\r\n payload: LocalizatorStaticContentState;\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/store-localizator');\r\n dispatch({\r\n type: LocalizatorStaticContentActionTypes.SET_STATIC_CONTENT,\r\n payload: value.data,\r\n });\r\n },\r\n dispatch,\r\n });\r\n };\r\n\r\nexport type LocalizatorStaticContentActions = SetStaticContent;\r\n","import { LocalizatorStaticContentActionTypes, LocalizatorStaticContentActions } from './actions';\r\n\r\nexport interface HeadingContent {\r\n mainText: string;\r\n secondaryText: string;\r\n}\r\n\r\nexport interface SearchContent {\r\n placeholder: string;\r\n geolocationText: string;\r\n noLocationsInSearchArea: string;\r\n}\r\n\r\nexport interface StoreCard {\r\n storeDetailsLink: string;\r\n startDelivery: string;\r\n startPickup: string;\r\n}\r\n\r\nexport interface LocalizatorStaticContentState {\r\n heading: HeadingContent;\r\n search: SearchContent;\r\n storeCard: StoreCard;\r\n googleMapCenterLatitude: string;\r\n googleMapCenterLongitude: string;\r\n}\r\n\r\nconst initialState: LocalizatorStaticContentState = {\r\n heading: {\r\n mainText: 'Encuentra tu Pizza Hut más cercano',\r\n secondaryText:\r\n 'Introduce tu calle o código postal y busca tu tienda Pizza Hut más cercana. También puedes encontrarla utilizando el mapa.',\r\n },\r\n search: {\r\n placeholder: 'Ej: Calle Alcalá, 54 Madrid',\r\n geolocationText: 'Usar mi ubicación actual',\r\n noLocationsInSearchArea: 'Por favor, introduce una dirección válida',\r\n },\r\n storeCard: {\r\n storeDetailsLink: 'Mas informacion de la tienda',\r\n startDelivery: 'Pedir a domicilio',\r\n startPickup: 'Pedir a recoger',\r\n },\r\n googleMapCenterLatitude: '',\r\n googleMapCenterLongitude: '',\r\n};\r\n\r\nconst loginReducer = (state = initialState, action: LocalizatorStaticContentActions): LocalizatorStaticContentState => {\r\n switch (action.type) {\r\n case LocalizatorStaticContentActionTypes.SET_STATIC_CONTENT: {\r\n return {\r\n ...state,\r\n ...action.payload,\r\n };\r\n }\r\n default: {\r\n return { ...state };\r\n }\r\n }\r\n};\r\n\r\nexport default loginReducer;\r\n","import { OrderDistributionType, UserMessageType } from 'shared/types';\r\nimport { StoreDto, AvailableHoursDto, AddressDetailsDto } from 'apps/LocalizationApp/types/dto.types';\r\nimport { Action } from 'redux';\r\nimport { ThunkAction } from 'redux-thunk';\r\nimport { AxiosResponse } from 'axios';\r\nimport Axios from 'shared/api/axios';\r\nimport ResponseWrapper from 'shared/tools/api-response-wrapper';\r\nimport { LocalizationActionTypes } from 'apps/LocalizationApp/Store/actions';\r\nimport { SetLoader, setMessageWithExpirationTime } from 'shared/store/global/global.actions';\r\nimport { getStoreStatus } from 'apps/LocalizationApp/helpers/store-status';\r\nimport { ApplicationState } from '..';\r\nimport { LocalizationRequestErrorType } from 'typings/web-bridge.types';\r\n\r\nexport enum LocalizatorActionTypes {\r\n SET_TOAST_VISIBILITY = '[STORES LIST] SET_TOOLTIP_VISIBILITY',\r\n SET_LOCALIZATION_VISIBILITY = '[STORES LIST] SET_LOCALIZATION_VISIBILITY',\r\n SET_SELECTED_ADDRESS_VALUE = '[STORES LIST] SET_SELECTED_ADDRESS_VALUE',\r\n SET_SELECTED_ADDRESS = '[STORES LIST] SET_SELECTED_ADDRESS',\r\n SET_NEARBY_STORES = '[STORES LIST] SET_NEARBY_STORES',\r\n}\r\n\r\ninterface SetToastVisibility extends Action {\r\n type: LocalizatorActionTypes.SET_TOAST_VISIBILITY;\r\n payload: boolean;\r\n}\r\ninterface SetLocalizationVisibility extends Action {\r\n type: LocalizatorActionTypes.SET_LOCALIZATION_VISIBILITY;\r\n payload: boolean;\r\n}\r\ninterface SetSelectedAddressValue extends Action {\r\n type: LocalizatorActionTypes.SET_SELECTED_ADDRESS_VALUE;\r\n payload: string;\r\n}\r\ninterface SetSelectedAddress extends Action {\r\n type: LocalizatorActionTypes.SET_SELECTED_ADDRESS;\r\n payload?: AddressDetailsDto;\r\n}\r\ninterface SetSNearbyStores extends Action {\r\n type: LocalizatorActionTypes.SET_NEARBY_STORES;\r\n payload: StoreDto[];\r\n}\r\n\r\nexport const setStoreForPickup =\r\n (store: StoreDto): ThunkAction =>\r\n async (dispatch): Promise => {\r\n ResponseWrapper({\r\n action: async () => {\r\n const params = { storeId: store.id };\r\n const storeStatus = await getStoreStatus(store.id, OrderDistributionType.Pickup);\r\n const { canPlaceOrder } = storeStatus;\r\n\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 (!canPlaceOrder) {\r\n dispatch({ type: LocalizationActionTypes.CLEAR_STORE });\r\n dispatch({\r\n type: LocalizationActionTypes.SHOW_MODAL,\r\n payload: true,\r\n });\r\n dispatch(setLocalizationVisibility(true));\r\n return;\r\n }\r\n\r\n const response: AxiosResponse = await Axios.get('api/stores/available-times-for-pickup', {\r\n params,\r\n });\r\n const availableHours = response.data;\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 if (!availableHours.timeframes || availableHours?.timeframes.length === 0) {\r\n dispatch({\r\n type: LocalizatorActionTypes.SET_TOAST_VISIBILITY,\r\n payload: true,\r\n });\r\n setTimeout(\r\n () =>\r\n dispatch({\r\n type: LocalizatorActionTypes.SET_TOAST_VISIBILITY,\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_FORCE_DELIVERY_DISTRIBUTION,\r\n payload: false,\r\n });\r\n dispatch({\r\n type: LocalizationActionTypes.CHANGE_ORDER_DISTRIBUTION,\r\n payload: OrderDistributionType.Pickup,\r\n });\r\n dispatch({\r\n type: LocalizationActionTypes.SET_CURRENT_STORE,\r\n payload: { ...store, availableHours, isOpen: canPlaceOrder },\r\n });\r\n\r\n dispatch({\r\n type: LocalizationActionTypes.SHOW_MODAL,\r\n payload: true,\r\n });\r\n\r\n dispatch(setLocalizationVisibility(true));\r\n },\r\n dispatch,\r\n });\r\n };\r\n\r\nexport const setStoreForDelivery =\r\n (): ThunkAction =>\r\n async (dispatch): Promise => {\r\n dispatch({\r\n type: LocalizationActionTypes.SET_FORCE_DELIVERY_DISTRIBUTION,\r\n payload: true,\r\n });\r\n dispatch(setLocalizationVisibility(true));\r\n };\r\n\r\nexport const setLocalizationVisibility =\r\n (value: boolean): ThunkAction =>\r\n async (dispatch): Promise => {\r\n dispatch({ type: LocalizatorActionTypes.SET_LOCALIZATION_VISIBILITY, payload: value });\r\n };\r\n\r\nexport const getNearbyStores =\r\n (): ThunkAction =>\r\n async (dispatch, getState): Promise => {\r\n const state = getState();\r\n const { selectedAddress } = state.localizator;\r\n const address = selectedAddress.value;\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,\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 }\r\n dispatch({\r\n type: LocalizatorActionTypes.SET_NEARBY_STORES,\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): Promise => {\r\n ResponseWrapper({\r\n action: async () => {\r\n const value: AxiosResponse = await Axios.get('api/locations/details', { params: { placeId } });\r\n\r\n dispatch({\r\n type: LocalizationActionTypes.SET_SELECTED_ADDRESS,\r\n payload: value.data,\r\n });\r\n\r\n dispatch({\r\n type: LocalizatorActionTypes.SET_SELECTED_ADDRESS,\r\n payload: value.data,\r\n });\r\n\r\n dispatch(getNearbyStores());\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 navigator.geolocation.getCurrentPosition(\r\n (pos) => {\r\n dispatch(prepareCoordsSuggestions(pos.coords.latitude, pos.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 dispatch({ type: LocalizatorActionTypes.SET_SELECTED_ADDRESS, payload: apiResponse.data });\r\n dispatch(getNearbyStores());\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 type LocalizatorStaticContentActions =\r\n | SetToastVisibility\r\n | SetLocalizationVisibility\r\n | SetSelectedAddress\r\n | SetSelectedAddressValue\r\n | SetSNearbyStores;\r\n","import { AddressDetailsDto, StoreDto } from 'apps/LocalizationApp/types/dto.types';\r\nimport { LocalizatorActionTypes, LocalizatorStaticContentActions } from './actions';\r\n\r\nexport interface LocalizatorState {\r\n showToast: boolean;\r\n showLocalization: boolean;\r\n selectedAddress: AddressDetailsDto;\r\n nearbyStores: StoreDto[];\r\n forceDistributionChange: boolean;\r\n}\r\n\r\nconst initialState: LocalizatorState = {\r\n showToast: false,\r\n showLocalization: false,\r\n selectedAddress: {\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 nearbyStores: [],\r\n forceDistributionChange: false,\r\n};\r\n\r\nconst loginReducer = (state = initialState, action: LocalizatorStaticContentActions): LocalizatorState => {\r\n switch (action.type) {\r\n case LocalizatorActionTypes.SET_TOAST_VISIBILITY: {\r\n return {\r\n ...state,\r\n showToast: action.payload,\r\n };\r\n }\r\n case LocalizatorActionTypes.SET_LOCALIZATION_VISIBILITY: {\r\n return {\r\n ...state,\r\n showLocalization: action.payload,\r\n };\r\n }\r\n case LocalizatorActionTypes.SET_SELECTED_ADDRESS: {\r\n return {\r\n ...state,\r\n selectedAddress: action.payload ?? { ...initialState.selectedAddress },\r\n };\r\n }\r\n case LocalizatorActionTypes.SET_SELECTED_ADDRESS_VALUE: {\r\n return {\r\n ...state,\r\n selectedAddress: { ...initialState.selectedAddress, value: action.payload },\r\n };\r\n }\r\n case LocalizatorActionTypes.SET_NEARBY_STORES: {\r\n return {\r\n ...state,\r\n nearbyStores: action.payload,\r\n };\r\n }\r\n default: {\r\n return { ...state };\r\n }\r\n }\r\n};\r\n\r\nexport default loginReducer;\r\n","import { LocalizationState } from 'apps/LocalizationApp/Store';\r\nimport localization, { initialState as localizationInitialState } from 'apps/LocalizationApp/Store/reducers';\r\nimport selectStore, { SelectStore } from 'apps/SelectStoreApp/store/reducer';\r\nimport storesList, { StoresList } from 'apps/StoresListApp/store/reducer';\r\nimport { createStore, applyMiddleware, compose, combineReducers } from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport global, { GlobalState } from 'shared/store/global/global.reducer';\r\nimport { StaticContent } from 'shared/types';\r\nimport staticContent from 'shared/store/static-content/static-content.reducer';\r\nimport localizationStaticContent, {\r\n LocalizationStaticContent,\r\n} from 'apps/LocalizationApp/Store/static-content/localization-static-content.reducer';\r\nimport { LoadReduxFromCookie } from 'shared/utils';\r\nimport localizatorStaticContent, { LocalizatorStaticContentState } from './static-content/reducer';\r\nimport localizator, { LocalizatorState } from './store-localizator/reducer';\r\n\r\nexport interface ApplicationState {\r\n localization: LocalizationState;\r\n localizationStaticContent: LocalizationStaticContent;\r\n localizatorStaticContent: LocalizatorStaticContentState;\r\n localizator: LocalizatorState;\r\n selectStore: SelectStore;\r\n storesList: StoresList;\r\n global: GlobalState;\r\n staticContent: StaticContent;\r\n}\r\n\r\nconst rootReducer = combineReducers({\r\n localization,\r\n localizationStaticContent,\r\n localizatorStaticContent,\r\n selectStore,\r\n localizator,\r\n storesList,\r\n global,\r\n staticContent,\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\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, { 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","/* 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 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","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 { 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","/* 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","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 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 React from 'react';\r\nimport { HeadingContent } from '../store/static-content/reducer';\r\n\r\ninterface LocalizatorHeadingProps {\r\n labels: HeadingContent;\r\n}\r\n\r\nconst LocalizatorHeading: React.FC = ({ labels }) => {\r\n return (\r\n
\r\n
\r\n \r\n {labels.mainText}\r\n \r\n
\r\n

{labels.secondaryText}

\r\n
\r\n );\r\n};\r\n\r\nexport default LocalizatorHeading;\r\n","import React from 'react';\r\nimport useShowDelay from 'hooks/useShowDelay';\r\nimport { AddressDetailsDto } from 'apps/LocalizationApp/types/dto.types';\r\nimport { SearchContent } from '../store/static-content/reducer';\r\n\r\ninterface AddressInputProps {\r\n address: AddressDetailsDto;\r\n onChangeFn(sender?: React.ChangeEvent, clear?: boolean): void;\r\n onClear(): void;\r\n suggestionsHelper(): void;\r\n searchLabels: SearchContent;\r\n rounded: boolean;\r\n}\r\n\r\nconst Search: React.FC = ({ address, onChangeFn, onClear, suggestionsHelper, searchLabels, rounded }) => {\r\n const { value } = 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 }\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Search;\r\n","import React from 'react';\r\n\r\ninterface SelectStoreProps {\r\n onDeliveryFn(): void;\r\n onPickupFn(): void;\r\n deliveryLabel: string;\r\n pickupLabel: string;\r\n storeId: string;\r\n}\r\n\r\nconst SelectStore: React.FC = ({ onDeliveryFn, onPickupFn, deliveryLabel, pickupLabel, storeId }) => {\r\n return (\r\n
\r\n \r\n {deliveryLabel}\r\n \r\n \r\n {pickupLabel}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default SelectStore;\r\n","import React from 'react';\r\nimport { StoreDto } from 'apps/LocalizationApp/types/dto.types';\r\nimport SelectStore from 'shared/components/select-store.component';\r\nimport { StoreCard } from '../store/static-content/reducer';\r\n\r\ninterface StoreListItemProps {\r\n store: StoreDto;\r\n isActive: boolean;\r\n goToDetails(): void;\r\n labels: StoreCard;\r\n onPickupFn(): void;\r\n onDeliveryFn(): void;\r\n}\r\n\r\nconst StoreListItem: React.FC = ({ store, isActive, goToDetails, labels, onPickupFn, onDeliveryFn }) => {\r\n return (\r\n
\r\n
\r\n
\r\n \r\n \r\n {store.name}\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

{store.phoneNumber}

\r\n \r\n
\r\n

\r\n \r\n {labels.storeDetailsLink}\r\n \r\n

\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default StoreListItem;\r\n","import React from 'react';\r\nimport Toast from 'shared/components/toast.component';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { goToDetails } from 'apps/StoresListApp/store/actions';\r\nimport { LocalizationStaticContent } from 'apps/LocalizationApp/Store/static-content/localization-static-content.reducer';\r\nimport StoreListItem from '../components/store-list-item.component';\r\nimport { LocalizatorStaticContentState } from '../store/static-content/reducer';\r\nimport { ApplicationState } from '../store';\r\nimport { LocalizatorState } from '../store/store-localizator/reducer';\r\nimport { LocalizatorActionTypes, setStoreForDelivery, setStoreForPickup } from '../store/store-localizator/actions';\r\n\r\ninterface StoreListProps {\r\n activeStoreId?: string;\r\n}\r\n\r\nconst StoresList: React.FC = ({ activeStoreId }) => {\r\n const { storeCard } = useSelector((state) => state.localizatorStaticContent);\r\n const { showToast, nearbyStores } = useSelector((state) => state.localizator);\r\n const { storeIsClosedToast } = useSelector(\r\n (state) => state.localizationStaticContent,\r\n );\r\n const dispatch = useDispatch();\r\n\r\n if (nearbyStores.length === 0) return <>;\r\n\r\n return (\r\n
\r\n {nearbyStores.map(\r\n (store): JSX.Element => (\r\n {\r\n dispatch(goToDetails(store.id));\r\n }}\r\n labels={storeCard}\r\n onPickupFn={() => {\r\n dispatch(setStoreForPickup(store));\r\n }}\r\n onDeliveryFn={() => {\r\n dispatch(setStoreForDelivery());\r\n }}\r\n />\r\n ),\r\n )}\r\n {\r\n dispatch({ type: LocalizatorActionTypes.SET_TOAST_VISIBILITY, payload: false });\r\n }}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport default StoresList;\r\n","import { Loader } from '@googlemaps/js-api-loader';\r\nimport React, { useEffect } from 'react';\r\nimport { SimplifiedStore } from '../types';\r\n\r\ninterface MapWrapperProps {\r\n stores: SimplifiedStore[];\r\n selectStoreFn(id: string): void;\r\n searchPlaceId?: string;\r\n apiKey: string;\r\n googleMapCenterLatitude: number;\r\n googleMapCenterLongitude: number;\r\n}\r\n\r\nconst initialZoom = 12;\r\n\r\nlet map: google.maps.Map;\r\nlet markers: google.maps.Marker[] = [];\r\nlet markerIcon: google.maps.Icon;\r\nlet activeMarkerIcon: google.maps.Icon;\r\nlet userMarker: google.maps.Marker;\r\n\r\nconst MapWrapper: React.FC = React.memo(\r\n ({ stores, selectStoreFn, searchPlaceId, apiKey, googleMapCenterLatitude, googleMapCenterLongitude }) => {\r\n useEffect(() => {\r\n const loader = new Loader({\r\n apiKey,\r\n version: 'weekly',\r\n libraries: ['places'],\r\n });\r\n\r\n const defaultCenter = { lat: googleMapCenterLatitude, lng: googleMapCenterLongitude };\r\n\r\n loader.load().then(() => {\r\n map = new google.maps.Map(document.getElementById('react-map') as HTMLElement, {\r\n center: defaultCenter,\r\n zoom: initialZoom,\r\n });\r\n markerIcon = {\r\n url: '/assets/logo-small.png',\r\n scaledSize: new google.maps.Size(24, 23),\r\n };\r\n activeMarkerIcon = {\r\n url: '/assets/selected-store-marker.png',\r\n scaledSize: new google.maps.Size(56, 56),\r\n };\r\n setMarkers();\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (map) {\r\n setMarkers();\r\n }\r\n }, [stores, searchPlaceId]);\r\n\r\n function setMarkers(): void {\r\n markers?.forEach((marker) => marker.setMap(null));\r\n markers = [];\r\n stores.forEach((store, idx) => {\r\n const marker = new google.maps.Marker({\r\n position: { lat: store.latitude, lng: store.longitude },\r\n map,\r\n icon: markerIcon,\r\n clickable: true,\r\n });\r\n markers.push(marker);\r\n\r\n google.maps.event.addListener(marker, 'click', () => {\r\n setActiveMarker(idx, store.id);\r\n });\r\n });\r\n\r\n if (searchPlaceId) {\r\n userMarker && userMarker.setMap(null);\r\n\r\n new google.maps.places.PlacesService(map).getDetails({ placeId: searchPlaceId }, (res, status) => {\r\n if (status === google.maps.places.PlacesServiceStatus.OK && res?.geometry?.location) {\r\n userMarker = new google.maps.Marker({\r\n map,\r\n position: res.geometry.location,\r\n });\r\n\r\n map.setCenter(res.geometry.location);\r\n map.setZoom(initialZoom);\r\n }\r\n });\r\n }\r\n }\r\n\r\n const setActiveMarker = (index: number, id: string): void => {\r\n markers?.forEach((marker) => {\r\n (marker.getIcon() as google.maps.Icon).url === activeMarkerIcon.url && marker.setIcon(markerIcon);\r\n });\r\n\r\n markers[index].setIcon(activeMarkerIcon);\r\n selectStoreFn(id);\r\n };\r\n\r\n return
;\r\n },\r\n);\r\n\r\nexport default MapWrapper;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { LocalizationState } from 'apps/LocalizationApp/Store';\r\nimport * as LocalizationActions from 'apps/LocalizationApp/Store/actions';\r\nimport useVisible from 'hooks/useVisible';\r\nimport Suggestions from 'shared/components/suggestions.component';\r\nimport { GlobalState } from 'apps/ProductsApp/store';\r\nimport { StaticContent, UserMessageType } from 'shared/types';\r\nimport SearchWindowContainer from 'apps/LocalizationApp/Containers/search-window.container';\r\nimport LocalizationModal from 'shared/components/modal.compontent';\r\nimport { getStaticContent } from 'shared/store/static-content/static-content.actions';\r\nimport { SetLoader } from 'shared/store/global/global.actions';\r\nimport { LocalizationRequestErrorType } from 'typings/web-bridge.types';\r\nimport { LocalizationActionTypes } from 'apps/LocalizationApp/Store/actions';\r\nimport {\r\n getCoordsSuggestions,\r\n getSelectedAddress,\r\n LocalizatorActionTypes,\r\n prepareCoordsSuggestions,\r\n} from '../store/store-localizator/actions';\r\n\r\nimport { ApplicationState } from '../store';\r\nimport LocalizatorHeading from '../components/localizator-heading.component';\r\nimport Search from '../components/search.component';\r\nimport StoresList from './stores-list.component';\r\nimport { LocalizatorStaticContentState } from '../store/static-content/reducer';\r\nimport MapWrapper from '../components/map-wrapper.component';\r\nimport { getStaticContent as getGlobalStaticContent } from '../store/static-content/actions';\r\nimport { SimplifiedStore } from '../types';\r\nimport { LocalizatorState } from '../store/store-localizator/reducer';\r\n\r\nlet predictionsTimer: ReturnType;\r\n\r\nconst Login: React.FC = () => {\r\n const { heading, search, googleMapCenterLatitude, googleMapCenterLongitude } = useSelector<\r\n ApplicationState,\r\n LocalizatorStaticContentState\r\n >((state) => state.localizatorStaticContent);\r\n const {\r\n messages: { apiKey },\r\n } = useSelector((state) => state.staticContent);\r\n const { messages } = useSelector((e) => e.global);\r\n const { errorMessagesWrongAddress, tooltipsGeoDisabled, errorMessagesNoStores } = useSelector<\r\n ApplicationState,\r\n StaticContent['messages']\r\n >((e) => e.staticContent.messages);\r\n\r\n const { suggestions, showModal } = useSelector((state) => state.localization);\r\n const { showLocalization, nearbyStores, selectedAddress } = useSelector(\r\n (state) => state.localizator,\r\n );\r\n\r\n const [activeStore, setActiveStore] = useState();\r\n\r\n const dispatch = useDispatch();\r\n const { ref, isVisible, setIsVisible } = useVisible(false);\r\n const showFindMe = nearbyStores.length === 0;\r\n const errorMessage = messages.length > 0 && messages[0];\r\n\r\n useEffect(() => {\r\n dispatch(getStaticContent());\r\n dispatch(getGlobalStaticContent());\r\n\r\n setTimeout(() => {\r\n document.getElementById('current-province')?.scrollIntoView({ block: 'start', behavior: 'smooth' });\r\n }, 250);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (nearbyStores.length > 0) {\r\n const idx = nearbyStores.findIndex((store) => store.id === activeStore);\r\n document\r\n .querySelectorAll('#localizator-stores-list .store-list-item')\r\n [idx].scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n }\r\n }, [activeStore]);\r\n\r\n function onChangeHandler(sender: React.ChangeEvent): void {\r\n const { value } = sender.target;\r\n dispatch({ type: LocalizatorActionTypes.SET_SELECTED_ADDRESS_VALUE, payload: value });\r\n\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 selectSuggestionHandler(placeId: string): void {\r\n dispatch(getSelectedAddress(placeId));\r\n setIsVisible(false);\r\n }\r\n\r\n function userLocationHandler(): void {\r\n const mobile = window.S4DWebBridge();\r\n if (mobile == null) {\r\n dispatch(getCoordsSuggestions());\r\n } else {\r\n dispatch(SetLoader(true));\r\n mobile.requestLocation(successMobileLocationRequestHandler, failedMobileLocationRequestHandler);\r\n }\r\n }\r\n\r\n function successMobileLocationRequestHandler(latitude: number, longitude: number): void {\r\n dispatch(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 function renderInfoTooltip(): JSX.Element {\r\n if (\r\n errorMessage &&\r\n (errorMessage.message === errorMessagesWrongAddress ||\r\n errorMessage.message === tooltipsGeoDisabled ||\r\n errorMessage.message === errorMessagesNoStores)\r\n ) {\r\n return (\r\n \r\n {errorMessage.message}\r\n
\r\n );\r\n }\r\n return <>;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {renderInfoTooltip()}\r\n {\r\n dispatch({ type: LocalizatorActionTypes.SET_SELECTED_ADDRESS });\r\n }}\r\n suggestionsHelper={(): void => setIsVisible(true)}\r\n searchLabels={search}\r\n rounded={!showFindMe && !isVisible}\r\n />\r\n {isVisible && suggestions.length > 0 && (\r\n
\r\n \r\n \r\n
\r\n
\r\n )}\r\n {showFindMe && (\r\n
\r\n \r\n \r\n {search.geolocationText}\r\n \r\n
\r\n )}\r\n \r\n
\r\n\r\n
\r\n {apiKey && googleMapCenterLatitude && googleMapCenterLongitude && (\r\n {\r\n setActiveStore(id);\r\n }}\r\n searchPlaceId={selectedAddress.placeId}\r\n apiKey={apiKey}\r\n googleMapCenterLatitude={parseFloat(googleMapCenterLatitude)}\r\n googleMapCenterLongitude={parseFloat(googleMapCenterLongitude)}\r\n />\r\n )}\r\n
\r\n
\r\n
\r\n\r\n dispatch({ type: LocalizatorActionTypes.SET_LOCALIZATION_VISIBILITY, payload: false })}\r\n transparent\r\n fullWidth\r\n // if there is inner modal - hide outer modal close buttons\r\n closeButton={\r\n showModal\r\n ? undefined\r\n : () => dispatch({ type: LocalizatorActionTypes.SET_LOCALIZATION_VISIBILITY, payload: false })\r\n }\r\n backdropButton={{ visible: !showModal, fixedPosition: true }}\r\n >\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Login;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport App from './App';\r\n\r\nReactDOM.render(, document.querySelector('#store-localizator-app-root'));\r\n","import React, { useEffect } from 'react';\r\nimport { Provider } from 'react-redux';\r\nimport store from './store';\r\nimport StoreLocalizator from './containers/store-localizator.container';\r\nimport { changeMobileBarsColor } from 'shared/helpers/mobile-app-helper';\r\n\r\nexport default function App(): JSX.Element {\r\n useEffect(() => {\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 = 799;","// 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\t799: 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__(1756)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","OrderStatusEnum","AppReviewTarget","ApplicationType","OrderDistributionType","UserMessageType","Array","prototype","orderByAsc","propertyName","this","sort","a","b","orderByDesc","removeDuplicates","removedDuplicates","Set","from","baseURL","document","getElementById","value","redirectToHomePage","window","location","href","hostURL","cookie","encodeURIComponent","url","appCulture","getRedirectURL","getElementsByTagName","getAttribute","getOtherAppRedirectURL","redirectToOtherAppURL","redirectToExternalURL","redirectToURL","redirectToNotFound","backToHistory","history","back","redirectToMainPage","parametersToObject","args","substring","length","obj","undefined","parameters","split","index","keyAndValueArray","openNewWindow","open","action","dispatch","errMessage","allowedErr","errorCallback","withoutGlobalNotification","message","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","setTimeout","clearTimeout","result","validate","success","messages","LocalizationRequestErrorType","PushNotificationsProvider","StoreState","LocalizationStrategy","LocalizationActionTypes","storeId","distributionType","params","toDeliver","Delivery","get","suggestionCancel","CancellationToken","input","cancelToken","cancelExecutor","SET_SUGGESTIONS","prepareCoordsSuggestions","latitude","longitude","getState","state","errorMessagesImpossibleToLocateDelivery","staticContent","language","apiResponse","isCompleteAddress","SHOW_NUMBER_INPUT","SET_SELECTED_ADDRESS","tooltipsAdressConfirmation","WARNING","localization","Pickup","getNearbyStores","setRequestLocalizationError","tooltipsGeoDisabled","errorMessage","LOCALIZATION_DISABLED","selectedAddressDetails","address","limit","includeDistance","errorMessagesNoStores","clearCurrentStoreStatus","SET_NEARBY_STORES","getStoreAvailableHours","apiUrl","setCurrentStoreForPickup","store","id","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","selectedAddress","street","streetNumber","suggestions","placeId","city","validateAddress","postalCode","region","addressForValidation","find","s","primaryAddress","alternateAddressForValidation","secondaryAddress","getAdditionalAddressInfo","storeExternalId","streetName","country","setStoreAndSave","currentStore","selectedOrderTime","updatedCurrentStore","json","JSON","stringify","expirationDate","isAsap","Date","minutes","utcDateTimeFrame","key","cookieValue","String","toUTCString","gtm","localizationModule","localizationSuccess","changeDistributionType","SET_FORCE_DELIVERY_DISTRIBUTION","emptySelectedAddress","addressAddition","remark","localizationStrategy","additionalInfo","initialState","fetched","nearbyStores","distance","name","selectedStoreStatus","stateDescription","reason","timestamp","showToast","showModal","showNumberInput","lastAddresses","lastStores","forceDeliveryDistributionType","SelectStoreActionTypes","showLocalization","StoresListActionTypes","availableStores","SET_USER_STATUS","SET_SUPPORTED_CULTURES","SET_APP_CONFIGURATION","host","signedin","loader","showErrorModal","supportedCultures","appConfiguration","maxChangeableToppingsForEditPizza","maxExtraToppingsForEditPizza","maxToppingsForCustomPizza","appReviewsEnabled","positiveReviewsTarget","NATIVE_STORE","negativeReviewsTarget","DB","authCookies","items","i","indexOf","toLowerCase","replace","decodeURIComponent","parse","currentUser","email","Email","phone","Phone","firstName","FirstName","lastName","LastName","lastActiveOrder","LastActiveOrder","StaticContentActionTypes","getStaticContent","SET_STATIC_CONTENT","tooltipsFillAddress","tooltipsFillStreetNumber","errorMessagesWrongAddress","errorMessagesWrongStreetNumber","errorMessagesImpossibleToLocatePickup","errorModalTitle","errorModalDescription","apiKey","simplifiedFooter","configuration","hideCouponsScratchedPrices","LocalizationStaticContentActionTypes","deliveryIcon","deliveryIconDisabled","deliveryTabText","dropdownLabelPickupResults","dropdownDeliveryLabelRegisteredUser","dropdownPickupLabelRegisteredUser","geolocationTextDelivery","geolocationTextPickup","localizationInputPlaceholder","mainCTA","pickupIcon","pickupIconDisabled","pickupTabText","signInLink","storeDistanceUnit","changeStore","changeDeliveryTitle","changePickupTitle","changeStoreButton","goToCatalogButton","storeIsClosedToast","chooseTimeHeading","chooseTimeAsap","storeUnavailable","outOfDeliveryRangeHeading","outOfDeliveryRangeText","distancePrefix","distanceSuffix","noStoreAvailable","returnButton","addressAlertModal","title","confirmButton","cancelButton","informationText","storeStatusInfo","noOnlineOrdersModalHeader","noOnlineOrdersModalText","noDeliveryOrdersModalHeader","noDeliveryOrdersModalText","noPickupOrdersModalHeader","noPickupOrdersModalText","customStoreUnavailabilityModalHeader","customStoreUnavailabilityModalText","storeStatusModalConfirmButtonText","LocalizatorStaticContentActionTypes","heading","mainText","secondaryText","search","placeholder","geolocationText","noLocationsInSearchArea","storeCard","storeDetailsLink","startDelivery","startPickup","googleMapCenterLatitude","googleMapCenterLongitude","LocalizatorActionTypes","SET_LOCALIZATION_VISIBILITY","localizator","forceDistributionChange","rootReducer","updatedSelectedAddress","ON_PROPERTY_CHANGED","addressDetails","displayValue","SET_ORDER_TIME","SET_LAST_USED_ADDRESSES","map","accAddress","district","SET_LAST_USED_STORES","SET_ADDRESS_ADDITIONAL_INFO","localizationStaticContent","localizatorStaticContent","selectStore","SET_TOOLTIP_VISIBILITY","SET_TOAST_VISIBILITY","SET_SELECTED_ADDRESS_VALUE","storesList","SET_AVAILABLE_STORES","global","SET_SIMPLIFIED_FOOTER","SET_CONFIGURATION","middlewares","enhancer","cookieState","row","startsWith","decodedCookieState","ex","debug","log","LoadReduxFromCookie","initialIsVisible","useState","isVisible","setIsVisible","ref","useRef","handleClickOutside","ev","current","contains","target","useEffect","addEventListener","removeEventListener","onSelect","selectedSuggestion","setSelectedSuggestion","suggestionsIds","suggestion","handleKeyboardNavigation","classList","add","e","preventDefault","moveDown","moveUp","currentSuggestion","currentSuggestionIndex","nextSuggestion","remove","onClick","className","tabIndex","formattedSuggestion","renderSuggestion","RoutingHelpers","text","fullScreen","mobile","S4DWebBridge","show","setShowLoader","hideLoader","delayedLoader","showLoader","src","onClose","onToggle","distanceUnit","submitClickedOnCollection","toFixed","ShowOptions","useShowDelay","none","setShow","hide","isPickup","onChangeFn","onClear","suggestionsHelper","showStreetNumberInput","showClear","autoComplete","onChange","inputClickedOnCollection","inputClickedOnDelivery","getContainerClassByType","INFO","getTextClassByType","getArrowClassByType","testId","globalState","offset","setOffset","firstElement","right","style","additionData","headerText","paragraphText","linkText","linkHref","onSelectAddressFn","onSelectStoreFn","dropdownLabel","onToggleFn","showLastUsed","renderAddress","renderStore","ValidateDeliveryResponse","validators","bind","validator","fn","push","messageType","predictionsTimer","sourceString","n","deliveryAddition","pickupAddition","showStores","setShowStores","setShowLastUsed","isDelivery","showSuggestions","setFocusOnInput","focus","successMobileLocationRequestHandler","failedMobileLocationRequestHandler","goToTimeSlotSelect","validationResult","StreetErr","NumberErr","Valid","ValidateDeliveryAddress","validAddress","selectedAddressOriginalValue","storeToDeliveryResponse","storeToDelivery","isUsingS4DRegistry","PH_MX","externalStoreId","additionalAddressInfo","localizationError","addresses","sender","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","findIndex","ah","c","r","Math","random","toString","currentStoreId","onReturn","filter","fontSize","orderTime","orderTimeSelected","distributionChange","deliveryTabClicked","background","collectionTabClicked","onConfirmFn","onCancelFn","onContinueFn","onChangeStoreFn","showConfirm","setShowConfirm","changeAddressClicked","basket","localStorage","getItem","parsedBasket","callback","keyPressHandler","cancelCallbackFn","event","toUpperCase","deps","header","subHeader","ctaText","OPEN_BUT_NO_ONLINE_ORDERS","modalText","OPEN_BUT_NO_DELIVERY_ORDERS","OPEN_BUT_NO_PICKUP_ORDERS","CLOSED","subheader","renderModalSwitch","storeSelected","cookieExists","redirectToOffers","removeItem","searchLabels","rounded","onDeliveryFn","onPickupFn","deliveryLabel","pickupLabel","isActive","goToDetails","activeStoreId","alias","markerIcon","activeMarkerIcon","userMarker","markers","stores","selectStoreFn","searchPlaceId","setMarkers","forEach","marker","setMap","idx","google","maps","Marker","lat","lng","icon","clickable","addListener","setActiveMarker","places","PlacesService","getDetails","res","PlacesServiceStatus","OK","geometry","setCenter","setZoom","version","libraries","defaultCenter","load","then","Map","center","zoom","scaledSize","Size","getIcon","setIcon","activeStore","setActiveStore","showFindMe","scrollIntoView","block","behavior","querySelectorAll","pos","parseFloat","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","__webpack_exports__"],"sourceRoot":""}