Skip to content

Commit 47cd13c

Browse files
committed
feat: dynamically add styles in editor with editor loader
1 parent 526115e commit 47cd13c

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
* WordPress dependencies
3+
*/
4+
import { useSelect } from '@wordpress/data'
5+
import { useEffect, useState } from '@wordpress/element'
6+
7+
/**
8+
* External dependencies
9+
*/
10+
import { compact } from 'lodash'
11+
12+
const PRESET_MAPPING = {
13+
fontSizes: {
14+
prefix: 'font-size',
15+
},
16+
spacingSizes: {
17+
prefix: 'spacing-size',
18+
},
19+
}
20+
21+
const renderGlobalStyles = ( customPresets, setStyles ) => {
22+
let css = ''
23+
24+
Object.entries( customPresets ).forEach( ( [ key, presets ] ) => {
25+
const styleRules = presets?.map( preset => {
26+
return preset
27+
? `--stk--preset--${ PRESET_MAPPING[ key ]?.prefix }--${ preset?.slug || '' }: ${ preset?.size || '' };`
28+
: ''
29+
} )
30+
css += compact( styleRules ).join( '' )
31+
} )
32+
33+
css = `:root { ${ css } }`
34+
setStyles( css )
35+
}
36+
37+
export const GlobalPresetControlsStyles = () => {
38+
const { customPresets } = useSelect( select => {
39+
const _customPresetControls = select( 'stackable/global-preset-controls.custom' )?.getCustomPresetControls()
40+
return { customPresets: { ..._customPresetControls } ?? [] }
41+
}, [] )
42+
const [ styles, setStyles ] = useState( '' )
43+
44+
useEffect( () => {
45+
if ( customPresets && typeof customPresets === 'object' ) {
46+
renderGlobalStyles( customPresets, setStyles )
47+
}
48+
}, [ JSON.stringify( customPresets ) ] )
49+
50+
return styles
51+
}

0 commit comments

Comments
 (0)