Skip to content

Commit 9ecd394

Browse files
committed
fix: update websocket when user or plan changes
1 parent 9b05d92 commit 9ecd394

File tree

2 files changed

+35
-35
lines changed

2 files changed

+35
-35
lines changed

site/src/DynamicForm.tsx

Lines changed: 33 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -59,50 +59,53 @@ export function DynamicForm() {
5959
return value.valid ? value.value : "";
6060
}
6161

62-
const handleTestdataChange = (value: string) => {
62+
const handleConfigChange = (type: 'testdata' | 'user' | 'plan', value: string) => {
6363
reset({});
6464
setPrevValues({});
6565
setResponse(null);
6666
setCurrentId(0);
6767

6868
const params = new URLSearchParams(window.location.search);
69-
params.set('testdata', value);
69+
70+
if (type === 'testdata') {
71+
params.set('testdata', value);
72+
setUrlTestdata(value);
73+
// Clear user and plan when testdata changes
74+
setPlan("");
75+
setUser("");
76+
params.delete('user');
77+
params.delete('plan');
78+
} else if (type === 'user') {
79+
if (value) {
80+
params.set('user', value);
81+
setUser(value);
82+
} else {
83+
params.delete('user');
84+
setUser("");
85+
}
86+
} else if (type === 'plan') {
87+
if (value) {
88+
params.set('plan', value);
89+
setPlan(value);
90+
} else {
91+
params.delete('plan');
92+
setPlan("");
93+
}
94+
}
95+
7096
const newUrl = `${window.location.pathname}?${params.toString()}`;
7197
window.history.replaceState({}, '', newUrl);
72-
setUrlTestdata(value);
73-
setPlan("");
74-
setUser("");
7598
};
7699

77100
const {
78101
users,
79102
isLoading: usersLoading,
80103
fetchError: usersFetchError
81104
} = useUsers(serverAddress, urlTestdata);
82-
83-
// Update URL when user or usePlan changes
84-
useEffect(() => {
85-
const params = new URLSearchParams(window.location.search);
86-
87-
if (plan) {
88-
params.set('plan', plan);
89-
} else {
90-
params.delete('plan');
91-
}
92-
93-
if (user) {
94-
params.set('user', user);
95-
} else {
96-
params.delete('user');
97-
}
98-
99-
const newUrl = `${window.location.pathname}?${params.toString()}`;
100-
window.history.replaceState({}, '', newUrl);
101-
}, [user, plan]);
102105

103106
const wsUrl = `ws://${serverAddress}/ws/${encodeURIComponent(urlTestdata)}?${plan ? `plan=${encodeURIComponent(plan)}&` : ''}${user ? `user=${encodeURIComponent(user)}` : ''}`;
104107

105-
const { message: serverResponse, sendMessage, connectionStatus } = useWebSocket<Response>(wsUrl, urlTestdata);
108+
const { message: serverResponse, sendMessage, connectionStatus } = useWebSocket<Response>(wsUrl, urlTestdata, user, plan);
106109

107110
const [response, setResponse] = useState<Response | null>(null);
108111
const [currentId, setCurrentId] = useState<number>(0);
@@ -418,7 +421,7 @@ export function DynamicForm() {
418421

419422
return (
420423
<div key={param.name} className="flex flex-col gap-2 text-left">
421-
<p style={{ color: "red" }}>form_type is required</p>
424+
{/* <p style={{ color: "red" }}>form_type is required</p> */}
422425
{renderDiagnostics(param.diagnostics)}
423426
</div>
424427
);
@@ -469,7 +472,7 @@ export function DynamicForm() {
469472
{testcontrols &&
470473
<div className="flex flex-row gap-4 mb-12">
471474
<Select
472-
onValueChange={handleTestdataChange}
475+
onValueChange={(value) => handleConfigChange('testdata', value)}
473476
value={urlTestdata}
474477
>
475478
<SelectTrigger className="w-fit">
@@ -488,9 +491,7 @@ export function DynamicForm() {
488491

489492
{Object.keys(users).length > 0 && (
490493
<Select
491-
onValueChange={(value) => {
492-
setUser(value);
493-
}}
494+
onValueChange={(value) => handleConfigChange('user', value)}
494495
value={user}
495496
>
496497
<SelectTrigger className="w-fit">
@@ -512,7 +513,7 @@ export function DynamicForm() {
512513
Use Plan
513514
<Switch
514515
checked={plan !== ""}
515-
onCheckedChange={() => setPlan(plan !== "" ? "" : "plan.json")}
516+
onCheckedChange={(checked) => handleConfigChange('plan', checked ? "plan.json" : "")}
516517
/>
517518
</span>
518519
</div>

site/src/useWebSocket.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
// useWebSocket.ts
21
import { useEffect, useRef, useState, useCallback } from "react";
32

4-
export function useWebSocket<T>(url: string, testdata: string) {
3+
export function useWebSocket<T>(url: string, testdata: string, user: string, plan: string) {
54
const [message, setMessage] = useState<T | null>(null);
65
const [connectionStatus, setConnectionStatus] = useState<'connecting' | 'connected' | 'disconnected'>('connecting');
76
const wsRef = useRef<WebSocket | null>(null);
@@ -71,7 +70,7 @@ export function useWebSocket<T>(url: string, testdata: string) {
7170
wsRef.current = null;
7271
}
7372
};
74-
}, [testdata, connectWebSocket]); // Remove url from dependencies
73+
}, [testdata, user, plan, connectWebSocket]); // Remove url from dependencies
7574

7675
const sendMessage = (data: unknown) => {
7776
if (wsRef.current && wsRef.current.readyState === WebSocket.OPEN) {

0 commit comments

Comments
 (0)