diff options
| author | Rafi Zadanly <zadanlyr@gmail.com> | 2023-02-23 15:29:35 +0700 |
|---|---|---|
| committer | Rafi Zadanly <zadanlyr@gmail.com> | 2023-02-23 15:29:35 +0700 |
| commit | 2dd5b10049ff62656f160a9aa5b6627cd7ccbefc (patch) | |
| tree | 30b3b273f7a5542b39d2634a3d5dc4a5d4665547 /src | |
| parent | ccf4174e7e2e8a3f4cc35f243695f900f2172bb4 (diff) | |
fix
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/components/elements/Sidebar/Sidebar.jsx | 2 | ||||
| -rw-r--r-- | src/lib/brand/components/BrandCard.jsx | 22 | ||||
| -rw-r--r-- | src/lib/brand/components/Brands.jsx | 80 | ||||
| -rw-r--r-- | src/pages/shop/brands/index.jsx | 10 |
4 files changed, 107 insertions, 7 deletions
diff --git a/src/core/components/elements/Sidebar/Sidebar.jsx b/src/core/components/elements/Sidebar/Sidebar.jsx index cdeb3e05..22fda06b 100644 --- a/src/core/components/elements/Sidebar/Sidebar.jsx +++ b/src/core/components/elements/Sidebar/Sidebar.jsx @@ -79,7 +79,7 @@ const Sidebar = ({ active, close }) => { </div> <SidebarLink className={itemClassName} - href='/' + href='/shop/brands' > Semua Brand </SidebarLink> diff --git a/src/lib/brand/components/BrandCard.jsx b/src/lib/brand/components/BrandCard.jsx index e981c0d5..1bcdb5ab 100644 --- a/src/lib/brand/components/BrandCard.jsx +++ b/src/lib/brand/components/BrandCard.jsx @@ -6,13 +6,23 @@ const BrandCard = ({ brand }) => { return ( <Link href={createSlug('/shop/brands/', brand.name, brand.id)} - className='py-1 px-2 rounded border border-gray_r-6' + className='py-1 px-2 rounded border border-gray_r-6 h-12 flex justify-center items-center' > - <Image - src={brand.logo} - alt={brand.name} - className='h-10 object-contain object-center' - /> + {brand.logo && ( + <Image + src={brand.logo} + alt={brand.name} + className='h-full object-contain object-center' + /> + )} + {!brand.logo && ( + <span + className='text-center' + style={{ fontSize: `${14 - brand.name.length * 0.5}px` }} + > + {brand.name} + </span> + )} </Link> ) } diff --git a/src/lib/brand/components/Brands.jsx b/src/lib/brand/components/Brands.jsx new file mode 100644 index 00000000..22f47975 --- /dev/null +++ b/src/lib/brand/components/Brands.jsx @@ -0,0 +1,80 @@ +import odooApi from '@/core/api/odooApi' +import Spinner from '@/core/components/elements/Spinner/Spinner' +import { useCallback, useEffect, useState } from 'react' +import BrandCard from './BrandCard' + +const Brands = () => { + const alpha = Array.from(Array(26)).map((e, i) => i + 65) + const alphabets = alpha.map((x) => String.fromCharCode(x)) + + const [isLoading, setIsLoading] = useState(true) + const [startWith, setStartWith] = useState(null) + const [manufactures, setManufactures] = useState([]) + + const loadBrand = useCallback(async () => { + setIsLoading(true) + const name = startWith ? `${startWith}%` : '' + const result = await odooApi( + 'GET', + `/api/v1/manufacture?limit=0&offset=${manufactures.length}&name=${name}` + ) + setIsLoading(false) + setManufactures((manufactures) => [...manufactures, ...result.manufactures]) + }, [startWith]) + + const toggleStartWith = (alphabet) => { + setManufactures([]) + if (alphabet == startWith) { + setStartWith(null) + return + } + setStartWith(alphabet) + } + + useEffect(() => { + loadBrand() + }, [loadBrand]) + + if (isLoading) { + return ( + <div className='flex justify-center my-4'> + <Spinner className='w-6 text-gray_r-12/50 fill-gray_r-12' /> + </div> + ) + } + + return ( + <div className='p-4'> + <h1 className='font-semibold'>Semua Brand di Indoteknik</h1> + <div className='flex overflow-x-auto gap-x-2 py-2'> + {alphabets.map((alphabet, index) => ( + <button + key={index} + className={ + 'p-2 py-1 border bg-white border-gray_r-6 rounded w-10 flex-shrink-0' + + (startWith == alphabet ? ' !bg-yellow_r-9 border-yellow_r-9 ' : '') + } + type='button' + onClick={() => toggleStartWith(alphabet)} + > + {alphabet} + </button> + ))} + </div> + + <div className='grid grid-cols-4 gap-4 mt-4 !overflow-x-hidden'> + {manufactures?.map( + (manufacture, index) => + manufacture.name && ( + <BrandCard + brand={manufacture} + key={index} + /> + ) + )} + </div> + </div> + ) +} + +export default Brands diff --git a/src/pages/shop/brands/index.jsx b/src/pages/shop/brands/index.jsx new file mode 100644 index 00000000..5c01fd19 --- /dev/null +++ b/src/pages/shop/brands/index.jsx @@ -0,0 +1,10 @@ +import BasicLayout from '@/core/components/layouts/BasicLayout' +import BrandsComponent from '@/lib/brand/components/Brands' + +export default function Brands() { + return ( + <BasicLayout> + <BrandsComponent /> + </BasicLayout> + ) +} |
