From adb0bb2e6960d555adb468d32faef80efdaf749e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Wed, 13 Dec 2023 12:47:31 -0600 Subject: [PATCH] feat: versus tank lookup --- src/app/tools/tankopedia/[id]/page.tsx | 105 +++++++++++++++++++++++-- 1 file changed, 98 insertions(+), 7 deletions(-) diff --git a/src/app/tools/tankopedia/[id]/page.tsx b/src/app/tools/tankopedia/[id]/page.tsx index ebbedfb6a..ab9ce029b 100644 --- a/src/app/tools/tankopedia/[id]/page.tsx +++ b/src/app/tools/tankopedia/[id]/page.tsx @@ -1,6 +1,10 @@ 'use client'; -import { ArrowLeftIcon, CaretRightIcon } from '@radix-ui/react-icons'; +import { + ArrowLeftIcon, + CaretRightIcon, + MagnifyingGlassIcon, +} from '@radix-ui/react-icons'; import { Button, Card, @@ -8,16 +12,20 @@ import { Dialog, Flex, Heading, + Separator, Slider, Tabs, Text, + TextField, Theme, Tooltip, } from '@radix-ui/themes'; import { OrbitControls } from '@react-three/drei'; import { Canvas } from '@react-three/fiber'; +import { go } from 'fuzzysort'; +import { debounce } from 'lodash'; import Link from 'next/link'; -import { use, useEffect, useState } from 'react'; +import { use, useEffect, useRef, useState } from 'react'; import { Flag } from '../../../../components/Flag'; import PageWrapper from '../../../../components/PageWrapper'; import { asset } from '../../../../core/blitzkrieg/asset'; @@ -26,6 +34,7 @@ import { shellDefinitions } from '../../../../core/blitzkrieg/definitions/shells import { TIER_ROMAN_NUMERALS, tankDefinitions, + tankNamesDiacritics, tanksDefinitionsArray, } from '../../../../core/blitzkrieg/definitions/tanks'; import { turretDefinitions } from '../../../../core/blitzkrieg/definitions/turrets'; @@ -40,18 +49,25 @@ export default function Page({ params }: { params: { id: string } }) { const awaitedTurretDefinitions = use(turretDefinitions); const awaitedGunDefinitions = use(gunDefinitions); const awaitedShellDefinitions = use(shellDefinitions); + const awaitedTankNamesDiacritics = use(tankNamesDiacritics); const tank = awaitedTankDefinitions[id]; const [turret, setTurret] = useState( awaitedTurretDefinitions[tank.turrets[0]], ); const [gun, setGun] = useState(awaitedGunDefinitions[turret.guns[0]]); const [crew, setCrew] = useState(100); - const [versusTank, setVersusTank] = useState( + const [versusTankId, setVersusTankId] = useState( awaitedTanksDefinitionsArray[0].id, ); const [mode, setMode] = useState('model'); - - console.log(versusTank); + const versusTankSearchInput = useRef(null); + const [versusTankSearchResults, setVersusTankSearchResults] = useState< + number[] + >([]); + const [versusTankTurretId, setVersusTankTurretId] = useState( + awaitedTurretDefinitions[tank.turrets[0]].id, + ); + const versusTank = awaitedTankDefinitions[versusTankId]; useEffect(() => setGun(awaitedGunDefinitions[turret.guns[0]]), [turret]); @@ -120,12 +136,87 @@ export default function Page({ params }: { params: { id: string } }) { - Do something lol + + + + Search tank + + + + + + { + setVersusTankSearchResults( + go( + versusTankSearchInput.current!.value, + awaitedTankNamesDiacritics, + { key: 'combined', limit: 8 }, + ).map((item) => item.obj.id), + ); + }, 500)} + /> + + + + {(versusTankSearchResults.length > 0 || + versusTankSearchInput.current?.value) && ( + + {versusTankSearchResults.map((id) => ( + + ))} + + {versusTankSearchResults.length === 0 && + (versusTankSearchInput.current + ? versusTankSearchInput.current.value.length > 0 + : false) && ( + + )} + + )} + + + + + + {awaitedTankDefinitions[versusTankId].name} + + + + {versusTank.turrets.map((id) => ( + + ))} + + + +