import { useState } from 'react' import { ApiError, declareParam, type ParamDeclaration } from '../lib/api' import { HelpIcon } from './HelpIcon' const EMPTY_KIND: ParamDeclaration['kind'] = 'string' export function Params({ params, onDeclared }: { params: ParamDeclaration[]; onDeclared: () => void }) { const [name, setName] = useState('') const [regex, setRegex] = useState('') const [captureGroup, setCaptureGroup] = useState('') const [kind, setKind] = useState(EMPTY_KIND) const [submitError, setSubmitError] = useState(null) const [submitting, setSubmitting] = useState(false) async function handleSubmit(e: React.FormEvent) { e.preventDefault() setSubmitError(null) setSubmitting(true) try { await declareParam({ name, message_match_regex: regex, capture_group: captureGroup, kind }) setName('') setRegex('') setCaptureGroup('') setKind(EMPTY_KIND) onDeclared() } catch (err) { setSubmitError(err instanceof ApiError ? err.message : 'Failed to declare param') } finally { setSubmitting(false) } } return (
Params
setName(e.target.value)} placeholder="path" required />
setRegex(e.target.value)} placeholder={String.raw`request path=(?P\S+)`} required />
setCaptureGroup(e.target.value)} placeholder="path" required />
{submitError &&
{submitError}
}
Declared params
{params.length === 0 && No params declared yet.} {params.map((p) => ( {p.name} ({p.kind}, group {p.capture_group}) ))}
) }