| @@ -1,7 +1,8 @@ | ||
| 1 | 1 | import { useEffect, useRef } from '@wordpress/element'; |
| 2 | 2 | import { Theme } from 'shiki'; |
| 3 | -import { useThemeStore, useThemeStoreReady } from '../state/theme'; | |
| 3 | +import { useGlobalStore } from '../state/global'; | |
| 4 | +import { useThemeStore } from '../state/theme'; | |
| 4 | 5 | import { AttributesPropsAndSetter } from '../types'; |
| 5 | 6 | |
| 6 | 7 | export const useDefaults = ({ |
| 7 | 8 | attributes, |
| @@ -12,25 +13,15 @@ | ||
| 12 | 13 | fontSize, |
| 13 | 14 | fontFamily, |
| 14 | 15 | lineHeight, |
| 15 | 16 | copyButton, |
| 16 | - copyButtonType, | |
| 17 | - copyButtonString, | |
| 18 | - copyButtonStringCopied, | |
| 19 | 17 | headerType, |
| 20 | 18 | footerType, |
| 21 | 19 | clampFonts, |
| 22 | 20 | disablePadding, |
| 23 | 21 | lineNumbers, |
| 24 | - highlightingHover, | |
| 25 | - tabSize, | |
| 26 | - useTabs, | |
| 27 | - seeMoreType, | |
| 28 | - seeMoreString, | |
| 29 | - seeMoreTransition, | |
| 30 | - seeMoreCollapse, | |
| 31 | - seeMoreCollapseString, | |
| 32 | 22 | } = attributes; |
| 23 | + const { previousSettings } = useGlobalStore(); | |
| 33 | 24 | const { |
| 34 | 25 | previousTheme, |
| 35 | 26 | previousFontSize, |
| 36 | 27 | previousFontFamily, |
| @@ -39,163 +30,81 @@ | ||
| 39 | 30 | previousFooterType, |
| 40 | 31 | previousClampFonts, |
| 41 | 32 | previousDisablePadding, |
| 42 | 33 | previousLineNumbers, |
| 43 | - previousHighlightingHover, | |
| 44 | - previousCopyButton, | |
| 45 | - previousCopyButtonType, | |
| 46 | - previousCopyButtonString, | |
| 47 | - previousCopyButtonStringCopied, | |
| 48 | - previousCopyButtonUseTextarea, | |
| 49 | - previousTabSize, | |
| 50 | - previousUseTabs, | |
| 51 | - previousSeeMoreType, | |
| 52 | - previousSeeMoreString, | |
| 53 | - previousSeeMoreTransition, | |
| 54 | - previousSeeMoreCollapse, | |
| 55 | - previousSeeMoreCollapseString, | |
| 56 | 34 | } = useThemeStore(); |
| 57 | - const ready = useThemeStoreReady(); | |
| 58 | 35 | const once = useRef(false); |
| 59 | 36 | |
| 60 | 37 | useEffect(() => { |
| 61 | 38 | if (once.current) return; |
| 62 | - if (copyButton !== undefined || !previousCopyButton) return; | |
| 63 | - setAttributes({ copyButton: previousCopyButton }); | |
| 64 | - }, [previousCopyButton, copyButton, setAttributes]); | |
| 39 | + if (copyButton !== undefined || !previousSettings.copyButton) return; | |
| 40 | + setAttributes({ copyButton: previousSettings.copyButton }); | |
| 41 | + }, [previousSettings, copyButton, setAttributes]); | |
| 65 | 42 | |
| 66 | 43 | useEffect(() => { |
| 67 | 44 | if (once.current) return; |
| 68 | - if (copyButtonType) return; | |
| 69 | - setAttributes({ copyButtonType: previousCopyButtonType }); | |
| 70 | - }, [previousCopyButtonType, copyButtonType, setAttributes]); | |
| 71 | - | |
| 72 | - useEffect(() => { | |
| 73 | - if (once.current) return; | |
| 74 | - // Checks undefined to avoid invalidating old blocks | |
| 75 | - if (copyButtonString || copyButtonString === undefined) return; | |
| 76 | - setAttributes({ copyButtonString: previousCopyButtonString }); | |
| 77 | - }, [previousCopyButtonString, copyButtonString, setAttributes]); | |
| 78 | - | |
| 79 | - useEffect(() => { | |
| 80 | - if (once.current) return; | |
| 81 | - // Checks undefined to avoid invalidating old blocks | |
| 82 | - if (copyButtonStringCopied || copyButtonStringCopied === undefined) { | |
| 83 | - return; | |
| 84 | - } | |
| 85 | - const cpyP = previousCopyButtonStringCopied; | |
| 86 | - setAttributes({ copyButtonStringCopied: cpyP }); | |
| 87 | - }, [previousCopyButtonStringCopied, copyButtonStringCopied, setAttributes]); | |
| 88 | - | |
| 89 | - useEffect(() => { | |
| 90 | - if (once.current) return; | |
| 91 | - setAttributes({ copyButtonUseTextarea: previousCopyButtonUseTextarea }); | |
| 92 | - }, [previousCopyButtonUseTextarea, setAttributes]); | |
| 93 | - | |
| 94 | - useEffect(() => { | |
| 95 | - if (once.current) return; | |
| 96 | - if (theme) return; | |
| 45 | + if (theme || !previousTheme) return; | |
| 97 | 46 | setAttributes({ theme: previousTheme as Theme }); |
| 98 | 47 | }, [previousTheme, theme, setAttributes]); |
| 99 | 48 | |
| 100 | 49 | useEffect(() => { |
| 101 | 50 | if (once.current) return; |
| 102 | - if (fontSize) return; | |
| 51 | + if (fontSize || !previousFontSize) return; | |
| 103 | 52 | setAttributes({ fontSize: previousFontSize }); |
| 104 | 53 | }, [previousFontSize, fontSize, setAttributes]); |
| 105 | 54 | |
| 106 | 55 | useEffect(() => { |
| 107 | 56 | if (once.current) return; |
| 108 | - if (fontFamily || fontFamily === '') return; | |
| 57 | + if (fontFamily || fontFamily === '' || previousFontFamily === undefined) | |
| 58 | + return; | |
| 109 | 59 | setAttributes({ fontFamily: previousFontFamily }); |
| 110 | 60 | }, [previousFontFamily, fontFamily, setAttributes]); |
| 111 | 61 | |
| 112 | 62 | useEffect(() => { |
| 113 | 63 | if (once.current) return; |
| 114 | - if (lineHeight) return; | |
| 64 | + if (lineHeight || !previousLineHeight) return; | |
| 115 | 65 | setAttributes({ lineHeight: previousLineHeight }); |
| 116 | 66 | }, [previousLineHeight, lineHeight, setAttributes]); |
| 117 | 67 | |
| 118 | 68 | useEffect(() => { |
| 119 | 69 | if (once.current) return; |
| 120 | - if (headerType) return; | |
| 70 | + if (headerType || !previousHeaderType) return; | |
| 121 | 71 | setAttributes({ headerType: previousHeaderType }); |
| 122 | 72 | }, [previousHeaderType, headerType, setAttributes]); |
| 123 | 73 | |
| 124 | 74 | useEffect(() => { |
| 125 | 75 | if (once.current) return; |
| 126 | - if (footerType !== undefined) return; | |
| 76 | + if (footerType !== undefined || previousFooterType === undefined) | |
| 77 | + return; | |
| 127 | 78 | setAttributes({ footerType: previousFooterType }); |
| 128 | 79 | }, [previousFooterType, footerType, setAttributes]); |
| 129 | 80 | |
| 130 | 81 | useEffect(() => { |
| 131 | 82 | if (once.current) return; |
| 132 | - if (clampFonts !== undefined) return; | |
| 83 | + if (clampFonts !== undefined || previousClampFonts === undefined) | |
| 84 | + return; | |
| 133 | 85 | setAttributes({ clampFonts: previousClampFonts }); |
| 134 | 86 | }, [previousClampFonts, clampFonts, setAttributes]); |
| 135 | 87 | |
| 136 | 88 | useEffect(() => { |
| 137 | 89 | if (once.current) return; |
| 138 | - if (disablePadding !== undefined) return; | |
| 90 | + if ( | |
| 91 | + disablePadding !== undefined || | |
| 92 | + previousDisablePadding === undefined | |
| 93 | + ) | |
| 94 | + return; | |
| 139 | 95 | setAttributes({ disablePadding: previousDisablePadding }); |
| 140 | 96 | }, [previousDisablePadding, disablePadding, setAttributes]); |
| 141 | 97 | |
| 142 | 98 | useEffect(() => { |
| 143 | 99 | if (once.current) return; |
| 144 | - if (lineNumbers !== undefined) return; | |
| 100 | + if (lineNumbers !== undefined || previousLineNumbers === undefined) | |
| 101 | + return; | |
| 145 | 102 | setAttributes({ lineNumbers: previousLineNumbers }); |
| 146 | 103 | }, [previousLineNumbers, lineNumbers, setAttributes]); |
| 147 | 104 | |
| 148 | 105 | useEffect(() => { |
| 149 | - if (once.current) return; | |
| 150 | - if (tabSize !== undefined) return; | |
| 151 | - setAttributes({ tabSize: previousTabSize }); | |
| 152 | - }, [previousTabSize, tabSize, setAttributes]); | |
| 153 | - | |
| 154 | - useEffect(() => { | |
| 155 | - if (once.current) return; | |
| 156 | - if (useTabs !== undefined) return; | |
| 157 | - setAttributes({ useTabs: previousUseTabs }); | |
| 158 | - }, [previousUseTabs, useTabs, setAttributes]); | |
| 159 | - | |
| 160 | - useEffect(() => { | |
| 161 | - if (once.current) return; | |
| 162 | - if (seeMoreType !== undefined) return; | |
| 163 | - setAttributes({ seeMoreType: previousSeeMoreType }); | |
| 164 | - }, [previousSeeMoreType, seeMoreType, setAttributes]); | |
| 165 | - | |
| 166 | - useEffect(() => { | |
| 167 | - if (once.current) return; | |
| 168 | - if (seeMoreString !== undefined) return; | |
| 169 | - setAttributes({ seeMoreString: previousSeeMoreString }); | |
| 170 | - }, [previousSeeMoreString, seeMoreString, setAttributes]); | |
| 171 | - | |
| 172 | - useEffect(() => { | |
| 173 | - if (once.current) return; | |
| 174 | - if (seeMoreTransition !== undefined) return; | |
| 175 | - setAttributes({ seeMoreTransition: previousSeeMoreTransition }); | |
| 176 | - }, [previousSeeMoreTransition, seeMoreTransition, setAttributes]); | |
| 177 | - | |
| 178 | - useEffect(() => { | |
| 179 | - if (once.current) return; | |
| 180 | - if (seeMoreCollapse !== undefined) return; | |
| 181 | - setAttributes({ seeMoreCollapse: previousSeeMoreCollapse }); | |
| 182 | - }, [previousSeeMoreCollapse, seeMoreCollapse, setAttributes]); | |
| 183 | - | |
| 184 | - useEffect(() => { | |
| 185 | - if (once.current) return; | |
| 186 | - if (seeMoreCollapseString !== undefined) return; | |
| 187 | - setAttributes({ seeMoreCollapseString: previousSeeMoreCollapseString }); | |
| 188 | - }, [previousSeeMoreCollapseString, seeMoreCollapseString, setAttributes]); | |
| 189 | - | |
| 190 | - useEffect(() => { | |
| 191 | - if (once.current) return; | |
| 192 | - if (highlightingHover !== undefined) return; | |
| 193 | - setAttributes({ highlightingHover: previousHighlightingHover }); | |
| 194 | - }, [previousHighlightingHover, highlightingHover, setAttributes]); | |
| 195 | - | |
| 196 | - useEffect(() => { | |
| 197 | 106 | requestAnimationFrame(() => { |
| 198 | 107 | once.current = true; |
| 199 | 108 | }); |
| 200 | - }, [ready]); | |
| 109 | + }, []); | |
| 201 | 110 | }; |