Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2da7d99

Browse files
committed
feat: connect to dynamic parameters websocket
1 parentb2c662a commit2da7d99

File tree

3 files changed

+64
-6
lines changed

3 files changed

+64
-6
lines changed

‎site/src/api/api.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,6 +1009,13 @@ class ApiMethods {
10091009
returnresponse.data;
10101010
};
10111011

1012+
templateVersionDynamicParameters=(versionId:string):WebSocket=>{
1013+
constsocket=createWebSocket(
1014+
`/api/v2/templateversions/${versionId}/dynamic-parameters`,
1015+
);
1016+
returnsocket;
1017+
};
1018+
10121019
/**
10131020
*@param organization Can be the organization's ID or name
10141021
*/

‎site/src/pages/CreateWorkspacePage/CreateWorkspacePageExperimental.tsx

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import type { AutofillBuildParameter } from "utils/richParameters";
3232
import{CreateWorkspacePageViewExperimental}from"./CreateWorkspacePageViewExperimental";
3333
exportconstcreateWorkspaceModes=["form","auto","duplicate"]asconst;
3434
exporttypeCreateWorkspaceMode=(typeofcreateWorkspaceModes)[number];
35+
import{API}from"api/api";
3536
import{
3637
typeCreateWorkspacePermissions,
3738
createWorkspaceChecks,
@@ -47,8 +48,8 @@ const CreateWorkspacePageExperimental: FC = () => {
4748

4849
const[currentResponse,setCurrentResponse]=
4950
useState<DynamicParametersResponse|null>(null);
50-
const[wsResponseId,setWSResponseId]=useState<number>(0);
51-
constsendMessage=(message:DynamicParametersRequest)=>{};
51+
const[wsResponseId,setWSResponseId]=useState<number>(-1);
52+
constwebSocket=useRef<WebSocket|null>(null);
5253

5354
constcustomVersionId=searchParams.get("version")??undefined;
5455
constdefaultName=searchParams.get("name");
@@ -80,6 +81,59 @@ const CreateWorkspacePageExperimental: FC = () => {
8081
constrealizedVersionId=
8182
customVersionId??templateQuery.data?.active_version_id;
8283

84+
// Initialize the WebSocket connection when there is a valid template version ID
85+
useEffect(()=>{
86+
if(!realizedVersionId){
87+
return;
88+
}
89+
90+
if(webSocket.current){
91+
webSocket.current.close();
92+
}
93+
94+
constsocket=API.templateVersionDynamicParameters(realizedVersionId);
95+
96+
socket.addEventListener("message",(event)=>{
97+
try{
98+
constresponse=JSON.parse(event.data)asDynamicParametersResponse;
99+
100+
if(response&&response.id>=wsResponseId){
101+
setCurrentResponse((prev)=>{
102+
if(prev?.id===response.id){
103+
returnprev;
104+
}
105+
returnresponse;
106+
});
107+
}
108+
}catch(error){
109+
console.error("Failed to parse WebSocket message:",error);
110+
}
111+
});
112+
113+
webSocket.current=socket;
114+
115+
return()=>{
116+
if(webSocket.current){
117+
webSocket.current.close();
118+
}
119+
};
120+
},[realizedVersionId]);
121+
122+
constsendMessage=
123+
(formValues:Record<string,string>)=>{
124+
setWSResponseId(prevId=>{
125+
constrequest: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+
returnprevId+1;
132+
}
133+
returnprevId;
134+
})
135+
};
136+
83137
constorganizationId=templateQuery.data?.organization_id;
84138

85139
const{
@@ -210,7 +264,6 @@ const CreateWorkspacePageExperimental: FC = () => {
210264
parameters={sortedParams}
211265
presets={templateVersionPresetsQuery.data??[]}
212266
creatingWorkspace={createWorkspaceMutation.isLoading}
213-
setWSResponseId={setWSResponseId}
214267
sendMessage={sendMessage}
215268
onCancel={()=>{
216269
navigate(-1);

‎site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,7 @@ export interface CreateWorkspacePageViewExperimentalProps {
6767
owner:TypesGen.User,
6868
)=>void;
6969
resetMutation:()=>void;
70-
sendMessage:(message:DynamicParametersRequest)=>void;
71-
setWSResponseId:(value:React.SetStateAction<number>)=>void;
70+
sendMessage:(message:Record<string,string>)=>void;
7271
startPollingExternalAuth:()=>void;
7372
}
7473

@@ -95,7 +94,6 @@ export const CreateWorkspacePageViewExperimental: FC<
9594
onCancel,
9695
resetMutation,
9796
sendMessage,
98-
setWSResponseId,
9997
startPollingExternalAuth,
10098
})=>{
10199
const[owner,setOwner]=useState(defaultOwner);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp