react-native-slider icon indicating copy to clipboard operation
react-native-slider copied to clipboard

Sliders with a Negative Min and Max Values are assigned '0' as Max value

Open mcampbellxperi opened this issue 3 years ago • 5 comments

Environment

info Fetching system and libraries information... System: OS: Windows 10 10.0.19044 CPU: (16) x64 Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz Memory: 19.72 GB / 31.78 GB Binaries: Node: 14.17.4 - C:\Program Files\nodejs\node.EXE Yarn: 1.22.5 - C:\Program Files (x86)\Yarn\bin\yarn.CMD npm: 6.14.14 - C:\Program Files\nodejs\npm.CMD Watchman: Not Found SDKs: Android SDK: Not Found Windows SDK: AllowDevelopmentWithoutDevLicense: Enabled AllowAllTrustedApps: Enabled Versions: 10.0.18362.0, 10.0.19041.0 IDEs: Android Studio: Not Found Visual Studio: 16.11.31605.320 (Visual Studio Professional 2019) Languages: Java: Not Found npmPackages: @react-native-community/cli: Not Found react: 18.0.0 => 18.0.0 react-native: 0.69.0 => 0.69.0 react-native-windows: 0.69.5 => 0.69.5 npmGlobalPackages: react-native: Not Found

Description

I'm working on a React Native Windows project running the latest version of "@react-native-community/slider": "^4.3.0". We don't support iOS or Android so I can't replicate for those platforms.

We have some sliders that work with wholey negative ranges, an example being (-102, -86).

When initally rendered, the slider has a range of (-102, 0), instead of the given range (-102, -86).

In development mode I can change the max value and the range will render correctly, so this seems to be an issue with the inital render.

See below video:

https://user-images.githubusercontent.com/90039954/184871247-697ec5ef-1997-4042-a365-42844eaffbec.mp4

Reproducible Demo

import Slider from '@react-native-community/slider';
import React, { useState } from 'react';
import {
  SafeAreaView,
  Text,
} from 'react-native';

const App = () => {
  const [valueText, setValueText] = useState(-86)

  return (
    <SafeAreaView style={{flexDirection:'row', justifyContent: 'center'}}>
      <Slider
        minimumValue={-102}
        maximumValue={-86}
        value={-86}
        style={{width: 300, height:100}}
        onValueChange={setValueText}
      />
      <Text>{valueText}</Text>

    </SafeAreaView>
  );
};

export default App;

mcampbellxperi avatar Aug 16 '22 11:08 mcampbellxperi

Well reported, thank you, @mcampbellxperi! I will work on this.

BartoszKlonowski avatar Aug 16 '22 13:08 BartoszKlonowski

@mcampbellxperi Yes, this is an issue with the initial render only, however this is a known bug on the WinRT side, which states that when maximum value is set after the minimum value the maximum value set will be ignored and forced to be 0. More about that can be found in WinRT docs page: Binding Minimum and Maximum values.

I will try to do something about it, or try to consult with other teams about some solutions, sorry for inconvenience and thank you for your patience.

BartoszKlonowski avatar Aug 18 '22 22:08 BartoszKlonowski

@BartoszKlonowski Thank you for the update, interesting read from the WinRT docs.

In the meantime I might try and hook in a useEffect into my Slider wrapper component that performs the post render fix that I demonstrated in the example. It should keep me moving while we wait for a fix.

Thank you for your hard work!

mcampbellxperi avatar Aug 19 '22 08:08 mcampbellxperi