{"version":3,"file":"StoreLocatorPage-DCwMJDIC.js","sources":["../../../components/src/storelocator/StoreCard.tsx","../../../components/src/storelocator/Stores.tsx","../../../components/src/usePrismicStoreLocatorPage.ts","../../../components/src/storelocator/StoreLocatorPage.tsx"],"sourcesContent":["import { Picture } from '@emico-react/image'\nimport { css } from '@emotion/react'\nimport styled from '@emotion/styled'\nimport { i18n } from '@lingui/core'\nimport { t } from '@lingui/macro'\n\nimport OpenOrClosed from './OpenOrClosed'\nimport storeImageUrl from './storeImageUrl'\nimport { SrsStore } from './useSrsStore'\nimport Link from '../navigation/Link'\nimport paths from '../paths'\nimport breakpoints from '../theme/breakpoints'\nimport Heading from '../typography/Heading'\nimport Text from '../typography/Text'\nimport useResolveStoreUrl from '../useResolveStoreUrl'\n\ninterface Props {\n store: SrsStore\n storeView: string\n flagshipStore: boolean\n}\n\nconst StoreComponent = styled.article`\n border: 1px solid #cecece;\n background-color: #fff;\n display: flex;\n flex-flow: column nowrap;\n padding: 0;\n`\n\nconst Wrapper = styled.div<{ flagshipStore: boolean }>`\n display: flex;\n flex-flow: column nowrap;\n padding: 10px;\n flex: 1;\n order: 2;\n ${(props) => (props.flagshipStore ? 'text-align: center' : '')}\n`\n\nconst ContentWrapper = styled.div`\n margin-bottom: 10px;\n flex: 1;\n`\n\nconst StyledOpenOrClosed = styled(OpenOrClosed)`\n margin: 0 0 10px 0;\n`\n\nconst StoreCard = ({ store, storeView, flagshipStore }: Props) => {\n const { name, gPhone, shopId } = store\n\n const postal = store?.postal\n const city = store?.city\n const street = store?.street\n const number = store?.number\n const phone = gPhone\n\n const storeUrl = useResolveStoreUrl(shopId?.toString() ?? undefined)\n\n if (!name) {\n return null\n }\n\n const headingStyles =\n !flagshipStore &&\n css`\n margin-bottom: 20px;\n `\n\n return (\n \n \n \n \n {name}\n \n \n {street} {number}\n \n \n {postal}, {city}\n \n {phone && (\n \n \n \n {phone}\n \n \n \n )}\n \n\n {store?.gTimes && }\n\n {storeUrl && (\n \n {t({\n id: 'storelocator.storedetails.visitStore',\n message: `Visit store`,\n })}\n \n )}\n \n \n \n )\n}\n\nexport default StoreCard\n","import { css } from '@emotion/react'\n\nimport { useActiveStoreView } from '@emico/storeviews'\n\nimport StoreCard from './StoreCard'\nimport styles from './Stores.module.scss'\nimport { SrsStore } from './useSrsStore'\nimport { StoreFilter, useSrsStores } from './useSrsStores'\nimport Container from '../layout/Container'\nimport Grid from '../layout/Grid'\nimport GridItem from '../layout/Grid/GridItem'\nimport Heading from '../typography/Heading'\n\ninterface Props {\n title: string\n storeView: StoreFilter\n description?: string\n}\n\n/**\n * Applies storecode based filtering to the list of SRS stores\n *\n * @param storeCode store code of the website (e.g. pme_nl)\n * @param stores list of SRS stores\n * @returns list of SRS stores filtered by country code\n */\nconst filterStores = (storeCode: string, stores: SrsStore[]): SrsStore[] => {\n switch (storeCode) {\n case 'pme_nl':\n return stores.filter(\n (store) => store.countryCode?.toLowerCase() === 'nl',\n )\n case 'pme_be':\n case 'pme_be_fr':\n return stores.filter(\n (store) => store.countryCode?.toLowerCase() === 'be',\n )\n case 'pme_de':\n return stores.filter(\n (store) => store.countryCode?.toLowerCase() === 'de',\n )\n default:\n return stores\n }\n}\n\nconst Stores = ({ storeView, title, description }: Props) => {\n const { code: storeCode } = useActiveStoreView()\n\n const { data: stores } = useSrsStores({\n pageSize: 200,\n filters: {\n pme_store: storeView === 'pme',\n jb_store: storeView === 'justbrands',\n ci_store: storeView === 'castiron',\n },\n })\n\n const filteredStores = filterStores(storeCode, stores)\n\n if (filteredStores.length === 0) {\n return null\n }\n\n return (\n \n \n \n {title}\n \n {description && (\n \n {description}\n \n )}\n \n {filteredStores\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((store) => (\n \n \n \n ))}\n \n \n \n )\n}\n\nexport default Stores\n","import { usePrismicDocument } from '@emico/prismic'\nimport { useActiveStoreView } from '@emico/storeviews'\n\nimport { StorelocatorPage } from './graphql/schema.generated'\n\nconst usePrismicStoreLocatorPage = () => {\n const activeStoreView = useActiveStoreView()\n\n return usePrismicDocument(\n {\n key: 'my.storelocator_page.storeview',\n value: activeStoreView.prismic || 'pme',\n },\n true,\n )\n}\n\nexport default usePrismicStoreLocatorPage\n","import { css } from '@emotion/react'\nimport styled from '@emotion/styled'\nimport { i18n } from '@lingui/core'\nimport { t } from '@lingui/macro'\nimport { useState } from 'react'\nimport { Helmet } from 'react-helmet'\n\nimport { useActiveStoreView } from '@emico/storeviews'\nimport { useBreakpoints } from '@emico/ui'\n\nimport ResultDetailOverlay from './ResultDetailOverlay'\nimport SearchForm from './SearchForm'\nimport StoreMap from './StoreMap'\nimport Stores from './Stores'\nimport { SrsStore } from './useSrsStore'\nimport { LocationProps, StoreFilter, useSrsStores } from './useSrsStores'\nimport { Responsive } from '../core/Responsive'\nimport { SrsStoreFilterInput } from '../graphql/schema.generated'\nimport Header from '../layout/Header/Header'\nimport HeaderContainer from '../layout/Header/HeaderContainer'\nimport PageWrapper from '../layout/PageWrapper'\nimport PageLoader from '../presentation/PageLoader'\nimport PrismicCmsSlices from '../PrismicCmsSlices'\nimport PrismicGrid from '../PrismicGrid'\nimport usePrismicStoreLocatorPage from '../usePrismicStoreLocatorPage'\n\nconst StyledContainer = styled.div`\n height: 80vh;\n width: 100%;\n`\n\nconst StoreLocatorPage = () => {\n const [selectedStore, setSelectedStore] = useState()\n const [selectedStoreLocation, setSelectedStoreLocation] =\n useState()\n const [currentLocation, setCurrentLocation] = useState()\n const { isMobile } = useBreakpoints()\n\n const activeStore = useActiveStoreView()\n let filters: SrsStoreFilterInput = {}\n let storeView: StoreFilter = ''\n\n // Limit results to types of stores relevant to the site being viewed.\n // CI only lists stores that sell CI, and does not show PME branded stores.\n // PME only lists stores that sell PME, and does not show CI branded stores.\n // VG only lists stores that sell VG.\n // No need to exclude vg branded stores because there aren't any.\n if (activeStore.code.includes('castiron')) {\n storeView = 'castiron'\n filters = {\n ci: true,\n pme_store: false,\n }\n } else if (activeStore.code.includes('pme')) {\n storeView = 'pme'\n filters = {\n pme: true,\n ci_store: false,\n }\n } else if (activeStore.code.includes('vanguard')) {\n storeView = 'vanguard'\n filters = {\n vg: true,\n ci_store: false,\n pme_store: false,\n }\n } else if (activeStore.code.includes('justbrands')) {\n storeView = 'justbrands'\n filters = {\n jb_store: true,\n }\n }\n\n const {\n data: stores,\n filteredStores,\n loading,\n } = useSrsStores({\n coordinates: selectedStoreLocation,\n filters,\n pageSize: 3000,\n skipStock: true,\n })\n\n const { data: storelocatorData } = usePrismicStoreLocatorPage()\n const showStores = Boolean(storelocatorData?.showStores)\n const showJbStores = Boolean(storelocatorData?.showJbStores)\n const brandHeading =\n storelocatorData?.brandListHeading ||\n t({\n id: 'storelocator.page.storeTitle',\n message: `Brand stores`,\n })\n\n const brandSubheading =\n storelocatorData?.brandListSubheading ||\n t({\n id: 'storelocator.page.storeSubTitle',\n message: `Visit your nearest store`,\n })\n const jbHeading = storelocatorData?.jbListHeading || undefined\n const jbSubheading = storelocatorData?.jbListSubheading || undefined\n\n return (\n \n \n \n }\n >\n \n \n {t({\n id: 'storelocator.page.pageTitle',\n message: `PME Legend stores | Find a store near you`,\n })}\n \n \n \n\n {loading && }\n \n \n {!loading && (\n \n )}\n \n \n\n setSelectedStoreLocation(location)}\n setCurrentLocation={setCurrentLocation}\n onClose={() => setSelectedStore(undefined)}\n resetForm={() => {\n setSelectedStore(undefined)\n setSelectedStoreLocation(undefined)\n }}\n searchResultsLoading={loading}\n />\n\n \n setSelectedStore(undefined)}\n css={css`\n ${isMobile\n ? selectedStore\n ? 'opacity: 0.3'\n : 'opacity: 1'\n : ''}\n `}\n />\n \n\n {showStores && (\n \n \n
\n )}\n\n {showJbStores && jbHeading && (\n \n \n
\n )}\n\n {storelocatorData?.body && (\n \n \n \n )}\n \n )\n}\n\nexport default StoreLocatorPage\n"],"names":["StoreComponent","styled","Wrapper","props","flagshipStore","ContentWrapper","StyledOpenOrClosed","OpenOrClosed","StoreCard","store","storeView","name","gPhone","shopId","postal","city","street","number","phone","storeUrl","useResolveStoreUrl","toString","undefined","Heading","variant","element","css","Text","as","a","href","color","gTimes","_jsx","times","Link","category","to","paths","storeLocator","Picture","params","resizingType","alt","breakpoints","xs","url","storeImageUrl","width","height","md","lazy","filterStores","storeCode","stores","filter","countryCode","toLowerCase","Stores","title","description","code","useActiveStoreView","data","useSrsStores","pageSize","filters","pme_store","jb_store","ci_store","filteredStores","length","Container","section","className","styles","Grid","sm","lg","grid","sort","b","localeCompare","map","GridItem","storeId","usePrismicStoreLocatorPage","activeStoreView","usePrismicDocument","key","value","prismic","StyledContainer","StoreLocatorPage","selectedStore","setSelectedStore","useState","selectedStoreLocation","setSelectedStoreLocation","currentLocation","setCurrentLocation","isMobile","useBreakpoints","activeStore","includes","ci","pme","vg","loading","coordinates","skipStock","storelocatorData","showStores","Boolean","showJbStores","brandHeading","brandListHeading","brandSubheading","brandListSubheading","jbHeading","jbListHeading","jbSubheading","jbListSubheading","PageWrapper","pageType","header","HeaderContainer","Header","Helmet","meta","content","i18n","PageLoader","fullScreen","Responsive","up","StoreMap","amountResults","location","onSelect","zoomLevel","noResults","SearchForm","searchResults","onClose","resetForm","searchResultsLoading","down","ResultDetailOverlay","div","body","PrismicGrid","PrismicCmsSlices","slices","prismicType"],"mappings":"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"}