import { useRef, useState } from 'react'; import { Input, Typography } from 'antd'; import { HttpUtil } from '@/utils'; interface GoRegexInputProps { value: string; ariaLabel?: string; placeholder?: string; maxLength?: number; onChange: (value: string) => void; externalError?: string; } export async function validateGoRegex(value: string): Promise { const result = await HttpUtil.post( '/panel/api/setting/validateRegex', { regex: value }, { silent: true }, ); return result.success ? '' : result.msg || 'Invalid Go RE2 regular expression'; } export default function GoRegexInput({ value, ariaLabel, placeholder, maxLength = 2048, onChange, externalError, }: GoRegexInputProps) { const [error, setError] = useState(''); const validationSequence = useRef(0); async function validate() { const sequence = ++validationSequence.current; const nextError = await validateGoRegex(value); if (sequence === validationSequence.current) { setError(nextError); } } const displayError = externalError ?? error; return (
{ validationSequence.current += 1; setError(''); onChange(event.target.value); }} onBlur={() => void validate()} /> {displayError && {displayError}}
); }