react-native-timer-picker 1.10.1 → 1.10.3
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/README.md +13 -0
- package/dist/commonjs/components/DurationScroll/index.js +108 -73
- package/dist/commonjs/components/DurationScroll/index.js.map +1 -1
- package/dist/commonjs/components/DurationScroll/types.js.map +1 -1
- package/dist/commonjs/components/TimerPicker/index.js +26 -11
- package/dist/commonjs/components/TimerPicker/index.js.map +1 -1
- package/dist/commonjs/components/TimerPicker/types.js.map +1 -1
- package/dist/commonjs/utils/generateNumbers.js +3 -3
- package/dist/commonjs/utils/generateNumbers.js.map +1 -1
- package/dist/commonjs/utils/getAdjustedLimit.js +4 -3
- package/dist/commonjs/utils/getAdjustedLimit.js.map +1 -1
- package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js +23 -0
- package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
- package/dist/commonjs/utils/getInitialScrollIndex.js +18 -0
- package/dist/commonjs/utils/getInitialScrollIndex.js.map +1 -0
- package/dist/module/components/DurationScroll/index.js +109 -74
- package/dist/module/components/DurationScroll/index.js.map +1 -1
- package/dist/module/components/DurationScroll/types.js.map +1 -1
- package/dist/module/components/TimerPicker/index.js +26 -11
- package/dist/module/components/TimerPicker/index.js.map +1 -1
- package/dist/module/components/TimerPicker/types.js.map +1 -1
- package/dist/module/utils/generateNumbers.js +3 -3
- package/dist/module/utils/generateNumbers.js.map +1 -1
- package/dist/module/utils/getAdjustedLimit.js +4 -3
- package/dist/module/utils/getAdjustedLimit.js.map +1 -1
- package/dist/module/utils/getDurationAndIndexFromScrollOffset.js +16 -0
- package/dist/module/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
- package/dist/module/utils/getInitialScrollIndex.js +11 -0
- package/dist/module/utils/getInitialScrollIndex.js.map +1 -0
- package/dist/typescript/components/DurationScroll/types.d.ts +1 -0
- package/dist/typescript/components/TimerPicker/types.d.ts +3 -0
- package/dist/typescript/utils/generateNumbers.d.ts +1 -1
- package/dist/typescript/utils/getDurationAndIndexFromScrollOffset.d.ts +10 -0
- package/dist/typescript/utils/getInitialScrollIndex.d.ts +7 -0
- package/package.json +1 -1
- package/dist/commonjs/utils/getScrollIndex.js +0 -17
- package/dist/commonjs/utils/getScrollIndex.js.map +0 -1
- package/dist/module/utils/getScrollIndex.js +0 -10
- package/dist/module/utils/getScrollIndex.js.map +0 -1
- package/dist/typescript/utils/getScrollIndex.d.ts +0 -6
package/README.md
CHANGED
|
@@ -27,6 +27,7 @@ Includes iOS-style haptic and audio feedback 🍏
|
|
|
27
27
|
- [Props 💅](#props-)
|
|
28
28
|
- [TimerPicker ⏲️](#timerpicker-️)
|
|
29
29
|
- [Custom Styles 👗](#custom-styles-)
|
|
30
|
+
- [Performance](#performance)
|
|
30
31
|
- [Custom FlatList](#custom-flatlist)
|
|
31
32
|
- [TimerPickerModal ⏰](#timerpickermodal-)
|
|
32
33
|
- [Custom Styles 👕](#custom-styles--1)
|
|
@@ -448,6 +449,9 @@ return (
|
|
|
448
449
|
| use12HourPicker | Switch the hour picker to 12-hour format with an AM / PM label | Boolean | false | false |
|
|
449
450
|
| amLabel | Set the AM label if using the 12-hour picker | String | am | false |
|
|
450
451
|
| pmLabel | Set the PM label if using the 12-hour picker | String | pm | false |
|
|
452
|
+
| repeatHourNumbersNTimes | Set the number of times the list of hours is repeated in the picker | Number | 7 | false |
|
|
453
|
+
| repeatMinuteNumbersNTimes | Set the number of times the list of minutes is repeated in the picker | Number | 3 | false |
|
|
454
|
+
| repeatSecondNumbersNTimes | Set the number of times the list of seconds is repeated in the picker | Number | 3 | false |
|
|
451
455
|
| disableInfiniteScroll | Disable the infinite scroll feature | Boolean | false | false |
|
|
452
456
|
| LinearGradient | Linear Gradient Component | [expo-linear-gradient](https://www.npmjs.com/package/expo-linear-gradient).LinearGradient or [react-native-linear-gradient](https://www.npmjs.com/package/react-native-linear-gradient).default | - | false |
|
|
453
457
|
| Haptics | Haptics Namespace (required for Haptic feedback) | [expo-haptics](https://www.npmjs.com/package/expo-haptics) | - | false |
|
|
@@ -483,6 +487,15 @@ The following custom styles can be supplied to re-style the component in any way
|
|
|
483
487
|
Note the minor limitations to the allowed styles for `pickerContainer` and `pickerItemContainer`. These are made because these styles are used for internal calculations and all possible `backgroundColor`/`height` types are not supported.
|
|
484
488
|
|
|
485
489
|
|
|
490
|
+
#### Performance
|
|
491
|
+
|
|
492
|
+
When the `disableInfiniteScroll` prop is not set, the picker gives the appearance of an infinitely scrolling picker by auto-scrolling forward/back when you near the start/end of the list. When the picker auto-scrolls, a momentary flicker is visible if you are scrolling very slowly.
|
|
493
|
+
|
|
494
|
+
To mitigate for this, you can modify the `repeatHourNumbersNTimes`, `repeatMinuteNumbersNTimes` and `repeatSecondNumbersNTimes` props. These set the number of times the list of numbers in each picker is repeated. These have a performance trade-off: higher values mean the picker has to auto-scroll less to maintain the infinite scroll, but has to render a longer list of numbers. By default, the props are set to 7, 3 and 3, respectively, which balances that trade-off effectively.
|
|
495
|
+
|
|
496
|
+
Note that you can avoid the auto-scroll flickering entirely by disabling infinite scroll. You could then set the above props to high values, so that a user has to scroll far down/up the list to reach the end of the list.
|
|
497
|
+
|
|
498
|
+
|
|
486
499
|
#### Custom FlatList
|
|
487
500
|
|
|
488
501
|
The library offers the ability to provide a custom component for the `<FlatList />`, instead of the default React Native component. This allows for more flexibility and integration with libraries like [react-native-gesture-handler](react-native-gesture-handler) or other components built on top of it, like [https://ui.gorhom.dev/components/bottom-sheet](https://ui.gorhom.dev/components/bottom-sheet).
|
|
@@ -9,7 +9,8 @@ var _reactNative = require("react-native");
|
|
|
9
9
|
var _colorToRgba = require("../../utils/colorToRgba");
|
|
10
10
|
var _generateNumbers = require("../../utils/generateNumbers");
|
|
11
11
|
var _getAdjustedLimit = require("../../utils/getAdjustedLimit");
|
|
12
|
-
var
|
|
12
|
+
var _getDurationAndIndexFromScrollOffset = require("../../utils/getDurationAndIndexFromScrollOffset");
|
|
13
|
+
var _getInitialScrollIndex = require("../../utils/getInitialScrollIndex");
|
|
13
14
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
14
15
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
15
16
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
@@ -36,29 +37,44 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
|
36
37
|
padWithNItems,
|
|
37
38
|
pickerGradientOverlayProps,
|
|
38
39
|
pmLabel,
|
|
40
|
+
repeatNumbersNTimes = 3,
|
|
39
41
|
styles,
|
|
40
42
|
testID,
|
|
41
43
|
topPickerGradientOverlayProps
|
|
42
44
|
} = props;
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
const safeRepeatNumbersNTimes = (0, _react.useMemo)(() => {
|
|
46
|
+
if (!disableInfiniteScroll && repeatNumbersNTimes < 2) {
|
|
47
|
+
return 2;
|
|
48
|
+
} else if (repeatNumbersNTimes < 1) {
|
|
49
|
+
return 1;
|
|
50
|
+
}
|
|
51
|
+
return Math.round(repeatNumbersNTimes);
|
|
52
|
+
}, [disableInfiniteScroll, repeatNumbersNTimes]);
|
|
53
|
+
const numbersForFlatList = (0, _react.useMemo)(() => {
|
|
54
|
+
if (is12HourPicker) {
|
|
55
|
+
return (0, _generateNumbers.generate12HourNumbers)({
|
|
56
|
+
padNumbersWithZero,
|
|
57
|
+
repeatNTimes: safeRepeatNumbersNTimes,
|
|
58
|
+
disableInfiniteScroll,
|
|
59
|
+
padWithNItems
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return (0, _generateNumbers.generateNumbers)(numberOfItems, {
|
|
63
|
+
padNumbersWithZero,
|
|
64
|
+
repeatNTimes: safeRepeatNumbersNTimes,
|
|
65
|
+
disableInfiniteScroll,
|
|
66
|
+
padWithNItems
|
|
67
|
+
});
|
|
68
|
+
}, [disableInfiniteScroll, is12HourPicker, numberOfItems, padNumbersWithZero, padWithNItems, safeRepeatNumbersNTimes]);
|
|
69
|
+
const initialScrollIndex = (0, _react.useMemo)(() => (0, _getInitialScrollIndex.getInitialScrollIndex)({
|
|
51
70
|
disableInfiniteScroll,
|
|
52
|
-
padWithNItems
|
|
53
|
-
});
|
|
54
|
-
const numberOfItemsToShow = 1 + padWithNItems * 2;
|
|
55
|
-
const adjustedLimited = (0, _getAdjustedLimit.getAdjustedLimit)(limit, numberOfItems);
|
|
56
|
-
const initialScrollIndex = (0, _getScrollIndex.getScrollIndex)({
|
|
57
|
-
value: initialValue,
|
|
58
71
|
numberOfItems,
|
|
59
72
|
padWithNItems,
|
|
60
|
-
|
|
61
|
-
|
|
73
|
+
repeatNumbersNTimes: safeRepeatNumbersNTimes,
|
|
74
|
+
value: initialValue
|
|
75
|
+
}), [disableInfiniteScroll, initialValue, numberOfItems, padWithNItems, safeRepeatNumbersNTimes]);
|
|
76
|
+
const adjustedLimited = (0, _react.useMemo)(() => (0, _getAdjustedLimit.getAdjustedLimit)(limit, numberOfItems), [limit, numberOfItems]);
|
|
77
|
+
const numberOfItemsToShow = 1 + padWithNItems * 2;
|
|
62
78
|
|
|
63
79
|
// keep track of the latest duration as it scrolls
|
|
64
80
|
const latestDuration = (0, _react.useRef)(0);
|
|
@@ -91,28 +107,6 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
|
91
107
|
};
|
|
92
108
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
93
109
|
}, [Audio]);
|
|
94
|
-
(0, _react.useImperativeHandle)(ref, () => ({
|
|
95
|
-
reset: options => {
|
|
96
|
-
var _flatListRef$current;
|
|
97
|
-
(_flatListRef$current = flatListRef.current) === null || _flatListRef$current === void 0 || _flatListRef$current.scrollToIndex({
|
|
98
|
-
animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
|
|
99
|
-
index: initialScrollIndex
|
|
100
|
-
});
|
|
101
|
-
},
|
|
102
|
-
setValue: (value, options) => {
|
|
103
|
-
var _flatListRef$current2;
|
|
104
|
-
(_flatListRef$current2 = flatListRef.current) === null || _flatListRef$current2 === void 0 || _flatListRef$current2.scrollToIndex({
|
|
105
|
-
animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
|
|
106
|
-
index: (0, _getScrollIndex.getScrollIndex)({
|
|
107
|
-
value: value,
|
|
108
|
-
numberOfItems,
|
|
109
|
-
padWithNItems,
|
|
110
|
-
disableInfiniteScroll
|
|
111
|
-
})
|
|
112
|
-
});
|
|
113
|
-
},
|
|
114
|
-
latestDuration: latestDuration
|
|
115
|
-
}));
|
|
116
110
|
const renderItem = (0, _react.useCallback)(({
|
|
117
111
|
item
|
|
118
112
|
}) => {
|
|
@@ -149,16 +143,21 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
|
149
143
|
return;
|
|
150
144
|
}
|
|
151
145
|
if (aggressivelyGetLatestDuration) {
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
|
|
146
|
+
const newValues = (0, _getDurationAndIndexFromScrollOffset.getDurationAndIndexFromScrollOffset)({
|
|
147
|
+
disableInfiniteScroll,
|
|
148
|
+
itemHeight: styles.pickerItemContainer.height,
|
|
149
|
+
numberOfItems,
|
|
150
|
+
padWithNItems,
|
|
151
|
+
yContentOffset: e.nativeEvent.contentOffset.y
|
|
152
|
+
});
|
|
153
|
+
if (newValues.duration !== latestDuration.current) {
|
|
155
154
|
// check limits
|
|
156
|
-
if (
|
|
157
|
-
|
|
158
|
-
} else if (
|
|
159
|
-
|
|
155
|
+
if (newValues.duration > adjustedLimited.max) {
|
|
156
|
+
newValues.duration = adjustedLimited.max;
|
|
157
|
+
} else if (newValues.duration < adjustedLimited.min) {
|
|
158
|
+
newValues.duration = adjustedLimited.min;
|
|
160
159
|
}
|
|
161
|
-
latestDuration.current =
|
|
160
|
+
latestDuration.current = newValues.duration;
|
|
162
161
|
}
|
|
163
162
|
}
|
|
164
163
|
if (Haptics || Audio) {
|
|
@@ -167,10 +166,18 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
|
167
166
|
// this check stops the feedback firing when the component mounts
|
|
168
167
|
if (lastFeedbackIndex.current) {
|
|
169
168
|
// fire haptic feedback if available
|
|
170
|
-
|
|
169
|
+
try {
|
|
170
|
+
Haptics === null || Haptics === void 0 || Haptics.selectionAsync();
|
|
171
|
+
} catch {
|
|
172
|
+
// do nothing
|
|
173
|
+
}
|
|
171
174
|
|
|
172
175
|
// play click sound if available
|
|
173
|
-
|
|
176
|
+
try {
|
|
177
|
+
clickSound === null || clickSound === void 0 || clickSound.replayAsync();
|
|
178
|
+
} catch {
|
|
179
|
+
// do nothing
|
|
180
|
+
}
|
|
174
181
|
}
|
|
175
182
|
lastFeedbackIndex.current = feedbackIndex;
|
|
176
183
|
}
|
|
@@ -179,51 +186,56 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
|
179
186
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
180
187
|
[adjustedLimited.max, adjustedLimited.min, aggressivelyGetLatestDuration, clickSound, disableInfiniteScroll, numberOfItems, padWithNItems, styles.pickerItemContainer.height]);
|
|
181
188
|
const onMomentumScrollEnd = (0, _react.useCallback)(e => {
|
|
182
|
-
const
|
|
183
|
-
|
|
189
|
+
const newValues = (0, _getDurationAndIndexFromScrollOffset.getDurationAndIndexFromScrollOffset)({
|
|
190
|
+
disableInfiniteScroll,
|
|
191
|
+
itemHeight: styles.pickerItemContainer.height,
|
|
192
|
+
numberOfItems,
|
|
193
|
+
padWithNItems,
|
|
194
|
+
yContentOffset: e.nativeEvent.contentOffset.y
|
|
195
|
+
});
|
|
184
196
|
|
|
185
197
|
// check limits
|
|
186
|
-
if (
|
|
187
|
-
var _flatListRef$
|
|
188
|
-
const targetScrollIndex =
|
|
189
|
-
(_flatListRef$
|
|
198
|
+
if (newValues.duration > adjustedLimited.max) {
|
|
199
|
+
var _flatListRef$current;
|
|
200
|
+
const targetScrollIndex = newValues.index - (newValues.duration - adjustedLimited.max);
|
|
201
|
+
(_flatListRef$current = flatListRef.current) === null || _flatListRef$current === void 0 || _flatListRef$current.scrollToIndex({
|
|
190
202
|
animated: true,
|
|
191
203
|
index:
|
|
192
204
|
// guard against scrolling beyond end of list
|
|
193
205
|
targetScrollIndex >= 0 ? targetScrollIndex : adjustedLimited.max - 1
|
|
194
206
|
}); // scroll down to max
|
|
195
|
-
|
|
196
|
-
} else if (
|
|
197
|
-
var _flatListRef$
|
|
198
|
-
const targetScrollIndex =
|
|
199
|
-
(_flatListRef$
|
|
207
|
+
newValues.duration = adjustedLimited.max;
|
|
208
|
+
} else if (newValues.duration < adjustedLimited.min) {
|
|
209
|
+
var _flatListRef$current2;
|
|
210
|
+
const targetScrollIndex = newValues.index + (adjustedLimited.min - newValues.duration);
|
|
211
|
+
(_flatListRef$current2 = flatListRef.current) === null || _flatListRef$current2 === void 0 || _flatListRef$current2.scrollToIndex({
|
|
200
212
|
animated: true,
|
|
201
213
|
index:
|
|
202
214
|
// guard against scrolling beyond end of list
|
|
203
|
-
targetScrollIndex <=
|
|
215
|
+
targetScrollIndex <= numbersForFlatList.length - 1 ? targetScrollIndex : adjustedLimited.min
|
|
204
216
|
}); // scroll up to min
|
|
205
|
-
|
|
217
|
+
newValues.duration = adjustedLimited.min;
|
|
206
218
|
}
|
|
207
|
-
onDurationChange(
|
|
208
|
-
}, [adjustedLimited.max, adjustedLimited.min,
|
|
219
|
+
onDurationChange(newValues.duration);
|
|
220
|
+
}, [adjustedLimited.max, adjustedLimited.min, numbersForFlatList.length, disableInfiniteScroll, numberOfItems, onDurationChange, padWithNItems, styles.pickerItemContainer.height]);
|
|
209
221
|
const onViewableItemsChanged = (0, _react.useCallback)(({
|
|
210
222
|
viewableItems
|
|
211
223
|
}) => {
|
|
212
224
|
var _viewableItems$, _viewableItems$2;
|
|
213
225
|
if ((_viewableItems$ = viewableItems[0]) !== null && _viewableItems$ !== void 0 && _viewableItems$.index && viewableItems[0].index < numberOfItems * 0.5) {
|
|
214
|
-
var _flatListRef$
|
|
215
|
-
(_flatListRef$
|
|
226
|
+
var _flatListRef$current3;
|
|
227
|
+
(_flatListRef$current3 = flatListRef.current) === null || _flatListRef$current3 === void 0 || _flatListRef$current3.scrollToIndex({
|
|
216
228
|
animated: false,
|
|
217
229
|
index: viewableItems[0].index + numberOfItems
|
|
218
230
|
});
|
|
219
|
-
} else if ((_viewableItems$2 = viewableItems[0]) !== null && _viewableItems$2 !== void 0 && _viewableItems$2.index && viewableItems[0].index >= numberOfItems *
|
|
220
|
-
var _flatListRef$
|
|
221
|
-
(_flatListRef$
|
|
231
|
+
} else if ((_viewableItems$2 = viewableItems[0]) !== null && _viewableItems$2 !== void 0 && _viewableItems$2.index && viewableItems[0].index >= numberOfItems * (safeRepeatNumbersNTimes - 0.5)) {
|
|
232
|
+
var _flatListRef$current4;
|
|
233
|
+
(_flatListRef$current4 = flatListRef.current) === null || _flatListRef$current4 === void 0 || _flatListRef$current4.scrollToIndex({
|
|
222
234
|
animated: false,
|
|
223
235
|
index: viewableItems[0].index - numberOfItems
|
|
224
236
|
});
|
|
225
237
|
}
|
|
226
|
-
}, [numberOfItems]);
|
|
238
|
+
}, [numberOfItems, safeRepeatNumbersNTimes]);
|
|
227
239
|
const getItemLayout = (0, _react.useCallback)((_, index) => ({
|
|
228
240
|
length: styles.pickerItemContainer.height,
|
|
229
241
|
offset: styles.pickerItemContainer.height * index,
|
|
@@ -231,10 +243,33 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
|
231
243
|
}), [styles.pickerItemContainer.height]);
|
|
232
244
|
const viewabilityConfigCallbackPairs = (0, _react.useRef)([{
|
|
233
245
|
viewabilityConfig: {
|
|
234
|
-
viewAreaCoveragePercentThreshold:
|
|
246
|
+
viewAreaCoveragePercentThreshold: 0
|
|
235
247
|
},
|
|
236
248
|
onViewableItemsChanged: onViewableItemsChanged
|
|
237
249
|
}]);
|
|
250
|
+
(0, _react.useImperativeHandle)(ref, () => ({
|
|
251
|
+
reset: options => {
|
|
252
|
+
var _flatListRef$current5;
|
|
253
|
+
(_flatListRef$current5 = flatListRef.current) === null || _flatListRef$current5 === void 0 || _flatListRef$current5.scrollToIndex({
|
|
254
|
+
animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
|
|
255
|
+
index: initialScrollIndex
|
|
256
|
+
});
|
|
257
|
+
},
|
|
258
|
+
setValue: (value, options) => {
|
|
259
|
+
var _flatListRef$current6;
|
|
260
|
+
(_flatListRef$current6 = flatListRef.current) === null || _flatListRef$current6 === void 0 || _flatListRef$current6.scrollToIndex({
|
|
261
|
+
animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
|
|
262
|
+
index: (0, _getInitialScrollIndex.getInitialScrollIndex)({
|
|
263
|
+
disableInfiniteScroll,
|
|
264
|
+
numberOfItems,
|
|
265
|
+
padWithNItems,
|
|
266
|
+
repeatNumbersNTimes: safeRepeatNumbersNTimes,
|
|
267
|
+
value: value
|
|
268
|
+
})
|
|
269
|
+
});
|
|
270
|
+
},
|
|
271
|
+
latestDuration: latestDuration
|
|
272
|
+
}));
|
|
238
273
|
return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
239
274
|
pointerEvents: isDisabled ? "none" : undefined,
|
|
240
275
|
style: [{
|
|
@@ -244,7 +279,7 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
|
244
279
|
testID: testID
|
|
245
280
|
}, /*#__PURE__*/_react.default.createElement(FlatList, {
|
|
246
281
|
ref: flatListRef,
|
|
247
|
-
data:
|
|
282
|
+
data: numbersForFlatList,
|
|
248
283
|
decelerationRate: 0.88,
|
|
249
284
|
getItemLayout: getItemLayout,
|
|
250
285
|
initialScrollIndex: initialScrollIndex,
|
|
@@ -259,7 +294,7 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
|
259
294
|
snapToAlignment: "start"
|
|
260
295
|
// used in place of snapToOffset due to bug on Android
|
|
261
296
|
,
|
|
262
|
-
snapToOffsets: [...Array(
|
|
297
|
+
snapToOffsets: [...Array(numbersForFlatList.length)].map((_, i) => i * styles.pickerItemContainer.height),
|
|
263
298
|
testID: "duration-scroll-flatlist",
|
|
264
299
|
viewabilityConfigCallbackPairs: !disableInfiniteScroll ? viewabilityConfigCallbackPairs === null || viewabilityConfigCallbackPairs === void 0 ? void 0 : viewabilityConfigCallbackPairs.current : undefined,
|
|
265
300
|
windowSize: numberOfItemsToShow
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_colorToRgba","_generateNumbers","_getAdjustedLimit","_getScrollIndex","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","DurationScroll","forwardRef","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","bottomPickerGradientOverlayProps","clickSoundAsset","disableInfiniteScroll","FlatList","RNFlatList","Haptics","initialValue","is12HourPicker","isDisabled","label","limit","LinearGradient","numberOfItems","onDurationChange","padNumbersWithZero","padWithNItems","pickerGradientOverlayProps","pmLabel","styles","testID","topPickerGradientOverlayProps","data","generateNumbers","repeatNTimes","generate12HourNumbers","numberOfItemsToShow","adjustedLimited","getAdjustedLimit","initialScrollIndex","getScrollIndex","value","latestDuration","useRef","lastFeedbackIndex","flatListRef","clickSound","setClickSound","useState","useEffect","loadSound","sound","Sound","createAsync","uri","shouldPlay","unloadAsync","useImperativeHandle","reset","options","_flatListRef$current","current","scrollToIndex","animated","index","setValue","_flatListRef$current2","renderItem","useCallback","item","stringItem","intItem","isAm","parseInt","includes","replace","createElement","View","key","style","pickerItemContainer","Text","pickerItem","max","min","disabledPickerItem","pointerEvents","pickerAmPmContainer","pickerAmPmLabel","onScroll","newIndex","Math","round","nativeEvent","contentOffset","y","height","newDuration","feedbackIndex","selectionAsync","replayAsync","onMomentumScrollEnd","_flatListRef$current3","targetScrollIndex","_flatListRef$current4","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current5","_flatListRef$current6","getItemLayout","_","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","undefined","overflow","disabledPickerContainer","decelerationRate","keyExtractor","toString","nestedScrollEnabled","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","windowSize","pickerLabelContainer","pickerLabel","Fragment","colors","pickerContainer","backgroundColor","colorToRgba","color","opacity","end","x","start","pickerGradientOverlay","top","bottom","_default","exports","React","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useState,\n useEffect,\n} from \"react\";\n\nimport { View, Text, FlatList as RNFlatList } from \"react-native\";\nimport type {\n ViewabilityConfigCallbackPairs,\n ViewToken,\n NativeSyntheticEvent,\n NativeScrollEvent,\n} from \"react-native\";\n\nimport { colorToRgba } from \"../../utils/colorToRgba\";\nimport {\n generate12HourNumbers,\n generateNumbers,\n} from \"../../utils/generateNumbers\";\nimport { getAdjustedLimit } from \"../../utils/getAdjustedLimit\";\nimport { getScrollIndex } from \"../../utils/getScrollIndex\";\n\nimport type { DurationScrollProps, DurationScrollRef } from \"./types\";\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(\n (props, ref) => {\n const {\n aggressivelyGetLatestDuration,\n allowFontScaling = false,\n amLabel,\n Audio,\n bottomPickerGradientOverlayProps,\n clickSoundAsset,\n disableInfiniteScroll = false,\n FlatList = RNFlatList,\n Haptics,\n initialValue = 0,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n numberOfItems,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerGradientOverlayProps,\n pmLabel,\n styles,\n testID,\n topPickerGradientOverlayProps,\n } = props;\n\n const data = !is12HourPicker\n ? generateNumbers(numberOfItems, {\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n })\n : generate12HourNumbers({\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n });\n\n const numberOfItemsToShow = 1 + padWithNItems * 2;\n\n const adjustedLimited = getAdjustedLimit(limit, numberOfItems);\n\n const initialScrollIndex = getScrollIndex({\n value: initialValue,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n });\n\n // keep track of the latest duration as it scrolls\n const latestDuration = useRef(0);\n // keep track of the last index scrolled past for haptic/audio feedback\n const lastFeedbackIndex = useRef(0);\n\n const flatListRef = useRef<RNFlatList | null>(null);\n\n const [clickSound, setClickSound] = useState<\n | {\n replayAsync: () => Promise<void>;\n unloadAsync: () => Promise<void>;\n }\n | undefined\n >();\n\n // Preload the sound when the component mounts\n useEffect(() => {\n const loadSound = async () => {\n if (Audio) {\n const { sound } = await Audio.Sound.createAsync(\n clickSoundAsset ?? {\n // use a hosted sound as a fallback (do not use local asset due to loader issues\n // in some environments when including mp3 in library)\n uri: \"https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I\",\n },\n { shouldPlay: false }\n );\n setClickSound(sound);\n }\n };\n loadSound();\n\n // Unload sound when component unmounts\n return () => {\n clickSound?.unloadAsync();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [Audio]);\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: initialScrollIndex,\n });\n },\n setValue: (value, options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: getScrollIndex({\n value: value,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n }),\n });\n },\n latestDuration: latestDuration,\n }));\n\n const renderItem = useCallback(\n ({ item }: { item: string }) => {\n let stringItem = item;\n let intItem: number;\n let isAm: boolean | undefined;\n\n if (!is12HourPicker) {\n intItem = parseInt(item);\n } else {\n isAm = item.includes(\"AM\");\n stringItem = item.replace(/\\s[AP]M/g, \"\");\n intItem = parseInt(stringItem);\n }\n\n return (\n <View\n key={item}\n style={styles.pickerItemContainer}\n testID=\"picker-item\">\n <Text\n allowFontScaling={allowFontScaling}\n style={[\n styles.pickerItem,\n intItem > adjustedLimited.max ||\n intItem < adjustedLimited.min\n ? styles.disabledPickerItem\n : {},\n ]}>\n {stringItem}\n </Text>\n {is12HourPicker ? (\n <View\n pointerEvents=\"none\"\n style={styles.pickerAmPmContainer}>\n <Text\n allowFontScaling={allowFontScaling}\n style={[styles.pickerAmPmLabel]}>\n {isAm ? amLabel : pmLabel}\n </Text>\n </View>\n ) : null}\n </View>\n );\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n allowFontScaling,\n amLabel,\n is12HourPicker,\n pmLabel,\n styles.disabledPickerItem,\n styles.pickerAmPmContainer,\n styles.pickerAmPmLabel,\n styles.pickerItem,\n styles.pickerItemContainer,\n ]\n );\n\n const onScroll = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n // this function is only used when the picker is in a modal and/or has Haptic/Audio feedback\n // it is used to ensure that the modal gets the latest duration on clicking\n // the confirm button, even if the scrollview is still scrolling\n if (!aggressivelyGetLatestDuration && !Haptics && !Audio) {\n return;\n }\n\n if (aggressivelyGetLatestDuration) {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n if (newDuration !== latestDuration.current) {\n // check limits\n if (newDuration > adjustedLimited.max) {\n newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n newDuration = adjustedLimited.min;\n }\n\n latestDuration.current = newDuration;\n }\n }\n\n if (Haptics || Audio) {\n const feedbackIndex = Math.round(\n (e.nativeEvent.contentOffset.y +\n styles.pickerItemContainer.height / 2) /\n styles.pickerItemContainer.height\n );\n\n if (feedbackIndex !== lastFeedbackIndex.current) {\n // this check stops the feedback firing when the component mounts\n if (lastFeedbackIndex.current) {\n // fire haptic feedback if available\n Haptics?.selectionAsync();\n\n // play click sound if available\n clickSound?.replayAsync();\n }\n\n lastFeedbackIndex.current = feedbackIndex;\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n adjustedLimited.max,\n adjustedLimited.min,\n aggressivelyGetLatestDuration,\n clickSound,\n disableInfiniteScroll,\n numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n // check limits\n if (newDuration > adjustedLimited.max) {\n const targetScrollIndex =\n newIndex - (newDuration - adjustedLimited.max);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex >= 0\n ? targetScrollIndex\n : adjustedLimited.max - 1,\n }); // scroll down to max\n newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n const targetScrollIndex =\n newIndex + (adjustedLimited.min - newDuration);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex <= data.length - 1\n ? targetScrollIndex\n : adjustedLimited.min,\n }); // scroll up to min\n newDuration = adjustedLimited.min;\n }\n\n onDurationChange(newDuration);\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n data.length,\n disableInfiniteScroll,\n numberOfItems,\n onDurationChange,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onViewableItemsChanged = useCallback(\n ({ viewableItems }: { viewableItems: ViewToken[] }) => {\n if (\n viewableItems[0]?.index &&\n viewableItems[0].index < numberOfItems * 0.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index + numberOfItems,\n });\n } else if (\n viewableItems[0]?.index &&\n viewableItems[0].index >= numberOfItems * 2.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index - numberOfItems,\n });\n }\n },\n [numberOfItems]\n );\n\n const getItemLayout = useCallback(\n (_: ArrayLike<string> | null | undefined, index: number) => ({\n length: styles.pickerItemContainer.height,\n offset: styles.pickerItemContainer.height * index,\n index,\n }),\n [styles.pickerItemContainer.height]\n );\n\n const viewabilityConfigCallbackPairs =\n useRef<ViewabilityConfigCallbackPairs>([\n {\n viewabilityConfig: { viewAreaCoveragePercentThreshold: 25 },\n onViewableItemsChanged: onViewableItemsChanged,\n },\n ]);\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n {\n height:\n styles.pickerItemContainer.height *\n numberOfItemsToShow,\n overflow: \"visible\",\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}>\n <FlatList\n ref={flatListRef}\n data={data}\n decelerationRate={0.88}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={(_, index) => index.toString()}\n nestedScrollEnabled\n onMomentumScrollEnd={onMomentumScrollEnd}\n onScroll={onScroll}\n renderItem={renderItem}\n scrollEnabled={!isDisabled}\n scrollEventThrottle={16}\n showsVerticalScrollIndicator={false}\n snapToAlignment=\"start\"\n // used in place of snapToOffset due to bug on Android\n snapToOffsets={[...Array(data.length)].map(\n (_, i) => i * styles.pickerItemContainer.height\n )}\n testID=\"duration-scroll-flatlist\"\n viewabilityConfigCallbackPairs={\n !disableInfiniteScroll\n ? viewabilityConfigCallbackPairs?.current\n : undefined\n }\n windowSize={numberOfItemsToShow}\n />\n <View pointerEvents=\"none\" style={styles.pickerLabelContainer}>\n {typeof label === \"string\" ? (\n <Text\n allowFontScaling={allowFontScaling}\n style={styles.pickerLabel}>\n {label}\n </Text>\n ) : (\n label ?? null\n )}\n </View>\n {LinearGradient ? (\n <>\n <LinearGradient\n colors={[\n styles.pickerContainer.backgroundColor ??\n \"white\",\n colorToRgba({\n color:\n styles.pickerContainer\n .backgroundColor ?? \"white\",\n opacity: 0,\n }),\n ]}\n end={{ x: 1, y: 1 }}\n pointerEvents=\"none\"\n start={{ x: 1, y: 0.3 }}\n {...pickerGradientOverlayProps}\n {...topPickerGradientOverlayProps}\n style={[styles.pickerGradientOverlay, { top: 0 }]}\n />\n <LinearGradient\n colors={[\n colorToRgba({\n color:\n styles.pickerContainer\n .backgroundColor ?? \"white\",\n opacity: 0,\n }),\n styles.pickerContainer.backgroundColor ??\n \"white\",\n ]}\n end={{ x: 1, y: 0.7 }}\n pointerEvents=\"none\"\n start={{ x: 1, y: 0 }}\n {...pickerGradientOverlayProps}\n {...bottomPickerGradientOverlayProps}\n style={[\n styles.pickerGradientOverlay,\n { bottom: -1 },\n ]}\n />\n </>\n ) : null}\n </View>\n );\n }\n);\n\nexport default React.memo(DurationScroll);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_colorToRgba","_generateNumbers","_getAdjustedLimit","_getDurationAndIndexFromScrollOffset","_getInitialScrollIndex","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","DurationScroll","forwardRef","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","bottomPickerGradientOverlayProps","clickSoundAsset","disableInfiniteScroll","FlatList","RNFlatList","Haptics","initialValue","is12HourPicker","isDisabled","label","limit","LinearGradient","numberOfItems","onDurationChange","padNumbersWithZero","padWithNItems","pickerGradientOverlayProps","pmLabel","repeatNumbersNTimes","styles","testID","topPickerGradientOverlayProps","safeRepeatNumbersNTimes","useMemo","Math","round","numbersForFlatList","generate12HourNumbers","repeatNTimes","generateNumbers","initialScrollIndex","getInitialScrollIndex","value","adjustedLimited","getAdjustedLimit","numberOfItemsToShow","latestDuration","useRef","lastFeedbackIndex","flatListRef","clickSound","setClickSound","useState","useEffect","loadSound","sound","Sound","createAsync","uri","shouldPlay","unloadAsync","renderItem","useCallback","item","stringItem","intItem","isAm","parseInt","includes","replace","createElement","View","key","style","pickerItemContainer","Text","pickerItem","max","min","disabledPickerItem","pointerEvents","pickerAmPmContainer","pickerAmPmLabel","onScroll","newValues","getDurationAndIndexFromScrollOffset","itemHeight","height","yContentOffset","nativeEvent","contentOffset","y","duration","current","feedbackIndex","selectionAsync","replayAsync","onMomentumScrollEnd","_flatListRef$current","targetScrollIndex","index","scrollToIndex","animated","_flatListRef$current2","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current3","_flatListRef$current4","getItemLayout","_","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","useImperativeHandle","reset","options","_flatListRef$current5","setValue","_flatListRef$current6","undefined","overflow","disabledPickerContainer","data","decelerationRate","keyExtractor","toString","nestedScrollEnabled","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","windowSize","pickerLabelContainer","pickerLabel","Fragment","colors","pickerContainer","backgroundColor","colorToRgba","color","opacity","end","x","start","pickerGradientOverlay","top","bottom","_default","exports","React","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useState,\n useEffect,\n useMemo,\n} from \"react\";\n\nimport { View, Text, FlatList as RNFlatList } from \"react-native\";\nimport type {\n ViewabilityConfigCallbackPairs,\n ViewToken,\n NativeSyntheticEvent,\n NativeScrollEvent,\n} from \"react-native\";\n\nimport { colorToRgba } from \"../../utils/colorToRgba\";\nimport {\n generate12HourNumbers,\n generateNumbers,\n} from \"../../utils/generateNumbers\";\nimport { getAdjustedLimit } from \"../../utils/getAdjustedLimit\";\nimport { getDurationAndIndexFromScrollOffset } from \"../../utils/getDurationAndIndexFromScrollOffset\";\nimport { getInitialScrollIndex } from \"../../utils/getInitialScrollIndex\";\n\nimport type { DurationScrollProps, DurationScrollRef } from \"./types\";\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(\n (props, ref) => {\n const {\n aggressivelyGetLatestDuration,\n allowFontScaling = false,\n amLabel,\n Audio,\n bottomPickerGradientOverlayProps,\n clickSoundAsset,\n disableInfiniteScroll = false,\n FlatList = RNFlatList,\n Haptics,\n initialValue = 0,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n numberOfItems,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerGradientOverlayProps,\n pmLabel,\n repeatNumbersNTimes = 3,\n styles,\n testID,\n topPickerGradientOverlayProps,\n } = props;\n\n const safeRepeatNumbersNTimes = useMemo(() => {\n if (!disableInfiniteScroll && repeatNumbersNTimes < 2) {\n return 2;\n } else if (repeatNumbersNTimes < 1) {\n return 1;\n }\n\n return Math.round(repeatNumbersNTimes);\n }, [disableInfiniteScroll, repeatNumbersNTimes]);\n\n const numbersForFlatList = useMemo(() => {\n if (is12HourPicker) {\n return generate12HourNumbers({\n padNumbersWithZero,\n repeatNTimes: safeRepeatNumbersNTimes,\n disableInfiniteScroll,\n padWithNItems,\n });\n }\n\n return generateNumbers(numberOfItems, {\n padNumbersWithZero,\n repeatNTimes: safeRepeatNumbersNTimes,\n disableInfiniteScroll,\n padWithNItems,\n });\n }, [\n disableInfiniteScroll,\n is12HourPicker,\n numberOfItems,\n padNumbersWithZero,\n padWithNItems,\n safeRepeatNumbersNTimes,\n ]);\n\n const initialScrollIndex = useMemo(\n () =>\n getInitialScrollIndex({\n disableInfiniteScroll,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes: safeRepeatNumbersNTimes,\n value: initialValue,\n }),\n [\n disableInfiniteScroll,\n initialValue,\n numberOfItems,\n padWithNItems,\n safeRepeatNumbersNTimes,\n ]\n );\n\n const adjustedLimited = useMemo(\n () => getAdjustedLimit(limit, numberOfItems),\n [limit, numberOfItems]\n );\n\n const numberOfItemsToShow = 1 + padWithNItems * 2;\n\n // keep track of the latest duration as it scrolls\n const latestDuration = useRef(0);\n // keep track of the last index scrolled past for haptic/audio feedback\n const lastFeedbackIndex = useRef(0);\n\n const flatListRef = useRef<RNFlatList | null>(null);\n\n const [clickSound, setClickSound] = useState<\n | {\n replayAsync: () => Promise<void>;\n unloadAsync: () => Promise<void>;\n }\n | undefined\n >();\n\n // Preload the sound when the component mounts\n useEffect(() => {\n const loadSound = async () => {\n if (Audio) {\n const { sound } = await Audio.Sound.createAsync(\n clickSoundAsset ?? {\n // use a hosted sound as a fallback (do not use local asset due to loader issues\n // in some environments when including mp3 in library)\n uri: \"https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I\",\n },\n { shouldPlay: false }\n );\n setClickSound(sound);\n }\n };\n\n loadSound();\n\n // Unload sound when component unmounts\n return () => {\n clickSound?.unloadAsync();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [Audio]);\n\n const renderItem = useCallback(\n ({ item }: { item: string }) => {\n let stringItem = item;\n let intItem: number;\n let isAm: boolean | undefined;\n\n if (!is12HourPicker) {\n intItem = parseInt(item);\n } else {\n isAm = item.includes(\"AM\");\n stringItem = item.replace(/\\s[AP]M/g, \"\");\n intItem = parseInt(stringItem);\n }\n\n return (\n <View\n key={item}\n style={styles.pickerItemContainer}\n testID=\"picker-item\">\n <Text\n allowFontScaling={allowFontScaling}\n style={[\n styles.pickerItem,\n intItem > adjustedLimited.max ||\n intItem < adjustedLimited.min\n ? styles.disabledPickerItem\n : {},\n ]}>\n {stringItem}\n </Text>\n {is12HourPicker ? (\n <View\n pointerEvents=\"none\"\n style={styles.pickerAmPmContainer}>\n <Text\n allowFontScaling={allowFontScaling}\n style={[styles.pickerAmPmLabel]}>\n {isAm ? amLabel : pmLabel}\n </Text>\n </View>\n ) : null}\n </View>\n );\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n allowFontScaling,\n amLabel,\n is12HourPicker,\n pmLabel,\n styles.disabledPickerItem,\n styles.pickerAmPmContainer,\n styles.pickerAmPmLabel,\n styles.pickerItem,\n styles.pickerItemContainer,\n ]\n );\n\n const onScroll = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n // this function is only used when the picker is in a modal and/or has Haptic/Audio feedback\n // it is used to ensure that the modal gets the latest duration on clicking\n // the confirm button, even if the scrollview is still scrolling\n if (!aggressivelyGetLatestDuration && !Haptics && !Audio) {\n return;\n }\n\n if (aggressivelyGetLatestDuration) {\n const newValues = getDurationAndIndexFromScrollOffset({\n disableInfiniteScroll,\n itemHeight: styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n yContentOffset: e.nativeEvent.contentOffset.y,\n });\n\n if (newValues.duration !== latestDuration.current) {\n // check limits\n if (newValues.duration > adjustedLimited.max) {\n newValues.duration = adjustedLimited.max;\n } else if (newValues.duration < adjustedLimited.min) {\n newValues.duration = adjustedLimited.min;\n }\n\n latestDuration.current = newValues.duration;\n }\n }\n\n if (Haptics || Audio) {\n const feedbackIndex = Math.round(\n (e.nativeEvent.contentOffset.y +\n styles.pickerItemContainer.height / 2) /\n styles.pickerItemContainer.height\n );\n\n if (feedbackIndex !== lastFeedbackIndex.current) {\n // this check stops the feedback firing when the component mounts\n if (lastFeedbackIndex.current) {\n // fire haptic feedback if available\n try {\n Haptics?.selectionAsync();\n } catch {\n // do nothing\n }\n\n // play click sound if available\n try {\n clickSound?.replayAsync();\n } catch {\n // do nothing\n }\n }\n\n lastFeedbackIndex.current = feedbackIndex;\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n adjustedLimited.max,\n adjustedLimited.min,\n aggressivelyGetLatestDuration,\n clickSound,\n disableInfiniteScroll,\n numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const newValues = getDurationAndIndexFromScrollOffset({\n disableInfiniteScroll,\n itemHeight: styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n yContentOffset: e.nativeEvent.contentOffset.y,\n });\n\n // check limits\n if (newValues.duration > adjustedLimited.max) {\n const targetScrollIndex =\n newValues.index -\n (newValues.duration - adjustedLimited.max);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex >= 0\n ? targetScrollIndex\n : adjustedLimited.max - 1,\n }); // scroll down to max\n newValues.duration = adjustedLimited.max;\n } else if (newValues.duration < adjustedLimited.min) {\n const targetScrollIndex =\n newValues.index +\n (adjustedLimited.min - newValues.duration);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex <= numbersForFlatList.length - 1\n ? targetScrollIndex\n : adjustedLimited.min,\n }); // scroll up to min\n newValues.duration = adjustedLimited.min;\n }\n\n onDurationChange(newValues.duration);\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n numbersForFlatList.length,\n disableInfiniteScroll,\n numberOfItems,\n onDurationChange,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onViewableItemsChanged = useCallback(\n ({ viewableItems }: { viewableItems: ViewToken[] }) => {\n if (\n viewableItems[0]?.index &&\n viewableItems[0].index < numberOfItems * 0.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index + numberOfItems,\n });\n } else if (\n viewableItems[0]?.index &&\n viewableItems[0].index >=\n numberOfItems * (safeRepeatNumbersNTimes - 0.5)\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index - numberOfItems,\n });\n }\n },\n [numberOfItems, safeRepeatNumbersNTimes]\n );\n\n const getItemLayout = useCallback(\n (_: ArrayLike<string> | null | undefined, index: number) => ({\n length: styles.pickerItemContainer.height,\n offset: styles.pickerItemContainer.height * index,\n index,\n }),\n [styles.pickerItemContainer.height]\n );\n\n const viewabilityConfigCallbackPairs =\n useRef<ViewabilityConfigCallbackPairs>([\n {\n viewabilityConfig: { viewAreaCoveragePercentThreshold: 0 },\n onViewableItemsChanged: onViewableItemsChanged,\n },\n ]);\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: initialScrollIndex,\n });\n },\n setValue: (value, options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: getInitialScrollIndex({\n disableInfiniteScroll,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes: safeRepeatNumbersNTimes,\n value: value,\n }),\n });\n },\n latestDuration: latestDuration,\n }));\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n {\n height:\n styles.pickerItemContainer.height *\n numberOfItemsToShow,\n overflow: \"visible\",\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}>\n <FlatList\n ref={flatListRef}\n data={numbersForFlatList}\n decelerationRate={0.88}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={(_, index) => index.toString()}\n nestedScrollEnabled\n onMomentumScrollEnd={onMomentumScrollEnd}\n onScroll={onScroll}\n renderItem={renderItem}\n scrollEnabled={!isDisabled}\n scrollEventThrottle={16}\n showsVerticalScrollIndicator={false}\n snapToAlignment=\"start\"\n // used in place of snapToOffset due to bug on Android\n snapToOffsets={[...Array(numbersForFlatList.length)].map(\n (_, i) => i * styles.pickerItemContainer.height\n )}\n testID=\"duration-scroll-flatlist\"\n viewabilityConfigCallbackPairs={\n !disableInfiniteScroll\n ? viewabilityConfigCallbackPairs?.current\n : undefined\n }\n windowSize={numberOfItemsToShow}\n />\n <View pointerEvents=\"none\" style={styles.pickerLabelContainer}>\n {typeof label === \"string\" ? (\n <Text\n allowFontScaling={allowFontScaling}\n style={styles.pickerLabel}>\n {label}\n </Text>\n ) : (\n label ?? null\n )}\n </View>\n {LinearGradient ? (\n <>\n <LinearGradient\n colors={[\n styles.pickerContainer.backgroundColor ??\n \"white\",\n colorToRgba({\n color:\n styles.pickerContainer\n .backgroundColor ?? \"white\",\n opacity: 0,\n }),\n ]}\n end={{ x: 1, y: 1 }}\n pointerEvents=\"none\"\n start={{ x: 1, y: 0.3 }}\n {...pickerGradientOverlayProps}\n {...topPickerGradientOverlayProps}\n style={[styles.pickerGradientOverlay, { top: 0 }]}\n />\n <LinearGradient\n colors={[\n colorToRgba({\n color:\n styles.pickerContainer\n .backgroundColor ?? \"white\",\n opacity: 0,\n }),\n styles.pickerContainer.backgroundColor ??\n \"white\",\n ]}\n end={{ x: 1, y: 0.7 }}\n pointerEvents=\"none\"\n start={{ x: 1, y: 0 }}\n {...pickerGradientOverlayProps}\n {...bottomPickerGradientOverlayProps}\n style={[\n styles.pickerGradientOverlay,\n { bottom: -1 },\n ]}\n />\n </>\n ) : null}\n </View>\n );\n }\n);\n\nexport default React.memo(DurationScroll);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { MutableRefObject } from \"react\";\n\nimport type {\n View,\n FlatList as RNFlatList,\n FlatListProps as RNFlatListProps,\n} from \"react-native\";\n\nimport type { generateStyles } from \"../TimerPicker/styles\";\n\nexport type CustomFlatList = <ItemT = any>(\n props: React.PropsWithChildren<\n RNFlatListProps<ItemT> & React.RefAttributes<RNFlatList<ItemT>>\n >,\n ref: React.ForwardedRef<RNFlatList<ItemT>>\n) => React.ReactElement | null;\n\nexport interface DurationScrollProps {\n Audio?: any;\n FlatList?: CustomFlatList;\n Haptics?: any;\n LinearGradient?: any;\n aggressivelyGetLatestDuration: boolean;\n allowFontScaling?: boolean;\n amLabel?: string;\n bottomPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n clickSoundAsset?: SoundAssetType;\n disableInfiniteScroll?: boolean;\n initialValue?: number;\n is12HourPicker?: boolean;\n isDisabled?: boolean;\n label?: string | React.ReactElement;\n limit?: LimitType;\n numberOfItems: number;\n onDurationChange: (duration: number) => void;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n pmLabel?: string;\n styles: ReturnType<typeof generateStyles>;\n testID?: string;\n topPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n}\n\nexport interface DurationScrollRef {\n latestDuration: MutableRefObject<number>;\n reset: (options?: { animated?: boolean }) => void;\n setValue: (value: number, options?: { animated?: boolean }) => void;\n}\n\ntype LinearGradientPoint = {\n x: number;\n y: number;\n};\n\nexport type LinearGradientProps = React.ComponentProps<typeof View> & {\n colors: string[];\n end?: LinearGradientPoint | null;\n locations?: number[] | null;\n start?: LinearGradientPoint | null;\n};\n\nexport type LimitType = {\n max?: number;\n min?: number;\n};\n\nexport type SoundAssetType =\n | number\n | {\n headers?: Record<string, string>;\n overrideFileExtensionAndroid?: string;\n uri: string;\n };\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { MutableRefObject } from \"react\";\n\nimport type {\n View,\n FlatList as RNFlatList,\n FlatListProps as RNFlatListProps,\n} from \"react-native\";\n\nimport type { generateStyles } from \"../TimerPicker/styles\";\n\nexport type CustomFlatList = <ItemT = any>(\n props: React.PropsWithChildren<\n RNFlatListProps<ItemT> & React.RefAttributes<RNFlatList<ItemT>>\n >,\n ref: React.ForwardedRef<RNFlatList<ItemT>>\n) => React.ReactElement | null;\n\nexport interface DurationScrollProps {\n Audio?: any;\n FlatList?: CustomFlatList;\n Haptics?: any;\n LinearGradient?: any;\n aggressivelyGetLatestDuration: boolean;\n allowFontScaling?: boolean;\n amLabel?: string;\n bottomPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n clickSoundAsset?: SoundAssetType;\n disableInfiniteScroll?: boolean;\n initialValue?: number;\n is12HourPicker?: boolean;\n isDisabled?: boolean;\n label?: string | React.ReactElement;\n limit?: LimitType;\n numberOfItems: number;\n onDurationChange: (duration: number) => void;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n pmLabel?: string;\n repeatNumbersNTimes?: number;\n styles: ReturnType<typeof generateStyles>;\n testID?: string;\n topPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n}\n\nexport interface DurationScrollRef {\n latestDuration: MutableRefObject<number>;\n reset: (options?: { animated?: boolean }) => void;\n setValue: (value: number, options?: { animated?: boolean }) => void;\n}\n\ntype LinearGradientPoint = {\n x: number;\n y: number;\n};\n\nexport type LinearGradientProps = React.ComponentProps<typeof View> & {\n colors: string[];\n end?: LinearGradientPoint | null;\n locations?: number[] | null;\n start?: LinearGradientPoint | null;\n};\n\nexport type LimitType = {\n max?: number;\n min?: number;\n};\n\nexport type SoundAssetType =\n | number\n | {\n headers?: Record<string, string>;\n overrideFileExtensionAndroid?: string;\n uri: string;\n };\n"],"mappings":"","ignoreList":[]}
|
|
@@ -35,6 +35,9 @@ const TimerPicker = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
|
35
35
|
padWithNItems = 1,
|
|
36
36
|
pickerContainerProps,
|
|
37
37
|
pmLabel = "pm",
|
|
38
|
+
repeatHourNumbersNTimes = 7,
|
|
39
|
+
repeatMinuteNumbersNTimes = 3,
|
|
40
|
+
repeatSecondNumbersNTimes = 3,
|
|
38
41
|
secondLabel,
|
|
39
42
|
secondLimit,
|
|
40
43
|
secondsPickerIsDisabled = false,
|
|
@@ -42,15 +45,24 @@ const TimerPicker = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
|
42
45
|
use12HourPicker = false,
|
|
43
46
|
...otherProps
|
|
44
47
|
} = props;
|
|
45
|
-
const
|
|
48
|
+
const safePadWithNItems = (0, _react.useMemo)(() => {
|
|
49
|
+
if (padWithNItems < 0) {
|
|
50
|
+
return 0;
|
|
51
|
+
}
|
|
52
|
+
const maxPadWithNItems = hideHours ? 15 : 6;
|
|
53
|
+
if (padWithNItems > maxPadWithNItems) {
|
|
54
|
+
return maxPadWithNItems;
|
|
55
|
+
}
|
|
56
|
+
return Math.round(padWithNItems);
|
|
57
|
+
}, [hideHours, padWithNItems]);
|
|
46
58
|
const styles = (0, _react.useMemo)(() => (0, _styles.generateStyles)(customStyles, {
|
|
47
|
-
padWithNItems:
|
|
48
|
-
}), [
|
|
49
|
-
const safeInitialValue = {
|
|
59
|
+
padWithNItems: safePadWithNItems
|
|
60
|
+
}), [safePadWithNItems, customStyles]);
|
|
61
|
+
const safeInitialValue = (0, _react.useMemo)(() => ({
|
|
50
62
|
hours: (initialValue === null || initialValue === void 0 ? void 0 : initialValue.hours) ?? 0,
|
|
51
63
|
minutes: (initialValue === null || initialValue === void 0 ? void 0 : initialValue.minutes) ?? 0,
|
|
52
64
|
seconds: (initialValue === null || initialValue === void 0 ? void 0 : initialValue.seconds) ?? 0
|
|
53
|
-
};
|
|
65
|
+
}), [initialValue === null || initialValue === void 0 ? void 0 : initialValue.hours, initialValue === null || initialValue === void 0 ? void 0 : initialValue.minutes, initialValue === null || initialValue === void 0 ? void 0 : initialValue.seconds]);
|
|
54
66
|
const [selectedHours, setSelectedHours] = (0, _react.useState)(safeInitialValue.hours);
|
|
55
67
|
const [selectedMinutes, setSelectedMinutes] = (0, _react.useState)(safeInitialValue.minutes);
|
|
56
68
|
const [selectedSeconds, setSelectedSeconds] = (0, _react.useState)(safeInitialValue.seconds);
|
|
@@ -107,11 +119,12 @@ const TimerPicker = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
|
107
119
|
isDisabled: hoursPickerIsDisabled,
|
|
108
120
|
label: hourLabel ?? (!use12HourPicker ? "h" : undefined),
|
|
109
121
|
limit: hourLimit,
|
|
110
|
-
numberOfItems:
|
|
122
|
+
numberOfItems: 24,
|
|
111
123
|
onDurationChange: setSelectedHours,
|
|
112
124
|
padNumbersWithZero: padHoursWithZero,
|
|
113
|
-
padWithNItems:
|
|
125
|
+
padWithNItems: safePadWithNItems,
|
|
114
126
|
pmLabel: pmLabel,
|
|
127
|
+
repeatNumbersNTimes: repeatHourNumbersNTimes,
|
|
115
128
|
styles: styles,
|
|
116
129
|
testID: "duration-scroll-hour"
|
|
117
130
|
}, otherProps)) : null, !hideMinutes ? /*#__PURE__*/_react.default.createElement(_DurationScroll.default, _extends({
|
|
@@ -123,10 +136,11 @@ const TimerPicker = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
|
123
136
|
isDisabled: minutesPickerIsDisabled,
|
|
124
137
|
label: minuteLabel ?? "m",
|
|
125
138
|
limit: minuteLimit,
|
|
126
|
-
numberOfItems:
|
|
139
|
+
numberOfItems: 60,
|
|
127
140
|
onDurationChange: setSelectedMinutes,
|
|
128
141
|
padNumbersWithZero: padMinutesWithZero,
|
|
129
|
-
padWithNItems:
|
|
142
|
+
padWithNItems: safePadWithNItems,
|
|
143
|
+
repeatNumbersNTimes: repeatMinuteNumbersNTimes,
|
|
130
144
|
styles: styles,
|
|
131
145
|
testID: "duration-scroll-minute"
|
|
132
146
|
}, otherProps)) : null, !hideSeconds ? /*#__PURE__*/_react.default.createElement(_DurationScroll.default, _extends({
|
|
@@ -138,10 +152,11 @@ const TimerPicker = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
|
138
152
|
isDisabled: secondsPickerIsDisabled,
|
|
139
153
|
label: secondLabel ?? "s",
|
|
140
154
|
limit: secondLimit,
|
|
141
|
-
numberOfItems:
|
|
155
|
+
numberOfItems: 60,
|
|
142
156
|
onDurationChange: setSelectedSeconds,
|
|
143
157
|
padNumbersWithZero: padSecondsWithZero,
|
|
144
|
-
padWithNItems:
|
|
158
|
+
padWithNItems: safePadWithNItems,
|
|
159
|
+
repeatNumbersNTimes: repeatSecondNumbersNTimes,
|
|
145
160
|
styles: styles,
|
|
146
161
|
testID: "duration-scroll-second"
|
|
147
162
|
}, otherProps)) : null);
|