Skip to content

Commit 97e11d5

Browse files
committed
show color scheme colors in picker
1 parent 0805879 commit 97e11d5

File tree

7 files changed

+95
-6
lines changed

7 files changed

+95
-6
lines changed

src/components/color-palette-control/index.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import { applyFilters, addFilter } from '@wordpress/hooks'
3131
import { cloneDeep } from 'lodash'
3232
import { i18n } from 'stackable'
3333
import classnames from 'classnames'
34+
import { useBlockColorSchemes } from '~stackable/hooks'
3435

3536
const popoverProps = {
3637
placement: 'left-start',
@@ -40,6 +41,20 @@ const popoverProps = {
4041

4142
const PASSTHRUOP = v => v
4243

44+
addFilter( 'stackable.color-palette-control.colors', 'stackable/global-color-schemes-color-palette-control', ( { colors: _colors, gradients } ) => {
45+
// Get colors from the color schemes.
46+
const { getColorGroups } = useBlockColorSchemes()
47+
48+
const colorSchemeColors = getColorGroups()
49+
50+
const colors = [
51+
...colorSchemeColors,
52+
..._colors,
53+
]
54+
55+
return { colors, gradients }
56+
} )
57+
4358
addFilter( 'stackable.color-palette-control.colors', 'stackable/color-palette-control', ( { colors: _colors, gradients: _gradients } ) => {
4459
const {
4560
stackableColors,

src/components/color-scheme-preview/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ const popoverProps = {
6060
shift: true,
6161
}
6262

63-
export const PresetColorSchemesPicker = ( {
63+
export const ColorSchemePresetPicker = ( {
6464
label, presets, onPresetClick,
6565
} ) => {
6666
return (

src/components/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,6 @@ export { default as FontPairPicker } from './font-pair-picker'
121121
export { SectionSettings } from './section-settings'
122122
export {
123123
default as ColorSchemePreview,
124-
PresetColorSchemesPicker,
124+
ColorSchemePresetPicker,
125125
DEFAULT_COLOR_SCHEME_COLORS,
126126
} from './color-scheme-preview'

src/hooks/use-block-color-schemes.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { applyFilters } from '@wordpress/hooks'
44
export const useBlockColorSchemes = () => {
55
const {
66
getScheme,
7+
getColorGroups,
78
allColorSchemes,
89
COLOR_SCHEME_OPTIONS,
910
baseColorScheme,
@@ -35,8 +36,57 @@ export const useBlockColorSchemes = () => {
3536
return COLOR_SCHEME_OPTIONS.find( scheme => scheme.value === key )?.value || ( returnFallback ? fallback : 'scheme-unavailable' )
3637
}
3738

39+
// Converts property name to space separated string (e.g., backgroundColor --> Background Color)
40+
const getLabel = property => {
41+
const result = property.replace( /([a-z])([A-Z])/g, '$1 $2' )
42+
.replace( /^([a-z])/, match => match.toUpperCase() )
43+
return result
44+
}
45+
46+
// Converts property name to kebab-cased string with scheme key as prefix
47+
// (e.g., backgroundColor --> --stk-scheme-default-1-background-color)
48+
const toKebab = ( property, slug ) => {
49+
const result = property.replace( /([a-z0-9])([A-Z])/g, '$1-$2' )
50+
return '--stk-' + slug + '-' + result.toLowerCase()
51+
}
52+
53+
// get color groups for color palette picker.
54+
const getColorGroups = () => {
55+
const colorGroups = allColorSchemes.reduce( ( groups, scheme ) => {
56+
// only add colors if the option to add color scheme in the picker is enabled.
57+
if ( ! scheme.showInPicker ) {
58+
return groups
59+
}
60+
61+
// Add name and slug to each color in the color scheme
62+
const colors = Object.entries( scheme.colorScheme ).reduce( ( colors, [ property, value ] ) => {
63+
return [
64+
...colors,
65+
{
66+
color: value?.desktop,
67+
name: getLabel( property ),
68+
slug: toKebab( property, scheme.key ),
69+
},
70+
]
71+
}, [] )
72+
73+
// return color schemes as groups
74+
return [
75+
...groups,
76+
{
77+
name: scheme.name,
78+
id: scheme.key,
79+
colors,
80+
},
81+
]
82+
}, [] )
83+
84+
return colorGroups
85+
}
86+
3887
return {
3988
getScheme,
89+
getColorGroups,
4090
allColorSchemes,
4191
COLOR_SCHEME_OPTIONS,
4292
baseColorScheme: getScheme( _baseColorScheme ),
@@ -47,6 +97,7 @@ export const useBlockColorSchemes = () => {
4797

4898
return {
4999
getScheme,
100+
getColorGroups,
50101
allColorSchemes,
51102
COLOR_SCHEME_OPTIONS,
52103
baseColorScheme,

src/plugins/global-settings/color-schemes/color-scheme-picker.js

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ import {
1212
InspectorSubHeader,
1313
ColorPaletteControl,
1414
AdvancedTextControl,
15+
AdvancedToggleControl,
1516
ColorSchemePreview,
16-
PresetColorSchemesPicker,
17+
ColorSchemePresetPicker,
1718
DEFAULT_COLOR_SCHEME_COLORS,
1819
} from '~stackable/components'
1920
import { useBlockHoverState } from '~stackable/hooks'
@@ -152,6 +153,17 @@ const ColorSchemePicker = props => {
152153
updateColorSchemes( currentItem )
153154
}
154155

156+
const onChangeShowInPicker = value => {
157+
if ( ! itemInEdit ) {
158+
return
159+
}
160+
const currentItem = cloneDeep( itemInEdit )
161+
currentItem.showInPicker = value === '' ? false : value
162+
setItemInEdit( currentItem )
163+
164+
updateColorSchemes( currentItem )
165+
}
166+
155167
// Update the current color scheme when a preset is selected.
156168
const onPresetClick = colors => {
157169
if ( ! itemInEdit ) {
@@ -192,6 +204,7 @@ const ColorSchemePicker = props => {
192204
}
193205
}
194206

207+
// Duplicate the color scheme being edited
195208
const onDuplicate = item => {
196209
// eslint-disable-next-line no-alert
197210
const confirmDuplicate = window.confirm( __( 'Do you want to duplicate this color scheme?', i18n ) )
@@ -286,13 +299,19 @@ const ColorSchemePicker = props => {
286299
} }
287300
/>
288301

289-
<PresetColorSchemesPicker
290-
label={ __( 'Preset Color Schemes', i18n ) }
302+
<ColorSchemePresetPicker
303+
label={ __( 'Color Scheme Presets', i18n ) }
291304
presets={ PRESETS }
292305
onPresetClick={ onPresetClick }
293306
/>
294307
</div>
295308

309+
<AdvancedToggleControl
310+
label={ __( 'Show color scheme colors in color picker', i18n ) }
311+
checked={ itemInEdit?.showInPicker }
312+
onChange={ value => onChangeShowInPicker( value ) }
313+
defaultValue={ itemInEdit?.key?.startsWith( 'scheme-default' ) }
314+
/>
296315
{ COLOR_SETTINGS.map( ( settings, index ) => (
297316
<ColorPaletteControl
298317
key={ index }

src/plugins/global-settings/color-schemes/index.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ public function register_color_schemes() {
6868
'colorScheme' => array(
6969
'type' => 'object',
7070
'properties' => Stackable_Global_Color_Schemes::get_color_scheme_properties( $string_properties )
71-
)
71+
),
72+
'showInPicker' => array( 'type' => 'boolean' ),
7273
)
7374
)
7475
)

src/plugins/global-settings/color-schemes/store.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ domReady( () => {
7474
stackable_global_background_mode_color_scheme: backgroundModeColorScheme,
7575
stackable_global_container_mode_color_scheme: containerModeColorScheme,
7676
} = response
77+
7778
const colorSchemes = Array.isArray( _colorSchemes ) && _colorSchemes.length > 0 ? _colorSchemes : [ {
7879
name: 'Default Scheme',
7980
key: 'scheme-default-1',
@@ -87,6 +88,7 @@ domReady( () => {
8788
buttonTextColor: { desktop: '' },
8889
buttonOutlineColor: { desktop: '' },
8990
},
91+
showInPicker: true,
9092
}, {
9193
name: 'Color Scheme 2',
9294
key: 'scheme-default-2',
@@ -100,6 +102,7 @@ domReady( () => {
100102
buttonTextColor: { desktop: '' },
101103
buttonOutlineColor: { desktop: '' },
102104
},
105+
showInPicker: true,
103106
} ]
104107

105108
const defaultColorScheme = {

0 commit comments

Comments
 (0)