Skip to content

Commit 6da6ef0

Browse files
committed
fix(stepper): fixed toolbar stepper logic
1 parent 9020ee0 commit 6da6ef0

File tree

3 files changed

+54
-78
lines changed

3 files changed

+54
-78
lines changed

src/components/spreadsheet/spreadsheet.wrapper.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export const SpreadsheetWrapper = () => {
4242
const { step, steps } = useStepper();
4343
const spreadsheet = useSpreadsheet();
4444
const { project } = useProjects();
45+
const stepper = useStepper();
4546

4647
const { sessionId } = useSessionId();
4748

@@ -60,7 +61,7 @@ export const SpreadsheetWrapper = () => {
6061
// evaluate cells on change
6162
useEffect(() => {
6263
evaluateUsedCells();
63-
}, [spreadsheet.cells.usedCells]);
64+
}, [spreadsheet.cells.usedCells, stepper.steps]);
6465

6566
useEffect(() => {
6667
for (const cellId of spreadsheet.cells.usedCells) {

src/components/text-field/text-field.small.component.tsx

Lines changed: 0 additions & 57 deletions
This file was deleted.

src/components/toolbar/simulation.tab.tsx

Lines changed: 52 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ import {
1010
} from "lucide-react";
1111
import { useEffect, useRef, useState } from "react";
1212
import styled from "styled-components";
13-
import { DEFAULT_STEP } from "../spreadsheet/spreadsheet.constants";
13+
import {
14+
DEFAULT_STEP,
15+
DEFAULT_STEPS,
16+
} from "../spreadsheet/spreadsheet.constants";
1417
import { TextField } from "../text-field/text-field.component";
1518
import {
1619
TabContainer,
@@ -25,9 +28,12 @@ export const SimulationTab = () => {
2528
const [delay, setDelay] = useState<number>(100);
2629
const [isPlaying, setIsPlaying] = useState(false);
2730
const intervalRef = useRef<NodeJS.Timeout | null>(null);
31+
2832
const [stepFieldValue, setStepFieldValue] = useState<number>(
2933
DEFAULT_STEP + 1,
3034
);
35+
const [stepsFieldValue, setStepsFieldValue] =
36+
useState<number>(DEFAULT_STEPS);
3137

3238
const prevStep = () => {
3339
Logger.log(
@@ -91,29 +97,57 @@ export const SimulationTab = () => {
9197
setStepFieldValue(stepper.step + 1);
9298
}, [stepper.step]);
9399

94-
const handleStepsInput = (value: string) => {
100+
useEffect(() => {
101+
setStepsFieldValue(stepper.steps);
102+
}, [stepper.steps]);
103+
104+
const onStepInputChange = (value: string) => {
95105
if (/^[0-9]*$/.test(value)) {
96106
setStepFieldValue(Number(value));
97107
}
98108
};
99109

100-
const confirmStep = () => {
101-
const newStep = Number(stepFieldValue);
110+
const onStepsInputChange = (value: string) => {
111+
if (/^[0-9]*$/.test(value)) {
112+
setStepsFieldValue(Number(value));
113+
}
114+
};
102115

103-
if (newStep === 0) {
116+
const onStepInputBlur = () => {
117+
if (stepFieldValue === 0) {
104118
stepper.setStep(0);
105-
setStepFieldValue(1);
106-
} else if (newStep > stepper.steps) {
119+
} else if (stepFieldValue > stepsFieldValue) {
107120
stepper.setStep(stepper.steps - 1);
108-
setStepFieldValue(stepper.steps);
109121
} else {
110-
stepper.setStep(newStep - 1);
122+
stepper.setStep(stepFieldValue - 1);
111123
}
112124
};
113125

114-
const onHandleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {
126+
const onStepsInputBlur = () => {
127+
if (stepsFieldValue === 0) {
128+
stepper.setSteps(1);
129+
} else {
130+
stepper.setSteps(stepsFieldValue);
131+
}
132+
133+
if (stepFieldValue > stepsFieldValue) {
134+
stepper.setStep(stepsFieldValue - 1);
135+
}
136+
};
137+
138+
const onStepInputKeyDown = (
139+
event: React.KeyboardEvent<HTMLInputElement>,
140+
) => {
115141
if (event.key === "Enter") {
116-
confirmStep();
142+
onStepInputBlur();
143+
}
144+
};
145+
146+
const onStepsInputKeyDown = (
147+
event: React.KeyboardEvent<HTMLInputElement>,
148+
) => {
149+
if (event.key === "Enter") {
150+
onStepsInputBlur();
117151
}
118152
};
119153

@@ -128,9 +162,9 @@ export const SimulationTab = () => {
128162
size="small"
129163
value={stepFieldValue.toString()}
130164
disabled={false}
131-
onChange={(newValue) => handleStepsInput(newValue)}
132-
onBlur={confirmStep}
133-
onKeyDown={onHandleKeyDown}
165+
onChange={onStepInputChange}
166+
onBlur={onStepInputBlur}
167+
onKeyDown={onStepInputKeyDown}
134168
/>
135169

136170
<ToolbarButton onClick={nextStep}>
@@ -142,12 +176,10 @@ export const SimulationTab = () => {
142176

143177
<TextField
144178
size="small"
145-
value={stepper.steps.toString()}
146-
onChange={(value) =>
147-
value === ""
148-
? stepper.setSteps(0)
149-
: stepper.setSteps(parseInt(value))
150-
}
179+
value={stepsFieldValue.toString()}
180+
onChange={onStepsInputChange}
181+
onBlur={onStepsInputBlur}
182+
onKeyDown={onStepsInputKeyDown}
151183
placeholder="Steps"
152184
/>
153185

0 commit comments

Comments
 (0)