fix: 软刷新齐套前保留旧画面,避免一点击就卸光

Logo/下拉静默预热后一次覆盖;commit 不再先 reset/loading;顺带会话预取与可配置 Feed 排序标签。
This commit is contained in:
2026-09-01 04:56:10 +08:00
parent ba60a9b1c4
commit 9e134916a4
47 changed files with 2446 additions and 636 deletions

View File

@@ -1,6 +1,5 @@
import { CalendarCheck, Check, Gift, Loader2 } from 'lucide-react';
import { useNavigate } from 'react-router-dom';
import { Skeleton } from '@/components/ui/skeleton';
import { useCheckIn } from '../hooks/useCheckIn';
import { useAuth } from '../hooks/useAuth';
import { loginPath } from '../utils/authRedirect';
@@ -8,8 +7,13 @@ import { loginPath } from '../utils/authRedirect';
/** 右侧栏首块底部:每日签到 */
export default function AsideCheckInStrip() {
const nav = useNavigate();
const { user } = useAuth();
const { status, loading, busy, doCheckIn } = useCheckIn();
const { user, loading: authLoading } = useAuth();
const { status, loading, busy, doCheckIn } = useCheckIn(!!user && !authLoading);
// 鉴权未完成:空白,避免「登录签到」→「今日已签到」闪一下
if (authLoading) {
return null;
}
if (!user) {
return (
@@ -37,17 +41,14 @@ export default function AsideCheckInStrip() {
);
}
if (loading && !status) {
return (
<div className="widget-checkin" aria-busy="true" aria-label="签到加载中">
<Skeleton className="widget-checkin-skeleton" />
</div>
);
// 登录用户status 未到齐前不渲染最终态
if (loading || !status) {
return null;
}
const checkedIn = !!status?.checked_in;
const streak = status?.streak ?? 0;
const todayPoints = status?.today_points ?? 5;
const checkedIn = !!status.checked_in;
const streak = status.streak ?? 0;
const todayPoints = status.today_points ?? 5;
const meta = checkedIn
? (streak > 0 ? `连续 ${streak} 天 · 今日已获得 ${todayPoints} 积分` : `今日已获得 ${todayPoints} 积分`)