Skip to content

Commit 07632b8

Browse files
committed
fix: update to use useDebouncedFunction
1 parent 2931256 commit 07632b8

File tree

1 file changed

+46
-52
lines changed

1 file changed

+46
-52
lines changed

site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx

Lines changed: 46 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { Stack } from "components/Stack/Stack";
1818
import { Switch } from "components/Switch/Switch";
1919
import { UserAutocomplete } from "components/UserAutocomplete/UserAutocomplete";
2020
import { type FormikContextType, useFormik } from "formik";
21+
import { useDebouncedFunction } from "hooks/debounce";
2122
import { ArrowLeft } from "lucide-react";
2223
import {
2324
DynamicParameter,
@@ -209,67 +210,60 @@ export const CreateWorkspacePageViewExperimental: FC<
209210
parameters,
210211
]);
211212

212-
const [debouncedTimer, setDebouncedTimer] = useState<ReturnType<
213-
typeof setTimeout
214-
> | null>(null);
215-
216-
const handleChange = async (
217-
value: string,
218-
parameterField: string,
213+
const sendDynamicParamsRequest = (
219214
parameter: PreviewParameter,
215+
value: string,
220216
) => {
221-
// Update form value immediately for all types
222-
await form.setFieldValue(parameterField, {
223-
name: parameter.form_type,
224-
value,
217+
const formInputs = Object.fromEntries(
218+
form.values.rich_parameter_values?.map((value) => {
219+
return [value.name, value.value];
220+
}) ?? [],
221+
);
222+
// Update the input for the changed parameter
223+
formInputs[parameter.name] = value;
224+
225+
setWSResponseId((prevId) => {
226+
const newId = prevId + 1;
227+
const request: DynamicParametersRequest = {
228+
id: newId,
229+
inputs: formInputs,
230+
};
231+
sendMessage(request);
232+
return newId;
225233
});
234+
};
226235

227-
// Create the request object
228-
const createRequest = () => {
229-
const newInputs = Object.fromEntries(
230-
form.values.rich_parameter_values?.map((value) => {
231-
return [value.name, value.value];
232-
}) ?? [],
233-
);
234-
// Update the input for the changed parameter
235-
newInputs[parameter.name] = value;
236-
237-
setWSResponseId((prevId) => {
238-
const newId = prevId + 1;
239-
const request: DynamicParametersRequest = {
240-
id: newId,
241-
inputs: newInputs,
242-
};
243-
sendMessage(request);
244-
return newId;
236+
const { debounced: handleChangeDebounced } = useDebouncedFunction(
237+
async (
238+
parameter: PreviewParameter,
239+
parameterField: string,
240+
value: string,
241+
) => {
242+
await form.setFieldValue(parameterField, {
243+
name: parameter.form_type,
244+
value,
245245
});
246-
};
247-
248-
// Clear any existing timer
249-
if (debouncedTimer) {
250-
clearTimeout(debouncedTimer);
251-
}
246+
sendDynamicParamsRequest(parameter, value);
247+
},
248+
500,
249+
);
252250

253-
// For input type, debounce the sendMessage
254-
if (parameter.form_type === "input") {
255-
const timer = setTimeout(() => {
256-
createRequest();
257-
}, 1050);
258-
setDebouncedTimer(timer);
251+
const handleChange = async (
252+
parameter: PreviewParameter,
253+
parameterField: string,
254+
value: string,
255+
) => {
256+
if (parameter.form_type === "input" || parameter.form_type === "textarea") {
257+
handleChangeDebounced(parameter, parameterField, value);
259258
} else {
260-
// For all other form control types (checkbox, select, etc.), send immediately
261-
createRequest();
259+
await form.setFieldValue(parameterField, {
260+
name: parameter.form_type,
261+
value,
262+
});
263+
sendDynamicParamsRequest(parameter, value);
262264
}
263265
};
264266

265-
useEffect(() => {
266-
return () => {
267-
if (debouncedTimer) {
268-
clearTimeout(debouncedTimer);
269-
}
270-
};
271-
}, [debouncedTimer]);
272-
273267
return (
274268
<>
275269
<div className="absolute sticky top-5 ml-10">
@@ -493,7 +487,7 @@ export const CreateWorkspacePageViewExperimental: FC<
493487
key={parameter.name}
494488
parameter={parameter}
495489
onChange={(value) =>
496-
handleChange(value, parameterField, parameter)
490+
handleChange(parameter, parameterField, value)
497491
}
498492
disabled={isDisabled}
499493
isPreset={isPresetParameter}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy