Skip to content

Commit 96c0feb

Browse files
Handle when the number of modeled methods decreases
1 parent fca68ed commit 96c0feb

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as React from "react";
2-
import { useCallback, useMemo, useState } from "react";
2+
import { useCallback, useEffect, useMemo, useState } from "react";
33
import { Method } from "../../model-editor/method";
44
import { ModeledMethod } from "../../model-editor/modeled-method";
55
import {
@@ -60,6 +60,14 @@ export const MultipleModeledMethodsPanel = ({
6060
}: MultipleModeledMethodsPanelProps) => {
6161
const [selectedIndex, setSelectedIndex] = useState<number>(0);
6262

63+
useEffect(() => {
64+
if (selectedIndex >= modeledMethods.length) {
65+
setSelectedIndex(
66+
modeledMethods.length > 0 ? modeledMethods.length - 1 : 0,
67+
);
68+
}
69+
}, [modeledMethods.length, selectedIndex]);
70+
6371
const handlePreviousClick = useCallback(() => {
6472
setSelectedIndex((previousIndex) => previousIndex - 1);
6573
}, []);

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,33 @@ describe(MultipleModeledMethodsPanel.name, () => {
264264
).toHaveValue("source");
265265
});
266266

267+
it("correctly updates selected pagination index when the number of models decreases", async () => {
268+
const { rerender } = render({
269+
method,
270+
modeledMethods,
271+
isModelingInProgress,
272+
onChange,
273+
});
274+
275+
await userEvent.click(screen.getByLabelText("Next modeling"));
276+
277+
rerender(
278+
<MultipleModeledMethodsPanel
279+
method={method}
280+
modeledMethods={[modeledMethods[1]]}
281+
isModelingInProgress={isModelingInProgress}
282+
onChange={onChange}
283+
/>,
284+
);
285+
286+
expect(screen.getAllByRole("combobox")).toHaveLength(4);
287+
expect(
288+
screen.getByRole("combobox", {
289+
name: "Model type",
290+
}),
291+
).toHaveValue("source");
292+
});
293+
267294
it("does not show errors", () => {
268295
render({
269296
method,

0 commit comments

Comments
 (0)