Skip to content

Commit 4d37e1a

Browse files
committed
fix: add additional functionalities to usePresetControls
1 parent d85dffa commit 4d37e1a

File tree

3 files changed

+49
-30
lines changed

3 files changed

+49
-30
lines changed

src/block-components/helpers/size/edit.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ const Spacing = props => {
173173
highlight: 'margin',
174174
}
175175

176-
const presetMarks = usePresetControls( 'spacingSizes' )
176+
const presetMarks = usePresetControls( 'spacingSizes' )?.getPresetMarks() || null
177177

178178
return (
179179
<>

src/block-components/typography/edit.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ export const Controls = props => {
100100

101101
const onChangeContent = useCallback( text => setDebouncedText( escapeHTMLIfInvalid( text ) ), [] )
102102

103-
const presetMarks = usePresetControls( 'fontSizes' )
103+
const presetMarks = usePresetControls( 'fontSizes' )?.getPresetMarks() || null
104104

105105
return (
106106
<>

src/hooks/use-preset-controls.js

Lines changed: 47 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,37 +14,56 @@ const PRESET_MAPPING = {
1414
}
1515

1616
export const usePresetControls = property => {
17-
// Get the base presets
17+
// Get the theme presets for the property
1818
const [ themePresets ] = useSettings( PRESET_MAPPING[ property ].settings.join( '.' ) )
19-
const basePresets = Array.isArray( themePresets ) && themePresets.length > 0
19+
// Get all custom presets
20+
const { allCustomPresets } = useSelect( select => {
21+
const _customPresetControls = select( 'stackable/global-preset-controls.custom' )?.getCustomPresetControls()
22+
return { allCustomPresets: { ..._customPresetControls } }
23+
}, [] )
24+
25+
const hasThemePresets = Array.isArray( themePresets ) && themePresets.length > 0
26+
27+
// Get the theme/default presets if the user have one, else return the stackable presets
28+
const basePresets = hasThemePresets
2029
? themePresets
2130
: PRESET_MAPPING[ property ].settings.reduce( ( acc, key ) => acc?.[ key ], DEFAULT_PRESETS.settings )
2231

23-
// Get the custom presets
24-
const { customPresets } = useSelect( select => {
25-
const _customPresetControls = select( 'stackable/global-preset-controls.custom' )?.getCustomPresetControls()
26-
return { customPresets: { ..._customPresetControls }[ property ] ?? [] }
27-
}, [] )
32+
// Returns the base presets overriden by the custom presets
33+
const getMergedPresets = () => {
34+
const customPresets = allCustomPresets[ property ] ?? []
35+
// Convert custom presets into a lookup object for fast access
36+
const customMap = customPresets.reduce( ( acc, item ) => {
37+
acc[ item.slug ] = item
38+
return acc
39+
}, {} )
40+
41+
// Merge base presets with custom presets (priority)
42+
return basePresets.map( baseItem =>
43+
customMap[ baseItem.slug ]
44+
? { ...baseItem, ...customMap[ baseItem.slug ] }
45+
: baseItem
46+
)
47+
}
48+
49+
// Get the merge preset marks with the CSS Variable value
50+
const getPresetMarks = () => {
51+
const prefix = PRESET_MAPPING[ property ].prefix
52+
const mergedPresets = getMergedPresets()
53+
54+
return mergedPresets
55+
.filter( preset => ! ( preset?.isDiscarded ) )
56+
.map( preset => ( {
57+
...preset,
58+
value: `var(--stk--preset--${ prefix }--${ preset.slug }, ${ preset.size })`,
59+
} ) )
60+
}
2861

29-
// Convert custom presets into a lookup object for fast access
30-
const customMap = customPresets.reduce( ( acc, item ) => {
31-
acc[ item.slug ] = item
32-
return acc
33-
}, {} )
34-
35-
// Merge base presets with custom presets (priority)
36-
const mergedPresets = basePresets.map( baseItem =>
37-
customMap[ baseItem.slug ]
38-
? { ...baseItem, ...customMap[ baseItem.slug ] }
39-
: baseItem
40-
)
41-
42-
const prefix = PRESET_MAPPING[ property ].prefix
43-
44-
return mergedPresets.map( preset => ( {
45-
label: preset.name,
46-
slug: preset.slug,
47-
size: preset.size,
48-
value: `var(--stk--preset--${ prefix }--${ preset.slug }, ${ preset.size })`,
49-
} ) )
62+
return {
63+
hasThemePresets,
64+
basePresets,
65+
allCustomPresets,
66+
getMergedPresets,
67+
getPresetMarks,
68+
}
5069
}

0 commit comments

Comments
 (0)