From 1bb83da253f3df64a6229aa5b50c08c9c0ff9c34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 7 Nov 2023 10:06:15 -0600 Subject: [PATCH] feat: per-page theming --- src/app/layout.tsx | 7 +- src/app/tools/ratings/page.tsx | 144 +++++++++--------- src/app/tools/session/page.tsx | 2 +- src/commands/ratings.tsx | 6 +- src/components/Leaderboard/components/Gap.tsx | 6 +- src/components/PageWrapper.tsx | 38 +++-- 6 files changed, 106 insertions(+), 97 deletions(-) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 2c03919e2..69c55312d 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -41,12 +41,7 @@ export default function RootLayout({ children }: RootLayoutProps) { : 'url(https://i.imgur.com/PhS06NJ.png)', }} > - + {!isEmbed && } {children} diff --git a/src/app/tools/ratings/page.tsx b/src/app/tools/ratings/page.tsx index 74b461107..6ad802b1d 100644 --- a/src/app/tools/ratings/page.tsx +++ b/src/app/tools/ratings/page.tsx @@ -5,14 +5,7 @@ import { CaretRightIcon, MagnifyingGlassIcon, } from '@radix-ui/react-icons'; -import { - Button, - Flex, - Popover, - Select, - Text, - TextField, -} from '@radix-ui/themes'; +import { Button, Flex, Popover, Select, TextField } from '@radix-ui/themes'; import { produce } from 'immer'; import { range } from 'lodash'; import { useEffect, useRef, useState } from 'react'; @@ -73,11 +66,15 @@ export default function Page() { } }); const [page, setPage] = useState(0); - const pageInput = useRef(null); const playerSlice = players.data?.slice( page * rowsPerPage, page * rowsPerPage + rowsPerPage, ); + const previousPage = () => setPage((page) => Math.max(page - 1, 0)); + const nextPage = () => + setPage((page) => + Math.min(page + 1, Math.floor((players.data?.length ?? 0) / rowsPerPage)), + ); cachePage(page - 1); cachePage(page); @@ -115,16 +112,51 @@ export default function Page() { } } - useEffect(() => { - if (pageInput.current) pageInput.current.value = `${page + 1}`; - }, [page]); - useEffect(() => { setPage(0); }, [season, region]); + function PageTurner() { + const pageInput = useRef(null); + + useEffect(() => { + if (pageInput.current) pageInput.current.value = `${page + 1}`; + }, [page]); + + return ( + + Page + { + setPage( + Math.max( + 0, + Math.min( + Math.floor((players.data?.length ?? 0) / rowsPerPage), + event.target.valueAsNumber - 1, + ), + ), + ); + }} + onKeyDown={(event) => { + if (event.key === 'Enter') { + (event.target as HTMLInputElement).blur(); + } + }} + /> + + out of {Math.ceil((players.data?.length ?? 0) / rowsPerPage)} + + + ); + } + return ( - + - - - Page - { - setPage( - Math.max( - 0, - Math.min( - Math.floor((players.data?.length ?? 0) / rowsPerPage), - event.target.valueAsNumber - 1, - ), - ), - ); - }} - onKeyDown={(event) => { - if (event.key === 'Enter') { - (event.target as HTMLInputElement).blur(); - } - }} - /> - - out of {Math.ceil((players.data?.length ?? 0) / rowsPerPage)} - - - - {playerSlice?.map((player, index) => ( - - ))} + {players.isLoading ? ( + + ) : ( + playerSlice?.map((player, index) => ( + + )) + )} - {players.isLoading && Loading...} + + + + + ); } diff --git a/src/app/tools/session/page.tsx b/src/app/tools/session/page.tsx index 7f9d19635..bfba6c65c 100644 --- a/src/app/tools/session/page.tsx +++ b/src/app/tools/session/page.tsx @@ -51,7 +51,7 @@ export default function Page() { }, [session]); return ( - +
diff --git a/src/commands/ratings.tsx b/src/commands/ratings.tsx index 3961de1a4..fc06f2322 100644 --- a/src/commands/ratings.tsx +++ b/src/commands/ratings.tsx @@ -474,10 +474,12 @@ export const ratingsCommand = new Promise( {items && ( {playersBefore > 0 && ( - + )} {items} - {playersAfter > 0 && } + {playersAfter > 0 && ( + + )} )} diff --git a/src/components/Leaderboard/components/Gap.tsx b/src/components/Leaderboard/components/Gap.tsx index fab9f6aba..ea99825a0 100644 --- a/src/components/Leaderboard/components/Gap.tsx +++ b/src/components/Leaderboard/components/Gap.tsx @@ -1,10 +1,10 @@ import { theme } from '../../../stitches.config'; export interface GapProps { - number: number; + message: string; } -export function Gap({ number }: GapProps) { +export function Gap({ message: number }: GapProps) { return (
- + {number.toLocaleString()} more + {number.toLocaleString()}
); diff --git a/src/components/PageWrapper.tsx b/src/components/PageWrapper.tsx index 71086349b..ecfc7a5f1 100644 --- a/src/components/PageWrapper.tsx +++ b/src/components/PageWrapper.tsx @@ -1,24 +1,32 @@ +import { Theme } from '@radix-ui/themes'; import { ComponentProps } from 'react'; +interface PageWrapperProps extends ComponentProps<'div'> { + color?: ComponentProps['accentColor']; +} + export default function PageWrapper({ style, + color, ...props -}: ComponentProps<'div'>) { +}: PageWrapperProps) { return ( -
+
+ ...style, + }} + {...props} + /> + ); }