@@ -18,6 +18,7 @@ import {
1818 ColorSchemePreview ,
1919 ColorSchemePresetPicker ,
2020 DEFAULT_COLOR_SCHEME_COLORS ,
21+ ALTERNATE_COLOR_SCHEME_COLORS ,
2122 AdvancedToggleControl ,
2223 ProControlButton ,
2324 ControlSeparator ,
@@ -116,13 +117,17 @@ const ColorSchemePicker = props => {
116117 return ! isEqual ( item . colorScheme , DEFAULT_COLOR_SCHEME_COLORS )
117118 }
118119
120+ const showDeleteButton = item => {
121+ return item . key === 'scheme-default-3'
122+ }
123+
119124 useEffect ( ( ) => {
120125 if ( ! itemInEdit ) {
121126 setSubHeaderControls ( { showTrash : false , showReset : false } )
122127 return
123128 }
124129 const controls = {
125- showTrash : ! itemInEdit . key . startsWith ( 'scheme-default' ) ,
130+ showTrash : itemInEdit . key === 'scheme-default-3' || ! itemInEdit . key . startsWith ( 'scheme-default' ) ,
126131 showReset : showResetButton ( itemInEdit ) ,
127132 }
128133
@@ -132,8 +137,38 @@ const ColorSchemePicker = props => {
132137 // Get the custom color schemes
133138 const customColorSchemes = applyFilters ( 'stackable.global-settings.global-color-schemes.custom-color-schemes' , [ ] )
134139
140+ const saveColorSchemeSettings = updatedColorSchemes => {
141+ saveTimeout = setTimeout ( ( ) => {
142+ const settings = new models . Settings ( {
143+ stackable_global_color_schemes : updatedColorSchemes , // eslint-disable-line camelcase
144+ // Clear the cached CSS when the color scheme is updated
145+ stackable_global_color_scheme_generated_css : '' , // eslint-disable-line camelcase
146+ } )
147+ settings . save ( )
148+ } , 300 )
149+
150+ // Update our store.
151+ dispatch ( 'stackable/global-color-schemes' ) . updateColorSchemes ( updatedColorSchemes )
152+ }
153+
135154 // Add a custom color scheme
136155 const handleAddItem = ( event , scheme = null ) => {
156+ if ( ! colorSchemes . some ( scheme => scheme . key === 'scheme-default-3' ) ) {
157+ const alternateColorScheme = {
158+ name : __ ( 'Alternate Scheme' , i18n ) ,
159+ key : 'scheme-default-3' ,
160+ colorScheme : ALTERNATE_COLOR_SCHEME_COLORS ,
161+ }
162+
163+ const updatedColorSchemes = [
164+ ...colorSchemes ,
165+ alternateColorScheme ,
166+ ]
167+
168+ saveColorSchemeSettings ( updatedColorSchemes )
169+ return
170+ }
171+
137172 doAction ( 'stackable.global-settings.global-color-schemes.custom-color-schemes.add-color-scheme' , scheme , setItemInEdit , saveTimeout )
138173 }
139174
@@ -154,17 +189,8 @@ const ColorSchemePicker = props => {
154189 const currentIndex = colorSchemes . findIndex ( c => c . key === currentItem . key )
155190 updatedColorSchemes [ currentIndex ] = currentItem
156191
157- saveTimeout = setTimeout ( ( ) => {
158- const settings = new models . Settings ( {
159- stackable_global_color_schemes : updatedColorSchemes , // eslint-disable-line camelcase
160- // Clear the cached CSS when the color scheme is updated
161- stackable_global_color_scheme_generated_css : '' , // eslint-disable-line camelcase
162- } )
163- settings . save ( )
164- } , 300 )
165-
166- // Update our store.
167- dispatch ( 'stackable/global-color-schemes' ) . updateColorSchemes ( updatedColorSchemes )
192+ clearTimeout ( saveTimeout )
193+ saveColorSchemeSettings ( updatedColorSchemes )
168194 }
169195 }
170196
@@ -285,6 +311,24 @@ const ColorSchemePicker = props => {
285311 }
286312
287313 const onDeleteItem = item => {
314+ if ( item . key === 'scheme-default-3' ) {
315+ // eslint-disable-next-line no-alert
316+ const confirmDelete = window . confirm ( __ ( 'Deleting this color scheme would remove all colors linked to it. Any blocks that use this color scheme will revert to the default scheme. Delete this color scheme?' , i18n ) )
317+
318+ if ( ! confirmDelete ) {
319+ return
320+ }
321+
322+ const selectedIndex = colorSchemes . findIndex ( c => c . key === item . key )
323+ const updatedColorSchemes = cloneDeep ( colorSchemes )
324+ updatedColorSchemes . splice ( selectedIndex , 1 )
325+
326+ clearTimeout ( saveTimeout )
327+ saveColorSchemeSettings ( updatedColorSchemes )
328+ setItemInEdit ( null )
329+ return
330+ }
331+
288332 // If the color scheme to be deleted is a custom color scheme, customDelete will return true
289333 const customDelete = applyFilters ( 'stackable.global-settings.global-color-schemes.delete-color-scheme' , false , item , setItemInEdit , saveTimeout )
290334
@@ -419,9 +463,10 @@ const ColorSchemePicker = props => {
419463 ItemPreview = { ItemPreview }
420464 ItemPicker = { null }
421465 buttonClassName = "stk-global-color-scheme__color-scheme-item"
422- enableAddItem = { isPro }
466+ enableAddItem = { isPro || ! colorSchemes . some ( scheme => scheme . key === 'scheme-default-3' ) }
423467 onItemClick = { item => setItemInEdit ( item ) }
424468 showResetCallback = { item => showResetButton ( item ) }
469+ showDeleteCallback = { item => showDeleteButton ( item ) }
425470 /> : < >
426471 < InspectorSubHeader
427472 title = { ! isPro && itemInEdit . key === 'scheme-default-1'
0 commit comments