feat(chat): sync multi-role backend APIs

This commit is contained in:
2026-07-20 11:29:54 +08:00
parent 16b5c16e76
commit b6fdc912ae
84 changed files with 1488 additions and 439 deletions
@@ -0,0 +1,45 @@
"use client";
import { type ReactNode, useEffect } from "react";
import { useRouter } from "next/navigation";
import type { CharacterProfile } from "@/data/constants/character";
import { getCharacterRoutes } from "@/router/routes";
import { useCharacterCatalog } from "./character-catalog-provider";
import { CharacterProvider } from "./character-provider";
export function CharacterRouteBoundary({
character,
children,
}: {
character: CharacterProfile;
children: ReactNode;
}) {
const catalog = useCharacterCatalog();
const router = useRouter();
const activeCharacter = catalog.getById(character.id);
useEffect(() => {
if (catalog.status === "loading" || activeCharacter) return;
router.replace(getCharacterRoutes(catalog.defaultCharacter.slug).splash);
}, [activeCharacter, catalog.defaultCharacter.slug, catalog.status, router]);
if (catalog.status === "loading" || !activeCharacter) {
return (
<div
className="flex min-h-dvh flex-1 items-center justify-center bg-[#fbf1f2]"
aria-label="Loading character"
role="status"
>
<div className="size-9 animate-spin rounded-full border-4 border-[#f657a0] border-t-transparent" />
</div>
);
}
return (
<CharacterProvider character={activeCharacter}>
{children}
</CharacterProvider>
);
}