aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/shikiCodeblocks/hooks/useShikiSettings.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/shikiCodeblocks/hooks/useShikiSettings.ts')
-rw-r--r--src/plugins/shikiCodeblocks/hooks/useShikiSettings.ts15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/plugins/shikiCodeblocks/hooks/useShikiSettings.ts b/src/plugins/shikiCodeblocks/hooks/useShikiSettings.ts
index 0d92f80..50b0fc9 100644
--- a/src/plugins/shikiCodeblocks/hooks/useShikiSettings.ts
+++ b/src/plugins/shikiCodeblocks/hooks/useShikiSettings.ts
@@ -17,17 +17,28 @@
*/
import { useSettings } from "@api/settings";
+import { React } from "@webpack/common";
import { shiki } from "../api/shiki";
import { ShikiSettings } from "../types";
export function useShikiSettings(settingKeys: (keyof ShikiSettings)[], overrides?: Record<string, any>) {
const settings = useSettings(settingKeys.map(key => `plugins.ShikiCodeblocks.${key}`)).plugins.ShikiCodeblocks as ShikiSettings;
+ const [isLoading, setLoading] = React.useState(false);
const withOverrides = { ...settings, ...overrides };
-
const themeUrl = withOverrides.customTheme || withOverrides.theme;
- if (themeUrl !== shiki.currentThemeUrl) shiki.setTheme(themeUrl);
+
+ if (overrides) {
+ const willChangeTheme = shiki.currentThemeUrl && themeUrl !== shiki.currentThemeUrl;
+ const noOverrides = Object.keys(overrides).length === 0;
+
+ if (isLoading && (!willChangeTheme || noOverrides)) setLoading(false);
+ if ((!isLoading && willChangeTheme)) {
+ setLoading(true);
+ shiki.setTheme(themeUrl);
+ }
+ }
return {
...withOverrides,