import { useEffect, useState } from 'react'; import { accountApi, type AccountInvitation } from '@/core-bridge/account'; import { useChannels } from '@/store/channels'; import { Button } from '@/ui/Button'; import { channelPath, navigate } from '@/app/navigation'; import styles from './AccountPanel.module.css'; export function InvitationInbox() { const [invitations, setInvitations] = useState([]); const [error, setError] = useState(''); const [busy, setBusy] = useState(); useEffect(() => { void accountApi.invitations().then(setInvitations).catch(() => setError('读取邀请失败')); }, []); async function accept(id: string) { setBusy(id); setError(''); try { await accountApi.acceptInvitation(id); await useChannels.getState().refresh(); navigate(channelPath(id)); } catch (cause) { setError(cause instanceof Error ? cause.message : '加入失败'); } finally { setBusy(undefined); } } return
空间邀请 {invitations.length === 0 ?

暂无邀请。

: invitations.map((row) =>
空间 {row.channel_id.slice(0, 8)}…
)} {error ?

{error}

: null}
; }