import { App } from "antd"; import { useState } from "react"; import { formatCredits } from "@/constant/credits"; import { useWalletBalance } from "@/hooks/use-wallet-balance"; import { sidebarCheckinTitle, shouldShowSidebarCheckin } from "@/lib/sidebar-checkin"; import { cn } from "@/lib/utils"; import { ApiError } from "@/services/api/request"; import { checkinCredits } from "@/services/api/wallet"; import { useAppearanceStore } from "@/stores/use-appearance-store"; import { useUserStore } from "@/stores/use-user-store"; export function WorkspaceSidebarCheckin({ collapsed }: { collapsed: boolean }) { const user = useUserStore((state) => state.user); const creditsEnabled = useUserStore((state) => state.features.creditsEnabled); const brandName = useAppearanceStore((state) => state.appearance.brandName); const { policy, refresh } = useWalletBalance(user?.id, Boolean(user) && creditsEnabled); const { message } = App.useApp(); const [claiming, setClaiming] = useState(false); const visible = shouldShowSidebarCheckin({ creditsEnabled, checkinBonusMicrocredits: policy?.checkinBonusMicrocredits, checkedInToday: policy?.checkedInToday, }); if (!user || !visible || !policy) return null; const amount = formatCredits(policy.checkinBonusMicrocredits, 2); const title = sidebarCheckinTitle(brandName); const summary = `${title},今日可领 ${amount} 积分`; const claim = async () => { if (claiming) return; setClaiming(true); try { await checkinCredits(); window.dispatchEvent(new CustomEvent("wallet:updated")); await refresh(); message.success("签到成功,积分已到账"); } catch (error) { const alreadyClaimed = error instanceof ApiError && error.status === 409; window.dispatchEvent(new CustomEvent("wallet:updated")); await refresh(); if (alreadyClaimed) return; message.error(error instanceof Error ? error.message : "领取失败"); } finally { setClaiming(false); } }; if (collapsed) { return ( ); } return ( ); }