From 0b529d06396ea223f878f118c4986c8de325841f Mon Sep 17 00:00:00 2001 From: Kevin Batdorf Date: Thu, 17 Nov 2022 04:23:17 -0500 Subject: [PATCH] Run defaults check only once --- src/hooks/useDefaults.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/hooks/useDefaults.ts b/src/hooks/useDefaults.ts index cd6c48f..3deb3d3 100644 --- a/src/hooks/useDefaults.ts +++ b/src/hooks/useDefaults.ts @@ -1,4 +1,4 @@ -import { useEffect } from '@wordpress/element'; +import { useEffect, useRef } from '@wordpress/element'; import { Theme } from 'shiki'; import { useGlobalStore } from '../state/global'; import { useThemeStore } from '../state/theme'; @@ -32,51 +32,61 @@ export const useDefaults = ({ previousDisablePadding, previousLineNumbers, } = useThemeStore(); + const once = useRef(false); useEffect(() => { + if (once.current) return; if (copyButton !== undefined || !previousSettings.copyButton) return; setAttributes({ copyButton: previousSettings.copyButton }); }, [previousSettings, copyButton, setAttributes]); useEffect(() => { + if (once.current) return; if (theme || !previousTheme) return; setAttributes({ theme: previousTheme as Theme }); }, [previousTheme, theme, setAttributes]); useEffect(() => { + if (once.current) return; if (fontSize || !previousFontSize) return; setAttributes({ fontSize: previousFontSize }); }, [previousFontSize, fontSize, setAttributes]); useEffect(() => { + if (once.current) return; if (fontFamily || fontFamily === '' || previousFontFamily === undefined) return; setAttributes({ fontFamily: previousFontFamily }); }, [previousFontFamily, fontFamily, setAttributes]); useEffect(() => { + if (once.current) return; if (lineHeight || !previousLineHeight) return; setAttributes({ lineHeight: previousLineHeight }); }, [previousLineHeight, lineHeight, setAttributes]); useEffect(() => { + if (once.current) return; if (headerType || !previousHeaderType) return; setAttributes({ headerType: previousHeaderType }); }, [previousHeaderType, headerType, setAttributes]); useEffect(() => { + if (once.current) return; if (footerType !== undefined || previousFooterType === undefined) return; setAttributes({ footerType: previousFooterType }); }, [previousFooterType, footerType, setAttributes]); useEffect(() => { + if (once.current) return; if (clampFonts !== undefined || previousClampFonts === undefined) return; setAttributes({ clampFonts: previousClampFonts }); }, [previousClampFonts, clampFonts, setAttributes]); useEffect(() => { + if (once.current) return; if ( disablePadding !== undefined || previousDisablePadding === undefined @@ -86,8 +96,15 @@ export const useDefaults = ({ }, [previousDisablePadding, disablePadding, setAttributes]); useEffect(() => { + if (once.current) return; if (lineNumbers !== undefined || previousLineNumbers === undefined) return; setAttributes({ lineNumbers: previousLineNumbers }); }, [previousLineNumbers, lineNumbers, setAttributes]); + + useEffect(() => { + requestAnimationFrame(() => { + once.current = true; + }); + }, []); };