Introduce shared methods for canAdd / canRemoveModeledMethod

This commit is contained in:
Robert
2023-10-11 18:27:50 +01:00
parent 8ecc31fae7
commit e50affeb56
2 changed files with 26 additions and 5 deletions

View File

@@ -0,0 +1,20 @@
import { ModeledMethod } from "../modeled-method";
export function canAddNewModeledMethod(
modeledMethods: ModeledMethod[],
): boolean {
// Disallow adding methods when there are no modeled methods or where there is a single unmodeled method.
// In both of these cases the UI will already be showing the user inputs they can use for modeling.
return (
modeledMethods.length > 1 ||
(modeledMethods.length === 1 && modeledMethods[0].type !== "none")
);
}
export function canRemoveModeledMethod(
modeledMethods: ModeledMethod[],
): boolean {
// Don't allow removing the last modeled method. In this case the user is intended to
// set the type to "none" instead.
return modeledMethods.length > 1;
}

View File

@@ -2,6 +2,10 @@ import * as React from "react";
import { useCallback, useMemo, useState } from "react";
import { Method } from "../../model-editor/method";
import { ModeledMethod } from "../../model-editor/modeled-method";
import {
canAddNewModeledMethod,
canRemoveModeledMethod,
} from "../../model-editor/shared/multiple-modeled-methods";
import { styled } from "styled-components";
import { MethodModelingInputs } from "./MethodModelingInputs";
import { VSCodeButton } from "@vscode/webview-ui-toolkit/react";
@@ -171,7 +175,7 @@ export const MultipleModeledMethodsPanel = ({
appearance="icon"
aria-label="Delete modeling"
onClick={handleRemoveClick}
disabled={modeledMethods.length < 2}
disabled={!canRemoveModeledMethod(modeledMethods)}
>
<Codicon name="trash" />
</VSCodeButton>
@@ -179,10 +183,7 @@ export const MultipleModeledMethodsPanel = ({
appearance="icon"
aria-label="Add modeling"
onClick={handleAddClick}
disabled={
modeledMethods.length === 0 ||
(modeledMethods.length === 1 && modeledMethods[0].type === "none")
}
disabled={!canAddNewModeledMethod(modeledMethods)}
>
<Codicon name="add" />
</VSCodeButton>