@momo-kits/date-picker 0.79.6-beta.6 → 0.80.1-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/WheelPicker.tsx CHANGED
@@ -1,12 +1,11 @@
1
1
  import React, {FC, useCallback, useContext, useEffect, useRef} from 'react';
2
2
  import {Animated, FlatList, View} from 'react-native';
3
3
  import styles from './styles';
4
- import {ApplicationContext, Text} from '@momo-kits/foundation';
4
+ import {ApplicationContext, scaleSize} from '@momo-kits/foundation';
5
5
  import {WheelPickerProps} from './types';
6
6
  import {debounce} from './utils';
7
7
 
8
8
  const AnimatedFlatList = Animated.createAnimatedComponent(FlatList);
9
-
10
9
  const WheelPicker: FC<WheelPickerProps> = ({
11
10
  name,
12
11
  data,
@@ -37,7 +36,7 @@ const WheelPicker: FC<WheelPickerProps> = ({
37
36
  return () => {
38
37
  debouncedScrollEnd.cancel();
39
38
  };
40
- }, [data]);
39
+ }, []);
41
40
 
42
41
  const debouncedScrollEnd = debounce(() => {
43
42
  let selectedIndex = data.findIndex(item => item === selectedData);
@@ -57,7 +56,8 @@ const WheelPicker: FC<WheelPickerProps> = ({
57
56
  }, 100);
58
57
 
59
58
  const ItemComponent: FC<any> = React.memo(props => {
60
- const {item, opacity} = props;
59
+ const {item, opacity, scale} = props;
60
+
61
61
  return (
62
62
  <Animated.View
63
63
  style={[
@@ -66,7 +66,15 @@ const WheelPicker: FC<WheelPickerProps> = ({
66
66
  opacity,
67
67
  },
68
68
  ]}>
69
- <Text typography={'action_s'}>{item}</Text>
69
+ <Animated.Text
70
+ style={{
71
+ fontFamily: `${theme.font}-Semibold`,
72
+ transform: [{scale}],
73
+ fontSize: scaleSize(15),
74
+ lineHeight: scaleSize(22),
75
+ }}>
76
+ {item}
77
+ </Animated.Text>
70
78
  </Animated.View>
71
79
  );
72
80
  });
@@ -90,10 +98,27 @@ const WheelPicker: FC<WheelPickerProps> = ({
90
98
  };
91
99
  };
92
100
 
101
+ const scaleAnimated = (a: number, b: number) => {
102
+ return {
103
+ inputRange: [...data.map((_: any, i: number) => i * itemSize)],
104
+ outputRange: [
105
+ ...data.map((_: any, i: number) => {
106
+ const center = i + 2;
107
+ if (center === index) {
108
+ return a;
109
+ } else {
110
+ return b;
111
+ }
112
+ }),
113
+ ],
114
+ };
115
+ };
116
+
93
117
  return (
94
118
  <ItemComponent
95
119
  item={item}
96
120
  opacity={scrollAnimatedValue.interpolate(opacityAnimated(1, 0.8, 0.4))}
121
+ scale={scrollAnimatedValue.interpolate(scaleAnimated(1, 0.87))}
97
122
  />
98
123
  );
99
124
  }, []);
@@ -132,8 +157,8 @@ const WheelPicker: FC<WheelPickerProps> = ({
132
157
  ]}>
133
158
  <AnimatedFlatList
134
159
  windowSize={15}
135
- initialNumToRender={5}
136
- maxToRenderPerBatch={5}
160
+ initialNumToRender={15}
161
+ maxToRenderPerBatch={15}
137
162
  pagingEnabled
138
163
  snapToInterval={itemSize}
139
164
  decelerationRate={'fast'}
package/index.tsx CHANGED
@@ -1,5 +1,5 @@
1
1
  import React, {FC, useEffect, useState} from 'react';
2
- import {Dimensions, View} from 'react-native';
2
+ import {Dimensions, LayoutChangeEvent, View} from 'react-native';
3
3
  import {Spacing} from '@momo-kits/foundation';
4
4
  import WheelPicker from './WheelPicker';
5
5
  import {
@@ -13,17 +13,21 @@ import {
13
13
  import {DateObject, DateTimePickerProps, PickerDataObject} from './types';
14
14
  import styles from './styles';
15
15
 
16
- const screenWidth = Dimensions.get('window').width;
17
16
  const date = new Date();
17
+ const minDateDefault = new Date(date);
18
+ const maxDateDefault = new Date(date);
19
+ minDateDefault.setFullYear(minDateDefault.getFullYear() - 10);
20
+ maxDateDefault.setFullYear(maxDateDefault.getFullYear() + 10);
18
21
  date.setHours(0, 0);
22
+ const screenWidth = Dimensions.get('window').width;
19
23
 
20
24
  const DateTimePicker: FC<DateTimePickerProps> = ({
21
25
  format = 'DD-MM-YYYY',
22
26
  minuteInterval = 1,
23
27
  onChange,
24
28
  selectedValue = date,
25
- minDate = new Date(1900, 1, 1, 0, 0),
26
- maxDate = new Date(date.getFullYear() + 10, 12, 31, 0, 0),
29
+ minDate = minDateDefault,
30
+ maxDate = maxDateDefault,
27
31
  }) => {
28
32
  const [data, setData] = useState<DateObject[]>([]);
29
33
  let [currentDate, setCurrentDate] = useState<PickerDataObject>({
@@ -33,6 +37,7 @@ const DateTimePicker: FC<DateTimePickerProps> = ({
33
37
  hour: selectedValue.getHours(),
34
38
  min: selectedValue.getMinutes(),
35
39
  });
40
+ const [containerWidth, setContainerWidth] = useState(screenWidth);
36
41
 
37
42
  useEffect(() => {
38
43
  setupData();
@@ -112,8 +117,12 @@ const DateTimePicker: FC<DateTimePickerProps> = ({
112
117
 
113
118
  const paddingArray = ['', ''];
114
119
 
120
+ const onLayout = (e: LayoutChangeEvent) => {
121
+ setContainerWidth(e.nativeEvent.layout.width);
122
+ };
123
+
115
124
  return (
116
- <View style={styles.datePicker}>
125
+ <View onLayout={onLayout} style={styles.datePicker}>
117
126
  {data.map((dataItem, index) => {
118
127
  return (
119
128
  <WheelPicker
@@ -124,7 +133,9 @@ const DateTimePicker: FC<DateTimePickerProps> = ({
124
133
  name={dataItem.name}
125
134
  style={{
126
135
  width:
127
- (screenWidth - Spacing.M * 2 - (numOfColumns - 1) * Spacing.M) /
136
+ (containerWidth -
137
+ Spacing.M * 2 -
138
+ (numOfColumns - 1) * Spacing.M) /
128
139
  numOfColumns,
129
140
  }}
130
141
  />
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@momo-kits/date-picker",
3
- "version": "0.79.6-beta.6",
3
+ "version": "0.80.1-beta.2",
4
4
  "private": false,
5
5
  "main": "index.tsx",
6
6
  "peerDependencies": {