mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-30 22:31:52 +02:00
Add dynamic() support to prompt.form() plugin API
- prompt.form() inputs can now have dynamic() callbacks that update reactively when form values change (same pattern as auth/template plugins) - Changed PromptFormRequest routing from one-shot to bidirectional events - Added PromptFormResponse.done field to distinguish intermediate updates - Added optional size (enum) to PromptFormRequest for dialog sizing - Added optional rows to FormInputEditor for fixed height editors - New httpsnippet plugin: generates code snippets with dynamic language and library selectors that update the code preview in real-time
This commit is contained in:
@@ -360,8 +360,9 @@ function EditorArg({
|
||||
className={classNames(
|
||||
'border border-border rounded-md overflow-hidden px-2 py-1',
|
||||
'focus-within:border-border-focus',
|
||||
'max-h-[10rem]', // So it doesn't take up too much space
|
||||
!arg.rows && 'max-h-[10rem]', // So it doesn't take up too much space
|
||||
)}
|
||||
style={arg.rows ? { height: `${arg.rows * 1.4 + 0.75}rem` } : undefined}
|
||||
>
|
||||
<Editor
|
||||
id={id}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { FormInput, JsonPrimitive } from '@yaakapp-internal/plugins';
|
||||
import type { FormEvent } from 'react';
|
||||
import { useCallback, useRef, useState } from 'react';
|
||||
import { useCallback, useEffect, useRef, useState } from 'react';
|
||||
import { generateId } from '../../lib/generateId';
|
||||
import { DynamicForm } from '../DynamicForm';
|
||||
import { Button } from './Button';
|
||||
@@ -12,16 +12,21 @@ export interface PromptProps {
|
||||
onResult: (value: Record<string, JsonPrimitive> | null) => void;
|
||||
confirmText?: string;
|
||||
cancelText?: string;
|
||||
onValuesChange?: (values: Record<string, JsonPrimitive>) => void;
|
||||
onInputsUpdated?: (cb: (inputs: FormInput[]) => void) => void;
|
||||
}
|
||||
|
||||
export function Prompt({
|
||||
onCancel,
|
||||
inputs,
|
||||
inputs: initialInputs,
|
||||
onResult,
|
||||
confirmText = 'Confirm',
|
||||
cancelText = 'Cancel',
|
||||
onValuesChange,
|
||||
onInputsUpdated,
|
||||
}: PromptProps) {
|
||||
const [value, setValue] = useState<Record<string, JsonPrimitive>>({});
|
||||
const [inputs, setInputs] = useState<FormInput[]>(initialInputs);
|
||||
const handleSubmit = useCallback(
|
||||
(e: FormEvent<HTMLFormElement>) => {
|
||||
e.preventDefault();
|
||||
@@ -30,6 +35,16 @@ export function Prompt({
|
||||
[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 (
|
||||
|
||||
Reference in New Issue
Block a user