mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-11 17:29:37 +02:00
Merge pull request #147 from R0m1k3/claude/statistics-modal-popup-01P7c6z7G5KXo9Tk6BwEa4ew
Claude/statistics modal popup 01 p7c6z7 g5 k xo9 tk6 bw ea4ew
This commit is contained in:
2 files changed
+32
-2
No files matched your search
@@ -39,23 +39,53 @@ export function PomodoroTimer({ onStateChange }: PomodoroTimerProps = {}) {
|
||||
});
|
||||
const intervalRef = useRef<NodeJS.Timeout | null>(null);
|
||||
|
||||
// Save state to localStorage whenever it changes
|
||||
// Save state to localStorage whenever it changes and dispatch custom event
|
||||
useEffect(() => {
|
||||
localStorage.setItem('pomodoroMode', mode);
|
||||
window.dispatchEvent(new CustomEvent('pomodoroStateChange'));
|
||||
}, [mode]);
|
||||
|
||||
useEffect(() => {
|
||||
localStorage.setItem('pomodoroTimeLeft', timeLeft.toString());
|
||||
window.dispatchEvent(new CustomEvent('pomodoroStateChange'));
|
||||
}, [timeLeft]);
|
||||
|
||||
useEffect(() => {
|
||||
localStorage.setItem('pomodoroIsRunning', isRunning.toString());
|
||||
window.dispatchEvent(new CustomEvent('pomodoroStateChange'));
|
||||
}, [isRunning]);
|
||||
|
||||
useEffect(() => {
|
||||
localStorage.setItem('pomodoroSessionsCompleted', sessionsCompleted.toString());
|
||||
window.dispatchEvent(new CustomEvent('pomodoroStateChange'));
|
||||
}, [sessionsCompleted]);
|
||||
|
||||
// Listen for localStorage changes from other instances
|
||||
useEffect(() => {
|
||||
const handleStorageChange = () => {
|
||||
const savedMode = localStorage.getItem('pomodoroMode') as TimerMode;
|
||||
const savedTimeLeft = localStorage.getItem('pomodoroTimeLeft');
|
||||
const savedIsRunning = localStorage.getItem('pomodoroIsRunning');
|
||||
const savedSessions = localStorage.getItem('pomodoroSessionsCompleted');
|
||||
|
||||
if (savedMode && savedMode !== mode) {
|
||||
setMode(savedMode);
|
||||
}
|
||||
if (savedTimeLeft && parseInt(savedTimeLeft) !== timeLeft) {
|
||||
setTimeLeft(parseInt(savedTimeLeft));
|
||||
}
|
||||
if (savedIsRunning && (savedIsRunning === 'true') !== isRunning) {
|
||||
setIsRunning(savedIsRunning === 'true');
|
||||
}
|
||||
if (savedSessions && parseInt(savedSessions) !== sessionsCompleted) {
|
||||
setSessionsCompleted(parseInt(savedSessions));
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener('pomodoroStateChange', handleStorageChange);
|
||||
return () => window.removeEventListener('pomodoroStateChange', handleStorageChange);
|
||||
}, [mode, timeLeft, isRunning, sessionsCompleted]);
|
||||
|
||||
// Function to play notification sound using Web Audio API
|
||||
const playNotificationSound = () => {
|
||||
try {
|
||||
|
||||
@@ -68,7 +68,7 @@ export function QuickCaptureWidget({ onNoteCaptured }: QuickCaptureWidgetProps)
|
||||
<>
|
||||
{/* Floating Action Button */}
|
||||
<Button
|
||||
className="fixed bottom-24 right-4 h-14 w-14 rounded-full shadow-lg hover:shadow-xl transition-all z-50"
|
||||
className="fixed bottom-24 right-4 h-14 w-14 rounded-full shadow-lg hover:shadow-xl transition-all z-40"
|
||||
onClick={() => setOpen(true)}
|
||||
title="Capture rapide (Ctrl+Q)"
|
||||
>
|
||||
|
||||
Reference in new issue
Block a user