Skip to content

Commit d2149ee

Browse files
refactor: update position state and actions in immer store
1 parent 5b8fe4b commit d2149ee

File tree

1 file changed

+38
-9
lines changed

1 file changed

+38
-9
lines changed

src/store/immer/position.ts

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,50 @@
11
import { ImmerCreator } from './immer-store'
22

3-
type PositionState = { position: { x: number; y: number } }
3+
type State = {
4+
position: {
5+
x: number
6+
y: number
7+
}
8+
}
49

5-
type PositionActions = {
6-
setPosition: ({ x, y }: { x: number; y: number }) => void
7-
setPositionX: (x: number) => void
10+
type Actions = {
11+
setPosition: (x: number, y: number) => void
12+
setX: (x: number) => void
13+
setY: (y: number) => void
14+
moveBy: (deltaX: number, deltaY: number) => void
15+
reset: () => void
816
}
917

10-
export type PositionSlice = PositionState & PositionActions
18+
export type PositionSlice = State & Actions
1119

1220
export const createPositionSlice: ImmerCreator<PositionSlice> = (set) => ({
1321
position: { x: 0, y: 0 },
14-
setPosition: ({ x, y }: { x: number; y: number }) =>
15-
set((state) => ({ position: { ...state.position, x, y } })),
16-
setPositionX: (x: number) => {
22+
23+
setPosition: (x: number, y: number) =>
1724
set((state) => {
1825
state.position.x = x
26+
state.position.y = y
27+
}),
28+
29+
setX: (x: number) =>
30+
set((state) => {
31+
state.position.x = x
32+
}),
33+
34+
setY: (y: number) =>
35+
set((state) => {
36+
state.position.y = y
37+
}),
38+
39+
moveBy: (deltaX: number, deltaY: number) =>
40+
set((state) => {
41+
state.position.x += deltaX
42+
state.position.y += deltaY
43+
}),
44+
45+
reset: () =>
46+
set((state) => {
47+
state.position.x = 0
48+
state.position.y = 0
1949
})
20-
}
2150
})

0 commit comments

Comments
 (0)