@@ -31,6 +31,8 @@ import { ModelEditorViewState } from "../../model-editor/shared/view-state";
3131import { Codicon } from "../common" ;
3232import { canAddNewModeledMethod } from "../../model-editor/shared/multiple-modeled-methods" ;
3333import { DataGridCell , DataGridRow } from "../common/DataGrid" ;
34+ import { validateModeledMethods } from "../../model-editor/shared/validation" ;
35+ import { ModeledMethodAlert } from "../method-modeling/ModeledMethodAlert" ;
3436
3537const ApiOrMethodRow = styled . div `
3638 min-height: calc(var(--input-height) * 1px);
@@ -111,6 +113,11 @@ const ModelableMethodRow = forwardRef<HTMLElement | undefined, MethodRowProps>(
111113 [ modeledMethodsProp , method , viewState ] ,
112114 ) ;
113115
116+ const validationErrors = useMemo (
117+ ( ) => validateModeledMethods ( modeledMethods ) ,
118+ [ modeledMethods ] ,
119+ ) ;
120+
114121 const modeledMethodChangedHandlers = useMemo (
115122 ( ) =>
116123 modeledMethods . map ( ( _ , index ) => ( modeledMethod : ModeledMethod ) => {
@@ -163,7 +170,9 @@ const ModelableMethodRow = forwardRef<HTMLElement | undefined, MethodRowProps>(
163170 ref = { ref }
164171 focused = { revealedMethodSignature === method . signature }
165172 >
166- < DataGridCell gridRow = { `span ${ modeledMethods . length } ` } >
173+ < DataGridCell
174+ gridRow = { `span ${ modeledMethods . length + validationErrors . length } ` }
175+ >
167176 < ApiOrMethodRow >
168177 < ModelingStatusIndicator status = { modelingStatus } />
169178 < MethodClassifications method = { method } />
@@ -200,61 +209,69 @@ const ModelableMethodRow = forwardRef<HTMLElement | undefined, MethodRowProps>(
200209 ) }
201210 </ >
202211 ) }
203- { ! props . modelingInProgress &&
204- modeledMethods . map ( ( modeledMethod , index ) => (
205- < Fragment key = { index } >
206- < DataGridCell >
207- < ModelTypeDropdown
208- method = { method }
209- modeledMethod = { modeledMethod }
210- onChange = { modeledMethodChangedHandlers [ index ] }
211- />
212- </ DataGridCell >
213- < DataGridCell >
214- < ModelInputDropdown
215- method = { method }
216- modeledMethod = { modeledMethod }
217- onChange = { modeledMethodChangedHandlers [ index ] }
218- />
219- </ DataGridCell >
220- < DataGridCell >
221- < ModelOutputDropdown
222- method = { method }
223- modeledMethod = { modeledMethod }
224- onChange = { modeledMethodChangedHandlers [ index ] }
225- />
226- </ DataGridCell >
227- < DataGridCell >
228- < ModelKindDropdown
229- method = { method }
230- modeledMethod = { modeledMethod }
231- onChange = { modeledMethodChangedHandlers [ index ] }
232- />
233- </ DataGridCell >
234- { viewState . showMultipleModels && (
212+ { ! props . modelingInProgress && (
213+ < >
214+ { modeledMethods . map ( ( modeledMethod , index ) => (
215+ < Fragment key = { index } >
216+ < DataGridCell >
217+ < ModelTypeDropdown
218+ method = { method }
219+ modeledMethod = { modeledMethod }
220+ onChange = { modeledMethodChangedHandlers [ index ] }
221+ />
222+ </ DataGridCell >
223+ < DataGridCell >
224+ < ModelInputDropdown
225+ method = { method }
226+ modeledMethod = { modeledMethod }
227+ onChange = { modeledMethodChangedHandlers [ index ] }
228+ />
229+ </ DataGridCell >
235230 < DataGridCell >
236- { index === modeledMethods . length - 1 ? (
237- < CodiconRow
238- appearance = "icon"
239- aria-label = "Add new model"
240- onClick = { handleAddModelClick }
241- disabled = { addModelButtonDisabled }
242- >
243- < Codicon name = "add" />
244- </ CodiconRow >
245- ) : (
246- < CodiconRow
247- appearance = "icon"
248- aria-label = "Remove model"
249- onClick = { removeModelClickedHandlers [ index ] }
250- >
251- < Codicon name = "trash" />
252- </ CodiconRow >
253- ) }
231+ < ModelOutputDropdown
232+ method = { method }
233+ modeledMethod = { modeledMethod }
234+ onChange = { modeledMethodChangedHandlers [ index ] }
235+ />
254236 </ DataGridCell >
255- ) }
256- </ Fragment >
257- ) ) }
237+ < DataGridCell >
238+ < ModelKindDropdown
239+ method = { method }
240+ modeledMethod = { modeledMethod }
241+ onChange = { modeledMethodChangedHandlers [ index ] }
242+ />
243+ </ DataGridCell >
244+ { viewState . showMultipleModels && (
245+ < DataGridCell >
246+ { index === modeledMethods . length - 1 ? (
247+ < CodiconRow
248+ appearance = "icon"
249+ aria-label = "Add new model"
250+ onClick = { handleAddModelClick }
251+ disabled = { addModelButtonDisabled }
252+ >
253+ < Codicon name = "add" />
254+ </ CodiconRow >
255+ ) : (
256+ < CodiconRow
257+ appearance = "icon"
258+ aria-label = "Remove model"
259+ onClick = { removeModelClickedHandlers [ index ] }
260+ >
261+ < Codicon name = "trash" />
262+ </ CodiconRow >
263+ ) }
264+ </ DataGridCell >
265+ ) }
266+ </ Fragment >
267+ ) ) }
268+ { validationErrors . map ( ( error , index ) => (
269+ < DataGridCell gridColumn = "span 5" key = { index } >
270+ < ModeledMethodAlert error = { error } />
271+ </ DataGridCell >
272+ ) ) }
273+ </ >
274+ ) }
258275 </ DataGridRow >
259276 ) ;
260277 } ,
0 commit comments