From 5ba64f231afbea60f8e1d172f69df81f05f28b80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sun, 12 Oct 2025 18:20:00 -0500 Subject: [PATCH 01/22] fix: trimmer pagewrapper min height --- packages/website/src/components/PageWrapper.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/website/src/components/PageWrapper.tsx b/packages/website/src/components/PageWrapper.tsx index 8933a7795..287b36477 100644 --- a/packages/website/src/components/PageWrapper.tsx +++ b/packages/website/src/components/PageWrapper.tsx @@ -28,7 +28,9 @@ export function PageWrapper({ style={{ flex: noFlex1 ? undefined : 1, display: "flex", - minHeight: noMinHeight ? "unset" : `calc(100svh - ${NAVBAR_HEIGHT}px)`, + minHeight: noMinHeight + ? "unset" + : `calc(100svh - ${NAVBAR_HEIGHT}px - 7.75rem)`, flexDirection: "column", ...containerProps?.style, }} From ed0dde37d298ca6f8365f432a21c44aa338d7d25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sun, 12 Oct 2025 18:51:28 -0500 Subject: [PATCH 02/22] feat: playlist --- packages/i18n/strings/en.json | 8 ++ .../public/assets/images/tools/playlist.webp | Bin 0 -> 212948 bytes .../src/components/LocaleRedirector.astro | 4 +- .../src/components/PlaylistFilters.tsx | 82 ++++++++++++++++++ packages/website/src/constants/tools.ts | 10 ++- packages/website/src/layouts/BaseLayout.astro | 4 +- packages/website/src/layouts/ToolLayout.astro | 6 +- .../pages/[...locale]/performance/index.astro | 2 +- .../src/pages/[...locale]/playlist/_index.tsx | 21 +++++ .../pages/[...locale]/playlist/index.astro | 15 ++++ 10 files changed, 141 insertions(+), 11 deletions(-) create mode 100644 packages/website/public/assets/images/tools/playlist.webp create mode 100644 packages/website/src/components/PlaylistFilters.tsx create mode 100644 packages/website/src/pages/[...locale]/playlist/_index.tsx create mode 100644 packages/website/src/pages/[...locale]/playlist/index.astro diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json index 1cd725156..0af384bb6 100644 --- a/packages/i18n/strings/en.json +++ b/packages/i18n/strings/en.json @@ -859,6 +859,14 @@ }, "tools": { + "playlist": { + "name": "Playlist", + "description": "Tank playlist generator", + "seo_description": "Don't know what to play in World of Tanks Blitz? Use BlitzKit Playlist to get suggestions!", + "button": "Generate", + "pool_size": "{count} possible tanks" + }, + "mixer": { "name": "Mixer", "button": "Mix and match", diff --git a/packages/website/public/assets/images/tools/playlist.webp b/packages/website/public/assets/images/tools/playlist.webp new file mode 100644 index 0000000000000000000000000000000000000000..3504be291077d0fa49bc7f5b1f6b12b6717ec64d GIT binary patch literal 212948 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 $ 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 pmcQsgaSG;<73B)4y<4{kgWZ~?Si3!e=Z(7Qp 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

%&VpI(2JbBJ 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

Y7`hiHBZJ+KrHNpY(^} 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 YJzPF~t5~!?32>#&;!h5c8dtyo07@zq!~g&Q literal 0 HcmV?d00001 diff --git a/packages/website/src/components/LocaleRedirector.astro b/packages/website/src/components/LocaleRedirector.astro index b234ba4f3..68f61e45b 100644 --- a/packages/website/src/components/LocaleRedirector.astro +++ b/packages/website/src/components/LocaleRedirector.astro @@ -4,11 +4,11 @@ const isAPI = window.location.pathname.startsWith("/api"); const isI18nPath = locales.supported.some(({ locale }) => - window.location.pathname.startsWith(`/${locale}`) + window.location.pathname.startsWith(`/${locale}/`) ); const bestLocale = getBestLocale(); const currentPath = locales.supported.find(({ locale }) => - window.location.pathname.startsWith(`/${locale}`) + window.location.pathname.startsWith(`/${locale}/`) ); if ( diff --git a/packages/website/src/components/PlaylistFilters.tsx b/packages/website/src/components/PlaylistFilters.tsx new file mode 100644 index 000000000..8df4cc594 --- /dev/null +++ b/packages/website/src/components/PlaylistFilters.tsx @@ -0,0 +1,82 @@ +import { tankIcon } from "@blitzkit/core"; +import { literals } from "@blitzkit/i18n"; +import { Box, Flex, Grid, Text } from "@radix-ui/themes"; +import { useMemo } from "react"; +import usePromise from "react-promise-suspense"; +import { awaitableTankDefinitions } from "../core/awaitables/tankDefinitions"; +import { filterTanks } from "../core/blitzkit/filterTanks"; +import { useLocale } from "../hooks/useLocale"; +import { TankFilters } from "../stores/tankFilters"; +import { FilterControl } from "./TankSearch/components/FilterControl"; + +const tankDefinitions = await awaitableTankDefinitions; + +export function PlaylistPool() { + const { strings } = useLocale(); + const filters = TankFilters.use(); + const randomTankList = useMemo(() => { + const list = Object.values(tankDefinitions.tanks); + + for (let i = list.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [list[i], list[j]] = [list[j], list[i]]; + } + + return list; + }, [filters]); + const tanks = usePromise( + () => filterTanks(filters, randomTankList), + // react-promise-suspense has awful type annotations + [filters] as any + ); + const tanksTrimmed = useMemo(() => tanks.slice(0, 48), [filters]); + + return ( + + + + + {literals(strings.website.tools.playlist.pool_size, { + count: tanks.length, + })} + + + + + {tanksTrimmed.map((tank) => ( + + ))} + + + + + + ); +} diff --git a/packages/website/src/constants/tools.ts b/packages/website/src/constants/tools.ts index 6188a1b19..4dcb9ec69 100644 --- a/packages/website/src/constants/tools.ts +++ b/packages/website/src/constants/tools.ts @@ -35,14 +35,18 @@ export const tools: Record = { disabled: true, button: "bronze", }, - guess: { - id: "guess", - button: "cyan", + playlist: { + id: "playlist", + button: "tomato", }, mixer: { id: "mixer", button: "gray", }, + guess: { + id: "guess", + button: "cyan", + }, gallery: { id: "gallery", button: "gold", diff --git a/packages/website/src/layouts/BaseLayout.astro b/packages/website/src/layouts/BaseLayout.astro index 006807c4f..dc1070859 100644 --- a/packages/website/src/layouts/BaseLayout.astro +++ b/packages/website/src/layouts/BaseLayout.astro @@ -16,11 +16,11 @@ export interface Props { noFooter?: boolean; noNavbar?: boolean; integrated?: boolean; + locale: string; } const servicing = import.meta.env.SERVICING; -const { noFooter, noNavbar, integrated } = Astro.props; -const locale = Astro.params.locale; +const { noFooter, noNavbar, integrated, locale } = Astro.props; --- diff --git a/packages/website/src/layouts/ToolLayout.astro b/packages/website/src/layouts/ToolLayout.astro index 11f4190ab..348fec199 100644 --- a/packages/website/src/layouts/ToolLayout.astro +++ b/packages/website/src/layouts/ToolLayout.astro @@ -7,10 +7,10 @@ import BaseLayout from "./BaseLayout.astro"; interface Props { tool: Tool; + locale: string; } -const { tool } = Astro.props; -const { locale } = Astro.params; +const { tool, locale } = Astro.props; const strings = getStrings(locale); const toolStrings = strings.website.tools[ @@ -20,7 +20,7 @@ const toolStrings = - + - + diff --git a/packages/website/src/pages/[...locale]/playlist/_index.tsx b/packages/website/src/pages/[...locale]/playlist/_index.tsx new file mode 100644 index 000000000..7aa84a8aa --- /dev/null +++ b/packages/website/src/pages/[...locale]/playlist/_index.tsx @@ -0,0 +1,21 @@ +import { PageWrapper } from "../../../components/PageWrapper"; +import { PlaylistPool } from "../../../components/PlaylistFilters"; +import { LocaleProvider } from "../../../hooks/useLocale"; +import type { MaybeSkeletonComponentProps } from "../../../types/maybeSkeletonComponentProps"; + +interface Props { + locale: string; +} + +export function Page({ + locale, + skeleton, +}: Props & MaybeSkeletonComponentProps) { + return ( + + + + + + ); +} diff --git a/packages/website/src/pages/[...locale]/playlist/index.astro b/packages/website/src/pages/[...locale]/playlist/index.astro new file mode 100644 index 000000000..33cce4318 --- /dev/null +++ b/packages/website/src/pages/[...locale]/playlist/index.astro @@ -0,0 +1,15 @@ +--- +import { tools } from "../../../constants/tools"; +import ToolLayout from "../../../layouts/ToolLayout.astro"; +import { Page } from "./_index.tsx"; + +export { getStaticPaths } from "../index.astro"; + +const { locale } = Astro.params; +--- + + + + + + From bfceacdf3cfaecd609f8b9df6a2dab2c3bffcb20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sun, 12 Oct 2025 19:37:44 -0500 Subject: [PATCH 03/22] feat: playlist table --- bun.lock | 7 +++- packages/i18n/strings/en.json | 5 +++ packages/varuna/package.json | 3 +- .../src/components/PlaylistFilters.tsx | 12 ++++-- .../src/components/PlaylistGenerator.tsx | 34 ++++++++++++++++ .../website/src/components/PlaylistOrder.tsx | 38 ++++++++++++++++++ .../src/core/blitzkit/generatePlaylist.ts | 40 +++++++++++++++++++ packages/website/src/core/blitzkit/pwa.ts | 0 .../src/pages/[...locale]/playlist/_index.tsx | 21 +++++++++- packages/website/src/stores/playlist.ts | 13 ++++++ 10 files changed, 166 insertions(+), 7 deletions(-) create mode 100644 packages/website/src/components/PlaylistGenerator.tsx create mode 100644 packages/website/src/components/PlaylistOrder.tsx create mode 100644 packages/website/src/core/blitzkit/generatePlaylist.ts delete mode 100644 packages/website/src/core/blitzkit/pwa.ts create mode 100644 packages/website/src/stores/playlist.ts diff --git a/bun.lock b/bun.lock index 79e088ab6..8c5daddbe 100644 --- a/bun.lock +++ b/bun.lock @@ -118,8 +118,9 @@ "packages/varuna": { "name": "varuna", "dependencies": { + "@types/react": "^19.2.2", "immer": "^10.1.3", - "react": "^19.1.1", + "react": "^19.2.0", }, }, "packages/website": { @@ -2880,6 +2881,10 @@ "unbzip2-stream/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], + "varuna/@types/react": ["@types/react@19.2.2", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA=="], + + "varuna/react": ["react@19.2.0", "", {}, "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ=="], + "vscode-json-languageservice/jsonc-parser": ["jsonc-parser@3.3.1", "", {}, "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="], "which-builtin-type/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json index 0af384bb6..9a7815e7c 100644 --- a/packages/i18n/strings/en.json +++ b/packages/i18n/strings/en.json @@ -860,6 +860,11 @@ "tools": { "playlist": { + "table": { + "tank": "Tank" + }, + "no_login_warning": "You are not logged in. BlitzKit will not keep track of your played tanks.", + "generate": "Generate playlist", "name": "Playlist", "description": "Tank playlist generator", "seo_description": "Don't know what to play in World of Tanks Blitz? Use BlitzKit Playlist to get suggestions!", diff --git a/packages/varuna/package.json b/packages/varuna/package.json index ef1e420e5..afc1716cb 100644 --- a/packages/varuna/package.json +++ b/packages/varuna/package.json @@ -3,7 +3,8 @@ "type": "module", "main": "src/index.ts", "dependencies": { + "@types/react": "^19.2.2", "immer": "^10.1.3", - "react": "^19.1.1" + "react": "^19.2.0" } } diff --git a/packages/website/src/components/PlaylistFilters.tsx b/packages/website/src/components/PlaylistFilters.tsx index 8df4cc594..5f8e83fb6 100644 --- a/packages/website/src/components/PlaylistFilters.tsx +++ b/packages/website/src/components/PlaylistFilters.tsx @@ -7,12 +7,13 @@ import { awaitableTankDefinitions } from "../core/awaitables/tankDefinitions"; import { filterTanks } from "../core/blitzkit/filterTanks"; import { useLocale } from "../hooks/useLocale"; import { TankFilters } from "../stores/tankFilters"; +import { LinkI18n } from "./LinkI18n"; import { FilterControl } from "./TankSearch/components/FilterControl"; const tankDefinitions = await awaitableTankDefinitions; export function PlaylistPool() { - const { strings } = useLocale(); + const { strings, locale } = useLocale(); const filters = TankFilters.use(); const randomTankList = useMemo(() => { const list = Object.values(tankDefinitions.tanks); @@ -52,7 +53,10 @@ export function PlaylistPool() { width="100%" > {tanksTrimmed.map((tank) => ( - diff --git a/packages/website/src/components/PlaylistGenerator.tsx b/packages/website/src/components/PlaylistGenerator.tsx new file mode 100644 index 000000000..e8a968c1d --- /dev/null +++ b/packages/website/src/components/PlaylistGenerator.tsx @@ -0,0 +1,34 @@ +import { ExclamationTriangleIcon } from "@radix-ui/react-icons"; +import { Button, Flex, Text } from "@radix-ui/themes"; +import { generatePlaylist } from "../core/blitzkit/generatePlaylist"; +import { useLocale } from "../hooks/useLocale"; +import { App } from "../stores/app"; + +export function PlaylistGenerator() { + const { strings } = useLocale(); + const wargaming = App.use((state) => state.logins.wargaming); + + return ( + + + + {!wargaming && ( + + + + {strings.website.tools.playlist.no_login_warning} + + + )} + + ); +} diff --git a/packages/website/src/components/PlaylistOrder.tsx b/packages/website/src/components/PlaylistOrder.tsx new file mode 100644 index 000000000..e1439384f --- /dev/null +++ b/packages/website/src/components/PlaylistOrder.tsx @@ -0,0 +1,38 @@ +import { Checkbox, Flex, Table } from "@radix-ui/themes"; +import { useLocale } from "../hooks/useLocale"; +import { Playlist } from "../stores/playlist"; +import { TankRowHeaderCell } from "./TankRowHeaderCell"; + +export function PlaylistOrder() { + const { unwrap, strings } = useLocale(); + const list = Playlist.use((state) => state.list); + + if (!list) return null; + + return ( + + + + + + + {strings.website.tools.playlist.table.tank} + + + + + + {list.map(({ tank }) => ( + + + 0.5} /> + + + + + ))} + + + + ); +} diff --git a/packages/website/src/core/blitzkit/generatePlaylist.ts b/packages/website/src/core/blitzkit/generatePlaylist.ts new file mode 100644 index 000000000..b47235906 --- /dev/null +++ b/packages/website/src/core/blitzkit/generatePlaylist.ts @@ -0,0 +1,40 @@ +import { + getTankStats, + idToRegion, + type IndividualTankStats, +} from "@blitzkit/core"; +import { App } from "../../stores/app"; +import { Playlist } from "../../stores/playlist"; +import { TankFilters } from "../../stores/tankFilters"; +import { awaitableTankDefinitions } from "../awaitables/tankDefinitions"; +import { filterTanks } from "./filterTanks"; + +const tankDefinitions = await awaitableTankDefinitions; +const tanks = Object.values(tankDefinitions.tanks); + +export async function generatePlaylist() { + const id = App.state.logins.wargaming?.id; + const filtered = await filterTanks(TankFilters.state, tanks); + const statsList = id ? await getTankStats(idToRegion(id), id) : undefined; + const stats: Record = {}; + + if (statsList) { + for (const tankStat of statsList) { + stats[tankStat.tank_id] = tankStat; + } + } + + for (let i = filtered.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [filtered[i], filtered[j]] = [filtered[j], filtered[i]]; + } + + Playlist.mutate((draft) => { + draft.list = filtered.map((tank, index) => ({ + index, + tank, + battles: stats[tank.id]?.all.battles, + wins: stats[tank.id]?.all.wins, + })); + }); +} diff --git a/packages/website/src/core/blitzkit/pwa.ts b/packages/website/src/core/blitzkit/pwa.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/website/src/pages/[...locale]/playlist/_index.tsx b/packages/website/src/pages/[...locale]/playlist/_index.tsx index 7aa84a8aa..ce45efe53 100644 --- a/packages/website/src/pages/[...locale]/playlist/_index.tsx +++ b/packages/website/src/pages/[...locale]/playlist/_index.tsx @@ -1,6 +1,12 @@ +import { useEffect } from "react"; import { PageWrapper } from "../../../components/PageWrapper"; import { PlaylistPool } from "../../../components/PlaylistFilters"; +import { PlaylistGenerator } from "../../../components/PlaylistGenerator"; +import { PlaylistOrder } from "../../../components/PLaylistOrder"; import { LocaleProvider } from "../../../hooks/useLocale"; +import { App } from "../../../stores/app"; +import { Playlist } from "../../../stores/playlist"; +import { TankFilters } from "../../../stores/tankFilters"; import type { MaybeSkeletonComponentProps } from "../../../types/maybeSkeletonComponentProps"; interface Props { @@ -11,10 +17,23 @@ export function Page({ locale, skeleton, }: Props & MaybeSkeletonComponentProps) { + const list = Playlist.use((state) => state.list); + const wargaming = App.use((state) => state.logins.wargaming); + + useEffect(() => { + if (wargaming) { + TankFilters.mutate((draft) => { + draft.ownership = "owned"; + }); + } + }, []); + return ( - + + {!list && } + {list && } ); diff --git a/packages/website/src/stores/playlist.ts b/packages/website/src/stores/playlist.ts new file mode 100644 index 000000000..2084e15e7 --- /dev/null +++ b/packages/website/src/stores/playlist.ts @@ -0,0 +1,13 @@ +import type { TankDefinition } from "@blitzkit/core"; +import { Varuna } from "varuna"; + +export interface Playlist { + list?: { + index: number; + tank: TankDefinition; + battles?: number; + wins?: number; + }[]; +} + +export const Playlist = new Varuna({}, "playlist"); From ef173758aabc1d457390005f742f8634d08a13d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sun, 12 Oct 2025 22:48:14 -0500 Subject: [PATCH 04/22] feat: better landing screen --- packages/i18n/strings/en.json | 1 + .../src/components/PlaylistFilters.tsx | 86 ------------- .../src/components/PlaylistGenerator.tsx | 116 +++++++++++++++--- .../website/src/components/PlaylistOrder.tsx | 16 ++- .../src/pages/[...locale]/playlist/_index.tsx | 6 +- 5 files changed, 113 insertions(+), 112 deletions(-) delete mode 100644 packages/website/src/components/PlaylistFilters.tsx diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json index 9a7815e7c..515686ada 100644 --- a/packages/i18n/strings/en.json +++ b/packages/i18n/strings/en.json @@ -860,6 +860,7 @@ "tools": { "playlist": { + "clear": "Clear", "table": { "tank": "Tank" }, diff --git a/packages/website/src/components/PlaylistFilters.tsx b/packages/website/src/components/PlaylistFilters.tsx deleted file mode 100644 index 5f8e83fb6..000000000 --- a/packages/website/src/components/PlaylistFilters.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import { tankIcon } from "@blitzkit/core"; -import { literals } from "@blitzkit/i18n"; -import { Box, Flex, Grid, Text } from "@radix-ui/themes"; -import { useMemo } from "react"; -import usePromise from "react-promise-suspense"; -import { awaitableTankDefinitions } from "../core/awaitables/tankDefinitions"; -import { filterTanks } from "../core/blitzkit/filterTanks"; -import { useLocale } from "../hooks/useLocale"; -import { TankFilters } from "../stores/tankFilters"; -import { LinkI18n } from "./LinkI18n"; -import { FilterControl } from "./TankSearch/components/FilterControl"; - -const tankDefinitions = await awaitableTankDefinitions; - -export function PlaylistPool() { - const { strings, locale } = useLocale(); - const filters = TankFilters.use(); - const randomTankList = useMemo(() => { - const list = Object.values(tankDefinitions.tanks); - - for (let i = list.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [list[i], list[j]] = [list[j], list[i]]; - } - - return list; - }, [filters]); - const tanks = usePromise( - () => filterTanks(filters, randomTankList), - // react-promise-suspense has awful type annotations - [filters] as any - ); - const tanksTrimmed = useMemo(() => tanks.slice(0, 48), [filters]); - - return ( - - - - - {literals(strings.website.tools.playlist.pool_size, { - count: tanks.length, - })} - - - - - {tanksTrimmed.map((tank) => ( - - ))} - - - - - - ); -} diff --git a/packages/website/src/components/PlaylistGenerator.tsx b/packages/website/src/components/PlaylistGenerator.tsx index e8a968c1d..f93525756 100644 --- a/packages/website/src/components/PlaylistGenerator.tsx +++ b/packages/website/src/components/PlaylistGenerator.tsx @@ -1,34 +1,112 @@ +import { tankIcon } from "@blitzkit/core"; +import { literals } from "@blitzkit/i18n"; import { ExclamationTriangleIcon } from "@radix-ui/react-icons"; -import { Button, Flex, Text } from "@radix-ui/themes"; +import { Box, Button, Flex, Grid, Text } from "@radix-ui/themes"; +import { useMemo } from "react"; +import usePromise from "react-promise-suspense"; +import { awaitableTankDefinitions } from "../core/awaitables/tankDefinitions"; +import { filterTanks } from "../core/blitzkit/filterTanks"; import { generatePlaylist } from "../core/blitzkit/generatePlaylist"; import { useLocale } from "../hooks/useLocale"; import { App } from "../stores/app"; +import { TankFilters } from "../stores/tankFilters"; +import { LinkI18n } from "./LinkI18n"; +import { FilterControl } from "./TankSearch/components/FilterControl"; + +const tankDefinitions = await awaitableTankDefinitions; + +const POOL_HEIGHT = "16rem"; export function PlaylistGenerator() { - const { strings } = useLocale(); + const { strings, locale } = useLocale(); const wargaming = App.use((state) => state.logins.wargaming); + const filters = TankFilters.use(); + const randomTankList = useMemo(() => { + const list = Object.values(tankDefinitions.tanks); + + for (let i = list.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [list[i], list[j]] = [list[j], list[i]]; + } + + return list; + }, [filters]); + const tanks = usePromise( + () => filterTanks(filters, randomTankList, wargaming?.id), + // react-promise-suspense has awful type annotations + [filters] as any + ); + const tanksTrimmed = useMemo(() => tanks.slice(0, 65), [filters]); return ( - - + + + + + + + {!wargaming && ( + + + + {strings.website.tools.playlist.no_login_warning} + + + )} + + + + + {tanksTrimmed.map((tank) => ( + + ))} + + + - {!wargaming && ( - - - {strings.website.tools.playlist.no_login_warning} - + {literals(strings.website.tools.playlist.pool_size, { + count: tanks.length, + })} - )} + ); } diff --git a/packages/website/src/components/PlaylistOrder.tsx b/packages/website/src/components/PlaylistOrder.tsx index e1439384f..1d02e022f 100644 --- a/packages/website/src/components/PlaylistOrder.tsx +++ b/packages/website/src/components/PlaylistOrder.tsx @@ -1,16 +1,26 @@ -import { Checkbox, Flex, Table } from "@radix-ui/themes"; +import { Button, Checkbox, Flex, Table } from "@radix-ui/themes"; import { useLocale } from "../hooks/useLocale"; import { Playlist } from "../stores/playlist"; import { TankRowHeaderCell } from "./TankRowHeaderCell"; export function PlaylistOrder() { - const { unwrap, strings } = useLocale(); + const { strings } = useLocale(); const list = Playlist.use((state) => state.list); if (!list) return null; return ( - + + + diff --git a/packages/website/src/pages/[...locale]/playlist/_index.tsx b/packages/website/src/pages/[...locale]/playlist/_index.tsx index ce45efe53..499528bdb 100644 --- a/packages/website/src/pages/[...locale]/playlist/_index.tsx +++ b/packages/website/src/pages/[...locale]/playlist/_index.tsx @@ -1,8 +1,7 @@ import { useEffect } from "react"; import { PageWrapper } from "../../../components/PageWrapper"; -import { PlaylistPool } from "../../../components/PlaylistFilters"; import { PlaylistGenerator } from "../../../components/PlaylistGenerator"; -import { PlaylistOrder } from "../../../components/PLaylistOrder"; +import { PlaylistOrder } from "../../../components/PlaylistOrder"; import { LocaleProvider } from "../../../hooks/useLocale"; import { App } from "../../../stores/app"; import { Playlist } from "../../../stores/playlist"; @@ -30,8 +29,7 @@ export function Page({ return ( - - + {!list && } {list && } From cc957466fc836590741077f67243d253c8ea1371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sun, 12 Oct 2025 23:10:09 -0500 Subject: [PATCH 05/22] feat: action button --- .../website/src/components/PlaylistOrder.tsx | 126 +++++++++++++++++- .../src/core/blitzkit/generatePlaylist.ts | 2 +- packages/website/src/stores/playlist.ts | 1 + 3 files changed, 123 insertions(+), 6 deletions(-) diff --git a/packages/website/src/components/PlaylistOrder.tsx b/packages/website/src/components/PlaylistOrder.tsx index 1d02e022f..37519dd3e 100644 --- a/packages/website/src/components/PlaylistOrder.tsx +++ b/packages/website/src/components/PlaylistOrder.tsx @@ -1,4 +1,17 @@ -import { Button, Checkbox, Flex, Table } from "@radix-ui/themes"; +import { + ChevronUpIcon, + DoubleArrowDownIcon, + DoubleArrowUpIcon, + MinusCircledIcon, +} from "@radix-ui/react-icons"; +import { + Button, + Checkbox, + ChevronDownIcon, + Flex, + IconButton, + Table, +} from "@radix-ui/themes"; import { useLocale } from "../hooks/useLocale"; import { Playlist } from "../stores/playlist"; import { TankRowHeaderCell } from "./TankRowHeaderCell"; @@ -28,17 +41,120 @@ export function PlaylistOrder() { {strings.website.tools.playlist.table.tank} + - {list.map(({ tank }) => ( - - - 0.5} /> + {list.map(({ tank, checked }, index) => ( + + { + Playlist.mutate((draft) => { + draft.list![index].checked = !checked; + }); + }} + > + + + + + { + Playlist.mutate((draft) => { + draft.list!.splice(index, 1); + }); + }} + style={{ + borderTopRightRadius: 0, + borderBottomRightRadius: 0, + }} + > + + + + { + const item = list[index]; + Playlist.mutate((draft) => { + draft.list!.splice(index, 1); + draft.list!.push(item); + }); + }} + > + + + + { + const item = list[index]; + Playlist.mutate((draft) => { + draft.list!.splice(index, 1); + draft.list!.unshift(item); + }); + }} + > + + + + { + const item = list[index]; + Playlist.mutate((draft) => { + const newIndex = index + 1; + draft.list!.splice(index, 1); + draft.list!.splice(newIndex, 0, item); + }); + }} + > + + + + { + const item = list[index]; + Playlist.mutate((draft) => { + const newIndex = index - 1; + draft.list!.splice(index, 1); + draft.list!.splice(newIndex, 0, item); + }); + }} + style={{ + borderTopLeftRadius: 0, + borderBottomLeftRadius: 0, + }} + > + + + + ))} diff --git a/packages/website/src/core/blitzkit/generatePlaylist.ts b/packages/website/src/core/blitzkit/generatePlaylist.ts index b47235906..0a3ddf209 100644 --- a/packages/website/src/core/blitzkit/generatePlaylist.ts +++ b/packages/website/src/core/blitzkit/generatePlaylist.ts @@ -14,7 +14,7 @@ const tanks = Object.values(tankDefinitions.tanks); export async function generatePlaylist() { const id = App.state.logins.wargaming?.id; - const filtered = await filterTanks(TankFilters.state, tanks); + const filtered = await filterTanks(TankFilters.state, tanks, id); const statsList = id ? await getTankStats(idToRegion(id), id) : undefined; const stats: Record = {}; diff --git a/packages/website/src/stores/playlist.ts b/packages/website/src/stores/playlist.ts index 2084e15e7..387545808 100644 --- a/packages/website/src/stores/playlist.ts +++ b/packages/website/src/stores/playlist.ts @@ -7,6 +7,7 @@ export interface Playlist { tank: TankDefinition; battles?: number; wins?: number; + checked: boolean; }[]; } From 37adc04cda572b092d24086beb50dc5670a3c45e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 14 Oct 2025 11:32:43 -0500 Subject: [PATCH 06/22] feat: drag handles --- .../website/src/components/PlaylistOrder.tsx | 132 ++---------------- .../src/components/PlaylistTankEntry.tsx | 64 +++++++++ 2 files changed, 72 insertions(+), 124 deletions(-) create mode 100644 packages/website/src/components/PlaylistTankEntry.tsx diff --git a/packages/website/src/components/PlaylistOrder.tsx b/packages/website/src/components/PlaylistOrder.tsx index 37519dd3e..c73238131 100644 --- a/packages/website/src/components/PlaylistOrder.tsx +++ b/packages/website/src/components/PlaylistOrder.tsx @@ -1,20 +1,7 @@ -import { - ChevronUpIcon, - DoubleArrowDownIcon, - DoubleArrowUpIcon, - MinusCircledIcon, -} from "@radix-ui/react-icons"; -import { - Button, - Checkbox, - ChevronDownIcon, - Flex, - IconButton, - Table, -} from "@radix-ui/themes"; +import { Button, Flex, Table } from "@radix-ui/themes"; import { useLocale } from "../hooks/useLocale"; import { Playlist } from "../stores/playlist"; -import { TankRowHeaderCell } from "./TankRowHeaderCell"; +import { PlaylistTankEntry } from "./PlaylistTankEntry"; export function PlaylistOrder() { const { strings } = useLocale(); @@ -47,115 +34,12 @@ export function PlaylistOrder() { {list.map(({ tank, checked }, index) => ( - - { - Playlist.mutate((draft) => { - draft.list![index].checked = !checked; - }); - }} - > - - - - - - - - { - Playlist.mutate((draft) => { - draft.list!.splice(index, 1); - }); - }} - style={{ - borderTopRightRadius: 0, - borderBottomRightRadius: 0, - }} - > - - - - { - const item = list[index]; - Playlist.mutate((draft) => { - draft.list!.splice(index, 1); - draft.list!.push(item); - }); - }} - > - - - - { - const item = list[index]; - Playlist.mutate((draft) => { - draft.list!.splice(index, 1); - draft.list!.unshift(item); - }); - }} - > - - - - { - const item = list[index]; - Playlist.mutate((draft) => { - const newIndex = index + 1; - draft.list!.splice(index, 1); - draft.list!.splice(newIndex, 0, item); - }); - }} - > - - - - { - const item = list[index]; - Playlist.mutate((draft) => { - const newIndex = index - 1; - draft.list!.splice(index, 1); - draft.list!.splice(newIndex, 0, item); - }); - }} - style={{ - borderTopLeftRadius: 0, - borderBottomLeftRadius: 0, - }} - > - - - - - + ))} diff --git a/packages/website/src/components/PlaylistTankEntry.tsx b/packages/website/src/components/PlaylistTankEntry.tsx new file mode 100644 index 000000000..1e4c2a517 --- /dev/null +++ b/packages/website/src/components/PlaylistTankEntry.tsx @@ -0,0 +1,64 @@ +import type { TankDefinition } from "@blitzkit/core"; +import { DragHandleDots2Icon, MinusCircledIcon } from "@radix-ui/react-icons"; +import { Checkbox, Flex, IconButton, Table, Text } from "@radix-ui/themes"; +import { Playlist } from "../stores/playlist"; +import { TankRowHeaderCell } from "./TankRowHeaderCell"; + +interface Props { + tank: TankDefinition; + checked: boolean; + index: number; +} + +export function PlaylistTankEntry({ tank, checked, index }: Props) { + return ( + + { + Playlist.mutate((draft) => { + draft.list![index].checked = !checked; + }); + }} + > + + + + + + + + { + Playlist.mutate((draft) => { + draft.list!.splice(index, 1); + }); + }} + > + + + + + + + + + + + + ); +} From e1a6e4e38d4a59e9e23bdc12ae6aff121bd29416 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 14 Oct 2025 12:11:31 -0500 Subject: [PATCH 07/22] feat: spotify like table --- packages/i18n/strings/en.json | 5 +- .../src/components/CurrentlyPlaying.tsx | 7 ++ .../website/src/components/PlaylistOrder.tsx | 44 +++++------- .../website/src/components/PlaylistTable.tsx | 55 ++++++++++++++ .../src/components/PlaylistTankEntry.tsx | 72 ++++++++----------- .../src/components/StickyRowHeaderCell.tsx | 11 ++- .../src/components/TankRowHeaderCell.tsx | 51 +++++++------ .../src/core/blitzkit/generatePlaylist.ts | 2 + packages/website/src/layouts/ToolLayout.astro | 6 +- .../src/pages/[...locale]/playlist/_index.tsx | 2 +- .../pages/[...locale]/playlist/index.astro | 2 +- packages/website/src/stores/playlist.ts | 16 +++-- 12 files changed, 159 insertions(+), 114 deletions(-) create mode 100644 packages/website/src/components/CurrentlyPlaying.tsx create mode 100644 packages/website/src/components/PlaylistTable.tsx diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json index 515686ada..1b7b3c9d3 100644 --- a/packages/i18n/strings/en.json +++ b/packages/i18n/strings/en.json @@ -862,7 +862,10 @@ "playlist": { "clear": "Clear", "table": { - "tank": "Tank" + "index": "#", + "never": "Never", + "tank": "Tank", + "last_played": "Last played" }, "no_login_warning": "You are not logged in. BlitzKit will not keep track of your played tanks.", "generate": "Generate playlist", diff --git a/packages/website/src/components/CurrentlyPlaying.tsx b/packages/website/src/components/CurrentlyPlaying.tsx new file mode 100644 index 000000000..08427e3f1 --- /dev/null +++ b/packages/website/src/components/CurrentlyPlaying.tsx @@ -0,0 +1,7 @@ +import { Flex } from "@radix-ui/themes"; + +export function CurrentlyPlaying() { + return + + ; +} diff --git a/packages/website/src/components/PlaylistOrder.tsx b/packages/website/src/components/PlaylistOrder.tsx index c73238131..514e9d206 100644 --- a/packages/website/src/components/PlaylistOrder.tsx +++ b/packages/website/src/components/PlaylistOrder.tsx @@ -1,16 +1,23 @@ -import { Button, Flex, Table } from "@radix-ui/themes"; +import { Box, Button, Flex } from "@radix-ui/themes"; import { useLocale } from "../hooks/useLocale"; import { Playlist } from "../stores/playlist"; -import { PlaylistTankEntry } from "./PlaylistTankEntry"; +import { CurrentlyPlaying } from "./CurrentlyPlaying"; +import { PlaylistTable } from "./PlaylistTable"; export function PlaylistOrder() { const { strings } = useLocale(); - const list = Playlist.use((state) => state.list); - - if (!list) return null; return ( - + + + - - - - - - {strings.website.tools.playlist.table.tank} - - - - - - - {list.map(({ tank, checked }, index) => ( - - ))} - - + + + ); } diff --git a/packages/website/src/components/PlaylistTable.tsx b/packages/website/src/components/PlaylistTable.tsx new file mode 100644 index 000000000..92ed64efb --- /dev/null +++ b/packages/website/src/components/PlaylistTable.tsx @@ -0,0 +1,55 @@ +import { Table, Text } from "@radix-ui/themes"; +import { useLocale } from "../hooks/useLocale"; +import { Playlist } from "../stores/playlist"; +import { PlaylistTankEntry } from "./PlaylistTankEntry"; +import { StickyColumnHeaderCell } from "./StickyColumnHeaderCell"; +import { StickyTableRoot } from "./StickyTableRoot"; + +export function PlaylistTable() { + const { strings } = useLocale(); + const list = Playlist.use((state) => state.list); + + if (!list) return null; + + return ( + + + + + + {strings.website.tools.playlist.table.index} + + + + + {strings.website.tools.playlist.table.tank} + + + + {strings.website.tools.playlist.table.last_played} + + + + + + + + + + {list.map((props, index) => ( + + ))} + + + ); +} diff --git a/packages/website/src/components/PlaylistTankEntry.tsx b/packages/website/src/components/PlaylistTankEntry.tsx index 1e4c2a517..923adba00 100644 --- a/packages/website/src/components/PlaylistTankEntry.tsx +++ b/packages/website/src/components/PlaylistTankEntry.tsx @@ -1,18 +1,31 @@ -import type { TankDefinition } from "@blitzkit/core"; -import { DragHandleDots2Icon, MinusCircledIcon } from "@radix-ui/react-icons"; -import { Checkbox, Flex, IconButton, Table, Text } from "@radix-ui/themes"; -import { Playlist } from "../stores/playlist"; +import { MinusCircledIcon } from "@radix-ui/react-icons"; +import { Checkbox, IconButton, Table } from "@radix-ui/themes"; +import { useLocale } from "../hooks/useLocale"; +import { Playlist, type PlaylistEntry } from "../stores/playlist"; import { TankRowHeaderCell } from "./TankRowHeaderCell"; -interface Props { - tank: TankDefinition; - checked: boolean; +interface Props extends PlaylistEntry { index: number; } -export function PlaylistTankEntry({ tank, checked, index }: Props) { +export function PlaylistTankEntry({ tank, checked, last, index }: Props) { + const { locale, strings } = useLocale(); + const rtf = new Intl.RelativeTimeFormat(locale, { numeric: "auto" }); + const nowDays = Date.now() / (1000 * 60 * 60 * 24); + const lastDays = last ? last / (60 * 60 * 24) : undefined; + return ( + {index + 1} + + + + + {lastDays + ? rtf.format(Math.floor(lastDays - nowDays), "day") + : strings.website.tools.playlist.table.never} + + { Playlist.mutate((draft) => { @@ -23,41 +36,18 @@ export function PlaylistTankEntry({ tank, checked, index }: Props) { - - - { + Playlist.mutate((draft) => { + draft.list!.splice(index, 1); + }); + }} > - { - Playlist.mutate((draft) => { - draft.list!.splice(index, 1); - }); - }} - > - - - - - - - - - + + ); diff --git a/packages/website/src/components/StickyRowHeaderCell.tsx b/packages/website/src/components/StickyRowHeaderCell.tsx index 17c14fd38..8e0957278 100644 --- a/packages/website/src/components/StickyRowHeaderCell.tsx +++ b/packages/website/src/components/StickyRowHeaderCell.tsx @@ -1,15 +1,14 @@ -import { Table } from '@radix-ui/themes'; -import type { RowHeaderCellProps } from '@radix-ui/themes/src/components/table.js'; +import { Table } from "@radix-ui/themes"; +import type { RowHeaderCellProps } from "@radix-ui/themes/src/components/table.js"; export function StickyRowHeaderCell({ style, ...props }: RowHeaderCellProps) { return ( + {unwrap(tank.name)} @@ -36,34 +33,34 @@ export function TankRowHeaderCell({ tank }: TankRowHeaderCellProps) { locale={locale} color={ tank.type === TankType.COLLECTOR - ? 'blue' + ? "blue" : tank.type === TankType.PREMIUM - ? 'amber' - : 'gray' + ? "amber" + : "gray" } highContrast={tank.type === TankType.RESEARCHABLE} underline="hover" wrap="nowrap" href={`/tanks/${tank.slug}`} style={{ - paddingLeft: 'var(--space-2)', - display: 'flex', - alignItems: 'center', - gap: 'var(--space-1)', - whiteSpace: 'nowrap', - overflow: 'hidden', - textOverflow: 'ellipsis', + paddingLeft: "var(--space-2)", + display: "flex", + alignItems: "center", + gap: "var(--space-1)", + whiteSpace: "nowrap", + overflow: "hidden", + textOverflow: "ellipsis", }} - size={{ initial: '1', sm: '2' }} + size={{ initial: "1", sm: "2" }} > {tank.testing && ( - + )} {unwrap(tank.name)} diff --git a/packages/website/src/core/blitzkit/generatePlaylist.ts b/packages/website/src/core/blitzkit/generatePlaylist.ts index 0a3ddf209..717226b6c 100644 --- a/packages/website/src/core/blitzkit/generatePlaylist.ts +++ b/packages/website/src/core/blitzkit/generatePlaylist.ts @@ -35,6 +35,8 @@ export async function generatePlaylist() { tank, battles: stats[tank.id]?.all.battles, wins: stats[tank.id]?.all.wins, + last: stats[tank.id]?.last_battle_time, + checked: false, })); }); } diff --git a/packages/website/src/layouts/ToolLayout.astro b/packages/website/src/layouts/ToolLayout.astro index 348fec199..be9997afe 100644 --- a/packages/website/src/layouts/ToolLayout.astro +++ b/packages/website/src/layouts/ToolLayout.astro @@ -8,9 +8,11 @@ import BaseLayout from "./BaseLayout.astro"; interface Props { tool: Tool; locale: string; + noNavbar?: boolean; + noFooter?: boolean; } -const { tool, locale } = Astro.props; +const { tool, locale, noNavbar, noFooter } = Astro.props; const strings = getStrings(locale); const toolStrings = strings.website.tools[ @@ -20,7 +22,7 @@ const toolStrings = - + - + {!list && } {list && } diff --git a/packages/website/src/pages/[...locale]/playlist/index.astro b/packages/website/src/pages/[...locale]/playlist/index.astro index 33cce4318..298a243d7 100644 --- a/packages/website/src/pages/[...locale]/playlist/index.astro +++ b/packages/website/src/pages/[...locale]/playlist/index.astro @@ -8,7 +8,7 @@ export { getStaticPaths } from "../index.astro"; const { locale } = Astro.params; --- - + diff --git a/packages/website/src/stores/playlist.ts b/packages/website/src/stores/playlist.ts index 387545808..b0fcb496a 100644 --- a/packages/website/src/stores/playlist.ts +++ b/packages/website/src/stores/playlist.ts @@ -1,14 +1,16 @@ import type { TankDefinition } from "@blitzkit/core"; import { Varuna } from "varuna"; +export interface PlaylistEntry { + tank: TankDefinition; + battles?: number; + wins?: number; + checked: boolean; + last?: number; +} + export interface Playlist { - list?: { - index: number; - tank: TankDefinition; - battles?: number; - wins?: number; - checked: boolean; - }[]; + list?: PlaylistEntry[]; } export const Playlist = new Varuna({}, "playlist"); From 222b690fbad9a2800a2783730ed76a0d31833010 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 14 Oct 2025 12:19:28 -0500 Subject: [PATCH 08/22] feat: action buttons --- packages/i18n/strings/en.json | 8 +++-- .../src/components/PlaylistActions.tsx | 33 +++++++++++++++++++ .../website/src/components/PlaylistOrder.tsx | 15 ++------- .../website/src/components/PlaylistTable.tsx | 4 +++ .../src/components/PlaylistTankEntry.tsx | 10 +++++- 5 files changed, 55 insertions(+), 15 deletions(-) create mode 100644 packages/website/src/components/PlaylistActions.tsx diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json index 1b7b3c9d3..35dce2336 100644 --- a/packages/i18n/strings/en.json +++ b/packages/i18n/strings/en.json @@ -860,12 +860,16 @@ "tools": { "playlist": { - "clear": "Clear", + "reset": "Reset", + "shuffle": "Shuffle", + "sort": "Sort by", + "table": { "index": "#", "never": "Never", "tank": "Tank", - "last_played": "Last played" + "last_played": "Last played", + "battles": "Battles" }, "no_login_warning": "You are not logged in. BlitzKit will not keep track of your played tanks.", "generate": "Generate playlist", diff --git a/packages/website/src/components/PlaylistActions.tsx b/packages/website/src/components/PlaylistActions.tsx new file mode 100644 index 000000000..12fc319e9 --- /dev/null +++ b/packages/website/src/components/PlaylistActions.tsx @@ -0,0 +1,33 @@ +import { CaretDownIcon } from "@radix-ui/react-icons"; +import { Button, Flex } from "@radix-ui/themes"; +import { useLocale } from "../hooks/useLocale"; +import { Playlist } from "../stores/playlist"; + +export function PlaylistActions() { + const { strings } = useLocale(); + + return ( + + + + + + + + ); +} diff --git a/packages/website/src/components/PlaylistOrder.tsx b/packages/website/src/components/PlaylistOrder.tsx index 514e9d206..d90448881 100644 --- a/packages/website/src/components/PlaylistOrder.tsx +++ b/packages/website/src/components/PlaylistOrder.tsx @@ -1,11 +1,10 @@ -import { Box, Button, Flex } from "@radix-ui/themes"; +import { Box, Flex } from "@radix-ui/themes"; import { useLocale } from "../hooks/useLocale"; -import { Playlist } from "../stores/playlist"; import { CurrentlyPlaying } from "./CurrentlyPlaying"; +import { PlaylistActions } from "./PlaylistActions"; import { PlaylistTable } from "./PlaylistTable"; export function PlaylistOrder() { - const { strings } = useLocale(); return ( - + diff --git a/packages/website/src/components/PlaylistTable.tsx b/packages/website/src/components/PlaylistTable.tsx index 92ed64efb..dcd91cd63 100644 --- a/packages/website/src/components/PlaylistTable.tsx +++ b/packages/website/src/components/PlaylistTable.tsx @@ -39,6 +39,10 @@ export function PlaylistTable() { {strings.website.tools.playlist.table.last_played} + + {strings.website.tools.playlist.table.battles} + + diff --git a/packages/website/src/components/PlaylistTankEntry.tsx b/packages/website/src/components/PlaylistTankEntry.tsx index 923adba00..ff59e54a0 100644 --- a/packages/website/src/components/PlaylistTankEntry.tsx +++ b/packages/website/src/components/PlaylistTankEntry.tsx @@ -8,7 +8,13 @@ interface Props extends PlaylistEntry { index: number; } -export function PlaylistTankEntry({ tank, checked, last, index }: Props) { +export function PlaylistTankEntry({ + tank, + checked, + last, + battles, + index, +}: Props) { const { locale, strings } = useLocale(); const rtf = new Intl.RelativeTimeFormat(locale, { numeric: "auto" }); const nowDays = Date.now() / (1000 * 60 * 60 * 24); @@ -26,6 +32,8 @@ export function PlaylistTankEntry({ tank, checked, last, index }: Props) { : strings.website.tools.playlist.table.never} + {battles} + { Playlist.mutate((draft) => { From ff4a87e5b8b12bd1728defc81d58c5d76498ba52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 14 Oct 2025 20:15:00 -0500 Subject: [PATCH 09/22] perf: reactive updates --- .../website/src/components/PlaylistOrder.tsx | 2 - .../src/components/PlaylistTankEntry.tsx | 87 ++++++++++--------- .../src/pages/[...locale]/playlist/_index.tsx | 6 +- 3 files changed, 48 insertions(+), 47 deletions(-) diff --git a/packages/website/src/components/PlaylistOrder.tsx b/packages/website/src/components/PlaylistOrder.tsx index d90448881..d608e065c 100644 --- a/packages/website/src/components/PlaylistOrder.tsx +++ b/packages/website/src/components/PlaylistOrder.tsx @@ -1,11 +1,9 @@ import { Box, Flex } from "@radix-ui/themes"; -import { useLocale } from "../hooks/useLocale"; import { CurrentlyPlaying } from "./CurrentlyPlaying"; import { PlaylistActions } from "./PlaylistActions"; import { PlaylistTable } from "./PlaylistTable"; export function PlaylistOrder() { - return ( ( + ({ tank, checked, last, battles, index }) => { + const { locale, strings } = useLocale(); + const rtf = new Intl.RelativeTimeFormat(locale, { numeric: "auto" }); + const nowDays = Date.now() / (1000 * 60 * 60 * 24); + const lastDays = last ? last / (60 * 60 * 24) : undefined; - return ( - - {index + 1} + return ( + + {index + 1} - + - - {lastDays - ? rtf.format(Math.floor(lastDays - nowDays), "day") - : strings.website.tools.playlist.table.never} - + + {lastDays + ? rtf.format(Math.floor(lastDays - nowDays), "day") + : strings.website.tools.playlist.table.never} + - {battles} + {battles} - { - Playlist.mutate((draft) => { - draft.list![index].checked = !checked; - }); - }} - > - - - - - { Playlist.mutate((draft) => { - draft.list!.splice(index, 1); + draft.list![index].checked = !checked; }); }} > - - - - - ); -} + + + + + { + Playlist.mutate((draft) => { + draft.list!.splice(index, 1); + }); + }} + > + + + + + ); + }, + (a, b) => + a.checked === b.checked && + a.battles === b.battles && + a.last === b.last && + a.wins === b.wins && + a.index === b.index +); diff --git a/packages/website/src/pages/[...locale]/playlist/_index.tsx b/packages/website/src/pages/[...locale]/playlist/_index.tsx index 806f01bd6..985f63a2f 100644 --- a/packages/website/src/pages/[...locale]/playlist/_index.tsx +++ b/packages/website/src/pages/[...locale]/playlist/_index.tsx @@ -16,7 +16,7 @@ export function Page({ locale, skeleton, }: Props & MaybeSkeletonComponentProps) { - const list = Playlist.use((state) => state.list); + const generated = Playlist.use((state) => state.list !== undefined); const wargaming = App.use((state) => state.logins.wargaming); useEffect(() => { @@ -30,8 +30,8 @@ export function Page({ return ( - {!list && } - {list && } + {!generated && } + {generated && } ); From 263f292a590837052367e20293f3ad299341051c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 14 Oct 2025 20:19:52 -0500 Subject: [PATCH 10/22] feat: shuffle button --- packages/core/src/math/fisherYates.ts | 8 ++++++++ packages/core/src/math/index.ts | 15 ++++++++------- .../website/src/components/PlaylistActions.tsx | 10 +++++++++- .../website/src/components/PlaylistGenerator.tsx | 16 +++++----------- .../website/src/components/PlaylistOrder.tsx | 1 - .../src/core/blitzkit/generatePlaylist.ts | 9 +++------ 6 files changed, 33 insertions(+), 26 deletions(-) create mode 100644 packages/core/src/math/fisherYates.ts diff --git a/packages/core/src/math/fisherYates.ts b/packages/core/src/math/fisherYates.ts new file mode 100644 index 000000000..74198bd7d --- /dev/null +++ b/packages/core/src/math/fisherYates.ts @@ -0,0 +1,8 @@ +export function fisherYates(array: Type) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [array[i], array[j]] = [array[j], array[i]]; + } + + return array; +} diff --git a/packages/core/src/math/index.ts b/packages/core/src/math/index.ts index bb4a1859b..b8a2089a0 100644 --- a/packages/core/src/math/index.ts +++ b/packages/core/src/math/index.ts @@ -1,7 +1,8 @@ -export * from './axis'; -export * from './formatCompact'; -export * from './isNumber'; -export * from './NaNFallback'; -export * from './normalizeAngleRad'; -export * from './normalToEuler'; -export * from './numberToRomanNumeral'; +export * from "./axis"; +export * from "./fisherYates"; +export * from "./formatCompact"; +export * from "./isNumber"; +export * from "./NaNFallback"; +export * from "./normalizeAngleRad"; +export * from "./normalToEuler"; +export * from "./numberToRomanNumeral"; diff --git a/packages/website/src/components/PlaylistActions.tsx b/packages/website/src/components/PlaylistActions.tsx index 12fc319e9..3d8392122 100644 --- a/packages/website/src/components/PlaylistActions.tsx +++ b/packages/website/src/components/PlaylistActions.tsx @@ -1,3 +1,4 @@ +import { fisherYates } from "@blitzkit/core"; import { CaretDownIcon } from "@radix-ui/react-icons"; import { Button, Flex } from "@radix-ui/themes"; import { useLocale } from "../hooks/useLocale"; @@ -20,7 +21,14 @@ export function PlaylistActions() { {strings.website.tools.playlist.reset} - diff --git a/packages/website/src/components/PlaylistGenerator.tsx b/packages/website/src/components/PlaylistGenerator.tsx index f93525756..1656e22a3 100644 --- a/packages/website/src/components/PlaylistGenerator.tsx +++ b/packages/website/src/components/PlaylistGenerator.tsx @@ -1,4 +1,4 @@ -import { tankIcon } from "@blitzkit/core"; +import { fisherYates, tankIcon } from "@blitzkit/core"; import { literals } from "@blitzkit/i18n"; import { ExclamationTriangleIcon } from "@radix-ui/react-icons"; import { Box, Button, Flex, Grid, Text } from "@radix-ui/themes"; @@ -21,16 +21,10 @@ export function PlaylistGenerator() { const { strings, locale } = useLocale(); const wargaming = App.use((state) => state.logins.wargaming); const filters = TankFilters.use(); - const randomTankList = useMemo(() => { - const list = Object.values(tankDefinitions.tanks); - - for (let i = list.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [list[i], list[j]] = [list[j], list[i]]; - } - - return list; - }, [filters]); + const randomTankList = useMemo( + () => fisherYates(Object.values(tankDefinitions.tanks)), + [filters] + ); const tanks = usePromise( () => filterTanks(filters, randomTankList, wargaming?.id), // react-promise-suspense has awful type annotations diff --git a/packages/website/src/components/PlaylistOrder.tsx b/packages/website/src/components/PlaylistOrder.tsx index d608e065c..e5e8fcec2 100644 --- a/packages/website/src/components/PlaylistOrder.tsx +++ b/packages/website/src/components/PlaylistOrder.tsx @@ -14,7 +14,6 @@ export function PlaylistOrder() { maxHeight="100%" > - diff --git a/packages/website/src/core/blitzkit/generatePlaylist.ts b/packages/website/src/core/blitzkit/generatePlaylist.ts index 717226b6c..a86510fbd 100644 --- a/packages/website/src/core/blitzkit/generatePlaylist.ts +++ b/packages/website/src/core/blitzkit/generatePlaylist.ts @@ -1,4 +1,5 @@ import { + fisherYates, getTankStats, idToRegion, type IndividualTankStats, @@ -24,14 +25,10 @@ export async function generatePlaylist() { } } - for (let i = filtered.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [filtered[i], filtered[j]] = [filtered[j], filtered[i]]; - } + fisherYates(filtered); Playlist.mutate((draft) => { - draft.list = filtered.map((tank, index) => ({ - index, + draft.list = filtered.map((tank) => ({ tank, battles: stats[tank.id]?.all.battles, wins: stats[tank.id]?.all.wins, From ea048da7a24f68fdc32648a3ce3ff8eb86916e07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 14 Oct 2025 21:36:37 -0500 Subject: [PATCH 11/22] feat: tracking --- packages/i18n/strings/en.json | 12 +- .../src/components/PlaylistActions.tsx | 63 ++++++++- .../src/components/PlaylistGenerator.tsx | 124 ++++++++++-------- .../website/src/components/PlaylistOrder.tsx | 2 + .../website/src/components/PlaylistTable.tsx | 14 +- .../src/components/PlaylistTankEntry.tsx | 79 ++++++++--- .../src/components/PlaylistTracking.tsx | 14 ++ .../src/core/blitzkit/generatePlaylist.ts | 19 ++- .../src/core/blitzkit/updatePlaylist.ts | 32 +++++ .../pages/[...locale]/playlist/index.astro | 9 +- packages/website/src/stores/playlist.ts | 10 +- 11 files changed, 272 insertions(+), 106 deletions(-) create mode 100644 packages/website/src/components/PlaylistTracking.tsx create mode 100644 packages/website/src/core/blitzkit/updatePlaylist.ts diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json index 35dce2336..367e61d45 100644 --- a/packages/i18n/strings/en.json +++ b/packages/i18n/strings/en.json @@ -862,14 +862,22 @@ "playlist": { "reset": "Reset", "shuffle": "Shuffle", - "sort": "Sort by", + "remove": "Remove played", + + "sort": { + "button": "Sort by", + "last_played": "Last played", + "least_played": "Least played" + }, "table": { "index": "#", "never": "Never", "tank": "Tank", "last_played": "Last played", - "battles": "Battles" + "battles": "Career battles", + "unrecorded": "--", + "wins": "Wins" }, "no_login_warning": "You are not logged in. BlitzKit will not keep track of your played tanks.", "generate": "Generate playlist", diff --git a/packages/website/src/components/PlaylistActions.tsx b/packages/website/src/components/PlaylistActions.tsx index 3d8392122..117c85da6 100644 --- a/packages/website/src/components/PlaylistActions.tsx +++ b/packages/website/src/components/PlaylistActions.tsx @@ -1,11 +1,13 @@ import { fisherYates } from "@blitzkit/core"; import { CaretDownIcon } from "@radix-ui/react-icons"; -import { Button, Flex } from "@radix-ui/themes"; +import { Button, DropdownMenu, Flex } from "@radix-ui/themes"; import { useLocale } from "../hooks/useLocale"; +import { App } from "../stores/app"; import { Playlist } from "../stores/playlist"; export function PlaylistActions() { const { strings } = useLocale(); + const wargaming = App.use((state) => state.logins.wargaming); return ( @@ -22,7 +24,7 @@ export function PlaylistActions() { - + {wargaming && ( + <> + + + + + + + + + { + Playlist.mutate((draft) => { + draft.list = draft.list?.sort( + (a, b) => (a.then?.last ?? 0) - (b.then?.last ?? 0) + ); + }); + }} + > + {strings.website.tools.playlist.sort.last_played} + + { + Playlist.mutate((draft) => { + draft.list = draft.list?.sort( + (a, b) => (a.then?.battles ?? 0) - (b.then?.battles ?? 0) + ); + }); + }} + > + {strings.website.tools.playlist.sort.least_played} + + + + + )} ); } diff --git a/packages/website/src/components/PlaylistGenerator.tsx b/packages/website/src/components/PlaylistGenerator.tsx index 1656e22a3..8a7260079 100644 --- a/packages/website/src/components/PlaylistGenerator.tsx +++ b/packages/website/src/components/PlaylistGenerator.tsx @@ -33,73 +33,81 @@ export function PlaylistGenerator() { const tanksTrimmed = useMemo(() => tanks.slice(0, 65), [filters]); return ( - - - - - - - {!wargaming && ( - - - - {strings.website.tools.playlist.no_login_warning} - - - )} - - + - + + + + + {!wargaming && ( + + + + {strings.website.tools.playlist.no_login_warning} + + + )} + + + - {tanksTrimmed.map((tank) => ( - + {tanksTrimmed.map((tank) => ( + + ))} + + - ))} + - - - - - {literals(strings.website.tools.playlist.pool_size, { - count: tanks.length, - })} - + + {literals(strings.website.tools.playlist.pool_size, { + count: tanks.length, + })} + + ); diff --git a/packages/website/src/components/PlaylistOrder.tsx b/packages/website/src/components/PlaylistOrder.tsx index e5e8fcec2..f9fa71ab9 100644 --- a/packages/website/src/components/PlaylistOrder.tsx +++ b/packages/website/src/components/PlaylistOrder.tsx @@ -2,6 +2,7 @@ import { Box, Flex } from "@radix-ui/themes"; import { CurrentlyPlaying } from "./CurrentlyPlaying"; import { PlaylistActions } from "./PlaylistActions"; import { PlaylistTable } from "./PlaylistTable"; +import { PlaylistTracking } from "./PlaylistTracking"; export function PlaylistOrder() { return ( @@ -15,6 +16,7 @@ export function PlaylistOrder() { > + diff --git a/packages/website/src/components/PlaylistTable.tsx b/packages/website/src/components/PlaylistTable.tsx index dcd91cd63..6759d0635 100644 --- a/packages/website/src/components/PlaylistTable.tsx +++ b/packages/website/src/components/PlaylistTable.tsx @@ -31,27 +31,31 @@ export function PlaylistTable() { + + + + {strings.website.tools.playlist.table.tank} - {strings.website.tools.playlist.table.last_played} + {strings.website.tools.playlist.table.wins} {strings.website.tools.playlist.table.battles} - - - + + {strings.website.tools.playlist.table.last_played} + {list.map((props, index) => ( - + ))} diff --git a/packages/website/src/components/PlaylistTankEntry.tsx b/packages/website/src/components/PlaylistTankEntry.tsx index f6f47dbd2..db424a9df 100644 --- a/packages/website/src/components/PlaylistTankEntry.tsx +++ b/packages/website/src/components/PlaylistTankEntry.tsx @@ -1,6 +1,11 @@ -import { MinusCircledIcon } from "@radix-ui/react-icons"; -import { Checkbox, IconButton, Table } from "@radix-ui/themes"; +import { + MinusCircledIcon, + TriangleDownIcon, + TriangleUpIcon, +} from "@radix-ui/react-icons"; +import { Checkbox, Flex, IconButton, Table, Text } from "@radix-ui/themes"; import { memo } from "react"; +import { awaitableTankDefinitions } from "../core/awaitables/tankDefinitions"; import { useLocale } from "../hooks/useLocale"; import { Playlist, type PlaylistEntry } from "../stores/playlist"; import { TankRowHeaderCell } from "./TankRowHeaderCell"; @@ -9,27 +14,19 @@ interface Props extends PlaylistEntry { index: number; } +const tankDefinitions = await awaitableTankDefinitions; + export const PlaylistTankEntry = memo( - ({ tank, checked, last, battles, index }) => { + ({ id, checked, then, now, index }) => { const { locale, strings } = useLocale(); const rtf = new Intl.RelativeTimeFormat(locale, { numeric: "auto" }); - const nowDays = Date.now() / (1000 * 60 * 60 * 24); - const lastDays = last ? last / (60 * 60 * 24) : undefined; + const dateNow = Date.now(); + const tank = tankDefinitions.tanks[id]; return ( {index + 1} - - - - {lastDays - ? rtf.format(Math.floor(lastDays - nowDays), "day") - : strings.website.tools.playlist.table.never} - - - {battles} - { Playlist.mutate((draft) => { @@ -37,7 +34,16 @@ export const PlaylistTankEntry = memo( }); }} > - + then.battles) || + checked + } + /> @@ -53,13 +59,48 @@ export const PlaylistTankEntry = memo( + + + + + {now && then && now.battles !== then.battles ? ( + + + + + {now.wins - then.wins} + + + + + + + {now.battles - then.battles - now.wins + then.wins} + + + + ) : ( + strings.website.tools.playlist.table.unrecorded + )} + + + + {now?.battles ?? strings.website.tools.playlist.table.unrecorded} + + + + {now && now.last !== 0 + ? rtf.format( + Math.ceil((now.last - dateNow / 1000) / (60 * 60 * 24)), + "day" + ) + : strings.website.tools.playlist.table.unrecorded} + ); }, (a, b) => a.checked === b.checked && - a.battles === b.battles && - a.last === b.last && - a.wins === b.wins && + a.then?.battles === b.then?.battles && a.index === b.index ); diff --git a/packages/website/src/components/PlaylistTracking.tsx b/packages/website/src/components/PlaylistTracking.tsx new file mode 100644 index 000000000..dd8e3b34b --- /dev/null +++ b/packages/website/src/components/PlaylistTracking.tsx @@ -0,0 +1,14 @@ +import { useEffect } from "react"; +import { updatePlaylist } from "../core/blitzkit/updatePlaylist"; + +export function PlaylistTracking() { + useEffect(() => { + const interval = setInterval(updatePlaylist, 5000); + + return () => { + clearInterval(interval); + }; + }, []); + + return null; +} diff --git a/packages/website/src/core/blitzkit/generatePlaylist.ts b/packages/website/src/core/blitzkit/generatePlaylist.ts index a86510fbd..ccd8a13c7 100644 --- a/packages/website/src/core/blitzkit/generatePlaylist.ts +++ b/packages/website/src/core/blitzkit/generatePlaylist.ts @@ -28,12 +28,17 @@ export async function generatePlaylist() { fisherYates(filtered); Playlist.mutate((draft) => { - draft.list = filtered.map((tank) => ({ - tank, - battles: stats[tank.id]?.all.battles, - wins: stats[tank.id]?.all.wins, - last: stats[tank.id]?.last_battle_time, - checked: false, - })); + draft.list = filtered.map((tank) => { + const tankStats = stats[tank.id]; + const then = tankStats + ? { + battles: tankStats.all.battles, + wins: tankStats.all.wins, + last: tankStats.last_battle_time, + } + : undefined; + + return { id: tank.id, then, now: then }; + }); }); } diff --git a/packages/website/src/core/blitzkit/updatePlaylist.ts b/packages/website/src/core/blitzkit/updatePlaylist.ts new file mode 100644 index 000000000..d49435766 --- /dev/null +++ b/packages/website/src/core/blitzkit/updatePlaylist.ts @@ -0,0 +1,32 @@ +import { + getTankStats, + idToRegion, + type IndividualTankStats, +} from "@blitzkit/core"; +import { App } from "../../stores/app"; +import { Playlist } from "../../stores/playlist"; + +export async function updatePlaylist() { + const id = App.state.logins.wargaming?.id; + const statsList = id ? await getTankStats(idToRegion(id), id) : undefined; + const stats: Record = {}; + + if (statsList) { + for (const tankStat of statsList) { + stats[tankStat.tank_id] = tankStat; + } + } + + Playlist.mutate((draft) => { + draft.list?.map((item) => { + const tankStats = stats[item.id]; + item.now = tankStats + ? { + battles: tankStats.all.battles, + wins: tankStats.all.wins, + last: tankStats.last_battle_time, + } + : undefined; + }); + }); +} diff --git a/packages/website/src/pages/[...locale]/playlist/index.astro b/packages/website/src/pages/[...locale]/playlist/index.astro index 298a243d7..47582ba99 100644 --- a/packages/website/src/pages/[...locale]/playlist/index.astro +++ b/packages/website/src/pages/[...locale]/playlist/index.astro @@ -1,6 +1,7 @@ --- +import ToolOpenGraph from "../../../components/ToolOpenGraph.astro"; import { tools } from "../../../constants/tools"; -import ToolLayout from "../../../layouts/ToolLayout.astro"; +import BaseLayout from "../../../layouts/BaseLayout.astro"; import { Page } from "./_index.tsx"; export { getStaticPaths } from "../index.astro"; @@ -8,8 +9,10 @@ export { getStaticPaths } from "../index.astro"; const { locale } = Astro.params; --- - + + + - + diff --git a/packages/website/src/stores/playlist.ts b/packages/website/src/stores/playlist.ts index b0fcb496a..f2f2ba132 100644 --- a/packages/website/src/stores/playlist.ts +++ b/packages/website/src/stores/playlist.ts @@ -1,12 +1,10 @@ -import type { TankDefinition } from "@blitzkit/core"; import { Varuna } from "varuna"; export interface PlaylistEntry { - tank: TankDefinition; - battles?: number; - wins?: number; - checked: boolean; - last?: number; + id: number; + then?: { battles: number; wins: number; last: number }; + now?: { battles: number; wins: number; last: number }; + checked?: boolean; } export interface Playlist { From ade238966bf02e08b206495c4fa6b20837a4ddfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 14 Oct 2025 21:53:58 -0500 Subject: [PATCH 12/22] feat: some cleanup --- packages/i18n/strings/en.json | 2 + .../src/components/PlaylistActions.tsx | 163 ++++++++++-------- .../website/src/components/PlaylistTable.tsx | 1 + .../src/components/PlaylistTankEntry.tsx | 1 + .../src/components/StickyRowHeaderCell.tsx | 1 - .../src/components/TankRowHeaderCell.tsx | 57 +++--- packages/website/tsconfig.json | 6 +- 7 files changed, 118 insertions(+), 113 deletions(-) diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json index 367e61d45..be88518f9 100644 --- a/packages/i18n/strings/en.json +++ b/packages/i18n/strings/en.json @@ -863,6 +863,7 @@ "reset": "Reset", "shuffle": "Shuffle", "remove": "Remove played", + "tracking": "BlitzKit is tracking your playlist", "sort": { "button": "Sort by", @@ -879,6 +880,7 @@ "unrecorded": "--", "wins": "Wins" }, + "no_login_warning": "You are not logged in. BlitzKit will not keep track of your played tanks.", "generate": "Generate playlist", "name": "Playlist", diff --git a/packages/website/src/components/PlaylistActions.tsx b/packages/website/src/components/PlaylistActions.tsx index 117c85da6..b53ab9366 100644 --- a/packages/website/src/components/PlaylistActions.tsx +++ b/packages/website/src/components/PlaylistActions.tsx @@ -1,6 +1,6 @@ import { fisherYates } from "@blitzkit/core"; import { CaretDownIcon } from "@radix-ui/react-icons"; -import { Button, DropdownMenu, Flex } from "@radix-ui/themes"; +import { Button, DropdownMenu, Flex, Spinner } from "@radix-ui/themes"; import { useLocale } from "../hooks/useLocale"; import { App } from "../stores/app"; import { Playlist } from "../stores/playlist"; @@ -10,83 +10,96 @@ export function PlaylistActions() { const wargaming = App.use((state) => state.logins.wargaming); return ( - - + <> + + - + + + {wargaming && ( + <> + + + + + + + + + { + Playlist.mutate((draft) => { + draft.list = draft.list?.sort( + (a, b) => (a.then?.last ?? 0) - (b.then?.last ?? 0) + ); + }); + }} + > + {strings.website.tools.playlist.sort.last_played} + + { + Playlist.mutate((draft) => { + draft.list = draft.list?.sort( + (a, b) => + (a.then?.battles ?? 0) - (b.then?.battles ?? 0) + ); + }); + }} + > + {strings.website.tools.playlist.sort.least_played} + + + + + )} + {wargaming && ( - <> - - - - - - - - - { - Playlist.mutate((draft) => { - draft.list = draft.list?.sort( - (a, b) => (a.then?.last ?? 0) - (b.then?.last ?? 0) - ); - }); - }} - > - {strings.website.tools.playlist.sort.last_played} - - { - Playlist.mutate((draft) => { - draft.list = draft.list?.sort( - (a, b) => (a.then?.battles ?? 0) - (b.then?.battles ?? 0) - ); - }); - }} - > - {strings.website.tools.playlist.sort.least_played} - - - - + + + {strings.website.tools.playlist.tracking} + )} - + ); } diff --git a/packages/website/src/components/PlaylistTable.tsx b/packages/website/src/components/PlaylistTable.tsx index 6759d0635..bbf6abdc0 100644 --- a/packages/website/src/components/PlaylistTable.tsx +++ b/packages/website/src/components/PlaylistTable.tsx @@ -20,6 +20,7 @@ export function PlaylistTable() { height: "100%", width: "100%", borderRadius: 0, + whiteSpace: "nowrap", }} variant="surface" > diff --git a/packages/website/src/components/PlaylistTankEntry.tsx b/packages/website/src/components/PlaylistTankEntry.tsx index db424a9df..5a783d5f9 100644 --- a/packages/website/src/components/PlaylistTankEntry.tsx +++ b/packages/website/src/components/PlaylistTankEntry.tsx @@ -35,6 +35,7 @@ export const PlaylistTankEntry = memo( }} > - - {unwrap(tank.name)} - - - + + - {tank.testing && ( - - )} + - {unwrap(tank.name)} + {tank.testing && ( + + )} + + {unwrap(tank.name)} + ); diff --git a/packages/website/tsconfig.json b/packages/website/tsconfig.json index f0dab8b6a..db4d5dcac 100644 --- a/packages/website/tsconfig.json +++ b/packages/website/tsconfig.json @@ -3,10 +3,6 @@ "compilerOptions": { "jsx": "react-jsx", "jsxImportSource": "react", - "types": [ - "vite/client", - "vite-plugin-pwa/info.d.ts", - "vite-plugin-pwa/client.d.ts" - ] + "types": ["vite/client"] } } From 4ae5283ac4259721d385e87a272fa8962b74b6aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 14 Oct 2025 22:02:47 -0500 Subject: [PATCH 13/22] feat: landing page cleanup --- packages/i18n/strings/en.json | 3 +- .../src/components/PlaylistGenerator.tsx | 56 ++++++++++--------- .../src/pages/[...locale]/playlist/_index.tsx | 12 +--- 3 files changed, 32 insertions(+), 39 deletions(-) diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json index be88518f9..edb890560 100644 --- a/packages/i18n/strings/en.json +++ b/packages/i18n/strings/en.json @@ -863,7 +863,7 @@ "reset": "Reset", "shuffle": "Shuffle", "remove": "Remove played", - "tracking": "BlitzKit is tracking your playlist", + "tracking": "BlitzKit is tracking your battles", "sort": { "button": "Sort by", @@ -881,7 +881,6 @@ "wins": "Wins" }, - "no_login_warning": "You are not logged in. BlitzKit will not keep track of your played tanks.", "generate": "Generate playlist", "name": "Playlist", "description": "Tank playlist generator", diff --git a/packages/website/src/components/PlaylistGenerator.tsx b/packages/website/src/components/PlaylistGenerator.tsx index 8a7260079..c4c279102 100644 --- a/packages/website/src/components/PlaylistGenerator.tsx +++ b/packages/website/src/components/PlaylistGenerator.tsx @@ -1,7 +1,6 @@ import { fisherYates, tankIcon } from "@blitzkit/core"; import { literals } from "@blitzkit/i18n"; -import { ExclamationTriangleIcon } from "@radix-ui/react-icons"; -import { Box, Button, Flex, Grid, Text } from "@radix-ui/themes"; +import { Box, Button, Flex, Grid, Skeleton, Text } from "@radix-ui/themes"; import { useMemo } from "react"; import usePromise from "react-promise-suspense"; import { awaitableTankDefinitions } from "../core/awaitables/tankDefinitions"; @@ -10,6 +9,7 @@ import { generatePlaylist } from "../core/blitzkit/generatePlaylist"; import { useLocale } from "../hooks/useLocale"; import { App } from "../stores/app"; import { TankFilters } from "../stores/tankFilters"; +import type { MaybeSkeletonComponentProps } from "../types/maybeSkeletonComponentProps"; import { LinkI18n } from "./LinkI18n"; import { FilterControl } from "./TankSearch/components/FilterControl"; @@ -17,7 +17,7 @@ const tankDefinitions = await awaitableTankDefinitions; const POOL_HEIGHT = "16rem"; -export function PlaylistGenerator() { +export function PlaylistGenerator({ skeleton }: MaybeSkeletonComponentProps) { const { strings, locale } = useLocale(); const wargaming = App.use((state) => state.logins.wargaming); const filters = TankFilters.use(); @@ -47,15 +47,6 @@ export function PlaylistGenerator() { - - {!wargaming && ( - - - - {strings.website.tools.playlist.no_login_warning} - - - )} - {tanksTrimmed.map((tank) => ( - - ))} + {tanksTrimmed.map((tank) => + skeleton ? ( + + + + ) : ( + + ) + )} state.list !== undefined); - const wargaming = App.use((state) => state.logins.wargaming); - useEffect(() => { - if (wargaming) { - TankFilters.mutate((draft) => { - draft.ownership = "owned"; - }); - } - }, []); + if (App.state.logins.wargaming) TankFilters.state.ownership = "owned"; return ( - {!generated && } + {!generated && } {generated && } From 94e8a07f90c2f098cd54ad997d4b5f7ce3906ef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 14 Oct 2025 22:03:51 -0500 Subject: [PATCH 14/22] feat: hide playlist --- packages/website/src/constants/tools.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/website/src/constants/tools.ts b/packages/website/src/constants/tools.ts index 4dcb9ec69..79c2256a3 100644 --- a/packages/website/src/constants/tools.ts +++ b/packages/website/src/constants/tools.ts @@ -37,6 +37,7 @@ export const tools: Record = { }, playlist: { id: "playlist", + disabled: true, button: "tomato", }, mixer: { From 7becb7b6ad15154c9aa55c16877cf0c84ed719ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 14 Oct 2025 22:06:01 -0500 Subject: [PATCH 15/22] fix: modify only when needed --- packages/website/src/pages/[...locale]/playlist/_index.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/website/src/pages/[...locale]/playlist/_index.tsx b/packages/website/src/pages/[...locale]/playlist/_index.tsx index 369f2391e..727262d7b 100644 --- a/packages/website/src/pages/[...locale]/playlist/_index.tsx +++ b/packages/website/src/pages/[...locale]/playlist/_index.tsx @@ -17,7 +17,9 @@ export function Page({ }: Props & MaybeSkeletonComponentProps) { const generated = Playlist.use((state) => state.list !== undefined); - if (App.state.logins.wargaming) TankFilters.state.ownership = "owned"; + if (App.state.logins.wargaming && TankFilters.state.ownership !== "owned") { + TankFilters.state.ownership = "owned"; + } return ( From 437bbfdc89b95375f50fb40295331c53ede78676 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 14 Oct 2025 22:21:22 -0500 Subject: [PATCH 16/22] feat: large warning --- packages/i18n/strings/en.json | 7 + .../src/components/PlaylistGenerator.tsx | 203 +++++++++++------- 2 files changed, 136 insertions(+), 74 deletions(-) diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json index edb890560..a57a6a6ed 100644 --- a/packages/i18n/strings/en.json +++ b/packages/i18n/strings/en.json @@ -881,6 +881,13 @@ "wins": "Wins" }, + "large_warning": { + "title": "That's a lot of tanks!", + "description": "Are you sure you want to create a playlist of {count} tanks? That's {time} hours of gameplay at 50% winrate!", + "cancel": "Cancel", + "proceed": "Proceed" + }, + "generate": "Generate playlist", "name": "Playlist", "description": "Tank playlist generator", diff --git a/packages/website/src/components/PlaylistGenerator.tsx b/packages/website/src/components/PlaylistGenerator.tsx index c4c279102..f3cf8e965 100644 --- a/packages/website/src/components/PlaylistGenerator.tsx +++ b/packages/website/src/components/PlaylistGenerator.tsx @@ -1,7 +1,16 @@ import { fisherYates, tankIcon } from "@blitzkit/core"; import { literals } from "@blitzkit/i18n"; -import { Box, Button, Flex, Grid, Skeleton, Text } from "@radix-ui/themes"; -import { useMemo } from "react"; +import { ChevronRightIcon } from "@radix-ui/react-icons"; +import { + AlertDialog, + Box, + Button, + Flex, + Grid, + Skeleton, + Text, +} from "@radix-ui/themes"; +import { useMemo, useState } from "react"; import usePromise from "react-promise-suspense"; import { awaitableTankDefinitions } from "../core/awaitables/tankDefinitions"; import { filterTanks } from "../core/blitzkit/filterTanks"; @@ -18,6 +27,7 @@ const tankDefinitions = await awaitableTankDefinitions; const POOL_HEIGHT = "16rem"; export function PlaylistGenerator({ skeleton }: MaybeSkeletonComponentProps) { + const [largeWarningOpen, setLargeWarningOpen] = useState(false); const { strings, locale } = useLocale(); const wargaming = App.use((state) => state.logins.wargaming); const filters = TankFilters.use(); @@ -33,84 +43,129 @@ export function PlaylistGenerator({ skeleton }: MaybeSkeletonComponentProps) { const tanksTrimmed = useMemo(() => tanks.slice(0, 65), [filters]); return ( - - + - - - - - - - - - {tanksTrimmed.map((tank) => - skeleton ? ( - - - - ) : ( - - ) + + + {strings.website.tools.playlist.large_warning.title} + + + {literals( + strings.website.tools.playlist.large_warning.description, + { + count: tanks.length, + time: Math.round(tanks.length * ((2 * 4) / 60)), + } )} + - + + + + + + + + + + + + + + + + + - - {literals(strings.website.tools.playlist.pool_size, { - count: tanks.length, - })} - + + + {tanksTrimmed.map((tank) => + skeleton ? ( + + + + ) : ( + + ) + )} + + + + + + {literals(strings.website.tools.playlist.pool_size, { + count: tanks.length, + })} + + - + ); } From f36df9e902f07d1d9acc84c9a0e876ff2fe4ea8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 14 Oct 2025 22:26:13 -0500 Subject: [PATCH 17/22] feat: landing page for mobile --- .../src/components/PlaylistGenerator.tsx | 4 ++- .../TankSearch/components/FilterControl.tsx | 33 ++++++++++++++++--- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/packages/website/src/components/PlaylistGenerator.tsx b/packages/website/src/components/PlaylistGenerator.tsx index f3cf8e965..0d77d56d7 100644 --- a/packages/website/src/components/PlaylistGenerator.tsx +++ b/packages/website/src/components/PlaylistGenerator.tsx @@ -77,13 +77,14 @@ export function PlaylistGenerator({ skeleton }: MaybeSkeletonComponentProps) { - + @@ -109,6 +110,7 @@ export function PlaylistGenerator({ skeleton }: MaybeSkeletonComponentProps) { flexBasis="0" align="center" gap="4" + width="100%" > = { @@ -50,13 +47,21 @@ const shellTypeIcons: Record = { [ShellType.HEAT]: "hc", }; +const size: ButtonProps["size"] = { initial: "1", xs: "2" }; + function ShellFilter({ index, premium }: { index: number; premium?: boolean }) { const shells = TankFilters.use((state) => state.shells); return ( - + {shells[index] === null && ( @@ -83,6 +88,7 @@ function ShellFilter({ index, premium }: { index: number; premium?: boolean }) { return ( Date: Tue, 14 Oct 2025 22:27:12 -0500 Subject: [PATCH 18/22] feat: enable playlist --- packages/website/src/constants/tools.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/website/src/constants/tools.ts b/packages/website/src/constants/tools.ts index 79c2256a3..4dcb9ec69 100644 --- a/packages/website/src/constants/tools.ts +++ b/packages/website/src/constants/tools.ts @@ -37,7 +37,6 @@ export const tools: Record = { }, playlist: { id: "playlist", - disabled: true, button: "tomato", }, mixer: { From 389707d0c8cb877f49721463318b400a7e6d7a64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 14 Oct 2025 22:28:00 -0500 Subject: [PATCH 19/22] fix: keys --- packages/website/src/components/PlaylistGenerator.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/website/src/components/PlaylistGenerator.tsx b/packages/website/src/components/PlaylistGenerator.tsx index 0d77d56d7..85b9c5d0a 100644 --- a/packages/website/src/components/PlaylistGenerator.tsx +++ b/packages/website/src/components/PlaylistGenerator.tsx @@ -123,6 +123,7 @@ export function PlaylistGenerator({ skeleton }: MaybeSkeletonComponentProps) { {tanksTrimmed.map((tank) => skeleton ? ( ) : ( Date: Tue, 14 Oct 2025 22:34:11 -0500 Subject: [PATCH 20/22] feat: logs --- docs/changelogs/1.29.0.md | 12 ++++++++++++ package.json | 2 +- packages/website/src/components/PageWrapper.tsx | 4 +--- 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 docs/changelogs/1.29.0.md diff --git a/docs/changelogs/1.29.0.md b/docs/changelogs/1.29.0.md new file mode 100644 index 000000000..009d3aa74 --- /dev/null +++ b/docs/changelogs/1.29.0.md @@ -0,0 +1,12 @@ +# BlitzKit 1.29.0 + +## Features + +- Added the Playlist tool + - Don't know what to play today? Let BlitzKit do the thinking! + - Navigate to [the tool on BlitzKit](https://blitzkit.app/playlist) + - Make sure you login with your Wargaming account to unlock all features like live tracking and filtering by owned tanks + - Use filters to pick tiers, nations, etc. then hit Generate playlist + - BlitzKit will generate a checklist for you to go through as you play + - Don't like the order of tanks? Hit Shuffle, Sort by Last played and Least played, or straight up remove tanks from the list by using the (-) button + - If you're logged in, BlitzKit will automatically check off tanks as you play them diff --git a/package.json b/package.json index c9339b1d8..acd8a3a2e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "blitzkit", "private": true, - "version": "1.28.4", + "version": "1.29.0", "description": "🎉 Tools for everything World of Tanks Blitz", "type": "module", "types": "./types.d.ts", diff --git a/packages/website/src/components/PageWrapper.tsx b/packages/website/src/components/PageWrapper.tsx index 287b36477..8933a7795 100644 --- a/packages/website/src/components/PageWrapper.tsx +++ b/packages/website/src/components/PageWrapper.tsx @@ -28,9 +28,7 @@ export function PageWrapper({ style={{ flex: noFlex1 ? undefined : 1, display: "flex", - minHeight: noMinHeight - ? "unset" - : `calc(100svh - ${NAVBAR_HEIGHT}px - 7.75rem)`, + minHeight: noMinHeight ? "unset" : `calc(100svh - ${NAVBAR_HEIGHT}px)`, flexDirection: "column", ...containerProps?.style, }} From 9201fc72ce2e5808faa7f1fda70cb7cc5937bd32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Wed, 15 Oct 2025 09:02:02 -0500 Subject: [PATCH 21/22] New Crowdin updates (#175) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Japanese) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Simplified) --- packages/i18n/strings/es.json | 32 +++++++++++++++++++++++++++++ packages/i18n/strings/fr.json | 32 +++++++++++++++++++++++++++++ packages/i18n/strings/ja.json | 32 +++++++++++++++++++++++++++++ packages/i18n/strings/pl.json | 32 +++++++++++++++++++++++++++++ packages/i18n/strings/pt.json | 32 +++++++++++++++++++++++++++++ packages/i18n/strings/ru.json | 32 +++++++++++++++++++++++++++++ packages/i18n/strings/uk.json | 32 +++++++++++++++++++++++++++++ packages/i18n/strings/zh.json | 38 ++++++++++++++++++++++++++++++++--- 8 files changed, 259 insertions(+), 3 deletions(-) diff --git a/packages/i18n/strings/es.json b/packages/i18n/strings/es.json index 44c35cdc6..3662b4289 100644 --- a/packages/i18n/strings/es.json +++ b/packages/i18n/strings/es.json @@ -762,6 +762,38 @@ } }, "tools": { + "playlist": { + "reset": "Restablecer", + "shuffle": "Shuffle", + "remove": "Remove played", + "tracking": "BlitzKit is tracking your battles", + "sort": { + "button": "Ordenar por", + "last_played": "Last played", + "least_played": "Least played" + }, + "table": { + "index": "#", + "never": "Never", + "tank": "Tanque", + "last_played": "Last played", + "battles": "Career battles", + "unrecorded": "--", + "wins": "Victorias" + }, + "large_warning": { + "title": "That's a lot of tanks!", + "description": "Are you sure you want to create a playlist of {count} tanks? That's {time} hours of gameplay at 50% winrate!", + "cancel": "Cancelar", + "proceed": "Proceed" + }, + "generate": "Generate playlist", + "name": "Playlist", + "description": "Tank playlist generator", + "seo_description": "Don't know what to play in World of Tanks Blitz? Use BlitzKit Playlist to get suggestions!", + "button": "Generate", + "pool_size": "{count} possible tanks" + }, "mixer": { "name": "Mixer", "button": "Mix and match", diff --git a/packages/i18n/strings/fr.json b/packages/i18n/strings/fr.json index 0994940ac..49d823e1e 100644 --- a/packages/i18n/strings/fr.json +++ b/packages/i18n/strings/fr.json @@ -762,6 +762,38 @@ } }, "tools": { + "playlist": { + "reset": "Reset", + "shuffle": "Shuffle", + "remove": "Remove played", + "tracking": "BlitzKit is tracking your battles", + "sort": { + "button": "Sort by", + "last_played": "Last played", + "least_played": "Least played" + }, + "table": { + "index": "#", + "never": "Never", + "tank": "Tank", + "last_played": "Last played", + "battles": "Career battles", + "unrecorded": "--", + "wins": "Victoires" + }, + "large_warning": { + "title": "That's a lot of tanks!", + "description": "Are you sure you want to create a playlist of {count} tanks? That's {time} hours of gameplay at 50% winrate!", + "cancel": "Cancel", + "proceed": "Proceed" + }, + "generate": "Generate playlist", + "name": "Playlist", + "description": "Tank playlist generator", + "seo_description": "Don't know what to play in World of Tanks Blitz? Use BlitzKit Playlist to get suggestions!", + "button": "Generate", + "pool_size": "{count} possible tanks" + }, "mixer": { "name": "Mixer", "button": "Mix and match", diff --git a/packages/i18n/strings/ja.json b/packages/i18n/strings/ja.json index 4eba64418..f1734055d 100644 --- a/packages/i18n/strings/ja.json +++ b/packages/i18n/strings/ja.json @@ -762,6 +762,38 @@ } }, "tools": { + "playlist": { + "reset": "リセット", + "shuffle": "Shuffle", + "remove": "Remove played", + "tracking": "BlitzKit is tracking your battles", + "sort": { + "button": "並べ替え項目", + "last_played": "Last played", + "least_played": "Least played" + }, + "table": { + "index": "#", + "never": "Never", + "tank": "車輌名", + "last_played": "Last played", + "battles": "Career battles", + "unrecorded": "--", + "wins": "勝利" + }, + "large_warning": { + "title": "That's a lot of tanks!", + "description": "Are you sure you want to create a playlist of {count} tanks? That's {time} hours of gameplay at 50% winrate!", + "cancel": "Cancel", + "proceed": "Proceed" + }, + "generate": "Generate playlist", + "name": "Playlist", + "description": "Tank playlist generator", + "seo_description": "Don't know what to play in World of Tanks Blitz? Use BlitzKit Playlist to get suggestions!", + "button": "Generate", + "pool_size": "{count} possible tanks" + }, "mixer": { "name": "Mixer", "button": "Mix and match", diff --git a/packages/i18n/strings/pl.json b/packages/i18n/strings/pl.json index dc2c2df51..112df784b 100644 --- a/packages/i18n/strings/pl.json +++ b/packages/i18n/strings/pl.json @@ -762,6 +762,38 @@ } }, "tools": { + "playlist": { + "reset": "Reset", + "shuffle": "Shuffle", + "remove": "Remove played", + "tracking": "BlitzKit is tracking your battles", + "sort": { + "button": "Sort by", + "last_played": "Last played", + "least_played": "Least played" + }, + "table": { + "index": "#", + "never": "Never", + "tank": "Tank", + "last_played": "Last played", + "battles": "Career battles", + "unrecorded": "--", + "wins": "Zwycięstwa" + }, + "large_warning": { + "title": "That's a lot of tanks!", + "description": "Are you sure you want to create a playlist of {count} tanks? That's {time} hours of gameplay at 50% winrate!", + "cancel": "Cancel", + "proceed": "Proceed" + }, + "generate": "Generate playlist", + "name": "Playlist", + "description": "Tank playlist generator", + "seo_description": "Don't know what to play in World of Tanks Blitz? Use BlitzKit Playlist to get suggestions!", + "button": "Generate", + "pool_size": "{count} possible tanks" + }, "mixer": { "name": "Mixer", "button": "Mix and match", diff --git a/packages/i18n/strings/pt.json b/packages/i18n/strings/pt.json index adff3e1b3..037c93c60 100644 --- a/packages/i18n/strings/pt.json +++ b/packages/i18n/strings/pt.json @@ -762,6 +762,38 @@ } }, "tools": { + "playlist": { + "reset": "Restaurar", + "shuffle": "Shuffle", + "remove": "Remove played", + "tracking": "BlitzKit is tracking your battles", + "sort": { + "button": "Ordenar por", + "last_played": "Last played", + "least_played": "Least played" + }, + "table": { + "index": "#", + "never": "Never", + "tank": "Tanque", + "last_played": "Last played", + "battles": "Career battles", + "unrecorded": "--", + "wins": "Vitórias" + }, + "large_warning": { + "title": "That's a lot of tanks!", + "description": "Are you sure you want to create a playlist of {count} tanks? That's {time} hours of gameplay at 50% winrate!", + "cancel": "Cancelar", + "proceed": "Proceed" + }, + "generate": "Generate playlist", + "name": "Playlist", + "description": "Tank playlist generator", + "seo_description": "Don't know what to play in World of Tanks Blitz? Use BlitzKit Playlist to get suggestions!", + "button": "Generate", + "pool_size": "{count} possible tanks" + }, "mixer": { "name": "Mixer", "button": "Mix and match", diff --git a/packages/i18n/strings/ru.json b/packages/i18n/strings/ru.json index e0941f1e4..7d892eb12 100644 --- a/packages/i18n/strings/ru.json +++ b/packages/i18n/strings/ru.json @@ -762,6 +762,38 @@ } }, "tools": { + "playlist": { + "reset": "Сброс", + "shuffle": "Shuffle", + "remove": "Remove played", + "tracking": "BlitzKit is tracking your battles", + "sort": { + "button": "Сортировка", + "last_played": "Last played", + "least_played": "Least played" + }, + "table": { + "index": "#", + "never": "Never", + "tank": "Танк", + "last_played": "Last played", + "battles": "Career battles", + "unrecorded": "--", + "wins": "Победы" + }, + "large_warning": { + "title": "That's a lot of tanks!", + "description": "Are you sure you want to create a playlist of {count} tanks? That's {time} hours of gameplay at 50% winrate!", + "cancel": "Отмена", + "proceed": "Proceed" + }, + "generate": "Generate playlist", + "name": "Playlist", + "description": "Tank playlist generator", + "seo_description": "Don't know what to play in World of Tanks Blitz? Use BlitzKit Playlist to get suggestions!", + "button": "Generate", + "pool_size": "{count} possible tanks" + }, "mixer": { "name": "Смешать", "button": "Смешать и собрать", diff --git a/packages/i18n/strings/uk.json b/packages/i18n/strings/uk.json index b7f3c025b..de11ec099 100644 --- a/packages/i18n/strings/uk.json +++ b/packages/i18n/strings/uk.json @@ -762,6 +762,38 @@ } }, "tools": { + "playlist": { + "reset": "Reset", + "shuffle": "Shuffle", + "remove": "Remove played", + "tracking": "BlitzKit is tracking your battles", + "sort": { + "button": "Сортувати за", + "last_played": "Last played", + "least_played": "Least played" + }, + "table": { + "index": "#", + "never": "Never", + "tank": "Танк", + "last_played": "Last played", + "battles": "Career battles", + "unrecorded": "--", + "wins": "Перемоги" + }, + "large_warning": { + "title": "That's a lot of tanks!", + "description": "Are you sure you want to create a playlist of {count} tanks? That's {time} hours of gameplay at 50% winrate!", + "cancel": "Cancel", + "proceed": "Proceed" + }, + "generate": "Generate playlist", + "name": "Playlist", + "description": "Tank playlist generator", + "seo_description": "Don't know what to play in World of Tanks Blitz? Use BlitzKit Playlist to get suggestions!", + "button": "Generate", + "pool_size": "{count} possible tanks" + }, "mixer": { "name": "Mixer", "button": "Mix and match", diff --git a/packages/i18n/strings/zh.json b/packages/i18n/strings/zh.json index 6519f17be..3d9c0b04b 100644 --- a/packages/i18n/strings/zh.json +++ b/packages/i18n/strings/zh.json @@ -284,7 +284,7 @@ "name": "阶级", "description": "阶级", "choices": { - "tier": "Tier {tier_1} - {tier_2}" + "tier": "坦克等级 {tier_1} - {tier_2}" } } }, @@ -296,7 +296,7 @@ }, "filters": { "none": "无筛选器", - "tier": "Tier {tier}" + "tier": "坦克等级 {tier}" }, "no_data": { "battles_in_period": "在这段时间里没有参与任何战斗", @@ -347,7 +347,7 @@ }, "errors": { "non_tech_tree": "# {tank} is not on the tech tree\n\nYou cannot research a premium/collector tank.", - "tier_1": "# {tank} is a tier I\n\nTier I tanks are always unlocked for free for all players.", + "tier_1": "# {tank} 是一级坦克\n\n一级坦克一直是对所有玩家免费解锁的。", "already_researched": "# {tank} is already researched\n\nTry providing a `starting-tank` when using the command to view the totals for a line you have already researched.", "start_end_equal": "# {tank} was provided twice\n\nMake sure `starting-tank` and `target-tank` are different.", "tanks_not_on_line": "# {tank_1} and {tank_2} are not on the same line\n\nMake sure `starting-tank` and `target-tank` are on the same tech-tree line.", @@ -762,6 +762,38 @@ } }, "tools": { + "playlist": { + "reset": "重置", + "shuffle": "Shuffle", + "remove": "Remove played", + "tracking": "BlitzKit is tracking your battles", + "sort": { + "button": "排序依据", + "last_played": "Last played", + "least_played": "Least played" + }, + "table": { + "index": "#", + "never": "Never", + "tank": "战车", + "last_played": "Last played", + "battles": "Career battles", + "unrecorded": "--", + "wins": "胜利" + }, + "large_warning": { + "title": "That's a lot of tanks!", + "description": "Are you sure you want to create a playlist of {count} tanks? That's {time} hours of gameplay at 50% winrate!", + "cancel": "取消", + "proceed": "Proceed" + }, + "generate": "Generate playlist", + "name": "Playlist", + "description": "Tank playlist generator", + "seo_description": "Don't know what to play in World of Tanks Blitz? Use BlitzKit Playlist to get suggestions!", + "button": "Generate", + "pool_size": "{count} possible tanks" + }, "mixer": { "name": "Mixer", "button": "Mix and match", From 864d34f344aa661ab5f913336c0fa3550dade2f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Wed, 15 Oct 2025 18:14:20 -0500 Subject: [PATCH 22/22] feat: remove checked --- packages/website/src/components/PlaylistActions.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/website/src/components/PlaylistActions.tsx b/packages/website/src/components/PlaylistActions.tsx index b53ab9366..faeb14fa3 100644 --- a/packages/website/src/components/PlaylistActions.tsx +++ b/packages/website/src/components/PlaylistActions.tsx @@ -46,9 +46,10 @@ export function PlaylistActions() { Playlist.mutate((draft) => { draft.list = draft.list?.filter( (entry) => - !entry.now || - !entry.then || - entry.now.battles === entry.then.battles + (!entry.now || + !entry.then || + entry.now.battles === entry.then.battles) && + !entry.checked ); }); }}