File size: 1,824 Bytes
9b906ea | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | import { SettingsInput } from "#/components/features/settings/settings-input";
export interface PluginLaunchParameterInputProps {
pluginIndex: number;
paramKey: string;
paramValue: unknown;
onParameterChange: (
pluginIndex: number,
paramKey: string,
value: unknown,
) => void;
}
export function PluginLaunchParameterInput({
pluginIndex,
paramKey,
paramValue,
onParameterChange,
}: PluginLaunchParameterInputProps) {
const inputId = `plugin-${pluginIndex}-param-${paramKey}`;
if (typeof paramValue === "boolean") {
return (
<label
htmlFor={inputId}
className="flex w-full cursor-pointer items-center gap-2.5"
>
<input
id={inputId}
data-testid={inputId}
type="checkbox"
checked={paramValue}
onChange={(e) =>
onParameterChange(pluginIndex, paramKey, e.target.checked)
}
className="h-4 w-4 shrink-0 rounded"
/>
<span className="text-sm">{paramKey}</span>
</label>
);
}
if (typeof paramValue === "number") {
return (
<SettingsInput
testId={inputId}
name={`plugin-${pluginIndex}-param-${paramKey}`}
type="number"
label={paramKey}
value={String(paramValue)}
className="w-full"
onChange={(value) =>
onParameterChange(
pluginIndex,
paramKey,
value === "" ? 0 : parseFloat(value) || 0,
)
}
/>
);
}
return (
<SettingsInput
testId={inputId}
name={`plugin-${pluginIndex}-param-${paramKey}`}
type="text"
label={paramKey}
value={String(paramValue ?? "")}
className="w-full"
onChange={(value) => onParameterChange(pluginIndex, paramKey, value)}
/>
);
}
|