feat: more code polish

This commit is contained in:
TrèsAbhi committed 2023-11-08 19:28:22 -06:00
1 parent 551ef79f03
commit 18a5fb80d0
4 files changed
+257 -237

No files matched your search

@@ -0,0 +1,62 @@
import { CaretLeftIcon, CaretRightIcon } from '@radix-ui/react-icons';
import { Button, Flex, TextField } from '@radix-ui/themes';
import { useEffect, useRef } from 'react';
interface PageTurnerProps {
page: number;
pages: number;
setPage: (page: number | ((page: number) => number)) => void;
}
export function PageTurner({ page, setPage, pages }: PageTurnerProps) {
const pageInput = useRef<HTMLInputElement>(null);
useEffect(() => {
if (pageInput.current) pageInput.current.value = `${page + 1}`;
}, [page]);
return (
<Flex justify="center" wrap="wrap" gap="2">
<Flex gap="2">
<Button
variant="soft"
onClick={() => setPage((page) => Math.max(page - 1, 0))}
disabled={page === 0}
>
<CaretLeftIcon />
</Button>
<TextField.Root>
<TextField.Slot>Page</TextField.Slot>
<TextField.Input
type="number"
ref={pageInput}
style={{ width: 64, textAlign: 'center' }}
onBlur={(event) => {
setPage(
Math.max(
0,
Math.min(pages - 1, event.target.valueAsNumber - 1),
),
);
}}
onKeyDown={(event) => {
if (event.key === 'Enter') {
(event.target as HTMLInputElement).blur();
}
}}
/>
<TextField.Slot>out of {pages}</TextField.Slot>
</TextField.Root>
<Button
variant="soft"
onClick={() => {
setPage((page) => Math.min(page + 1, pages - 1));
}}
disabled={page === pages - 1}
>
<CaretRightIcon />
</Button>
</Flex>
</Flex>
);
}