diff --git a/pages/index.tsx b/pages/index.tsx index 2065bacc9..44a93c1d7 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -5,9 +5,11 @@ import getAllProducts from '@lib/bigcommerce/api/operations/get-all-products' import getSiteInfo from '@lib/bigcommerce/api/operations/get-site-info' import getAllPages from '@lib/bigcommerce/api/operations/get-all-pages' import rangeMap from '@lib/range-map' +import { getCategoryPath, getDesignerPath } from '@utils/search' import { Layout } from '@components/core' import { Grid, Marquee, Hero } from '@components/ui' import { ProductCard } from '@components/product' +import Link from 'next/link' export async function getStaticProps({ preview, @@ -132,21 +134,29 @@ export default function Home({
diff --git a/pages/search.tsx b/pages/search.tsx index 2c03ba1fb..3d18adb66 100644 --- a/pages/search.tsx +++ b/pages/search.tsx @@ -40,7 +40,10 @@ export default function Search({ const router = useRouter() const { asPath } = router const { q, sort } = router.query - const query = filterQuery({ q, sort }) + // `q` can be included but because categories and designers can't be searched + // in the same way of products, it's better to ignore the search input if one + // of those is selected + const query = filterQuery({ sort }) const { pathname, category, brand } = useSearchMeta(asPath) const activeCategory = categories.find( @@ -76,7 +79,7 @@ export default function Search({ > @@ -100,7 +103,7 @@ export default function Search({ > @@ -111,33 +114,50 @@ export default function Search({
-
- {data ? ( - <> - - Showing {data.products.length} results for " - {q}" - - - There are no products that match "{q}" - - - ) : ( - <> - Searching for: "{q}" - - )} -
+ {(q || activeCategory || activeBrand) && ( +
+ {data ? ( + <> + + Showing {data.products.length} results{' '} + {q && ( + <> + for "{q}" + + )} + + + {q ? ( + <> + There are no products that match "{q}" + + ) : ( + <> + There are no products that match the selected category & + designer + + )} + + + ) : q ? ( + <> + Searching for: "{q}" + + ) : ( + <>Searching... + )} +
+ )} {data ? ( diff --git a/utils/search.tsx b/utils/search.tsx index ae7a2ed7e..87b42db36 100644 --- a/utils/search.tsx +++ b/utils/search.tsx @@ -1,4 +1,5 @@ import { useEffect, useState } from 'react' +import getSlug from './get-slug' export function useSearchMeta(asPath: string) { const [pathname, setPathname] = useState('/search') @@ -34,11 +35,16 @@ export const filterQuery = (query: any) => return obj }, {}) -export const getCategoryPath = (slug: string, brand?: string) => - `/search${brand ? `/designers/${brand}` : ''}${slug ? `/${slug}` : ''}` +export const getCategoryPath = (path: string, brand?: string) => { + const category = getSlug(path) -export const getDesignerPath = (slug: string, category?: string) => { - const designer = slug.replace(/^brands/, 'designers') + return `/search${brand ? `/designers/${brand}` : ''}${ + category ? `/${category}` : '' + }` +} + +export const getDesignerPath = (path: string, category?: string) => { + const designer = getSlug(path).replace(/^brands/, 'designers') return `/search${designer ? `/${designer}` : ''}${ category ? `/${category}` : ''