mirror of
https://github.com/nextui-org/nextui.git
synced 2025-12-08 19:26:11 +00:00
68 lines
1.8 KiB
TypeScript
68 lines
1.8 KiB
TypeScript
const App = `import {Table, TableHeader, TableColumn, TableBody, TableRow, TableCell, Pagination, Spinner, getKeyValue} from "@nextui-org/react";
|
|
import useSWR from "swr";
|
|
|
|
const fetcher = (...args) => fetch(...args).then((res) => res.json());
|
|
|
|
export default function App() {
|
|
const [page, setPage] = React.useState(1);
|
|
|
|
const {data, isLoading} = useSWR(\`https://swapi.py4e.com/api/people?page=\$\{page\}\`, fetcher, {
|
|
keepPreviousData: true,
|
|
});
|
|
|
|
const rowsPerPage = 10;
|
|
|
|
const pages = React.useMemo(() => {
|
|
return data?.count ? Math.ceil(data.count / rowsPerPage) : 0;
|
|
}, [data?.count, rowsPerPage]);
|
|
|
|
const loadingState = isLoading || data?.results.length === 0 ? "loading" : "idle";
|
|
|
|
return (
|
|
<Table
|
|
aria-label="Example table with client async pagination"
|
|
bottomContent={
|
|
pages > 0 ? (
|
|
<div className="flex w-full justify-center">
|
|
<Pagination
|
|
isCompact
|
|
showControls
|
|
showShadow
|
|
color="primary"
|
|
page={page}
|
|
total={pages}
|
|
onChange={(page) => setPage(page)}
|
|
/>
|
|
</div>
|
|
) : null
|
|
}
|
|
>
|
|
<TableHeader>
|
|
<TableColumn key="name">Name</TableColumn>
|
|
<TableColumn key="height">Height</TableColumn>
|
|
<TableColumn key="mass">Mass</TableColumn>
|
|
<TableColumn key="birth_year">Birth year</TableColumn>
|
|
</TableHeader>
|
|
<TableBody
|
|
items={data?.results ?? []}
|
|
loadingContent={<Spinner />}
|
|
loadingState={loadingState}
|
|
>
|
|
{(item) => (
|
|
<TableRow key={item?.name}>
|
|
{(columnKey) => <TableCell>{getKeyValue(item, columnKey)}</TableCell>}
|
|
</TableRow>
|
|
)}
|
|
</TableBody>
|
|
</Table>
|
|
);
|
|
}`;
|
|
|
|
const react = {
|
|
"/App.jsx": App,
|
|
};
|
|
|
|
export default {
|
|
...react,
|
|
};
|