Skip to content

Commit 98dfee2

Browse files
committed
chore: cleanup
1 parent 2da7d99 commit 98dfee2

File tree

2 files changed

+56
-41
lines changed

2 files changed

+56
-41
lines changed

site/src/api/api.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1009,10 +1009,29 @@ class ApiMethods {
10091009
return response.data;
10101010
};
10111011

1012-
templateVersionDynamicParameters = (versionId: string): WebSocket => {
1012+
templateVersionDynamicParameters = (
1013+
versionId: string,
1014+
{
1015+
onMessage,
1016+
onError,
1017+
}: {
1018+
onMessage: (response: TypesGen.DynamicParametersResponse) => void;
1019+
onError: (error: Error) => void;
1020+
},
1021+
): WebSocket => {
10131022
const socket = createWebSocket(
10141023
`/api/v2/templateversions/${versionId}/dynamic-parameters`,
10151024
);
1025+
1026+
socket.addEventListener("message", (event) =>
1027+
onMessage(JSON.parse(event.data) as TypesGen.DynamicParametersResponse),
1028+
);
1029+
1030+
socket.addEventListener("error", () => {
1031+
onError?.(new Error("Connection for dynamic parameters failed."));
1032+
socket.close();
1033+
});
1034+
10161035
return socket;
10171036
};
10181037

site/src/pages/CreateWorkspacePage/CreateWorkspacePageExperimental.tsx

Lines changed: 36 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ const CreateWorkspacePageExperimental: FC = () => {
4949
const [currentResponse, setCurrentResponse] =
5050
useState<DynamicParametersResponse | null>(null);
5151
const [wsResponseId, setWSResponseId] = useState<number>(-1);
52-
const webSocket = useRef<WebSocket | null>(null);
52+
const ws = useRef<WebSocket | null>(null);
5353

5454
const customVersionId = searchParams.get("version") ?? undefined;
5555
const defaultName = searchParams.get("name");
@@ -81,58 +81,54 @@ const CreateWorkspacePageExperimental: FC = () => {
8181
const realizedVersionId =
8282
customVersionId ?? templateQuery.data?.active_version_id;
8383

84+
const onMessage = useCallback((response: DynamicParametersResponse) => {
85+
setCurrentResponse((prev) => {
86+
if (prev?.id === response.id) {
87+
return prev;
88+
}
89+
return response;
90+
});
91+
}, []);
92+
8493
// Initialize the WebSocket connection when there is a valid template version ID
8594
useEffect(() => {
8695
if (!realizedVersionId) {
8796
return;
8897
}
8998

90-
if (webSocket.current) {
91-
webSocket.current.close();
99+
if (ws.current) {
100+
ws.current.close();
92101
}
93102

94-
const socket = API.templateVersionDynamicParameters(realizedVersionId);
95-
96-
socket.addEventListener("message", (event) => {
97-
try {
98-
const response = JSON.parse(event.data) as DynamicParametersResponse;
99-
100-
if (response && response.id >= wsResponseId) {
101-
setCurrentResponse((prev) => {
102-
if (prev?.id === response.id) {
103-
return prev;
104-
}
105-
return response;
106-
});
107-
}
108-
} catch (error) {
109-
console.error("Failed to parse WebSocket message:", error);
110-
}
103+
const socket = API.templateVersionDynamicParameters(realizedVersionId, {
104+
onMessage,
105+
onError: (error) => {
106+
console.error("Failed to parse dynamic parameters webSocket message:", error);
107+
},
111108
});
112109

113-
webSocket.current = socket;
110+
ws.current = socket;
114111

115112
return () => {
116-
if (webSocket.current) {
117-
webSocket.current.close();
113+
if (ws.current) {
114+
ws.current.close();
118115
}
119116
};
120-
}, [realizedVersionId]);
121-
122-
const sendMessage =
123-
(formValues: Record<string, string>) => {
124-
setWSResponseId(prevId => {
125-
const request: DynamicParametersRequest = {
126-
id: prevId + 1,
127-
inputs: formValues,
128-
};
129-
if (webSocket.current && webSocket.current.readyState === WebSocket.OPEN) {
130-
webSocket.current.send(JSON.stringify(request));
131-
return prevId + 1;
132-
}
133-
return prevId;
134-
})
135-
};
117+
}, [realizedVersionId, onMessage]);
118+
119+
const sendMessage = (formValues: Record<string, string>) => {
120+
setWSResponseId((prevId) => {
121+
const request: DynamicParametersRequest = {
122+
id: prevId + 1,
123+
inputs: formValues,
124+
};
125+
if (ws.current && ws.current.readyState === WebSocket.OPEN) {
126+
ws.current.send(JSON.stringify(request));
127+
return prevId + 1;
128+
}
129+
return prevId;
130+
});
131+
};
136132

137133
const organizationId = templateQuery.data?.organization_id;
138134

@@ -143,7 +139,7 @@ const CreateWorkspacePageExperimental: FC = () => {
143139
isLoadingExternalAuth,
144140
} = useExternalAuth(realizedVersionId);
145141

146-
const isLoadingFormData =
142+
const isLoadingFormData = ws.current?.readyState !== WebSocket.OPEN ||
147143
templateQuery.isLoading || permissionsQuery.isLoading;
148144
const loadFormDataError = templateQuery.error ?? permissionsQuery.error;
149145

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