import type { FormInput, JsonPrimitive } from '@yaakapp-internal/plugins'; import type { FormEvent } from 'react'; import { useCallback, useEffect, useRef, useState } from 'react'; import { generateId } from '../../lib/generateId'; import { DynamicForm } from '../DynamicForm'; import { Button } from './Button'; import { HStack } from './Stacks'; export interface PromptProps { inputs: FormInput[]; onCancel: () => void; onResult: (value: Record | null) => void; confirmText?: string; cancelText?: string; onValuesChange?: (values: Record) => void; onInputsUpdated?: (cb: (inputs: FormInput[]) => void) => void; } export function Prompt({ onCancel, inputs: initialInputs, onResult, confirmText = 'Confirm', cancelText = 'Cancel', onValuesChange, onInputsUpdated, }: PromptProps) { const [value, setValue] = useState>({}); const [inputs, setInputs] = useState(initialInputs); const handleSubmit = useCallback( (e: FormEvent) => { e.preventDefault(); onResult(value); }, [onResult, value], ); // Register callback for external input updates (from plugin dynamic resolution) useEffect(() => { onInputsUpdated?.(setInputs); }, [onInputsUpdated]); // Notify of value changes for dynamic resolution useEffect(() => { onValuesChange?.(value); }, [value, onValuesChange]); const id = `prompt.form.${useRef(generateId()).current}`; return (
); }