import { useState } from 'react' import { ApiError, declareParam, type ParamDeclaration } from '../lib/api' import { CollapseToggle, PopOutButton, sectionHeaderClassName, sectionHeaderLeftClassName, useSectionCollapsed } from './CollapsibleSection' 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) const [collapsed, setCollapsed] = useSectionCollapsed('params') const isBoolean = kind === 'boolean' async function handleSubmit(e: React.FormEvent) { e.preventDefault() setSubmitError(null) setSubmitting(true) try { // A boolean-kind param never uses a capture group — its value is just whether the regex matched. await declareParam({ name, message_match_regex: regex, capture_group: isBoolean ? '' : 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
setCollapsed(!collapsed)} />
) }