@@ -123,6 +123,13 @@ export const WorkspaceParametersPageViewExperimental: FC<
123
123
setFieldValue : form . setFieldValue ,
124
124
} ) ;
125
125
126
+ const hasIncompatibleParameters = parameters . some ( ( parameter ) => {
127
+ if ( ! parameter . mutable && parameter . diagnostics . length > 0 ) {
128
+ return true ;
129
+ }
130
+ return false ;
131
+ } ) ;
132
+
126
133
return (
127
134
< >
128
135
{ disabled && (
@@ -132,6 +139,38 @@ export const WorkspaceParametersPageViewExperimental: FC<
132
139
</ Alert >
133
140
) }
134
141
142
+ { hasIncompatibleParameters && (
143
+ < Alert severity = "error" >
144
+ < p className = "text-lg leading-tight font-bold m-0" >
145
+ Workspace update blocked
146
+ </ p >
147
+ < p className = "mb-0" >
148
+ The new template version includes parameter changes that are
149
+ incompatible with this workspace's existing parameter values. This
150
+ may be caused by:
151
+ </ p >
152
+ < ul className = "mb-0 pl-4 space-y-1" >
153
+ < li >
154
+ New < strong > required</ strong > parameters that cannot be provided
155
+ after workspace creation
156
+ </ li >
157
+ < li >
158
+ Changes to < strong > valid options or validations</ strong > for
159
+ existing parameters
160
+ </ li >
161
+ < li > Logic changes that conflict with previously selected values</ li >
162
+ </ ul >
163
+ < p className = "mb-0" >
164
+ Please contact the < strong > template administrator</ strong > to review
165
+ the changes and ensure compatibility for existing workspaces.
166
+ </ p >
167
+ < p className = "mb-0" >
168
+ Consider supplying defaults for new parameters or validating
169
+ conditional logic against prior workspace states.
170
+ </ p >
171
+ </ Alert >
172
+ ) }
173
+
135
174
{ diagnostics && diagnostics . length > 0 && (
136
175
< div className = "flex flex-col gap-4 mb-8" >
137
176
{ diagnostics . map ( ( diagnostic , index ) => (
@@ -182,7 +221,23 @@ export const WorkspaceParametersPageViewExperimental: FC<
182
221
</ p >
183
222
</ hgroup >
184
223
{ standardParameters . map ( ( parameter , index ) => {
185
- const parameterField = `rich_parameter_values.${ index } ` ;
224
+ const currentParameterValueIndex =
225
+ form . values . rich_parameter_values ?. findIndex (
226
+ ( p ) => p . name === parameter . name ,
227
+ ) ;
228
+ const parameterFieldIndex =
229
+ currentParameterValueIndex !== undefined
230
+ ? currentParameterValueIndex
231
+ : index ;
232
+ // Get the form value by parameter name to ensure correct value mapping
233
+ const formValue =
234
+ currentParameterValueIndex !== undefined
235
+ ? form . values ?. rich_parameter_values ?. [
236
+ currentParameterValueIndex
237
+ ] ?. value || ""
238
+ : "" ;
239
+
240
+ const parameterField = `rich_parameter_values.${ parameterFieldIndex } ` ;
186
241
const isDisabled =
187
242
disabled ||
188
243
parameter . styling ?. disabled ||
@@ -198,9 +253,7 @@ export const WorkspaceParametersPageViewExperimental: FC<
198
253
}
199
254
autofill = { false }
200
255
disabled = { isDisabled }
201
- value = {
202
- form . values ?. rich_parameter_values ?. [ index ] ?. value || ""
203
- }
256
+ value = { formValue }
204
257
/>
205
258
) ;
206
259
} ) }
0 commit comments