store.setState({ selectedItems: [] })}\n afterClose={onClose}\n />\n ),\n footerContent: (\n \n {isBrand && }\n \n \n \n \n ),\n onClose,\n initialPosition: isBrand ? 'top' : 'dynamic',\n showCloseIcon: false,\n showFade: true,\n isTitleBorderHidden: true,\n allowResize: false,\n hideScrollbar: true,\n }\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return null;\n};\n","import styled from 'styled-components';\n\nimport { RadioButton, theme } from '@notino/react-styleguide';\n\nexport const StyledRadioButton = styled(RadioButton)`\n display: flex;\n align-items: center;\n height: 3rem;\n font-weight: 400;\n margin-left: 1.25rem;\n\n > span {\n top: 1rem;\n border-color: ${theme.color.border.divider};\n }\n`;\n","import * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { DrawerContext } from '@notino/react-styleguide';\nimport { WishlistSortBy } from '@notino/shared/definitions/types';\n\nimport { useWishlistStore } from '@containers/WishList/store';\n\nimport messages from '../messages';\n\nimport { StyledRadioButton } from './styled';\n\nconst desiredOrder: WishlistSortBy[] = [\n WishlistSortBy.Default,\n WishlistSortBy.BestSellers,\n WishlistSortBy.Cheapest,\n WishlistSortBy.MostExpensive,\n WishlistSortBy.Alphabetically,\n];\n\nexport const SortByOptionsList = () => {\n const { closeDrawer } = DrawerContext.useDrawerContext();\n const sortByOptions = useWishlistStore((x) => x.sortByOptions);\n const selectedSortBy = useWishlistStore((x) => x.selectedSortBy);\n const { setSelectedSortBy } = useWishlistStore((x) => x.actions);\n\n const sortedSortOptions = [...sortByOptions].sort(\n (a, b) => desiredOrder.indexOf(a.sortBy) - desiredOrder.indexOf(b.sortBy)\n );\n\n return (\n \n {sortedSortOptions.map((o) => (\n {\n setSelectedSortBy(o.sortBy);\n closeDrawer();\n }}\n >\n {o.sortBy === WishlistSortBy.Default ? (\n \n ) : (\n o.name\n )}\n \n ))}\n
\n );\n};\n","import * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport {\n DrawerContext,\n FilterChip,\n IconRegularClose,\n} from '@notino/react-styleguide';\nimport { WishlistSortBy } from '@notino/shared/definitions/types';\n\nimport { useWishlistStore } from '@containers/WishList/store';\n\nimport { DrawerTitle } from '../DrawerTitle';\nimport messages from '../messages';\n\nimport { SortByOptionsList } from './SortByOptionsList';\n\nexport const SortingChip = () => {\n const { setSelectedSortBy } = useWishlistStore((x) => x.actions);\n const selectedSortBy = useWishlistStore((x) => x.selectedSortBy);\n const sortByOptions = useWishlistStore((x) => x.sortByOptions);\n const { openDrawer, closeDrawer } = DrawerContext.useDrawerContext();\n\n const sortActive = selectedSortBy !== WishlistSortBy.Default;\n\n const openSortingDrawer = () => {\n openDrawer(, {\n title: (\n }\n onRefreshButtonClick={() => {\n setSelectedSortBy(WishlistSortBy.Default);\n closeDrawer();\n }}\n />\n ),\n showCloseIcon: false,\n showFade: true,\n isTitleBorderHidden: true,\n allowResize: false,\n hideScrollbar: true,\n });\n };\n\n return (\n x.sortBy === selectedSortBy)?.name\n ) : (\n \n )\n }\n isActive={sortActive}\n onClick={openSortingDrawer}\n secondaryIcon={}\n onSecondaryIconClick={\n sortActive && (() => setSelectedSortBy(WishlistSortBy.Default))\n }\n />\n );\n};\n","import * as React from 'react';\n\nimport {\n DrawerContext,\n FilterChip,\n IconRegularClose,\n} from '@notino/react-styleguide';\nimport { WishlistFiltrationGroupType } from '@notino/shared/definitions/types';\n\nimport { OverflowFade } from '@components/OverflowFade';\nimport { useWishlistStore } from '@containers/WishList/store';\nimport { useElementScrollDistanceFromTopThreshold } from '@hooks/useElementScrollDistanceFromTopThreshold';\n\nimport { Categories } from './Categories';\nimport { FiltrationDrawerHandler } from './FiltrationDrawerHandler';\nimport { SortingChip } from './SortingChip';\nimport {\n ChipCount,\n Divider,\n FilterChipsWrapper,\n FiltersSectionWrapper,\n InnerWrapper,\n} from './styled';\nimport { useGetSelectedFilterItems } from './utils';\n\nconst SUPPORTED_GROUP_TYPES = [\n WishlistFiltrationGroupType.Brand,\n WishlistFiltrationGroupType.ForWho,\n WishlistFiltrationGroupType.FreeGiftsAndOffers,\n];\n\nexport const FiltersSection = () => {\n const wrapperRef = React.useRef(null);\n const isScrolled = useElementScrollDistanceFromTopThreshold({\n ref: wrapperRef,\n threshold: 0,\n });\n const { closeDrawer } = DrawerContext.useDrawerContext();\n\n const { setSelectedNavigationValues } = useWishlistStore((x) => x.actions);\n const filtration = useWishlistStore((x) => x.filtration).filter((x) =>\n SUPPORTED_GROUP_TYPES.includes(x.groupType)\n );\n const selectedNavigationValues = useWishlistStore(\n (x) => x.selectedNavigationValues\n );\n const totalProductCount = useWishlistStore(\n (state) => state.totalProductCount\n );\n const getSelectedFilterItems = useGetSelectedFilterItems();\n\n const [openedDrawerGroupType, setOpenedDrawerGroupType] =\n React.useState();\n\n if (totalProductCount < 5) {\n return ;\n }\n\n return (\n <>\n {openedDrawerGroupType && (\n {\n setOpenedDrawerGroupType(undefined);\n closeDrawer();\n }}\n />\n )}\n\n \n \n \n\n \n \n {filtration.map((f) => {\n const items = getSelectedFilterItems(f.groupType);\n const count = items.length;\n\n return (\n 0}\n title={\n count ? (\n <>\n {items[0].name}\n {count > 1 && +{count - 1}}\n >\n ) : (\n f.groupName\n )\n }\n secondaryIcon={\n \n }\n onSecondaryIconClick={\n count > 0 &&\n (() =>\n setSelectedNavigationValues(\n selectedNavigationValues.filter(\n (x) => !items.some((i) => i.navigationValue === x)\n )\n ))\n }\n onClick={() => setOpenedDrawerGroupType(f.groupType)}\n />\n );\n })}\n\n \n \n \n \n \n \n >\n );\n};\n","import { useState, useEffect, RefObject } from 'react';\n\nexport function useElementScrollDistanceFromTopThreshold({\n ref,\n threshold,\n}: {\n ref: RefObject;\n threshold: number;\n}): boolean {\n const [isPastThreshold, setIsPastThreshold] = useState(false);\n\n useEffect(() => {\n const handleScroll = () => {\n if (ref.current) {\n setIsPastThreshold(\n ref.current.getBoundingClientRect().top <= threshold\n );\n }\n };\n\n handleScroll();\n window.addEventListener('scroll', handleScroll);\n return () => {\n window.removeEventListener('scroll', handleScroll);\n };\n }, [ref, threshold]);\n\n return isPastThreshold;\n}\n","import styled from 'styled-components';\n\nimport { breakpoints, theme } from '@notino/react-styleguide';\n\nexport const Container = styled.div`\n max-width: 64.75rem;\n margin: 0 auto;\n`;\n\nexport const ProductsCount = styled.div`\n ${theme.typography.labelRegular400}\n color: ${theme.color.text.tertiary};\n margin-bottom: 0.5rem;\n margin-top: 0.75rem;\n padding-inline: 1rem;\n\n @media (min-width: ${breakpoints.md}) {\n margin-bottom: 0.75rem;\n margin-top: 1.5rem;\n }\n`;\n","import * as React from 'react';\n\nimport { useFunctionInBulk } from '@notino/react-web-utils';\nimport {\n WishlistForCurrentUserQuery,\n WishlistSortBy,\n} from '@notino/shared/definitions/types';\nimport { Ga4Events, Product } from '@notino/web-tracking';\n\nimport { GTM_WISHLIST_LIST_NAME } from '@containers/WishList/constants';\nimport { useWishlistStore } from '@containers/WishList/store';\nimport { dispatchTrackingEvent } from '@context/tracking/utils';\nimport { ProductEventWither } from '@helpers/googleTagManager';\n\ntype NonArray = T extends Array ? never : T;\ntype Ga4SortingType = NonArray<\n Extract['product_lists']\n>['sorting_type'];\n\ntype TrackingWishlistProduct = Product & {\n id: string;\n list_position: number;\n};\n\ntype Params = { sortBy: WishlistSortBy };\n\nconst sortMapping: Record = {\n Default: 'recommendation',\n Cheapest: 'price_ascending',\n MostExpensive: 'price_descending',\n BestSellers: 'bestsellers',\n Alphabetically: 'alphabetical',\n};\n\nexport const useWishlistViewItemListTracking = () => {\n const storeProducts = useWishlistStore((state) => state.products);\n const sortBy = useWishlistStore((state) => state.selectedSortBy);\n\n const trackProductsImpression = React.useCallback(\n (products: TrackingWishlistProduct[], { sortBy: _sortBy }: Params) => {\n dispatchTrackingEvent({\n event: 'view_item_list',\n product_lists: {\n products,\n interaction: window.scrollY > 100 ? 'scroll' : 'automatic',\n sorting_type: sortMapping[_sortBy],\n list_id: undefined,\n list_name: GTM_WISHLIST_LIST_NAME,\n },\n _clear: true,\n });\n },\n []\n );\n\n const trackProductsImpressionBulk = useFunctionInBulk<\n TrackingWishlistProduct,\n // @ts-ignore\n Params\n >(trackProductsImpression, 500, { sortBy }, sortBy);\n\n return (\n product: WishlistForCurrentUserQuery['WishlistForCurrentUser']['listing']['products'][number]['product']\n ) => {\n trackProductsImpressionBulk(\n ProductEventWither()\n .withVpProduct(product)\n .withDiscountPrices(product.attributes, {\n shouldSendOnlyDiscountPrice: true,\n })\n .withAdditionalData({\n id: product.id,\n list_position:\n storeProducts.findIndex((p) => String(p.id) === product.id) + 1,\n })\n .build()\n );\n };\n};\n\nexport type TrackedProduct = Product & { list_position: number; id: string };\n","import { defineMessages } from 'react-intl';\n\nexport const wishlistMessages = defineMessages({\n toggle: {\n id: 'wishlist.linkSharer.toggle',\n defaultMessage: 'Zkopírovat odkaz na seznam',\n },\n header: {\n id: 'wishlist.linkSharer.header',\n defaultMessage: 'Podělte se o své oblíbené produkty',\n },\n shareLabel: {\n id: 'wishlist.linkSharer.label',\n defaultMessage: 'Odkaz ke sdílení:',\n },\n clipboard: {\n id: 'wishlist.linkSharer.clipboard',\n defaultMessage: 'Zkopírováno do schránky',\n },\n clipboardFail: {\n id: 'wishlist.linkSharer.clipboardFail',\n defaultMessage: 'Kopírování se nezdařilo, zkopírujte pomocí Ctrl+C',\n },\n});\n","import styled from 'styled-components';\n\nimport {\n Heading,\n SemanticColorKey,\n theme,\n getSemanticColor,\n} from '@notino/react-styleguide';\n\nexport const IconTextButton = styled.div`\n color: ${theme.color.text.tertiary};\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: 4.6875rem;\n font-size: 14px;\n cursor: pointer;\n svg {\n color: black;\n }\n transition: color 100ms ease;\n &:hover {\n color: ${theme.color.text.secondary};\n }\n`;\n\nexport const CircleBorder = styled.div`\n border: 1px solid ${theme.color.border.default};\n border-radius: 100%;\n display: flex;\n margin-right: 0.9375rem;\n`;\n\nexport const LinkSharerCircleBorder = styled(CircleBorder)`\n padding: 0.4375rem 0.4375rem 0.5625rem 0.5625rem;\n`;\n\nexport const ModalBody = styled.div`\n padding: 0 1.875rem;\n`;\n\nexport const H3 = styled(Heading.H3)`\n margin: 1.875rem 0 2.5rem;\n`;\n\nexport const LinkLabel = styled.label`\n display: inline-block;\n width: 100%;\n text-align: left;\n margin-bottom: 1rem;\n font-weight: 600;\n`;\n\nexport const LinkInput = styled.input`\n color: ${theme.color.text.tertiary};\n font-weight: 300;\n box-sizing: border-box;\n width: 100%;\n padding: 0.9375rem;\n margin-bottom: 1.75rem;\n`;\n\nexport const Message = styled.div<{ color: SemanticColorKey }>`\n color: ${(props) => getSemanticColor(props.color)};\n box-sizing: border-box;\n width: 100%;\n height: 1rem;\n margin: 0 0 1.9375rem;\n display: inline-flex;\n svg {\n width: 18px;\n }\n`;\n","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { IconRegularCheckmark, IconSolidInfo } from '@notino/react-styleguide';\n\nimport { wishlistMessages } from '../messages';\n\nimport { LinkInput, Message } from './styled';\n\ninterface IWishlistLinkProps {\n hostUrl: string;\n anonymousId: string;\n isCopySuccessful: boolean;\n}\n\nexport const WishlistLink: React.FC = ({\n hostUrl,\n anonymousId,\n isCopySuccessful,\n}) => (\n <>\n \n {isCopySuccessful ? (\n \n {' '}\n \n \n ) : (\n \n {' '}\n \n \n )}\n >\n);\n","import * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { wishlistMessages } from '../messages';\n\nimport { H3, LinkLabel, ModalBody } from './styled';\nimport { WishlistLink } from './WishlistLink';\n\ninterface IModalProps {\n hostUrl: string;\n anonymousId: string;\n isCopySuccessful: boolean;\n}\n\nexport const Modal: React.FC = ({\n anonymousId,\n isCopySuccessful,\n hostUrl,\n}) => {\n return (\n \n \n \n
\n\n \n \n \n
\n \n \n );\n};\n","import * as React from 'react';\n\nimport { useMutation } from '@apollo/client';\n\nimport { ModalModel, ModalContext } from '@notino/react-styleguide';\nimport {\n CopyWishlistMutationVariables,\n CopyWishlistMutation as copyWishlistResponse,\n} from '@notino/shared/definitions/types';\n\nimport { Modal } from '@containers/WishList/components/LinkSharer/Modal';\nimport { useTrackingContext } from '@context/tracking/TrackingContext';\nimport { dispatchTrackingEvent } from '@context/tracking/utils';\nimport { getWindowOrigin } from '@utils/constants';\n\nimport copyWishlistMutation from '../../queries/copyWishlist.graphql';\n\nexport const useCopyWishlistId = (anonymousId: string) => {\n const { toggleModal } = ModalContext.useModalContext();\n const { getTimeFromInit } = useTrackingContext();\n\n const [isCopySuccessful, setIsCopySuccessful] = React.useState(true);\n\n const [copyWishlist, { data }] = useMutation<\n copyWishlistResponse,\n CopyWishlistMutationVariables\n >(copyWishlistMutation);\n\n const handleOnCopy = React.useCallback(\n async (_: string, success: boolean) => {\n const serverWishlistId = data?.WishlistCopyWishlist?.id;\n if (serverWishlistId !== anonymousId) {\n await copyWishlist({\n variables: { anonymousId },\n });\n }\n\n dispatchTrackingEvent({\n event: 'wishlist_click',\n wishlist: {\n action: 'wishlist_shared',\n interaction: 'click',\n name: 'share',\n timing: getTimeFromInit(),\n },\n });\n\n toggleModal(\n ,\n {\n size: ModalModel.Sizes.default,\n type: ModalModel.Types.default,\n noBorders: true,\n }\n );\n\n setIsCopySuccessful(success);\n },\n [\n anonymousId,\n data,\n copyWishlist,\n isCopySuccessful,\n toggleModal,\n getTimeFromInit,\n ]\n );\n\n return {\n handleOnCopy,\n };\n};\n","import styled from 'styled-components';\n\nimport { theme } from '@notino/react-styleguide';\n\nexport const Container = styled.div`\n max-width: 64.6875rem;\n margin: 0 auto;\n`;\n\nexport const StyledHeader = styled.div`\n text-align: center;\n width: 100%;\n margin-top: 2.1875rem;\n margin-bottom: 1.4375rem;\n a {\n color: ${theme.color.text.primary};\n font-weight: bold;\n }\n`;\nexport const StyledHeaderText = styled.h1`\n font-size: 2rem;\n text-align: center;\n font-weight: 300;\n text-transform: none !important;\n`;\nexport const StyledLoginInfoText = styled.div`\n padding: 1rem 0;\n`;\n\nexport const StyledEmptyInfo = styled.p`\n padding: 1rem;\n`;\n\nexport const ButtonWrapper = styled.div`\n text-align: center;\n margin-top: 1.875rem;\n`;\n\nexport const WishlistContainer = styled.div`\n margin-bottom: 2.15rem;\n`;\n\nexport const Spacer = styled.div<{ isSmall: boolean }>`\n margin-bottom: ${({ isSmall }) => (isSmall ? '5rem' : '10rem')};\n`;\n","import styled from 'styled-components';\n\nimport { breakpoints, theme } from '@notino/react-styleguide';\n\nexport const HeaderWrapper = styled.div`\n padding: 1rem 0.5rem 0.5rem;\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n svg {\n margin-inline: 0.75rem;\n cursor: pointer;\n }\n\n @media (min-width: ${breakpoints.md}) {\n justify-content: start;\n gap: 0.5rem;\n padding: 0 1rem;\n margin: 2.5rem 0 0.75rem;\n\n svg:first-child {\n display: none;\n }\n }\n`;\n\nexport const HeaderTitle = styled.div`\n ${theme.typography.labelLarge}\n\n @media (min-width: ${breakpoints.md}) {\n ${theme.typography.titleLarge}\n }\n`;\n\nexport const EmptyWrapper = styled.div`\n min-height: 65vh;\n`;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { IconRegularHeart } from '@notino/react-styleguide';\n\nimport {\n StyledEmptyInfo,\n StyledHeader,\n StyledHeaderText,\n} from '@containers/WishList/styled';\n\nimport messages from '../../../messages';\n\nimport { EmptyWrapper } from './styled';\n\nexport const Empty = () => {\n return (\n \n \n \n \n {(text) => (\n \n )}\n \n \n \n \n \n\n \n \n \n \n \n );\n};\n","import * as React from 'react';\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\nimport { FormattedMessage } from 'react-intl';\n\nimport * as uuid from 'uuid';\n\nimport { IconRegularShareIos } from '@notino/react-styleguide';\n\nimport messages from '@containers/WishList/messages';\nimport { getWindowOrigin } from '@utils/constants';\n\nimport { useCopyWishlistId } from '../../LinkSharer/useCopyWishlistId';\n\nimport { Empty } from './Empty';\nimport { HeaderTitle, HeaderWrapper } from './styled';\n\ntype Props = {\n isShared: boolean;\n isEmpty: boolean;\n};\n\nexport const WishlistHeader = ({ isShared, isEmpty }: Props) => {\n const anonymousId = React.useMemo(() => uuid(), []);\n\n const { handleOnCopy } = useCopyWishlistId(anonymousId);\n\n const hostUrl = getWindowOrigin();\n const showMobileSharing = async () => {\n await navigator.share({\n url: `${hostUrl}/wishlist?id=${anonymousId}`,\n });\n };\n\n const isSafariOnDesktop = () =>\n /Safari/i.test(navigator.userAgent) &&\n navigator.vendor.includes('Apple Computer') &&\n !/Mobi|Android/i.test(navigator.userAgent);\n\n const handleNativeShare = () =>\n navigator.share && !isSafariOnDesktop && showMobileSharing();\n\n if (isEmpty) return ;\n\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n","import * as React from 'react';\nimport { InView } from 'react-intersection-observer';\nimport { FormattedMessage } from 'react-intl';\n\nimport { GetItemDataByIdQuery } from '@notino/shared/definitions/types';\n\nimport { GTM_WISHLIST_LIST_NAME } from '@containers/WishList/constants';\nimport messages from '@containers/WishList/messages';\nimport { useWishlistStore } from '@containers/WishList/store';\nimport { useFeatureFlags } from '@context/featureFlags/FeatureFlagsProvider';\nimport { useAddToCartCloudTracking } from '@hooks/useAddToCardCloudTracking';\n\nimport AnimatedProductList from '../AnimatedProductList';\nimport {\n trackWishlistPageView,\n useTrackToCartAsync,\n useTrackToCartFailedAsync,\n} from '../WishlistPager/tracking';\n\nimport { FiltersSection } from './FiltersSection';\nimport { Container, ProductsCount } from './styled';\nimport { useWishlistViewItemListTracking } from './tracking/useWishlistViewItemListTracking';\nimport { WishlistHeader } from './WishlistHeader';\n\nexport const WishlistPage = () => {\n const { spa_redirect_wishlist_to_pd } = useFeatureFlags();\n const products = useWishlistStore((state) => state.products);\n const hasMore = useWishlistStore((state) => state.hasMore);\n const productIds = useWishlistStore((state) => state.productIds);\n const isShared = useWishlistStore((state) => state.isSharedWishlist);\n const isEmpty = useWishlistStore((state) => state.totalProductCount === 0);\n const totalFilteredProductCount = useWishlistStore(\n (state) => state.totalFilteredProductCount\n );\n const loading = useWishlistStore((state) => state.isLoading);\n const { setProductWishlisted, fetchProducts } = useWishlistStore(\n (state) => state.actions\n );\n\n const trackAddToCartAsync = useTrackToCartAsync(\n productIds,\n GTM_WISHLIST_LIST_NAME\n );\n const addToCardCloudTracking = useAddToCartCloudTracking();\n const trackAddToCartFailedAsync = useTrackToCartFailedAsync(\n productIds,\n GTM_WISHLIST_LIST_NAME\n );\n\n const handleProductAdded = async (\n product: GetItemDataByIdQuery['vpProductById']\n ) => {\n await trackAddToCartAsync(product);\n addToCardCloudTracking({ quantity: 1, productCode: product.productCode });\n };\n\n const trackItemView = useWishlistViewItemListTracking();\n\n return (\n \n \n\n {!isEmpty && (\n <>\n \n \n :{' '}\n {totalFilteredProductCount}\n \n >\n )}\n\n \n\n {hasMore && !loading && (\n \n inView &&\n fetchProducts({\n offset: productIds.length,\n })\n }\n />\n )}\n \n );\n};\n","import * as React from 'react';\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\nimport { FormattedMessage } from 'react-intl';\n\nimport * as uuid from 'uuid';\n\nimport { IconRegularShare } from '@notino/react-styleguide';\n\nimport { getWindowOrigin } from '@utils/constants';\n\nimport { wishlistMessages } from '../messages';\n\nimport { LinkSharerCircleBorder, IconTextButton } from './styled';\nimport { useCopyWishlistId } from './useCopyWishlistId';\n\nexport const LinkSharer: React.FC = () => {\n const anonymousId = React.useMemo(() => uuid(), []);\n\n const { handleOnCopy } = useCopyWishlistId(anonymousId);\n\n const hostUrl = getWindowOrigin();\n const showMobileSharing = async () => {\n await navigator.share({\n url: `${hostUrl}/wishlist?id=${anonymousId}`,\n });\n };\n\n const isSafariOnDesktop = () =>\n /Safari/i.test(navigator.userAgent) &&\n navigator.vendor.includes('Apple Computer') &&\n !/Mobi|Android/i.test(navigator.userAgent);\n\n const handleNativeShare = () =>\n navigator.share && !isSafariOnDesktop && showMobileSharing();\n\n return (\n \n \n \n \n \n\n \n \n \n );\n};\n","import * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { IconRegularHeart } from '@notino/react-styleguide';\n\nimport { LOGIN_URL } from '@constants';\n\nimport messages from './messages';\nimport {\n StyledEmptyInfo,\n StyledHeader,\n StyledHeaderText,\n StyledLoginInfoText,\n} from './styled';\n\ninterface IProps {\n isEmpty: boolean;\n showLoginText?: boolean;\n isShared: boolean;\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport const WishlistHeader = ({\n isEmpty,\n showLoginText,\n isShared,\n}: IProps) => {\n const getHeaderText = () => {\n if (isEmpty) return messages.noProducts;\n if (isShared) return messages.sharedProducts;\n return messages.yourProducts;\n };\n\n return (\n \n \n \n {(text) => }\n \n \n {isEmpty && (\n <>\n \n \n \n\n \n \n \n >\n )}\n {showLoginText ? (\n \n {parts},\n }}\n >\n {(text) => (\n \n )}\n \n \n ) : null}\n \n );\n};\n","import { useMutation } from '@apollo/client';\n\nimport {\n RemoveFromWishlistMutation,\n RemoveFromWishlistMutationVariables,\n} from '@notino/shared/definitions/types';\n\nimport removeFromWishlistMutation from '@components/Universals/WishlistModifier/queries/removeFromWishlist.graphql';\nimport { publishUpdateWishlistCountEvent } from '@components/Universals/WishlistModifier/useWishlistActions';\n\nexport const useRemoveNullWishlistProducts = (isEnabled: boolean) => {\n const [remove] = useMutation<\n RemoveFromWishlistMutation,\n RemoveFromWishlistMutationVariables\n >(removeFromWishlistMutation);\n\n return (nullIds: string[]) => {\n if (!isEnabled || nullIds.length === 0) return;\n\n const callApi = async () => {\n const promises = nullIds.map((id) =>\n remove({ variables: { productId: id } })\n );\n await Promise.all(promises);\n };\n\n callApi().finally(publishUpdateWishlistCountEvent);\n };\n};\n","import * as React from 'react';\n\nimport {\n GetProductsByIdBatchedQuery,\n GetProductsByIdBatchedQueryVariables,\n} from '@notino/shared/definitions/types';\n\nimport getProductsByIdBatchedQuery from '@components/Universals/BatchVPProductQuery/queries/productsByIdBatched.graphql';\nimport { dispatchProductsShownEvent } from '@containers/ProductDetailContainer/ProductDetail/hooks/useDispatchProductsShowEvent';\nimport { subtractArrays } from '@utils/array';\n\nimport { trackWishlistProductListImpression } from './tracking';\nimport useLazyQueryWorkaround from './useLazyQueryWorkaround';\nimport { useRemoveNullWishlistProducts } from './useRemoveNullWishlistProducts';\nimport { useSsrWishlistProducts } from './useSsrWishlistProducts';\nimport { findNullProductIds } from './utils';\n\nconst usePagination = () =>\n React.useReducer((prevPage: number) => prevPage + 1, 0);\n\nexport const useWishlistedProducts = (\n productIds: string[],\n isSharedWishlist: boolean,\n { pageSize }: { pageSize: number }\n) => {\n const [page, nextPage] = usePagination();\n const removeNullProducts = useRemoveNullWishlistProducts(!isSharedWishlist);\n\n const [products, setProducts] = useSsrWishlistProducts({\n productIds,\n pageSize,\n });\n const alreadyFetchedIds = React.useRef(\n products.length ? productIds.slice(0, pageSize) : []\n );\n\n const [fetchMore, { loading, error }] = useLazyQueryWorkaround<\n GetProductsByIdBatchedQuery,\n GetProductsByIdBatchedQueryVariables\n >(getProductsByIdBatchedQuery, (response, { variables }) => {\n const variableIds = Array.isArray(variables.ids)\n ? variables.ids\n : [variables.ids];\n alreadyFetchedIds.current = [...alreadyFetchedIds.current, ...variableIds];\n\n const allNewProducts = response?.vpProductByIds ?? [];\n const nonNullProducts = allNewProducts.filter(Boolean);\n\n if (nonNullProducts.length > 0) {\n trackWishlistProductListImpression(nonNullProducts, productIds, 'button');\n dispatchProductsShownEvent(\n nonNullProducts.map((p) => ({ ...p, webId: p.id })),\n {\n section: 'Wishlist',\n }\n );\n }\n\n setProducts((prev) => [...prev, ...nonNullProducts]);\n\n if (allNewProducts.length !== nonNullProducts.length) {\n removeNullProducts(findNullProductIds(variableIds, nonNullProducts));\n }\n });\n\n /**\n * this useEffect is used when user removes item from wishlist,\n * so product list is refreshed with new items\n */\n React.useEffect(() => {\n setProducts((prev) => prev.filter((prod) => productIds.includes(prod.id)));\n }, [productIds, setProducts]);\n\n /**\n * this useEffect handles fetching of new products when page or productIds change\n * when page change => classic pagination\n * when productIds list change => this occurs on remove from wishlist, so fetch items to the end of the page\n */\n React.useEffect(() => {\n const endOfCurrentPage = (page + 1) * pageSize;\n const idsThatShouldBeLoaded = productIds.slice(0, endOfCurrentPage);\n\n const productIdsToFetch = subtractArrays(\n idsThatShouldBeLoaded,\n alreadyFetchedIds.current\n );\n\n if (productIdsToFetch.length > 0) {\n void fetchMore({\n variables: {\n ids: productIdsToFetch,\n },\n });\n }\n }, [productIds, pageSize, fetchMore, page, products]);\n\n React.useEffect(() => {\n trackWishlistProductListImpression(products, productIds, 'automatic');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const setProductWishlisted = React.useCallback(\n (productId: string, wishlisted: boolean) => {\n setProducts((prev) =>\n prev.map((product) =>\n product.id === productId ? { ...product, wishlisted } : product\n )\n );\n },\n [setProducts]\n );\n\n return {\n products,\n fetchMore: nextPage,\n loading,\n error,\n hasMore: products.length < productIds.length,\n isEmpty: productIds.length === 0,\n setProductWishlisted,\n } as const;\n};\n","import * as React from 'react';\n\nimport { useQuery, useApolloClient } from '@apollo/client';\n\nimport {\n GetProductsByIdBatchedQuery,\n GetProductsByIdBatchedQueryVariables,\n} from '@notino/shared/definitions/types';\n\nimport getProductsByIdBatchedQuery from '@components/Universals/BatchVPProductQuery/queries/productsByIdBatched.graphql';\n\ninterface UseSsrWishlistProductsParams {\n productIds: string[];\n pageSize: number;\n}\n\nconst useProductsSsrQuery = (\n productIds: UseSsrWishlistProductsParams['productIds']\n) => {\n useQuery(getProductsByIdBatchedQuery, {\n ssr: true,\n skip: typeof window !== 'undefined',\n variables: {\n ids: productIds,\n },\n });\n};\n\nexport const useSsrWishlistProducts = ({\n productIds,\n pageSize,\n}: UseSsrWishlistProductsParams) => {\n const { cache } = useApolloClient();\n useProductsSsrQuery(productIds.slice(0, pageSize));\n\n return React.useState(() => {\n const ssrProducts = cache.readQuery<\n GetProductsByIdBatchedQuery,\n GetProductsByIdBatchedQueryVariables\n >({\n query: getProductsByIdBatchedQuery,\n variables: {\n ids: productIds.slice(0, pageSize),\n },\n })?.vpProductByIds;\n\n return (ssrProducts || []).filter(Boolean);\n });\n};\n","import * as React from 'react';\n\nimport {\n ApolloQueryResult,\n OperationVariables,\n QueryOptions,\n TypedDocumentNode,\n useApolloClient,\n ApolloError,\n} from '@apollo/client';\n\nexport type MyLazyQueryResult = Pick<\n ApolloQueryResult,\n 'error' | 'loading'\n>;\n\n// can't use useLazyQuery which would be much better due to https://github.com/apollographql/apollo-client/issues/9317\nexport default function useLazyQueryWorkaround<\n T,\n TVariables = OperationVariables\n>(\n query: TypedDocumentNode,\n onCompleted: (\n data: T,\n queryOptions: Omit, 'query'>\n ) => void\n): [\n (\n additionalOptions: Omit, 'query'>\n ) => Promise,\n MyLazyQueryResult\n] {\n const onCompletedRef = React.useRef(onCompleted);\n\n React.useEffect(() => {\n onCompletedRef.current = onCompleted;\n });\n\n const client = useApolloClient();\n const self = React.useRef>(undefined);\n\n const [result, setResult] = React.useState>({\n loading: false,\n });\n\n const execQuery = React.useCallback(\n async (additionalOptions: Omit, 'query'>) => {\n const current = {};\n self.current = current;\n try {\n setResult({\n loading: true,\n error: undefined,\n });\n const queryResult = await client.query({\n query,\n ...additionalOptions,\n });\n if (self.current !== current) {\n // query canceled\n return;\n }\n setResult({\n loading: false,\n error: queryResult.error,\n });\n\n onCompletedRef.current(queryResult.data, additionalOptions);\n } catch (error: unknown) {\n if (self.current !== current) {\n // query canceled\n return;\n }\n setResult({\n loading: false,\n error: error as ApolloError,\n });\n }\n },\n [client, query]\n );\n\n return [execQuery, result];\n}\n","import { GetProductsByIdBatchedQuery } from '@notino/shared/definitions/types';\n\nexport const findNullProductIds = (\n requestIds: string[],\n nonNullProducts: GetProductsByIdBatchedQuery['vpProductByIds']\n) => {\n const nonNullProductIds = nonNullProducts.map((x) => x.id);\n return requestIds.filter((id) => !nonNullProductIds.includes(id));\n};\n","import * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { GetItemDataByIdQuery } from 'packages/shared/definitions/types';\n\nimport { ActionButton, ButtonModel } from '@notino/react-styleguide';\n\nimport messages from '@containers/ProductDetailContainer/messages';\nimport { useFeatureFlags } from '@context/featureFlags/FeatureFlagsProvider';\nimport { useAddToCartCloudTracking } from '@hooks/useAddToCardCloudTracking';\n\nimport { LinkSharer } from '../../components/LinkSharer';\nimport { GTM_WISHLIST_LIST_NAME } from '../../constants';\nimport { WishlistHeader } from '../../header';\nimport { Container, ButtonWrapper, Spacer } from '../../styled';\nimport AnimatedProductList from '../AnimatedProductList';\n\nimport {\n trackWishlistPageView,\n useTrackToCartAsync,\n useTrackToCartFailedAsync,\n} from './tracking';\nimport { useWishlistedProducts } from './useWishlistedProducts';\n\nexport interface IWishlistPagerProps {\n productIds: string[];\n pageSize: number;\n userId: string; // logged-in user\n owner?: string; // id of foreign shared wishlist. In this case productIds are from the shared wishlist and further sharing is disabled\n}\n\nexport const WishlistPager: React.FC = ({\n productIds,\n userId,\n pageSize,\n owner,\n}) => {\n const { spa_redirect_wishlist_to_pd } = useFeatureFlags();\n\n const {\n products,\n fetchMore,\n setProductWishlisted,\n loading,\n error,\n hasMore,\n isEmpty,\n } = useWishlistedProducts(productIds, !!owner, { pageSize });\n\n const trackAddToCartAsync = useTrackToCartAsync(\n productIds,\n GTM_WISHLIST_LIST_NAME\n );\n const addToCardCloudTracking = useAddToCartCloudTracking();\n const trackAddToCartFailedAsync = useTrackToCartFailedAsync(\n productIds,\n GTM_WISHLIST_LIST_NAME\n );\n\n const handleProductAdded = async (\n product: GetItemDataByIdQuery['vpProductById']\n ) => {\n await trackAddToCartAsync(product);\n\n addToCardCloudTracking({ quantity: 1, productCode: product.productCode });\n };\n\n return (\n \n \n\n {isEmpty || owner ? : }\n\n {!isEmpty && (\n \n )}\n\n {hasMore && (\n \n \n \n \n \n )}\n \n );\n};\n","import { useLocation } from 'react-router';\n\nexport const useWishlistOwnerId = (): string | null => {\n const { search } = useLocation();\n if (search) {\n return new URLSearchParams(search).get('id');\n }\n return null;\n};\n","import { useQuery } from '@apollo/client';\n\nimport {\n GetWishlistByLoggedUserOrOwnerQuery,\n GetWishlistByLoggedUserOrOwnerQueryVariables,\n} from '@notino/shared/definitions/types';\n\nimport { useWishlistOwnerId } from './hooks/useWishlistOwnerId';\nimport getWishlistByLoggedUserOrOwnerQuery from './queries/wishlistByLoggedUserOrOwner.graphql';\n\nexport const useWishlistForLoggedUserOrOwner = () => {\n const wishlistOwner = useWishlistOwnerId();\n\n const { data: loggedUserOrOwner, loading } = useQuery<\n GetWishlistByLoggedUserOrOwnerQuery,\n GetWishlistByLoggedUserOrOwnerQueryVariables\n >(getWishlistByLoggedUserOrOwnerQuery, {\n ssr: true,\n variables: {\n owner: wishlistOwner,\n },\n errorPolicy: 'all',\n });\n return {\n productIds: loggedUserOrOwner?.WishlistByLoggedUserOrOwner?.products ?? [],\n loading,\n owner: wishlistOwner,\n userId: loggedUserOrOwner?.user?.id,\n };\n};\n","import * as React from 'react';\n\nimport { useApolloClient, useQuery } from '@apollo/client';\n\nimport { DrawerContext, ModalContext } from '@notino/react-styleguide';\nimport {\n WishlistForCurrentUserQuery,\n WishlistForCurrentUserQueryVariables,\n} from '@notino/shared/definitions/types';\n\nimport { DrawerProvider } from '@components/BottomSheet/DrawerProvider';\n\nimport { WishlistPage } from './components/WishlistPage';\nimport { WishlistPager } from './components/WishlistPager';\nimport { trackWishlistPageView } from './components/WishlistPager/tracking';\nimport { WISHLIST_PAGE_SIZE } from './constants';\nimport { useWishlistOwnerId } from './hooks/useWishlistOwnerId';\nimport wishlistForCurrentUser from './queries/wishlistForCurrentUser.graphql';\nimport { createWishlistStore, WishlistContextProvider } from './store';\nimport { WishlistContainer } from './styled';\nimport { useWishlistForLoggedUserOrOwner } from './useWishlistForLoggedUserOrOwner';\n\nconst DeprecatedWishlist = () => {\n const { productIds, owner, userId } = useWishlistForLoggedUserOrOwner();\n return (\n \n \n \n \n \n \n \n );\n};\n\nconst NewWishlist = () => {\n const owner = useWishlistOwnerId();\n const { data } = useQuery<\n WishlistForCurrentUserQuery,\n WishlistForCurrentUserQueryVariables\n >(wishlistForCurrentUser, {\n errorPolicy: 'all',\n variables: {\n count: WISHLIST_PAGE_SIZE,\n },\n });\n\n if (data?.WishlistForCurrentUser) {\n const { listing, filtration } = data.WishlistForCurrentUser;\n return (\n x.webProductId)}\n products={listing.products.map((x) => x.product).filter(Boolean)}\n />\n );\n }\n\n return null;\n};\n\nconst NewWishlistInitialDataLoaded = (\n props: Parameters[0]\n) => {\n const [store] = React.useState(createWishlistStore(props, useApolloClient()));\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nconst WishList = () => {\n const owner = useWishlistOwnerId();\n\n // useLayoutEffect is used for tracking the page_view event to ensure the effect runs\n // before the children render, because their useEffect hooks might run after the render.\n React.useLayoutEffect(() => {\n trackWishlistPageView();\n }, []);\n\n if (owner) {\n return ;\n }\n\n return ;\n};\n\nexport default WishList;\n","\n var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"mutation\",\"name\":{\"kind\":\"Name\",\"value\":\"copyWishlist\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"owner\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}},\"directives\":[]},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"anonymousId\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}},\"directives\":[]}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"WishlistCopyWishlist\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"owner\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"owner\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"anonymousId\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"anonymousId\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]}]}}]}}],\"loc\":{\"start\":0,\"end\":142}};\n doc.loc.source = {\"body\":\"mutation copyWishlist($owner: String, $anonymousId: String) {\\n WishlistCopyWishlist(owner: $owner, anonymousId: $anonymousId) {\\n id\\n }\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n \n\n var names = {};\n function unique(defs) {\n return defs.filter(\n function(def) {\n if (def.kind !== 'FragmentDefinition') return true;\n var name = def.name.value\n if (names[name]) {\n return false;\n } else {\n names[name] = true;\n return true;\n }\n }\n )\n }\n \n\n // Collect any fragment/type references from a node, adding them to the refs Set\n function collectFragmentReferences(node, refs) {\n if (node.kind === \"FragmentSpread\") {\n refs.add(node.name.value);\n } else if (node.kind === \"VariableDefinition\") {\n var type = node.type;\n if (type.kind === \"NamedType\") {\n refs.add(type.name.value);\n }\n }\n\n if (node.selectionSet) {\n node.selectionSet.selections.forEach(function(selection) {\n collectFragmentReferences(selection, refs);\n });\n }\n\n if (node.variableDefinitions) {\n node.variableDefinitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n\n if (node.definitions) {\n node.definitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n }\n\n var definitionRefs = {};\n (function extractReferences() {\n doc.definitions.forEach(function(def) {\n if (def.name) {\n var refs = new Set();\n collectFragmentReferences(def, refs);\n definitionRefs[def.name.value] = refs;\n }\n });\n })();\n\n function findOperation(doc, name) {\n for (var i = 0; i < doc.definitions.length; i++) {\n var element = doc.definitions[i];\n if (element.name && element.name.value == name) {\n return element;\n }\n }\n }\n\n function oneQuery(doc, operationName) {\n // Copy the DocumentNode, but clear out the definitions\n var newDoc = {\n kind: doc.kind,\n definitions: [findOperation(doc, operationName)]\n };\n if (doc.hasOwnProperty(\"loc\")) {\n newDoc.loc = doc.loc;\n }\n\n // Now, for the operation we're running, find any fragments referenced by\n // it or the fragments it references\n var opRefs = definitionRefs[operationName] || new Set();\n var allRefs = new Set();\n var newRefs = new Set();\n\n // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n opRefs.forEach(function(refName) {\n newRefs.add(refName);\n });\n\n while (newRefs.size > 0) {\n var prevRefs = newRefs;\n newRefs = new Set();\n\n prevRefs.forEach(function(refName) {\n if (!allRefs.has(refName)) {\n allRefs.add(refName);\n var childRefs = definitionRefs[refName] || new Set();\n childRefs.forEach(function(childRef) {\n newRefs.add(childRef);\n });\n }\n });\n }\n\n allRefs.forEach(function(refName) {\n var op = findOperation(doc, refName);\n if (op) {\n newDoc.definitions.push(op);\n }\n });\n\n return newDoc;\n }\n \n module.exports = doc;\n \n module.exports[\"copyWishlist\"] = oneQuery(doc, \"copyWishlist\");\n \n\ndoc.documentId = \"dc7590f08a510a1721962bd622500cdbd24f74b776d0ec580e0f41046156a468\"","\n var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"WatchdogRegistered\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"catalogIds\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"ListType\",\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Int\"}}}}},\"directives\":[]}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"watchdogRegistered\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"catalogIds\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"catalogIds\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"registeredEmails\"},\"arguments\":[],\"directives\":[]}]}}]}}],\"loc\":{\"start\":0,\"end\":124}};\n doc.loc.source = {\"body\":\"query WatchdogRegistered($catalogIds: [Int!]!) {\\n watchdogRegistered(catalogIds: $catalogIds) {\\n registeredEmails\\n }\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n \n\n var names = {};\n function unique(defs) {\n return defs.filter(\n function(def) {\n if (def.kind !== 'FragmentDefinition') return true;\n var name = def.name.value\n if (names[name]) {\n return false;\n } else {\n names[name] = true;\n return true;\n }\n }\n )\n }\n \n\n // Collect any fragment/type references from a node, adding them to the refs Set\n function collectFragmentReferences(node, refs) {\n if (node.kind === \"FragmentSpread\") {\n refs.add(node.name.value);\n } else if (node.kind === \"VariableDefinition\") {\n var type = node.type;\n if (type.kind === \"NamedType\") {\n refs.add(type.name.value);\n }\n }\n\n if (node.selectionSet) {\n node.selectionSet.selections.forEach(function(selection) {\n collectFragmentReferences(selection, refs);\n });\n }\n\n if (node.variableDefinitions) {\n node.variableDefinitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n\n if (node.definitions) {\n node.definitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n }\n\n var definitionRefs = {};\n (function extractReferences() {\n doc.definitions.forEach(function(def) {\n if (def.name) {\n var refs = new Set();\n collectFragmentReferences(def, refs);\n definitionRefs[def.name.value] = refs;\n }\n });\n })();\n\n function findOperation(doc, name) {\n for (var i = 0; i < doc.definitions.length; i++) {\n var element = doc.definitions[i];\n if (element.name && element.name.value == name) {\n return element;\n }\n }\n }\n\n function oneQuery(doc, operationName) {\n // Copy the DocumentNode, but clear out the definitions\n var newDoc = {\n kind: doc.kind,\n definitions: [findOperation(doc, operationName)]\n };\n if (doc.hasOwnProperty(\"loc\")) {\n newDoc.loc = doc.loc;\n }\n\n // Now, for the operation we're running, find any fragments referenced by\n // it or the fragments it references\n var opRefs = definitionRefs[operationName] || new Set();\n var allRefs = new Set();\n var newRefs = new Set();\n\n // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n opRefs.forEach(function(refName) {\n newRefs.add(refName);\n });\n\n while (newRefs.size > 0) {\n var prevRefs = newRefs;\n newRefs = new Set();\n\n prevRefs.forEach(function(refName) {\n if (!allRefs.has(refName)) {\n allRefs.add(refName);\n var childRefs = definitionRefs[refName] || new Set();\n childRefs.forEach(function(childRef) {\n newRefs.add(childRef);\n });\n }\n });\n }\n\n allRefs.forEach(function(refName) {\n var op = findOperation(doc, refName);\n if (op) {\n newDoc.definitions.push(op);\n }\n });\n\n return newDoc;\n }\n \n module.exports = doc;\n \n module.exports[\"WatchdogRegistered\"] = oneQuery(doc, \"WatchdogRegistered\");\n \n\ndoc.documentId = \"82cb882cf111f1492220bfe7ad80a284104036d9f8237adbc3f4050e4d4a8331\"","\n var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"getWishlistByLoggedUserOrOwner\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"owner\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}},\"directives\":[]}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"WishlistByLoggedUserOrOwner\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"owner\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"owner\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"products\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"user\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]}]}}]}}],\"loc\":{\"start\":0,\"end\":148}};\n doc.loc.source = {\"body\":\"query getWishlistByLoggedUserOrOwner($owner: String) {\\n WishlistByLoggedUserOrOwner(owner: $owner) {\\n products\\n id\\n }\\n user {\\n id\\n }\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n \n\n var names = {};\n function unique(defs) {\n return defs.filter(\n function(def) {\n if (def.kind !== 'FragmentDefinition') return true;\n var name = def.name.value\n if (names[name]) {\n return false;\n } else {\n names[name] = true;\n return true;\n }\n }\n )\n }\n \n\n // Collect any fragment/type references from a node, adding them to the refs Set\n function collectFragmentReferences(node, refs) {\n if (node.kind === \"FragmentSpread\") {\n refs.add(node.name.value);\n } else if (node.kind === \"VariableDefinition\") {\n var type = node.type;\n if (type.kind === \"NamedType\") {\n refs.add(type.name.value);\n }\n }\n\n if (node.selectionSet) {\n node.selectionSet.selections.forEach(function(selection) {\n collectFragmentReferences(selection, refs);\n });\n }\n\n if (node.variableDefinitions) {\n node.variableDefinitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n\n if (node.definitions) {\n node.definitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n }\n\n var definitionRefs = {};\n (function extractReferences() {\n doc.definitions.forEach(function(def) {\n if (def.name) {\n var refs = new Set();\n collectFragmentReferences(def, refs);\n definitionRefs[def.name.value] = refs;\n }\n });\n })();\n\n function findOperation(doc, name) {\n for (var i = 0; i < doc.definitions.length; i++) {\n var element = doc.definitions[i];\n if (element.name && element.name.value == name) {\n return element;\n }\n }\n }\n\n function oneQuery(doc, operationName) {\n // Copy the DocumentNode, but clear out the definitions\n var newDoc = {\n kind: doc.kind,\n definitions: [findOperation(doc, operationName)]\n };\n if (doc.hasOwnProperty(\"loc\")) {\n newDoc.loc = doc.loc;\n }\n\n // Now, for the operation we're running, find any fragments referenced by\n // it or the fragments it references\n var opRefs = definitionRefs[operationName] || new Set();\n var allRefs = new Set();\n var newRefs = new Set();\n\n // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n opRefs.forEach(function(refName) {\n newRefs.add(refName);\n });\n\n while (newRefs.size > 0) {\n var prevRefs = newRefs;\n newRefs = new Set();\n\n prevRefs.forEach(function(refName) {\n if (!allRefs.has(refName)) {\n allRefs.add(refName);\n var childRefs = definitionRefs[refName] || new Set();\n childRefs.forEach(function(childRef) {\n newRefs.add(childRef);\n });\n }\n });\n }\n\n allRefs.forEach(function(refName) {\n var op = findOperation(doc, refName);\n if (op) {\n newDoc.definitions.push(op);\n }\n });\n\n return newDoc;\n }\n \n module.exports = doc;\n \n module.exports[\"getWishlistByLoggedUserOrOwner\"] = oneQuery(doc, \"getWishlistByLoggedUserOrOwner\");\n \n\ndoc.documentId = \"2ca31e664d87716f9446e5dabbc93405a8e1b1d15aa388a4e5f29699bf29f791\"","\n var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"WishlistForCurrentUser\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"navigationValues\"}},\"type\":{\"kind\":\"ListType\",\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Int\"}}}},\"directives\":[]},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"sortBy\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"WishlistSortBy\"}},\"directives\":[]},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"count\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Int\"}},\"directives\":[]},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"offset\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Int\"}},\"directives\":[]}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"WishlistForCurrentUser\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"navigationValues\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"navigationValues\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"sortBy\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"sortBy\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"count\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"count\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"offset\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"offset\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"listing\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sortByOptions\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sortBy\"},\"arguments\":[],\"directives\":[]}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"products\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"webProductId\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"product\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"fragmentVpProductByIdBodyModified\"},\"directives\":[]}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"totalProductCount\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hasMore\"},\"arguments\":[],\"directives\":[]}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"filtration\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"groupName\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"groupType\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"items\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"count\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"navigationValue\"},\"arguments\":[],\"directives\":[]}]}}]}}]}}]}}],\"loc\":{\"start\":0,\"end\":713}};\n doc.loc.source = {\"body\":\"#import \\\"../../../components/Universals/ProductItem/queries/fragVpProductById.graphql\\\"\\n\\nquery WishlistForCurrentUser(\\n $navigationValues: [Int!]\\n $sortBy: WishlistSortBy\\n $count: Int\\n $offset: Int\\n) {\\n WishlistForCurrentUser(\\n navigationValues: $navigationValues\\n sortBy: $sortBy\\n count: $count\\n offset: $offset\\n ) {\\n id\\n listing {\\n sortByOptions {\\n name\\n sortBy\\n }\\n products {\\n webProductId\\n product {\\n ...fragmentVpProductByIdBodyModified\\n }\\n }\\n totalProductCount\\n hasMore\\n }\\n filtration {\\n groupName\\n groupType\\n items {\\n name\\n count\\n navigationValue\\n }\\n }\\n }\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n \n\n var names = {};\n function unique(defs) {\n return defs.filter(\n function(def) {\n if (def.kind !== 'FragmentDefinition') return true;\n var name = def.name.value\n if (names[name]) {\n return false;\n } else {\n names[name] = true;\n return true;\n }\n }\n )\n }\n doc.definitions = doc.definitions.concat(unique(require(\"../../../components/Universals/ProductItem/queries/fragVpProductById.graphql\").definitions));\n\n\n // Collect any fragment/type references from a node, adding them to the refs Set\n function collectFragmentReferences(node, refs) {\n if (node.kind === \"FragmentSpread\") {\n refs.add(node.name.value);\n } else if (node.kind === \"VariableDefinition\") {\n var type = node.type;\n if (type.kind === \"NamedType\") {\n refs.add(type.name.value);\n }\n }\n\n if (node.selectionSet) {\n node.selectionSet.selections.forEach(function(selection) {\n collectFragmentReferences(selection, refs);\n });\n }\n\n if (node.variableDefinitions) {\n node.variableDefinitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n\n if (node.definitions) {\n node.definitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n }\n\n var definitionRefs = {};\n (function extractReferences() {\n doc.definitions.forEach(function(def) {\n if (def.name) {\n var refs = new Set();\n collectFragmentReferences(def, refs);\n definitionRefs[def.name.value] = refs;\n }\n });\n })();\n\n function findOperation(doc, name) {\n for (var i = 0; i < doc.definitions.length; i++) {\n var element = doc.definitions[i];\n if (element.name && element.name.value == name) {\n return element;\n }\n }\n }\n\n function oneQuery(doc, operationName) {\n // Copy the DocumentNode, but clear out the definitions\n var newDoc = {\n kind: doc.kind,\n definitions: [findOperation(doc, operationName)]\n };\n if (doc.hasOwnProperty(\"loc\")) {\n newDoc.loc = doc.loc;\n }\n\n // Now, for the operation we're running, find any fragments referenced by\n // it or the fragments it references\n var opRefs = definitionRefs[operationName] || new Set();\n var allRefs = new Set();\n var newRefs = new Set();\n\n // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n opRefs.forEach(function(refName) {\n newRefs.add(refName);\n });\n\n while (newRefs.size > 0) {\n var prevRefs = newRefs;\n newRefs = new Set();\n\n prevRefs.forEach(function(refName) {\n if (!allRefs.has(refName)) {\n allRefs.add(refName);\n var childRefs = definitionRefs[refName] || new Set();\n childRefs.forEach(function(childRef) {\n newRefs.add(childRef);\n });\n }\n });\n }\n\n allRefs.forEach(function(refName) {\n var op = findOperation(doc, refName);\n if (op) {\n newDoc.definitions.push(op);\n }\n });\n\n return newDoc;\n }\n \n module.exports = doc;\n \n module.exports[\"WishlistForCurrentUser\"] = oneQuery(doc, \"WishlistForCurrentUser\");\n \n\ndoc.documentId = \"4f3eaf7fa39b57d9ece63cb8122d03642419eae94a248413d4f4c47cfea7d948\""],"names":["zipRegexes","pattern","mask","LOGIN_URL","trackWishlistProductListImpression","products","productIds","interaction","transformedProducts","map","product","ProductEventWither","withVpProduct","withDiscountPrices","attributes","shouldSendOnlyDiscountPrice","withAdditionalData","list_position","findIndex","id","String","build","dispatchTrackingEvent","event","_clear","product_lists","list_name","GTM_WISHLIST_LIST_NAME","sorting_type","trackWishlistPageView","page","title","path","window","location","pathname","unified_name","type","GTM_WISHLIST_PAGE_TYPE","subpage","undefined","useTrackToCartAsync","listName","shouldUseCatalogId","trackAddToCart","useGetMasterAddToCart","async","catalogMasterId","toString","useTrackToCartFailedAsync","track","client","useApolloClient","React","position","errorMessage","data","query","getMasterProductInfoQuery","variables","masterProduct","productDetailByCatalogMasterId","add","withPartialProduct","brand","__typename","cart_type","_snakeCase","CartType","quantity","error","status","useGetTrackMasterAddToCartFail","WISHLIST_PAGE_SIZE","defineMessages","yourProducts","sharedProducts","noProducts","notLogged","emptyGuide","productsCount","refreshButton","Context","createContext","WishlistContextProvider","Provider","useWishlistStore","selector","ctx","useContext","Error","useStore","store","ProductListHolder","styled","componentId","columns","xs","md","_ref","productItemProps","showAddToCartModal","canSpaRedirect","isLoading","disableAnimation","isSharedWishlist","onProductInView","transitions","useTransition","from","opacity","enter","leave","keys","item","config","duration","clamp","registeredEmails","setRegisteredEmails","useState","isLoggedIn","useUser","catalogIdsWithWatchdog","filter","showWatchdog","catalogId","alreadyFetchedIds","Object","Number","catalogIdsToFetch","includes","shouldSkipRequest","length","useQuery","watchdogRegisteredQuery","catalogIds","skip","ssr","onCompleted","prev","watchdogRegistered","useRegisteredWatchdog","style","_","index","hasRegisteredWatchdog","Boolean","Col","_extends","key","animated","InView","threshold","onChange","inView","ProductItem","showWishlistButton","useMasterUrl","Array","fill","ProductTilePlaceholder","OverflowFadeWrapper","leftOverflow","css","_ref2","rightOverflow","ScrollableWrapper","noScrollbarCss","Arrow","_ref3","_ref4","breakpoints","OverflowFade","children","deps","scrollableElRef","rest","containerRef","showLeftArrow","showRightArrow","scrollTo","useArrows","onClick","role","IconRegularChevronLeft","color","height","width","ref","assignRefs","IconRegularChevronRight","sorting","addedRecentlySortOption","filtrationAll","show","brandsSearchPlaceholder","FiltersSectionWrapper","theme","InnerWrapper","CategoriesWrapper","FilterChipsWrapper","Divider","isScrolled","hideOnDesktop","ChipCount","useGetSelectedFilterItems","filtration","x","selectedNavigationValues","groupType","find","items","navigationValue","Categories","formatMessage","useIntl","setSelectedNavigationValues","actions","getSelectedFilterItems","categories","f","WishlistFiltrationGroupType","label","name","initialCategories","categoriesWithAll","messages","selectedCategoryNavValue","val","some","cv","current","showArrowCalulationOffset","CategoriesSelection","spacesSizeBetweenLabels","activeCategoryId","onCategorySelect","navValue","v","DrawerTitleContainer","StyledDrawerTitle","DrawerIconWrapper","DrawerDragger","DrawerTitleWrapper","CloseIconButton","RefreshButton","DrawerTitle","titleIcon","CloseIconElement","IconRegularClose","onRefreshButtonClick","afterClose","closeDrawer","DrawerContext","FormattedMessage","MultiSelectWrapper","BrandsMultiSelectWrapper","FooterWrapper","FooterButtonWrapper","DrawerSearchWrapper","Letter","isFirst","useMultiSelectList","selectedItems","isChecked","checked","setState","concat","BrandsMultiSelectList","search","setSearch","normalizeStringAndLowerCase","groups","groupBy","isInteger","toUpperCase","SearchInput","value","searchIconRight","placeholder","letter","FilterItemCheckbox","count","FooterSelectedItems","hasItems","prevSelectedItems","usePrevious","useUpdateEffect","left","scrollWidth","behavior","FooterSelectedItemsWrapper","FooterSelectedItem","handleUnselect","MultiSelectList","FiltrationDrawerHandler","onClose","isBrand","selectedNavValues","openDrawer","initialSelectedItems","createStore","handleApplyFilter","initialSelectedValues","selectedValues","getState","addedValues","removedValues","groupName","footerContent","Button","buttonStyle","ButtonModel","initialPosition","showCloseIcon","showFade","isTitleBorderHidden","allowResize","hideScrollbar","StyledRadioButton","RadioButton","withConfig","desiredOrder","WishlistSortBy","SortByOptionsList","sortByOptions","selectedSortBy","setSelectedSortBy","sortedSortOptions","sort","a","b","indexOf","sortBy","o","disabled","SortingChip","sortActive","FilterChip","isActive","openSortingDrawer","secondaryIcon","onSecondaryIconClick","SUPPORTED_GROUP_TYPES","FiltersSection","wrapperRef","isPastThreshold","setIsPastThreshold","useEffect","handleScroll","getBoundingClientRect","top","addEventListener","removeEventListener","useElementScrollDistanceFromTopThreshold","totalProductCount","state","openedDrawerGroupType","setOpenedDrawerGroupType","i","Container","ProductsCount","sortMapping","Default","Cheapest","MostExpensive","BestSellers","Alphabetically","wishlistMessages","toggle","header","shareLabel","clipboard","clipboardFail","IconTextButton","CircleBorder","LinkSharerCircleBorder","ModalBody","H3","Heading","LinkLabel","LinkInput","Message","props","getSemanticColor","WishlistLink","hostUrl","anonymousId","isCopySuccessful","readOnly","IconRegularCheckmark","IconSolidInfo","Modal","htmlFor","useCopyWishlistId","toggleModal","ModalContext","getTimeFromInit","useTrackingContext","setIsCopySuccessful","copyWishlist","useMutation","copyWishlistMutation","handleOnCopy","success","serverWishlistId","WishlistCopyWishlist","wishlist","action","timing","getWindowOrigin","size","ModalModel","noBorders","StyledHeader","StyledHeaderText","StyledLoginInfoText","StyledEmptyInfo","ButtonWrapper","WishlistContainer","Spacer","isSmall","HeaderWrapper","HeaderTitle","EmptyWrapper","Empty","text","dangerouslySetInnerHTML","__html","IconRegularHeart","WishlistHeader","isShared","isEmpty","uuid","isSafariOnDesktop","test","navigator","userAgent","vendor","IconRegularShareIos","visibility","CopyToClipboard","onCopy","handleNativeShare","share","url","showMobileSharing","WishlistPage","spa_redirect_wishlist_to_pd","useFeatureFlags","hasMore","totalFilteredProductCount","loading","setProductWishlisted","fetchProducts","trackAddToCartAsync","addToCardCloudTracking","useAddToCartCloudTracking","trackAddToCartFailedAsync","trackItemView","useWishlistViewItemListTracking","storeProducts","trackProductsImpression","_sortBy","scrollY","list_id","trackProductsImpressionBulk","useFunctionInBulk","p","AnimatedProductList","GTMEventLabel","sendGTM","noPriceIfUnavailable","showBuyButton","onProductAdded","productCode","onProductAddFailed","onClosingCartModal","inSectionOfType","wishlistActionLocation","rootMargin","offset","LinkSharer","IconRegularShare","showLoginText","values","parts","href","useWishlistedProducts","pageSize","nextPage","prevPage","removeNullProducts","isEnabled","remove","removeFromWishlistMutation","nullIds","promises","productId","Promise","all","callApi","finally","publishUpdateWishlistCountEvent","useRemoveNullWishlistProducts","setProducts","cache","getProductsByIdBatchedQuery","ids","useProductsSsrQuery","slice","ssrProducts","readQuery","vpProductByIds","useSsrWishlistProducts","fetchMore","onCompletedRef","self","result","setResult","queryResult","additionalOptions","useLazyQueryWorkaround","response","variableIds","isArray","allNewProducts","nonNullProducts","dispatchProductsShownEvent","webId","section","findNullProductIds","requestIds","nonNullProductIds","prod","endOfCurrentPage","idsThatShouldBeLoaded","productIdsToFetch","subtractArrays","wishlisted","WishlistPager","userId","owner","ActionButton","buttonSize","useWishlistOwnerId","useLocation","URLSearchParams","get","DeprecatedWishlist","useWishlistForLoggedUserOrOwner","wishlistOwner","loggedUserOrOwner","getWishlistByLoggedUserOrOwnerQuery","errorPolicy","WishlistByLoggedUserOrOwner","user","DrawerProvider","NewWishlist","wishlistForCurrentUser","WishlistForCurrentUser","listing","NewWishlistInitialDataLoaded","webProductId","initParams","set","navigationValues","fetchPolicy","createWishlistStore","WishList","doc","collectFragmentReferences","node","refs","kind","selectionSet","selections","forEach","selection","variableDefinitions","def","definitions","loc","source","definitionRefs","findOperation","element","Set","module","exports","operationName","newDoc","hasOwnProperty","opRefs","allRefs","newRefs","refName","prevRefs","has","childRef","op","push","oneQuery","documentId","names"],"sourceRoot":""}