@@ -2,8 +2,7 @@ import React, { useEffect, useRef, useState } from "react";
22import { useTranslation } from "react-i18next" ;
33import ReactDOM from "react-dom/client" ;
44import { Button } from "@/components/ui/button" ;
5- import { create } from "zustand" ;
6- import { persist } from "zustand/middleware" ;
5+ import { usePomodoroStore } from "@/stores/pomodoro" ;
76import { useSettings , SettingsProvider } from "@/hooks/useSettings" ;
87import { hslToHex , hexToHsl , complementaryColor } from "@/utils/color" ;
98import { playSound } from "@/utils/sounds" ;
@@ -12,118 +11,6 @@ import {
1211 PomodoroHistoryProvider ,
1312} from "@/hooks/usePomodoroHistory.tsx" ;
1413
15- interface PomodoroState {
16- isRunning : boolean ;
17- isPaused : boolean ;
18- remainingTime : number ;
19- mode : "work" | "break" ;
20- currentTaskId ?: string ;
21- workDuration : number ;
22- breakDuration : number ;
23- startTime ?: number ;
24- lastTick ?: number ;
25- pauseStart ?: number ;
26- start : ( taskId ?: string ) => void ;
27- pause : ( ) => void ;
28- resume : ( ) => void ;
29- reset : ( ) => void ;
30- startBreak : ( ) => void ;
31- skipBreak : ( ) => void ;
32- tick : ( ) => void ;
33- setStartTime : ( time ?: number ) => void ;
34- setLastTick : ( time : number ) => void ;
35- setDurations : ( work : number , brk : number ) => void ;
36- }
37-
38- const WORK_DURATION = 25 * 60 ; // 25 Minuten
39- const BREAK_DURATION = 5 * 60 ; // 5 Minuten
40-
41- export const usePomodoroStore = create < PomodoroState > ( ) (
42- persist (
43- ( set ) => ( {
44- isRunning : false ,
45- isPaused : false ,
46- pauseStart : undefined ,
47- remainingTime : WORK_DURATION ,
48- mode : "work" ,
49- currentTaskId : undefined ,
50- workDuration : WORK_DURATION ,
51- breakDuration : BREAK_DURATION ,
52- startTime : undefined ,
53- lastTick : undefined ,
54- start : ( taskId ?: string ) =>
55- set ( ( state ) => ( {
56- isRunning : true ,
57- isPaused : false ,
58- pauseStart : undefined ,
59- remainingTime : state . workDuration ,
60- mode : "work" ,
61- currentTaskId : taskId ,
62- startTime : Date . now ( ) ,
63- lastTick : Date . now ( ) ,
64- } ) ) ,
65- pause : ( ) => set ( { isPaused : true , pauseStart : Date . now ( ) } ) ,
66- resume : ( ) =>
67- set ( { isPaused : false , lastTick : Date . now ( ) , pauseStart : undefined } ) ,
68- reset : ( ) =>
69- set ( ( state ) => ( {
70- isRunning : false ,
71- isPaused : false ,
72- remainingTime : state . workDuration ,
73- mode : "work" ,
74- currentTaskId : undefined ,
75- startTime : undefined ,
76- lastTick : undefined ,
77- pauseStart : undefined ,
78- } ) ) ,
79- startBreak : ( ) =>
80- set ( ( state ) => ( {
81- isRunning : true ,
82- isPaused : false ,
83- pauseStart : undefined ,
84- mode : "break" ,
85- remainingTime : state . breakDuration ,
86- lastTick : Date . now ( ) ,
87- } ) ) ,
88- skipBreak : ( ) =>
89- set ( ( state ) => ( {
90- isRunning : true ,
91- isPaused : false ,
92- pauseStart : undefined ,
93- mode : "work" ,
94- remainingTime : state . workDuration ,
95- lastTick : Date . now ( ) ,
96- } ) ) ,
97- tick : ( ) =>
98- set ( ( state ) => {
99- if ( ! state . isRunning || state . isPaused ) return state ;
100- if ( state . remainingTime > 0 ) {
101- return {
102- remainingTime : state . remainingTime - 1 ,
103- lastTick : Date . now ( ) ,
104- } ;
105- }
106- const nextMode = state . mode === "work" ? "break" : "work" ;
107- return {
108- mode : nextMode ,
109- remainingTime :
110- nextMode === "work" ? state . workDuration : state . breakDuration ,
111- lastTick : Date . now ( ) ,
112- } as PomodoroState ;
113- } ) ,
114- setStartTime : ( time ) => set ( { startTime : time } ) ,
115- setLastTick : ( time ) => set ( { lastTick : time } ) ,
116- setDurations : ( work , brk ) =>
117- set ( ( state ) => ( {
118- workDuration : work ,
119- breakDuration : brk ,
120- remainingTime : ! state . isRunning ? work : state . remainingTime ,
121- } ) ) ,
122- } ) ,
123- { name : "pomodoro" } ,
124- ) ,
125- ) ;
126-
12714const formatTime = ( sec : number ) => {
12815 const m = Math . floor ( sec / 60 )
12916 . toString ( )
0 commit comments