;\n onRefreshButtonClick?: () => void;\n}\n\nexport const DrawerTitle = ({\n name,\n titleIcon: CloseIconElement = IconRegularClose,\n onRefreshButtonClick,\n}: IDrawerTitleProps) => {\n const { closeDrawer } = DrawerContext.useDrawerContext();\n\n return (\n \n \n \n \n \n \n \n \n\n {name}\n {onRefreshButtonClick && (\n \n \n \n )}\n \n \n );\n};\n","import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n sorting: {\n id: 'wishlist.sorting.label',\n defaultMessage: 'Řazení',\n },\n addedRecentlySortOption: {\n id: 'wishlist.sorting.addedRecentlyOption',\n defaultMessage: 'Nedávno přidané',\n },\n});\n","import styled from 'styled-components';\n\nimport { breakpoints, RadioButton, theme } from '@notino/react-styleguide';\n\nexport const FiltersSectionWrapper = styled.div`\n position: sticky;\n top: 0;\n z-index: 10;\n background-color: ${theme.color.background.primary};\n`;\n\nexport const FilterChipsWrapper = styled.div`\n display: flex;\n gap: 0.5rem;\n padding: 0.5rem 1rem 0;\n\n @media (min-width: ${breakpoints.md}) {\n padding: 1.25rem 1rem 0.75rem;\n }\n`;\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\nexport const Divider = styled.div<{ hideOnDesktop?: boolean }>`\n width: 100%;\n padding-bottom: 0.5rem;\n\n box-shadow: 0px 2px 4px 0px rgba(71, 71, 71, 0.1),\n 0px 1px 2px 0px rgba(71, 71, 71, 0.06);\n\n @media (min-width: ${breakpoints.md}) {\n border-bottom: 1px solid ${theme.color.border.divider};\n box-shadow: none;\n width: calc(100% - 2rem);\n margin: 0 1rem;\n\n ${({ hideOnDesktop }) => hideOnDesktop && 'display:none;'}\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';\nimport { StyledRadioButton } from './styled';\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 return (\n \n {sortByOptions.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 '../components/DrawerTitle';\n\nimport messages from './messages';\nimport { SortByOptionsList } from './SortByOptionsList';\nimport { Divider, FilterChipsWrapper, FiltersSectionWrapper } from './styled';\n\nexport const FiltersSection = () => {\n const { openDrawer, closeDrawer } = DrawerContext.useDrawerContext();\n const { setSelectedSortBy } = useWishlistStore((x) => x.actions);\n const selectedSortBy = useWishlistStore((x) => x.selectedSortBy);\n const sortByOptions = useWishlistStore((x) => x.sortByOptions);\n const totalProductCount = useWishlistStore(\n (state) => state.totalProductCount\n );\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 });\n };\n\n if (totalProductCount < 5) {\n return ;\n }\n\n const sortActive = selectedSortBy !== WishlistSortBy.Default;\n\n return (\n \n \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 \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.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: ${theme.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 productIds = useWishlistStore((state) => state.productIds);\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 .withAdditionalData({\n id: product.id,\n list_position:\n productIds.findIndex((id) => String(id) === product.id) + 1,\n })\n .build()\n );\n };\n};\n\nexport type TrackedProduct = Product & { list_position: number; id: string };\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: center;\n align-items: center;\n\n @media (min-width: ${breakpoints.md}) {\n justify-content: start;\n padding: 0 1rem;\n margin: 2rem 0;\n }\n`;\n\nexport const HeaderTitle = styled.div`\n ${theme.typography.labelLarge}\n @media (min-width: ${breakpoints.md}) {\n ${theme.typography.titleLarge}\n }\n`;\n","import * as React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport messages from '@containers/WishList/messages';\n\nimport { HeaderTitle, HeaderWrapper } from './styled';\n\ntype Props = {\n isShared: boolean;\n};\n\nexport const WishlistHeader = ({ isShared }: Props) => {\n return (\n \n \n \n \n \n );\n};\n","import * as React from 'react';\nimport { useInView } 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 './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 totalProductCount = useWishlistStore(\n (state) => state.totalProductCount\n );\n const loading = useWishlistStore((state) => state.isLoading);\n const sortBy = useWishlistStore((state) => state.selectedSortBy);\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 \n\n \n : {totalProductCount}\n \n\n \n\n {hasMore && !loading && (\n \n fetchProducts({\n offset: productIds.length,\n sortBy,\n })\n }\n />\n )}\n \n );\n};\n\nconst LoadMoreSensor = ({ loadMore }: { loadMore: () => void }) => {\n const [ref] = useInView({\n rootMargin: '0px 0px 100px 0px',\n onChange: (inView) => {\n if (inView) {\n loadMore();\n }\n },\n });\n\n return ;\n};\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 * 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 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 * 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';\nimport { useFeatureFlags } from '@context/featureFlags/FeatureFlagsProvider';\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 return (\n x.webProductId\n )}\n products={data.WishlistForCurrentUser.listing.products\n .map((x) => x.product)\n .filter(Boolean)}\n hasMore={data.WishlistForCurrentUser.listing.hasMore}\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 const { pd_wishlist_filtration_and_sorting } = useFeatureFlags();\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 || !pd_wishlist_filtration_and_sorting) {\n return ;\n }\n\n return ;\n};\n\nexport default WishList;\n","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\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\":[]}]}}]}}]}}],\"loc\":{\"start\":0,\"end\":585}};\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 }\\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 = \"0342ce2b4ab7427b0f72d4cd156bafb8c1cdc386acc94c1271a97e604fbe054d\"","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CopyToClipboard = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _copyToClipboard = _interopRequireDefault(require(\"copy-to-clipboard\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar CopyToClipboard =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(CopyToClipboard, _React$PureComponent);\n\n function CopyToClipboard() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, CopyToClipboard);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(CopyToClipboard)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n var _this$props = _this.props,\n text = _this$props.text,\n onCopy = _this$props.onCopy,\n children = _this$props.children,\n options = _this$props.options;\n\n var elem = _react[\"default\"].Children.only(children);\n\n var result = (0, _copyToClipboard[\"default\"])(text, options);\n\n if (onCopy) {\n onCopy(text, result);\n } // Bypass onClick if it was present\n\n\n if (elem && elem.props && typeof elem.props.onClick === 'function') {\n elem.props.onClick(event);\n }\n });\n\n return _this;\n }\n\n _createClass(CopyToClipboard, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n _text = _this$props2.text,\n _onCopy = _this$props2.onCopy,\n _options = _this$props2.options,\n children = _this$props2.children,\n props = _objectWithoutProperties(_this$props2, [\"text\", \"onCopy\", \"options\", \"children\"]);\n\n var elem = _react[\"default\"].Children.only(children);\n\n return _react[\"default\"].cloneElement(elem, _objectSpread({}, props, {\n onClick: this.onClick\n }));\n }\n }]);\n\n return CopyToClipboard;\n}(_react[\"default\"].PureComponent);\n\nexports.CopyToClipboard = CopyToClipboard;\n\n_defineProperty(CopyToClipboard, \"defaultProps\", {\n onCopy: undefined,\n options: undefined\n});","\"use strict\";\n\nvar _require = require('./Component'),\n CopyToClipboard = _require.CopyToClipboard;\n\nCopyToClipboard.CopyToClipboard = CopyToClipboard;\nmodule.exports = CopyToClipboard;","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n"],"names":["e","zipRegexes","pattern","mask","LOGIN_URL","trackWishlistProductListImpression","products","productIds","interaction","transformedProducts","map","product","ProductEventWither","withVpProduct","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","i","displayName","o","isActive","t","hasIcon","c","a","s","r","n","icon","secondaryIcon","l","color","width","height","m","p","onClick","d","onSecondaryIconClick","stopPropagation","DrawerTitleContainer","StyledDrawerTitle","theme","DrawerIconWrapper","breakpoints","DrawerDragger","DrawerTitleWrapper","CloseIconButton","RefreshButton","DrawerTitle","name","titleIcon","CloseIconElement","IconRegularClose","onRefreshButtonClick","closeDrawer","DrawerContext","FormattedMessage","messages","sorting","addedRecentlySortOption","FiltersSectionWrapper","FilterChipsWrapper","StyledRadioButton","RadioButton","withConfig","Divider","hideOnDesktop","SortByOptionsList","sortByOptions","x","selectedSortBy","setSelectedSortBy","actions","sortBy","disabled","checked","WishlistSortBy","FiltersSection","openDrawer","state","totalProductCount","sortActive","FilterChip","find","openSortingDrawer","showCloseIcon","showFade","isTitleBorderHidden","allowResize","Container","ProductsCount","sortMapping","Default","Cheapest","MostExpensive","BestSellers","Alphabetically","HeaderWrapper","HeaderTitle","WishlistHeader","isShared","WishlistPage","spa_redirect_wishlist_to_pd","useFeatureFlags","hasMore","loading","setProductWishlisted","fetchProducts","trackAddToCartAsync","addToCardCloudTracking","useAddToCartCloudTracking","trackAddToCartFailedAsync","trackItemView","useWishlistViewItemListTracking","trackProductsImpression","_sortBy","scrollY","list_id","trackProductsImpressionBulk","useFunctionInBulk","AnimatedProductList","GTMEventLabel","sendGTM","noPriceIfUnavailable","showBuyButton","onProductAdded","productCode","onProductAddFailed","onClosingCartModal","inSectionOfType","wishlistActionLocation","LoadMoreSensor","loadMore","offset","ref","useInView","rootMargin","wishlistMessages","toggle","header","shareLabel","clipboard","clipboardFail","IconTextButton","CircleBorder","LinkSharerCircleBorder","ModalBody","H3","Heading","LinkLabel","LinkInput","Message","props","getSemanticColor","WishlistLink","hostUrl","anonymousId","isCopySuccessful","readOnly","value","IconRegularCheckmark","IconSolidInfo","Modal","htmlFor","LinkSharer","uuid","handleOnCopy","toggleModal","ModalContext","getTimeFromInit","useTrackingContext","setIsCopySuccessful","copyWishlist","useMutation","copyWishlistMutation","success","serverWishlistId","WishlistCopyWishlist","wishlist","action","timing","getWindowOrigin","size","ModalModel","noBorders","useCopyWishlistId","isSafariOnDesktop","test","navigator","userAgent","vendor","CopyToClipboard","text","onCopy","handleNativeShare","share","url","showMobileSharing","IconRegularShare","StyledHeader","StyledHeaderText","StyledLoginInfoText","StyledEmptyInfo","ButtonWrapper","WishlistContainer","Spacer","isSmall","isEmpty","showLoginText","dangerouslySetInnerHTML","__html","IconRegularHeart","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","current","self","result","setResult","queryResult","additionalOptions","useLazyQueryWorkaround","response","_ref2","variableIds","isArray","allNewProducts","nonNullProducts","dispatchProductsShownEvent","webId","section","findNullProductIds","requestIds","nonNullProductIds","prod","endOfCurrentPage","idsThatShouldBeLoaded","productIdsToFetch","subtractArrays","wishlisted","WishlistPager","userId","owner","ActionButton","buttonStyle","ButtonModel","buttonSize","useWishlistOwnerId","search","useLocation","URLSearchParams","get","DeprecatedWishlist","useWishlistForLoggedUserOrOwner","wishlistOwner","loggedUserOrOwner","getWishlistByLoggedUserOrOwnerQuery","errorPolicy","WishlistByLoggedUserOrOwner","user","DrawerProvider","NewWishlist","wishlistForCurrentUser","count","WishlistForCurrentUser","NewWishlistInitialDataLoaded","listing","webProductId","initParams","createStore","set","fetchPolicy","createWishlistStore","WishList","pd_wishlist_filtration_and_sorting","deselectCurrent","clipboardToIE11Formatting","module","exports","options","debug","message","reselectPrevious","range","selection","mark","document","createRange","getSelection","createElement","textContent","top","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","addEventListener","format","preventDefault","clipboardData","console","warn","clearData","setData","body","appendChild","selectNodeContents","addRange","execCommand","err","copyKey","replace","prompt","removeRange","removeAllRanges","removeChild","doc","collectFragmentReferences","node","refs","kind","selectionSet","selections","forEach","variableDefinitions","def","definitions","loc","source","definitionRefs","findOperation","element","Set","operationName","newDoc","hasOwnProperty","opRefs","allRefs","newRefs","refName","prevRefs","has","childRef","op","push","oneQuery","documentId","names","concat","defineProperty","_react","_interopRequireDefault","_copyToClipboard","obj","__esModule","_typeof","Symbol","iterator","constructor","prototype","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","apply","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","descriptor","configurable","writable","_possibleConstructorReturn","call","_assertThisInitialized","_getPrototypeOf","setPrototypeOf","getPrototypeOf","__proto__","ReferenceError","_setPrototypeOf","_defineProperty","_React$PureComponent","_getPrototypeOf2","_this","this","_len","arguments","args","_key","_this$props","children","elem","Children","only","protoProps","subClass","superClass","create","_inherits","_this$props2","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_objectWithoutProperties","cloneElement","getOwnPropertyDescriptors","defineProperties","_objectSpread","PureComponent","rangeCount","active","activeElement","ranges","getRangeAt","tagName","toUpperCase","blur","focus"],"sourceRoot":""}