Skip to content

Commit 045f6a0

Browse files
committed
fix: separate none and custom, fix issue with setting to none
1 parent cd1cbc1 commit 045f6a0

File tree

1 file changed

+97
-46
lines changed
  • src/plugins/global-settings/typography

1 file changed

+97
-46
lines changed

src/plugins/global-settings/typography/index.js

Lines changed: 97 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ import { fetchSettings, getDefaultFontSize } from '~stackable/util'
1616
import {
1717
i18n, isPro, showProNotice,
1818
} from 'stackable'
19-
import { head, isEqual } from 'lodash'
19+
import {
20+
head, isEqual, cloneDeep,
21+
} from 'lodash'
2022

2123
/**
2224
* WordPress dependencies
@@ -93,15 +95,47 @@ const TYPOGRAPHY_TAGS = [
9395
]
9496

9597
const TYPE_SCALE = [
96-
{ label: __( 'None / Custom', i18n ), value: 1 },
97-
{ label: __( '1.067 - Minor Second', i18n ), value: 1.067 },
98-
{ label: __( '1.125 - Major Second', i18n ), value: 1.125 },
99-
{ label: __( '1.200 - Minor Third', i18n ), value: 1.2 },
100-
{ label: __( '1.250 - Major Third', i18n ), value: 1.25 },
101-
{ label: __( '1.333 - Perfect Fourth', i18n ), value: 1.333 },
102-
{ label: __( '1.414 - Augmented Fourth', i18n ), value: 1.414 },
103-
{ label: __( '1.500 - Perfect Fifth', i18n ), value: 1.5 },
104-
{ label: __( '1.618 - Golden Ratio', i18n ), value: 1.618 },
98+
{
99+
label: __( 'None', i18n ),
100+
value: 'none',
101+
},
102+
{
103+
label: __( 'Custom', i18n ),
104+
value: 'custom',
105+
disabled: true,
106+
},
107+
{
108+
label: __( '1.067 - Minor Second', i18n ),
109+
value: '1.067',
110+
},
111+
{
112+
label: __( '1.125 - Major Second', i18n ),
113+
value: '1.125',
114+
},
115+
{
116+
label: __( '1.200 - Minor Third', i18n ),
117+
value: '1.2',
118+
},
119+
{
120+
label: __( '1.250 - Major Third', i18n ),
121+
value: '1.25',
122+
},
123+
{
124+
label: __( '1.333 - Perfect Fourth', i18n ),
125+
value: '1.333',
126+
},
127+
{
128+
label: __( '1.414 - Augmented Fourth', i18n ),
129+
value: '1.414',
130+
},
131+
{
132+
label: __( '1.500 - Perfect Fifth', i18n ),
133+
value: '1.5',
134+
},
135+
{
136+
label: __( '1.618 - Golden Ratio', i18n ),
137+
value: '1.618',
138+
},
105139
]
106140

107141
let saveTypographyThrottle = null
@@ -124,7 +158,7 @@ addFilter( 'stackable.global-settings.inspector', 'stackable/global-typography',
124158
const [ customFontPairs, setCustomFontPairs ] = useState( [] )
125159
const [ selectedFontPairName, setSelectedFontPairName ] = useState( '' )
126160
const [ isEditingFontPair, setIsEditingFontPair ] = useState( false )
127-
const [ selectedTypeScale, setSelectedTypeScale ] = useState( 1 )
161+
const [ selectedTypeScale, setSelectedTypeScale ] = useState( 'none' )
128162

129163
const fontPairContainerRef = useRef( null )
130164

@@ -135,22 +169,19 @@ addFilter( 'stackable.global-settings.inspector', 'stackable/global-typography',
135169
setTypographySettings( _typographySettings )
136170
setApplySettingsTo( response.stackable_global_typography_apply_to || 'blocks-stackable-native' )
137171
setCustomFontPairs( response.stackable_custom_font_pairs || [] )
138-
setSelectedFontPairName( response.stackable_selected_font_pair || '' )
172+
setSelectedFontPairName( response.stackable_selected_font_pair || 'theme-heading-default/theme-body-default' )
139173

140174
// Reversely compute the type scale from the font sizes
141-
// Check first if the units are rem
142-
if ( Object.values( _typographySettings ).every( setting => setting.fontSizeUnit === 'rem' ) ) {
143-
let typeScale = _typographySettings?.h6?.fontSize
144-
const computedApplied = getAppliedTypeScale( typeScale )
145-
175+
let typeScale = _typographySettings?.h6?.fontSize
176+
if ( typeScale ) {
177+
const computedApplied = getAppliedTypeScale( typeScale ) ?? {}
146178
const tags = Object.keys( _typographySettings )
147179
for ( const tag of tags ) {
148-
// If font size mismatch, set typography scale to None / Custom
149-
if ( _typographySettings[ tag ].fontSize !== computedApplied[ tag ].fontSize ) {
150-
typeScale = 1
180+
// If font size mismatch, set typography scale to Custom
181+
if ( _typographySettings[ tag ]?.fontSize !== computedApplied[ tag ]?.fontSize ) {
182+
typeScale = 'custom'
151183
}
152184
}
153-
154185
setSelectedTypeScale( typeScale )
155186
}
156187
} )
@@ -225,18 +256,23 @@ addFilter( 'stackable.global-settings.inspector', 'stackable/global-typography',
225256
return [ ...FONT_PAIRS, ...customFontPairs ].find( fontPair => fontPair.name === selectedFontPairName )
226257
}
227258

228-
const getAppliedTypeScale = typeScale => ( {
229-
h1: { fontSize: Number( Math.pow( typeScale, 6 ).toFixed( 3 ) ), fontSizeUnit: 'rem' },
230-
h2: { fontSize: Number( Math.pow( typeScale, 5 ).toFixed( 3 ) ), fontSizeUnit: 'rem' },
231-
h3: { fontSize: Number( Math.pow( typeScale, 4 ).toFixed( 3 ) ), fontSizeUnit: 'rem' },
232-
h4: { fontSize: Number( Math.pow( typeScale, 3 ).toFixed( 3 ) ), fontSizeUnit: 'rem' },
233-
h5: { fontSize: Number( Math.pow( typeScale, 2 ).toFixed( 3 ) ), fontSizeUnit: 'rem' },
234-
h6: { fontSize: Number( typeScale.toFixed( 3 ) ), fontSizeUnit: 'rem' },
235-
p: { fontSize: 1, fontSizeUnit: 'rem' },
236-
'.stk-subtitle': { fontSize: Number( ( 1 / typeScale ).toFixed( 3 ) ), fontSizeUnit: 'rem' },
237-
'.stk-button__inner-text': { fontSize: 1, fontSizeUnit: 'rem' },
238-
239-
} )
259+
const getAppliedTypeScale = value => {
260+
const typeScale = Number( value )
261+
if ( Number.isNaN( typeScale ) ) {
262+
return
263+
}
264+
return {
265+
h1: { fontSize: Number( Math.pow( typeScale, 6 ).toFixed( 3 ) ), fontSizeUnit: 'rem' },
266+
h2: { fontSize: Number( Math.pow( typeScale, 5 ).toFixed( 3 ) ), fontSizeUnit: 'rem' },
267+
h3: { fontSize: Number( Math.pow( typeScale, 4 ).toFixed( 3 ) ), fontSizeUnit: 'rem' },
268+
h4: { fontSize: Number( Math.pow( typeScale, 3 ).toFixed( 3 ) ), fontSizeUnit: 'rem' },
269+
h5: { fontSize: Number( Math.pow( typeScale, 2 ).toFixed( 3 ) ), fontSizeUnit: 'rem' },
270+
h6: { fontSize: Number( typeScale.toFixed( 3 ) ), fontSizeUnit: 'rem' },
271+
p: { fontSize: 1, fontSizeUnit: 'rem' },
272+
'.stk-subtitle': { fontSize: Number( ( 1 / typeScale ).toFixed( 3 ) ), fontSizeUnit: 'rem' },
273+
'.stk-button__inner-text': { fontSize: 1, fontSizeUnit: 'rem' },
274+
}
275+
}
240276

241277
const updateTypography = newSettings => {
242278
setTypographySettings( newSettings )
@@ -283,21 +319,31 @@ addFilter( 'stackable.global-settings.inspector', 'stackable/global-typography',
283319
}
284320

285321
const updateTypeScale = value => {
286-
const typeScale = Number( value )
287-
if ( isNaN( typeScale ) ) {
322+
setSelectedTypeScale( value )
323+
324+
// If value is custom, do not do anything
325+
if ( value === 'custom ' ) {
288326
return
289327
}
290328

291-
setSelectedTypeScale( typeScale )
292-
293-
// Only update the typography settings if not None/Custom
294-
if ( typeScale !== 1 ) {
295-
const newSettings = getAppliedTypeScale( typeScale )
329+
// If value is none, reset the font sizes and units
330+
if ( value === 'none' ) {
331+
const selectors = TYPOGRAPHY_TAGS.map( tag => tag.selector )
332+
const newSettings = selectors.reduce( ( acc, selector, ) => {
333+
acc[ selector ] = { fontSize: '', fontSizeUnit: '' }
334+
return acc
335+
}, {} )
296336
changeStyles( newSettings )
337+
return
297338
}
339+
340+
// If value is valid type scale, apply to the styles
341+
const newSettings = getAppliedTypeScale( value )
342+
changeStyles( newSettings )
298343
}
299344

300-
const changeStyles = typography => {
345+
const changeStyles = _typography => {
346+
const typography = cloneDeep( _typography )
301347
const newSettings = { ...typographySettings }
302348

303349
Object.entries( typography ).forEach( ( [ selector, styles ] ) => {
@@ -497,7 +543,7 @@ addFilter( 'stackable.global-settings.inspector', 'stackable/global-typography',
497543
options={ TYPE_SCALE }
498544
value={ selectedTypeScale }
499545
onChange={ updateTypeScale }
500-
default={ 1 }
546+
default="none"
501547
/>
502548
{ TYPOGRAPHY_TAGS.map( ( {
503549
label, selector, help,
@@ -513,13 +559,18 @@ addFilter( 'stackable.global-settings.inspector', 'stackable/global-typography',
513559
isAllowReset={ getIsAllowReset( selector ) }
514560
onChange={ styles => {
515561
changeStyles( { [ selector ]: styles } )
516-
// Also set the typescale to None/Custom
517-
setSelectedTypeScale( 1 )
562+
// Set typeScale to custom when editing font size or units
563+
if ( 'fontSize' in styles || 'fontSizeUnit' in styles ) {
564+
setSelectedTypeScale( 'custom' )
565+
}
518566
} }
519567
onReset={ () => {
520568
resetStyles( selector )
521-
// Also set the typescale to None/Custom
522-
setSelectedTypeScale( 1 )
569+
// Set typeScale to custom when editing font size or units
570+
const styles = typographySettings[ selector ]
571+
if ( 'fontSize' in styles || 'fontSizeUnit' in styles ) {
572+
setSelectedTypeScale( 'custom' )
573+
}
523574
} }
524575
/>
525576
)

0 commit comments

Comments
 (0)