import { useEffect, useMemo, useState } from 'react'; import type { PlatformTheme } from '../../../packages/shared/src/contracts/runtime'; import { PlatformActionButton } from '../common/PlatformActionButton'; import { PlatformFieldLabel } from '../common/PlatformFieldLabel'; import { PlatformStatusMessage } from '../common/PlatformStatusMessage'; import { PlatformTextField } from '../common/PlatformTextField'; import { PlatformAuthModalShell } from './PlatformAuthModalShell'; 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.preventDefault(); if (!normalizedInviteCode) { onClose(); return; } void onSubmit(normalizedInviteCode); }} > {error ? ( {error} ) : null} {submitting ? '提交中' : normalizedInviteCode ? '提交' : '跳过'}
); }