From ea412086d40267fb10606ab9173a0408a2efb211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Mon, 12 Jan 2026 14:13:21 -0600 Subject: [PATCH] feat: start of avatars --- .../src/components/AvatarCard/index.css | 19 +++++++++++++++++++ .../src/components/AvatarCard/index.tsx | 19 +++++++++++++++++++ packages/website-ue/src/core/api/client.ts | 16 +++------------- .../src/pages/[...locale]/avatars/_index.tsx | 16 +++++++++++++++- .../src/pages/[...locale]/avatars/index.astro | 8 ++++++++ .../src/pages/api/avatars/all.json.ts | 2 +- .../src/pages/api/avatars/all.pb.ts | 7 +++++++ 7 files changed, 72 insertions(+), 15 deletions(-) create mode 100644 packages/website-ue/src/components/AvatarCard/index.css create mode 100644 packages/website-ue/src/components/AvatarCard/index.tsx create mode 100644 packages/website-ue/src/pages/api/avatars/all.pb.ts diff --git a/packages/website-ue/src/components/AvatarCard/index.css b/packages/website-ue/src/components/AvatarCard/index.css new file mode 100644 index 000000000..aba12f507 --- /dev/null +++ b/packages/website-ue/src/components/AvatarCard/index.css @@ -0,0 +1,19 @@ +.avatar-card { + display: flex; + flex-direction: column; + align-items: center; + + .avatar-image { + width: 100%; + aspect-ratio: 7 / 8; + + background-size: cover; + background-position: center; + } + + .avatar-label { + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + } +} diff --git a/packages/website-ue/src/components/AvatarCard/index.tsx b/packages/website-ue/src/components/AvatarCard/index.tsx new file mode 100644 index 000000000..5ec82fe24 --- /dev/null +++ b/packages/website-ue/src/components/AvatarCard/index.tsx @@ -0,0 +1,19 @@ +import type { Avatar } from "../../protos/avatar"; +import { Text } from "../Text"; +import "./index.css"; + +interface Props { + avatar: Avatar; +} + +export function AvatarCard({ avatar }: Props) { + return ( +
+
+ {avatar.name} +
+ ); +} diff --git a/packages/website-ue/src/core/api/client.ts b/packages/website-ue/src/core/api/client.ts index 8069107f9..a1ca86ed8 100644 --- a/packages/website-ue/src/core/api/client.ts +++ b/packages/website-ue/src/core/api/client.ts @@ -1,19 +1,9 @@ import { fetchPB } from "@blitzkit/core"; -import { Tank } from "../../protos/tank"; -import { TankList } from "../../protos/tank_list"; -import { Tanks } from "../../protos/tanks"; +import { Avatars } from "../../protos/avatars"; import { AbstractAPI } from "./abstract"; export class ClientAPI extends AbstractAPI { - tanks() { - return fetchPB("/api/tanks/all.pb", Tanks); - } - - tankList() { - return fetchPB("/api/tanks/list.pb", TankList); - } - - tank(id: string) { - return fetchPB(`/api/tanks/${id}.pb`, Tank); + protected _avatars() { + return fetchPB("/api/avatars/all.pb", Avatars); } } diff --git a/packages/website-ue/src/pages/[...locale]/avatars/_index.tsx b/packages/website-ue/src/pages/[...locale]/avatars/_index.tsx index df36c2f41..d8e0f0b2b 100644 --- a/packages/website-ue/src/pages/[...locale]/avatars/_index.tsx +++ b/packages/website-ue/src/pages/[...locale]/avatars/_index.tsx @@ -1,5 +1,19 @@ +import { AvatarCard } from "../../../components/AvatarCard"; +import { api } from "../../../core/api/dynamic"; +import { useAwait } from "../../../hooks/useAwait"; + interface Props { skeleton?: boolean; } -export function Page({ skeleton }: Props) {} +export function Page({ skeleton }: Props) { + const { avatars } = useAwait(() => api.avatars(), "avatars"); + + return ( +
+ {avatars.map((avatar) => ( + + ))} +
+ ); +} diff --git a/packages/website-ue/src/pages/[...locale]/avatars/index.astro b/packages/website-ue/src/pages/[...locale]/avatars/index.astro index 0b4b1179a..b459b4f82 100644 --- a/packages/website-ue/src/pages/[...locale]/avatars/index.astro +++ b/packages/website-ue/src/pages/[...locale]/avatars/index.astro @@ -7,6 +7,14 @@ export { getStaticPaths } from "../index.astro"; const { locale } = Astro.props; --- + + diff --git a/packages/website-ue/src/pages/api/avatars/all.json.ts b/packages/website-ue/src/pages/api/avatars/all.json.ts index d112c5a09..6f88b1564 100644 --- a/packages/website-ue/src/pages/api/avatars/all.json.ts +++ b/packages/website-ue/src/pages/api/avatars/all.json.ts @@ -1,6 +1,6 @@ import { api } from "../../../core/api/dynamic"; export async function GET() { - const { avatars } = await api.avatars(); + const avatars = await api.avatars(); return Response.json(avatars); } diff --git a/packages/website-ue/src/pages/api/avatars/all.pb.ts b/packages/website-ue/src/pages/api/avatars/all.pb.ts new file mode 100644 index 000000000..f93f9afb1 --- /dev/null +++ b/packages/website-ue/src/pages/api/avatars/all.pb.ts @@ -0,0 +1,7 @@ +import { api } from "../../../core/api/dynamic"; +import { Avatars } from "../../../protos/avatars"; + +export async function GET() { + const avatars = await api.avatars(); + return new Response(Avatars.encode(avatars).finish()); +}