Skip to content

Commit fa185d9

Browse files
Display validation errors in model editor
1 parent 1606829 commit fa185d9

1 file changed

Lines changed: 71 additions & 54 deletions

File tree

extensions/ql-vscode/src/view/model-editor/MethodRow.tsx

Lines changed: 71 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ import { ModelEditorViewState } from "../../model-editor/shared/view-state";
3131
import { Codicon } from "../common";
3232
import { canAddNewModeledMethod } from "../../model-editor/shared/multiple-modeled-methods";
3333
import { DataGridCell, DataGridRow } from "../common/DataGrid";
34+
import { validateModeledMethods } from "../../model-editor/shared/validation";
35+
import { ModeledMethodAlert } from "../method-modeling/ModeledMethodAlert";
3436

3537
const 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

Comments
 (0)