Files
blitzkit/src/app/tools/compare/page.tsx
T

134 lines
4.2 KiB
TypeScript
Raw Normal View History

2024-04-04 10:46:48 -05:00
'use client';
import { PlusIcon } from '@radix-ui/react-icons';
import { Button, Dialog, Flex, Table, Text } from '@radix-ui/themes';
import { usePathname, useRouter, useSearchParams } from 'next/navigation';
import { use, useCallback, useState } from 'react';
2024-04-04 10:21:37 -05:00
import PageWrapper from '../../../components/PageWrapper';
2024-04-04 10:46:48 -05:00
import { tankDefinitions } from '../../../core/blitzkrieg/tankDefinitions';
import { tankIcon } from '../../../core/blitzkrieg/tankIcon';
import { TankSearch } from '../tankopedia/components/TankSearch';
2024-04-04 10:21:37 -05:00
export default function Page() {
2024-04-04 10:46:48 -05:00
const router = useRouter();
const pathname = usePathname();
const searchParams = useSearchParams();
const tanks = searchParams.get('tanks')?.split(',').map(Number) ?? [];
const awaitedTankDefinitions = use(tankDefinitions);
const [addTankDialogOpen, setAddTankDialogOpen] = useState(false);
const createQueryString = useCallback(
(name: string, value: string) => {
const params = new URLSearchParams(searchParams.toString());
params.set(name, value);
return params.toString();
},
[searchParams],
);
return (
2024-04-04 11:04:27 -05:00
<PageWrapper color="crimson" size="100%">
2024-04-04 10:46:48 -05:00
<Flex justify="center">
<Dialog.Root
open={addTankDialogOpen}
onOpenChange={setAddTankDialogOpen}
>
<Dialog.Trigger>
<Button>
<PlusIcon /> Add
</Button>
</Dialog.Trigger>
<Dialog.Content>
<Flex gap="4" direction="column">
<Flex
direction="column"
gap="4"
style={{ flex: 1 }}
justify="center"
>
<TankSearch
compact
onSelect={(tank) => {
tanks.push(tank.id);
router.push(
pathname +
'?' +
createQueryString('tanks', tanks.join(',')),
);
setAddTankDialogOpen(false);
}}
/>
</Flex>
</Flex>
</Dialog.Content>
</Dialog.Root>
</Flex>
2024-04-04 11:04:27 -05:00
{tanks.length > 0 && (
<Flex justify="center">
<Table.Root
variant="surface"
style={{
maxWidth: '100%',
}}
>
<Table.Header>
<Table.Row>
<Table.ColumnHeaderCell width="0">
2024-04-04 11:05:56 -05:00
<Flex
align="center"
justify="center"
style={{ width: '100%', height: '100%' }}
>
Statistics
</Flex>
2024-04-04 10:46:48 -05:00
</Table.ColumnHeaderCell>
2024-04-04 11:04:27 -05:00
{tanks.map((id) => {
const tank = awaitedTankDefinitions[id];
2024-04-04 10:46:48 -05:00
2024-04-04 11:04:27 -05:00
return (
<Table.ColumnHeaderCell width="0">
<Flex direction="column" align="center">
<img
src={tankIcon(id)}
width={64}
height={64}
style={{
objectFit: 'contain',
}}
/>
<Text>{tank.name}</Text>
</Flex>
</Table.ColumnHeaderCell>
);
})}
</Table.Row>
</Table.Header>
2024-04-04 10:46:48 -05:00
2024-04-04 11:04:27 -05:00
<Table.Body>
<Table.Row>
<Table.RowHeaderCell>Stat 1</Table.RowHeaderCell>
{tanks.map((id) => {
const tank = awaitedTankDefinitions[id];
2024-04-04 10:46:48 -05:00
2024-04-04 11:04:27 -05:00
return <Table.Cell>{Math.random()}</Table.Cell>;
})}
</Table.Row>
2024-04-04 10:46:48 -05:00
2024-04-04 11:04:27 -05:00
<Table.Row>
<Table.RowHeaderCell>Stat 2</Table.RowHeaderCell>
{tanks.map((id) => {
const tank = awaitedTankDefinitions[id];
return <Table.Cell>{Math.random()}</Table.Cell>;
})}
</Table.Row>
</Table.Body>
</Table.Root>
</Flex>
)}
2024-04-04 10:46:48 -05:00
</PageWrapper>
);
2024-04-04 10:21:37 -05:00
}