mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-01-19 07:26:59 +01:00
39 lines
1004 B
TypeScript
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,
|
|
};
|
|
}
|