From 383196bdd3038c76cdd88b7262c11e73891a8aec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com>
Date: Thu, 22 Feb 2024 22:07:09 -0600
Subject: [PATCH] feat: clean url handling
---
.../tankopedia/[id]/components/AntagonistBar.tsx | 6 +++++-
.../tools/tankopedia/[id]/components/Title.tsx | 16 +++++-----------
src/core/blitzkrieg/updateTankopediaUrl.ts | 3 +++
3 files changed, 13 insertions(+), 12 deletions(-)
create mode 100644 src/core/blitzkrieg/updateTankopediaUrl.ts
diff --git a/src/app/tools/tankopedia/[id]/components/AntagonistBar.tsx b/src/app/tools/tankopedia/[id]/components/AntagonistBar.tsx
index b0bbe65dc..73aca405d 100644
--- a/src/app/tools/tankopedia/[id]/components/AntagonistBar.tsx
+++ b/src/app/tools/tankopedia/[id]/components/AntagonistBar.tsx
@@ -9,6 +9,7 @@ import {
Text,
Tooltip,
} from '@radix-ui/themes';
+import { useRouter } from 'next/navigation';
import { useState } from 'react';
import { ModuleButton } from '../../../../../components/ModuleButtons/ModuleButton';
import { ShellButton } from '../../../../../components/ModuleButtons/ShellButton';
@@ -18,6 +19,7 @@ import {
SHELL_NAMES,
TIER_ROMAN_NUMERALS,
} from '../../../../../core/blitzkrieg/tankDefinitions';
+import { updateTankopediaUrl } from '../../../../../core/blitzkrieg/updateTankopediaURL';
import { mutateDuel, useDuel } from '../../../../../stores/duel';
import {
mutateTankopediaTemporary,
@@ -35,6 +37,7 @@ export function AntagonistBar({ floating }: AntagonistBarProps) {
const [tab, setTab] = useState('search');
const [antagonistSelectorOpen, setAntagonistSelectorVisible] =
useState(false);
+ const router = useRouter();
if (mode !== 'armor') return null;
@@ -259,10 +262,11 @@ export function AntagonistBar({ floating }: AntagonistBarProps) {
draft.antagonist,
draft.protagonist,
];
+ updateTankopediaUrl(draft.antagonist!.tank.id);
});
}}
>
- Swap tanks
+ Swap
diff --git a/src/app/tools/tankopedia/[id]/components/Title.tsx b/src/app/tools/tankopedia/[id]/components/Title.tsx
index d28a0b36e..39ddb2a89 100644
--- a/src/app/tools/tankopedia/[id]/components/Title.tsx
+++ b/src/app/tools/tankopedia/[id]/components/Title.tsx
@@ -2,7 +2,9 @@ import { UpdateIcon } from '@radix-ui/react-icons';
import { Button, Dialog, Flex, Heading } from '@radix-ui/themes';
import { useState } from 'react';
import { TREE_TYPE_ICONS } from '../../../../../components/Tanks';
-import { mutateDuel, useDuel } from '../../../../../stores/duel';
+import { assignDuelMember } from '../../../../../core/blitzkrieg/assignDuelMember';
+import { updateTankopediaUrl } from '../../../../../core/blitzkrieg/updateTankopediaURL';
+import { useDuel } from '../../../../../stores/duel';
import { TankSearch } from '../../components/TankSearch';
export function Title() {
@@ -62,17 +64,9 @@ export function Title() {
{
- mutateDuel((draft) => {
- draft.protagonist!.tank = tank;
- draft.protagonist!.engine = tank.engines.at(-1)!;
- draft.protagonist!.track = tank.tracks.at(-1)!;
- draft.protagonist!.turret = tank.turrets.at(-1)!;
- draft.protagonist!.gun =
- draft.protagonist!.turret.guns.at(-1)!;
- draft.protagonist!.shell =
- draft.protagonist!.gun.shells[0];
- });
+ assignDuelMember('protagonist', tank.id);
setChangeTankDialogOpen(false);
+ updateTankopediaUrl(tank.id);
}}
/>
diff --git a/src/core/blitzkrieg/updateTankopediaUrl.ts b/src/core/blitzkrieg/updateTankopediaUrl.ts
new file mode 100644
index 000000000..302fb9d65
--- /dev/null
+++ b/src/core/blitzkrieg/updateTankopediaUrl.ts
@@ -0,0 +1,3 @@
+export function updateTankopediaUrl(id: number) {
+ window.history.pushState(null, '', `/tools/tankopedia/${id}`);
+}