use-resolved-theme.ts 780 B

123456789101112131415161718192021222324252627
  1. import { useCallback } from 'react';
  2. import { ColorScheme } from '@growi/core';
  3. import { useSWRStatic } from '@growi/core/dist/swr';
  4. import type { SWRResponse } from 'swr';
  5. import { mutate } from 'swr';
  6. type ResolvedThemeStatus = {
  7. themeData: ColorScheme,
  8. }
  9. type ResolvedThemeUtils = {
  10. mutateResolvedThemeForEditor(resolvedTheme: ColorScheme): void
  11. }
  12. export const useResolvedThemeForEditor = (): SWRResponse<ResolvedThemeStatus, Error> & ResolvedThemeUtils => {
  13. const swrResponse = useSWRStatic<ResolvedThemeStatus, Error>('resolvedTheme');
  14. const mutateResolvedThemeForEditor = useCallback((resolvedTheme: ColorScheme) => {
  15. mutate('resolvedTheme', { themeData: resolvedTheme });
  16. }, []);
  17. return {
  18. ...swrResponse,
  19. mutateResolvedThemeForEditor,
  20. };
  21. };