unicorn-demo-app 7.0.2 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unicorn-demo-app",
3
- "version": "7.0.2",
3
+ "version": "7.1.0",
4
4
  "main": "src/index.js",
5
5
  "author": "Ethan Sharabi <ethan.shar@gmail.com>",
6
6
  "license": "MIT",
@@ -69,6 +69,7 @@ export const navigationData = {
69
69
  },
70
70
  {title: 'Stepper', tags: 'stepper form', screen: 'unicorn.components.StepperScreen'},
71
71
  {title: 'Slider', tags: 'slider', screen: 'unicorn.components.SliderScreen'},
72
+ {title: 'Slider (Incubator)', tags: 'slider', screen: 'unicorn.components.IncubatorSliderScreen'},
72
73
  {title: 'Switch', tags: 'switch toggle', screen: 'unicorn.components.SwitchScreen'},
73
74
  {title: 'Masked Inputs', tags: 'text input form mask', screen: 'unicorn.components.MaskedInputScreen'},
74
75
  {
@@ -1,4 +1,3 @@
1
- import _ from 'lodash';
2
1
  import React, {Component} from 'react';
3
2
  import {StyleSheet} from 'react-native';
4
3
  import {View, Text, Card, TextField, Button} from 'react-native-ui-lib'; //eslint-disable-line
@@ -8,7 +7,7 @@ export default class PlaygroundScreen extends Component {
8
7
  return (
9
8
  <View bg-grey80 flex padding-20>
10
9
  <View marginT-20>
11
- <TextField migrate placeholder="Placeholder" />
10
+ <TextField migrate placeholder="Placeholder"/>
12
11
  </View>
13
12
  <Card height={100} center padding-20>
14
13
  <Text text50>Playground Screen</Text>
@@ -22,5 +21,5 @@ export default class PlaygroundScreen extends Component {
22
21
  }
23
22
 
24
23
  const styles = StyleSheet.create({
25
- container: {},
24
+ container: {}
26
25
  });
@@ -0,0 +1,221 @@
1
+ import React, {useState, useRef, useCallback} from 'react';
2
+ import {StyleSheet, ScrollView} from 'react-native';
3
+ import {Constants, Colors, View, Text, Button, Incubator} from 'react-native-ui-lib'; //eslint-disable-line
4
+ import {renderBooleanOption} from '../ExampleScreenPresenter';
5
+
6
+ const VALUE = 20;
7
+ const NEGATIVE_VALUE = -30;
8
+ const MIN = 0;
9
+ const MAX = 100;
10
+ const INITIAL_MIN = 10;
11
+ const INITIAL_MAX = 70;
12
+
13
+ const IncubatorSliderScreen = () => {
14
+ const [disableRTL, setDisableRTL] = useState<boolean>(false);
15
+
16
+ const [sliderValue, setSliderValue] = useState(0);
17
+ const [customSliderValue, setCustomSliderValue] = useState(VALUE);
18
+ const [negativeSliderValue, setNegativeSliderValue] = useState(NEGATIVE_VALUE);
19
+ const [sliderMinValue, setSliderMinValue] = useState(INITIAL_MIN);
20
+ const [sliderMaxValue, setSliderMaxValue] = useState(INITIAL_MAX);
21
+
22
+ const slider = useRef<typeof Incubator.Slider>();
23
+ const customSlider = useRef<typeof Incubator.Slider>();
24
+ const negativeSlider = useRef<typeof Incubator.Slider>();
25
+ const rangeSlider = useRef<typeof Incubator.Slider>();
26
+
27
+ const resetSliders = useCallback(() => {
28
+ slider.current?.reset();
29
+ customSlider.current?.reset();
30
+ rangeSlider.current?.reset();
31
+ negativeSlider.current?.reset();
32
+ }, []);
33
+
34
+ const onValueChange = useCallback((value: number) => {
35
+ setSliderValue(value);
36
+ }, []);
37
+
38
+ const onCustomValueChange = useCallback((value: number) => {
39
+ setCustomSliderValue(value);
40
+ }, []);
41
+
42
+ const onNegativeValueChange = useCallback((value: number) => {
43
+ setNegativeSliderValue(value);
44
+ }, []);
45
+
46
+ const onRangeChange = useCallback((value: {min: number; max: number}) => {
47
+ setSliderMaxValue(value.max);
48
+ setSliderMinValue(value.min);
49
+ }, []);
50
+
51
+ const renderValuesBox = (min: number, max?: number) => {
52
+ if (max !== undefined) {
53
+ return (
54
+ <View row spread marginB-20>
55
+ <Text bodySmall $textNeutral>
56
+ min. {min}
57
+ </Text>
58
+ <Text bodySmall $textNeutral>
59
+ max. {max}
60
+ </Text>
61
+ </View>
62
+ );
63
+ } else {
64
+ return (
65
+ <View center marginB-20>
66
+ <Text bodySmall $textNeutral>
67
+ value: {min}
68
+ </Text>
69
+ </View>
70
+ );
71
+ }
72
+ };
73
+
74
+ const renderDefaultSliderExample = () => {
75
+ return (
76
+ <View>
77
+ <Text margin-10 text70BL $textDefault>
78
+ Default Slider values 0 to 1
79
+ </Text>
80
+ {renderValuesBox(sliderValue)}
81
+ <Incubator.Slider
82
+ ref={slider}
83
+ onValueChange={onValueChange}
84
+ containerStyle={styles.container}
85
+ disableRTL={disableRTL}
86
+ // maximumValue={0}
87
+ // maximumValue={50}
88
+ step={0.1}
89
+ />
90
+ </View>
91
+ );
92
+ };
93
+
94
+ const renderDisabledSliderExample = () => {
95
+ return (
96
+ <View marginT-20>
97
+ <Text margin-10 text70BL $textDefault>
98
+ Disabled Slider
99
+ </Text>
100
+ <Incubator.Slider value={0.4} containerStyle={styles.container} disableRTL={disableRTL} disabled/>
101
+ </View>
102
+ );
103
+ };
104
+
105
+ const renderCustomSliderExample = () => {
106
+ return (
107
+ <View marginT-20 marginH-40>
108
+ <Text margin-10 text70BL $textDefault>
109
+ Custom Slider
110
+ </Text>
111
+ {renderValuesBox(customSliderValue)}
112
+ <Incubator.Slider
113
+ ref={customSlider}
114
+ onValueChange={onCustomValueChange}
115
+ value={20}
116
+ minimumValue={0}
117
+ maximumValue={100}
118
+ containerStyle={styles.container}
119
+ trackStyle={styles.customTrack}
120
+ minimumTrackTintColor={Colors.grey30}
121
+ maximumTrackTintColor={Colors.grey70}
122
+ // thumbTintColor={Colors.orange30}
123
+ thumbStyle={styles.customThumb}
124
+ activeThumbStyle={styles.customActiveThumb}
125
+ disableRTL={disableRTL}
126
+ // disableActiveStyling
127
+ />
128
+ </View>
129
+ );
130
+ };
131
+
132
+ const renderNegativeSliderExample = () => {
133
+ return (
134
+ <View marginT-20>
135
+ <Text margin-10 text70BL $textDefault>
136
+ Negative values -20 to -100 initial -30
137
+ </Text>
138
+ {renderValuesBox(negativeSliderValue)}
139
+ <Incubator.Slider
140
+ ref={negativeSlider}
141
+ onValueChange={onNegativeValueChange}
142
+ value={-30}
143
+ minimumValue={-100}
144
+ maximumValue={-20}
145
+ // step={10}
146
+ containerStyle={styles.container}
147
+ disableRTL={disableRTL}
148
+ />
149
+ </View>
150
+ );
151
+ };
152
+
153
+ const renderRangeSliderExample = () => {
154
+ return (
155
+ <View marginT-20>
156
+ <Text margin-10 text70BL $textDefault>
157
+ Range Slider values 0 to 100
158
+ </Text>
159
+ <View marginH-20>
160
+ {renderValuesBox(sliderMinValue, sliderMaxValue)}
161
+ <Incubator.Slider
162
+ ref={rangeSlider}
163
+ useRange
164
+ useGap
165
+ onRangeChange={onRangeChange}
166
+ minimumValue={MIN}
167
+ maximumValue={MAX}
168
+ initialMinimumValue={INITIAL_MIN}
169
+ initialMaximumValue={INITIAL_MAX}
170
+ step={1}
171
+ disableRTL={disableRTL}
172
+ />
173
+ </View>
174
+ </View>
175
+ );
176
+ };
177
+
178
+ return (
179
+ <ScrollView showsVerticalScrollIndicator={false} style={{backgroundColor: Colors.$backgroundDefault}}>
180
+ <View row spread margin-20>
181
+ <Text h1 $textDefault>
182
+ Slider
183
+ </Text>
184
+ <Button link label="Reset Sliders" onPress={resetSliders}/>
185
+ </View>
186
+ <View marginL-20>
187
+ {Constants.isRTL &&
188
+ renderBooleanOption('Disable RTL', 'disableRTL', {spread: false, state: disableRTL, setState: setDisableRTL})}
189
+ </View>
190
+ {renderDefaultSliderExample()}
191
+ {renderDisabledSliderExample()}
192
+ {renderCustomSliderExample()}
193
+ {renderNegativeSliderExample()}
194
+ {renderRangeSliderExample()}
195
+ </ScrollView>
196
+ );
197
+ };
198
+
199
+ export default IncubatorSliderScreen;
200
+
201
+ const styles = StyleSheet.create({
202
+ container: {
203
+ marginHorizontal: 20
204
+ },
205
+ customTrack: {
206
+ borderRadius: 1.5,
207
+ height: 3
208
+ },
209
+ customThumb: {
210
+ width: 14,
211
+ height: 14,
212
+ borderRadius: 7,
213
+ backgroundColor: Colors.black,
214
+ borderColor: Colors.black
215
+ },
216
+ customActiveThumb: {
217
+ backgroundColor: Colors.red30,
218
+ borderWidth: 2,
219
+ borderColor: Colors.red70
220
+ }
221
+ });
@@ -8,4 +8,5 @@ export function registerScreens(registrar) {
8
8
  registrar('unicorn.components.IncubatorExpandableOverlayScreen', () => require('./IncubatorExpandableOverlayScreen').default);
9
9
  registrar('unicorn.components.IncubatorToastScreen', () => require('./IncubatorToastScreen').default);
10
10
  registrar('unicorn.incubator.PanViewScreen', () => require('./PanViewScreen').default);
11
+ registrar('unicorn.components.IncubatorSliderScreen', () => gestureHandlerRootHOC(require('./IncubatorSliderScreen').default));
11
12
  }