diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json index fb3901668..c5ca3d70b 100644 --- a/packages/i18n/strings/en.json +++ b/packages/i18n/strings/en.json @@ -763,6 +763,8 @@ }, "tank_search": { + "select_dialog_title": "Search for tanks", + "swap_dialog_title": "Swap tank", "clear_filters": "Clear filters", "search_bar_hint": "Search tanks...", "recent": "Recently viewed", diff --git a/packages/varuna/src/index.ts b/packages/varuna/src/index.ts index a7108c2fa..adb812cba 100644 --- a/packages/varuna/src/index.ts +++ b/packages/varuna/src/index.ts @@ -39,6 +39,8 @@ export class Varuna { } useInitialization(...args: Arguments[]) { + if (this.initialized) return; + const initializedThisMount = useRef(false); if (initializedThisMount.current) return; @@ -53,6 +55,7 @@ export class Varuna { private dispatch() { const state = this.state; + console.log("dispatched"); this.listeners.forEach((callback) => callback(state)); } diff --git a/packages/website/src/components/Compare/TankControl.tsx b/packages/website/src/components/Compare/TankControl.tsx index 41c54f2b0..a9ebe9a4a 100644 --- a/packages/website/src/components/Compare/TankControl.tsx +++ b/packages/website/src/components/Compare/TankControl.tsx @@ -16,7 +16,7 @@ interface TankControlProps { const provisionDefinitions = await awaitableProvisionDefinitions; export function TankControl({ index, slug }: TankControlProps) { - const { locale } = useLocale(); + const { locale, strings } = useLocale(); const [switchTankDialogOpen, setSwitchTankDialogOpen] = useState(false); return ( @@ -44,7 +44,9 @@ export function TankControl({ index, slug }: TankControlProps) { - Switch tanks + + {strings.website.common.tank_search.swap_dialog_title} + - test hull - - - - test turret - - & { compact?: boolean; onSelect?: (tank: TankDefinition) => void; diff --git a/packages/website/src/components/Tankopedia/HeroSection/components/Options/index.tsx b/packages/website/src/components/Tankopedia/HeroSection/components/Options/index.tsx index 6645f2d83..0171aadca 100644 --- a/packages/website/src/components/Tankopedia/HeroSection/components/Options/index.tsx +++ b/packages/website/src/components/Tankopedia/HeroSection/components/Options/index.tsx @@ -331,7 +331,9 @@ export function Options({ thicknessRange, canvas, skeleton }: OptionsProps) { - Select tank + + {strings.website.common.tank_search.select_dialog_title} + { return tank.tier >= 10 && !turretModel.yaw; }); -export function Page({ locale }: LocaleAcceptorProps) { +export function Page({ + locale, + skeleton, +}: LocaleAcceptorProps & MaybeSkeletonComponentProps) { const hull = useRef(tanks[Math.floor(Math.random() * tanks.length)]); const turretTank = useRef(tanks[Math.floor(Math.random() * tanks.length)]); const turret = useRef( @@ -50,18 +70,132 @@ export function Page({ locale }: LocaleAcceptorProps) { }); return ( - - - + + + + + ); } -function Content() { +function ModuleButton({ + skeleton, + tank, + onSelect, + ...props +}: Omit & + MaybeSkeletonComponentProps & { + tank: number; + onSelect: TankSearchProps["onSelect"]; + }) { + const { strings } = useLocale(); + const [open, setOpen] = useState(false); + + return ( + + + + + + + + {strings.website.common.tank_search.select_dialog_title} + + + { + onSelect?.(tank); + setOpen(false); + }} + /> + + + ); +} + +function ModuleSeparator() { + return ( + + + + ); +} + +function Content({ skeleton }: MaybeSkeletonComponentProps) { + const hullId = Mixer.use((state) => state.hull.id); + const turretId = Mixer.use((state) => state.turret.tank.id); + const gunId = Mixer.use((state) => state.gun.tank.id); + return ( - + {!skeleton && } + + + { + Mixer.mutate((draft) => { + draft.hull = tank; + }); + }} + /> + + { + Mixer.mutate((draft) => { + draft.turret = { + tank, + turret: tank.turrets.at(-1)!, + }; + }); + }} + /> + + { + Mixer.mutate((draft) => { + draft.gun = { + tank, + turret: tank.turrets.at(-1)!, + gun: tank.turrets.at(-1)!.guns.at(-1)!, + }; + }); + }} + /> + ); } diff --git a/packages/website/src/pages/[...locale]/mixer/index.astro b/packages/website/src/pages/[...locale]/mixer/index.astro index 340362892..7cfaca4a2 100644 --- a/packages/website/src/pages/[...locale]/mixer/index.astro +++ b/packages/website/src/pages/[...locale]/mixer/index.astro @@ -9,7 +9,7 @@ const { locale } = Astro.params; --- - - - - + + + +