{"version":3,"file":"index-CLqG_x4x.js","sources":["../../../app/javascript/src/explore/scenes/ShopByRestaurant/scenes/Category/elements/Header/elements/CategoryCarousel/elements/Filter/index.tsx","../../../app/javascript/src/explore/scenes/ShopByRestaurant/scenes/Category/elements/Header/elements/CategoryCarousel/index.tsx","../../../app/javascript/src/explore/scenes/ShopByRestaurant/scenes/Category/elements/Header/index.tsx","../../../app/javascript/src/explore/scenes/ShopByRestaurant/scenes/Category/index.tsx","../../../app/javascript/src/explore/scenes/ShopByRestaurant/index.tsx"],"sourcesContent":["import * as React from 'react';\nimport cls from 'classnames';\nimport { Link } from 'react-router-dom';\n\nimport { Markdown } from 'src/explore/elements/Markdown';\nimport { SvgUse } from 'src/shoppe/elements/SvgUse';\nimport { useRoutes } from 'src/explore/hooks/useRoutes';\n\nimport styles from './index.module.sass';\n\ninterface Props {\n active: boolean;\n className?: string;\n permalink: string;\n title: string;\n}\n\nexport const Filter: React.FC<Props> = ({ active, className, permalink, title }) => {\n const routes = useRoutes();\n\n return (\n <Link\n to={routes.shopByRestaurantCategory( active ? '' : permalink )}\n className={cls( styles.link, 'd-block text-decoration-none', className )}\n >\n <SvgUse\n className={cls( 'd-inline-block', {\n 'text-secondary': active,\n })}\n height={32}\n name={`category-${permalink}`}\n width={32}\n />\n\n <Markdown className={cls( 'd-block mt-2', { 'text-secondary': active })}>{title}</Markdown>\n </Link>\n );\n};\n","import React from 'react';\nimport { Carousel } from '@goldbely/explore-component-library';\n\nimport { Filter } from './elements/Filter';\nimport { ICategory } from '../../../../types';\n\nimport styles from './index.module.sass';\n\ninterface CategoryCarouselProps {\n active: ICategory;\n categories: ICategory[];\n}\n\nexport const CategoryCarousel = ({ active, categories }: CategoryCarouselProps ) => (\n <Carousel classNames={{ padding: `${styles.bumper} flex-shrink-0` }} jumpToEdgeChild withFade>\n {categories.map(( category: ICategory, i: number ) => (\n <div\n className={`${styles.category} flex-shrink-0 ${\n i === 0 ? 'mr-2 mx-md-2' : 'mx-2'\n } text-center`}\n key={category.permalink}\n >\n <Filter active={active === category} permalink={category.permalink} title={category.name} />\n </div>\n ))}\n </Carousel>\n);\n","import * as React from 'react';\n\nimport { CategoryCarousel } from './elements/CategoryCarousel';\nimport { ICategory } from '../../types';\n\ninterface HeaderProps {\n categories: ICategory[];\n page: ICategory;\n}\n\nexport const Header: React.FC<HeaderProps> = ({ categories, page }) => (\n <header className=\"mb-7 mb-lg-6 spec__shop-by-restaurant-categories\">\n <h1 className=\"mb-6 mb-md-8 fs-8 fs-md-10 lh-1 text-uppercase\">\n {categories.find(( category ) => category === page )?.name || 'Shop All Restaurants'}\n </h1>\n\n <CategoryCarousel active={page} categories={categories} />\n </header>\n);\n","import * as React from 'react';\nimport camelCaseKeys from 'camelcase-keys';\nimport { Helmet } from 'react-helmet';\nimport { useLocation } from 'react-router-dom';\n\nimport { FilteredSearch } from 'src/explore/compositions/FilteredSearch';\nimport { MerchantGrid, IMerchant } from 'src/explore/compositions/MerchantGrid';\nimport { ISearchFilter } from 'src/explore/compositions/FilteredSearch/compositions/SearchFilter/types'; // FIXME: import\n\nimport { Header } from './elements/Header';\nimport { ICategory } from './types';\n\nconst ALL_SHOPS_CATEGORY: ICategory = { name: 'Shop All Restaurants', permalink: '' };\n// Order of filters is important!\nconst AVAILABLE_FILTERS: ISearchFilter[] = [ 'region', 'product_tags', 'on_sale' ];\n\ninterface Props {\n categories: ICategory[];\n availableFilters?: ISearchFilter[];\n}\n\nexport const Category: React.FC<Props> = ({ availableFilters = AVAILABLE_FILTERS, categories }) => {\n const location = useLocation();\n // FIXME: this should be using a router\n const categorySlug = location.pathname\n .replace( /\\/restaurants\\/?/, '' )\n .replace( /categories\\//, '' );\n let selectedCategory = categories.find(( category ) => category.permalink === categorySlug );\n if ( selectedCategory === undefined ) {\n selectedCategory = ALL_SHOPS_CATEGORY;\n }\n\n const params =\n selectedCategory && selectedCategory.permalink !== ''\n ? { 'categories.name': selectedCategory.name }\n : {};\n\n const seoCategoryName =\n selectedCategory.name === ALL_SHOPS_CATEGORY.name\n ? 'Top Restaurants & Food Makers'\n : `Best ${selectedCategory.name}`;\n\n return (\n <>\n <Helmet>\n <title>{`America’s ${seoCategoryName} — Ship Nationwide on Goldbelly®`}</title>\n <meta\n name=\"description\"\n content={`Order from America’s best ${\n selectedCategory.name === ALL_SHOPS_CATEGORY.name\n ? 'restaurants, bakeries, pizzerias, chefs & more gourmet food makers'\n : selectedCategory.name.toLowerCase()\n } online — shipped nationwide on Goldbelly®. Guaranteed to arrive fresh. Shop now!`}\n />\n </Helmet>\n\n <div className=\"fs-4\">\n <nav className=\"container-xl pt-12 pb-4 pb-lg-9 mt-1\">\n <Header categories={categories} page={selectedCategory} />\n\n <FilteredSearch<IMerchant>\n apiPath=\"merchants\"\n apiResponseParser={( response: any ) => Promise.resolve( response.data )}\n availableFilters={availableFilters}\n conditions={{ ...params, has_available_or_coming_soon_products: true }}\n filterColumnClass=\"col-xl-2\"\n filteredResultsColumnClass=\"col-xl-10\"\n loadMore=\"Show More Food Makers\"\n pageSize={30} // 15 rows\n syncUrl\n onRenderContent={({ data }) => (\n <MerchantGrid\n className=\"mt-n5 mt-lg-n3\"\n merchants={camelCaseKeys( data, { deep: true })}\n />\n )}\n onRenderHeader={({ filters: { product_tags }}) =>\n product_tags && (\n <h2 className=\"my-4 mt-sm-5 mb-sm-3 fs-6 fs-sm-8 spec__filter-diet-merchant-note\">\n {'Some '}\n <span className=\"text-secondary\">{( product_tags as any ).capitalize()}</span>\n {' Products May Be Available in These Shops'}\n </h2>\n )\n }\n >\n <h1 className=\"py-8 text-center\">Sorry, no merchants found.</h1>\n </FilteredSearch>\n </nav>\n </div>\n </>\n );\n};\n","import * as React from 'react';\nimport { BrowserRouter, Routes, Route } from 'react-router-dom';\n\nimport { useRoutes } from 'src/explore/hooks/useRoutes';\nimport { ScrollToTop } from 'src/explore/elements/ScrollToTop';\n\nimport { ISearchFilter } from 'src/explore/compositions/FilteredSearch/compositions/SearchFilter/types'; // FIXME: import\nimport { ICategory } from './scenes/Category/types';\nimport { Category } from './scenes/Category';\n\ninterface Props {\n categories: ICategory[];\n}\n\nconst AVAILABLE_FILTERS: ISearchFilter[] = [ 'region', 'product_tags' ];\n\nconst ShopByRestaurant: React.FC<Props> = ({ categories }) => {\n const routes = useRoutes();\n\n return (\n <BrowserRouter>\n <ScrollToTop />\n <Routes>\n <Route\n path={routes.shopByRestaurant( '*' )}\n element={<Category availableFilters={AVAILABLE_FILTERS} categories={categories} />}\n />\n <Route\n path={routes.shopByRestaurantCategory( '*' )}\n element={<Category availableFilters={AVAILABLE_FILTERS} categories={categories} />}\n />\n </Routes>\n </BrowserRouter>\n );\n};\n\nexport default ShopByRestaurant;\n"],"names":["Filter","active","className","permalink","title","routes","useRoutes","React.createElement","Link","cls","styles","SvgUse","Markdown","CategoryCarousel","categories","React","Carousel","category","i","Header","page","_a","ALL_SHOPS_CATEGORY","AVAILABLE_FILTERS","Category","availableFilters","categorySlug","useLocation","selectedCategory","params","seoCategoryName","React.Fragment","Helmet","FilteredSearch","response","data","MerchantGrid","camelCaseKeys","product_tags","ShopByRestaurant","BrowserRouter","ScrollToTop","Routes","Route"],"mappings":"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"}