From 3aafe4d9f186b566287f102a8db1c73833b66646 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Fri, 30 May 2025 15:06:44 -0500 Subject: [PATCH] feat: code split --- .../{gallery.webp => avatars.webp} | Bin .../src/components/Avatars/Group.tsx | 78 ++++++++++++++ .../src/components/ToolOpenGraph.astro | 33 ++++++ .../website-ue/src/layouts/ToolLayout.astro | 45 ++++++++ .../src/pages/[...locale]/avatars/_index.tsx | 99 ++++-------------- .../src/pages/[...locale]/avatars/index.astro | 7 +- 6 files changed, 179 insertions(+), 83 deletions(-) rename packages/website-ue/public/assets/tool-backgrounds/{gallery.webp => avatars.webp} (100%) create mode 100644 packages/website-ue/src/components/Avatars/Group.tsx create mode 100644 packages/website-ue/src/components/ToolOpenGraph.astro create mode 100644 packages/website-ue/src/layouts/ToolLayout.astro diff --git a/packages/website-ue/public/assets/tool-backgrounds/gallery.webp b/packages/website-ue/public/assets/tool-backgrounds/avatars.webp similarity index 100% rename from packages/website-ue/public/assets/tool-backgrounds/gallery.webp rename to packages/website-ue/public/assets/tool-backgrounds/avatars.webp diff --git a/packages/website-ue/src/components/Avatars/Group.tsx b/packages/website-ue/src/components/Avatars/Group.tsx new file mode 100644 index 000000000..d5fca2711 --- /dev/null +++ b/packages/website-ue/src/components/Avatars/Group.tsx @@ -0,0 +1,78 @@ +import type { ProfileAvatarComponent } from '@protos/blitz_static_profile_avatar_component'; +import type { SellableComponent } from '@protos/blitz_static_sellable_component'; +import type { StuffUIComponent } from '@protos/blitz_static_stuff_ui_component'; +import { Badge, Box, Flex, Text } from '@radix-ui/themes'; +import { literals } from 'packages/i18n/src'; +import { Var } from '../../core/radix/var'; +import { useLocale } from '../../hooks/useLocale'; + +interface AvatarGroupProps { + name: string; + avatars: { + stuff: StuffUIComponent; + avatar: ProfileAvatarComponent; + sellable: SellableComponent; + }[]; +} + +const dx = '4px'; +const MAX_AVATARS_PREVIEW = 5; + +export function AvatarGroup({ avatars, name }: AvatarGroupProps) { + const { strings } = useLocale(); + const avatarsReduced = [...avatars].reverse().slice(0, MAX_AVATARS_PREVIEW); + + return ( + + + {avatarsReduced.map((avatar, index) => ( + + {avatars.length > 1 && ( + + )} + + ))} + + {avatars.length > 1 && ( + + + {literals(strings.common.units.times, [`${avatars.length}`])} + + + )} + + + + {name} + + + ); +} diff --git a/packages/website-ue/src/components/ToolOpenGraph.astro b/packages/website-ue/src/components/ToolOpenGraph.astro new file mode 100644 index 000000000..8952e6ec5 --- /dev/null +++ b/packages/website-ue/src/components/ToolOpenGraph.astro @@ -0,0 +1,33 @@ +--- +import { AstroSeo } from '@astrolib/seo'; +import { type Tool } from '../constants/tools'; +import { getStrings } from '../core/i18n/getStrings'; + +interface Props { + tool: Tool; + locale: string; +} + +const { tool, locale } = Astro.props; +const strings = await getStrings(locale); +const toolStrings = + strings.website.tools[ + (tool.strings ?? tool.id) as keyof typeof strings.website.tools + ]; +--- + + diff --git a/packages/website-ue/src/layouts/ToolLayout.astro b/packages/website-ue/src/layouts/ToolLayout.astro new file mode 100644 index 000000000..ecd29b924 --- /dev/null +++ b/packages/website-ue/src/layouts/ToolLayout.astro @@ -0,0 +1,45 @@ +--- +import { Box, Flex, Heading, Text } from '@radix-ui/themes'; +import ToolOpenGraph from '../components/ToolOpenGraph.astro'; +import { type Tool } from '../constants/tools'; +import { getStrings } from '../core/i18n/getStrings'; +import BaseLayout from './BaseLayout.astro'; + +interface Props { + tool: Tool; + locale: string; +} + +const { tool, locale } = Astro.props; +const strings = await getStrings(locale); +const toolStrings = + strings.website.tools[ + (tool.strings ?? tool.id) as keyof typeof strings.website.tools + ]; +--- + + + + + + + {toolStrings.name} + {toolStrings.description} + + + + + diff --git a/packages/website-ue/src/pages/[...locale]/avatars/_index.tsx b/packages/website-ue/src/pages/[...locale]/avatars/_index.tsx index 65dbd7bf0..d25cb7214 100644 --- a/packages/website-ue/src/pages/[...locale]/avatars/_index.tsx +++ b/packages/website-ue/src/pages/[...locale]/avatars/_index.tsx @@ -1,12 +1,12 @@ import { ProfileAvatarComponent } from '@protos/blitz_static_profile_avatar_component'; +import { SellableComponent } from '@protos/blitz_static_sellable_component'; import { StuffUIComponent } from '@protos/blitz_static_stuff_ui_component'; import { BlitzkitAllAvatarsComponent } from '@protos/blitzkit_static_all_avatars_component'; -import { Badge, Box, Flex, Grid, Text } from '@radix-ui/themes'; +import { Grid } from '@radix-ui/themes'; import { CatalogItemAccessor } from 'packages/core/src/blitz/catalogItemAccessor'; -import { literals } from 'packages/i18n/src'; +import { AvatarGroup } from 'packages/website-ue/src/components/Avatars/Group'; import { PageWrapper } from 'packages/website-ue/src/components/PageWrapper'; import { metadata } from 'packages/website-ue/src/core/blitz/metadata'; -import { Var } from 'packages/website-ue/src/core/radix/var'; import { LocaleProvider, useLocale, @@ -30,27 +30,25 @@ export function Page({ localeData }: LocaleAcceptorProps) { ); } -const dx = '4px'; -const MAX_AVATARS_PREVIEW = 5; - function Content() { const { gameStrings, strings } = useLocale(); const groups = useMemo(() => { const avatars = allAvatars - .map((avatar) => { - const item = new CatalogItemAccessor(avatar); - const stuffComponent = item.get(StuffUIComponent, 'UIComponent'); - const avatarComponent = item.get( + .map((id) => { + const item = new CatalogItemAccessor(id); + const stuff = item.get(StuffUIComponent, 'UIComponent'); + const avatar = item.get( ProfileAvatarComponent, 'profileAvatarComponent', ); + const sellable = item.get(SellableComponent, 'sellableComponent'); const name = - gameStrings[stuffComponent.display_name] ?? - strings.website.tools.avatars.unnamed_avatar; + gameStrings[stuff.display_name] ?? + strings.website.tools.avatars.unnamed_avatar; // maybe move to dumb component? - return { avatar, name, stuffComponent, avatarComponent }; + return { avatar, name, stuff, sellable }; }) - .sort((a, b) => a.stuffComponent.grade - b.stuffComponent.grade) + .sort((a, b) => a.stuff.grade - b.stuff.grade) .sort((a, b) => a.name.localeCompare(b.name)); const groups: Record = {}; @@ -68,77 +66,18 @@ function Content() { return ( - {groups.map(([name, avatars]) => { - const avatarsReduced = [...avatars] - .reverse() - .slice(0, MAX_AVATARS_PREVIEW); - - return ( - - - {avatarsReduced.map((avatar, index) => ( - - {avatars.length > 1 && ( - - )} - - ))} - - {avatars.length > 1 && ( - - - {literals(strings.common.units.times, [ - `${avatars.length}`, - ])} - - - )} - - - - {name} - - - ); - })} + {groups.map(([name, avatars]) => ( + + ))} ); diff --git a/packages/website-ue/src/pages/[...locale]/avatars/index.astro b/packages/website-ue/src/pages/[...locale]/avatars/index.astro index 08f034df3..6a196da7d 100644 --- a/packages/website-ue/src/pages/[...locale]/avatars/index.astro +++ b/packages/website-ue/src/pages/[...locale]/avatars/index.astro @@ -1,6 +1,7 @@ --- +import { avatarsTool } from 'packages/website-ue/src/constants/tools'; import { metadata } from 'packages/website-ue/src/core/blitz/metadata'; -import BaseLayout from 'packages/website-ue/src/layouts/BaseLayout.astro'; +import ToolLayout from 'packages/website-ue/src/layouts/ToolLayout.astro'; import { Page } from './_index'; export { getStaticPaths } from '../index.astro'; @@ -12,6 +13,6 @@ const gameStrings = await metadata.stringsPartial(locale, [ ]); --- - + - +