22 * Internal dependencies
33 */
44import { hoverState } from '../utils'
5- import { PresetColorSchemesPicker } from './presetColorSchemes '
5+ import PRESET_COLOR_SCHEMES from './preset-color-schemes.json '
66/**
77 * External dependencies
88 */
@@ -13,20 +13,26 @@ import {
1313 ColorPaletteControl ,
1414 AdvancedTextControl ,
1515 ColorSchemePreview ,
16+ PresetColorSchemesPicker ,
1617 DEFAULT_COLOR_SCHEME_COLORS ,
1718 DEFAULT_BACKGROUND_COLOR_SCHEME_COLORS ,
1819} from '~stackable/components'
1920import { useBlockHoverState } from '~stackable/hooks'
2021import { extractColor } from '~stackable/util'
22+ import { cloneDeep , isEqual } from 'lodash'
2123
22- import { useRef } from '@wordpress/element'
24+ import {
25+ useRef , useState , useEffect ,
26+ } from '@wordpress/element'
2327import { useSelect , dispatch } from '@wordpress/data'
2428import { models } from '@wordpress/api'
2529import { __ } from '@wordpress/i18n'
2630import { applyFilters , doAction } from '@wordpress/hooks'
2731
2832let saveTimeout = null
2933
34+ const PRESETS = [ ...PRESET_COLOR_SCHEMES ]
35+
3036const COLOR_SETTINGS = [ {
3137 label : __ ( 'Background Color' , i18n ) ,
3238 property : 'backgroundColor' ,
@@ -63,32 +69,54 @@ const ColorSchemePicker = props => {
6369 const { colorSchemes } = useSelect ( select => {
6470 const { colorSchemes : _colorSchemes } = select ( 'stackable/global-color-schemes' ) . getSettings ( )
6571 return {
66- colorSchemes : [ ... _colorSchemes ] ,
72+ colorSchemes : cloneDeep ( _colorSchemes ) ,
6773 }
6874 } )
6975
70- // console.log( 'colorSchemes', colorSchemes )
76+ const [ subHeaderControls , setSubHeaderControls ] = useState ( { showTrash : false , showReset : false } )
7177 const [ currentHoverState ] = useBlockHoverState ( { forceUpdateHoverState : true } )
78+ const currentState = `desktop${ hoverState [ currentHoverState ] } `
79+
80+ const showResetButton = item => {
81+ return item . key === 'scheme-default-2'
82+ ? ! isEqual ( item . colorScheme , DEFAULT_BACKGROUND_COLOR_SCHEME_COLORS )
83+ : ! isEqual ( item . colorScheme , DEFAULT_COLOR_SCHEME_COLORS )
84+ }
85+
86+ useEffect ( ( ) => {
87+ if ( ! itemInEdit ) {
88+ setSubHeaderControls ( { showTrash : false , showReset : false } )
89+ return
90+ }
91+ const controls = {
92+ showTrash : ! itemInEdit . key . startsWith ( 'scheme-default' ) ,
93+ showReset : showResetButton ( itemInEdit ) ,
94+ }
95+
96+ setSubHeaderControls ( controls )
97+ } , [ itemInEdit ] )
7298
7399 const customColorSchemes = applyFilters ( 'stackable.global-settings.global-color-schemes.custom-color-schemes' , [ ] )
74100
101+ const getDefaultPreviewColors = item => {
102+ return item . key === 'scheme-default-2' ? DEFAULT_BACKGROUND_COLOR_SCHEME_COLORS : DEFAULT_COLOR_SCHEME_COLORS
103+ }
104+
75105 const handleAddItem = ( ) => {
76106 doAction ( 'stackable.global-settings.global-color-schemes.custom-color-schemes.add-color-scheme' , saveTimeout )
77107 }
78108
79- const currentState = `desktop${ hoverState [ currentHoverState ] } `
80-
81- const getDefaultPreviewColors = item => {
82- return item . key === 'scheme-default-2' ? DEFAULT_BACKGROUND_COLOR_SCHEME_COLORS : DEFAULT_COLOR_SCHEME_COLORS
109+ const onSortEnd = props => {
110+ doAction ( 'stackable.global-settings.global-color-schemes.custom-color-schemes.sort-color-schemes' , props , saveTimeout )
83111 }
84112
85113 const updateColorSchemes = currentItem => {
86114 clearTimeout ( saveTimeout )
87115
88- const customUpdate = applyFilters ( 'stackable.global-settings.global-color-schemes.update-color-schemes' , currentItem , saveTimeout )
116+ const customUpdate = applyFilters ( 'stackable.global-settings.global-color-schemes.update-color-schemes' , false , currentItem , saveTimeout )
89117
90118 if ( ! customUpdate ) {
91- const updatedColorSchemes = [ ... colorSchemes ]
119+ const updatedColorSchemes = cloneDeep ( colorSchemes )
92120 const currentIndex = colorSchemes . findIndex ( c => c . key === currentItem . key )
93121 updatedColorSchemes [ currentIndex ] = currentItem
94122
@@ -106,7 +134,7 @@ const ColorSchemePicker = props => {
106134 if ( ! itemInEdit ) {
107135 return
108136 }
109- const currentItem = { ... itemInEdit }
137+ const currentItem = cloneDeep ( itemInEdit )
110138 currentItem . name = name
111139 setItemInEdit ( currentItem )
112140
@@ -117,7 +145,7 @@ const ColorSchemePicker = props => {
117145 if ( ! itemInEdit ) {
118146 return
119147 }
120- const currentItem = { ... itemInEdit }
148+ const currentItem = cloneDeep ( itemInEdit )
121149 currentItem . colorScheme [ property ] [ currentState ] = color
122150 setItemInEdit ( currentItem )
123151
@@ -128,7 +156,7 @@ const ColorSchemePicker = props => {
128156 if ( ! itemInEdit ) {
129157 return
130158 }
131- const currentItem = { ... itemInEdit }
159+ const currentItem = cloneDeep ( itemInEdit )
132160 Object . entries ( colors ) . forEach ( ( [ property , color ] ) => {
133161 currentItem . colorScheme [ property ] . desktop = color
134162 } )
@@ -137,6 +165,30 @@ const ColorSchemePicker = props => {
137165 updateColorSchemes ( currentItem )
138166 }
139167
168+ const onReset = item => {
169+ // eslint-disable-next-line no-alert
170+ const confirmReset = window . confirm ( __ ( 'Are you sure you want to reset this color scheme to their default values?' , i18n ) )
171+ if ( ! confirmReset ) {
172+ return
173+ }
174+
175+ const currentItem = cloneDeep ( item )
176+ currentItem . colorScheme = item . key === 'scheme-default-2' ? cloneDeep ( DEFAULT_BACKGROUND_COLOR_SCHEME_COLORS ) : cloneDeep ( DEFAULT_COLOR_SCHEME_COLORS )
177+
178+ if ( itemInEdit ) {
179+ setItemInEdit ( currentItem )
180+ }
181+ updateColorSchemes ( currentItem )
182+ }
183+
184+ const onDeleteItem = item => {
185+ const customDelete = applyFilters ( 'stackable.global-settings.global-color-schemes.delete-color-scheme' , false , item , setItemInEdit , saveTimeout )
186+
187+ if ( ! customDelete ) {
188+ onReset ( item )
189+ }
190+ }
191+
140192 const ItemPreview = ( { item, withWrapper = false } ) => {
141193 const defaults = getDefaultPreviewColors ( item )
142194
@@ -158,14 +210,6 @@ const ColorSchemePicker = props => {
158210 > { Preview } </ div > : Preview
159211 }
160212
161- const onItemClick = item => {
162- setItemInEdit ( item )
163- }
164-
165- const onBack = ( ) => {
166- setItemInEdit ( null )
167- }
168-
169213 return ( ! itemInEdit ? < SortablePicker
170214 ref = { ref }
171215 { ...props }
@@ -174,19 +218,23 @@ const ColorSchemePicker = props => {
174218 nonSortableItems = { colorSchemes }
175219 editableName = { false }
176220 // onChangeItem={ onChangeColorScheme }
177- // onDeleteItem={ onColorSchemeDelete }
221+ onDeleteItem = { onDeleteItem }
178222 handleAddItem = { handleAddItem }
179- // onSortEnd={ onSortEnd }
223+ onSortEnd = { onSortEnd }
180224 ItemPreview = { ItemPreview }
181225 ItemPicker = { null }
182226 buttonClassName = "stk-global-color-scheme__color-scheme-item"
183227 enableAddItem = { isPro }
184- onItemClick = { onItemClick }
228+ onItemClick = { item => setItemInEdit ( item ) }
229+ showResetCallback = { item => showResetButton ( item ) }
185230 /> : < >
186231 < InspectorSubHeader
187232 title = { __ ( 'Editing Color Scheme' , i18n ) }
188- onBack = { onBack }
189- showTrash = { false }
233+ onBack = { ( ) => setItemInEdit ( null ) }
234+ showTrash = { subHeaderControls . showTrash }
235+ showReset = { subHeaderControls . showReset }
236+ onTrash = { ( ) => onDeleteItem ( itemInEdit ) }
237+ onReset = { ( ) => onReset ( itemInEdit ) }
190238 />
191239 < div className = "stk-global-color-scheme__edit-panel-preview" >
192240 < p > { __ ( 'Editing this scheme will also change all blocks that currently use this color scheme.' , i18n ) } </ p >
@@ -203,8 +251,13 @@ const ColorSchemePicker = props => {
203251 } }
204252 />
205253
206- < PresetColorSchemesPicker onPresetClick = { onPresetClick } />
254+ < PresetColorSchemesPicker
255+ label = { __ ( 'Preset Color Schemes' , i18n ) }
256+ presets = { PRESETS }
257+ onPresetClick = { onPresetClick }
258+ />
207259 </ div >
260+
208261 { COLOR_SETTINGS . map ( ( settings , index ) => (
209262 < ColorPaletteControl
210263 key = { index }
0 commit comments