fix(splash): reuse latest chat message preview

This commit is contained in:
2026-07-14 11:28:23 +08:00
parent b4904e738b
commit f9c15bd91f
13 changed files with 389 additions and 18 deletions
@@ -3,7 +3,8 @@
import { useEffect, useState } from "react";
import type { LoginStatus } from "@/data/dto/auth";
import { fetchSplashLatestMessagePreview } from "@/lib/chat/splash_latest_message";
import { loadSplashLatestMessagePreview } from "@/lib/chat/splash_latest_message";
import { useSplashLatestMessageCache } from "@/providers/splash-latest-message-provider";
import { Logger, Result } from "@/utils";
const log = new Logger("SplashLatestMessage");
@@ -30,6 +31,7 @@ export function useSplashLatestMessage({
isAuthLoading,
loginStatus,
}: UseSplashLatestMessageInput): UseSplashLatestMessageOutput {
const cache = useSplashLatestMessageCache();
const [state, setState] = useState<SplashLatestMessageState>({
key: "",
loaded: false,
@@ -45,7 +47,7 @@ export function useSplashLatestMessage({
let cancelled = false;
const loadLatestMessage = async () => {
const result = await fetchSplashLatestMessagePreview();
const result = await loadSplashLatestMessagePreview({ cache });
if (cancelled) return;
if (Result.isErr(result)) {
@@ -69,7 +71,7 @@ export function useSplashLatestMessage({
return () => {
cancelled = true;
};
}, [requestKey, shouldLoad]);
}, [cache, requestKey, shouldLoad]);
if (!shouldLoad) return { message: null, isLoading: false };
if (state.key !== requestKey || !state.loaded) {