@@ -14,7 +14,9 @@ import {
1414} from '~stackable/components'
1515import { fetchSettings } from '~stackable/util'
1616import { i18n , isPro } from 'stackable'
17- import { omit , head } from 'lodash'
17+ import {
18+ omit , head , isEqual ,
19+ } from 'lodash'
1820
1921/**
2022 * WordPress dependencies
@@ -183,7 +185,17 @@ addFilter( 'stackable.global-settings.inspector', 'stackable/global-typography',
183185 }
184186
185187 const resetStyles = selector => {
186- const newSettings = omit ( typographySettings , [ selector ] )
188+ let newSettings
189+ const currentFontPair = [ ...FONT_PAIRS , ...customFontPairs ] . find ( fontPair => fontPair . name === selectedFontPairName )
190+ if ( ! editingFontPairName ) {
191+ newSettings = { ...typographySettings , [ selector ] : currentFontPair . typography [ selector ] }
192+ } else {
193+ newSettings = omit ( typographySettings , [ selector ] )
194+ const updatedCustomFontPairs = customFontPairs
195+ . map ( fontPair => fontPair . name === editingFontPairName ? { ...fontPair , typography : newSettings } : fontPair )
196+ updateCustomFontPairs ( updatedCustomFontPairs )
197+ }
198+
187199 doAction ( 'stackable.global-settings.typography-update-global-styles' , newSettings )
188200
189201 updateTypography ( newSettings )
@@ -197,6 +209,45 @@ addFilter( 'stackable.global-settings.inspector', 'stackable/global-typography',
197209 model . save ( )
198210 }
199211
212+ const getIsAllowReset = selector => {
213+ const currentFontPair = [ ...FONT_PAIRS , ...customFontPairs ] . find ( fontPair => fontPair . name === selectedFontPairName )
214+ const fontPairStyle = currentFontPair . typography [ selector ]
215+ const typographyStyle = typographySettings [ selector ]
216+ if ( ! editingFontPairName ) {
217+ if ( ! isEqual ( fontPairStyle , typographyStyle ) ) {
218+ return true
219+ }
220+ return false
221+ } else if ( typographyStyle && ( typographyStyle . fontFamily ||
222+ typographyStyle . fontSize || typographyStyle . tabletFontSize || typographyStyle . mobileFontSize ||
223+ typographyStyle . fontWeight ||
224+ typographyStyle . textTransform ||
225+ typographyStyle . lineHeight || typographyStyle . tabletLineHeight || typographyStyle . mobileLineHeight ||
226+ typographyStyle . letterSpacing || typographyStyle . tabletLetterSpacing || typographyStyle . mobileLetterSpacing ) ) {
227+ return true
228+ }
229+ return false
230+ }
231+
232+ const getIsChangeConfirmed = ( ) => {
233+ // No need to confirm when the current font pair is custom
234+ // since changes are saved
235+ if ( customFontPairs . find ( fontPair => fontPair . name === selectedFontPairName ) ) {
236+ return true
237+ }
238+
239+ const isDirty = TYPOGRAPHY_TAGS . some ( ( { selector } ) => {
240+ return getIsAllowReset ( selector )
241+ } )
242+
243+ if ( isDirty ) {
244+ // eslint-disable-next-line no-alert
245+ const confirmChange = window . confirm ( __ ( 'Changing font pair will override the previous changes. Do you want to proceed?' , i18n ) )
246+ return confirmChange
247+ }
248+ return true
249+ }
250+
200251 const CustomFontPairPickers = applyFilters (
201252 'stackable.global-settings.typography.font-pairs.customPicker' ,
202253 Fragment ,
@@ -255,6 +306,9 @@ addFilter( 'stackable.global-settings.inspector', 'stackable/global-typography',
255306 fontPair = { FONT_PAIRS [ 0 ] }
256307 isSelected = { selectedFontPairName === FONT_PAIRS [ 0 ] . name }
257308 onClick = { ( ) => {
309+ if ( ! getIsChangeConfirmed ( ) ) {
310+ return
311+ }
258312 updateSelectedFontPair ( FONT_PAIRS [ 0 ] . name )
259313 changeStyles ( FONT_PAIRS [ 0 ] . typography )
260314 } }
@@ -264,6 +318,9 @@ addFilter( 'stackable.global-settings.inspector', 'stackable/global-typography',
264318 customFontPairs = { customFontPairs }
265319 selected = { selectedFontPairName }
266320 onClick = { ( name , typography ) => {
321+ if ( ! getIsChangeConfirmed ( ) ) {
322+ return
323+ }
267324 updateSelectedFontPair ( name )
268325 changeStyles ( typography )
269326 } }
@@ -280,6 +337,9 @@ addFilter( 'stackable.global-settings.inspector', 'stackable/global-typography',
280337 fontPair = { fontPair }
281338 isSelected = { selectedFontPairName === fontPair . name }
282339 onClick = { ( ) => {
340+ if ( ! getIsChangeConfirmed ( ) ) {
341+ return
342+ }
283343 updateSelectedFontPair ( fontPair . name )
284344 changeStyles ( fontPair . typography )
285345 } }
@@ -316,6 +376,7 @@ addFilter( 'stackable.global-settings.inspector', 'stackable/global-typography',
316376 label = { label }
317377 selector = { selector }
318378 value = { ( typographySettings [ selector ] ) || { } }
379+ isAllowReset = { getIsAllowReset ( selector ) }
319380 onChange = { styles => changeStyles ( { [ selector ] : styles } ) }
320381 onReset = { ( ) => resetStyles ( selector ) }
321382 />
0 commit comments