@@ -14,37 +14,56 @@ const PRESET_MAPPING = {
1414}
1515
1616export 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