@@ -29,7 +29,9 @@ import {
2929 Spinner ,
3030 ToggleControl ,
3131} from '@wordpress/components'
32- import { useEffect , useState } from '@wordpress/element'
32+ import {
33+ useEffect , useState , useCallback ,
34+ } from '@wordpress/element'
3335import { sprintf , __ } from '@wordpress/i18n'
3436import { useBlockColorSchemes } from '~stackable/hooks'
3537import ColorSchemePreview from '../color-scheme-preview'
@@ -129,6 +131,40 @@ export const ModalDesignLibrary = props => {
129131 props . onSelect ( designs , cb , selectedTab )
130132 }
131133
134+ const onSelectDesign = useCallback ( ( designId , category , parsedBlocks , blocksForSubstitution , selectedPreviewSize ) => {
135+ if ( selectedTab === 'pages' ) {
136+ const selectedDesign = [ {
137+ designId, category, designData : parsedBlocks , blocksForSubstitution, selectedPreviewSize,
138+ } ]
139+ addDesign ( selectedDesign )
140+
141+ return
142+ }
143+
144+ const newSelectedDesigns = [ ...selectedDesignIds ]
145+ // We also get the design data from displayDesigns
146+ // already instead of after clicking the "Add
147+ // Designs" button since displayDesigns can change
148+ // when the user is switching tabs (block/ui
149+ // kits/wireframes) and the data can be lost.
150+ const newSelectedDesignData = [ ...selectedDesignData ]
151+
152+ if ( newSelectedDesigns . includes ( designId ) ) {
153+ const i = newSelectedDesigns . indexOf ( designId )
154+ newSelectedDesigns . splice ( i , 1 )
155+ setSelectedDesignIds ( newSelectedDesigns )
156+ newSelectedDesignData . splice ( i , 1 )
157+ setSelectedDesignData ( newSelectedDesignData )
158+ } else {
159+ newSelectedDesigns . push ( designId )
160+ setSelectedDesignIds ( newSelectedDesigns )
161+ newSelectedDesignData . push ( {
162+ designId, category, designData : parsedBlocks , blocksForSubstitution, selectedPreviewSize,
163+ } )
164+ setSelectedDesignData ( newSelectedDesignData )
165+ }
166+ } , [ ] )
167+
132168 return (
133169 < Modal
134170 title = { __ ( 'Stackable Design Library' , i18n ) }
@@ -393,39 +429,7 @@ export const ModalDesignLibrary = props => {
393429 designs = { displayDesigns }
394430 selectedDesigns = { selectedDesignIds }
395431 selectedDesignData = { selectedDesignData }
396- onSelectMulti = { ( designId , category , parsedBlocks , blocksForSubstitution , selectedPreviewSize ) => {
397- if ( selectedTab === 'pages' ) {
398- const selectedDesign = [ {
399- designId, category, designData : parsedBlocks , blocksForSubstitution, selectedPreviewSize,
400- } ]
401- addDesign ( selectedDesign )
402-
403- return
404- }
405-
406- const newSelectedDesigns = [ ...selectedDesignIds ]
407- // We also get the design data from displayDesigns
408- // already instead of after clicking the "Add
409- // Designs" button since displayDesigns can change
410- // when the user is switching tabs (block/ui
411- // kits/wireframes) and the data can be lost.
412- const newSelectedDesignData = [ ...selectedDesignData ]
413-
414- if ( newSelectedDesigns . includes ( designId ) ) {
415- const i = newSelectedDesigns . indexOf ( designId )
416- newSelectedDesigns . splice ( i , 1 )
417- setSelectedDesignIds ( newSelectedDesigns )
418- newSelectedDesignData . splice ( i , 1 )
419- setSelectedDesignData ( newSelectedDesignData )
420- } else {
421- newSelectedDesigns . push ( designId )
422- setSelectedDesignIds ( newSelectedDesigns )
423- newSelectedDesignData . push ( {
424- designId, category, designData : parsedBlocks , blocksForSubstitution, selectedPreviewSize,
425- } )
426- setSelectedDesignData ( newSelectedDesignData )
427- }
428- } }
432+ onSelectMulti = { onSelectDesign }
429433 />
430434
431435 { selectedTab === 'patterns' && < aside className = "ugb-modal-design-library__footer" >
0 commit comments