Skip to content

Commit e50affe

Browse files
Introduce shared methods for canAdd / canRemoveModeledMethod
1 parent 8ecc31f commit e50affe

2 files changed

Lines changed: 26 additions & 5 deletions

File tree

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { ModeledMethod } from "../modeled-method";
2+
3+
export function canAddNewModeledMethod(
4+
modeledMethods: ModeledMethod[],
5+
): boolean {
6+
// Disallow adding methods when there are no modeled methods or where there is a single unmodeled method.
7+
// In both of these cases the UI will already be showing the user inputs they can use for modeling.
8+
return (
9+
modeledMethods.length > 1 ||
10+
(modeledMethods.length === 1 && modeledMethods[0].type !== "none")
11+
);
12+
}
13+
14+
export function canRemoveModeledMethod(
15+
modeledMethods: ModeledMethod[],
16+
): boolean {
17+
// Don't allow removing the last modeled method. In this case the user is intended to
18+
// set the type to "none" instead.
19+
return modeledMethods.length > 1;
20+
}

extensions/ql-vscode/src/view/method-modeling/MultipleModeledMethodsPanel.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ import * as React from "react";
22
import { useCallback, useMemo, useState } from "react";
33
import { Method } from "../../model-editor/method";
44
import { ModeledMethod } from "../../model-editor/modeled-method";
5+
import {
6+
canAddNewModeledMethod,
7+
canRemoveModeledMethod,
8+
} from "../../model-editor/shared/multiple-modeled-methods";
59
import { styled } from "styled-components";
610
import { MethodModelingInputs } from "./MethodModelingInputs";
711
import { VSCodeButton } from "@vscode/webview-ui-toolkit/react";
@@ -171,18 +175,15 @@ export const MultipleModeledMethodsPanel = ({
171175
appearance="icon"
172176
aria-label="Delete modeling"
173177
onClick={handleRemoveClick}
174-
disabled={modeledMethods.length < 2}
178+
disabled={!canRemoveModeledMethod(modeledMethods)}
175179
>
176180
<Codicon name="trash" />
177181
</VSCodeButton>
178182
<VSCodeButton
179183
appearance="icon"
180184
aria-label="Add modeling"
181185
onClick={handleAddClick}
182-
disabled={
183-
modeledMethods.length === 0 ||
184-
(modeledMethods.length === 1 && modeledMethods[0].type === "none")
185-
}
186+
disabled={!canAddNewModeledMethod(modeledMethods)}
186187
>
187188
<Codicon name="add" />
188189
</VSCodeButton>

0 commit comments

Comments
 (0)