import { X } from 'lucide-react'; import { useEffect, useMemo, useState } from 'react'; import type { PlatformTheme } from '../../../packages/shared/src/contracts/runtime'; type RegistrationInviteModalProps = { isOpen: boolean; platformTheme: PlatformTheme; initialInviteCode: string; submitting: boolean; error: string; onClose: () => void; onSubmit: (inviteCode: string) => Promise; }; export function RegistrationInviteModal({ isOpen, platformTheme, initialInviteCode, submitting, error, onClose, onSubmit, }: RegistrationInviteModalProps) { const [inviteCode, setInviteCode] = useState(initialInviteCode); const normalizedInviteCode = useMemo( () => inviteCode .trim() .replace(/[^0-9a-z]/gi, '') .toUpperCase(), [inviteCode], ); useEffect(() => { if (!isOpen) { return; } setInviteCode(initialInviteCode); }, [initialInviteCode, isOpen]); if (!isOpen) { return null; } return (
event.stopPropagation()} >
请填写邀请码
{ event.preventDefault(); if (!normalizedInviteCode) { onClose(); return; } void onSubmit(normalizedInviteCode); }} > {error ? (
{error}
) : null}
); }