Files
yaak/src-web/hooks/useTheme.ts
Gregory Schier db2d786d50 Start of themes
2023-03-07 11:24:38 -08:00

39 lines
1004 B
TypeScript

import { useQuery, useQueryClient } from '@tanstack/react-query';
import { useEffect } from 'react';
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);
};
useEffect(() => {
return subscribeToPreferredAppearanceChange(themeChange);
}, []);
return {
appearance: appearance.data,
toggleAppearance: handleToggleAppearance,
};
}