From 0d1d08d406f650d215ed1a2c6f7b0032d7431b67 Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Mon, 21 Jul 2025 21:22:39 +0000 Subject: [PATCH 1/5] fix: debounce slider to avoid laggy behavior --- .../DynamicParameter/DynamicParameter.tsx | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx index 5d92fb6d6ae6d..a13e1db6833c7 100644 --- a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx +++ b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx @@ -77,7 +77,8 @@ export const DynamicParameter: FC = ({ />
{parameter.form_type === "input" || - parameter.form_type === "textarea" ? ( + parameter.form_type === "textarea" || + parameter.form_type === "slider" ? ( = ({ ); } + + case "slider": + return ( +
+ { + setLocalValue(value.toString()); + }} + min={parameter.validations[0]?.validation_min ?? 0} + max={parameter.validations[0]?.validation_max ?? 100} + disabled={disabled} + /> + + {Number.isFinite(Number(localValue)) ? localValue : "0"} + +
+ ); } }; @@ -564,25 +585,6 @@ const ParameterField: FC = ({
); - case "slider": - return ( -
- { - onChange(value.toString()); - }} - min={parameter.validations[0]?.validation_min ?? 0} - max={parameter.validations[0]?.validation_max ?? 100} - disabled={disabled} - /> - - {Number.isFinite(Number(value)) ? value : "0"} - -
- ); case "error": return ; } From b2f30fc06ec7ebfe93786afbe2860bd3c8a66705 Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Mon, 21 Jul 2025 21:23:30 +0000 Subject: [PATCH 2/5] fix: format --- .../modules/workspaces/DynamicParameter/DynamicParameter.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx index a13e1db6833c7..995ca9cee2613 100644 --- a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx +++ b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx @@ -416,7 +416,9 @@ const DebouncedParameterField: FC = ({ { setLocalValue(value.toString()); }} From 49807807c0f32caa6fc378f0ce8ed877672e572e Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Mon, 21 Jul 2025 21:42:32 +0000 Subject: [PATCH 3/5] fix: slider improvements --- .../DynamicParameter/DynamicParameter.tsx | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx index 995ca9cee2613..3c77d79d661ad 100644 --- a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx +++ b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx @@ -411,23 +411,27 @@ const DebouncedParameterField: FC = ({ } case "slider": + const numericValue = Number.isFinite(Number(localValue)) ? Number(localValue) : 0; + const { + validation_min: min = 0, + validation_max: max = 100, + } = parameter.validations[0] ?? {}; + return (
{ setLocalValue(value.toString()); }} - min={parameter.validations[0]?.validation_min ?? 0} - max={parameter.validations[0]?.validation_max ?? 100} + min={min ?? undefined} + max={max ?? undefined} disabled={disabled} /> - {Number.isFinite(Number(localValue)) ? localValue : "0"} + {numericValue}
); From 24cf65712d302f15300ef52a242d47a5bcfd897f Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Mon, 21 Jul 2025 21:46:00 +0000 Subject: [PATCH 4/5] fix: format --- .../DynamicParameter/DynamicParameter.tsx | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx index 3c77d79d661ad..1a47621e1d594 100644 --- a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx +++ b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx @@ -410,12 +410,12 @@ const DebouncedParameterField: FC = ({ ); } - case "slider": - const numericValue = Number.isFinite(Number(localValue)) ? Number(localValue) : 0; - const { - validation_min: min = 0, - validation_max: max = 100, - } = parameter.validations[0] ?? {}; + case "slider": { + const numericValue = Number.isFinite(Number(localValue)) + ? Number(localValue) + : 0; + const { validation_min: min = 0, validation_max: max = 100 } = + parameter.validations[0] ?? {}; return (
@@ -430,11 +430,10 @@ const DebouncedParameterField: FC = ({ max={max ?? undefined} disabled={disabled} /> - - {numericValue} - + {numericValue}
); + } } }; From f7c8dcc493e948ad46b3feff3f4846f00d5ec2ec Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Tue, 22 Jul 2025 12:16:00 +0000 Subject: [PATCH 5/5] fix: handle dynamic defaults correct for debounced parameters --- .../workspaces/DynamicParameter/DynamicParameter.tsx | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx index 1a47621e1d594..fa8eab193b53a 100644 --- a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx +++ b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx @@ -85,7 +85,6 @@ export const DynamicParameter: FC = ({ value={value} onChange={onChange} disabled={disabled} - isPreset={isPreset} /> ) : ( void; disabled?: boolean; id: string; - isPreset?: boolean; } const DebouncedParameterField: FC = ({ @@ -260,7 +258,6 @@ const DebouncedParameterField: FC = ({ onChange, disabled, id, - isPreset, }) => { const [localValue, setLocalValue] = useState( value !== undefined ? value : validValue(parameter.value), @@ -272,13 +269,13 @@ const DebouncedParameterField: FC = ({ const prevDebouncedValueRef = useRef(); const prevValueRef = useRef(value); - // This is necessary in the case of fields being set by preset parameters + // Necessary for dynamic defaults or fields being set by preset parameters useEffect(() => { - if (isPreset && value !== undefined && value !== prevValueRef.current) { + if (value !== undefined && value !== prevValueRef.current) { setLocalValue(value); prevValueRef.current = value; } - }, [value, isPreset]); + }, [value]); useEffect(() => { // Only call onChangeEvent if debouncedLocalValue is different from the previously committed value