PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.3
GiveWP – Donation Plugin and Fundraising Platform v4.16.3
4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Admin / providers / EmotionStylesProvider / index.tsx
give / src / Admin / providers / EmotionStylesProvider Last commit date
index.tsx 7 months ago
index.tsx
65 lines
1 import {useMemo, useRef, useState, useEffect, ReactNode} from 'react';
2 import {CacheProvider} from '@emotion/react';
3 import createCache from '@emotion/cache';
4
5 /**
6 * Custom Cache Provider for react-select in WordPress 6.9+ Iframe Context
7 *
8 * In WordPress 6.9+, block editor content renders inside an iframe.
9 * This component provides an Emotion cache configured to inject styles
10 * into the correct document (the iframe's head instead of the parent's).
11 *
12 * This is similar to react-select's NonceProvider but adds the crucial
13 * `container` option to target the iframe's document.
14 */
15
16 /**
17 * @since 4.13.2
18 */
19 type EmotionStylesProviderProps = {
20 children: ReactNode;
21 cacheKey?: string;
22 };
23
24 /**
25 * Provides an Emotion cache that injects styles into the current document.
26 * This is essential for WordPress 6.9+ where blocks render in an iframe.
27 * @since 4.13.2
28 */
29 export default function EmotionStylesProvider({children, cacheKey = 'givewp'}: EmotionStylesProviderProps) {
30 const containerRef = useRef<HTMLDivElement>(null);
31 const [container, setContainer] = useState<HTMLElement | null>(null);
32
33 // Get the correct document head after mount
34 useEffect(() => {
35 if (containerRef.current) {
36 setContainer(containerRef.current.ownerDocument.head);
37 }
38 }, []);
39
40 // Create cache with the container option to target the correct document
41 const emotionCache = useMemo(() => {
42 if (!container) {
43 return null;
44 }
45 return createCache({
46 key: cacheKey,
47 container: container,
48 });
49 }, [cacheKey, container]);
50
51 // Render a wrapper div to get the document reference
52 // Use display:contents so it doesn't affect layout
53 // IMPORTANT: Don't render children until cache is ready to ensure
54 // Emotion styles are injected into the correct document from the start
55 return (
56 <div ref={containerRef} style={{display: 'contents'}}>
57 {emotionCache && (
58 <CacheProvider value={emotionCache}>
59 {children}
60 </CacheProvider>
61 )}
62 </div>
63 );
64 }
65