{"version":3,"file":"coopse.script.7907.fc4eb76a.chunk.js","mappings":"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","sources":["webpack:///../../packages/icons/src/stroke2/eco-leaf.svg","webpack:///../../packages/icons/src/stroke2/heart-filled.svg","webpack:///../../packages/icons/src/stroke2/star-filled.svg","webpack:///../../packages/icons/src/stroke2/star.svg","webpack:///./src/microApps/common/components/BaseRecipeTeaser/BaseRecipeTeaser.module.less","webpack:///./src/microApps/common/components/BaseRecipeTeaser/BaseRecipeTeaser.tsx","webpack:///./src/microApps/common/components/BaseRecipeTeaser/BaseRecipeTeaserSkeleton.tsx","webpack:///./src/microApps/common/components/RecipeTypeComponentPicker/RecipeTypeComponentPicker.tsx","webpack:///./src/microApps/common/components/molecules/FavoriteRecipeToggle.tsx","webpack:///./src/microApps/common/components/molecules/RatingStars/RatingStars.tsx","webpack:///./src/microApps/common/components/molecules/RatingStars/RatingStars.module.less","webpack:///./src/microApps/common/persistance/cookie/favouriteRecipesAnonymous.ts","webpack:///./src/microApps/common/hooks/useFavouriteRecipes.ts","webpack:///./src/microApps/common/tracking/ga4/recipes/ga4RecipesEvents.ts","webpack:///./src/microApps/recipe/recipeQueries.ts"],"sourcesContent":["var _path, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgEcoLeaf = _ref => {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: \"1em\",\n    height: \"1em\",\n    viewBox: \"0 0 24 24\",\n    xmlns: \"http://www.w3.org/2000/svg\",\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M14.2692 1.08205C14.5548 1.20547 14.7666 1.45479 14.8424 1.75656L15.4684 4.25076C15.8342 5.63528 16.549 6.5075 17.4 7.54575C17.5636 7.74543 17.7323 7.95125 17.9045 8.16804C18.9782 9.51971 19.9885 11.118 19.9885 13.856C19.9885 15.9399 19.209 17.7608 17.7315 19.0484C16.2672 20.3245 14.2077 21 11.7661 21C8.80306 21 6.50337 19.6423 5.20213 17.5526C3.91451 15.4848 3.65857 12.7918 4.55383 10.1762C5.45892 7.53182 7.7419 5.25799 9.66346 3.69933C10.6427 2.90499 11.5675 2.26533 12.2476 1.82402C12.5882 1.603 12.8688 1.43081 13.0659 1.31292C13.1646 1.25396 13.2424 1.20852 13.2965 1.17728C13.3236 1.16166 13.3448 1.14959 13.3597 1.14115L13.3772 1.13122L13.3824 1.12832L13.3841 1.12739C13.3841 1.12739 13.3851 1.1268 13.8725 2L13.3851 1.1268C13.6568 0.975169 13.9836 0.958627 14.2692 1.08205ZM13.235 3.56781C12.6093 3.97769 11.7873 4.5518 10.9234 5.25259C9.06347 6.76124 7.16019 8.73741 6.44606 10.8238C5.7221 12.939 5.96617 14.996 6.89988 16.4954C7.81998 17.9731 9.46297 19 11.7661 19C13.8504 19 15.4021 18.4255 16.4175 17.5406C17.4198 16.6672 17.9885 15.4161 17.9885 13.856C17.9885 11.7379 17.2575 10.569 16.3385 9.41203C16.2006 9.23849 16.0542 9.06131 15.9028 8.87824C15.0398 7.83419 14.0184 6.59854 13.5329 4.7546L13.53 4.74346L13.235 3.56781Z\"\n  })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M12 7C12.5522 7 13 7.44772 13 8V22C13 22.5523 12.5522 23 12 23C11.4477 23 11 22.5523 11 22V8C11 7.44772 11.4477 7 12 7Z\"\n  })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M8.64246 10.4855C8.92661 10.0119 9.54087 9.85836 10.0144 10.1425L12 11.3338L13.9855 10.1425C14.459 9.85836 15.0733 10.0119 15.3574 10.4855C15.6416 10.9591 15.488 11.5733 15.0144 11.8575L12.5144 13.3575C12.1978 13.5475 11.8021 13.5475 11.4855 13.3575L8.98546 11.8575C8.51187 11.5733 8.35831 10.9591 8.64246 10.4855Z\"\n  })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M8.1679 14.4453C8.47425 13.9858 9.09512 13.8616 9.55465 14.168L12 15.7982L14.4453 14.168C14.9048 13.8616 15.5256 13.9858 15.832 14.4453C16.1384 14.9048 16.0142 15.5257 15.5547 15.8321L12.5547 17.8321C12.2188 18.056 11.7812 18.056 11.4453 17.8321L8.44525 15.8321C7.98572 15.5257 7.86155 14.9048 8.1679 14.4453Z\"\n  })));\n};\nexport default SvgEcoLeaf;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgHeartFilled = _ref => {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: \"1em\",\n    height: \"1em\",\n    viewBox: \"0 0 24 24\",\n    xmlns: \"http://www.w3.org/2000/svg\",\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M12 22C11.8 22 11.7 22 11.5 21.9C11.4 21.8 8 19.8 5.5 17.6C2.5 14.8 1 12 1 9.2C1 5.8 3.8 3 7.3 3C9.1 3 10.8 3.8 12 5.1C13.2 3.8 14.9 3 16.7 3C20.2 3 23 5.8 23 9.2C23 12.2 21.6 14.8 18.5 17.6C16 19.8 12.7 21.8 12.5 21.9C12.4 22 12.2 22 12 22Z\"\n  })));\n};\nexport default SvgHeartFilled;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgStarFilled = _ref => {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: \"1em\",\n    height: \"1em\",\n    viewBox: \"0 0 24 24\",\n    xmlns: \"http://www.w3.org/2000/svg\",\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M10.626 1.95227C10.8414 1.37937 11.3894 1 12.0015 1C12.6135 1 13.1615 1.37937 13.377 1.95227L13.384 1.97165L15.5255 8.0432H21.5304C22.1456 8.04319 22.6959 8.42646 22.909 9.00363C23.1222 9.58083 22.9532 10.2297 22.4856 10.6296L22.4739 10.6394L17.3913 14.8532L19.523 21.2567C19.7247 21.8636 19.5108 22.5318 18.9939 22.9084C18.477 23.285 17.7759 23.2841 17.26 22.9061L12.0004 19.047L6.73032 22.9118C6.21424 23.2823 5.51852 23.2791 5.00577 22.9041C4.49302 22.5291 4.2793 21.867 4.476 21.263L4.47803 21.2567L6.6097 14.8533L1.52627 10.6395L1.51453 10.6296C1.0469 10.2297 0.877912 9.58082 1.09108 9.00363C1.30424 8.42646 1.85439 8.04319 2.46965 8.0432H8.47575L10.619 1.97141L10.626 1.95227Z\"\n  })));\n};\nexport default SvgStarFilled;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgStar = _ref => {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: \"1em\",\n    height: \"1em\",\n    viewBox: \"0 0 24 24\",\n    xmlns: \"http://www.w3.org/2000/svg\",\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M10.626 1.95227C10.8414 1.37937 11.3894 1 12.0015 1C12.6135 1 13.1615 1.37937 13.377 1.95227L13.384 1.97165L15.5255 8.0432H21.5304C22.1456 8.04319 22.6959 8.42646 22.909 9.00363C23.1222 9.58083 22.9532 10.2297 22.4856 10.6296L22.4739 10.6394L17.3913 14.8532L19.523 21.2567C19.7247 21.8636 19.5108 22.5318 18.9939 22.9084C18.477 23.285 17.7759 23.2841 17.26 22.9061L12.0004 19.047L6.73032 22.9118C6.21424 23.2823 5.51852 23.2791 5.00577 22.9041C4.49302 22.5291 4.2793 21.867 4.476 21.263L4.47803 21.2567L6.6097 14.8533L1.52627 10.6395L1.51453 10.6296C1.0469 10.2297 0.877912 9.58082 1.09108 9.00363C1.30424 8.42646 1.85439 8.04319 2.46965 8.0432H8.47575L10.619 1.97141L10.626 1.95227ZM12.0013 4.06405L13.8747 9.37582C14.0158 9.77574 14.3937 10.0432 14.8178 10.0432H20.0595L15.5882 13.7502C15.2707 14.0134 15.1474 14.4445 15.2776 14.8358L17.099 20.3074L12.5921 17.0006C12.2401 16.7423 11.7612 16.7422 11.4091 17.0004L6.9027 20.3053L8.7234 14.8358C8.85368 14.4445 8.73032 14.0133 8.41277 13.7501L3.94083 10.0432H9.18324C9.60721 10.0432 9.98509 9.77585 10.1262 9.37606L12.0013 4.06405Z\"\n  })));\n};\nexport default SvgStar;","// extracted by mini-css-extract-plugin\nexport default {\"Teaser\":\"xSMweNr2\",\"Border\":\"lx6XEPmM\",\"Bottom\":\"unOMiasZ\",\"Badges\":\"n2tfW9KQ\",\"TopActions\":\"nnQkxsSH\",\"Content\":\"pq8hNoSw\",\"Info\":\"Wri4AMzT\",\"RatingContainer\":\"dgMzl1Az\",\"Actions\":\"WXN8ISWz\",\"Heading\":\"_lXDvo6T\",\"Link\":\"uf3WecLV\",\"Image\":\"x2oY2fBp\",\"SkeletonText\":\"VWZhLE0R\",\"SkeletonButton\":\"v9ylroyI\"};","import { AccessibleIcon } from '@coop/components';\nimport { EcoLeafIcon } from '@coop/icons';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport CloudinaryImage from '../atoms/CloudinaryImage';\nimport styles from './BaseRecipeTeaser.module.less';\n\nconst RecipeRatingContainer = (props: React.PropsWithChildren<{}>) => {\n    return <div className={styles.RatingContainer}>{props.children}</div>;\n};\n\nconst RecipeClimateImpact = (props: { co2ImpactKg: number | null }) => {\n    return (\n        !!props.co2ImpactKg &&\n        props.co2ImpactKg < 2.5 && (\n            <AccessibleIcon\n                icon={EcoLeafIcon}\n                width={24}\n                height={24}\n                color=\"dsGreen\"\n                label={`${Intl.NumberFormat('sv').format(props.co2ImpactKg)} kg co2 ekv / portion`}\n            />\n        )\n    );\n};\n\nconst RecipeBadges = (props: React.PropsWithChildren<React.ComponentProps<'div'>>) => {\n    return <div className={classnames(styles.Badges, props.className)}>{props.children}</div>;\n};\n\ninterface RecipeWrapperProps {\n    name: string;\n    imageUrl: string;\n    topSlot?: React.ReactNode;\n    className?: string;\n    withBorder?: boolean;\n}\n\nconst RecipeWrapper = (\n    props: React.PropsWithChildren<RecipeWrapperProps>,\n    ref: React.Ref<HTMLDivElement>,\n) => {\n    return (\n        <div\n            ref={ref}\n            className={classnames(\n                styles.Teaser,\n                props.withBorder && styles.Border,\n                props.className,\n            )}\n        >\n            <div className={styles.TopActions}>{props.topSlot}</div>\n            <CloudinaryImage\n                cssClass={styles.Image}\n                name=\"\"\n                url={props.imageUrl}\n                transform=\"ar_1.0,f_auto,c_fill,w_300,g_center\"\n                retinaTransform=\"ar_1.0,f_auto,c_fill,w_600,g_center\"\n                lazy\n                fallbackUrl=\"/Assets/Images/missing-image-product.png\"\n            />\n            <div className={styles.Bottom}>{props.children}</div>\n        </div>\n    );\n};\n\nconst RecipeContent = (props: { children: React.ReactNode }) => {\n    return <div className={styles.Content}>{props.children}</div>;\n};\n\nconst RecipeInfo = (props: { children: React.ReactNode }) => {\n    return <div className={styles.Info}>{props.children}</div>;\n};\n\nconst RecipeHeading = (props: {\n    url?: string;\n    children: React.ReactNode;\n    flexOrder?: number;\n    onLinkClick?: (e: React.SyntheticEvent) => void;\n}) => {\n    return props.url ? (\n        <a\n            className={classnames(styles.Heading, styles.Link)}\n            style={{ order: props.flexOrder }}\n            href={props.url}\n            onClick={props.onLinkClick}\n            tabIndex={-1}\n        >\n            {props.children}\n        </a>\n    ) : (\n        <p className={styles.Heading} style={{ order: props.flexOrder }}>\n            {props.children}\n        </p>\n    );\n};\n\nconst RecipeActions = (props: { children: React.ReactNode }) => {\n    return <div className={styles.Actions}>{props.children}</div>;\n};\n\nconst BaseRecipeTeaser = {\n    Wrapper: React.forwardRef(RecipeWrapper),\n    Badges: RecipeBadges,\n    RatingContainer: RecipeRatingContainer,\n    ClimateImpact: RecipeClimateImpact,\n    Content: RecipeContent,\n    Heading: RecipeHeading,\n    Actions: RecipeActions,\n    Info: RecipeInfo,\n};\n\nexport default BaseRecipeTeaser;\n","import BaseRecipeTeaser from './BaseRecipeTeaser';\nimport styles from './BaseRecipeTeaser.module.less';\n\nconst BaseRecipeTeaserSkeleton = () => {\n    return (\n        <BaseRecipeTeaser.Wrapper\n            name=\"loading\"\n            imageUrl=\"/Assets/Images/missing-image-product.png\"\n        >\n            <BaseRecipeTeaser.Content>\n                <BaseRecipeTeaser.Info>\n                    <div className={styles.SkeletonText} style={{ width: '70%' }} />\n                    <div className={styles.SkeletonText} />\n                    <div className={styles.SkeletonText} />\n                </BaseRecipeTeaser.Info>\n                <BaseRecipeTeaser.Actions>\n                    <div className={styles.SkeletonButton} />\n                </BaseRecipeTeaser.Actions>\n            </BaseRecipeTeaser.Content>\n        </BaseRecipeTeaser.Wrapper>\n    );\n};\n\nexport default BaseRecipeTeaserSkeleton;\n","interface RecipeTypeComponentPickerProps {\n    isFoodbox: boolean;\n    recipeSlot: React.ReactNode;\n    foodboxSlot: React.ReactNode;\n}\n\nconst RecipeTypeComponentPicker = (props: RecipeTypeComponentPickerProps) => {\n    return props.isFoodbox ? props.foodboxSlot : props.recipeSlot;\n};\n\nexport default RecipeTypeComponentPicker;\n","import { ChipIconButton } from '@coop/components';\nimport { HeartFilledIcon, HeartIcon } from '@coop/icons';\nimport type { FC } from 'react';\n\nexport interface FavoriteRecipeToggleProps {\n    isFavorite: boolean;\n    onClick: (e: React.MouseEvent<HTMLElement>) => void;\n    disabled: boolean;\n}\n\nconst FavoriteRecipeToggle: FC<React.PropsWithChildren<FavoriteRecipeToggleProps>> = ({\n    isFavorite,\n    onClick,\n    disabled,\n}) => {\n    return (\n        <ChipIconButton\n            size={32}\n            theme=\"whiteGreen\"\n            icon={isFavorite ? HeartFilledIcon : HeartIcon}\n            label=\"Favoritrecept\"\n            onClick={onClick}\n            disabled={disabled}\n            role=\"switch\"\n            aria-checked={isFavorite}\n        />\n    );\n};\n\nexport default FavoriteRecipeToggle;\n","import { Icon } from '@coop/components';\nimport { StarFilledIcon, StarIcon } from '@coop/icons';\nimport classnames from 'classnames';\n\nimport styles from './RatingStars.module.less';\n\nconst RatingStars = ({\n    size = 'small',\n    color = 'dsGreen',\n    ...props\n}: {\n    rating: number;\n    votes: number;\n    size?: 'small' | 'big';\n    color?: React.ComponentProps<typeof Icon>['color'];\n}) => {\n    const stars = Math.round(props.rating);\n    const starIconDimension = size === 'small' ? 12 : 20;\n\n    return (\n        <div className={styles.Rating}>\n            <span className=\"u-hiddenVisually\">\n                betygsatt {stars} av 5. {props.votes} {props.votes === 1 ? 'röst' : 'röster'}.\n            </span>\n            <div className={styles.Stars}>\n                {Array.from({ length: 5 }).map((star, index) => (\n                    <Icon\n                        // eslint-disable-next-line react/no-array-index-key\n                        key={index}\n                        icon={index < stars ? StarFilledIcon : StarIcon}\n                        width={starIconDimension}\n                        height={starIconDimension}\n                        color={color}\n                        aria-hidden\n                    />\n                ))}\n            </div>\n            <div className={classnames(styles.Votes, size === 'big' && styles.Big)} aria-hidden>\n                ({props.votes})\n            </div>\n        </div>\n    );\n};\n\nexport default RatingStars;\n","// extracted by mini-css-extract-plugin\nexport default {\"Rating\":\"VaO1oQTz\",\"Votes\":\"IJwh7W73\",\"Big\":\"PAuEfoCJ\",\"Stars\":\"nZ8RVTEp\"};","import { Cookies } from '../../../../utility/cookies';\nimport { FAVORITE_RECIPE_COOKIE_NAME } from './cookieKeys';\n\nconst CACHE_TIME_DAYS = 365;\n\n/** Stores favourite recipe as EXTERNAL IDs in cookie  */\nconst favouriteRecipesAnonymousCookie = {\n    get: (): string[] => {\n        const rawCookie = Cookies.read(FAVORITE_RECIPE_COOKIE_NAME);\n        return (rawCookie && (JSON.parse(rawCookie) as string[])?.map((i) => i.toString())) || [];\n    },\n\n    add: (externalRecipeId: string): boolean => {\n        const state = favouriteRecipesAnonymousCookie.get();\n        if (state.includes(externalRecipeId)) {\n            return false;\n        }\n\n        Cookies.create(\n            FAVORITE_RECIPE_COOKIE_NAME,\n            JSON.stringify([...state, externalRecipeId]),\n            CACHE_TIME_DAYS,\n        );\n        return true;\n    },\n\n    remove: (externalRecipeId: string): boolean => {\n        const state = favouriteRecipesAnonymousCookie.get();\n\n        const newState = state.filter((item) => item !== externalRecipeId);\n\n        Cookies.create(FAVORITE_RECIPE_COOKIE_NAME, JSON.stringify([...newState]), CACHE_TIME_DAYS);\n        return true;\n    },\n};\n\nexport default favouriteRecipesAnonymousCookie;\n","import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect } from 'react';\n\nimport { appConfig } from '../../../appConfig';\nimport recipeFlow from '../../recipe/flow/recipeFlow';\nimport { savedFavoriteRecipeKey } from '../../recipe/recipeQueries';\nimport favouriteRecipesAnonymousCookie from '../persistance/cookie/favouriteRecipesAnonymous';\nimport { ErrorGroup } from '../store/structureDefinitions/errorsState';\nimport { ga4RecipesTracking } from '../tracking/ga4/recipes';\nimport { useGroupErrorEffect } from './useGroupError';\n\nexport const fetchFavoriteRecipeIds = async () => {\n    let favoriteExternalRecipeIds: string[];\n    if (appConfig.coopUserSettings.isAuthenticated) {\n        const favoriteRecipes = await recipeFlow.getFavouriteRecipes();\n        favoriteExternalRecipeIds =\n            favoriteRecipes?.map((i) => i.externalRecipeId.toString()) || [];\n    } else {\n        favoriteExternalRecipeIds = favouriteRecipesAnonymousCookie.get();\n    }\n    return favoriteExternalRecipeIds;\n};\n\nexport const useFavoriteRecipeIds = (enabled: boolean = true) => {\n    const query = useQuery({\n        queryKey: savedFavoriteRecipeKey,\n        queryFn: fetchFavoriteRecipeIds,\n        staleTime: 5000,\n        gcTime: 30000,\n        enabled,\n    });\n    return query;\n};\n\n/**\n * Hook for a single teaser.Must be injected with \"all favorite recipes\" data, either by useFavouriteRecipes or FavoriteRecipeContext\n */\n\nexport const useFavouriteSingleRecipe = (externalRecipeId: string) => {\n    const { data: favouriteRecipeExternalIds, isLoading, isError } = useFavoriteRecipeIds();\n    useGroupErrorEffect(ErrorGroup.Global, isError);\n    const queryClient = useQueryClient();\n\n    const save = useMutation({\n        mutationFn: (id: string) => {\n            if (appConfig.coopUserSettings.isAuthenticated) {\n                return saveRecipes(id);\n            }\n            favouriteRecipesAnonymousCookie.add(externalRecipeId);\n            return Promise.resolve(true);\n        },\n        onSuccess: () => {\n            queryClient.invalidateQueries({ queryKey: savedFavoriteRecipeKey });\n        },\n    });\n    useGroupErrorEffect(ErrorGroup.Global, save.isError);\n\n    const remove = useMutation({\n        mutationFn: (id: string) => {\n            if (appConfig.coopUserSettings.isAuthenticated) {\n                return removeRecipes(id);\n            }\n            favouriteRecipesAnonymousCookie.remove(externalRecipeId);\n            return Promise.resolve(true);\n        },\n        onSuccess: () => {\n            queryClient.invalidateQueries({ queryKey: savedFavoriteRecipeKey });\n        },\n    });\n\n    useGroupErrorEffect(ErrorGroup.Global, remove.isError);\n\n    const isFavourite = !!favouriteRecipeExternalIds?.find((id) => id === externalRecipeId);\n    const saveRecipes = async (_externalRecipeId: string) => {\n        const res = await recipeFlow.saveFavouriteRecipe(_externalRecipeId);\n        return res;\n    };\n\n    const removeRecipes = async (_externalRecipeId: string) => {\n        const res = await recipeFlow.removeFavouriteRecipe(_externalRecipeId);\n        return res;\n    };\n\n    const saveFavouriteRecipe = () => {\n        save.mutate(externalRecipeId);\n    };\n\n    const removeFavouriteRecipe = () => {\n        remove.mutate(externalRecipeId);\n    };\n\n    const onFavouriteRecipeToggleClick = () => {\n        if (isFavourite) {\n            removeFavouriteRecipe();\n        } else {\n            saveFavouriteRecipe();\n        }\n    };\n\n    return {\n        isFavourite,\n        onFavouriteRecipeToggleClick,\n        save,\n        remove,\n        isLoading,\n    };\n};\n\nexport const useSingleFavorite = (id: string, name: string) => {\n    const {\n        isFavourite,\n        onFavouriteRecipeToggleClick,\n        remove: removeResult,\n        save: saveResult,\n        isLoading,\n    } = useFavouriteSingleRecipe(id);\n\n    useEffect(() => {\n        if (removeResult.isSuccess && !isFavourite) {\n            ga4RecipesTracking.favoriteRecipe.remove(id, name);\n        }\n    }, [removeResult.isSuccess, isFavourite, id, name]);\n\n    useEffect(() => {\n        if (saveResult.isSuccess && isFavourite) {\n            ga4RecipesTracking.favoriteRecipe.add(id, name);\n        }\n    }, [saveResult.isSuccess, isFavourite, id, name]);\n\n    return {\n        isFavourite,\n        onFavouriteRecipeToggleClick,\n        isLoading,\n    };\n};\n","import { failSilently } from '../../utils/failSilently';\nimport { sendGA4Event } from '../shared/sendGa4Event';\n\nconst filterRecipes = (filter: string) => {\n    const event: FilterRecipesEvent = {\n        event: 'filter',\n        filter_category_1: filter.toLowerCase(),\n        event_key: 'filter_recipes',\n    };\n\n    sendGA4Event(event);\n};\n\nconst favoriteRecipe =\n    (type: FavoriteRecipeInteractionType) => (recipeId: string, recipeName: string) => {\n        const event: FavoriteRecipeEvent = {\n            event: 'favourite',\n            recipe_id: recipeId,\n            recipe_name: recipeName.toLowerCase(),\n            feature_name: 'recipe',\n            type,\n            event_key: `favourite_recipe_${type}`,\n        };\n\n        sendGA4Event(event);\n    };\n\nconst rateRecipe = (recipeId: number, recipeName: string, rating: number) => {\n    const event: RateRecipeEvent = {\n        event: 'rate',\n        recipe_id: recipeId.toString(),\n        rating,\n        recipe_name: recipeName.toLowerCase(),\n        event_key: 'rate_recipe',\n    };\n\n    sendGA4Event(event);\n};\n\nconst recipeAdClick = (\n    promoId: string,\n    promoName: string,\n    creativeName: string,\n    creativeSlot: string,\n) => {\n    const event: RecipeAdClickEvent = {\n        event: 'select_promotion',\n        ecommerce: {\n            promotion_id: promoId,\n            promotion_name: promoName,\n            creative_name: creativeName,\n            creative_slot: creativeSlot,\n        },\n    };\n\n    sendGA4Event(event);\n};\n\nconst reviewRecipe = (recipeId: number, recipeName: string) => {\n    const event: ReviewRecipeEvent = {\n        event: 'review',\n        recipe_id: recipeId.toString(),\n        recipe_name: recipeName.toLowerCase(),\n        event_key: 'review_recipe',\n    };\n\n    sendGA4Event(event);\n};\n\nconst weeklyMenuRecipeInteraction =\n    (type: WeeklyMenuRecipeInteractionType) =>\n    (recipeType: string, recipeName: string, menuConfiguration: 'custom' | 'default') => {\n        const event: WeeklyMenuRecipeInteractionEvent = {\n            event: `weekly_menu_recipe`,\n            type,\n            recipe_name: recipeName.toLowerCase(),\n            recipe_type: recipeType.toLowerCase(),\n            menu_configuration: menuConfiguration,\n        };\n\n        sendGA4Event(event);\n    };\n\nconst weeklyMenuRecipeHandleIngredient =\n    (type: WeeklyMenuRecipeHandleIngredientType) =>\n    (recipeExternalId: string, recipeName: string, productId: string, productName: string) => {\n        const event: WeeklyMenuRecipeHandleIngredientEvent = {\n            event: 'weekly_menu_handle_ingredients',\n            event_action: type,\n            item_name: productName,\n            item_id: productId,\n            recipe_id: recipeExternalId,\n            recipe_name: recipeName,\n        };\n\n        sendGA4Event(event);\n    };\n\nconst weeklyMenuTeaserArrowClick = (recipeType: string, cardNumber: number) => {\n    const event: WeeklyMenuTeaserArrowClickEvent = {\n        event: `weekly_menu_swiper_arrow_click`,\n        card: cardNumber.toString(),\n        recipe_type: recipeType,\n    };\n\n    sendGA4Event(event);\n};\n\nconst weeklyMenuCategoryPillClick = (recipeType: string) => {\n    const event: WeeklyMenuCategoryPillClickEvent = {\n        event: `weekly_menu_recipe_type_click`,\n        recipe_type: recipeType,\n    };\n\n    sendGA4Event(event);\n};\n\nconst recipeRecommendationsClick =\n    (eventType: RecipeRecommendationsEventType) =>\n    (type: RecipeRecommendationsClickType) =>\n    (recipeId: number, recipeName: string) => {\n        const event: PdpRecipeRecommendationsClickEvent = {\n            event: eventType,\n            type,\n            recipe_id: recipeId.toString(),\n            recipe_name: recipeName.toLowerCase(),\n        };\n\n        sendGA4Event(event);\n    };\n\nconst faqClick = (text: string, action: WeeklyMenuFaqClickEvent['event_action']) => {\n    const event: WeeklyMenuFaqClickEvent = {\n        event: 'faq_interaction',\n        click_text: text,\n        event_action: action,\n        type: 'weekly menu',\n    };\n\n    sendGA4Event(event);\n};\n\nconst click = (type: ClickRecipeEvent['type']) => (id: string, name: string) => {\n    const event: ClickRecipeEvent = {\n        event: 'recipe_click',\n        recipe_id: id,\n        recipe_name: name,\n        type,\n    };\n\n    sendGA4Event(event);\n};\n\nexport default {\n    click: {\n        recipe: failSilently(click('standard recipe')),\n        buyableRecipe: failSilently(click('buyable recipe')),\n        foodbox: failSilently(click('standard foodbox')),\n        buyableFoodbox: failSilently(click('buyable foodbox')),\n        weeklyMenu: failSilently(click('weekly menu')),\n    },\n    filterRecipes: failSilently(filterRecipes),\n    rateRecipe: failSilently(rateRecipe),\n    recipeAdClick: failSilently(recipeAdClick),\n    reviewRecipe: failSilently(reviewRecipe),\n    favoriteRecipe: {\n        add: failSilently(favoriteRecipe('add')),\n        remove: failSilently(favoriteRecipe('remove')),\n    },\n    weeklyMenu: {\n        addRecipe: failSilently(weeklyMenuRecipeInteraction('add')),\n        removeRecipe: failSilently(weeklyMenuRecipeInteraction('remove')),\n        arrowClick: failSilently(weeklyMenuTeaserArrowClick),\n        categoryPillClick: failSilently(weeklyMenuCategoryPillClick),\n        handleIngredient: failSilently(weeklyMenuRecipeHandleIngredient),\n        faqClick: failSilently(faqClick),\n    },\n    pdpRecipeRecommendations: {\n        buyButtonClick: failSilently(\n            recipeRecommendationsClick('pdp_recommended_recipes')('button_recipe_click'),\n        ),\n        recipeTeaserClick: failSilently(\n            recipeRecommendationsClick('pdp_recommended_recipes')('product_card_click'),\n        ),\n    },\n    plpRecipeRecommendations: {\n        buyButtonClick: failSilently(\n            recipeRecommendationsClick('plp_recommended_recipes')('button_recipe_click'),\n        ),\n        recipeTeaserClick: failSilently(\n            recipeRecommendationsClick('plp_recommended_recipes')('product_card_click'),\n        ),\n    },\n};\n","import type recipeFlow from './flow/recipeFlow';\n\nexport const recipeQueryKeys = {\n    byExternalId: (externalId: string) => ['recipe', externalId],\n    byExternalIds: (externalIds: string[]) => ['recipe', ...externalIds],\n    comments: (externalId: string) => ['recipe', 'comments', externalId],\n    categories: (externalId: string) => ['recipe', 'categories', externalId],\n    recipeAd: (externalId: string) => ['recipe', 'ad', externalId],\n    recipeAdContent: (contentId: string) => ['recipe', 'adpage', contentId],\n};\n\nexport const gastrofyQueryKeys = {\n    byExternalId: (externalId: string, storeId: string) => ['gastrofyRecipe', externalId, storeId],\n    byRequest: (request: Parameters<typeof recipeFlow.discoverNorthforkRecipes>[0]) => [\n        'gastrofyRecipe',\n        request,\n    ],\n};\n\nexport const savedFavoriteRecipeKey = ['savedFavoriteRecipes'];\n"],"names":["_path","_path2","_path3","_path4","_extends","Object","assign","bind","n","e","arguments","length","t","r","hasOwnProperty","call","apply","_ref","title","titleId","props","width","height","viewBox","xmlns","id","fillRule","clipRule","d","BaseRecipeTeaser","Wrapper","ref","className","Teaser","withBorder","Border","TopActions","topSlot","cssClass","Image","name","url","imageUrl","transform","retinaTransform","lazy","fallbackUrl","Bottom","children","Badges","RatingContainer","ClimateImpact","co2ImpactKg","A","icon","color","label","Intl","NumberFormat","format","Content","Heading","Link","style","order","flexOrder","href","onClick","onLinkClick","tabIndex","Actions","Info","SkeletonText","SkeletonButton","isFoodbox","foodboxSlot","recipeSlot","isFavorite","disabled","size","theme","role","stars","Math","round","rating","starIconDimension","votes","Array","from","map","star","index","Icon","favouriteRecipesAnonymousCookie","get","rawCookie","read","JSON","parse","i","toString","add","externalRecipeId","state","includes","create","stringify","remove","newState","filter","item","fetchFavoriteRecipeIds","favoriteExternalRecipeIds","appConfig","coopUserSettings","isAuthenticated","favoriteRecipes","recipeFlow","getFavouriteRecipes","favouriteRecipesAnonymous","useFavoriteRecipeIds","enabled","useQuery","queryKey","queryFn","staleTime","gcTime","useSingleFavorite","isFavourite","onFavouriteRecipeToggleClick","removeResult","save","saveResult","isLoading","data","favouriteRecipeExternalIds","isError","useGroupError","Global","queryClient","useMutation","mutationFn","saveRecipes","Promise","resolve","onSuccess","invalidateQueries","removeRecipes","find","_externalRecipeId","saveFavouriteRecipe","removeFavouriteRecipe","mutate","useFavouriteSingleRecipe","useEffect","isSuccess","favoriteRecipe","type","recipeId","recipeName","event","recipe_id","recipe_name","toLowerCase","feature_name","event_key","weeklyMenuRecipeInteraction","recipeType","menuConfiguration","recipe_type","menu_configuration","recipeRecommendationsClick","eventType","click","recipe","failSilently","buyableRecipe","foodbox","buyableFoodbox","weeklyMenu","filterRecipes","filter_category_1","rateRecipe","recipeAdClick","promoId","promoName","creativeName","creativeSlot","ecommerce","promotion_id","promotion_name","creative_name","creative_slot","reviewRecipe","addRecipe","removeRecipe","arrowClick","cardNumber","card","categoryPillClick","handleIngredient","recipeExternalId","productId","productName","event_action","item_name","item_id","faqClick","text","action","click_text","pdpRecipeRecommendations","buyButtonClick","recipeTeaserClick","plpRecipeRecommendations","recipeQueryKeys","byExternalId","externalId","byExternalIds","externalIds","comments","categories","recipeAd","recipeAdContent","contentId","gastrofyQueryKeys","storeId","byRequest","request","savedFavoriteRecipeKey"],"sourceRoot":""}