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?.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?.description?.substring(0, v?.description?.substring(0, 80).lastIndexOf(' '))} …
|
))}
)}
>
)}
Results per page:
{[12, 24, 48].map((n) => (
))}
)
}