feat: migrated tankopedia search

This commit is contained in:
TrèsAbhi committed 2024-09-06 22:05:06 -05:00
1 parent 73c7bdf0c0
commit e1c8194beb
59 files changed
+146 -131

No files matched your search

@@ -1,5 +1,13 @@
'use client';
import {
asset,
gameDefinitions,
TANK_CLASSES,
Tier,
TIER_ROMAN_NUMERALS,
} from '@blitzkit/core';
import strings from '@blitzkit/core/lang/en-US.json';
import { ReloadIcon } from '@radix-ui/react-icons';
import { Box, Flex, IconButton, Text, Tooltip } from '@radix-ui/themes';
import { times } from 'lodash';
@@ -9,12 +17,6 @@ import { ExperimentIcon } from '../../../../components/ExperimentIcon';
import { ResearchedIcon } from '../../../../components/ResearchedIcon';
import { ScienceIcon } from '../../../../components/ScienceIcon';
import { ScienceOffIcon } from '../../../../components/ScienceOffIcon';
import { TANK_CLASSES } from '../../../../components/Tanks/components/Item/constants';
import { asset } from '../../../../core/blitzkit/asset';
import { gameDefinitions } from '../../../../core/blitzkit/gameDefinitions';
import { Tier } from '../../../../core/blitzkit/tankDefinitions';
import { TIER_ROMAN_NUMERALS } from '../../../../core/blitzkit/tankDefinitions/constants';
import strings from '../../../../lang/en-US.json';
import * as TankFilters from '../../../../stores/tankFilters';
interface FilterControlProps {
@@ -1,17 +1,15 @@
import {
asset,
modelDefinitions,
resolveNearPenetration,
TankDefinition,
tankIcon,
} from '@blitzkit/core';
import { Flex, Text } from '@radix-ui/themes';
import { assignInlineVars } from '@vanilla-extract/dynamic';
import Link from 'next/link';
import { use, useMemo } from 'react';
import { classIcons } from '../../../../components/ClassIcon';
import { resolveNearPenetration } from '../../../../core/blitz/resolveNearPenetration';
import { asset } from '../../../../core/blitzkit/asset';
import { modelDefinitions } from '../../../../core/blitzkit/modelDefinitions';
import { normalizeBoundingBox } from '../../../../core/blitzkit/normalizeBoundingBox';
import { resolveDpm } from '../../../../core/blitzkit/resolveDpm';
import { resolveReload } from '../../../../core/blitzkit/resolveReload';
import { TankDefinition } from '../../../../core/blitzkit/tankDefinitions';
import { tankIcon } from '../../../../core/blitzkit/tankIcon';
import { unionBoundingBox } from '../../../../core/blitzkit/unionBoundingBox';
import * as TankopediaSort from '../../../../stores/tankopediaSort';
import * as styles from './TankCard.css';
@@ -139,14 +137,16 @@ export function TankCard({ tank, onSelect }: TankCardProps) {
tank.treeType === 'collector'
? 'blue'
: tank.treeType === 'premium'
? 'amber'
: 'gray'
? 'amber'
: 'gray'
}
highContrast={tank.treeType === 'researchable'}
onClick={onSelect ? () => onSelect(tank) : undefined}
className={styles.card}
style={assignInlineVars({
[styles.cardBackgroundVar]: `top left / contain no-repeat url(${asset(`flags/scratched/${tank.nation}.webp`)})`,
[styles.cardBackgroundVar]: `top left / contain no-repeat url(${asset(
`flags/scratched/${tank.nation}.webp`,
)})`,
})}
>
<Link
@@ -1,26 +1,22 @@
'use client';
import {
TANK_CLASSES,
TankDefinition,
filterTank,
gameDefinitions,
modelDefinitions,
resolveNearPenetration,
tankDefinitions,
tankDefinitionsArray,
tankNames,
} from '@blitzkit/core';
import { Callout, Flex, FlexProps, Link, Text } from '@radix-ui/themes';
import { go } from 'fuzzysort';
import { times } from 'lodash';
import { Fragment, memo, use, useEffect, useMemo, useState } from 'react';
import { AdMidSectionResponsive } from '../../../../../components/AdMidSectionResponsive';
import { ExperimentIcon } from '../../../../../components/ExperimentIcon';
import { TANK_CLASSES } from '../../../../../components/Tanks/components/Item/constants';
import { resolveNearPenetration } from '../../../../../core/blitz/resolveNearPenetration';
import { filterTank } from '../../../../../core/blitzkit/filterTank';
import { gameDefinitions } from '../../../../../core/blitzkit/gameDefinitions';
import { modelDefinitions } from '../../../../../core/blitzkit/modelDefinitions';
import { normalizeBoundingBox } from '../../../../../core/blitzkit/normalizeBoundingBox';
import { resolveDpm } from '../../../../../core/blitzkit/resolveDpm';
import { resolveReload } from '../../../../../core/blitzkit/resolveReload';
import {
TankDefinition,
tankDefinitions,
tankDefinitionsArray,
} from '../../../../../core/blitzkit/tankDefinitions';
import { tankNames } from '../../../../../core/blitzkit/tankDefinitions/tankNames';
import { unionBoundingBox } from '../../../../../core/blitzkit/unionBoundingBox';
import { useAdExempt } from '../../../../../hooks/useAdExempt';
import * as TankFilters from '../../../../../stores/tankFilters';
import {
@@ -0,0 +1,58 @@
import { ComponentProps } from 'react';
export function ClassHeavy(props: ComponentProps<'svg'>) {
return (
<svg
width="64"
height="64"
viewBox="0 0 64 64"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g clipPath="url(#clip0_70_177)">
<g clipPath="url(#clip1_70_177)">
<rect
y="32"
width="45.2548"
height="12.4183"
rx="6.20914"
transform="rotate(-45 0 32)"
fill="currentColor"
/>
<rect
x="11.6095"
y="43.6095"
width="45.2548"
height="12.4183"
rx="6.20914"
transform="rotate(-45 11.6095 43.6095)"
fill="currentColor"
/>
<rect
x="23.2189"
y="55.219"
width="45.2548"
height="12.4183"
rx="6.20914"
transform="rotate(-45 23.2189 55.219)"
fill="currentColor"
/>
</g>
</g>
<defs>
<clipPath id="clip0_70_177">
<rect width="64" height="64" fill="white" />
</clipPath>
<clipPath id="clip1_70_177">
<rect
width="45.2548"
height="45.2548"
fill="white"
transform="translate(0 32) rotate(-45)"
/>
</clipPath>
</defs>
</svg>
);
}
@@ -0,0 +1,23 @@
import { ComponentProps } from 'react';
export function ClassLight(props: ComponentProps<'svg'>) {
return (
<svg
width="64"
height="64"
viewBox="0 0 64 64"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<rect
y="32"
width="45.2548"
height="45.2548"
rx="8"
transform="rotate(-45 0 32)"
fill="currentColor"
/>
</svg>
);
}
@@ -0,0 +1,49 @@
import { ComponentProps } from 'react';
export function ClassMedium(props: ComponentProps<'svg'>) {
return (
<svg
width="64"
height="64"
viewBox="0 0 64 64"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<g clipPath="url(#clip0_70_149)">
<g clipPath="url(#clip1_70_149)">
<rect
y="32"
width="45.2548"
height="20.6274"
rx="8"
transform="rotate(-45 0 32)"
fill="currentColor"
/>
<rect
x="17.4142"
y="49.4142"
width="45.2548"
height="20.6274"
rx="8"
transform="rotate(-45 17.4142 49.4142)"
fill="currentColor"
/>
</g>
</g>
<defs>
<clipPath id="clip0_70_149">
<rect width="64" height="64" fill="white" />
</clipPath>
<clipPath id="clip1_70_149">
<rect
width="45.2548"
height="45.2548"
fill="white"
transform="translate(0 32) rotate(-45)"
/>
</clipPath>
</defs>
</svg>
);
}
@@ -0,0 +1,19 @@
import { ComponentProps } from 'react';
export function ClassTankDestroyer(props: ComponentProps<'svg'>) {
return (
<svg
width="64"
height="64"
viewBox="0 0 64 64"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<path
d="M36.6355 54.572C34.7073 57.886 29.9201 57.8861 27.992 54.572L4.68577 14.5145C2.74639 11.1812 5.15107 7 9.00751 7H55.6199C59.4764 7 61.881 11.1812 59.9417 14.5145L36.6355 54.572Z"
fill="currentColor"
/>
</svg>
);
}
@@ -0,0 +1,16 @@
import { ComponentProps, ReactNode } from 'react';
import { TankClass } from '../Tanks';
import { ClassHeavy } from './components/ClassHeavy';
import { ClassLight } from './components/ClassLight';
import { ClassMedium } from './components/ClassMedium';
import { ClassTankDestroyer } from './components/ClassTankDestroyer';
export const classIcons: Record<
TankClass,
(props: ComponentProps<'svg'>) => ReactNode
> = {
'AT-SPG': ClassTankDestroyer,
heavyTank: ClassHeavy,
lightTank: ClassLight,
mediumTank: ClassMedium,
};
@@ -0,0 +1,16 @@
import { ComponentProps } from 'react';
export function ExperimentIcon(props: ComponentProps<'svg'>) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
height="24px"
viewBox="0 -960 960 960"
width="24px"
fill="currentColor"
{...props}
>
<path d="M200-120q-51 0-72.5-45.5T138-250l222-270v-240h-40q-17 0-28.5-11.5T280-800q0-17 11.5-28.5T320-840h320q17 0 28.5 11.5T680-800q0 17-11.5 28.5T640-760h-40v240l222 270q32 39 10.5 84.5T760-120H200Zm0-80h560L520-492v-268h-80v268L200-200Zm280-280Z" />
</svg>
);
}
@@ -1,7 +1,7 @@
import { assertSecret } from '@blitzkit/core';
import strings from '@blitzkit/core/lang/en-US.json';
import { Button, ButtonProps, Dialog, Flex } from '@radix-ui/themes';
import { REGIONS } from '../../../../../../src/constants/regions';
import strings from '../../../../../../src/lang/en-US.json';
import { Link } from '../../Link';
import { WargamingIcon } from '../../WargamingIcon';
@@ -0,0 +1,25 @@
import { ComponentProps } from 'react';
export function ResearchedIcon(props: ComponentProps<'svg'>) {
return (
<svg
width="64"
height="64"
viewBox="0 0 64 64"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<path
d="M63 25V43L48 51H60C58.5 53.6667 51.6 59 36 59L62 25H63Z"
fill="currentColor"
/>
<path d="M48 3L60 18L54 27L48 3Z" fill="currentColor" />
<path
d="M3 25V43L18 51H6C7.5 53.6667 14.4 59 30 59L4 25H3Z"
fill="currentColor"
/>
<path d="M18 3L6 18L12 27L18 3Z" fill="currentColor" />
</svg>
);
}
@@ -0,0 +1,16 @@
import { ComponentProps } from 'react';
export function ScienceIcon(props: ComponentProps<'svg'>) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
height="24px"
viewBox="0 -960 960 960"
width="24px"
fill="currentColor"
{...props}
>
<path d="M200-120q-51 0-72.5-45.5T138-250l222-270v-240h-40q-17 0-28.5-11.5T280-800q0-17 11.5-28.5T320-840h320q17 0 28.5 11.5T680-800q0 17-11.5 28.5T640-760h-40v240l222 270q32 39 10.5 84.5T760-120H200Zm80-120h400L544-400H416L280-240Zm-80 40h560L520-492v-268h-80v268L200-200Zm280-280Z" />
</svg>
);
}
@@ -0,0 +1,16 @@
import { ComponentProps } from 'react';
export function ScienceOffIcon(props: ComponentProps<'svg'>) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
height="24px"
viewBox="0 -960 960 960"
width="24px"
fill="currentColor"
{...props}
>
<path d="m600-473-80-80v-207h-80v127l-80-80v-47h-40q-17 0-28.5-11.5T280-800q0-17 11.5-28.5T320-840h320q17 0 28.5 11.5T680-800q0 17-11.5 28.5T640-760h-40v287ZM200-200h448L402-446 200-200ZM792-56l-64-64H200q-51 0-72.5-45.5T138-250l208-252L56-792l56-56 736 736-56 56ZM402-446Zm78-147Z" />
</svg>
);
}
@@ -0,0 +1,16 @@
import { ComponentProps } from 'react';
export function VerifiedIcon(props: ComponentProps<'svg'>) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
height="24px"
viewBox="0 -960 960 960"
width="24px"
fill="currentColor"
{...props}
>
<path d="m344-60-76-128-144-32 14-148-98-112 98-112-14-148 144-32 76-128 136 58 136-58 76 128 144 32-14 148 98 112-98 112 14 148-144 32-76 128-136-58-136 58Zm34-102 102-44 104 44 56-96 110-26-10-112 74-84-74-86 10-112-110-24-58-96-102 44-104-44-56 96-110 24 10 112-74 86 74 84-10 114 110 24 58 96Zm102-318Zm-42 142 226-226-56-58-170 170-86-84-56 56 142 142Z" />
</svg>
);
}
-1
View File
@@ -1,7 +1,6 @@
import { ObjectMap, useLoader } from '@react-three/fiber';
import { Mesh, MeshStandardMaterial } from 'three';
import { GLTF, GLTFLoader } from 'three-stdlib';
import { asset } from '../core/blitzkit/asset';
const cache: Record<
number,
+1 -3
View File
@@ -1,9 +1,7 @@
'use client';
import { Tier, createNextSafeStore } from '@blitzkit/core';
import { create } from 'zustand';
import { TankClass, TreeType } from '../components/Tanks';
import { Tier } from '../core/blitzkit/tankDefinitions';
import { createNextSafeStore } from '../core/zustand/createNextSafeStore';
export interface TankFilters {
tiers: Tier[];
@@ -1,12 +1,10 @@
'use client';
import { createNextSafeStore } from '@blitzkit/core';
import { merge } from 'lodash';
import { create } from 'zustand';
import { persist, subscribeWithSelector } from 'zustand/middleware';
import { ENVIRONMENTS } from '../../app/tools/tankopedia/[id]/components/Lighting';
import { TankClass, TreeType } from '../../components/Tanks';
import { Tier } from '../../core/blitzkit/tankDefinitions';
import { createNextSafeStore } from '../../core/zustand/createNextSafeStore';
import { SORT_NAMES, TankopediaDisplay } from './constants';
export type TankopediaSortBy = keyof typeof SORT_NAMES;
@@ -1,7 +1,7 @@
'use client';
import { createNextSafeStore } from '@blitzkit/core';
import { create } from 'zustand';
import { createNextSafeStore } from '../core/zustand/createNextSafeStore';
import {
TankopediaSortBy,
TankopediaSortDirection,