{"version":3,"file":"coopse.script.6376.ad0a6368.chunk.js","mappings":"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","sources":["webpack:///./src/microApps/common/api/savedCarts/savedCartsApi.ts","webpack:///./src/microApps/common/api/store/storeApi.ts","webpack:///./src/microApps/common/api/timeslots/timeslotsApi.ts","webpack:///./src/microApps/common/models/hybris/hybrisConstants.ts","webpack:///./src/microApps/common/api/cart/directCartApi.ts","webpack:///./src/microApps/common/flow/cart/mapCartResponses.ts","webpack:///./src/microApps/common/flow/cart/currentCartFlow.ts","webpack:///./src/microApps/common/api/store/directStoreApi.ts","webpack:///./src/microApps/common/thunks/cartThunks.ts","webpack:///./src/facades/ecommerce/cart/normalizeCartToReduxState.ts","webpack:///./src/microApps/common/thunks/storeThunks.ts"],"sourcesContent":["import type { HybrisCart } from '../../models/hybris/hybrisCart';\nimport type { HybrisSavedCartResultList } from '../../models/hybris/hybrisSavedCartResultList';\nimport getDirectHybrisAxiosClient from '../clients/directHybrisAxiosClient';\n\nconst savedCartsApi = {\n restoreSavedCart:\n (token: string) =>\n async (userId: string, cartId: string, savedCartId: string): Promise<HybrisCart> => {\n const response = await getDirectHybrisAxiosClient(token).post(\n `users/${userId}/carts/${cartId}/restoresavedcart?savedCartId=${savedCartId}`,\n );\n const resp = response.data;\n return resp;\n },\n\n getSavedCarts:\n (token: string) =>\n async (\n userId: string,\n page: number,\n pageSize: number,\n ): Promise<HybrisSavedCartResultList> => {\n const response = await getDirectHybrisAxiosClient(token).get(\n `users/${userId}/carts/savedcarts?currentPage${encodeURIComponent(\n page,\n )}&pageSize=${encodeURIComponent(pageSize)}`,\n );\n const resp = response.data;\n return resp;\n },\n deleteSavedCart:\n (token: string) =>\n async (userId: string, cartId: string): Promise<boolean> => {\n const response = await getDirectHybrisAxiosClient(token).patch(\n `users/${userId}/carts/${cartId}/flagForDeletion`,\n );\n const resp = !!response.data;\n return resp;\n },\n saveCart:\n (token: string) =>\n async (\n userId: string,\n cartId: string,\n cartName: string,\n ): Promise<{ savedCartData: HybrisCart }> => {\n const response = await getDirectHybrisAxiosClient(token).post(\n `users/${userId}/carts/${cartId}/save`,\n null,\n { params: { saveCartName: cartName } },\n );\n const resp = response.data;\n return resp;\n },\n bulkUpdate:\n (token: string) =>\n async (\n userId: string,\n cartId: string,\n items: { productCode: string; variantCode?: string; quantity: number }[],\n ): Promise<void> => {\n const response = await getDirectHybrisAxiosClient(token).post(\n `users/${userId}/saved-carts/${cartId}/bulkentries`,\n items,\n );\n const resp = response.data;\n return resp;\n },\n};\nexport default savedCartsApi;\n","import type { IApiStore } from '../../../../models/ecommerce/store/storeModel';\nimport type { ApiSwitchStoreResult } from '../cart/responses/cartResponses';\nimport hybrisAxiosClient from '../clients/hybrisAxiosClient';\nimport { getCancellationToken } from '../utils';\n\nconst fetchStoreById = async (storeId: string): Promise<IApiStore> => {\n const response = await hybrisAxiosClient.get(`/store/detailed?id=${storeId}`);\n return response.data;\n};\n\nconst searchPickupStores = async (\n searchterm: string,\n hits: number | null,\n abortSignal?: AbortSignal,\n): Promise<IApiStore[]> => {\n const cancelToken = getCancellationToken(abortSignal);\n\n const response = await hybrisAxiosClient.get('/store/list', {\n params: {\n searchterm: searchterm || '',\n hits: hits || '',\n },\n cancelToken,\n });\n const stores: IApiStore[] = response.data;\n return stores;\n};\n\nconst fetchPickupStores = async (): Promise<IApiStore[]> => {\n return searchPickupStores('', null);\n};\n\nconst fetchStoreByPostalCode = async (zipCode: string): Promise<IApiStore> => {\n const response = await hybrisAxiosClient.get<IApiStore>(`/store?zipCode=${zipCode}`);\n return response.data;\n};\n\nconst updatePickupStore = async (storeId: string): Promise<IApiStore> => {\n const response = await hybrisAxiosClient.put('/store/pickupStore', {\n uid: storeId,\n });\n return response.data;\n};\n\n/**\n * This doesnt change postalcode if there is any items in the cart that will be lost in the change.\n * Flag \"simulate\" on response tells you if the change only been simulated or not.\n * @param zipCode\n */\nconst updateHomeDeliveryStoreUnconfirmed = async (\n postalCode: string,\n baseStoreId: string | null = null,\n): Promise<ApiSwitchStoreResult> => {\n const response = await hybrisAxiosClient.post('/store/current/unconfirmed', {\n zipCode: postalCode,\n baseStoreId,\n });\n return response.data;\n};\n\n/**\n * Flag \"simulate\" on response tells you if the change only been simulated or not.\n */\nconst updatePickupStoreUnconfirmed = async (storeId: string): Promise<ApiSwitchStoreResult> => {\n const response = await hybrisAxiosClient.put('/store/pickupStore/unconfirmed', {\n uid: storeId,\n });\n return response.data;\n};\n\nconst updateHomeDeliveryStore = async (\n postalCode: string,\n baseStoreId: string | null = null,\n): Promise<IApiStore> => {\n const response = await hybrisAxiosClient.post('/store/current', {\n zipCode: postalCode,\n baseStoreId,\n });\n return response.data;\n};\n\nexport const storeApi = {\n fetchStoreByPostalCode,\n fetchPickupStores,\n fetchStoreById,\n searchPickupStores,\n updatePickupStore,\n updateHomeDeliveryStore,\n updatePickupStoreUnconfirmed,\n updateHomeDeliveryStoreUnconfirmed,\n};\n","import axios from 'axios';\n\nimport { getInitialState } from '../../store/slices/cart/cartTimeslotSlice';\nimport type { TimeslotType } from './timeslotModels';\n\nconst mapToProperApiApiHybrisTimeslot = (timeslot: ApiHybrisTimeslot) => {\n if (!timeslot || !timeslot.id) return getInitialState().timeslot;\n return {\n ...timeslot,\n endTime: new Date(timeslot.endTime).valueOf(),\n startTime: new Date(timeslot.startTime).valueOf(),\n maxOrderTime: new Date(timeslot.maxOrderTime).valueOf(),\n };\n};\n\n/**\n * Fetch timeslots for current cart's store\n */\nconst fetchForCurrentCart = async (days?: number): Promise<ApiHybrisTimeslot[]> => {\n const response = await axios.get(\n `/api/hybris/timeslots?maxNumOfDays=${days ? days.toFixed(0) : 30}`,\n );\n return response.data && response.data.map(mapToProperApiApiHybrisTimeslot);\n};\n\nconst fetchByPostalCode = async (\n postalCode: string,\n days?: number,\n): Promise<ApiHybrisTimeslot[]> => {\n const response = await axios.get(\n `/api/hybris/timeslots/postalcode/${postalCode}/?maxNumOfDays=${\n days ? days.toFixed(0) : 30\n }`,\n );\n return response.data && response.data.map(mapToProperApiApiHybrisTimeslot);\n};\n\nconst current = async () => {\n const response = await axios.get<ApiHybrisTimeslot>('/api/hybris/carts/current/timeslot');\n return mapToProperApiApiHybrisTimeslot(response.data);\n};\n\nconst select = async (timeslotId: string): Promise<void> => {\n const data = { timeslotId };\n await axios.put('/api/hybris/carts/current/timeslot', data);\n};\n\n// TODO rename this to ApiTimeslot, use ApiHybrisTimeslot naming when directly using Hybris api\nexport interface ApiHybrisTimeslot {\n timeSlotTime: string;\n endTime: number;\n startTime: number;\n maxOrderTime: number;\n timeSlotDay: string;\n shippingType: string;\n fullyBooked: boolean;\n id: string | null;\n cost?: number;\n expirationTime?: Date;\n storeId: string;\n timeslotType: TimeslotType;\n milisecondsToExpire?: number;\n ecoFriendly: boolean;\n expectETANotification?: boolean;\n}\n\nexport const timeslotsApi = {\n fetchForCurrentCart,\n fetchByPostalCode,\n select,\n current,\n};\n","export enum HybrisResponseFieldsType {\n Full = 'FULL',\n Default = 'DEFAULT',\n Basic = 'BASIC',\n}\n","/* eslint-disable @typescript-eslint/no-throw-literal */\nimport { appConfig } from '../../../../appConfig';\nimport type { ApiCartException } from '../../exceptions/exceptionDefinitions';\nimport type { HybrisCart } from '../../models/hybris/hybrisCart';\nimport type { HybrisCartModification } from '../../models/hybris/hybrisCartModification';\nimport { HybrisResponseFieldsType } from '../../models/hybris/hybrisConstants';\nimport type { HybrisSwitchStore } from '../../models/hybris/hybrisSwitchStore';\nimport getDirectHybrisAxiosClient from '../clients/directHybrisAxiosClient';\n\nconst directCartApi = {\n addToCartFromOrder:\n (token: string) =>\n async (userId: string, cartId: string, orderId: string): Promise<HybrisCart> => {\n const response = await getDirectHybrisAxiosClient(token).post(\n `users/${userId}/carts/${cartId}/addfromorder/${orderId}`,\n );\n const resp = response.data;\n return resp;\n },\n\n updateCartItem:\n (token?: string) =>\n async (\n userId: string,\n cartId: string,\n item: {\n productId: string;\n variantId: string | undefined;\n quantity: number;\n itemReplaceable?: boolean;\n },\n ) => {\n const queryString = new URLSearchParams();\n queryString.set('qty', item.quantity.toString());\n queryString.set('code', item.productId);\n if (item.variantId) {\n queryString.set('varianceCode', item.variantId);\n }\n if (item.itemReplaceable !== undefined) {\n queryString.set('replaceable', item.itemReplaceable ? 'true' : 'false');\n }\n\n const response = await getDirectHybrisAxiosClient(token).post<HybrisCartModification>(\n `users/${encodeURIComponent(userId)}/carts/${encodeURIComponent(\n cartId,\n )}/products?${queryString.toString()}`,\n );\n\n if (response.data.statusCode !== 'success') {\n let errorMessage = appConfig.coopSettings.ecommerce.errorMessage.general;\n switch (response.data.statusCode) {\n case 'restrictedByUserGroupAndCategory':\n errorMessage = appConfig.coopUserSettings.punchout.isPunchout\n ? appConfig.coopSettings.ecommerce.errorMessage\n .productRestrictedForBusinessUnit\n : appConfig.coopSettings.ecommerce.errorMessage\n .productRestrictedForPrivateUser;\n break;\n case 'unavailable':\n errorMessage =\n appConfig.coopSettings.ecommerce.errorMessage.productNotFound;\n break;\n case 'foodBagOnly':\n break;\n default:\n break;\n }\n throw <ApiCartException>{ code: null, friendlyMessage: errorMessage, type: 'Cart' };\n }\n return response.data;\n },\n bulkEntries:\n (token?: string) =>\n async (\n userId: string,\n cartId: string,\n items: { productCode: string; varianceCode: string | undefined; quantity: number }[],\n ) => {\n const response = await getDirectHybrisAxiosClient(token).post<{\n CartModifications: {}[];\n }>(`users/${userId}/carts/${cartId}/bulkentries`, items);\n const resp = response.data.CartModifications;\n return resp;\n },\n\n createCart: async (shoppingUserId: string, token?: string) => {\n const response = await getDirectHybrisAxiosClient(token).post<HybrisCart>(\n `users/${encodeURIComponent(shoppingUserId)}/carts`,\n );\n\n return response.data;\n },\n getCart: async (shoppingUserId: string, cartId: string, token?: string) => {\n const response = await getDirectHybrisAxiosClient(token).get<HybrisCart>(\n `users/${encodeURIComponent(shoppingUserId)}/carts/${encodeURIComponent(\n cartId,\n )}?fields=${HybrisResponseFieldsType.Full}`,\n );\n\n return response.data;\n },\n updatePostCode: async (\n shoppingUserId: string,\n cartId: string,\n postCode: string,\n baseStoreId: string,\n confirmed: boolean,\n token?: string,\n ) => {\n const queryString = new URLSearchParams();\n queryString.set('postCode', postCode);\n queryString.set('confirmed', confirmed ? 'true' : 'false');\n queryString.set('basestoreCode', baseStoreId);\n\n const response = await getDirectHybrisAxiosClient(token).put<HybrisSwitchStore | undefined>(\n `users/${encodeURIComponent(\n shoppingUserId,\n )}/carts/${cartId}/postcode?${queryString.toString()}`,\n );\n // if we change to the already current store in the cart, we get 200ok with no response, thats why i added updateresult == null as success :E\n return response.data;\n },\n setPointOfService: async (\n shoppingUserId: string,\n cartId: string,\n pickupPointId: string,\n confirmed: boolean,\n token?: string,\n ) => {\n const queryString = new URLSearchParams();\n queryString.set('posName', pickupPointId);\n queryString.set('confirmed', confirmed ? 'true' : 'false');\n\n const response = await getDirectHybrisAxiosClient(token).put<HybrisSwitchStore | undefined>(\n `users/${encodeURIComponent(\n shoppingUserId,\n )}/carts/${cartId}/pointofservice?${queryString.toString()}`,\n );\n return response.data;\n },\n setDeliveryMode: async (\n shoppingUserId: string,\n cartId: string,\n deliveryModeId: string,\n token?: string,\n ) => {\n const queryString = new URLSearchParams();\n queryString.set('deliveryModeId', deliveryModeId);\n\n await getDirectHybrisAxiosClient(token).put(\n `users/${encodeURIComponent(\n shoppingUserId,\n )}/carts/${cartId}/deliverymode?${queryString.toString()}`,\n );\n },\n};\n\nexport default directCartApi;\n","import type {\n ApiFullCartItem,\n ApiSubstituteProductResponse,\n} from '../../api/cart/responses/cartResponses';\n\nconst getVariantName = (varianceCode: string, product: ApiProduct) => {\n if (product.variants && product.variants.length > 0) {\n const variantProduct = product.variants.find((variant) => variant.id === varianceCode);\n return variantProduct && variantProduct.name;\n }\n return undefined;\n};\n\nexport const mapProductToApiFullCartItem = (\n result: ApiSubstituteProductResponse,\n product: ApiProduct,\n): ApiFullCartItem => {\n const cartItem: ApiFullCartItem = {\n id: result.entryNumber.toString(),\n name: result.name,\n productId: result.productIdentifier,\n variantId: result.variantId,\n quantity: result.quantity,\n manufacturer: result.manufacturer,\n };\n\n if (product) {\n cartItem.image = product.image && product.image.url;\n cartItem.priceData = product.priceData;\n cartItem.productUrl = product.url;\n cartItem.variantName = getVariantName(result.variantId, product);\n }\n\n if (product && product.details) {\n cartItem.packageSizeInformation = `${product.details.size && product.details.size.size} ${\n product.details.size.unit && product.details.size.unit.toLowerCase()\n }`;\n }\n\n return cartItem;\n};\n","import { appConfig } from '../../../../appConfig';\nimport { Cookies } from '../../../../utility/cookies';\nimport { getAuthToken, getAuthTokenOrDefault } from '../../api/auth/getAuthToken';\nimport cartApi from '../../api/cart/cartApi';\nimport directCartApi from '../../api/cart/directCartApi';\nimport type { ApiAddMultipleRecipesRequest } from '../../api/recipe/recipeModels';\nimport savedCartsApi from '../../api/savedCarts/savedCartsApi';\nimport { directStoreApi } from '../../api/store/directStoreApi';\nimport { timeslotsApi } from '../../api/timeslots/timeslotsApi';\nimport { DeliveryMode } from '../../store/structureDefinitions/storeState';\nimport { productFlow } from '../product/productFlow';\nimport { mapProductToApiFullCartItem } from './mapCartResponses';\n\nconst CART_COOKIE_NAME = 'coop-cart';\nexport const HOME_DELIVERY_MODE = 'homedelivery';\nconst getCart = async () => {\n const cart = await cartApi.fetchCart();\n return cart;\n};\n\nconst getCartSimple = async () => {\n const cart = await cartApi.fetchCartSimple();\n return cart;\n};\n\nconst getCurrentCartId = () => {\n if (appConfig.coopUserSettings.isAuthenticated) {\n return 'current';\n }\n const anonymousCartId = Cookies.read(CART_COOKIE_NAME);\n return anonymousCartId;\n};\n\nconst emptyCart = () => cartApi.emptyCart();\n\nconst buyMultipleRecipes = (request: ApiAddMultipleRecipesRequest) =>\n cartApi.recipes.buyMultipleRecipes(request);\n\nconst removeRecipe = (recipeId: string) => cartApi.recipes.removeRecipe(recipeId);\n\nconst changeRecipePortions = (recipeId: string, portions: number) =>\n cartApi.recipes.changeRecipePortions(recipeId, portions);\n\nconst getCurrentTimeslot = () => timeslotsApi.current();\n\nconst selectTimeslot = async (timeslotId: string) => {\n await timeslotsApi.select(timeslotId);\n const currentTimeslot = await timeslotsApi.current();\n return currentTimeslot;\n};\n\nconst changeItemVariant = (\n cartItemId: string,\n productId: string,\n quantity: number,\n newVariantId: string,\n) =>\n cartApi.changeCartItemVariant({\n id: cartItemId,\n productId,\n variantId: newVariantId,\n quantity,\n });\n\nconst updateItemQuantity = async (\n cartId: string,\n productId: string,\n variantId: string | undefined,\n quantity: number,\n itemReplaceable?: boolean,\n) => {\n const { token, shoppingUserId } = await getAuthTokenOrDefault();\n\n return directCartApi.updateCartItem(token)(shoppingUserId, cartId, {\n productId,\n variantId,\n quantity,\n itemReplaceable,\n });\n};\n\n/** Creates a new cart,\n * if syncWithStoreContext, we will try to update the cart with delivermode / zip / pickup-point\n * */\nconst createCartAsync = async (\n deliveryMode: DeliveryMode,\n currentZipCode?: string,\n currentPickupPointId?: string,\n) => {\n const { token, shoppingUserId } = await getAuthTokenOrDefault();\n const cart = await directCartApi.createCart(shoppingUserId, token);\n const cartId = cart.guid!;\n Cookies.create(CART_COOKIE_NAME, cartId, 70);\n\n if (deliveryMode === DeliveryMode.homedelivery && currentZipCode) {\n const store = await directStoreApi.getStoreByPostCode(currentZipCode!);\n await directCartApi.updatePostCode(\n shoppingUserId,\n cartId,\n currentZipCode!,\n store.code,\n true,\n token,\n );\n await directCartApi.setDeliveryMode(shoppingUserId, cartId, HOME_DELIVERY_MODE, token);\n }\n if (deliveryMode === DeliveryMode.pickup && currentPickupPointId) {\n const pointOfService = await directStoreApi.getPointOfService(currentPickupPointId!);\n if (!pointOfService?.pickupDeliveryModes?.length) {\n throw new Error('No deliverymodes!');\n }\n await directCartApi.setPointOfService(\n shoppingUserId,\n cartId,\n currentPickupPointId!,\n true,\n token,\n );\n await directCartApi.setDeliveryMode(\n shoppingUserId,\n cartId,\n pointOfService.pickupDeliveryModes[0].code,\n token,\n );\n }\n\n if (deliveryMode) {\n return directCartApi.getCart(shoppingUserId, cartId, token);\n }\n return cart;\n};\n\nconst getItemSubstitutes = async (rowNumber: string, storeId: string) => {\n const substituteProducts = await cartApi.recipes.getProductSubstitutes(rowNumber);\n\n const incompleteProductIds = substituteProducts.map((product) => {\n return product.id;\n });\n\n const products = await productFlow.getProductsByIds([...incompleteProductIds], storeId);\n return products;\n};\n\nconst substituteProduct = async (cartItemId: string, newProductId: string, storeId: string) => {\n const subsituteResponse = await cartApi.recipes.substituteProduct(cartItemId, newProductId);\n\n const fullProduct = await productFlow.getProductById(\n subsituteResponse.productIdentifier,\n storeId,\n );\n\n const cartItem = fullProduct\n ? mapProductToApiFullCartItem(subsituteResponse, fullProduct)\n : null;\n\n return cartItem;\n};\n\nconst applyVoucher = (id: string) => cartApi.voucher.add(id);\n\nconst removeVoucher = (id: string) => cartApi.voucher.remove(id);\n\nconst changeReplaceability = async (\n productId: string,\n variantId: string | undefined,\n quantity: number, // needs to be there since we have one endpoint that does not like empty quantity\n replaceable: boolean,\n) => {\n const cartId = await getCurrentCartId();\n if (!cartId) {\n throw new Error('No cart id');\n }\n const { token, shoppingUserId } = await getAuthTokenOrDefault();\n const updatedItem = await directCartApi.updateCartItem(token)(shoppingUserId, cartId, {\n productId,\n variantId,\n quantity,\n itemReplaceable: replaceable,\n });\n return updatedItem;\n};\n\nconst setItemsReplaceability = (replaceable: boolean) =>\n cartApi.setItemsReplaceability({ replaceAll: replaceable });\n\nconst addToCartFromOrder = async (orderId: string) => {\n const { token, shoppingUserId } = await getAuthToken();\n const cartId = await getCurrentCartId();\n if (!cartId) {\n throw new Error('No cart id');\n }\n const response = await directCartApi.addToCartFromOrder(token)(shoppingUserId, cartId, orderId);\n return response;\n};\n\nconst restoreSavedCart = async (savedCartId: string) => {\n const { token, shoppingUserId } = await getAuthToken();\n const cartId = await getCurrentCartId();\n if (!cartId) {\n throw new Error('No cart id');\n }\n const response = await savedCartsApi.restoreSavedCart(token)(\n shoppingUserId,\n cartId,\n savedCartId,\n );\n return response;\n};\n\nconst validateAssortment = async () => {\n const { token, shoppingUserId } = await getAuthToken();\n return cartApi.validateAssortment(token)(shoppingUserId);\n};\n\nconst addItemsBulk = async (\n cartId: string,\n items: {\n productId: string;\n variantId?: string;\n quantity: number;\n replaceable?: boolean;\n }[],\n) => {\n const { token, shoppingUserId } = await getAuthTokenOrDefault();\n const response = await directCartApi.bulkEntries(token)(\n shoppingUserId,\n cartId,\n items.map((item) => ({\n productCode: item.productId,\n varianceCode: item.variantId,\n quantity: item.quantity,\n replaceable: item.replaceable ?? true,\n })),\n );\n return response;\n};\n\nexport const currentCartFlow = {\n getCurrentCartId,\n getCart,\n getCartSimple,\n createCartAsync,\n emptyCart,\n removeRecipe,\n buyMultipleRecipes,\n addItemsBulk,\n changeRecipePortions,\n getCurrentTimeslot,\n selectTimeslot,\n changeItemVariant,\n updateItemQuantity,\n getItemSubstitutes,\n substituteProduct,\n applyVoucher,\n removeVoucher,\n changeReplaceability,\n setItemsReplaceability,\n restoreSavedCart,\n addToCartFromOrder,\n validateAssortment,\n};\n","import { HybrisResponseFieldsType } from '../../models/hybris/hybrisConstants';\nimport type { HybrisPointOfService } from '../../models/hybris/hybrisPointOfService';\nimport type { HybrisStoreSimple } from '../../models/hybris/hybrisStoreSimple';\nimport getDirectHybrisAxiosClient from '../clients/directHybrisAxiosClient';\n\nconst getPointOfService = async (id: string) => {\n const queryString = new URLSearchParams();\n queryString.set('id', id);\n queryString.set('fields', HybrisResponseFieldsType.Default);\n\n const response = await getDirectHybrisAxiosClient(undefined).post<HybrisPointOfService>(\n `pointofservice/${encodeURIComponent(id)}?${queryString.toString()}`,\n );\n return response.data;\n};\n\nconst getStoreByPostCode = async (postCode: string) => {\n const queryString = new URLSearchParams();\n queryString.set('postCode', postCode);\n\n const response = await getDirectHybrisAxiosClient(undefined).get<HybrisStoreSimple>(\n `coopstore/?${queryString.toString()}`,\n );\n return response.data;\n};\n\nexport const directStoreApi = {\n getPointOfService,\n getStoreByPostCode,\n};\n","import { appInsights } from '../../../appInsights';\nimport { normalizeCartToReduxState } from '../../../facades/ecommerce/cart/normalizeCartToReduxState';\nimport cartItemsSelectors from '../../cart/selectors/cartItemsSelectors';\nimport type { ApiCart } from '../api/cart/responses/cartResponses';\nimport type {\n ApiAddMultipleRecipesRequest,\n ApiAddMultipleRecipesResponse,\n} from '../api/recipe/recipeModels';\nimport { SyncronQueue } from '../api/SyncronQueue';\nimport type { ApiHybrisTimeslot } from '../api/timeslots/timeslotsApi';\nimport { timeslotsApi } from '../api/timeslots/timeslotsApi';\nimport { isCartException, isLocalApiBaseException } from '../exceptions/exceptionUtils';\nimport { currentCartFlow } from '../flow/cart/currentCartFlow';\nimport { productFlow } from '../flow/product/productFlow';\nimport type { HybrisCart } from '../models/hybris/hybrisCart';\nimport type { HybrisCartModification } from '../models/hybris/hybrisCartModification';\nimport type { StoreContextSettings } from '../persistance/cookie/storeContextSettings';\nimport persistance from '../persistance/persistance';\nimport { storeSelectors } from '../selectors/storeSelectors';\nimport type { AppAsyncThunk } from '../store';\nimport { finishLoading, initLoading } from '../store/slices/cart/cartApiStateSlice';\nimport { cartActions } from '../store/slices/cart/cartItemsSlice';\nimport { cartRecipeActions } from '../store/slices/cart/cartRecipesSlice';\nimport { setFullCart } from '../store/slices/cart/cartSlice';\nimport { cartTimeslotActions } from '../store/slices/cart/cartTimeslotSlice';\nimport { errorsActions } from '../store/slices/errors/errorsSlice';\nimport { storeActions } from '../store/slices/store/storeSlice';\nimport { ErrorGroup } from '../store/structureDefinitions/errorsState';\nimport { DeliveryMode } from '../store/structureDefinitions/storeState';\nimport { storeThunks } from './storeThunks';\n\nconst cartQueue = new SyncronQueue();\nconst timeslotQueue = new SyncronQueue();\nconst FETCH_CART_QUEUE_NAME = 'fetchcart';\n\nconst buildCartState = async (cart: ApiCart, storeId: string) => {\n const cartProducts = await productFlow.getProductsByIds(\n cart.items.map((cartItem) => cartItem.productId),\n storeId,\n );\n\n const cartState = normalizeCartToReduxState(cart, cartProducts);\n return cartState;\n};\n\nconst getCartSilent = (): AppAsyncThunk<Awaited<ReturnType<typeof buildCartState>>> => {\n return async (dispatch, getState) => {\n return cartQueue.run(\n async () => {\n const currentStoreId = storeSelectors.currentProductionUnit(getState());\n const cart = await currentCartFlow.getCart();\n\n const cartState = await buildCartState(cart, currentStoreId);\n dispatch(setFullCart(cartState));\n await dispatch(storeThunks.syncStoreWithCookie());\n return cartState;\n },\n { uniqueName: FETCH_CART_QUEUE_NAME },\n );\n };\n};\n\nconst getCart = (): ReturnType<typeof getCartSilent> => {\n return async (dispatch) => {\n dispatch(initLoading());\n try {\n const result = await dispatch(getCartSilent());\n dispatch(finishLoading());\n return result;\n } catch (err) {\n if (isLocalApiBaseException(err)) {\n dispatch(errorsActions.addSingle({ group: ErrorGroup.Cart, error: err }));\n }\n dispatch(finishLoading());\n return Promise.reject(err);\n }\n };\n};\n\nconst emptyCart = (): AppAsyncThunk => {\n return async (dispatch) => {\n dispatch(initLoading());\n try {\n await currentCartFlow.emptyCart();\n await dispatch(getCartSilent());\n } catch (err) {\n if (isLocalApiBaseException(err)) {\n dispatch(errorsActions.addSingle({ group: ErrorGroup.Cart, error: err }));\n }\n dispatch(finishLoading());\n }\n };\n};\n\nconst removeRecipe = (recipeId: string): AppAsyncThunk => {\n return async (dispatch) => {\n dispatch(initLoading());\n try {\n await cartQueue.run(() => currentCartFlow.removeRecipe(recipeId));\n dispatch(cartRecipeActions.removeRecipe(recipeId));\n await dispatch(getCartSilent());\n dispatch(finishLoading());\n } catch (err) {\n if (isLocalApiBaseException(err)) {\n dispatch(errorsActions.addSingle({ group: ErrorGroup.Cart, error: err }));\n }\n dispatch(finishLoading());\n }\n };\n};\n\nconst buyMultipleRecipes = (\n request: ApiAddMultipleRecipesRequest,\n): AppAsyncThunk<ApiAddMultipleRecipesResponse> => {\n return async (dispatch) => {\n const response = await cartQueue.run(() => currentCartFlow.buyMultipleRecipes(request));\n await dispatch(getCartSilent());\n return response;\n };\n};\n\n/** Does not create cart, if we want to use this for anonymous users, that functionality must be added */\nconst addItems = (\n items: {\n productId: string;\n variantId?: string;\n quantity: number;\n }[],\n): AppAsyncThunk => {\n return async (dispatch) => {\n dispatch(initLoading());\n try {\n const cartId = await currentCartFlow.getCurrentCartId();\n if (!cartId) {\n throw new Error('No cart id in updateQuantity');\n }\n await currentCartFlow.addItemsBulk(cartId, items);\n await dispatch(getCartSilent());\n dispatch(finishLoading());\n } catch (err) {\n if (isLocalApiBaseException(err)) {\n dispatch(errorsActions.addSingle({ group: ErrorGroup.Cart, error: err }));\n }\n dispatch(finishLoading());\n }\n };\n};\n\nconst changeRecipePortions = (recipeId: string, portions: number): AppAsyncThunk => {\n return async (dispatch) => {\n dispatch(initLoading());\n try {\n await cartQueue.run(() => currentCartFlow.changeRecipePortions(recipeId, portions));\n dispatch(cartRecipeActions.changeRecipePortions({ recipeId, portions }));\n await dispatch(getCartSilent());\n dispatch(finishLoading());\n } catch (err) {\n if (isLocalApiBaseException(err)) {\n dispatch(errorsActions.addSingle({ group: ErrorGroup.Cart, error: err }));\n }\n dispatch(finishLoading());\n }\n };\n};\n\nconst getCurrentTimeslot = (): AppAsyncThunk<ApiHybrisTimeslot> => {\n return async (dispatch) => {\n return timeslotQueue.run(\n async () => {\n const current = await timeslotsApi.current();\n dispatch(cartTimeslotActions.selectTimeslot(current));\n return current;\n },\n { acceptRunningPromise: true, dontPushBack: true, uniqueName: 'fetchTimeslot' },\n );\n };\n};\n\nconst selectTimeslot = (timeslotId: string): AppAsyncThunk<ApiHybrisTimeslot> => {\n return async (dispatch) => {\n await timeslotsApi.select(timeslotId);\n const currentTimeslot = await timeslotsApi.current();\n dispatch(cartTimeslotActions.selectTimeslot(currentTimeslot));\n dispatch(getCartSilent()); // update reservation cost\n\n return currentTimeslot;\n };\n};\n\nconst selectTimeslotWithStore = (\n timeslotId: string,\n postalCode: string,\n baseStoreId?: string,\n): AppAsyncThunk<ApiHybrisTimeslot> => {\n return async (dispatch) => {\n await timeslotsApi.select(timeslotId);\n const currentTimeslot = await timeslotsApi.current();\n dispatch(cartTimeslotActions.selectTimeslot(currentTimeslot));\n\n await dispatch(storeThunks.updateHomeDeliveryStore(postalCode, baseStoreId));\n\n dispatch(getCartSilent()); // update reservation cost\n\n return currentTimeslot;\n };\n};\n\nconst changeVariant = (\n cartItemId: string,\n productId: string,\n quantity: number,\n newVariantId: string,\n): AppAsyncThunk => {\n return async (dispatch) => {\n dispatch(initLoading());\n try {\n await currentCartFlow.changeItemVariant(cartItemId, productId, quantity, newVariantId);\n await dispatch(getCartSilent());\n dispatch(finishLoading());\n } catch (err) {\n if (isLocalApiBaseException(err)) {\n dispatch(errorsActions.addSingle({ group: ErrorGroup.Cart, error: err }));\n }\n dispatch(finishLoading());\n }\n };\n};\n\nconst ensureStoreContextInSync = (cart: HybrisCart): AppAsyncThunk => {\n return async (dispatch, getState) => {\n const state = getState();\n const currentProductionUnitId = storeSelectors.currentProductionUnit(state);\n const currentPostalCode = storeSelectors.currentPostalCode(state);\n const currentPickupPointId = storeSelectors.currentPickupPointId(state);\n let updatedStoreContext: StoreContextSettings | undefined;\n let deliveryMode;\n if (\n !(\n (cart.coopStore?.code && cart.deliveryMode?.code === DeliveryMode.homedelivery) ||\n (cart.pointOfService?.name && cart.deliveryMode?.code === DeliveryMode.pickup)\n )\n ) {\n const cookieSettings = persistance.storeContext.getDefaultStoreContext();\n updatedStoreContext = {\n productionUnitId: cookieSettings.productionUnitId,\n pickupPointId: cookieSettings.pickupPointId || undefined,\n storeName: cookieSettings.storeName || undefined,\n zipCode: cookieSettings.zipCode || undefined,\n };\n if (cart.deliveryMode?.code === 'homedelivery') {\n deliveryMode = DeliveryMode.homedelivery;\n } else if (cart.deliveryMode?.code === 'pickup') {\n deliveryMode = DeliveryMode.pickup;\n }\n } else if (cart.deliveryMode.code === DeliveryMode.homedelivery) {\n deliveryMode = DeliveryMode.homedelivery;\n if (\n currentProductionUnitId !== cart.coopStore?.code ||\n cart.postCode !== currentPostalCode\n ) {\n updatedStoreContext = {\n zipCode: cart.postCode?.replace(' ', ''),\n productionUnitId: cart.coopStore?.code,\n storeName: cart.coopStore?.name,\n };\n }\n } else if (\n cart.deliveryMode.code === DeliveryMode.pickup &&\n (cart.pointOfService?.name !== currentPickupPointId ||\n cart.pointOfService?.storeId !== currentProductionUnitId)\n ) {\n deliveryMode = DeliveryMode.pickup;\n updatedStoreContext = {\n pickupPointId: cart.pointOfService?.name!,\n productionUnitId: cart.pointOfService?.storeId!,\n storeName: cart.pointOfService?.displayName,\n };\n }\n\n if (updatedStoreContext) {\n persistance.storeContext.set({\n pickupPointId: updatedStoreContext.pickupPointId || null,\n zipCode: updatedStoreContext.zipCode || null,\n productionUnitId: updatedStoreContext.productionUnitId,\n storeName: updatedStoreContext.storeName || null,\n });\n await dispatch(\n storeActions.syncStore({\n deliveryMode,\n pickupPointId: updatedStoreContext.pickupPointId,\n postalCode: updatedStoreContext.zipCode,\n productionUnitId: updatedStoreContext.productionUnitId,\n storeName: updatedStoreContext.storeName,\n }),\n );\n appInsights.trackEvent(\n { name: 'ensureStoreContextInSync' },\n {\n deliveryMode,\n pickupPointId: updatedStoreContext.pickupPointId,\n postalCode: updatedStoreContext.zipCode,\n productionUnitId: updatedStoreContext.productionUnitId,\n storeName: updatedStoreContext.storeName,\n },\n );\n }\n };\n};\n\nconst createCart = (): AppAsyncThunk<HybrisCart> => {\n return async (dispatch, getState) => {\n // try resync store context\n const state = getState();\n const deliverMode = storeSelectors.selectedDeliveryMode(state);\n const postalCode = storeSelectors.currentPostalCode(state);\n const pickupPointId = storeSelectors.currentPickupPointId(state);\n\n const cart = await currentCartFlow.createCartAsync(deliverMode, postalCode, pickupPointId);\n await dispatch(ensureStoreContextInSync(cart));\n return cart;\n };\n};\n\nconst updateQuantity = (\n productId: string,\n variantId: string | undefined,\n quantity: number,\n silent: boolean = false,\n): AppAsyncThunk => {\n return async (dispatch, getState) => {\n if (!silent) {\n dispatch(initLoading());\n }\n try {\n // appSelectors can only be used in thunks, not inside \"normal\"\n await cartQueue.run(async () => {\n const previousCartItemState = cartItemsSelectors.selectById(getState(), {\n productId,\n variantId,\n });\n\n const cartId = await currentCartFlow.getCurrentCartId();\n if (!cartId) {\n throw new Error('No cart id in updateQuantity');\n }\n dispatch(\n cartActions.updateCartItem({\n productId,\n variantId,\n quantity,\n }),\n );\n\n try {\n let response;\n try {\n response = await currentCartFlow.updateItemQuantity(\n cartId,\n productId,\n variantId,\n quantity,\n );\n\n return response;\n } catch (cartErr) {\n if (!isCartException(cartErr)) {\n throw cartErr;\n }\n\n if (cartErr?.code !== 'notFound') {\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw cartErr;\n }\n const cart = await dispatch(createCart());\n\n response = await currentCartFlow.updateItemQuantity(\n cart.guid!,\n productId,\n variantId,\n quantity,\n );\n }\n\n return response;\n } catch (err) {\n dispatch(\n cartActions.restoreItem({\n productId,\n variantId,\n cartItem: previousCartItemState,\n }),\n );\n return Promise.reject(err);\n }\n });\n\n if (!silent) {\n await dispatch(getCartSilent());\n dispatch(finishLoading());\n }\n } catch (err) {\n if (isLocalApiBaseException(err)) {\n dispatch(errorsActions.addSingle({ group: ErrorGroup.Cart, error: err }));\n }\n dispatch(finishLoading());\n return Promise.reject(err);\n }\n };\n};\n\nconst substituteProduct = (\n id: string,\n newProductId: string,\n prevProductId: string,\n storeId: string,\n prevVariantId?: string,\n): AppAsyncThunk => {\n return async (dispatch) => {\n try {\n const newCartItem = await cartQueue.run(() =>\n currentCartFlow.substituteProduct(id, newProductId, storeId),\n );\n if (newCartItem) {\n dispatch(\n cartActions.substituteProduct({\n newCartItem,\n prevItemId: id,\n prevProductId,\n prevVariantId,\n }),\n );\n await dispatch(getCart());\n }\n } catch (err) {\n if (isLocalApiBaseException(err)) {\n dispatch(errorsActions.addSingle({ group: ErrorGroup.Cart, error: err }));\n }\n return Promise.reject(err);\n }\n };\n};\n\nconst applyVoucher = (id: string): AppAsyncThunk<undefined> => {\n return async (dispatch) => {\n try {\n await cartQueue.run(() => currentCartFlow.applyVoucher(id));\n await dispatch(getCartSilent());\n return await Promise.resolve(undefined);\n } catch (err) {\n if (isLocalApiBaseException(err)) {\n if (!err.friendlyMessage) {\n err.friendlyMessage = 'Felaktig Kampanjkod.';\n }\n return Promise.reject(err);\n }\n return Promise.reject(err);\n }\n };\n};\n\nconst removeVoucher = (id: string): AppAsyncThunk => {\n return async (dispatch) => {\n try {\n await cartQueue.run(() => currentCartFlow.removeVoucher(id));\n await dispatch(getCartSilent());\n } catch (err) {\n if (isLocalApiBaseException(err)) {\n dispatch(errorsActions.addSingle({ group: ErrorGroup.Cart, error: err }));\n }\n }\n };\n};\n\nconst changeReplaceability = (\n productId: string,\n variantId: string | undefined,\n quantity: number, // needs to be there since we have one endpoint that does not like empty quantity\n replaceable: boolean,\n): AppAsyncThunk<HybrisCartModification> => {\n return async (dispatch) => {\n try {\n dispatch(\n cartActions.changeCartItemReplaceability({\n productId,\n variantId,\n replaceable,\n }),\n );\n return await cartQueue.run(() =>\n currentCartFlow.changeReplaceability(productId, variantId, quantity, replaceable),\n );\n } catch (err) {\n dispatch(\n cartActions.changeCartItemReplaceability({\n productId,\n variantId,\n replaceable: !replaceable,\n }),\n );\n if (isLocalApiBaseException(err)) {\n dispatch(errorsActions.addSingle({ group: ErrorGroup.Cart, error: err }));\n }\n return Promise.reject(err);\n }\n };\n};\n\nconst setItemsReplaceability = (replaceable: boolean): AppAsyncThunk => {\n return async (dispatch) => {\n // we block with loader cause backend response with full cart, which can take a couple of seconds...\n dispatch(initLoading());\n try {\n await cartQueue.run(() => currentCartFlow.setItemsReplaceability(replaceable));\n dispatch(cartActions.setAllCartItemsReplaceability(replaceable));\n dispatch(finishLoading());\n } catch (err) {\n if (isLocalApiBaseException(err)) {\n dispatch(errorsActions.addSingle({ group: ErrorGroup.Cart, error: err }));\n }\n dispatch(finishLoading());\n }\n };\n};\n\nconst restoreSavedCart =\n (savedCartId: string): AppAsyncThunk<HybrisCart> =>\n async (dispatch) => {\n const response = await currentCartFlow.restoreSavedCart(savedCartId);\n await dispatch(getCartSilent());\n return response;\n };\n\nconst addToCartFromOrder =\n (orderId: string): AppAsyncThunk<HybrisCart> =>\n async (dispatch) => {\n const response = await currentCartFlow.addToCartFromOrder(orderId);\n await dispatch(getCartSilent());\n return response;\n };\n\nexport const cartThunks = {\n getCartSilent,\n getCart,\n emptyCart,\n removeRecipe,\n buyMultipleRecipes,\n addItems,\n changeRecipePortions,\n getCurrentTimeslot,\n selectTimeslot,\n selectTimeslotWithStore,\n changeVariant,\n updateQuantity,\n substituteProduct,\n applyVoucher,\n removeVoucher,\n changeReplaceability,\n setItemsReplaceability,\n restoreSavedCart,\n addToCartFromOrder,\n};\n","import type { EntityState } from '@reduxjs/toolkit';\n\nimport type {\n ApiCart,\n ApiCartRecipe,\n ApiFullCartItem,\n} from '../../../microApps/common/api/cart/responses/cartResponses';\nimport { productsAdapter } from '../../../microApps/common/store/adapters/productsAdapter';\nimport { recipesAdapter } from '../../../microApps/common/store/adapters/recipesAdapter';\nimport { getInitialState as getTimeslotInitialState } from '../../../microApps/common/store/slices/cart/cartTimeslotSlice';\nimport type {\n CartItemState,\n CartRecipe,\n CartSection,\n RootState,\n} from '../../../microApps/common/store/structureDefinitions/cartState';\nimport { getTopProductSection } from '../../../microApps/common/utils/productUtils';\nimport type { RecipeSectionType } from '../../../microApps/recipe/models';\nimport { DefaultProductSection } from '../../../models/ecommerce/product/productSectionModel';\nimport { Helpers } from '../../../utility/helpers';\n\ntype CartState = Expand<RootState['cart']>;\n\nconst getInitialImmutableState = (cart: ApiCart) => {\n const newCartState: CartState = {\n summary: { ...cart.cartData },\n promos: cart.promos.map((cartPromo) => ({ ...cartPromo })),\n items: cart.items.map((cartItem) => ({ ...cartItem })),\n itemsProductData: productsAdapter.getInitialState(),\n editedOrderItems: cart.editedOrderItems.map((cartItem) => ({ ...cartItem })),\n previousOrderItemIds: cart.previousOrderItemIds.map((cartItemId) => ({\n productId: cartItemId.productId,\n variantId: cartItemId.variantId,\n })),\n recipes: recipesAdapter.getInitialState(),\n sections: [],\n cartLoading: {\n isLoading: false,\n isInitialized: true,\n isProductDataAvailable: true, // because the product data was resolved before, this will change after cartfacade is gone\n },\n editOrder: {\n isInEditOrderMode: cart.cartData.isInEditOrderMode,\n editOrderNumber: cart.cartData.editOrderNumber,\n editOrderTimeout: cart.cartData.editOrderTimeout,\n editOrderSummary: cart.cartData.editOrderSummary,\n editOrderPayment: cart.cartData.editOrderPayment,\n },\n timeslot:\n (cart.cartData &&\n cart.cartData.timeslot &&\n cart.cartData.timeslot.id && {\n timeslot: {\n maxOrderTime: new Date(cart.cartData.timeslot.maxOrderTime).valueOf(),\n startTime: new Date(cart.cartData.timeslot.startTime).valueOf(),\n endTime: new Date(cart.cartData.timeslot.endTime).valueOf(),\n timeSlotDay: cart.cartData.timeslot.timeSlotDay,\n timeSlotTime: cart.cartData.timeslot.timeSlotTime,\n cost: cart.cartData.timeslot.cost,\n id: cart.cartData.timeslot.id,\n fullyBooked: cart.cartData.timeslot.fullyBooked,\n shippingType: '',\n storeId: cart.cartData.timeslot.storeId,\n timeslotType: cart.cartData.timeslot.timeslotType,\n expirationTime: cart.cartData.timeslot.expirationTime,\n milisecondsToExpire: cart.cartData.timeslot.milisecondsToExpire,\n ecoFriendly: cart.cartData.timeslot.ecoFriendly,\n expectETANotification: cart.cartData.timeslot.expectETANotification,\n },\n isSelected: true,\n isInitialized: true,\n }) ||\n getTimeslotInitialState(),\n };\n\n return newCartState;\n};\n\nexport const SHARED_RECIPE_CODE = 'shared';\nexport const GOODTOHAVE_RECIPE_CODE = 'goodToHave';\n\nconst getSectionType = (recipe: ApiCartRecipe): RecipeSectionType => {\n if (recipe.code === SHARED_RECIPE_CODE) {\n return 'shared';\n }\n\n if (recipe.code === GOODTOHAVE_RECIPE_CODE) {\n return 'common';\n }\n\n return 'recipe';\n};\n\nconst normalizeRecipeData = (cart: ApiCart): EntityState<CartRecipe> => {\n let entityState = recipesAdapter.getInitialState();\n\n const recipes = cart?.recipes?.map<CartRecipe>((cartRecipe) => ({\n code: cartRecipe.code,\n type: getSectionType(cartRecipe),\n group: cartRecipe.group ?? 'recipe',\n name: cartRecipe.name,\n portions: cartRecipe.portions,\n productsMap: cartRecipe.productsMap,\n sharedProductsMap: cartRecipe.sharedProductsMap,\n imageUrl: cartRecipe.imageUrl,\n }));\n\n entityState = recipesAdapter.setAll(entityState, recipes);\n return entityState;\n};\n\nconst normalizeRecipeCartItemMetadata = (newCartStateItems: ApiFullCartItem[]): CartItemState[] => {\n const result = newCartStateItems.map((item: ApiFullCartItem): CartItemState => {\n if (!item.recipeData) return item;\n\n const { recipeData, ...relevantFields } = item;\n return {\n ...relevantFields,\n recipeMetaData: {\n code: recipeData.code,\n substituteIdentifier: recipeData.substituteIdentifier,\n substituteProductsAmount: recipeData.substituteProductsAmount,\n recipeQuantity: recipeData.recipeQuantity,\n includedInRecipes: recipeData.includedInRecipes,\n },\n };\n });\n return result;\n};\n\nconst normalizeSectionData = (\n cartItems: ApiFullCartItem[],\n products: ApiProduct[],\n): CartSection[] => {\n const cartSectionsDictionary: Record<number, CartSection> = {};\n const cartSections: CartSection[] = [];\n const otherSection: CartSection = {\n sectionId: DefaultProductSection.ID,\n name: DefaultProductSection.NAME,\n productIds: [],\n };\n\n try {\n cartItems.forEach((item) => {\n const connectedProduct = products.find(\n (product) => item.productId === product.identifier,\n );\n\n // item does not have connected product, add to other section\n if (!connectedProduct && otherSection.productIds) {\n otherSection.productIds.push(item.productId.toString());\n return;\n }\n\n // item does not have any sections, add to other section\n if (connectedProduct) {\n const productSection = getTopProductSection(connectedProduct);\n if (productSection.id === DefaultProductSection.ID && otherSection.productIds) {\n otherSection.productIds.push(item.productId.toString());\n return;\n }\n\n // eslint-disable-next-line no-prototype-builtins\n if (cartSectionsDictionary.hasOwnProperty(productSection.id)) {\n cartSectionsDictionary[productSection.id].productIds?.push(\n item.productId.toString(),\n );\n } else {\n cartSectionsDictionary[productSection.id] = {\n sectionId: productSection.id,\n name: productSection.name,\n productIds: [item.productId.toString()],\n };\n }\n }\n });\n\n Object.values(cartSectionsDictionary).forEach((section) => {\n cartSections.push(section);\n });\n\n const sortedSections = cartSections.sort((a, b) =>\n Helpers.alphabeticSortAscPredicate(a.name, b.name),\n );\n\n if (otherSection.productIds && otherSection.productIds.length > 0) {\n sortedSections.push(otherSection);\n }\n\n return sortedSections;\n } catch {\n // if anything fails dont care about sections, pack everything into Other section;\n return [\n {\n sectionId: DefaultProductSection.ID,\n name: DefaultProductSection.NAME,\n productIds: cartItems.map((items) => items.productId.toString()),\n },\n ];\n }\n};\n\nexport const normalizeCartToReduxState = (cart: ApiCart, products: ApiProduct[]) => {\n const newCartState: CartState = getInitialImmutableState(cart);\n\n const recipes = normalizeRecipeData(cart);\n const sections = normalizeSectionData(newCartState.items, products);\n const items = normalizeRecipeCartItemMetadata(newCartState.items);\n\n const normalizedState: CartState = {\n summary: {\n ...newCartState.summary,\n quantity: items.reduce((acc, curr) => acc + curr.quantity, 0),\n },\n items,\n itemsProductData: productsAdapter.setAll(newCartState.itemsProductData, products),\n previousOrderItemIds: newCartState.previousOrderItemIds,\n editedOrderItems: newCartState.editedOrderItems,\n recipes,\n sections,\n promos: newCartState.promos,\n editOrder: newCartState.editOrder,\n cartLoading: newCartState.cartLoading,\n timeslot: newCartState.timeslot,\n };\n\n return normalizedState;\n};\n","import type { IApiStore } from '../../../models/ecommerce/store/storeModel';\nimport type { ApiSwitchStoreResult } from '../api/cart/responses/cartResponses';\nimport { storeApi } from '../api/store/storeApi';\nimport { currentCartFlow } from '../flow/cart/currentCartFlow';\nimport type { StoreUpdateSimulationResult } from '../models/store/StoreUpdateSimulationResult';\nimport type { AppAsyncThunk, AppThunk } from '../store';\nimport { storeActions } from '../store/slices/store/storeSlice';\nimport type { StoreState } from '../store/structureDefinitions/storeState';\nimport { DeliveryMode } from '../store/structureDefinitions/storeState';\n\nexport const storeThunks = {\n syncStoreContext: (state: StoreState): AppThunk => {\n return (dispatch) => {\n dispatch(storeActions.syncStore(state));\n };\n },\n syncStoreWithCookie: (): AppThunk => {\n return (dispatch) => {\n dispatch(storeActions.syncStoreWithCookie());\n };\n },\n\n updatePickupStore: (storeId: string): AppAsyncThunk<IApiStore> => {\n return async (dispatch) => {\n const store = await storeApi.updatePickupStore(storeId);\n dispatch(storeActions.syncStoreWithCookie());\n return store;\n };\n },\n\n updatePickupStoreUnconfirmed: (storeId: string): AppAsyncThunk<StoreUpdateSimulationResult> => {\n return async (dispatch) => {\n const simulateResult = await storeApi.updatePickupStoreUnconfirmed(storeId);\n const mapped = mapSimulationResult(simulateResult);\n dispatch(storeActions.syncStoreWithCookie());\n return mapped;\n };\n },\n\n updateHomeDeliveryStore: (\n zipCode: string,\n baseStoreId: string | null = null,\n ): AppAsyncThunk<IApiStore> => {\n return async (dispatch) => {\n const store = await storeApi.updateHomeDeliveryStore(zipCode, baseStoreId);\n dispatch(storeActions.syncStoreWithCookie());\n return store;\n };\n },\n\n updateHomeDeliveryStoreUnconfirmed: (\n zipCode: string,\n baseStoreId: string | null = null,\n ): AppAsyncThunk<StoreUpdateSimulationResult> => {\n return async (dispatch) => {\n const simulateResult = await storeApi.updateHomeDeliveryStoreUnconfirmed(\n zipCode,\n baseStoreId,\n );\n const mapped = mapSimulationResult(simulateResult);\n dispatch(storeActions.syncStoreWithCookie());\n return mapped;\n };\n },\n\n confirmMissingItemsReplacement: (\n deliveryType: DeliveryMode,\n productsToBulkAdd: {\n productId: string;\n variantId?: string;\n quantity: number;\n itemReplaceable?: boolean;\n }[],\n storeId: string,\n postalCode?: string,\n ): AppAsyncThunk<'success'> => {\n return async (dispatch) => {\n if (deliveryType === DeliveryMode.pickup) {\n await dispatch(storeThunks.updatePickupStore(storeId));\n }\n\n if (deliveryType === DeliveryMode.homedelivery && postalCode) {\n await dispatch(storeThunks.updateHomeDeliveryStore(postalCode, storeId));\n }\n if (productsToBulkAdd?.length) {\n const cartId = await currentCartFlow.getCurrentCartId();\n if (!cartId) {\n throw new Error('No active cart!');\n }\n await currentCartFlow.addItemsBulk(cartId, productsToBulkAdd);\n }\n\n return 'success';\n };\n },\n};\n\nconst mapSimulationResult = (result: ApiSwitchStoreResult): StoreUpdateSimulationResult => {\n // update simulation success, store HAS BEEN CHANGED ALREADY!!! The items in cart were not changed\n if (result && result.success && !result.simulated) {\n return {\n fail: false,\n success: true,\n forStoreId: result.forStoreId,\n };\n }\n\n // update simulation failed, store has not been changed and there will be changes to cart items if you change to this postcode\n if (result && result.simulated) {\n return {\n fail: true,\n success: false,\n removedCartItems: result.removedCartItems,\n forStoreId: result.forStoreId,\n };\n }\n\n return {\n fail: false,\n success: false,\n forStoreId: undefined,\n };\n};\n"],"names":["savedCartsApi","restoreSavedCart","token","userId","cartId","savedCartId","post","data","getSavedCarts","page","pageSize","get","encodeURIComponent","deleteSavedCart","patch","saveCart","cartName","params","saveCartName","bulkUpdate","items","searchPickupStores","searchterm","hits","abortSignal","cancelToken","storeApi","fetchStoreByPostalCode","zipCode","fetchPickupStores","fetchStoreById","storeId","updatePickupStore","put","uid","updateHomeDeliveryStore","postalCode","baseStoreId","updatePickupStoreUnconfirmed","updateHomeDeliveryStoreUnconfirmed","mapToProperApiApiHybrisTimeslot","timeslot","id","endTime","Date","valueOf","startTime","maxOrderTime","timeslotsApi","fetchForCurrentCart","days","response","toFixed","map","fetchByPostalCode","select","timeslotId","current","HybrisResponseFieldsType","orderId","item","queryString","URLSearchParams","set","quantity","toString","productId","variantId","undefined","itemReplaceable","statusCode","errorMessage","appConfig","coopSettings","ecommerce","general","coopUserSettings","punchout","isPunchout","productRestrictedForBusinessUnit","productRestrictedForPrivateUser","productNotFound","code","friendlyMessage","type","CartModifications","shoppingUserId","Full","postCode","confirmed","pickupPointId","deliveryModeId","CART_COOKIE_NAME","getCurrentCartId","isAuthenticated","read","currentCartFlow","getCart","cartApi","fetchCart","getCartSimple","fetchCartSimple","createCartAsync","deliveryMode","currentZipCode","currentPickupPointId","getAuthToken","cart","guid","create","homedelivery","store","pickup","pointOfService","Default","pickupDeliveryModes","length","Error","emptyCart","removeRecipe","recipeId","recipes","buyMultipleRecipes","request","addItemsBulk","productCode","varianceCode","replaceable","changeRecipePortions","portions","getCurrentTimeslot","selectTimeslot","changeItemVariant","cartItemId","newVariantId","changeCartItemVariant","updateItemQuantity","getItemSubstitutes","rowNumber","incompleteProductIds","getProductSubstitutes","product","productFlow","getProductsByIds","substituteProduct","newProductId","subsituteResponse","fullProduct","getProductById","productIdentifier","result","cartItem","entryNumber","name","manufacturer","image","url","priceData","productUrl","variantName","variants","variantProduct","find","variant","getVariantName","details","packageSizeInformation","size","unit","toLowerCase","mapProductToApiFullCartItem","applyVoucher","voucher","add","removeVoucher","remove","changeReplaceability","setItemsReplaceability","replaceAll","addToCartFromOrder","validateAssortment","cartQueue","SyncronQueue","timeslotQueue","getCartSilent","dispatch","getState","run","currentStoreId","storeSelectors","currentProductionUnit","cartState","cartProducts","products","newCartState","summary","cartData","promos","cartPromo","itemsProductData","productsAdapter","getInitialState","editedOrderItems","previousOrderItemIds","recipesAdapter","sections","cartLoading","isLoading","isInitialized","isProductDataAvailable","editOrder","isInEditOrderMode","editOrderNumber","editOrderTimeout","editOrderSummary","editOrderPayment","timeSlotDay","timeSlotTime","cost","fullyBooked","shippingType","timeslotType","expirationTime","milisecondsToExpire","ecoFriendly","expectETANotification","isSelected","getInitialImmutableState","entityState","cartRecipe","recipe","group","productsMap","sharedProductsMap","imageUrl","setAll","normalizeRecipeData","cartItems","cartSectionsDictionary","cartSections","otherSection","sectionId","ID","NAME","productIds","forEach","connectedProduct","identifier","productSection","push","hasOwnProperty","Object","values","section","sortedSections","sort","a","b","alphabeticSortAscPredicate","normalizeSectionData","recipeData","relevantFields","recipeMetaData","substituteIdentifier","substituteProductsAmount","recipeQuantity","includedInRecipes","reduce","acc","curr","normalizeCartToReduxState","buildCartState","s","storeThunks","syncStoreWithCookie","uniqueName","err","addSingle","Cart","error","Promise","reject","cartThunks","addItems","acceptRunningPromise","dontPushBack","currentTimeslot","selectTimeslotWithStore","changeVariant","updateQuantity","silent","previousCartItemState","cartItemsSelectors","selectById","updateCartItem","cartErr","state","deliverMode","selectedDeliveryMode","currentPostalCode","currentProductionUnitId","updatedStoreContext","coopStore","replace","productionUnitId","storeName","displayName","cookieSettings","persistance","storeContext","getDefaultStoreContext","syncStore","appInsights","trackEvent","ensureStoreContextInSync","restoreItem","prevProductId","prevVariantId","newCartItem","prevItemId","resolve","changeCartItemReplaceability","setAllCartItemsReplaceability","syncStoreContext","simulateResult","mapped","mapSimulationResult","confirmMissingItemsReplacement","deliveryType","productsToBulkAdd","success","simulated","fail","forStoreId","removedCartItems"],"sourceRoot":""}