Skip to content

Commit d5411ae

Browse files
committed
fix(slider): drop coerced prop for value
as it could break updates in listview/collectionview
1 parent b0b1f9c commit d5411ae

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

src/slider/slider.android.ts

+20-16
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@ export function sliderGetEnabledColorStateList(color: Color, alpha = 255) {
1313
}
1414
return getEnabledColorStateList(color.android, new Color(alpha, 158, 158, 158).android);
1515
}
16-
export const valueProperty = new CoercibleProperty<Slider, number>({
16+
export const valueProperty = new Property<Slider, number>({
1717
name: 'value',
1818
// defaultValue: 0,
19-
coerceValue: (target, value) => {
20-
if (target.minValue !== undefined && target.maxValue !== undefined) {
21-
value = Math.max(value, target.minValue);
22-
value = Math.min(value, target.maxValue);
23-
}
19+
// coerceValue: (target, value) => {
20+
// if (target.minValue !== undefined && target.maxValue !== undefined) {
21+
// value = Math.max(value, target.minValue);
22+
// value = Math.min(value, target.maxValue);
23+
// }
2424

25-
return value;
26-
},
25+
// return value;
26+
// },
2727
valueConverter: (v) => parseFloat(v)
2828
});
2929
/**
@@ -34,7 +34,7 @@ export const minValueProperty = new Property<Slider, number>({
3434
// defaultValue: 0,
3535
valueChanged: (target, oldValue, newValue) => {
3636
maxValueProperty.coerce(target);
37-
valueProperty.coerce(target);
37+
// valueProperty.coerce(target);
3838
},
3939
valueConverter: (v) => parseFloat(v)
4040
});
@@ -52,7 +52,7 @@ export const maxValueProperty = new CoercibleProperty<Slider, number>({
5252

5353
return value;
5454
},
55-
valueChanged: (target, oldValue, newValue) => valueProperty.coerce(target),
55+
// valueChanged: (target, oldValue, newValue) => valueProperty.coerce(target),
5656
valueConverter: (v) => parseFloat(v)
5757
});
5858
export class Slider extends View {
@@ -79,6 +79,8 @@ export class Slider extends View {
7979
}
8080
const result = new ASlider(this._context);
8181
result.setLabelBehavior(2); // com.google.android.material.slider.LabelFormatter.LABEL_GONE
82+
result.setValueFrom(DEFAULT_MIN);
83+
result.setValueTo(DEFAULT_MAX);
8284
return result;
8385
}
8486
initNativeView() {
@@ -91,8 +93,6 @@ export class Slider extends View {
9193
}
9294
}
9395
});
94-
nativeView.setValueFrom(this.minValue || DEFAULT_MIN);
95-
nativeView.setValueTo(this.maxValue || DEFAULT_MAX);
9696
nativeView.addOnChangeListener(this.listener);
9797
}
9898
disposeNativeView() {
@@ -149,10 +149,14 @@ export class Slider extends View {
149149
this.nativeViewProtected.setStepSize(value);
150150
}
151151
[valueProperty.setNative](value) {
152-
// ensure we set min/max to prevent errors in listviews while reusing cells
153-
// will sliders with different min/max
154-
this.nativeViewProtected.setValueFrom(this.minValue || DEFAULT_MIN);
155-
this.nativeViewProtected.setValueTo(this.maxValue || DEFAULT_MAX);
152+
// ensure we set min/max to prevent errors depending on the ordered or applied props
153+
// when reusing sliders with different min/max
154+
const min = this.minValue || DEFAULT_MIN;
155+
const max = this.maxValue || DEFAULT_MAX;
156+
this.nativeViewProtected.setValueFrom(min);
157+
this.nativeViewProtected.setValueTo(max);
158+
value = Math.max(value, min);
159+
value = Math.min(value, max);
156160
this.nativeViewProtected.setValue(value);
157161
}
158162
[minValueProperty.setNative](value) {

0 commit comments

Comments
 (0)