-
Notifications
You must be signed in to change notification settings - Fork 0
/
take-exam-slices.ts
70 lines (61 loc) · 1.57 KB
/
take-exam-slices.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import { StateCreator } from "zustand";
import { TimerStoreSlice } from "./take-exam-model";
const createTimerSlice: StateCreator<TimerStoreSlice> = (set) => ({
timer: {
startTimestamp: null,
elapsedTimeOnPause: 0,
isRunning: false,
initialTime: 0,
// TODO Iniciar el initialTime para hacer funcionar el countdown
// XXXXX: () => {}
startTimer: () =>
set((state) => {
if (state.timer.isRunning) {
return state;
}
const timer = state.timer;
return {
timer: {
...timer,
isRunning: true,
startTimestamp: Date.now(),
},
};
}),
pauseTimer: () =>
set((state) => {
const {
timer: { isRunning, startTimestamp },
} = state;
if (!isRunning || startTimestamp === null) {
return state;
}
const timer = state.timer;
const now = Date.now();
const timeElapsed = now - startTimestamp;
const elapsedTimeOnPause = timer.elapsedTimeOnPause + timeElapsed;
return {
timer: {
...timer,
isRunning: false,
elapsedTimeOnPause,
startTimestamp: null,
},
};
}),
resetTimer: () =>
set((state) => {
const timer = state.timer;
return {
timer: {
...timer,
startTimestamp: null,
elapsedTimeOnPause: 0,
isRunning: false,
initialTime: 0,
},
};
}),
},
});
export { createTimerSlice };