@momo-kits/date-picker 0.0.38-beta → 0.0.40-beta.2
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/datePicker/DatePicker.js +30 -21
- package/datePicker/ListPicker.js +193 -0
- package/datePicker/WheelPicker.js +8 -5
- package/datePicker/helper/DatePickerHelper.js +14 -6
- package/index.js +3 -1
- package/package.json +3 -3
- package/publish.sh +1 -1
package/datePicker/DatePicker.js
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from 'react-native';
|
|
7
7
|
import PropTypes from 'prop-types';
|
|
8
8
|
import {
|
|
9
|
-
BottomPopupHeader, Button, Text, ScreenUtils, SwitchLanguage, Spacing
|
|
9
|
+
BottomPopupHeader, Button, Text, ScreenUtils, SwitchLanguage, Spacing, Colors
|
|
10
10
|
} from '@momo-kits/core';
|
|
11
11
|
import WheelPicker from './WheelPicker';
|
|
12
12
|
import DatePickerHelper from './helper/DatePickerHelper';
|
|
@@ -26,13 +26,22 @@ const styles = StyleSheet.create({
|
|
|
26
26
|
width: widthScreen,
|
|
27
27
|
alignItems: 'center',
|
|
28
28
|
justifyContent: 'center',
|
|
29
|
+
paddingHorizontal: 21,
|
|
30
|
+
paddingTop: 12
|
|
29
31
|
},
|
|
30
32
|
column: {
|
|
31
33
|
borderWidth: 2,
|
|
32
34
|
borderColor: 'red',
|
|
33
35
|
},
|
|
34
36
|
header: {
|
|
35
|
-
|
|
37
|
+
borderTopLeftRadius: 12,
|
|
38
|
+
borderTopRightRadius: 12,
|
|
39
|
+
//backgroundColor:'red',
|
|
40
|
+
height: 64,
|
|
41
|
+
borderBottomColor: Colors.black_04,
|
|
42
|
+
borderBottomWidth: 1,
|
|
43
|
+
alignItems:'center',
|
|
44
|
+
justifyContent:'center',
|
|
36
45
|
marginBottom: 0, // Spacing.S,
|
|
37
46
|
},
|
|
38
47
|
view: {
|
|
@@ -128,11 +137,11 @@ class DatePicker extends Component {
|
|
|
128
137
|
} : DatePickerHelper.formatDate(propsSelectedDate, props.format);
|
|
129
138
|
}
|
|
130
139
|
}
|
|
131
|
-
this.createDataDate(this.minDate, this.maxDate, props.minuteArray);
|
|
140
|
+
this.createDataDate(this.minDate, this.maxDate, props.minuteArray, props.rangeHour);
|
|
132
141
|
this.selectedIndexDate();
|
|
133
142
|
}
|
|
134
143
|
|
|
135
|
-
createDataDate(minDate, maxDate, minuteArray) {
|
|
144
|
+
createDataDate(minDate, maxDate, minuteArray, rangeHour) {
|
|
136
145
|
this.minDay = 1;
|
|
137
146
|
this.minMonth = 1;
|
|
138
147
|
this.minYear = 1970;
|
|
@@ -159,7 +168,7 @@ class DatePicker extends Component {
|
|
|
159
168
|
} else {
|
|
160
169
|
this.minutes = DatePickerHelper.makeRange(0, 59, true);
|
|
161
170
|
}
|
|
162
|
-
this.ranged = DatePickerHelper.arrayRange;
|
|
171
|
+
this.ranged = rangeHour || DatePickerHelper.arrayRange;
|
|
163
172
|
}
|
|
164
173
|
|
|
165
174
|
selectedIndexDate() {
|
|
@@ -171,15 +180,13 @@ class DatePicker extends Component {
|
|
|
171
180
|
current = this.maxDate;
|
|
172
181
|
}
|
|
173
182
|
if (format === 'hh:mm' && isRanged) {
|
|
174
|
-
const valueHours_1 = this.selectedDate ? `${getStrings(this.selectedDate?.from?.getHours()?.toString())}:${getStrings(this.selectedDate?.from?.getMinutes()?.toString())}` : '';
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
this.hourRangeIndex_1 = this.selectedDate
|
|
183
|
+
const valueHours_1 = this.selectedDate?.from ? `${getStrings(this.selectedDate?.from?.getHours()?.toString())}:${getStrings(this.selectedDate?.from?.getMinutes()?.toString())}` : '00:00';
|
|
184
|
+
const valueHours_2 = this.selectedDate?.to ? `${getStrings(this.selectedDate?.to?.getHours()?.toString())}:${getStrings(this.selectedDate?.to?.getMinutes()?.toString())}` : '00:00';
|
|
185
|
+
this.hourRangeIndex_1 = valueHours_1
|
|
179
186
|
? this.ranged.indexOf(valueHours_1)
|
|
180
187
|
: this.ranged.indexOf(`${current.getHours().toString()}:${current.getMinutes().toString()}`);
|
|
181
188
|
|
|
182
|
-
this.hourRangeIndex_2 =
|
|
189
|
+
this.hourRangeIndex_2 = valueHours_2
|
|
183
190
|
? this.ranged.indexOf(valueHours_2)
|
|
184
191
|
: this.ranged.indexOf(`${current.getHours().toString()}:${current.getMinutes().toString()}`);
|
|
185
192
|
return;
|
|
@@ -199,14 +206,14 @@ class DatePicker extends Component {
|
|
|
199
206
|
if (format === 'hh:mm' && !isRanged) {
|
|
200
207
|
const valueHours = this.selectedDate ? this.selectedDate?.getHours()?.toString()?.length === 1 ? `0${this.selectedDate.getHours().toString()}` : this.selectedDate?.getHours()?.toString() || '' : '';
|
|
201
208
|
const valueMinute = this.selectedDate ? this.selectedDate?.getMinutes()?.toString()?.length === 1 ? `0${this.selectedDate.getMinutes().toString()}` : this.selectedDate?.getMinutes()?.toString() || '' : '';
|
|
202
|
-
|
|
209
|
+
|
|
203
210
|
this.hourIndex = this.selectedDate
|
|
204
211
|
? this.hours.indexOf(valueHours)
|
|
205
|
-
: this.hours.indexOf(current.getHours().toString());
|
|
212
|
+
: this.hours.indexOf(current.getHours().toString().length === 1 ? `0${current.getHours().toString()}` : current.getHours().toString());
|
|
206
213
|
|
|
207
214
|
this.minuteIndex = this.selectedDate
|
|
208
215
|
? this.minutes.indexOf(valueMinute)
|
|
209
|
-
: this.minutes.indexOf(current.getMinutes().toString());
|
|
216
|
+
: this.minutes.indexOf(current.getMinutes().toString().length === 1 ? `0${current.getMinutes().toString()}` : current.getMinutes().toString());
|
|
210
217
|
}
|
|
211
218
|
}
|
|
212
219
|
|
|
@@ -259,11 +266,9 @@ class DatePicker extends Component {
|
|
|
259
266
|
const day = this.days[this.dayIndex];
|
|
260
267
|
const month = this.months[this.monthIndex];
|
|
261
268
|
const year = this.years[this.yearIndex];
|
|
262
|
-
const hour = this.hours[this.hourIndex];
|
|
263
|
-
const minute = this.minutes[this.minuteIndex];
|
|
264
|
-
|
|
269
|
+
const hour = this.hours[this.hourIndex] || '00';
|
|
270
|
+
const minute = this.minutes[this.minuteIndex] || '00';
|
|
265
271
|
const selectedDateFormatted = DatePickerHelper.toString(day, month, year, hour, minute, format);
|
|
266
|
-
|
|
267
272
|
if (onSelected && typeof onSelected === 'function') {
|
|
268
273
|
onSelected(selectedDateFormatted || selectedDate || DatePickerHelper.getCurrentDate(format));
|
|
269
274
|
}
|
|
@@ -429,10 +434,11 @@ class DatePicker extends Component {
|
|
|
429
434
|
|
|
430
435
|
renderHeader() {
|
|
431
436
|
const {
|
|
432
|
-
title, placeholder, body, buttonTitle, onButtonPress, headerStyle, iconClosePosition = 'right'
|
|
437
|
+
title, placeholder, body, buttonTitle, onButtonPress, headerStyle, iconClosePosition = 'right', iconType
|
|
433
438
|
} = this.props;
|
|
434
439
|
return (
|
|
435
440
|
<BottomPopupHeader
|
|
441
|
+
iconType={iconType}
|
|
436
442
|
iconClosePosition={iconClosePosition}
|
|
437
443
|
body={body}
|
|
438
444
|
onClose={this.hide}
|
|
@@ -539,7 +545,7 @@ class DatePicker extends Component {
|
|
|
539
545
|
renderFooter() {
|
|
540
546
|
const { titleFooter, renderFooter } = this.props;
|
|
541
547
|
return renderFooter ? renderFooter() : (
|
|
542
|
-
<View style={{ paddingHorizontal: 12, marginBottom: ifIphoneX(
|
|
548
|
+
<View style={{ paddingHorizontal: 12, marginBottom: ifIphoneX(35, 12), marginTop: 16 }}>
|
|
543
549
|
<Button
|
|
544
550
|
onPress={this.finish}
|
|
545
551
|
title={titleFooter || SwitchLanguage.confirm}
|
|
@@ -582,7 +588,10 @@ DatePicker.propTypes = {
|
|
|
582
588
|
renderDescription: PropTypes.any,
|
|
583
589
|
description: PropTypes.string,
|
|
584
590
|
renderFooter: PropTypes.any,
|
|
585
|
-
style: PropTypes.any
|
|
591
|
+
style: PropTypes.any,
|
|
592
|
+
rangeHour: PropTypes.array,
|
|
593
|
+
iconClosePosition: PropTypes.oneOf(['left', 'right']),
|
|
594
|
+
iconType: PropTypes.oneOf(['icon', 'text']),
|
|
586
595
|
};
|
|
587
596
|
|
|
588
597
|
DatePicker.defaultProps = {
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import React, { Component } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
Dimensions, StyleSheet, View
|
|
4
|
+
} from 'react-native';
|
|
5
|
+
import {
|
|
6
|
+
Button, IconSource, TouchableOpacity, Text, Colors, Image, DeviceUtils, SwitchLanguage
|
|
7
|
+
} from '@momo-kits/core';
|
|
8
|
+
import WheelPicker from './WheelPicker';
|
|
9
|
+
|
|
10
|
+
const { isIphoneX } = DeviceUtils;
|
|
11
|
+
|
|
12
|
+
const widthScreen = Dimensions.get('window').width;
|
|
13
|
+
|
|
14
|
+
export default class ListPicker extends Component {
|
|
15
|
+
constructor(props) {
|
|
16
|
+
super(props);
|
|
17
|
+
this.data = 0;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
hide = () => {
|
|
21
|
+
const { onClose, requestClose } = this.props;
|
|
22
|
+
if (requestClose && typeof requestClose === 'function') {
|
|
23
|
+
requestClose(() => {
|
|
24
|
+
if (onClose && typeof onClose === 'function') {
|
|
25
|
+
onClose();
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
onBeginDrag = () => {
|
|
32
|
+
if (this.refs.picker) {
|
|
33
|
+
this.refs.picker.setScrollEnabled(false);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
onEndDrag = () => {
|
|
38
|
+
if (this.refs.picker) {
|
|
39
|
+
this.refs.picker.setScrollEnabled(true);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
onChangeValue = (value) => {
|
|
44
|
+
const { callback } = this.props;
|
|
45
|
+
if (typeof callback === 'function') {
|
|
46
|
+
callback(value);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
onPressClear = () => {
|
|
51
|
+
this.hide();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
onPressChoose = () => {
|
|
55
|
+
this.onChangeValue(this.data);
|
|
56
|
+
this.hide();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
renderRight = () => (
|
|
60
|
+
<TouchableOpacity
|
|
61
|
+
onPress={this.onPressChoose}
|
|
62
|
+
>
|
|
63
|
+
<Text.Title style={{ fontWeight: 'bold', color: Colors.pink_05 }}>{SwitchLanguage.save}</Text.Title>
|
|
64
|
+
</TouchableOpacity>
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
renderLeftIcon = () => (
|
|
68
|
+
<TouchableOpacity onPress={() => this.hide()}>
|
|
69
|
+
<Image
|
|
70
|
+
source={IconSource.ic_close_x_24}
|
|
71
|
+
style={{ width: 25, height: 25, tintColor: Colors.black_17 }}
|
|
72
|
+
/>
|
|
73
|
+
</TouchableOpacity>
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
renderHeader() {
|
|
77
|
+
const { title = '' } = this.props;
|
|
78
|
+
return (
|
|
79
|
+
<View style={styles.header}>
|
|
80
|
+
{this.renderLeftIcon()}
|
|
81
|
+
<Text style={styles.title}>
|
|
82
|
+
{title}
|
|
83
|
+
</Text>
|
|
84
|
+
{this.props.typeStyle === 'aboveAction' ? this.renderRight() : <View style={{ width: 25 }} />}
|
|
85
|
+
</View>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
renderContent() {
|
|
90
|
+
const { arrData = [], stylePicker, initValue } = this.props;
|
|
91
|
+
return (
|
|
92
|
+
<View style={styles.contentStyle}>
|
|
93
|
+
<WheelPicker
|
|
94
|
+
stylePicker={stylePicker}
|
|
95
|
+
bottomOffset={1}
|
|
96
|
+
value={initValue}
|
|
97
|
+
key="picker"
|
|
98
|
+
ref="picker"
|
|
99
|
+
arrayValue={arrData}
|
|
100
|
+
onBeginDrag={this.onBeginDrag}
|
|
101
|
+
onEndDrag={this.onEndDrag}
|
|
102
|
+
onValueChange={(value) => {
|
|
103
|
+
this.data = value;
|
|
104
|
+
}}
|
|
105
|
+
/>
|
|
106
|
+
|
|
107
|
+
</View>
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
render() {
|
|
112
|
+
return (
|
|
113
|
+
<View style={styles.view}>
|
|
114
|
+
{this.renderHeader()}
|
|
115
|
+
{this.renderContent()}
|
|
116
|
+
{
|
|
117
|
+
this.props.typeStyle === 'aboveAction'
|
|
118
|
+
? null
|
|
119
|
+
: (
|
|
120
|
+
<View style={styles.btnView}>
|
|
121
|
+
<Button
|
|
122
|
+
style={{ flex: 1 }}
|
|
123
|
+
title={SwitchLanguage.cancel}
|
|
124
|
+
buttonStyle={{ backgroundColor: Colors.second_text_color }}
|
|
125
|
+
onPress={this.onPressClear}
|
|
126
|
+
/>
|
|
127
|
+
<Button
|
|
128
|
+
style={{ flex: 1, marginLeft: 15 }}
|
|
129
|
+
title={SwitchLanguage.choose}
|
|
130
|
+
type="primary"
|
|
131
|
+
onPress={this.onPressChoose}
|
|
132
|
+
/>
|
|
133
|
+
</View>
|
|
134
|
+
)
|
|
135
|
+
}
|
|
136
|
+
</View>
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const styles = StyleSheet.create({
|
|
142
|
+
container: {
|
|
143
|
+
flexDirection: 'row',
|
|
144
|
+
width: widthScreen,
|
|
145
|
+
alignItems: 'center',
|
|
146
|
+
justifyContent: 'center'
|
|
147
|
+
},
|
|
148
|
+
contentStyle: {
|
|
149
|
+
height: 230,
|
|
150
|
+
},
|
|
151
|
+
column: {
|
|
152
|
+
borderWidth: 2,
|
|
153
|
+
borderColor: 'red',
|
|
154
|
+
},
|
|
155
|
+
header: {
|
|
156
|
+
flexDirection: 'row',
|
|
157
|
+
height: 50,
|
|
158
|
+
width: widthScreen,
|
|
159
|
+
paddingHorizontal: 16,
|
|
160
|
+
alignItems: 'center',
|
|
161
|
+
justifyContent: 'space-between',
|
|
162
|
+
backgroundColor: '#fff',
|
|
163
|
+
borderBottomWidth: 1,
|
|
164
|
+
borderColor: '#DADADA',
|
|
165
|
+
},
|
|
166
|
+
view: {
|
|
167
|
+
backgroundColor: 'white',
|
|
168
|
+
paddingBottom: 10 + (isIphoneX() ? 10 : 0)
|
|
169
|
+
},
|
|
170
|
+
title: {
|
|
171
|
+
fontWeight: 'bold',
|
|
172
|
+
color: Colors.black_17,
|
|
173
|
+
flex: 1,
|
|
174
|
+
fontSize: 16,
|
|
175
|
+
textAlign: 'center'
|
|
176
|
+
},
|
|
177
|
+
titleCancel: {
|
|
178
|
+
fontSize: 17,
|
|
179
|
+
color: '#4A90E2'
|
|
180
|
+
},
|
|
181
|
+
titleConfirm: {
|
|
182
|
+
fontSize: 17,
|
|
183
|
+
color: '#4A90E2',
|
|
184
|
+
textAlign: 'right'
|
|
185
|
+
},
|
|
186
|
+
btnView: {
|
|
187
|
+
flexDirection: 'row',
|
|
188
|
+
justifyContent: 'space-between',
|
|
189
|
+
marginHorizontal: 15,
|
|
190
|
+
height: 60,
|
|
191
|
+
alignItems: 'center'
|
|
192
|
+
}
|
|
193
|
+
});
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
LinearGradient, Text, Colors, ScaleSize
|
|
7
7
|
} from '@momo-kits/core';
|
|
8
8
|
import ScrollCustom from './custom/ScrollCustom';
|
|
9
|
+
import DatePickerHelper from './helper/DatePickerHelper';
|
|
9
10
|
|
|
10
11
|
const widthScreen = Dimensions.get('window').width;
|
|
11
12
|
// var heightScreen = Dimensions.get('window').height;
|
|
@@ -14,8 +15,9 @@ export default class WheelPicker extends Component {
|
|
|
14
15
|
constructor(props) {
|
|
15
16
|
super(props);
|
|
16
17
|
const {
|
|
17
|
-
heightItem, value, numberItem, arrayValue
|
|
18
|
+
heightItem, value: valueItem, numberItem, arrayValue
|
|
18
19
|
} = this.props;
|
|
20
|
+
const value = valueItem === -1 ? 0 : valueItem;
|
|
19
21
|
this.heightItem = heightItem;
|
|
20
22
|
this.currentPosition = value * this.heightItem;
|
|
21
23
|
this.prePosition = this.currentPosition;
|
|
@@ -171,19 +173,20 @@ export default class WheelPicker extends Component {
|
|
|
171
173
|
const { items, value, width } = this.state;
|
|
172
174
|
const { preFix, bottomOffset } = this.props;
|
|
173
175
|
return (
|
|
174
|
-
<View style={{ flex: 1, height: heightContain +
|
|
175
|
-
<Text.SubTitle style={{
|
|
176
|
+
<View style={{ flex: 1, height: heightContain + 40 }}>
|
|
177
|
+
<Text.SubTitle weight='bold' style={{
|
|
176
178
|
color: Colors.black_17, marginLeft: 6, marginBottom: 3
|
|
177
179
|
}}
|
|
178
180
|
>
|
|
179
|
-
{preFix
|
|
181
|
+
{DatePickerHelper.capitalizeFirstLetter(preFix || '')}
|
|
180
182
|
</Text.SubTitle>
|
|
181
183
|
<View
|
|
182
184
|
style={{
|
|
183
185
|
flex: 1,
|
|
184
186
|
height: heightContain,
|
|
185
|
-
//
|
|
187
|
+
//backgroundColor: 'blue',
|
|
186
188
|
marginHorizontal: 6,
|
|
189
|
+
paddingBottom: 20,
|
|
187
190
|
borderWidth: 1,
|
|
188
191
|
borderColor: Colors.black_04,
|
|
189
192
|
borderRadius: 8,
|
|
@@ -77,7 +77,7 @@ export default class DatePickerHelper {
|
|
|
77
77
|
static formatDate(date, format) {
|
|
78
78
|
if (date && format) {
|
|
79
79
|
const {
|
|
80
|
-
year, month, day, hour, minute, second
|
|
80
|
+
year, month, day, hour, minute, second = 0
|
|
81
81
|
} = DatePickerHelper.getDateTimeFromFormat(date, format);
|
|
82
82
|
if (DatePickerHelper.checkValidDate(year, month, day)
|
|
83
83
|
&& DatePickerHelper.checkValidTime(hour, minute, second)) {
|
|
@@ -156,17 +156,21 @@ export default class DatePickerHelper {
|
|
|
156
156
|
return null;
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
static checkValidDate(
|
|
159
|
+
static checkValidDate(y, m, d) {
|
|
160
|
+
const year = parseInt(y);
|
|
161
|
+
const month = parseInt(m);
|
|
162
|
+
const day = parseInt(d);
|
|
160
163
|
const months31 = [0, 2, 4, 6, 7, 9, 11];
|
|
161
164
|
const months30 = [3, 5, 8, 10];
|
|
162
165
|
const months28 = [1];
|
|
163
166
|
const isLeap = ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);
|
|
164
167
|
if (year != null && month != null && day != null) {
|
|
165
168
|
const isDayValid = day > 0;
|
|
166
|
-
const isMonthValid = (months31.indexOf(month)
|
|
167
|
-
|| (months30.indexOf(month)
|
|
168
|
-
|| (
|
|
169
|
-
|| (months28.indexOf(month)
|
|
169
|
+
const isMonthValid = (months31.indexOf(parseInt(month)) != -1 && day <= 31)
|
|
170
|
+
|| (months30.indexOf(month) != -1 && day <= 30)
|
|
171
|
+
|| (months30.indexOf(month) != -1 && day <= 31)
|
|
172
|
+
|| (months28.indexOf(month) != -1 && day <= 28)
|
|
173
|
+
|| (months28.indexOf(month) != -1 && day <= 29 && isLeap);
|
|
170
174
|
return isDayValid && isMonthValid;
|
|
171
175
|
}
|
|
172
176
|
return false;
|
|
@@ -194,4 +198,8 @@ export default class DatePickerHelper {
|
|
|
194
198
|
|
|
195
199
|
return monthLength[month - 1];
|
|
196
200
|
}
|
|
201
|
+
|
|
202
|
+
static capitalizeFirstLetter(string) {
|
|
203
|
+
return string.charAt(0).toUpperCase() + string.slice(1);
|
|
204
|
+
}
|
|
197
205
|
}
|
package/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@momo-kits/date-picker",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.40-beta.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"dependencies": {},
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
"react-native": ">=0.55",
|
|
9
9
|
"prop-types": "^15.7.2",
|
|
10
10
|
"react": "16.9.0",
|
|
11
|
-
"
|
|
12
|
-
"
|
|
11
|
+
"@momo-kits/core": ">=0.0.5-beta",
|
|
12
|
+
"lodash": "^4.17.15"
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {},
|
|
15
15
|
"license": "MoMo"
|