mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-24 20:19:49 +02:00
feat: landing page cleanup
This commit is contained in:
1 parent
ade238966b
commit
4ae5283ac4
3 files changed
+32
-39
No files matched your search
@@ -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,21 +64,32 @@ export function PlaylistGenerator() {
|
|||||||
maxHeight={POOL_HEIGHT}
|
maxHeight={POOL_HEIGHT}
|
||||||
width="100%"
|
width="100%"
|
||||||
>
|
>
|
||||||
{tanksTrimmed.map((tank) => (
|
{tanksTrimmed.map((tank) =>
|
||||||
<LinkI18n
|
skeleton ? (
|
||||||
target="_blank"
|
<Box
|
||||||
locale={locale}
|
width="100%"
|
||||||
href={`/tanks/${tank.slug}`}
|
height="100%"
|
||||||
key={tank.id}
|
style={{ aspectRatio: "4 / 3" }}
|
||||||
style={{
|
p="1"
|
||||||
aspectRatio: "4 / 3",
|
>
|
||||||
backgroundSize: "cover",
|
<Skeleton width="100%" height="100%" />
|
||||||
backgroundPosition: "center",
|
</Box>
|
||||||
backgroundImage: `url(${tankIcon(tank.id)})`,
|
) : (
|
||||||
backgroundRepeat: "no-repeat",
|
<LinkI18n
|
||||||
}}
|
target="_blank"
|
||||||
/>
|
locale={locale}
|
||||||
))}
|
href={`/tanks/${tank.slug}`}
|
||||||
|
key={tank.id}
|
||||||
|
style={{
|
||||||
|
aspectRatio: "4 / 3",
|
||||||
|
backgroundSize: "cover",
|
||||||
|
backgroundPosition: "center",
|
||||||
|
backgroundImage: `url(${tankIcon(tank.id)})`,
|
||||||
|
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>
|
||||||
|
|||||||
Reference in new issue
Block a user