feat: landing page cleanup

This commit is contained in:
TrèsAbhi committed 2025-10-14 22:02:47 -05:00
1 parent ade238966b
commit 4ae5283ac4
3 files changed
+19 -26

No files matched your search

+1 -2
View File
@@ -863,7 +863,7 @@
"reset": "Reset", "reset": "Reset",
"shuffle": "Shuffle", "shuffle": "Shuffle",
"remove": "Remove played", "remove": "Remove played",
"tracking": "BlitzKit is tracking your playlist", "tracking": "BlitzKit is tracking your battles",
"sort": { "sort": {
"button": "Sort by", "button": "Sort by",
@@ -881,7 +881,6 @@
"wins": "Wins" "wins": "Wins"
}, },
"no_login_warning": "You are not logged in. BlitzKit will not keep track of your played tanks.",
"generate": "Generate playlist", "generate": "Generate playlist",
"name": "Playlist", "name": "Playlist",
"description": "Tank playlist generator", "description": "Tank playlist generator",
@@ -1,7 +1,6 @@
import { fisherYates, tankIcon } from "@blitzkit/core"; import { fisherYates, tankIcon } from "@blitzkit/core";
import { literals } from "@blitzkit/i18n"; import { literals } from "@blitzkit/i18n";
import { ExclamationTriangleIcon } from "@radix-ui/react-icons"; import { Box, Button, Flex, Grid, Skeleton, Text } from "@radix-ui/themes";
import { Box, Button, Flex, Grid, Text } from "@radix-ui/themes";
import { useMemo } from "react"; import { useMemo } from "react";
import usePromise from "react-promise-suspense"; import usePromise from "react-promise-suspense";
import { awaitableTankDefinitions } from "../core/awaitables/tankDefinitions"; import { awaitableTankDefinitions } from "../core/awaitables/tankDefinitions";
@@ -10,6 +9,7 @@ import { generatePlaylist } from "../core/blitzkit/generatePlaylist";
import { useLocale } from "../hooks/useLocale"; import { useLocale } from "../hooks/useLocale";
import { App } from "../stores/app"; import { App } from "../stores/app";
import { TankFilters } from "../stores/tankFilters"; import { TankFilters } from "../stores/tankFilters";
import type { MaybeSkeletonComponentProps } from "../types/maybeSkeletonComponentProps";
import { LinkI18n } from "./LinkI18n"; import { LinkI18n } from "./LinkI18n";
import { FilterControl } from "./TankSearch/components/FilterControl"; import { FilterControl } from "./TankSearch/components/FilterControl";
@@ -17,7 +17,7 @@ const tankDefinitions = await awaitableTankDefinitions;
const POOL_HEIGHT = "16rem"; const POOL_HEIGHT = "16rem";
export function PlaylistGenerator() { export function PlaylistGenerator({ skeleton }: MaybeSkeletonComponentProps) {
const { strings, locale } = useLocale(); const { strings, locale } = useLocale();
const wargaming = App.use((state) => state.logins.wargaming); const wargaming = App.use((state) => state.logins.wargaming);
const filters = TankFilters.use(); const filters = TankFilters.use();
@@ -47,15 +47,6 @@ export function PlaylistGenerator() {
<Button onClick={generatePlaylist} size="3"> <Button onClick={generatePlaylist} size="3">
{strings.website.tools.playlist.generate} {strings.website.tools.playlist.generate}
</Button> </Button>
{!wargaming && (
<Text color="gray">
<Flex align="center" gap="1">
<ExclamationTriangleIcon />
{strings.website.tools.playlist.no_login_warning}
</Flex>
</Text>
)}
</Flex> </Flex>
<Flex <Flex
@@ -73,7 +64,17 @@ export function PlaylistGenerator() {
maxHeight={POOL_HEIGHT} maxHeight={POOL_HEIGHT}
width="100%" width="100%"
> >
{tanksTrimmed.map((tank) => ( {tanksTrimmed.map((tank) =>
skeleton ? (
<Box
width="100%"
height="100%"
style={{ aspectRatio: "4 / 3" }}
p="1"
>
<Skeleton width="100%" height="100%" />
</Box>
) : (
<LinkI18n <LinkI18n
target="_blank" target="_blank"
locale={locale} locale={locale}
@@ -87,7 +88,8 @@ export function PlaylistGenerator() {
backgroundRepeat: "no-repeat", backgroundRepeat: "no-repeat",
}} }}
/> />
))} )
)}
<Box <Box
position="absolute" position="absolute"
@@ -1,4 +1,3 @@
import { useEffect } from "react";
import { PageWrapper } from "../../../components/PageWrapper"; import { PageWrapper } from "../../../components/PageWrapper";
import { PlaylistGenerator } from "../../../components/PlaylistGenerator"; import { PlaylistGenerator } from "../../../components/PlaylistGenerator";
import { PlaylistOrder } from "../../../components/PlaylistOrder"; import { PlaylistOrder } from "../../../components/PlaylistOrder";
@@ -17,20 +16,13 @@ export function Page({
skeleton, skeleton,
}: Props & MaybeSkeletonComponentProps) { }: Props & MaybeSkeletonComponentProps) {
const generated = Playlist.use((state) => state.list !== undefined); const generated = Playlist.use((state) => state.list !== undefined);
const wargaming = App.use((state) => state.logins.wargaming);
useEffect(() => { if (App.state.logins.wargaming) TankFilters.state.ownership = "owned";
if (wargaming) {
TankFilters.mutate((draft) => {
draft.ownership = "owned";
});
}
}, []);
return ( return (
<LocaleProvider locale={locale}> <LocaleProvider locale={locale}>
<PageWrapper color="tomato" direction="row" maxWidth="unset" p="0"> <PageWrapper color="tomato" direction="row" maxWidth="unset" p="0">
{!generated && <PlaylistGenerator />} {!generated && <PlaylistGenerator skeleton={skeleton} />}
{generated && <PlaylistOrder />} {generated && <PlaylistOrder />}
</PageWrapper> </PageWrapper>
</LocaleProvider> </LocaleProvider>