mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-18 07:23:51 +01:00
Start of themes
This commit is contained in:
@@ -1,14 +1,38 @@
|
||||
import { useQuery, useQueryClient } from '@tanstack/react-query';
|
||||
import { useEffect } from 'react';
|
||||
import { setTheme, subscribeToPreferredThemeChange, toggleTheme } from '../lib/theme';
|
||||
import type { Appearance } from '../lib/theme/window';
|
||||
import {
|
||||
getAppearance,
|
||||
setAppearance,
|
||||
subscribeToPreferredAppearanceChange,
|
||||
toggleAppearance,
|
||||
} from '../lib/theme/window';
|
||||
|
||||
const appearanceQueryKey = ['theme', 'appearance'];
|
||||
|
||||
export default function useTheme() {
|
||||
const queryClient = useQueryClient();
|
||||
const appearance = useQuery({
|
||||
queryKey: appearanceQueryKey,
|
||||
queryFn: getAppearance,
|
||||
initialData: getAppearance(),
|
||||
});
|
||||
|
||||
const themeChange = (appearance: Appearance) => {
|
||||
setAppearance(appearance);
|
||||
};
|
||||
|
||||
const handleToggleAppearance = async () => {
|
||||
const newAppearance = toggleAppearance();
|
||||
await queryClient.setQueryData(appearanceQueryKey, newAppearance);
|
||||
};
|
||||
|
||||
export default function useTheme(subscribeToChanges = true): { toggleTheme: () => void } {
|
||||
useEffect(() => {
|
||||
if (!subscribeToChanges) return;
|
||||
const unsub = subscribeToPreferredThemeChange(setTheme);
|
||||
return unsub;
|
||||
}, [subscribeToChanges]);
|
||||
return subscribeToPreferredAppearanceChange(themeChange);
|
||||
}, []);
|
||||
|
||||
return {
|
||||
toggleTheme: toggleTheme,
|
||||
appearance: appearance.data,
|
||||
toggleAppearance: handleToggleAppearance,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user