Skip to content

Commit d8a2699

Browse files
committed
fix: update markmode when changing device type
1 parent d45d9cd commit d8a2699

File tree

2 files changed

+51
-38
lines changed

2 files changed

+51
-38
lines changed

src/components/advanced-range-control/index.js

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ import { settings as stackableSettings } from 'stackable'
2323
/**
2424
* WordPress dependencies
2525
*/
26-
import { memo, useState } from '@wordpress/element'
26+
import {
27+
memo, useState, useEffect,
28+
} from '@wordpress/element'
2729
import { Button } from '@wordpress/components'
2830
import { settings } from '@wordpress/icons'
2931
import { dispatch } from '@wordpress/data'
@@ -112,18 +114,23 @@ const AdvancedRangeControl = props => {
112114
// Is value at first render the same as a step value? If so, do mark mode
113115
// at the start, or show custom
114116
// If no initial value, use the given default from the settings
115-
let isMarkValue = !! props.marks && isMarkModeDefault
116-
if ( props.marks && derivedValue ) {
117+
const [ isMarkMode, setIsMarkMode ] = useState( false )
118+
119+
// Set the markMode when at first render and when device type changes
120+
useEffect( () => {
121+
let isMarkValue = !! props.marks && isMarkModeDefault
122+
if ( props.marks && derivedValue ) {
117123
// Check if the current value exists in the marks only by their CSS variable name
118124
// to match in case the fallback size changes.
119-
const derivedValueCssVarName = getCSSVarName( derivedValue )
120-
const matchedMark = props.marks.find( mark => getCSSVarName( mark.value ) === derivedValueCssVarName )
121-
isMarkValue = !! matchedMark
122-
if ( matchedMark ) {
123-
derivedValue = matchedMark.value
125+
const derivedValueCssVarName = getCSSVarName( derivedValue )
126+
const matchedMark = props.marks.find( mark => getCSSVarName( mark.value ) === derivedValueCssVarName )
127+
isMarkValue = !! matchedMark
128+
if ( matchedMark ) {
129+
derivedValue = matchedMark.value
130+
}
124131
}
125-
}
126-
const [ isMarkMode, setIsMarkMode ] = useState( isMarkValue )
132+
setIsMarkMode( isMarkValue )
133+
}, [ deviceType ] )
127134

128135
// If this supports dynamic content, the value should be saved as a String.
129136
// Similar if using marks to accomodate CSS variable

src/components/four-range-control/index.js

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { useControlHandlers } from '../base-control2/hooks'
2525
import { Tooltip } from '@wordpress/components'
2626
import { __ } from '@wordpress/i18n'
2727
import {
28-
Fragment, useState, memo,
28+
Fragment, useState, memo, useEffect,
2929
} from '@wordpress/element'
3030
import { settings } from '@wordpress/icons'
3131
import { dispatch } from '@wordpress/data'
@@ -187,36 +187,42 @@ const FourRangeControl = memo( props => {
187187
: props.enableBottom ? { desktop: _valueDesktop?.bottom, tablet: _valueTablet?.bottom }
188188
: { desktop: _valueDesktop?.left, tablet: _valueTablet?.left }
189189

190-
// Is value at first render the same as a step value? If so, do mark mode
191-
// at the start, or show custom
192-
// If no initial value, use the given default from the settings
193-
const isMarkValue = {
194-
first: !! props.marks && isMarkModeDefault,
195-
top: !! props.marks && isMarkModeDefault,
196-
right: !! props.marks && isMarkModeDefault,
197-
bottom: !! props.marks && isMarkModeDefault,
198-
left: !! props.marks && isMarkModeDefault,
199-
}
200-
if ( props.marks && firstValue ) {
201-
// Check if the current value exists in the marks only by their CSS variable name
202-
// to match in case the fallback size changes.
203-
const firstValueCssVarName = getCSSVarName( firstValue )
204-
const firstMatchedMark = props.marks.find( mark => getCSSVarName( mark.value ) === firstValueCssVarName )
205-
isMarkValue.first = !! firstMatchedMark
206-
if ( firstMatchedMark ) {
207-
firstValue = firstMatchedMark.value
190+
const [ isFourMarkMode, setIsFourMarkMode ] = useState( false )
191+
192+
// Set the markMode when at first render and when device type changes
193+
useEffect( () => {
194+
// Is value at first render the same as a step value? If so, do mark mode
195+
// at the start, or show custom
196+
// If no initial value, use the given default from the settings
197+
const isMarkValue = {
198+
first: !! props.marks && isMarkModeDefault,
199+
top: !! props.marks && isMarkModeDefault,
200+
right: !! props.marks && isMarkModeDefault,
201+
bottom: !! props.marks && isMarkModeDefault,
202+
left: !! props.marks && isMarkModeDefault,
208203
}
209204

210-
[ 'top', 'right', 'bottom', 'left' ].forEach( side => {
211-
const sideCssVarName = getCSSVarName( value[ side ] )
212-
const matchedMark = props.marks.find( mark => getCSSVarName( mark.value ) === sideCssVarName )
213-
isMarkValue[ side ] = !! matchedMark
214-
if ( matchedMark ) {
215-
value[ side ] = matchedMark.value
205+
if ( props.marks && firstValue ) {
206+
// Check if the current value exists in the marks only by their CSS variable name
207+
// to match in case the fallback size changes.
208+
const firstValueCssVarName = getCSSVarName( firstValue )
209+
const firstMatchedMark = props.marks.find( mark => getCSSVarName( mark.value ) === firstValueCssVarName )
210+
isMarkValue.first = !! firstMatchedMark
211+
if ( firstMatchedMark ) {
212+
firstValue = firstMatchedMark.value
216213
}
217-
} )
218-
}
219-
const [ isFourMarkMode, setIsFourMarkMode ] = useState( isMarkValue )
214+
215+
[ 'top', 'right', 'bottom', 'left' ].forEach( side => {
216+
const sideCssVarName = getCSSVarName( value[ side ] )
217+
const matchedMark = props.marks.find( mark => getCSSVarName( mark.value ) === sideCssVarName )
218+
isMarkValue[ side ] = !! matchedMark
219+
if ( matchedMark ) {
220+
value[ side ] = matchedMark.value
221+
}
222+
} )
223+
setIsFourMarkMode( isMarkValue )
224+
}
225+
}, [ deviceType ] )
220226

221227
const onChangeAll = _newValue => {
222228
const newValue = props.marks ? String( _newValue ) : _newValue

0 commit comments

Comments
 (0)