Skip to content

Commit 670324f

Browse files
committed
fix: update default value handling for dynamic defaults
1 parent 70ea678 commit 670324f

File tree

2 files changed

+28
-27
lines changed

2 files changed

+28
-27
lines changed

site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import {
3232
TooltipTrigger,
3333
} from "components/Tooltip/Tooltip";
3434
import { Info, Settings, TriangleAlert } from "lucide-react";
35-
import { type FC, useId } from "react";
35+
import { type FC, useId, useState, useEffect } from "react";
3636
import type { AutofillBuildParameter } from "utils/richParameters";
3737
import * as Yup from "yup";
3838

@@ -164,14 +164,18 @@ const ParameterField: FC<ParameterFieldProps> = ({
164164
id,
165165
}) => {
166166
const value = validValue(parameter.value);
167-
const defaultValue = validValue(parameter.default_value);
167+
const [localValue, setLocalValue] = useState(value);
168+
169+
useEffect(() => {
170+
setLocalValue(value);
171+
}, [value]);
168172

169173
switch (parameter.form_type) {
170174
case "dropdown":
171175
return (
172176
<Select
173177
onValueChange={onChange}
174-
defaultValue={defaultValue}
178+
value={value}
175179
disabled={disabled}
176180
required={parameter.required}
177181
>
@@ -195,13 +199,13 @@ const ParameterField: FC<ParameterFieldProps> = ({
195199

196200
case "multi-select": {
197201
// Map parameter options to MultiSelectCombobox options format
198-
const comboboxOptions: Option[] = parameter.options.map((opt) => ({
202+
const options: Option[] = parameter.options.map((opt) => ({
199203
value: opt.value.value,
200204
label: opt.name,
201205
disable: false,
202206
}));
203207

204-
const defaultOptions: Option[] = JSON.parse(defaultValue).map(
208+
const selectedOptions: Option[] = JSON.parse(value).map(
205209
(val: string) => {
206210
const option = parameter.options.find((o) => o.value.value === val);
207211
return {
@@ -217,8 +221,8 @@ const ParameterField: FC<ParameterFieldProps> = ({
217221
inputProps={{
218222
id: `${id}-${parameter.name}`,
219223
}}
220-
options={comboboxOptions}
221-
defaultOptions={defaultOptions}
224+
options={options}
225+
defaultOptions={selectedOptions}
222226
onChange={(newValues) => {
223227
const values = newValues.map((option) => option.value);
224228
onChange(JSON.stringify(values));
@@ -254,7 +258,7 @@ const ParameterField: FC<ParameterFieldProps> = ({
254258
<RadioGroup
255259
onValueChange={onChange}
256260
disabled={disabled}
257-
defaultValue={defaultValue}
261+
value={value}
258262
>
259263
{parameter.options.map((option) => (
260264
<div
@@ -282,7 +286,6 @@ const ParameterField: FC<ParameterFieldProps> = ({
282286
<Checkbox
283287
id={parameter.name}
284288
checked={value === "true"}
285-
defaultChecked={defaultValue === "true"} // TODO: defaultChecked is always overridden by checked
286289
onCheckedChange={(checked) => {
287290
onChange(checked ? "true" : "false");
288291
}}
@@ -299,14 +302,11 @@ const ParameterField: FC<ParameterFieldProps> = ({
299302
<div className="flex flex-row items-baseline gap-3">
300303
<Slider
301304
className="mt-2"
302-
defaultValue={[
303-
Number(
304-
parameter.default_value.valid
305-
? parameter.default_value.value
306-
: 0,
307-
),
308-
]}
309-
onValueChange={([value]) => onChange(value.toString())}
305+
value={[Number(localValue ?? 0)]}
306+
onValueChange={([value]) => {
307+
setLocalValue(value.toString());
308+
onChange(value.toString());
309+
}}
310310
min={parameter.validations[0]?.validation_min ?? 0}
311311
max={parameter.validations[0]?.validation_max ?? 100}
312312
disabled={disabled}
@@ -319,8 +319,11 @@ const ParameterField: FC<ParameterFieldProps> = ({
319319
return (
320320
<Textarea
321321
className="max-w-2xl"
322-
defaultValue={defaultValue}
323-
onChange={(e) => onChange(e.target.value)}
322+
value={localValue}
323+
onChange={(e) => {
324+
setLocalValue(e.target.value);
325+
onChange(e.target.value);
326+
}}
324327
onInput={(e) => {
325328
const target = e.currentTarget;
326329
target.style.maxHeight = "700px";
@@ -354,8 +357,11 @@ const ParameterField: FC<ParameterFieldProps> = ({
354357
return (
355358
<Input
356359
type={inputType}
357-
defaultValue={defaultValue}
358-
onChange={(e) => onChange(e.target.value)}
360+
value={localValue}
361+
onChange={(e) => {
362+
setLocalValue(e.target.value);
363+
onChange(e.target.value);
364+
}}
359365
disabled={disabled}
360366
required={parameter.required}
361367
placeholder={

site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -205,12 +205,7 @@ export const CreateWorkspacePageViewExperimental: FC<
205205
parameter: PreviewParameter,
206206
value: string,
207207
) => {
208-
const formInputs = Object.fromEntries(
209-
form.values.rich_parameter_values?.map((value) => {
210-
return [value.name, value.value];
211-
}) ?? [],
212-
);
213-
// Update the input for the changed parameter
208+
const formInputs: {[k:string]:string} = {};
214209
formInputs[parameter.name] = value;
215210

216211
sendMessage(formInputs);

0 commit comments

Comments
 (0)