Skip to content

Commit 0c105a4

Browse files
committed
feat: refactor debug console with numeric input and callbacks
1 parent 2172459 commit 0c105a4

File tree

1 file changed

+38
-31
lines changed

1 file changed

+38
-31
lines changed

src/components/debug-run-console.tsx

Lines changed: 38 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { useAtom, useAtomValue } from "jotai";
2-
import { motorDebugRunStateAtom, motorStateAtom } from "@/stores/motor.ts";
2+
import { motorDebugRunStateAtom } from "@/stores/motor.ts";
33
import { ButtonGroup, ButtonGroupText } from "@/components/ui/button-group.tsx";
44
import { Label } from "@/components/ui/label.tsx";
5-
import { Input } from "@/components/ui/input.tsx";
65
import { useCallback, useState } from "react";
76
import {
87
AngleUnit,
@@ -16,9 +15,9 @@ import { toast } from "sonner";
1615
import { invoke } from "@tauri-apps/api/core";
1716
import { useDegAtom, useRpmAtom } from "@/stores/angle.ts";
1817
import { deg2rad, rpm2rps } from "@/lib/utils.ts";
18+
import { NumericExpressionInput } from "@/components/numeric-expression-input.tsx";
1919

2020
export default function DebugRunConsole() {
21-
const [motorState, setMotorState] = useAtom(motorStateAtom);
2221
const [runState, setRunState] = useAtom(motorDebugRunStateAtom);
2322
const useRpm = useAtomValue(useRpmAtom);
2423
const useDeg = useAtomValue(useDegAtom);
@@ -28,6 +27,34 @@ export default function DebugRunConsole() {
2827
useAngleConverter({ value: position, setValue: setPosition });
2928
useSpeedConverter({ value: speed, setValue: setSpeed });
3029

30+
const emitSpeed = useCallback(
31+
async (s: number) => {
32+
try {
33+
await invoke("motor_set_speed", {
34+
speed: useRpm ? rpm2rps(s) : s,
35+
});
36+
setRunState("Speed");
37+
} catch (e) {
38+
toast.error(`Error: ${e}`);
39+
}
40+
},
41+
[setRunState, useRpm],
42+
);
43+
44+
const emitPosition = useCallback(
45+
async (p: number) => {
46+
try {
47+
await invoke("motor_set_position", {
48+
position: useDeg ? deg2rad(p) : p,
49+
});
50+
setRunState("Position");
51+
} catch (e) {
52+
toast.error(`Error: ${e}`);
53+
}
54+
},
55+
[setRunState, useDeg],
56+
);
57+
3158
const stop = useCallback(async () => {
3259
try {
3360
await invoke("motor_stop");
@@ -46,12 +73,11 @@ export default function DebugRunConsole() {
4673
Speed
4774
</Label>
4875
</ButtonGroupText>
49-
<Input
76+
<NumericExpressionInput
5077
id="Speed"
51-
className="w-32"
52-
type="number"
5378
value={speed}
54-
onChange={(e) => setSpeed(e.target.valueAsNumber)}
79+
onValueChange={setSpeed}
80+
onEnter={emitSpeed}
5581
/>
5682
<ButtonGroupText asChild>
5783
<Label className="w-18" htmlFor="Speed">
@@ -61,16 +87,7 @@ export default function DebugRunConsole() {
6187
<Button
6288
variant="outline"
6389
size="icon"
64-
onClick={async () => {
65-
try {
66-
await invoke("motor_set_speed", {
67-
speed: useRpm ? rpm2rps(speed) : speed,
68-
});
69-
setRunState("Speed");
70-
} catch (e) {
71-
toast.error(`Error: ${e}`);
72-
}
73-
}}
90+
onClick={() => emitSpeed(speed)}
7491
>
7592
<ArrowDownLeft />
7693
</Button>
@@ -81,12 +98,11 @@ export default function DebugRunConsole() {
8198
Position
8299
</Label>
83100
</ButtonGroupText>
84-
<Input
101+
<NumericExpressionInput
85102
id="Position"
86-
className="w-32"
87-
type="number"
88103
value={position}
89-
onChange={(e) => setPosition(e.target.valueAsNumber)}
104+
onValueChange={setPosition}
105+
onEnter={emitPosition}
90106
/>
91107
<ButtonGroupText asChild>
92108
<Label className="w-18" htmlFor="Position">
@@ -96,16 +112,7 @@ export default function DebugRunConsole() {
96112
<Button
97113
variant="outline"
98114
size="icon"
99-
onClick={async () => {
100-
try {
101-
await invoke("motor_set_position", {
102-
position: useDeg ? deg2rad(position) : position,
103-
});
104-
setRunState("Position");
105-
} catch (e) {
106-
toast.error(`Error: ${e}`);
107-
}
108-
}}
115+
onClick={() => emitPosition(position)}
109116
>
110117
<ArrowDownLeft />
111118
</Button>

0 commit comments

Comments
 (0)