@momo-kits/stepper 0.0.14 → 0.0.18-beta-1

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.
Files changed (2) hide show
  1. package/Stepper.js +272 -236
  2. package/package.json +1 -1
package/Stepper.js CHANGED
@@ -1,278 +1,314 @@
1
- import React, { Component } from 'react';
2
- import {
3
- View, StyleSheet, TextInput
4
- } from 'react-native';
1
+ import React, {Component} from 'react';
2
+ import {View, StyleSheet, TextInput} from 'react-native';
5
3
  import PropTypes from 'prop-types';
6
- import {
7
- Text, Colors, Image, TouchableOpacity
8
- } from '@momo-kits/core';
4
+ import {Text, Colors, Image, TouchableOpacity} from '@momo-kits/core';
9
5
 
10
- const minus = 'https://img.mservice.io/momo_app_v2/new_version/img/appx_icon/24_navigation_minus_circle.png';
11
- const plus = 'https://img.mservice.io/momo_app_v2/new_version/img/appx_icon/24_navigation_plus_circle.png';
6
+ const minus =
7
+ 'https://img.mservice.io/momo_app_v2/new_version/img/appx_icon/24_navigation_minus_circle.png';
8
+ const plus =
9
+ 'https://img.mservice.io/momo_app_v2/new_version/img/appx_icon/24_navigation_plus_circle.png';
12
10
 
