@@ -6,30 +6,34 @@ import Radio from "@mui/material/Radio";
6
6
import RadioGroup from "@mui/material/RadioGroup" ;
7
7
import { API } from "api/api" ;
8
8
import { DetailedError } from "api/errors" ;
9
- import type {
10
- DynamicParametersRequest ,
11
- DynamicParametersResponse ,
12
- PreviewParameter ,
13
- Template
9
+ import type {
10
+ DynamicParametersRequest ,
11
+ DynamicParametersResponse ,
12
+ PreviewParameter ,
13
+ Template
14
14
} from "api/typesGenerated" ;
15
15
import { FormSection , VerticalForm } from "components/Form/Form" ;
16
16
import { Loader } from "components/Loader/Loader" ;
17
17
import { useClipboard } from "hooks/useClipboard" ;
18
18
import { DynamicParameter } from "modules/workspaces/DynamicParameter/DynamicParameter" ;
19
19
import { useTemplateLayoutContext } from "pages/TemplatePage/TemplateLayout" ;
20
20
import { type FC , useCallback , useEffect , useRef , useState } from "react" ;
21
+ import React from "react" ;
21
22
import { Helmet } from "react-helmet-async" ;
22
23
import { useQuery } from "react-query" ;
23
24
import { useSearchParams } from "react-router-dom" ;
24
25
import { pageTitle } from "utils/page" ;
25
- import { getAutofillParameters } from "utils/richParameters" ;
26
+ import { getAutofillParameters , type AutofillBuildParameter as ImportedAutofillBuildParameter } from "utils/richParameters" ;
26
27
27
28
type ButtonValues = Record < string , string > ;
28
29
30
+ // Use the imported type instead of redefining it
31
+ type AutofillBuildParameter = ImportedAutofillBuildParameter ;
32
+
29
33
const TemplateEmbedPageExperimental :FC = ( ) => {
30
34
const { template} = useTemplateLayoutContext ( ) ;
31
35
const [ searchParams ] = useSearchParams ( ) ;
32
-
36
+
33
37
return (
34
38
< >
35
39
< Helmet >
@@ -45,7 +49,7 @@ interface TemplateEmbedPageViewProps {
45
49
searchParams :URLSearchParams ;
46
50
}
47
51
48
- const TemplateEmbedPageView :FC < TemplateEmbedPageViewProps > = ( {
52
+ const TemplateEmbedPageView :FC < TemplateEmbedPageViewProps > = ( {
49
53
template,
50
54
searchParams
51
55
} ) => {
@@ -54,7 +58,7 @@ const TemplateEmbedPageView: FC<TemplateEmbedPageViewProps> = ({
54
58
const ws = useRef < WebSocket | null > ( null ) ;
55
59
const [ wsError , setWsError ] = useState < Error | null > ( null ) ;
56
60
const [ buttonValues , setButtonValues ] = useState < ButtonValues | undefined > ( ) ;
57
-
61
+
58
62
// Get the current user
59
63
const { data :me } = useQuery ( {
60
64
queryKey :[ "me" ] ,
@@ -136,45 +140,45 @@ const TemplateEmbedPageView: FC<TemplateEmbedPageViewProps> = ({
136
140
const initValues :ButtonValues = {
137
141
mode,
138
142
} ;
139
-
143
+
140
144
// Filter only parameters used for workspace creation
141
145
const workspaceParams = currentResponse . parameters . filter ( param => ! param . ephemeral ) ;
142
-
146
+
143
147
// Apply autofill parameters from URL if available
144
148
for ( const parameter of workspaceParams ) {
145
149
const autofillParam = autofillParameters . find ( p => p . name === parameter . name ) ;
146
-
150
+
147
151
if ( autofillParam ) {
148
152
// Use the value from URL parameters
149
153
initValues [ `param.${ parameter . name } ` ] = autofillParam . value ;
150
154
} else {
151
155
// Use the default or current value from the parameter
152
- const paramValue = parameter . value . valid
153
- ?parameter . value . value
156
+ const paramValue = parameter . value . valid
157
+ ?parameter . value . value
154
158
:( parameter . default_value . valid ?parameter . default_value . value :"" ) ;
155
-
159
+
156
160
initValues [ `param.${ parameter . name } ` ] = paramValue ;
157
161
}
158
162
}
159
-
163
+
160
164
setButtonValues ( initValues ) ;
161
-
165
+
162
166
// Send initial message to get updated parameters based on autofill values
163
167
if ( workspaceParams . length > 0 ) {
164
168
const paramInputs :Record < string , string > = { } ;
165
-
169
+
166
170
for ( const param of workspaceParams ) {
167
171
const autofillParam = autofillParameters . find ( p => p . name === param . name ) ;
168
-
172
+
169
173
if ( autofillParam ) {
170
174
paramInputs [ param . name ] = autofillParam . value ;
171
175
} else {
172
- paramInputs [ param . name ] = param . value . valid
173
- ?param . value . value
176
+ paramInputs [ param . name ] = param . value . valid
177
+ ?param . value . value
174
178
:( param . default_value . valid ?param . default_value . value :"" ) ;
175
179
}
176
180
}
177
-
181
+
178
182
sendMessage ( paramInputs ) ;
179
183
}
180
184
}
@@ -240,7 +244,7 @@ const TemplateEmbedPageView: FC<TemplateEmbedPageViewProps> = ({
240
244
</ FormSection >
241
245
242
246
{ currentResponse ?. parameters && (
243
- < ParametersList
247
+ < ParametersList
244
248
parameters = { currentResponse . parameters }
245
249
buttonValues = { buttonValues || { } }
246
250
setButtonValues = { setButtonValues }
@@ -251,7 +255,7 @@ const TemplateEmbedPageView: FC<TemplateEmbedPageViewProps> = ({
251
255
</ VerticalForm >
252
256
</ div >
253
257
254
- < ButtonPreview
258
+ < ButtonPreview
255
259
template = { template }
256
260
buttonValues = { buttonValues }
257
261
/>
@@ -262,9 +266,9 @@ const TemplateEmbedPageView: FC<TemplateEmbedPageViewProps> = ({
262
266
} ;
263
267
264
268
interface ParametersListProps {
265
- parameters :PreviewParameter [ ] ;
269
+ parameters :readonly PreviewParameter [ ] ;
266
270
buttonValues :ButtonValues ;
267
- setButtonValues :( values : ButtonValues | ( ( prev : ButtonValues ) => ButtonValues ) ) => void ;
271
+ setButtonValues :React . Dispatch < React . SetStateAction < ButtonValues | undefined > > ;
268
272
sendMessage :( values :Record < string , string > ) => void ;
269
273
autofillParameters :AutofillBuildParameter [ ] ;
270
274
}
@@ -278,7 +282,7 @@ const ParametersList: FC<ParametersListProps> = ({
278
282
} ) => {
279
283
// Filter parameters to only include those used for workspace creation
280
284
const workspaceParameters = parameters . filter ( param => ! param . ephemeral ) ;
281
-
285
+
282
286
if ( workspaceParameters . length === 0 ) {
283
287
return null ;
284
288
}
@@ -287,10 +291,10 @@ const ParametersList: FC<ParametersListProps> = ({
287
291
const handleParameterChange = ( paramName :string , value :string ) => {
288
292
// Update button values
289
293
setButtonValues ( ( prev ) => ( {
290
- ...prev ,
294
+ ...prev || { } ,
291
295
[ `param.${ paramName } ` ] :value ,
292
296
} ) ) ;
293
-
297
+
294
298
// Send updated parameters to the server
295
299
const paramValues :Record < string , string > = { } ;
296
300
for ( const param of workspaceParameters ) {
@@ -309,7 +313,7 @@ const ParametersList: FC<ParametersListProps> = ({
309
313
{ workspaceParameters . map ( ( parameter ) => {
310
314
const autofillParam = autofillParameters . find ( p => p . name === parameter . name ) ;
311
315
const isAutofilled = ! ! autofillParam ;
312
-
316
+
313
317
return (
314
318
< DynamicParameter
315
319
key = { parameter . name }
@@ -402,4 +406,4 @@ function getClipboardCopyContent(
402
406
403
407
// Function is now imported from utils/richParameters.ts
404
408
405
- export default TemplateEmbedPageExperimental ;
409
+ export default TemplateEmbedPageExperimental ;