better admin page/list link

This commit is contained in:
yohlo
2025-08-25 22:49:19 -05:00
parent 555d79b6db
commit 38fb060b78
4 changed files with 37 additions and 29 deletions

View File

@@ -1,22 +1,6 @@
import { createFileRoute } from "@tanstack/react-router"
import { Title } from "@mantine/core";
import Page from "@/components/page";
import { playerQueries } from "@/features/players/queries";
import { useQuery } from "@tanstack/react-query";
import PlayerList from "@/features/players/components/player-list";
import { AdminPage } from "@/features/admin";
export const Route = createFileRoute("/_authed/admin/")({
loader: async ({ context }) => {
const { queryClient } = context;
await queryClient.ensureQueryData(playerQueries.list())
},
component: RouteComponent,
component: () => <AdminPage />,
})
function RouteComponent() {
const { data: players, isLoading } = useQuery(playerQueries.list());
return <Page>
<Title order={2} mb='md'>Players</Title>
<PlayerList players={players!} loading={isLoading} />
</Page>
}

View File

@@ -1,4 +1,4 @@
import { NavLink, Text } from "@mantine/core";
import { Divider, NavLink, Text } from "@mantine/core";
import { CaretRightIcon, Icon } from "@phosphor-icons/react";
import { Link, useNavigate } from "@tanstack/react-router";
@@ -12,15 +12,18 @@ const ListLink = ({ label, to, Icon }: ListLinkProps) => {
const navigate = useNavigate();
return (
<NavLink
w='100%'
p='md'
component={'button'}
onClick={() => navigate({ to })}
label={<Text fw={500} size='md'>{label}</Text>}
leftSection={<Icon weight='bold' size={20} />}
rightSection={<CaretRightIcon size={20} />}
/>
<>
<NavLink
w='100%'
p='md'
component={'button'}
onClick={() => navigate({ to })}
label={<Text fw={500} size='md'>{label}</Text>}
leftSection={<Icon weight='bold' size={20} />}
rightSection={<CaretRightIcon size={20} />}
/>
<Divider />
</>
)
}

View File

@@ -0,0 +1,17 @@
import { Title, List, Divider } from "@mantine/core";
import ListLink from "@/components/list-link";
import Page from "@/components/page";
import { TrophyIcon } from "@phosphor-icons/react";
const AdminPage = () => {
return (
<Page noPadding>
<Title pl='sm' order={2} mb="md">Admin</Title>
<List>
<ListLink label="Manage Tournaments" Icon={TrophyIcon} to="/admin/tournaments" />
</List>
</Page>
);
};
export default AdminPage;

View File

@@ -1,3 +1,7 @@
import { Logger } from "@/lib/logger";
export const logger = new Logger('Admin');
export const logger = new Logger('Admin');
export { default as CreateTournament } from './components/create-tournament';
export { default as EditTournament } from './components/edit-tournament';
export { default as AdminPage } from './components/admin-page';