11import React , { Component } from 'react' ;
22import { StyleSheet , ScrollView } from 'react-native' ;
33import { Colors , View , Text , Icon , Slider , GradientSlider , ColorSliderGroup , Constants } from 'react-native-ui-lib' ;
4-
5- const INITIAL_VALUE = 0 ;
6- const COLOR = Colors . blue30 ;
4+ import { renderBooleanOption } from '../ExampleScreenPresenter' ;
75
86interface SliderScreenProps {
97 componentId : string ;
@@ -13,18 +11,28 @@ interface SliderScreenState {
1311 alpha : number ;
1412 color : string ;
1513 sliderValue : number ;
14+ sliderMinValue : number ;
15+ sliderMaxValue : number ;
16+ forceLTR : boolean ;
1617}
1718
19+ const INITIAL_VALUE = 0 ;
20+ const COLOR = Colors . blue30 ;
21+
1822export default class SliderScreen extends Component < SliderScreenProps , SliderScreenState > {
19- constructor ( props : SliderScreenProps ) {
20- super ( props ) ;
21-
22- this . state = {
23- alpha : 1 ,
24- color : COLOR ,
25- sliderValue : INITIAL_VALUE
26- } ;
27- }
23+ state = {
24+ alpha : 1 ,
25+ color : COLOR ,
26+ sliderValue : INITIAL_VALUE ,
27+ sliderMinValue : 0 ,
28+ sliderMaxValue : 100 ,
29+ forceLTR : false
30+ } ;
31+
32+ onSliderRangeChange = ( values : { min : number , max : number } ) => {
33+ const { min, max} = values ;
34+ this . setState ( { sliderMinValue : min , sliderMaxValue : max } ) ;
35+ } ;
2836
2937 onSliderValueChange = ( value : number ) => {
3038 this . setState ( { sliderValue : value } ) ;
@@ -38,17 +46,26 @@ export default class SliderScreen extends Component<SliderScreenProps, SliderScr
3846 console . warn ( 'onGroupValueChange: ' , value ) ;
3947 } ;
4048
49+ getReverseStyle = ( ) => {
50+ return Constants . isRTL && this . state . forceLTR && styles . ltr ;
51+ }
52+
4153 render ( ) {
42- const { color, alpha, sliderValue} = this . state ;
54+ const { color, alpha, sliderValue, sliderMinValue , sliderMaxValue , forceLTR } = this . state ;
4355
4456 return (
4557 < ScrollView showsVerticalScrollIndicator = { false } >
4658 < View flex padding-20 >
47- < Text titleHuge $textDefault marginB-20 >
59+ < Text text40 $textDefault marginB-20 >
4860 Sliders
4961 </ Text >
5062
51- < View row centerV style = { Constants . isRTL && styles . ltr } >
63+ { Constants . isRTL && renderBooleanOption . call ( this , 'Force LTR' , 'forceLTR' ) }
64+
65+ < Text $textDefault text70BO marginB-10 >
66+ Default slider
67+ </ Text >
68+ < View row centerV style = { this . getReverseStyle ( ) } >
5269 < Icon assetName = { 'search' } style = { styles . image } />
5370 < Slider
5471 onValueChange = { this . onSliderValueChange }
@@ -57,14 +74,14 @@ export default class SliderScreen extends Component<SliderScreenProps, SliderScr
5774 maximumValue = { 100 }
5875 step = { 1 }
5976 containerStyle = { styles . sliderContainer }
60- disableRTL
77+ disableRTL = { forceLTR }
6178 />
62- < Text bodySmall $textNeutral style = { styles . text } >
63- { sliderValue } %
79+ < Text bodySmall $textNeutral style = { styles . text } numberOfLines = { 1 } >
80+ $ { sliderValue }
6481 </ Text >
6582 </ View >
6683
67- < Text $textDefault marginT-30 >
84+ < Text $textDefault text70BO marginT-30 >
6885 Negatives
6986 </ Text >
7087 < Slider
@@ -84,12 +101,12 @@ export default class SliderScreen extends Component<SliderScreenProps, SliderScr
84101 containerStyle = { styles . slider }
85102 />
86103
87- < Text $textDefault marginT-20 >
104+ < Text $textDefault text70BO marginT-20 >
88105 Disabled
89106 </ Text >
90107 < Slider minimumValue = { 100 } maximumValue = { 200 } value = { 120 } containerStyle = { styles . slider } disabled />
91108
92- < Text $textDefault marginT-15 >
109+ < Text $textDefault text70BO marginT-15 >
93110 Custom with Steps
94111 </ Text >
95112 < Slider
@@ -106,7 +123,28 @@ export default class SliderScreen extends Component<SliderScreenProps, SliderScr
106123 maximumTrackTintColor = { Colors . violet70 }
107124 />
108125
109- < Text $textDefault marginT-15 >
126+ < Text $textDefault text70BO marginV-15 >
127+ Range slider
128+ </ Text >
129+ < View row spread style = { this . getReverseStyle ( ) } >
130+ < Text bodySmall $textNeutral >
131+ min. { sliderMinValue } %
132+ </ Text >
133+ < Text bodySmall $textNeutral >
134+ max. { sliderMaxValue } %
135+ </ Text >
136+ </ View >
137+ < Slider
138+ useRange
139+ onRangeChange = { this . onSliderRangeChange }
140+ value = { INITIAL_VALUE }
141+ minimumValue = { 0 }
142+ maximumValue = { 100 }
143+ step = { 1 }
144+ disableRTL = { forceLTR }
145+ />
146+
147+ < Text $textDefault text70BO marginT-15 >
110148 Gradient Sliders
111149 </ Text >
112150 < View row centerV >
@@ -137,7 +175,7 @@ export default class SliderScreen extends Component<SliderScreenProps, SliderScr
137175 </ View >
138176 </ View >
139177
140- < Text $textDefault marginT-25 marginB-20 >
178+ < Text $textDefault text70BO marginV-15 >
141179 Color Slider Group
142180 </ Text >
143181 < ColorSliderGroup
@@ -189,7 +227,9 @@ const styles = StyleSheet.create({
189227 activeThumb : {
190228 width : 40 ,
191229 height : 40 ,
192- borderRadius : 20
230+ borderRadius : 20 ,
231+ borderColor : Colors . yellow30 ,
232+ borderWidth : 2
193233 } ,
194234 box : {
195235 width : 20 ,
0 commit comments