import React from "react"; import { RadioGroup, RadioGroupItem } from "../components/ui/radio-group"; import { Label } from "../components/ui/label"; export type ConfigurableInputStatic = { mode: "static"; value: T; }; export type ConfigurableInputDynamic = { mode: "dynamic"; }; export type ConfigurableInput = | ConfigurableInputStatic | ConfigurableInputDynamic; export interface ValueCompProps { value: T; onChange: (value: T) => void; } export interface ConfigurableInputEditorProps { value: ConfigurableInput; onChange: (value: ConfigurableInput) => void; valueRenderer: React.FC>; modeLabel: string; defaultStaticValue: T; } export const ConfigurableInputEditor = function ({ value, onChange, valueRenderer: ValueRenderer, defaultStaticValue, modeLabel, }: ConfigurableInputEditorProps) { const handleModeChange = (newMode: string) => { onChange({ mode: newMode as "static" | "dynamic", value: newMode === "static" ? defaultStaticValue : undefined as any, }); }; const handleValueChange = (value: T) => { onChange({ value, mode: "static", }); }; const MemoValueRenderer = React.useMemo(() => ValueRenderer, [ValueRenderer]); return (
{value.mode === "static" ? ( ) : null}
); }; export const createConfigurableInputEditor = < T extends Record >( valueRenderer: React.FC> ) => { return (props: Omit, "valueRenderer">) => ( ); };