@@ -49,7 +49,7 @@ const CreateWorkspacePageExperimental: FC = () => {
49
49
const [ currentResponse , setCurrentResponse ] =
50
50
useState < DynamicParametersResponse | null > ( null ) ;
51
51
const [ wsResponseId , setWSResponseId ] = useState < number > ( - 1 ) ;
52
- const webSocket = useRef < WebSocket | null > ( null ) ;
52
+ const ws = useRef < WebSocket | null > ( null ) ;
53
53
54
54
const customVersionId = searchParams . get ( "version" ) ?? undefined ;
55
55
const defaultName = searchParams . get ( "name" ) ;
@@ -81,58 +81,54 @@ const CreateWorkspacePageExperimental: FC = () => {
81
81
const realizedVersionId =
82
82
customVersionId ?? templateQuery . data ?. active_version_id ;
83
83
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
+
84
93
// Initialize the WebSocket connection when there is a valid template version ID
85
94
useEffect ( ( ) => {
86
95
if ( ! realizedVersionId ) {
87
96
return ;
88
97
}
89
98
90
- if ( webSocket . current ) {
91
- webSocket . current . close ( ) ;
99
+ if ( ws . current ) {
100
+ ws . current . close ( ) ;
92
101
}
93
102
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
+ } ,
111
108
} ) ;
112
109
113
- webSocket . current = socket ;
110
+ ws . current = socket ;
114
111
115
112
return ( ) => {
116
- if ( webSocket . current ) {
117
- webSocket . current . close ( ) ;
113
+ if ( ws . current ) {
114
+ ws . current . close ( ) ;
118
115
}
119
116
} ;
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
+ } ;
136
132
137
133
const organizationId = templateQuery . data ?. organization_id ;
138
134
@@ -143,7 +139,7 @@ const CreateWorkspacePageExperimental: FC = () => {
143
139
isLoadingExternalAuth,
144
140
} = useExternalAuth ( realizedVersionId ) ;
145
141
146
- const isLoadingFormData =
142
+ const isLoadingFormData = ws . current ?. readyState !== WebSocket . OPEN ||
147
143
templateQuery . isLoading || permissionsQuery . isLoading ;
148
144
const loadFormDataError = templateQuery . error ?? permissionsQuery . error ;
149
145
0 commit comments