import { CaretLeftIcon, CaretRightIcon } from '@radix-ui/react-icons'; import { Flex, IconButton, TextField } from '@radix-ui/themes'; import { useEffect, useRef } from 'react'; import { TankDefinition } from '../../../../core/blitzkit/tankDefinitions'; import mutateTankopediaPersistent, { useTankopediaPersistent, } from '../../../../stores/tankopedia'; interface PageTurnerProps { searchedList: TankDefinition[]; tanksPerPage: number; } export function PageTurner({ searchedList, tanksPerPage }: PageTurnerProps) { const page = useTankopediaPersistent((state) => state.filters.page); const pageInput = useRef(null); useEffect(() => { if (pageInput.current) pageInput.current.value = `${page + 1}`; }, [page]); return ( { mutateTankopediaPersistent((draft) => { draft.filters.page = Math.max(0, page - 1); }); }} > { mutateTankopediaPersistent((draft) => { draft.filters.page = Math.max( 0, Math.min( Math.floor(searchedList.length / tanksPerPage), event.target.valueAsNumber - 1, ), ); }); }} onKeyDown={(event) => { if (event.key === 'Enter') { (event.target as HTMLInputElement).blur(); } }} > Page out of {Math.floor(searchedList.length / tanksPerPage) + 1} { mutateTankopediaPersistent((draft) => { draft.filters.page = Math.min( Math.floor(searchedList.length / tanksPerPage), page + 1, ); }); }} > ); }