{"version":3,"file":"coopse.script.2835.e71a60f9.chunk.js","mappings":"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","sources":["webpack:///../../packages/icons/src/stroke2/filter.svg","webpack:///../../packages/icons/src/stroke2/minus.svg","webpack:///../../packages/icons/src/stroke2/plus.svg","webpack:///./src/microApps/common/hooks/useQuerySearchParamUrlBuilder.ts","webpack:///./src/microApps/recipe/components/RecipeFilterFlyinTrigger/RecipeFilterFlyinView.tsx","webpack:///./src/microApps/recipe/components/RecipeFilterFlyinTrigger/RecipeFilterFlyinTrigger.tsx","webpack:///./src/microApps/recipe/components/RecipeFilterSearchBar/RecipeFilterSearchBar.tsx","webpack:///./src/microApps/recipe/components/RecipeSidebarNav/RecipeSideBarNavDesktop.tsx","webpack:///./src/microApps/recipe/components/RecipeSidebarNav/RecipeSidebarNavAnchor.tsx","webpack:///./src/microApps/recipe/components/RecipeSidebarNav/RecipeSidebarNavCategory3.tsx","webpack:///./src/microApps/recipe/components/RecipeSidebarNav/RecipeSidebarNavCategory2.tsx","webpack:///./src/microApps/recipe/components/RecipeSidebarNav/RecipeSidebarNavCategory1.tsx","webpack:///./src/microApps/recipe/components/RecipeSidebarNav/RecipeSidebarNav.tsx","webpack:///./src/microApps/recipe/hooks/useLoopRecipeSearch.ts","webpack:///./src/microApps/recipe/hooks/useSidebarState.ts","webpack:///./src/microApps/recipe/pages/RecipeStartPage/components/FavoriteRecipesSideBarLink/FavoriteRecipesSideBarLink.tsx","webpack:///./src/microApps/recipe/utils.ts"],"sourcesContent":["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 SvgFilter = _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: \"M15 5C13.8954 5 13 5.89543 13 7C13 8.10457 13.8954 9 15 9C16.1046 9 17 8.10457 17 7C17 5.89543 16.1046 5 15 5ZM11.126 6C11.5701 4.27477 13.1362 3 15 3C16.8638 3 18.4299 4.27477 18.874 6H21C21.5523 6 22 6.44772 22 7C22 7.55228 21.5523 8 21 8H18.874C18.4299 9.72523 16.8638 11 15 11C13.1362 11 11.5701 9.72523 11.126 8H3C2.44772 8 2 7.55228 2 7C2 6.44772 2.44772 6 3 6H11.126ZM9 15C7.89543 15 7 15.8954 7 17C7 18.1046 7.89543 19 9 19C10.1046 19 11 18.1046 11 17C11 15.8954 10.1046 15 9 15ZM5.12602 16C5.57006 14.2748 7.13616 13 9 13C10.8638 13 12.4299 14.2748 12.874 16H21C21.5523 16 22 16.4477 22 17C22 17.5523 21.5523 18 21 18H12.874C12.4299 19.7252 10.8638 21 9 21C7.13616 21 5.57006 19.7252 5.12602 18H3C2.44772 18 2 17.5523 2 17C2 16.4477 2.44772 16 3 16H5.12602Z\"\n })));\n};\nexport default SvgFilter;","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 SvgMinus = _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: \"M4 11.9995C4 11.4472 4.44772 10.9995 5 10.9995H19C19.5523 10.9995 20 11.4472 20 11.9995C20 12.5518 19.5523 12.9995 19 12.9995H5C4.44772 12.9995 4 12.5518 4 11.9995Z\"\n })));\n};\nexport default SvgMinus;","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 SvgPlus = _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: \"M12 4C12.5523 4 13 4.44772 13 5V11H19C19.5523 11 20 11.4477 20 12C20 12.5523 19.5523 13 19 13H13V19C13 19.5523 12.5523 20 12 20C11.4477 20 11 19.5523 11 19V13H5C4.44772 13 4 12.5523 4 12C4 11.4477 4.44772 11 5 11H11V5C11 4.44772 11.4477 4 12 4Z\"\n })));\n};\nexport default SvgPlus;","import { useLocation } from 'react-router-dom';\n\nexport type CreateUrlWithNewParamValue = (val: string | null) => string;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst useQuerySearchParamUrlBuilder = (key: string, defaultValue?: any) => {\n const location = useLocation();\n\n const paramValue = new URLSearchParams(location.search).get(key) || defaultValue;\n\n const createUrlWithNewParamValue: CreateUrlWithNewParamValue = (val) => {\n const urlParams = new URLSearchParams(location.search);\n\n if (val) {\n urlParams.set(key, val);\n } else {\n urlParams.delete(key);\n }\n\n return `${location.pathname}${urlParams.toString() && `?${urlParams.toString()}`}`;\n };\n\n return {\n paramValue,\n createUrlWithNewParamValue,\n };\n};\n\nexport default useQuerySearchParamUrlBuilder;\n","import { Button, ModalHeader } from '@coop/components';\nimport type { FC } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { useFavoriteRecipeIds } from '../../../common/hooks/useFavouriteRecipes';\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { SidebarState } from '../../hooks/useSidebarState';\nimport type { GetUrlForCategoriesSignature } from '../../models';\nimport FavoriteRecipesSideBarLink from '../../pages/RecipeStartPage/components/FavoriteRecipesSideBarLink/FavoriteRecipesSideBarLink';\nimport RecipeFilterSearchBar from '../RecipeFilterSearchBar/RecipeFilterSearchBar';\nimport RecipeSidebarNav from '../RecipeSidebarNav/RecipeSidebarNav';\n\ninterface RecipeFilterFlyinViewProps {\n close: () => void;\n sidebarState: SidebarState;\n categories: RecipeCategoryFacet[];\n currentCategories: string[];\n getUrlForCategories: GetUrlForCategoriesSignature;\n sortParamVal?: string;\n useRefresh?: boolean;\n recipesCount: number | null;\n ssrRecipeRootUrl: string;\n}\n\nconst RecipeFilterFlyinView: FC<React.PropsWithChildren<RecipeFilterFlyinViewProps>> = ({\n close,\n sidebarState,\n categories,\n currentCategories,\n getUrlForCategories,\n sortParamVal,\n useRefresh,\n recipesCount,\n ssrRecipeRootUrl,\n}) => {\n const { data: favouriteRecipeExternalIds } = useFavoriteRecipeIds();\n const hasSelectedCategories = currentCategories && currentCategories?.length > 0;\n return (\n <div className=\"u-paddingHsm\">\n <ModalHeader className=\"Heading Heading--h2 u-marginTmd u-md-marginTlg u-marginBmd u-textCenter\">\n Filtrera\n </ModalHeader>\n\n <div className=\"u-marginBmd u-borderRadius2\">\n <RecipeFilterSearchBar\n categories={categories}\n currentCategories={currentCategories}\n getUrlForCategories={getUrlForCategories}\n useRefresh={useRefresh}\n />\n </div>\n <div>\n <RecipeSidebarNav\n sidebarState={sidebarState}\n categories={categories}\n currentCategories={currentCategories}\n getUrlForCategories={getUrlForCategories}\n sortParamVal={sortParamVal}\n useRefresh={useRefresh}\n extraClassName=\"RecipeSidebarNav--flyin mixinScroll u-overflowXHidden u-flexGrow\"\n topListItemSlot={\n <FavoriteRecipesSideBarLink\n favouriteRecipeExternalIds={favouriteRecipeExternalIds}\n ssrRecipeRootUrl={ssrRecipeRootUrl}\n extraClassName=\"u-borderRadius8\"\n />\n }\n />\n </div>\n\n <div\n className=\"u-posRelative\"\n style={{\n background: 'linear-gradient(180deg, rgba(245, 245, 245, 0) 0%, #F5F5F5 100%',\n }}\n >\n <div className=\"u-flex u-flexJustifyCenter u-marginBlg\">\n {hasSelectedCategories && (\n <Button\n asChild\n size={40}\n theme=\"primaryOutline\"\n className=\"u-marginRxsm\"\n fullWidth\n >\n <Link to={getUrlForCategories({ categories: [] })}>\n Rensa {currentCategories.length} filter\n </Link>\n </Button>\n )}\n\n <Button size={40} theme=\"primary\" fullWidth onClick={close}>\n {hasSelectedCategories ? `Visa ${recipesCount} recept` : 'Visa receptsidan'}\n </Button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default RecipeFilterFlyinView;\n","import type { FC, ReactNode } from 'react';\n\nimport { FlyinNavigation } from '../../../common/components/atoms/FlyInNavigation';\nimport { FlyIn } from '../../../common/components/atoms/Modal';\nimport useModal from '../../../common/hooks/useModal';\nimport { FlyInType } from '../../../common/store/structureDefinitions/modalState';\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { SidebarState } from '../../hooks/useSidebarState';\nimport type { GetUrlForCategoriesSignature } from '../../models';\nimport RecipeFilterFlyinView from './RecipeFilterFlyinView';\n\ninterface RecipeFilterFlyinTriggerProps {\n sidebarState: SidebarState;\n categories: RecipeCategoryFacet[];\n currentCategories: string[];\n getUrlForCategories: GetUrlForCategoriesSignature;\n sortParamVal?: string;\n useRefresh?: boolean;\n recipesCount: number | null;\n children: (showRecipeFilterFlyin: () => void) => ReactNode;\n ssrRecipeRootUrl: string;\n}\n\nconst RecipeFilterFlyinTrigger: FC<RecipeFilterFlyinTriggerProps> = ({\n sidebarState,\n categories,\n currentCategories,\n getUrlForCategories,\n sortParamVal,\n useRefresh,\n recipesCount,\n children,\n ssrRecipeRootUrl,\n}) => {\n const { isOpen, close, open } = useModal(FlyInType.RecipePageFilter);\n\n return (\n <>\n {children(open)}\n <FlyIn\n isOpen={isOpen}\n close={close}\n sizePx={540}\n additionalClasses=\"u-textLeft u-bgGrayLight\"\n >\n <FlyinNavigation onClose={close} autoFocus>\n <RecipeFilterFlyinView\n close={close}\n sidebarState={sidebarState}\n categories={categories}\n currentCategories={currentCategories}\n getUrlForCategories={getUrlForCategories}\n sortParamVal={sortParamVal}\n useRefresh={useRefresh}\n recipesCount={recipesCount}\n ssrRecipeRootUrl={ssrRecipeRootUrl}\n />\n </FlyinNavigation>\n </FlyIn>\n </>\n );\n};\n\nexport default RecipeFilterFlyinTrigger;\n","import { SearchAutocomplete, SearchAutocompleteItem } from '@coop/components';\nimport * as levenshtein from 'fast-levenshtein';\nimport type { FC } from 'react';\nimport { useMemo, useState } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { appConfig } from '../../../../appConfig';\nimport useQuerySearchParamUrlBuilder from '../../../common/hooks/useQuerySearchParamUrlBuilder';\nimport { addQueryParamsToUrl } from '../../../common/utils/urlUtils';\nimport useReactRouting from '../../../ecommerce/hooks/useReactRouting';\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { GetUrlForCategoriesSignature } from '../../models';\nimport { getAllCategoryNamesFromLevel2AndDown } from '../../utils';\n\ninterface RecipeFilterSearchBarProps {\n categories: RecipeCategoryFacet[];\n currentCategories: string[];\n getUrlForCategories: GetUrlForCategoriesSignature;\n useRefresh?: boolean;\n}\n\nconst RecipeFilterSearchBar: FC<React.PropsWithChildren<RecipeFilterSearchBarProps>> = ({\n categories,\n currentCategories,\n getUrlForCategories,\n useRefresh,\n}) => {\n const [inputText, setInputText] = useState('');\n const { push } = useReactRouting();\n const inputIsProperLength = inputText.length > 2;\n const { paramValue: queryParamVal, createUrlWithNewParamValue: createQueryUrl } =\n useQuerySearchParamUrlBuilder('query');\n\n const categoryNames = useMemo(\n () =>\n getAllCategoryNamesFromLevel2AndDown(categories)\n .filter(\n (name) =>\n !currentCategories.includes(name.toLowerCase()) &&\n name.toLowerCase().includes(inputText.toLowerCase()),\n )\n .sort((a, b) => levenshtein.get(a, inputText) - levenshtein.get(b, inputText))\n .map((item, index) => ({ id: `${item}_${index}`, label: item })),\n [categories, currentCategories, inputText],\n );\n\n const getUrlForCategoriesExtended = (categoriesForUrl: string[]) => {\n const url = getUrlForCategories({ categories: categoriesForUrl });\n\n if (queryParamVal) {\n return addQueryParamsToUrl(url, {\n query: queryParamVal,\n });\n }\n\n return url;\n };\n\n const navigateExactMatch = (value: string) => {\n if (useRefresh) {\n window.location.href = getUrlForCategoriesExtended([\n ...currentCategories,\n value.toLowerCase(),\n ]);\n } else {\n push(getUrlForCategoriesExtended([...currentCategories, value.toLowerCase()]));\n }\n };\n\n const navigateSearchMatch = (value: string) => {\n if (useRefresh) {\n window.location.href = `${appConfig.coopSettings.recipe.url}?query=${value.toLowerCase()}`;\n } else {\n push(createQueryUrl(value.toLowerCase()));\n }\n };\n\n const performSearch = () => {\n const inputTextInLower = inputText.toLowerCase();\n const exactFilterMatch = categoryNames[0]?.label?.toLowerCase() === inputTextInLower;\n\n if (exactFilterMatch) {\n navigateExactMatch(inputTextInLower);\n } else {\n navigateSearchMatch(inputTextInLower);\n }\n\n setInputText('');\n };\n\n const handleSelection = (selection: string) => {\n const inputTextInLower = selection.toLowerCase();\n navigateExactMatch(inputTextInLower);\n };\n\n return (\n <SearchAutocomplete\n submitLabel=\"Sök recept\"\n placeholder=\"Sök bland filter\"\n inputValue={inputText}\n onInputChange={setInputText}\n items={inputIsProperLength ? categoryNames : []}\n size=\"small\"\n onSelectionChange={(key) => {\n const theItem = categoryNames?.find((result) => result.id === key);\n if (theItem) {\n handleSelection(theItem.label);\n }\n }}\n showEmptyStateWhen={inputIsProperLength}\n showErrorStateWhen={false}\n onSubmit={performSearch}\n overlayMaxHeight={500}\n >\n {(item) => (\n <SearchAutocompleteItem textValue={item.label}>\n {useRefresh ? (\n <a\n href={getUrlForCategories({\n categories: [...currentCategories, item.label],\n })}\n >\n {item.label}\n </a>\n ) : (\n <Link\n onClick={() => setInputText('')}\n to={getUrlForCategories({\n categories: [...currentCategories, item.label],\n })}\n >\n {item.label}\n </Link>\n )}\n </SearchAutocompleteItem>\n )}\n </SearchAutocomplete>\n );\n};\n\nexport default RecipeFilterSearchBar;\n","import type React from 'react';\n\nimport { SkipLink, SkipLinkLayout } from '../../../base/components/SkipLink';\nimport RecipeSidebarNav from './RecipeSidebarNav';\n\nconst RecipeSidebarNavDesktop = (props: React.ComponentProps<typeof RecipeSidebarNav>) => {\n return (\n <SkipLinkLayout\n skipTriggerSlot={\n <SkipLink href=\"#pageContent\" align=\"center\">\n Hoppa över filter\n </SkipLink>\n }\n >\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <RecipeSidebarNav {...props} />\n </SkipLinkLayout>\n );\n};\n\nexport default RecipeSidebarNavDesktop;\n","import type { FC, ReactNode } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { ga4RecipesTracking } from '../../../common/tracking/ga4/recipes';\nimport tracking from '../../../common/tracking/tracking';\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { RecipeSidebarLink } from './models';\n\ninterface RecipeSidebarNavAnchorProps {\n category: RecipeCategoryFacet;\n parentCategory: RecipeCategoryFacet;\n link: RecipeSidebarLink;\n className: string;\n useRefresh?: boolean;\n children: ReactNode;\n}\n\nconst RecipeSidebarNavAnchor: FC<React.PropsWithChildren<RecipeSidebarNavAnchorProps>> = ({\n category,\n parentCategory,\n link,\n className,\n useRefresh,\n children,\n}) => {\n const recipeFilterPageTracking = tracking.recipe.useFilterPageTracking();\n const rel = link.noFollow ? 'nofollow' : undefined;\n\n const onClick = () => {\n ga4RecipesTracking.filterRecipes(parentCategory.item);\n recipeFilterPageTracking?.categoryLinkClick(category, parentCategory);\n };\n\n if (useRefresh) {\n return (\n <a href={link.url} className={className} rel={rel}>\n {children}\n </a>\n );\n }\n\n return (\n <Link to={link.url} className={className} rel={rel} onClick={onClick}>\n {children}\n </Link>\n );\n};\n\nexport default RecipeSidebarNavAnchor;\n","import classnames from 'classnames';\nimport type { FC } from 'react';\n\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { RecipeSidebarLink } from './models';\nimport RecipeSidebarNavAnchor from './RecipeSidebarNavAnchor';\n\ninterface RecipeSideBarCategory3Props {\n currentCategories: string[];\n category: RecipeCategoryFacet;\n getUrlForCategory3: (\n category: RecipeCategoryFacet,\n parentCategory: RecipeCategoryFacet,\n ) => RecipeSidebarLink;\n parentCategory: RecipeCategoryFacet;\n useRefresh?: boolean;\n}\n\nconst RecipeSideBarCategory3: FC<React.PropsWithChildren<RecipeSideBarCategory3Props>> = ({\n currentCategories,\n category,\n getUrlForCategory3,\n parentCategory,\n useRefresh,\n}) => {\n const isLinkedCheckedClass = 'is-checked';\n const isChecked =\n currentCategories.includes(category.item.toLowerCase()) ||\n currentCategories.includes(parentCategory.item.toLowerCase());\n\n return (\n <li className=\"RecipeSidebarNav-category3\" data-testid={category.item}>\n <RecipeSidebarNavAnchor\n category={category}\n parentCategory={parentCategory}\n link={getUrlForCategory3(category, parentCategory)}\n className={classnames(\n 'RecipeSidebarNav-checkboxLink',\n isChecked ? isLinkedCheckedClass : '',\n )}\n useRefresh={useRefresh}\n >\n <span className=\"RecipeSidebarNav-checkboxLinkText\">{category.item}</span>\n </RecipeSidebarNavAnchor>\n </li>\n );\n};\n\nexport default RecipeSideBarCategory3;\n","import { Icon } from '@coop/components';\nimport { ChevronDownIcon } from '@coop/icons';\nimport classnames from 'classnames';\nimport type { FC } from 'react';\nimport { useState } from 'react';\nimport AnimateHeight from 'react-animate-height';\nimport _ from 'underscore';\n\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { SidebarState } from '../../hooks/useSidebarState';\nimport type { RecipeSidebarLink } from './models';\nimport RecipeSidebarNavAnchor from './RecipeSidebarNavAnchor';\nimport RecipeSidebarNavCategory3 from './RecipeSidebarNavCategory3';\n\nconst IS_LINK_CHECKED_CLASS = 'is-checked';\nconst IS_HIDDEN_CLASS = 'u-hiddenLight';\n\ninterface RecipeSideBarCategory2Props {\n currentCategories: string[];\n sidebarState: SidebarState;\n category: RecipeCategoryFacet;\n parentCategory: RecipeCategoryFacet;\n getUrlForCategory2: (category: RecipeCategoryFacet) => RecipeSidebarLink;\n getUrlForCategory3: (\n category: RecipeCategoryFacet,\n parentCategory: RecipeCategoryFacet,\n ) => RecipeSidebarLink;\n isHidden: boolean;\n useRefresh?: boolean;\n}\n\nconst RecipeSideBarCategory2: FC<React.PropsWithChildren<RecipeSideBarCategory2Props>> = ({\n currentCategories,\n sidebarState,\n category,\n parentCategory,\n getUrlForCategory2,\n getUrlForCategory3,\n isHidden,\n useRefresh,\n}) => {\n const isExpanded = sidebarState.expandedCategories[category.item];\n const setIsExpanded = (bool: boolean) =>\n sidebarState.setCategoryAsExpanded(category.item, bool);\n const [uniqueIdForAria] = useState(() => _.uniqueId('category2-'));\n\n if (category.categories) {\n return (\n <li\n className={classnames(\n 'RecipeSidebarNav-category2',\n isHidden ? IS_HIDDEN_CLASS : '',\n )}\n data-testid={category.item}\n >\n <div className=\"RecipeSidebarNav-category2Header\">\n <RecipeSidebarNavAnchor\n parentCategory={parentCategory}\n category={category}\n link={getUrlForCategory2(category)}\n className={classnames(\n 'RecipeSidebarNav-checkboxLink',\n currentCategories.includes(category.item.toLowerCase())\n ? IS_LINK_CHECKED_CLASS\n : '',\n )}\n useRefresh={useRefresh}\n >\n <span className=\"RecipeSidebarNav-checkboxLinkText\">{category.item}</span>\n </RecipeSidebarNavAnchor>\n\n <span className=\"RecipeSidebarNav-category2Amount\">({category.count})</span>\n <button\n aria-expanded={isExpanded}\n aria-controls={uniqueIdForAria}\n type=\"button\"\n className=\"RecipeSidebarNav-category2Button u-outlineSolidBase2\"\n onClick={() => setIsExpanded(!isExpanded)}\n aria-label={`Expandera ${category.item} kategori`}\n >\n <Icon\n className=\"u-marginLauto\"\n icon={ChevronDownIcon}\n width={20}\n height={20}\n rotateClockwise={isExpanded ? '180deg' : '0deg'}\n aria-hidden\n />\n </button>\n </div>\n <AnimateHeight id={uniqueIdForAria} duration={250} height={isExpanded ? 'auto' : 0}>\n <ul className=\"RecipeSidebarNav-category2ListOfChildren\">\n {category.categories.map((category3) => (\n <RecipeSidebarNavCategory3\n key={category3.item}\n currentCategories={currentCategories}\n category={category3}\n getUrlForCategory3={getUrlForCategory3}\n parentCategory={category}\n useRefresh={useRefresh}\n />\n ))}\n </ul>\n </AnimateHeight>\n </li>\n );\n }\n\n return (\n <li\n className={classnames('RecipeSidebarNav-category2', isHidden ? IS_HIDDEN_CLASS : '')}\n data-testid={category.item}\n >\n <div className=\"RecipeSidebarNav-category2Header\">\n <RecipeSidebarNavAnchor\n parentCategory={parentCategory}\n category={category}\n link={getUrlForCategory2(category)}\n className={classnames(\n 'RecipeSidebarNav-checkboxLink',\n currentCategories.includes(category.item.toLowerCase())\n ? IS_LINK_CHECKED_CLASS\n : '',\n )}\n useRefresh={useRefresh}\n >\n <span className=\"RecipeSidebarNav-checkboxLinkText\">{category.item}</span>\n </RecipeSidebarNavAnchor>\n\n <span className=\"RecipeSidebarNav-category2Amount\">({category.count})</span>\n </div>\n </li>\n );\n};\n\nexport default RecipeSideBarCategory2;\n","import { Icon } from '@coop/components';\nimport { ChevronDownIcon, MinusIcon, PlusIcon } from '@coop/icons';\nimport type { FC } from 'react';\nimport { useState } from 'react';\nimport AnimateHeight from 'react-animate-height';\nimport * as _ from 'underscore';\n\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { SidebarState } from '../../hooks/useSidebarState';\nimport type { RecipeSidebarLink } from './models';\nimport RecipeSideBarCategory2 from './RecipeSidebarNavCategory2';\n\nconst INITIAL_MAX_CATEGORY2_ITEMS_TO_SHOW = 3;\n\ninterface RecipeSideBarCategory1Props {\n currentCategories: string[];\n sidebarState: SidebarState;\n category: RecipeCategoryFacet;\n getUrlForCategory2: (category: RecipeCategoryFacet) => RecipeSidebarLink;\n getUrlForCategory3: (\n category: RecipeCategoryFacet,\n parentCategory: RecipeCategoryFacet,\n ) => RecipeSidebarLink;\n useRefresh?: boolean;\n}\n\nconst RecipeSideBarCategory1: FC<React.PropsWithChildren<RecipeSideBarCategory1Props>> = ({\n currentCategories,\n sidebarState,\n category,\n getUrlForCategory2,\n getUrlForCategory3,\n useRefresh,\n}) => {\n const isExpanded = sidebarState.expandedCategories[category.item];\n const setIsExpanded = (bool: boolean) =>\n sidebarState.setCategoryAsExpanded(category.item, bool);\n\n const isShowAll = sidebarState.showAllCategories[category.item];\n const setIsShowAll = (bool: boolean) => sidebarState.setCategoryAsShowAll(category.item, bool);\n\n const [uniqueIdForAria] = useState(() => _.uniqueId('category1-'));\n\n const shouldShowCategory2 = (index: number) =>\n index <= INITIAL_MAX_CATEGORY2_ITEMS_TO_SHOW - 1 || isShowAll;\n if (category.categories == null) {\n return null;\n }\n return (\n <li className=\"RecipeSidebarNav-category1\" data-testid={category.item}>\n <button\n aria-expanded={isExpanded}\n aria-controls={uniqueIdForAria}\n className=\"RecipeSidebarNav-category1Button u-outlineSolidBase2\"\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n >\n <span className=\"RecipeSidebarNav-category1Title\">{category.item}</span>\n\n <Icon\n className=\"u-marginLauto\"\n icon={ChevronDownIcon}\n width={20}\n height={20}\n rotateClockwise={isExpanded ? '180deg' : '0deg'}\n aria-hidden\n />\n </button>\n\n <AnimateHeight id={uniqueIdForAria} duration={250} height={isExpanded ? 'auto' : 0}>\n <div className=\"RecipeSidebarNav-category1PreListDiv\" />\n <ul className=\"RecipeSidebarNav-category1ListOfChildren\">\n {category.categories.map((category2, index) => (\n <RecipeSideBarCategory2\n key={category2.item}\n currentCategories={currentCategories}\n sidebarState={sidebarState}\n parentCategory={category}\n category={category2}\n getUrlForCategory2={getUrlForCategory2}\n getUrlForCategory3={getUrlForCategory3}\n isHidden={!shouldShowCategory2(index)}\n useRefresh={useRefresh}\n />\n ))}\n </ul>\n\n {category.categories.length > INITIAL_MAX_CATEGORY2_ITEMS_TO_SHOW && (\n <button\n className=\"RecipeSidebarNav-category1SeeMoreFooter u-outlineSolidBase2\"\n type=\"button\"\n onClick={() => setIsShowAll(!isShowAll)}\n >\n {isShowAll ? (\n <Icon\n className=\"u-marginLmd u-marginRxsm\"\n icon={MinusIcon}\n width={20}\n height={20}\n aria-hidden\n />\n ) : (\n <Icon\n className=\"u-marginLmd u-marginRxsm\"\n icon={PlusIcon}\n width={20}\n height={20}\n aria-hidden\n />\n )}\n\n {isShowAll ? <span>Färre kategorier</span> : <span> Fler kategorier</span>}\n </button>\n )}\n </AnimateHeight>\n </li>\n );\n};\n\nexport default RecipeSideBarCategory1;\n","import classNames from 'classnames';\nimport type { FC } from 'react';\n\nimport { addQueryParamsToUrl } from '../../../common/utils/urlUtils';\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { SidebarState } from '../../hooks/useSidebarState';\nimport type { GetUrlForCategoriesSignature } from '../../models';\nimport {\n getCategoriesWhileRemovingCategoryFacetChildren,\n getCategoriesWhileRemovingCategoryFacetsParent,\n} from '../../utils';\nimport type { RecipeSidebarLink } from './models';\nimport RecipeSidebarNavCategory1 from './RecipeSidebarNavCategory1';\n\nexport interface RecipeSidebarNavProps {\n sidebarState: SidebarState;\n categories: RecipeCategoryFacet[];\n currentCategories: string[];\n getUrlForCategories: GetUrlForCategoriesSignature;\n sortParamVal?: string;\n queryParamVal?: string;\n extraClassName?: string;\n useRefresh?: boolean;\n topListItemSlot?: React.ReactNode;\n}\nconst RecipeSidebarNav: FC<React.PropsWithChildren<RecipeSidebarNavProps>> = ({\n sidebarState,\n categories,\n currentCategories,\n getUrlForCategories,\n sortParamVal,\n queryParamVal,\n extraClassName,\n useRefresh,\n topListItemSlot,\n}) => {\n const shouldAddNoFollowToLink = ({ categoriesForUrl }: { categoriesForUrl: string[] }) => {\n if (categoriesForUrl.length > 2) {\n return true;\n }\n\n if (sortParamVal) {\n return true;\n }\n\n if (queryParamVal) {\n return true;\n }\n\n return false;\n };\n\n const getUrlForCategory2 = (category: RecipeCategoryFacet): RecipeSidebarLink => {\n const categoriesForUrl = getCategoriesWhileRemovingCategoryFacetChildren({\n currentCategories,\n category,\n });\n\n const url = getUrlForCategories({ categories: categoriesForUrl });\n const urlWithPotentialQueryParams = addQueryParamsToUrl(url, {\n sort: sortParamVal,\n query: queryParamVal,\n });\n\n return {\n url: urlWithPotentialQueryParams,\n noFollow: shouldAddNoFollowToLink({ categoriesForUrl }),\n };\n };\n\n const getUrlForCategory3 = (\n category: RecipeCategoryFacet,\n parentCategory: RecipeCategoryFacet,\n ): RecipeSidebarLink => {\n const categoriesForUrl = getCategoriesWhileRemovingCategoryFacetsParent({\n currentCategories,\n category,\n parentCategory,\n });\n\n const url = getUrlForCategories({ categories: categoriesForUrl });\n const urlWithPotentialQueryParams = addQueryParamsToUrl(url, {\n sort: sortParamVal,\n query: queryParamVal,\n });\n\n return {\n url: urlWithPotentialQueryParams,\n noFollow: shouldAddNoFollowToLink({ categoriesForUrl }),\n };\n };\n\n return (\n <ul className={classNames('RecipeSidebarNav', extraClassName)} aria-label=\"Filter\">\n {topListItemSlot && <li>{topListItemSlot}</li>}\n {categories.map((category) => (\n <RecipeSidebarNavCategory1\n currentCategories={currentCategories}\n sidebarState={sidebarState}\n key={category.item}\n category={category}\n getUrlForCategory2={getUrlForCategory2}\n getUrlForCategory3={getUrlForCategory3}\n useRefresh={useRefresh}\n />\n ))}\n </ul>\n );\n};\n\nexport default RecipeSidebarNav;\n","import type { ApiException } from '../../common/exceptions/exceptionDefinitions';\nimport type { AsyncDispatcherStatus } from '../../common/hooks/useAsyncDispatcher';\nimport { useAsyncDispatcher } from '../../common/hooks/useAsyncDispatcher';\nimport type { ApiLoopSort } from '../../search/api/searchRequests';\nimport searchFlow from '../../search/flow/searchFlow';\nimport type { RecipeCategoryFacet, SearchRecipe } from '../../search/models/models';\nimport { SearchFacetType } from '../../search/models/models';\n\ntype MapKeys = keyof Pick<ApiLoopSearchRecipe, 'name' | 'average_rating' | 'publication_date'>;\n\nconst MAP_LOOP_SEARCH_RECIPE_KEY_TO_API_LOOP_SORT: Record<\n MapKeys,\n ApiLoopSort<keyof ApiLoopSearchRecipe>\n> = {\n publication_date: {\n type: 'attribute',\n attributeName: 'publication_date',\n order: 'desc',\n },\n name: {\n type: 'attribute',\n attributeName: 'name',\n order: 'asc',\n },\n average_rating: {\n type: 'attribute',\n attributeName: 'average_rating',\n order: 'desc',\n },\n // searching for popularity is default if no sortorder is sent in.\n};\n\nexport interface LoopRecipeResult {\n categories: RecipeCategoryFacet[];\n recipes: SearchRecipe[];\n recipesCount: number | null;\n fetchRecipeData: (args: UseLoopRecipeSearchExecuteArgs) => void;\n isRecipeDataLoading: boolean;\n recipeDataError: ApiException;\n recipeDataStatus: AsyncDispatcherStatus;\n noRecipesFromPreviousRequest: boolean;\n noCategoriesFromPreviousRequest: boolean;\n queryUsed?: string;\n}\n\nexport interface UseLoopRecipeSearchExecuteArgs {\n resultsPerPage: number;\n page: number;\n selectedCategories: string[];\n sortBy?: keyof ApiLoopSearchRecipe;\n searchQuery?: string;\n searchOperator?: 'AND';\n}\n\nconst useLoopRecipeSearch = (): LoopRecipeResult => {\n const {\n result,\n execute: fetchRecipeData,\n isLoading: isRecipeDataLoading,\n error: recipeDataError,\n status: recipeDataStatus,\n } = useAsyncDispatcher(\n async ({\n resultsPerPage,\n page,\n selectedCategories,\n sortBy,\n searchQuery = '',\n }: UseLoopRecipeSearchExecuteArgs) => {\n return searchFlow.searchRecipesLoop({\n searchRequest: {\n searchQuery,\n page,\n resultsPerPage,\n sortBy:\n sortBy && MAP_LOOP_SEARCH_RECIPE_KEY_TO_API_LOOP_SORT[sortBy as MapKeys]\n ? [MAP_LOOP_SEARCH_RECIPE_KEY_TO_API_LOOP_SORT[sortBy as MapKeys]]\n : undefined,\n facets: [\n {\n type: SearchFacetType.RecipeCategories,\n selected: selectedCategories,\n },\n ],\n },\n });\n },\n { initialLoadingState: true, keepPreviousResult: true },\n );\n\n const noRecipesFromPreviousRequest =\n recipeDataStatus === undefined ||\n recipeDataStatus === 'not-requested' ||\n (recipeDataStatus === 'success' && result?.items?.length === 0) ||\n (isRecipeDataLoading && result?.items?.length === 0);\n\n const noCategoriesFromPreviousRequest =\n recipeDataStatus === undefined ||\n recipeDataStatus === 'not-requested' ||\n (recipeDataStatus === 'success' && result?.facets[0]?.items?.length === 0) ||\n (isRecipeDataLoading && result?.facets[0]?.items?.length === 0);\n\n return {\n categories: result?.facets[0]?.items ?? [],\n recipes: result?.items ?? [],\n recipesCount: result?.count ?? null,\n fetchRecipeData,\n isRecipeDataLoading,\n recipeDataError,\n recipeDataStatus,\n noRecipesFromPreviousRequest,\n noCategoriesFromPreviousRequest,\n queryUsed: result?.queryUsed,\n };\n};\n\nexport default useLoopRecipeSearch;\n","import { useState } from 'react';\n\n// We want to be able to unmount the component without affecting it's expanded + showAll state.\nexport interface SidebarState {\n expandedCategories: Record<string, boolean>;\n showAllCategories: Record<string, boolean>;\n setCategoryAsExpanded: (name: string, value: boolean) => void;\n setCategoryAsShowAll: (name: string, value: boolean) => void;\n}\n\nexport const useSidebarState = (): SidebarState => {\n const [expandedCategories, setExpandedCategories] = useState({});\n const [showAllCategories, setShowAllCategories] = useState({});\n\n return {\n expandedCategories,\n showAllCategories,\n setCategoryAsExpanded: (name: string, value: boolean) =>\n setExpandedCategories({\n ...expandedCategories,\n [name]: value,\n }),\n setCategoryAsShowAll: (name: string, value: boolean) =>\n setShowAllCategories({\n ...expandedCategories,\n [name]: value,\n }),\n };\n};\n","import { Icon } from '@coop/components';\nimport { HeartFilledIcon, HeartIcon } from '@coop/icons';\nimport classNames from 'classnames';\nimport type { FC } from 'react';\nimport { Link } from 'react-router-dom';\n\ninterface FavoriteRecipesCountItemProps {\n favouriteRecipeExternalIds: string[] | undefined;\n ssrRecipeRootUrl: string;\n extraClassName?: string;\n}\n\nconst FavoriteRecipesSideBarLink: FC<React.PropsWithChildren<FavoriteRecipesCountItemProps>> = ({\n favouriteRecipeExternalIds,\n ssrRecipeRootUrl,\n extraClassName,\n}) => {\n if (Array.isArray(favouriteRecipeExternalIds)) {\n return (\n <Link\n className={classNames(\n 'u-bgWhite u-paddingAsm u-marginBxsm u-flex u-flexJustifySpaceBetween u-outlineSolidBase2',\n extraClassName,\n )}\n style={{ borderRadius: '5px!important' }}\n to={`${ssrRecipeRootUrl}favorit/`}\n rel=\"nofollow\"\n >\n <p className=\"u-marginAz u-textSmall\">\n <span className=\"u-textWeightBold\">Sparade recept </span>\n <span className=\"u-colorGreenDark\">({favouriteRecipeExternalIds.length})</span>\n </p>\n {favouriteRecipeExternalIds.length ? (\n <Icon\n icon={HeartFilledIcon}\n width={20}\n height={20}\n color=\"dsGreen\"\n aria-hidden\n />\n ) : (\n <Icon icon={HeartIcon} width={20} height={20} color=\"dsGreen\" aria-hidden />\n )}\n </Link>\n );\n }\n\n return null;\n};\n\nexport default FavoriteRecipesSideBarLink;\n","import type { ApiCategoriesUrlOrder } from '../../models/recipe/recipeModel';\nimport type { RecipeCategoryFacet } from '../search/models/models';\nimport type {\n CategoryNamesUnderLevel1,\n CategoryNameToUrlSegment,\n GetUrlForCategoriesSignature,\n} from './models';\n\n/**\n *\n * @param currStringArray current state of array\n * @param newString to be added or removed from currStringArray\n * @returns new array with or without newString\n */\nexport const createNewArrayByTogglingString = (currStringArray: string[], newString: string) => {\n const shouldRemoveString = currStringArray.includes(newString);\n\n if (shouldRemoveString) {\n return currStringArray.filter((name) => name !== newString);\n }\n\n return [...currStringArray, newString];\n};\n\n/**\n * @returns a function that creates a path string where the categories are ordered correctly\n */\nexport const createGetUrlForCategories =\n (\n categoryNameToUrlSegment: CategoryNameToUrlSegment,\n categoriesUrlOrder: ApiCategoriesUrlOrder,\n recipeRootUrl: string,\n ): GetUrlForCategoriesSignature =>\n ({ categories }: { categories: string[] }) => {\n const sortByCategoryUrlOrder = (a: string, b: string) =>\n categoriesUrlOrder[a.toLowerCase()] - categoriesUrlOrder[b.toLowerCase()];\n\n const mapCategoryNameToUrlSegment = (categoryName: string) =>\n categoryName ? categoryNameToUrlSegment[categoryName.toLowerCase()] : null;\n\n const removedPotentialLastSlashFromRoot =\n recipeRootUrl.slice(-1) === '/'\n ? recipeRootUrl.slice(0, recipeRootUrl.length - 1)\n : recipeRootUrl;\n\n const hasFilterQuery = categories.length > 2;\n\n const builtPath = categories\n .slice()\n .sort(sortByCategoryUrlOrder)\n .map(mapCategoryNameToUrlSegment)\n .filter(Boolean)\n .reduce((acc, currSegment, index) => {\n if (index < 2) {\n return `${acc}/${currSegment}`;\n }\n\n if (index === 2) {\n return `${acc}?filter=${currSegment}`;\n }\n\n return `${acc},${currSegment}`;\n }, removedPotentialLastSlashFromRoot);\n\n return hasFilterQuery ? builtPath : `${builtPath}/`;\n };\n\nexport const getCategoriesWhileRemovingCategoryFacetChildren = ({\n currentCategories,\n category,\n}: {\n currentCategories: string[];\n category: RecipeCategoryFacet;\n}) => {\n if (Array.isArray(category.categories)) {\n const childrenNames = category.categories.map((childCategory) =>\n childCategory.item.toLowerCase(),\n );\n\n const categoriesWithoutChildren = currentCategories.filter(\n (currCategory) => !childrenNames.includes(currCategory),\n );\n\n return createNewArrayByTogglingString(\n categoriesWithoutChildren,\n category.item.toLowerCase(),\n );\n }\n\n return createNewArrayByTogglingString(currentCategories, category.item.toLowerCase());\n};\n\nexport const getCategoriesWhileRemovingCategoryFacetsParent = ({\n currentCategories,\n category,\n parentCategory,\n}: {\n currentCategories: string[];\n category: RecipeCategoryFacet;\n parentCategory: RecipeCategoryFacet;\n}) => {\n const lowerCaseParentName = parentCategory.item.toLowerCase();\n\n const categoriesWithoutParent = currentCategories.filter(\n (categoryName) => categoryName !== lowerCaseParentName,\n );\n\n return createNewArrayByTogglingString(categoriesWithoutParent, category.item.toLowerCase());\n};\n\nexport const getAllCategoryNamesFromLevel2AndDown = (\n categories: RecipeCategoryFacet[] | null,\n collectedNames: string[] = [],\n rootCall: boolean = true,\n): string[] => {\n if (!categories) {\n return collectedNames;\n }\n\n return categories.reduce((acc, facet) => {\n const childCategories = getAllCategoryNamesFromLevel2AndDown(\n facet.categories,\n collectedNames,\n false,\n );\n\n if (rootCall) {\n return [...acc, ...childCategories];\n }\n\n return [...acc, ...childCategories, facet.item];\n }, collectedNames);\n};\n\n/**\n * Removes categories on level 1\n * @returns the categories we can show\n */\nexport const getCategoryNamesUnderLevel1 = (\n ssrCategoriesUrlOrder: ApiCategoriesUrlOrder,\n): CategoryNamesUnderLevel1 => {\n const obj = ssrCategoriesUrlOrder ?? {};\n return Object.entries(obj).reduce((acc, [key, val]) => {\n if (val % 1000 !== 0) {\n return {\n ...acc,\n [key]: true,\n };\n }\n\n return acc;\n }, {});\n};\n\nexport const buildRecipeRedirectUrl = (externalId: string) => `/redirect/recipe/${externalId}`;\n"],"names":["_path","_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","key","defaultValue","location","paramValue","URLSearchParams","search","get","createUrlWithNewParamValue","val","urlParams","set","delete","pathname","toString","close","sidebarState","categories","currentCategories","getUrlForCategories","sortParamVal","useRefresh","recipesCount","ssrRecipeRootUrl","data","favouriteRecipeExternalIds","hasSelectedCategories","className","ModalHeader","RecipeFilterSearchBar","RecipeSidebarNav","extraClassName","topListItemSlot","FavoriteRecipesSideBarLink","style","background","Button","asChild","size","theme","fullWidth","to","onClick","children","isOpen","open","useModal","RecipePageFilter","sizePx","additionalClasses","onClose","autoFocus","inputText","setInputText","useState","push","inputIsProperLength","queryParamVal","createQueryUrl","categoryNames","useMemo","filter","name","includes","toLowerCase","sort","a","b","map","item","index","label","getUrlForCategoriesExtended","categoriesForUrl","url","query","navigateExactMatch","value","window","href","submitLabel","placeholder","inputValue","onInputChange","items","onSelectionChange","theItem","find","result","selection","inputTextInLower","handleSelection","showEmptyStateWhen","showErrorStateWhen","onSubmit","coopSettings","recipe","overlayMaxHeight","textValue","skipTriggerSlot","align","category","parentCategory","link","recipeFilterPageTracking","tracking","useFilterPageTracking","rel","noFollow","undefined","filterRecipes","categoryLinkClick","getUrlForCategory3","isChecked","IS_LINK_CHECKED_CLASS","IS_HIDDEN_CLASS","getUrlForCategory2","isHidden","isExpanded","expandedCategories","uniqueIdForAria","count","type","setIsExpanded","bool","setCategoryAsExpanded","Icon","icon","rotateClockwise","AnimateHeight","A","duration","category3","RecipeSidebarNavCategory3","isShowAll","showAllCategories","shouldShowCategory2","INITIAL_MAX_CATEGORY2_ITEMS_TO_SHOW","category2","setIsShowAll","setCategoryAsShowAll","shouldAddNoFollowToLink","RecipeSidebarNavCategory1","MAP_LOOP_SEARCH_RECIPE_KEY_TO_API_LOOP_SORT","publication_date","attributeName","order","average_rating","execute","fetchRecipeData","isLoading","isRecipeDataLoading","error","recipeDataError","status","recipeDataStatus","resultsPerPage","page","selectedCategories","sortBy","searchQuery","searchRecipesLoop","searchRequest","facets","RecipeCategories","selected","initialLoadingState","keepPreviousResult","noRecipesFromPreviousRequest","noCategoriesFromPreviousRequest","recipes","queryUsed","useSidebarState","setExpandedCategories","setShowAllCategories","Array","isArray","borderRadius","color","createNewArrayByTogglingString","currStringArray","newString","createGetUrlForCategories","categoryNameToUrlSegment","categoriesUrlOrder","recipeRootUrl","removedPotentialLastSlashFromRoot","slice","hasFilterQuery","builtPath","categoryName","Boolean","reduce","acc","currSegment","getCategoriesWhileRemovingCategoryFacetChildren","childrenNames","childCategory","categoriesWithoutChildren","currCategory","getCategoriesWhileRemovingCategoryFacetsParent","lowerCaseParentName","categoriesWithoutParent","getAllCategoryNamesFromLevel2AndDown","collectedNames","rootCall","facet","childCategories","getCategoryNamesUnderLevel1","ssrCategoriesUrlOrder","obj","entries","buildRecipeRedirectUrl","externalId"],"sourceRoot":""}