forked from crowetic/commerce
Adding Search Skeleton
This commit is contained in:
parent
bf1ffcace9
commit
fddf85df4b
@ -1,25 +1,14 @@
|
|||||||
.skeleton {
|
.skeleton {
|
||||||
@apply block rounded-md;
|
@apply block rounded;
|
||||||
|
background-image: linear-gradient(
|
||||||
&.loaded {
|
270deg,
|
||||||
width: unset !important;
|
var(--accents-1),
|
||||||
}
|
var(--accents-2),
|
||||||
|
var(--accents-2),
|
||||||
&:not(.wrapper):not(.show) {
|
var(--accents-1)
|
||||||
display: none;
|
);
|
||||||
}
|
background-size: 400% 100%;
|
||||||
|
animation: loading 8s ease-in-out infinite;
|
||||||
&::not(.wrapper):not(.loaded) {
|
|
||||||
background-image: linear-gradient(
|
|
||||||
270deg,
|
|
||||||
var(--accents-1),
|
|
||||||
var(--accents-2),
|
|
||||||
var(--accents-2),
|
|
||||||
var(--accents-1)
|
|
||||||
);
|
|
||||||
background-size: 400% 100%;
|
|
||||||
animation: loading 8s ease-in-out infinite;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.wrapper {
|
.wrapper {
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
import cn from 'classnames'
|
|
||||||
import { FC } from 'react'
|
|
||||||
import s from './Featurebar.module.css'
|
|
||||||
|
|
||||||
interface Props {
|
|
||||||
className?: string
|
|
||||||
children?: any
|
|
||||||
}
|
|
||||||
|
|
||||||
const Featurebar: FC<Props> = ({ children, className }) => {
|
|
||||||
const rootClassName = cn(s.root, className)
|
|
||||||
return <div className={rootClassName}>{children}</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Featurebar
|
|
@ -1 +0,0 @@
|
|||||||
export { default } from './Featurebar'
|
|
@ -23,6 +23,7 @@
|
|||||||
"@tailwindcss/ui": "^0.6.2",
|
"@tailwindcss/ui": "^0.6.2",
|
||||||
"@types/classnames": "^2.2.10",
|
"@types/classnames": "^2.2.10",
|
||||||
"@types/react-swipeable-views": "^0.13.0",
|
"@types/react-swipeable-views": "^0.13.0",
|
||||||
|
"animate.css": "^4.1.1",
|
||||||
"classnames": "^2.2.6",
|
"classnames": "^2.2.6",
|
||||||
"cookie": "^0.4.1",
|
"cookie": "^0.4.1",
|
||||||
"js-cookie": "^2.2.1",
|
"js-cookie": "^2.2.1",
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
|
import '@assets/global.css'
|
||||||
|
import '@assets/tailwind.css'
|
||||||
|
import '@assets/utils.css'
|
||||||
|
import 'animate.css'
|
||||||
import { FC } from 'react'
|
import { FC } from 'react'
|
||||||
import { DefaultSeo } from 'next-seo'
|
import { DefaultSeo } from 'next-seo'
|
||||||
import type { AppProps } from 'next/app'
|
import type { AppProps } from 'next/app'
|
||||||
import { ThemeProvider } from 'next-themes'
|
import { ThemeProvider } from 'next-themes'
|
||||||
import { SSRProvider, OverlayProvider } from 'react-aria'
|
import { SSRProvider, OverlayProvider } from 'react-aria'
|
||||||
import '@assets/global.css'
|
|
||||||
import '@assets/tailwind.css'
|
|
||||||
import '@assets/utils.css'
|
|
||||||
import config from '../config.json'
|
import config from '../config.json'
|
||||||
import Head from 'next/head'
|
import Head from 'next/head'
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import cn from 'classnames'
|
|||||||
import getSiteInfo from '@lib/bigcommerce/api/operations/get-site-info'
|
import getSiteInfo from '@lib/bigcommerce/api/operations/get-site-info'
|
||||||
import useSearch from '@lib/bigcommerce/products/use-search'
|
import useSearch from '@lib/bigcommerce/products/use-search'
|
||||||
import { Layout } from '@components/core'
|
import { Layout } from '@components/core'
|
||||||
import { Container, Grid } from '@components/ui'
|
import { Container, Grid, Skeleton } from '@components/ui'
|
||||||
import { ProductCard } from '@components/product'
|
import { ProductCard } from '@components/product'
|
||||||
import {
|
import {
|
||||||
filterQuery,
|
filterQuery,
|
||||||
@ -14,6 +14,7 @@ import {
|
|||||||
getSlug,
|
getSlug,
|
||||||
useSearchMeta,
|
useSearchMeta,
|
||||||
} from '@utils/search'
|
} from '@utils/search'
|
||||||
|
import { range } from 'lodash'
|
||||||
|
|
||||||
export async function getStaticProps({ preview }: GetStaticPropsContext) {
|
export async function getStaticProps({ preview }: GetStaticPropsContext) {
|
||||||
const { categories, brands } = await getSiteInfo()
|
const { categories, brands } = await getSiteInfo()
|
||||||
@ -108,31 +109,47 @@ export default function Search({
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div className="col-span-8">
|
<div className="col-span-8">
|
||||||
{data ? (
|
<div className="mb-12 animate__animated animate__fadeIn">
|
||||||
<>
|
{data ? (
|
||||||
{q && (
|
<>
|
||||||
<div className="mb-12">
|
<span
|
||||||
{data.found ? (
|
className={cn('animate__animated', {
|
||||||
<>Showing {data.products.length} results for</>
|
animate__fadeIn: data.found,
|
||||||
) : (
|
hidden: !data.found,
|
||||||
<>There are no products that match</>
|
})}
|
||||||
)}{' '}
|
>
|
||||||
"<strong>{q}</strong>"
|
Showing {data.products.length} results for "
|
||||||
</div>
|
<strong>{q}</strong>"
|
||||||
)}
|
</span>
|
||||||
<Grid
|
<span
|
||||||
items={data.products}
|
className={cn('animate__animated', {
|
||||||
layout="normal"
|
animate__fadeIn: !data.found,
|
||||||
wrapper={ProductCard}
|
hidden: data.found,
|
||||||
/>
|
})}
|
||||||
</>
|
>
|
||||||
) : (
|
There are no products that match "<strong>{q}</strong>"
|
||||||
// TODO: add a proper loading state
|
</span>
|
||||||
<div>
|
</>
|
||||||
Searching...
|
) : (
|
||||||
<Skeleton></Skeleton>
|
<>
|
||||||
</div>
|
Searching for: "<strong>{q}</strong>"
|
||||||
)}
|
</>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<Grid
|
||||||
|
items={data ? data.products : range(12)}
|
||||||
|
layout="normal"
|
||||||
|
wrapper={
|
||||||
|
data
|
||||||
|
? ProductCard
|
||||||
|
: () => (
|
||||||
|
<Skeleton
|
||||||
|
className="w-full animate__animated animate__fadeIn rounded-md"
|
||||||
|
height={200}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="col-span-2">
|
<div className="col-span-2">
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -2462,6 +2462,11 @@ ally.js@1.4.1:
|
|||||||
css.escape "^1.5.0"
|
css.escape "^1.5.0"
|
||||||
platform "1.3.3"
|
platform "1.3.3"
|
||||||
|
|
||||||
|
animate.css@^4.1.1:
|
||||||
|
version "4.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/animate.css/-/animate.css-4.1.1.tgz#614ec5a81131d7e4dc362a58143f7406abd68075"
|
||||||
|
integrity sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==
|
||||||
|
|
||||||
anser@1.4.9:
|
anser@1.4.9:
|
||||||
version "1.4.9"
|
version "1.4.9"
|
||||||
resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760"
|
resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user