import { useState, type FormEvent } from 'react'; import { errorMessage } from '@/core-bridge/errors'; import { useToast } from '@/store/toast'; import { useWorkspace } from '@/store/workspace'; import { Button } from '@/ui/Button'; import { Sheet } from '@/ui/Sheet'; import styles from './MembersPane.module.css'; export function InviteSheet({ onClose, onInvited }: { onClose: () => void; onInvited: () => void }) { const invite = useWorkspace((s) => s.inviteUser); const [username, setUsername] = useState(''); const [busy, setBusy] = useState(false); const [error, setError] = useState(''); async function submit(event: FormEvent) { event.preventDefault(); const target = username.trim(); if (!target || busy) return; setBusy(true); setError(''); try { await invite(target); useToast.getState().push({ kind: 'ok', text: `已向 ${target} 发送邀请` }); onInvited(); onClose(); } catch (cause) { const message = errorMessage(cause); setError(message); useToast.getState().push({ kind: 'error', text: `邀请失败:${message}` }); } finally { setBusy(false); } } return { if (!busy) onClose(); }} placement="top">
{ void submit(event); }}>

对方登录后会收到通知,接受邀请后加入空间。能否读取加入前的历史,取决于各频道的历史开关。

{error ?

{error}

: null}
; }