import { Link } from '@chakra-ui/next-js' import { Alert, AlertIcon, Box, Button, ButtonGroup, Card, CardBody, Flex, HStack, Heading, IconButton, Image, LinkBox, LinkOverlay, SimpleGrid, Skeleton, Spinner, Table, Tbody, Td, Text, Tr, } from '@chakra-ui/react' import { useLocalStorageValue } from '@react-hookz/web' import { useRouter } from 'next/router' import { TbLayoutGrid, TbLayoutList } from 'react-icons/tb' import useSWR from 'swr' import Pagination from '~/components/pagination' const PER_PAGE = 12 export default function VendorsPage() { const router = useRouter() const { query: { page = 1 }, } = router const { value: perPage, set: setPerPage } = useLocalStorageValue('perPage', { defaultValue: PER_PAGE, initializeWithValue: false, }) const { value: layout, set: setLayout } = useLocalStorageValue('layout', { defaultValue: 'GRID', initializeWithValue: false, }) const { data, error, isLoading, isValidating } = useSWR(['vendors', page, perPage], async () => { // await new Promise((r) => setTimeout(r, 2000)) const url = new URL(`${process.env.NEXT_PUBLIC_DIRECTUS_API_URL}/items/vendors`) url.searchParams.append('fields[]', '*') url.searchParams.append('limit', perPage) url.searchParams.append('page', page) url.searchParams.append('sort', 'name') url.searchParams.append('meta[]', 'filter_count') const res = await fetch(url.toString()) if (!res.ok) { throw new Error('Oops') } return res.json() }) const { meta, data: vendors } = data || { meta: {}, data: [] } return (
Vendors {isValidating && } } onClick={() => setLayout('GRID')} isDisabled={layout === 'GRID'} /> } onClick={() => setLayout('LIST')} isDisabled={layout === 'LIST'} /> {error && ( There was an error processing your request )} {layout === 'GRID' && ( {isLoading && new Array(perPage).fill(true).map((v, k) => ( ))} {!isLoading && vendors.map((v) => ( {v.name} {v.name} {v?.description?.substring(0, v?.description?.substring(0, 80).lastIndexOf(' '))} … ))} )} {layout === 'LIST' && ( <> {isLoading && ( {new Array(perPage).fill(true).map((v, k) => ( ))}
)} {!isLoading && ( {vendors.map((v) => ( ))}
{v.name} {v.name} {v?.description?.substring(0, v?.description?.substring(0, 80).lastIndexOf(' '))} …
)} )} Results per page: {[12, 24, 48].map((n) => ( ))}
) }