{"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":""}