mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-07-18 21:21:11 +02:00
fix(theme): add persistence & update icon
This commit is contained in:
parent
8c2c21a239
commit
13c2a2fe8b
2 changed files with 13 additions and 5 deletions
|
|
@ -13,6 +13,7 @@ import {
|
||||||
ChevronLeftIcon,
|
ChevronLeftIcon,
|
||||||
ChevronRightIcon,
|
ChevronRightIcon,
|
||||||
Moon,
|
Moon,
|
||||||
|
Sun,
|
||||||
HelpCircle
|
HelpCircle
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
import { getProjectConfig } from "@/app/actions/project_actions";
|
import { getProjectConfig } from "@/app/actions/project_actions";
|
||||||
|
|
@ -213,7 +214,7 @@ export default function Sidebar({ projectId, useRag, useAuth, collapsed = false,
|
||||||
text-zinc-600 dark:text-zinc-400
|
text-zinc-600 dark:text-zinc-400
|
||||||
`}
|
`}
|
||||||
>
|
>
|
||||||
<Moon size={COLLAPSED_ICON_SIZE} />
|
{ theme == "light" ? <Moon size={COLLAPSED_ICON_SIZE} /> : <Sun size={COLLAPSED_ICON_SIZE} /> }
|
||||||
{!collapsed && <span>Appearance</span>}
|
{!collapsed && <span>Appearance</span>}
|
||||||
</button>
|
</button>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
|
|
||||||
|
|
@ -15,21 +15,28 @@ type ThemeProviderState = {
|
||||||
}
|
}
|
||||||
|
|
||||||
const ThemeProviderContext = createContext<ThemeProviderState | undefined>(undefined)
|
const ThemeProviderContext = createContext<ThemeProviderState | undefined>(undefined)
|
||||||
|
const root = window.document.documentElement
|
||||||
|
|
||||||
export function ThemeProvider({
|
export function ThemeProvider({
|
||||||
children,
|
children,
|
||||||
defaultTheme = 'light',
|
defaultTheme = 'light',
|
||||||
}: ThemeProviderProps) {
|
}: ThemeProviderProps) {
|
||||||
const [theme, setTheme] = useState<Theme>(defaultTheme)
|
const [theme, setTheme] = useState<Theme>(() => {
|
||||||
|
const storedTheme = localStorage.getItem("theme")
|
||||||
|
return storedTheme === 'dark' || storedTheme === 'light' ? storedTheme : defaultTheme
|
||||||
|
})
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const root = window.document.documentElement
|
|
||||||
root.classList.remove('light', 'dark')
|
root.classList.remove('light', 'dark')
|
||||||
root.classList.add(theme)
|
root.classList.add(theme)
|
||||||
}, [theme])
|
}, [theme])
|
||||||
|
|
||||||
const toggleTheme = () => {
|
const toggleTheme = () => {
|
||||||
setTheme(theme === 'light' ? 'dark' : 'light')
|
setTheme((prevTheme) => {
|
||||||
|
const newTheme = prevTheme === 'light' ? 'dark' : 'light'
|
||||||
|
localStorage.setItem("theme", newTheme)
|
||||||
|
return newTheme
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
@ -45,4 +52,4 @@ export function useTheme() {
|
||||||
throw new Error('useTheme must be used within a ThemeProvider')
|
throw new Error('useTheme must be used within a ThemeProvider')
|
||||||
}
|
}
|
||||||
return context
|
return context
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue