From 2b041aa066c8231a130f1bbb2f175b53dc953f96 Mon Sep 17 00:00:00 2001 From: Parkreiner Date: Mon, 4 Mar 2024 20:04:58 +0000 Subject: [PATCH 1/3] fix: ensure auto-workspace creation waits until all parameters are ready --- .../CreateWorkspacePage/CreateWorkspacePage.tsx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx index 083ad01c7432d..5239c4a99f93f 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx @@ -1,4 +1,4 @@ -import { type FC, useCallback, useEffect, useState } from "react"; +import { type FC, useCallback, useEffect, useState, useRef } from "react"; import { Helmet } from "react-helmet-async"; import { useMutation, useQuery, useQueryClient } from "react-query"; import { useNavigate, useParams, useSearchParams } from "react-router-dom"; @@ -122,11 +122,18 @@ const CreateWorkspacePage: FC = () => { } }); + const autoCreationStartedRef = useRef(false); useEffect(() => { - if (mode === "auto") { + const shouldStartAutoCreation = + !autoCreationStartedRef.current && + mode === "auto" && + userParametersQuery.isSuccess; + + if (shouldStartAutoCreation) { + autoCreationStartedRef.current = true; void automateWorkspaceCreation(); } - }, [automateWorkspaceCreation, mode]); + }, [automateWorkspaceCreation, mode, userParametersQuery.isSuccess]); return ( <> From d5441de5e9c2349015b744c31d3459552823ac25 Mon Sep 17 00:00:00 2001 From: Parkreiner Date: Mon, 4 Mar 2024 20:17:58 +0000 Subject: [PATCH 2/3] refactor: move creation blocking logic to main callback --- .../CreateWorkspacePage.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx index 5239c4a99f93f..fa70eda58276f 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx @@ -105,8 +105,14 @@ const CreateWorkspacePage: FC = () => { userParametersQuery.data ? userParametersQuery.data : [], ); + const autoCreationStartedRef = useRef(false); const automateWorkspaceCreation = useEffectEvent(async () => { + if (autoCreationStartedRef.current) { + return; + } + try { + autoCreationStartedRef.current = true; const newWorkspace = await autoCreateWorkspaceMutation.mutateAsync({ templateName, organizationId, @@ -122,18 +128,12 @@ const CreateWorkspacePage: FC = () => { } }); - const autoCreationStartedRef = useRef(false); + const autoStartReady = mode === "auto" && userParametersQuery.isSuccess; useEffect(() => { - const shouldStartAutoCreation = - !autoCreationStartedRef.current && - mode === "auto" && - userParametersQuery.isSuccess; - - if (shouldStartAutoCreation) { - autoCreationStartedRef.current = true; + if (autoStartReady) { void automateWorkspaceCreation(); } - }, [automateWorkspaceCreation, mode, userParametersQuery.isSuccess]); + }, [automateWorkspaceCreation, autoStartReady]); return ( <> From 3dd535701988d6a32e5bf977da03a18378a4a6b8 Mon Sep 17 00:00:00 2001 From: Parkreiner Date: Mon, 4 Mar 2024 20:20:33 +0000 Subject: [PATCH 3/3] fix: let creation start if experimental feature is off --- site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx index fa70eda58276f..dfb6f8074af1e 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx @@ -94,11 +94,11 @@ const CreateWorkspacePage: FC = () => { ); // Auto fill parameters + const autofillEnabled = experiments.includes("auto-fill-parameters"); const userParametersQuery = useQuery({ queryKey: ["userParameters"], queryFn: () => getUserParameters(templateQuery.data!.id), - enabled: - experiments.includes("auto-fill-parameters") && templateQuery.isSuccess, + enabled: autofillEnabled && templateQuery.isSuccess, }); const autofillParameters = getAutofillParameters( searchParams, @@ -128,7 +128,8 @@ const CreateWorkspacePage: FC = () => { } }); - const autoStartReady = mode === "auto" && userParametersQuery.isSuccess; + const autoStartReady = + mode === "auto" && (!autofillEnabled || userParametersQuery.isSuccess); useEffect(() => { if (autoStartReady) { void automateWorkspaceCreation();