mirror of
https://github.com/harivansh-afk/Habit-Tracker.git
synced 2026-04-16 16:01:03 +00:00
adding today feature on main habit page, show streaks feature on settings page and improved dark mode functionality
This commit is contained in:
parent
1bb06006e8
commit
6b6cba21e5
9 changed files with 705 additions and 362 deletions
48
src/contexts/ThemeContext.tsx
Normal file
48
src/contexts/ThemeContext.tsx
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
import React, { createContext, useContext, useState, useEffect } from 'react';
|
||||
import { Theme, useTheme } from '../styles/theme';
|
||||
|
||||
interface ThemeContextType {
|
||||
theme: Theme;
|
||||
isDark: boolean;
|
||||
showStreaks: boolean;
|
||||
toggleDarkMode: () => void;
|
||||
toggleStreaks: () => void;
|
||||
}
|
||||
|
||||
const ThemeContext = createContext<ThemeContextType | undefined>(undefined);
|
||||
|
||||
export const ThemeProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
|
||||
const [isDark, setIsDark] = useState(() => localStorage.getItem('darkMode') === 'true');
|
||||
const [showStreaks, setShowStreaks] = useState(() => localStorage.getItem('showStreaks') !== 'false');
|
||||
const theme = useTheme(isDark);
|
||||
|
||||
useEffect(() => {
|
||||
if (isDark) {
|
||||
document.documentElement.classList.add('dark');
|
||||
} else {
|
||||
document.documentElement.classList.remove('dark');
|
||||
}
|
||||
localStorage.setItem('darkMode', isDark.toString());
|
||||
}, [isDark]);
|
||||
|
||||
useEffect(() => {
|
||||
localStorage.setItem('showStreaks', showStreaks.toString());
|
||||
}, [showStreaks]);
|
||||
|
||||
const toggleDarkMode = () => setIsDark(!isDark);
|
||||
const toggleStreaks = () => setShowStreaks(!showStreaks);
|
||||
|
||||
return (
|
||||
<ThemeContext.Provider value={{ theme, isDark, showStreaks, toggleDarkMode, toggleStreaks }}>
|
||||
{children}
|
||||
</ThemeContext.Provider>
|
||||
);
|
||||
};
|
||||
|
||||
export const useThemeContext = () => {
|
||||
const context = useContext(ThemeContext);
|
||||
if (context === undefined) {
|
||||
throw new Error('useThemeContext must be used within a ThemeProvider');
|
||||
}
|
||||
return context;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue