Thanks to visit codestin.com
Credit goes to github.com

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

+20-1
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

+36-40
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)