13
11
  const styles = StyleSheet.create({
14
- container: {
15
- flexDirection: 'row',
16
- },
17
- icon: {
18
- height: 24,
12
+ container: {
13
+ flexDirection: 'row',
14
+ },
15
+ icon: {
16
+ height: 24,
17
+ width: 24,
18
+ resizeMode: 'contain',
19
+ tintColor: Colors.pink_03,
20
+ },
21
+ text: {
22
+ color: Colors.black_17,
23
+ },
24
+ numberBox: {
25
+ justifyContent: 'center',
26
+ alignItems: 'center',
27
+ marginHorizontal: 6,
28
+ backgroundColor: Colors.white,
29
+ },
30
+ button: {
31
+ justifyContent: 'center',
32
+ alignItems: 'center',
33
+ backgroundColor: Colors.white,
34
+ borderColor: 'transparent',
35
+ },
36
+ borderBox: {
37
+ borderColor: Colors.black_04,
38
+ borderWidth: 1,
39
+ borderRadius: 6,
40
+ },
41
+ disabledIcon: {
42
+ tintColor: Colors.black_09,
43
+ },
44
+ disabledBox: {
45
+ borderColor: Colors.black_03,
46
+ backgroundColor: Colors.black_03,
47
+ },
48
+ });
49
+
50
+ const getStyle = type => {
51
+ const objStyle = {
52
+ large: {
53
+ size: {
54
+ ...styles.borderBox,
55
+ width: 32, // height: 26
56
+ },
57
+ icon: {
19
58
  width: 24,
59
+ height: 24,
20
60
  resizeMode: 'contain',
21
- tintColor: Colors.pink_03,
61
+ },
62
+ text: 'Title',
22
63
  },
23
- text: {
24
- color: Colors.black_17
64
+ medium: {
65
+ size: {
66
+ ...styles.borderBox,
67
+ width: 28, // height: 24
68
+ },
69
+ icon: {
70
+ width: 24,
71
+ height: 24,
72
+ resizeMode: 'contain',
73
+ },
74
+ text: 'SubTitle',
25
75
  },
26
- numberBox: {
27
- justifyContent: 'center',
28
- alignItems: 'center',
29
- marginHorizontal: 6,
30
- backgroundColor: Colors.white,
76
+ small: {
77
+ size: {
78
+ ...styles.borderBox,
79
+ width: 20, // height: 16
80
+ },
81
+ icon: {
82
+ width: 16,
83
+ height: 16,
84
+ resizeMode: 'contain',
85
+ },
86
+ text: 'Caption',
31
87
  },
32
- button: {
33
- justifyContent: 'center',
34
- alignItems: 'center',
35
- backgroundColor: Colors.white,
36
- borderColor: 'transparent'
88
+ };
89
+ return objStyle[type] || objStyle.medium;
90
+ };
91
+
92
+ const getSize = type => {
93
+ const objStyle = {
94
+ large: {
95
+ size: {
96
+ width: 32,
97
+ height: 24, // height: 26
98
+ },
37
99
  },
38
- borderBox: {
39
- borderColor: Colors.black_04, borderWidth: 1, borderRadius: 6
100
+ medium: {
101
+ size: {
102
+ width: 28,
103
+ height: 24, // height: 24
104
+ },
40
105
  },
41
- disabledIcon: {
42
- tintColor: Colors.black_09,
106
+ small: {
107
+ size: {
108
+ width: 20,
109
+ height: 16, // height: 16
110
+ },
43
111
  },
44
- disabledBox: {
45
- borderColor: Colors.black_03, backgroundColor: Colors.black_03
46
- }
47
- });
48
-
49
- const getStyle = (type) => {
50
- const objStyle = {
51
- large: {
52
- size: {
53
- ...styles.borderBox, width: 32, // height: 26
54
- },
55
- icon: {
56
- width: 24, height: 24, resizeMode: 'contain'
57
- },
58
- text: 'Title'
59
- },
60
- medium: {
61
- size: {
62
- ...styles.borderBox, width: 28, // height: 24
63
- },
64
- icon: {
65
- width: 24, height: 24, resizeMode: 'contain'
66
- },
67
- text: 'SubTitle'
68
- },
69
- small: {
70
- size: {
71
- ...styles.borderBox, width: 20, // height: 16
72
- },
73
- icon: {
74
- width: 16, height: 16, resizeMode: 'contain'
75
- },
76
- text: 'Caption'
77
- }
78
-
79
- };
80
- return objStyle[type] || objStyle.medium;
112
+ };
113
+ return objStyle[type] || objStyle.medium;
81
114
  };
82
115
 
83
- const getSize = (type) => {
84
- const objStyle = {
85
- large: {
86
- size: {
87
- width: 32,height: 24 // height: 26
88
- },
89
- },
90
- medium: {
91
- size: {
92
- width: 28, height: 24// height: 24
93
- },
94
- },
95
- small: {
96
- size: {
97
- width: 20, height: 16// height: 16
98
- },
99
- }
100
-
116
+ export default class Quantity extends Component {
117
+ constructor(props) {
118
+ super(props);
119
+ this.state = {
120
+ value: props.defaultValue || props.min,
121
+ ownUpdate: false,
101
122
  };
102
- return objStyle[type] || objStyle.medium;
103
- };
123
+ }
104
124
 
105
-
106
- export default class Quantity extends Component {
107
- constructor(props) {
108
- super(props);
109
- this.state = {
110
- value: props.defaultValue || props.min,
111
- ownUpdate: false
112
- };
125
+ static getDerivedStateFromProps(nextProps, prevState) {
126
+ const {value = undefined} = this?.props || {};
127
+ if (prevState.ownUpdate) {
128
+ return {
129
+ ownUpdate: false,
130
+ };
113
131
  }
114
-
115
- static getDerivedStateFromProps(nextProps, prevState) {
116
- const { value = undefined } = this?.props || {};
117
- if (prevState.ownUpdate) {
118
- return {
119
- ownUpdate: false,
120
- };
121
- } if (nextProps.value !== value && nextProps.value !== prevState.value) {
122
- return { value: nextProps.value };
123
- }
124
- return null;
132
+ if (nextProps.value !== value && nextProps.value !== prevState.value) {
133
+ return {value: nextProps.value};
125
134
  }
135
+ return null;
136
+ }
126
137
 
127
- onChangeValue = (value, type) => {
128
- const { onChange } = this.props;
129
- return onChange && typeof onChange === 'function' && onChange(value, type);
130
- }
138
+ onChangeValue = (value, type) => {
139
+ const {onChange} = this.props;
140
+ return onChange && typeof onChange === 'function' && onChange(value, type);
141
+ };
131
142
 
132
- getValue = (key) => {
133
- const { isIncreaseValue, isDecreaseValue } = this.props;
134
- const value = {
135
- increase: isIncreaseValue ? 1 : 0,
136
- decrease: isDecreaseValue ? 1 : 0,
137
- };
138
- return value[key];
143
+ getValue = key => {
144
+ const {isIncreaseValue, isDecreaseValue} = this.props;
145
+ const value = {
146
+ increase: isIncreaseValue ? 1 : 0,
147
+ decrease: isDecreaseValue ? 1 : 0,
139
148
  };
149
+ return value[key];
150
+ };
140
151
 
141
- setValue = (newValue = 0, type) => {
142
- const { isInput, isIncreaseValue, max, min } = this.props;
143
- const onValue = (newValue, type) => {
144
- this.setState({
145
- value: newValue,
146
- ownUpdate: true,
147
- }, () => {
148
- this.onChangeValue(newValue, type);
149
- });
150
- };
152
+ setValue = (newValue = 0, type) => {
153
+ const {isInput, isIncreaseValue, max, min} = this.props;
154
+ const onValue = (newValue, type) => {
155
+ this.setState(
156
+ {
157
+ value: newValue,
158
+ ownUpdate: true,
159
+ },
160
+ () => {
161
+ this.onChangeValue(newValue, type);
162
+ },
163
+ );
164
+ };
151
165
 
152
- if(isInput){
153
- if((newValue <= max && isIncreaseValue) && (newValue >= min)){
154
- onValue(newValue, type)
155
- }
156
- }else {
157
- onValue(newValue, type)
158
- }
166
+ if (isInput) {
167
+ if (newValue <= max && isIncreaseValue && newValue >= min) {
168
+ onValue(newValue, type);
169
+ }
170
+ } else {
171
+ onValue(newValue, type);
159
172
  }
173
+ };
160
174
 
161
- onPress = (isIncrease = true) => () => {
162
- const { isChangeValue, onConditionCheck } = this.props;
163
- const { value } = this.state;
164
- const type = isIncrease ? 'increase' : 'decrease';
165
- if (isChangeValue) {
166
- const newValue = isIncrease ? value + this.getValue('increase') : value - this.getValue('decrease');
167
- if (typeof onConditionCheck === 'function') {
168
- const passCondition = onConditionCheck(newValue, type);
169
- if (passCondition) {
170
- this.setValue(newValue, type);
171
- }
172
- } else {
173
- this.setValue(newValue, type);
174
- }
175
+ onPress =
176
+ (isIncrease = true) =>
177
+ () => {
178
+ const {isChangeValue, onConditionCheck} = this.props;
179
+ const {value} = this.state;
180
+ const type = isIncrease ? 'increase' : 'decrease';
181
+ if (isChangeValue) {
182
+ const newValue = isIncrease
183
+ ? value + this.getValue('increase')
184
+ : value - this.getValue('decrease');
185
+ if (typeof onConditionCheck === 'function') {
186
+ const passCondition = onConditionCheck(newValue, type);
187
+ if (passCondition) {
188
+ this.setValue(newValue, type);
189
+ }
175
190
  } else {
176
- this.onChangeValue(value, type);
191
+ this.setValue(newValue, type);
177
192
  }
193
+ } else {
194
+ this.onChangeValue(value, type);
195
+ }
178
196
  };
179
197
 
180
- render() {
181
- const { value } = this.state;
182
- const {
183
- style, max, valueStyle, size, tintColor, isIncreaseValue, isSingle, iconStyle, isInput
184
- } = this.props;
185
- const { min } = this.props || 1;
186
- if (isSingle && value === 0) {
187
- return (
188
- <View style={[styles.container, style]}>
189
- <IconButton
190
- tintColor={tintColor}
191
- size={size}
192
- disabled={(value >= max || !isIncreaseValue)}
193
- onPress={this.onPress(true)}
194
- icon={plus}
195
- />
196
- </View>
197
- );
198
- }
199
- const TextComp = Text[getStyle(size).text];
200
- return (
201
- <View style={[styles.container, style]}>
202
- <IconButton
203
- style={iconStyle}
204
- tintColor={tintColor}
205
- size={size}
206
- disabled={value === min}
207
- onPress={this.onPress(false)}
208
- icon={minus}
209
- />
210
- <View style={[styles.numberBox, getStyle(size).size, valueStyle]}>
211
- {
212
- isInput ? <TextInput
213
- style={[{textAlignVertical: 'center'}, getSize(size).size]}
214
- underlineColorAndroid="transparent"
215
- value={value.toString()}
216
- textAlign='center'
217
- maxLength={3}
218
- keyboardType='number-pad'
219
- onChangeText={(text) => this.setValue(text)}/> : <TextComp weight="bold" style={styles.text}>{value}</TextComp>
220
- }
221
- </View>
222
- <IconButton
223
- tintColor={tintColor}
224
- style={iconStyle}
225
- size={size}
226
- disabled={(value >= max || !isIncreaseValue)}
227
- onPress={this.onPress(true)}
228
- icon={plus}
229
- />
230
- </View>
231
- );
198
+ render() {
199
+ const {value} = this.state;
200
+ const {
201
+ style,
202
+ max,
203
+ valueStyle,
204
+ size,
205
+ tintColor,
206
+ isIncreaseValue,
207
+ isSingle,
208
+ iconStyle,
209
+ isInput,
210
+ disabled,
211
+ } = this.props;
212
+ const {min} = this.props || 1;
213
+ if (isSingle && value === 0) {
214
+ return (
215
+ <View style={[styles.container, style]}>
216
+ <IconButton
217
+ tintColor={tintColor}
218
+ size={size}
219
+ disabled={value >= max || !isIncreaseValue}
220
+ onPress={this.onPress(true)}
221
+ icon={plus}
222
+ />
223
+ </View>
224
+ );
232
225
  }
226
+ const TextComp = Text[getStyle(size).text];
227
+ return (
228
+ <View style={[styles.container, style]}>
229
+ <IconButton
230
+ style={iconStyle}
231
+ tintColor={tintColor}
232
+ size={size}
233
+ disabled={value === min || disabled}
234
+ onPress={this.onPress(false)}
235
+ icon={minus}
236
+ />
237
+ <View style={[styles.numberBox, getStyle(size).size, valueStyle]}>
238
+ {isInput ? (
239
+ <TextInput
240
+ style={[{textAlignVertical: 'center'}, getSize(size).size]}
241
+ underlineColorAndroid="transparent"
242
+ value={value.toString()}
243
+ textAlign="center"
244
+ maxLength={3}
245
+ keyboardType="number-pad"
246
+ editable={!disabled}
247
+ onChangeText={text => this.setValue(text)}
248
+ />
249
+ ) : (
250
+ <TextComp weight="bold" style={styles.text}>
251
+ {value}
252
+ </TextComp>
253
+ )}
254
+ </View>
255
+ <IconButton
256
+ tintColor={tintColor}
257
+ style={iconStyle}
258
+ size={size}
259
+ disabled={value >= max || !isIncreaseValue || disabled}
260
+ onPress={this.onPress(true)}
261
+ icon={plus}
262
+ />
263
+ </View>
264
+ );
265
+ }
233
266
  }
234
267
 
235
- const IconButton = ({
236
- disabled, onPress, icon, size, tintColor, style
237
- }) => (
238
- <TouchableOpacity
239
- style={[getStyle(size).size, styles.button, style]}// disabled && styles.disabledBox
268
+ const IconButton = ({disabled, onPress, icon, size, tintColor, style}) => (
269
+ <TouchableOpacity
270
+ style={[getStyle(size).size, styles.button, style]} // disabled && styles.disabledBox
240
271
  disabled={disabled}
241
- onPress={onPress}
242
- >
272
+ onPress={onPress}>
243
273
  <Image
244
- source={icon}
245
- style={[getStyle(size).icon, { tintColor }, disabled && styles.disabledIcon]}
274
+ source={icon}
275
+ style={[
276
+ getStyle(size).icon,
277
+ {tintColor},
278
+ disabled && styles.disabledIcon,
279
+ ]}
246
280
  />
247
- </TouchableOpacity>
281
+ </TouchableOpacity>
248
282
  );
249
283
 
250
284
  Quantity.propTypes = {
251
- size: PropTypes.oneOf(['large', 'medium', 'small']),
252
- style: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
253
- valueStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
254
- min: PropTypes.number,
255
- max: PropTypes.number,
256
- value: PropTypes.number,
257
- defaultValue: PropTypes.number,
258
- onChange: PropTypes.func,
259
- isChangeValue: PropTypes.bool,
260
- isIncreaseValue: PropTypes.bool,
261
- isDecreaseValue: PropTypes.bool,
262
- isSingle: PropTypes.bool,
263
- tintColor: PropTypes.string,
264
- iconStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
265
- isInput: PropTypes.bool,
285
+ size: PropTypes.oneOf(['large', 'medium', 'small']),
286
+ style: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
287
+ valueStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
288
+ min: PropTypes.number,
289
+ max: PropTypes.number,
290
+ value: PropTypes.number,
291
+ defaultValue: PropTypes.number,
292
+ onChange: PropTypes.func,
293
+ isChangeValue: PropTypes.bool,
294
+ isIncreaseValue: PropTypes.bool,
295
+ isDecreaseValue: PropTypes.bool,
296
+ isSingle: PropTypes.bool,
297
+ disabled: PropTypes.bool,
298
+ tintColor: PropTypes.string,
299
+ iconStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
300
+ isInput: PropTypes.bool,
266
301
  };
267
302
 
268
303
  Quantity.defaultProps = {
269
- min: 1,
270
- max: 100,
271
- isChangeValue: true,
272
- isIncreaseValue: true,
273
- isDecreaseValue: true,
274
- isSingle: false,
275
- size: 'medium',
276
- tintColor: Colors.pink_05_b,
277
- isInput: false
304
+ min: 1,
305
+ max: 100,
306
+ isChangeValue: true,
307
+ isIncreaseValue: true,
308
+ isDecreaseValue: true,
309
+ isSingle: false,
310
+ size: 'medium',
311
+ tintColor: Colors.pink_05_b,
312
+ isInput: false,
313
+ disabled: false,
278
314
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@momo-kits/stepper",
3
- "version": "0.0.14",
3
+ "version": "0.0.18-beta-1",
4
4
  "private": false,
5
5
  "main": "index.js",
6
6
  "dependencies": {},