diff --git a/apps/client/src/widgets/type_widgets/Spreadsheet.tsx b/apps/client/src/widgets/type_widgets/Spreadsheet.tsx index c81f5a81d4..85e80c00f6 100644 --- a/apps/client/src/widgets/type_widgets/Spreadsheet.tsx +++ b/apps/client/src/widgets/type_widgets/Spreadsheet.tsx @@ -4,22 +4,21 @@ import "./Spreadsheet.css"; import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'; import UniverPresetSheetsCoreEnUS from '@univerjs/preset-sheets-core/locales/en-US'; import { createUniver, FUniver, LocaleType, mergeLocales } from '@univerjs/presets'; -import { useEffect, useRef } from "preact/hooks"; +import { MutableRef, useEffect, useRef } from "preact/hooks"; import { useColorScheme } from "../react/hooks"; export default function Spreadsheet() { - const colorScheme = useColorScheme(); - - return ( - - ); -} - -function UniverSpreadsheet({ darkMode }: { darkMode: boolean }) { const containerRef = useRef(null); const apiRef = useRef(); + useInitializeSpreadsheet(containerRef, apiRef); + useDarkMode(apiRef); + + return
; +} + +function useInitializeSpreadsheet(containerRef: MutableRef, apiRef: MutableRef) { useEffect(() => { if (!containerRef.current) return; @@ -39,14 +38,16 @@ function UniverSpreadsheet({ darkMode }: { darkMode: boolean }) { apiRef.current = univerAPI; univerAPI.createWorkbook({}); return () => univerAPI.dispose(); - }, []); + }, [ apiRef, containerRef ]); +} + +function useDarkMode(apiRef: MutableRef) { + const colorScheme = useColorScheme(); // React to dark mode. useEffect(() => { const univerAPI = apiRef.current; if (!univerAPI) return; - univerAPI.toggleDarkMode(darkMode); - }, [ darkMode ]); - - return
; + univerAPI.toggleDarkMode(colorScheme === 'dark'); + }, [ colorScheme, apiRef ]); }