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 (
); }