feat: button page turning exception

This commit is contained in:
TrèsAbhi committed 2023-11-13 21:41:37 -06:00
1 parent 64253d0120
commit 4f62a594b3
2 files changed
+19 -9

No files matched your search

@@ -5,7 +5,7 @@ import { useEffect, useRef } from 'react';
interface PageTurnerProps { interface PageTurnerProps {
page: number; page: number;
pages: number; pages: number;
onPageChange: (page: number) => void; onPageChange: (page: number, isButtonClick: boolean) => void;
} }
export function PageTurner({ page, onPageChange, pages }: PageTurnerProps) { export function PageTurner({ page, onPageChange, pages }: PageTurnerProps) {
@@ -20,7 +20,7 @@ export function PageTurner({ page, onPageChange, pages }: PageTurnerProps) {
<Flex gap="2"> <Flex gap="2">
<Button <Button
variant="soft" variant="soft"
onClick={() => onPageChange(Math.max(page - 1, 0))} onClick={() => onPageChange(Math.max(page - 1, 0), true)}
disabled={page === 0} disabled={page === 0}
> >
<CaretLeftIcon /> <CaretLeftIcon />
@@ -37,6 +37,7 @@ export function PageTurner({ page, onPageChange, pages }: PageTurnerProps) {
0, 0,
Math.min(pages - 1, event.target.valueAsNumber - 1), Math.min(pages - 1, event.target.valueAsNumber - 1),
), ),
false,
); );
}} }}
onKeyDown={(event) => { onKeyDown={(event) => {
@@ -50,7 +51,7 @@ export function PageTurner({ page, onPageChange, pages }: PageTurnerProps) {
<Button <Button
variant="soft" variant="soft"
onClick={() => { onClick={() => {
onPageChange(Math.min(page + 1, pages - 1)); onPageChange(Math.min(page + 1, pages - 1), true);
}} }}
disabled={page === pages - 1} disabled={page === pages - 1}
> >
+15 -6
View File
@@ -289,7 +289,6 @@ export default function Page() {
return neighbors; return neighbors;
} }
async function jumpToPosition(position: number) { async function jumpToPosition(position: number) {
if (!ratingsInfo || ratingsInfo?.detail) return; if (!ratingsInfo || ratingsInfo?.detail) return;
@@ -367,7 +366,7 @@ export default function Page() {
} }
} }
} }
async function handleJumpToScore() { async function jumpToScore() {
if (!ratingsInfo || ratingsInfo?.detail) return; if (!ratingsInfo || ratingsInfo?.detail) return;
const targetScore = scoreInput.current!.valueAsNumber; const targetScore = scoreInput.current!.valueAsNumber;
@@ -393,6 +392,11 @@ export default function Page() {
if (closestPlayer === null || closestScore === null) return; if (closestPlayer === null || closestScore === null) return;
if (closestScoreDistance === 0) {
setHighlightedPlayer({ type: 'id', id: closesIndex });
setPage(Math.floor(closesIndex / ROWS_PER_PAGE));
}
const loadingDirection = Math.sign(closestScore - targetScore); const loadingDirection = Math.sign(closestScore - targetScore);
let targetPlayer: RatingsPlayer; let targetPlayer: RatingsPlayer;
let scoreAcquired = false; let scoreAcquired = false;
@@ -523,7 +527,7 @@ export default function Page() {
placeholder="Type a score..." placeholder="Type a score..."
onKeyDown={(event) => { onKeyDown={(event) => {
if (event.key === 'Enter') { if (event.key === 'Enter') {
handleJumpToScore(); jumpToScore();
setJumpToScoreOpen(false); setJumpToScoreOpen(false);
} }
}} }}
@@ -534,7 +538,7 @@ export default function Page() {
<Button color="red">Cancel</Button> <Button color="red">Cancel</Button>
</Dialog.Close> </Dialog.Close>
<Dialog.Close> <Dialog.Close>
<Button onClick={handleJumpToScore}>Jump</Button> <Button onClick={jumpToScore}>Jump</Button>
</Dialog.Close> </Dialog.Close>
</Flex> </Flex>
</Flex> </Flex>
@@ -862,7 +866,9 @@ export default function Page() {
<PageTurner <PageTurner
page={page} page={page}
pages={pages} pages={pages}
onPageChange={(page) => jumpToPosition(page * ROWS_PER_PAGE)} onPageChange={(page, isButtonClick) =>
isButtonClick ? setPage(page) : jumpToPosition(page * ROWS_PER_PAGE)
}
/> />
<Leaderboard.Root> <Leaderboard.Root>
@@ -905,7 +911,9 @@ export default function Page() {
<PageTurner <PageTurner
page={page} page={page}
pages={pages} pages={pages}
onPageChange={(page) => jumpToPosition(page * ROWS_PER_PAGE)} onPageChange={(page, isButtonClick) =>
isButtonClick ? setPage(page) : jumpToPosition(page * ROWS_PER_PAGE)
}
/> />
{loadingProgress !== null && ( {loadingProgress !== null && (
@@ -938,6 +946,7 @@ export default function Page() {
maxWidth: 256, maxWidth: 256,
borderRadius: 8, borderRadius: 8,
backgroundColor: orangeDark.orange2, backgroundColor: orangeDark.orange2,
overflow: 'hidden',
}} }}
> >
<div <div