react-native-timer-picker 1.2.11 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -2
- package/dist/commonjs/components/TimerPicker/DurationScroll.js +22 -3
- package/dist/commonjs/components/TimerPicker/DurationScroll.js.map +1 -1
- package/dist/commonjs/components/TimerPicker/index.js +32 -20
- package/dist/commonjs/components/TimerPicker/index.js.map +1 -1
- package/dist/commonjs/components/index.js +46 -30
- package/dist/commonjs/components/index.js.map +1 -1
- package/dist/module/components/TimerPicker/DurationScroll.js +22 -3
- package/dist/module/components/TimerPicker/DurationScroll.js.map +1 -1
- package/dist/module/components/TimerPicker/index.js +32 -20
- package/dist/module/components/TimerPicker/index.js.map +1 -1
- package/dist/module/components/index.js +46 -30
- package/dist/module/components/index.js.map +1 -1
- package/dist/typescript/components/TimerPicker/DurationScroll.d.ts +3 -1
- package/dist/typescript/components/TimerPicker/index.d.ts +7 -1
- package/dist/typescript/components/index.d.ts +6 -1
- package/package.json +2 -2
- package/src/components/TimerPicker/DurationScroll.tsx +44 -3
- package/src/components/TimerPicker/index.tsx +16 -0
- package/src/components/index.tsx +36 -12
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# React Native Timer Picker ⏰🕰️⏳
|
|
2
2
|
|
|
3
3
|
[]()
|
|
4
|
-

|
|
5
5
|
[](https://www.npmjs.com/package/react-native-timer-picker)
|
|
6
6
|
[](https://www.npmjs.com/package/react-native-timer-picker)
|
|
7
7
|
|
|
@@ -33,7 +33,7 @@ Works with Expo and bare React Native apps.
|
|
|
33
33
|
|
|
34
34
|
## Demos 📱
|
|
35
35
|
|
|
36
|
-
**Try it out for yourself on [Expo Snack](https://snack.expo.dev/@nuumi/react-native-timer-picker-demo)!** Make sure to run it on iOS/Android to
|
|
36
|
+
**Try it out for yourself on [Expo Snack](https://snack.expo.dev/@nuumi/react-native-timer-picker-demo)!** Make sure to run it on iOS/Android to see it working properly.
|
|
37
37
|
|
|
38
38
|
<p>
|
|
39
39
|
<img src="demos/example1.gif" width="250" height="550" style="margin-right:50px"/>
|
|
@@ -331,6 +331,7 @@ return (
|
|
|
331
331
|
| minuteLabel | Label for the minutes picker | String \| React.ReactElement | m | false |
|
|
332
332
|
| secondLabel | Label for the seconds picker | String \| React.ReactElement | s | false |
|
|
333
333
|
| padWithNItems | Number of items to pad the picker with on either side | Number | 1 | false |
|
|
334
|
+
| aggressivelyGetLatestDuration | Set to True to ask DurationScroll to aggressively update the latestDuration ref | Boolean | false | false |
|
|
334
335
|
| disableInfiniteScroll | Disable the infinite scroll feature | Boolean | false | false |
|
|
335
336
|
| 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 |
|
|
336
337
|
| pickerContainerProps | Props for the picker container | `React.ComponentProps<typeof View>` | - | false |
|
|
@@ -419,6 +420,19 @@ timerPickerRef.current.reset(options?: { animated: boolean });
|
|
|
419
420
|
timerPickerRef.current.setValue({ hours: number, minutes: number, seconds: number }, options?: { animated: boolean });
|
|
420
421
|
```
|
|
421
422
|
|
|
423
|
+
It also exposes the following ref object:
|
|
424
|
+
|
|
425
|
+
`latestDuration` - provides access to the latest duration (even during scrolls). **This only works if `aggressivelyGetLatestDuration` is set to True (as in TimerPickerModal).** It is used internally to ensure that the latest duration is returned in `TimerPickerModal` on pressing the confirm button, even if the inputs are still scrolling.
|
|
426
|
+
|
|
427
|
+
```javascript
|
|
428
|
+
const latestDuration = timerPickerRef.current?.latestDuration;
|
|
429
|
+
const newDuration = {
|
|
430
|
+
hours: latestDuration?.hours?.current,
|
|
431
|
+
minutes: latestDuration?.minutes?.current,
|
|
432
|
+
seconds: latestDuration?.seconds?.current,
|
|
433
|
+
};
|
|
434
|
+
```
|
|
435
|
+
|
|
422
436
|
### TimerPickerModal
|
|
423
437
|
|
|
424
438
|
An identical ref is also exposed for the TimerPickerModal component.
|
|
@@ -24,6 +24,7 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
24
24
|
padNumbersWithZero = false,
|
|
25
25
|
disableInfiniteScroll = false,
|
|
26
26
|
limit,
|
|
27
|
+
aggressivelyGetLatestDuration,
|
|
27
28
|
padWithNItems,
|
|
28
29
|
pickerGradientOverlayProps,
|
|
29
30
|
topPickerGradientOverlayProps,
|
|
@@ -32,7 +33,6 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
32
33
|
testID,
|
|
33
34
|
styles
|
|
34
35
|
} = _ref;
|
|
35
|
-
const flatListRef = (0, _react.useRef)(null);
|
|
36
36
|
const data = (0, _generateNumbers.generateNumbers)(numberOfItems, {
|
|
37
37
|
padWithZero: padNumbersWithZero,
|
|
38
38
|
repeatNTimes: 3,
|
|
@@ -47,6 +47,8 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
47
47
|
padWithNItems,
|
|
48
48
|
disableInfiniteScroll
|
|
49
49
|
});
|
|
50
|
+
const latestDuration = (0, _react.useRef)(0);
|
|
51
|
+
const flatListRef = (0, _react.useRef)(null);
|
|
50
52
|
(0, _react.useImperativeHandle)(ref, () => ({
|
|
51
53
|
reset: options => {
|
|
52
54
|
var _flatListRef$current;
|
|
@@ -66,7 +68,8 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
66
68
|
disableInfiniteScroll
|
|
67
69
|
})
|
|
68
70
|
});
|
|
69
|
-
}
|
|
71
|
+
},
|
|
72
|
+
latestDuration: latestDuration
|
|
70
73
|
}));
|
|
71
74
|
const renderItem = (0, _react.useCallback)(_ref2 => {
|
|
72
75
|
let {
|
|
@@ -81,6 +84,21 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
81
84
|
style: [styles.pickerItem, intItem > adjustedLimited.max || intItem < adjustedLimited.min ? styles.disabledPickerItem : {}]
|
|
82
85
|
}, item));
|
|
83
86
|
}, [adjustedLimited.max, adjustedLimited.min, styles.disabledPickerItem, styles.pickerItem, styles.pickerItemContainer]);
|
|
87
|
+
const onScroll = (0, _react.useCallback)(e => {
|
|
88
|
+
// this function is only used when the picker is in a modal
|
|
89
|
+
// it is used to ensure that the modal gets the latest duration on clicking
|
|
90
|
+
// the confirm button, even if the scrollview is still scrolling
|
|
91
|
+
const newIndex = Math.round(e.nativeEvent.contentOffset.y / styles.pickerItemContainer.height);
|
|
92
|
+
let newDuration = (disableInfiniteScroll ? newIndex : newIndex + padWithNItems) % (numberOfItems + 1);
|
|
93
|
+
|
|
94
|
+
// check limits
|
|
95
|
+
if (newDuration > adjustedLimited.max) {
|
|
96
|
+
newDuration = adjustedLimited.max;
|
|
97
|
+
} else if (newDuration < adjustedLimited.min) {
|
|
98
|
+
newDuration = adjustedLimited.min;
|
|
99
|
+
}
|
|
100
|
+
latestDuration.current = newDuration;
|
|
101
|
+
}, [adjustedLimited.max, adjustedLimited.min, disableInfiniteScroll, numberOfItems, padWithNItems, styles.pickerItemContainer.height]);
|
|
84
102
|
const onMomentumScrollEnd = (0, _react.useCallback)(e => {
|
|
85
103
|
const newIndex = Math.round(e.nativeEvent.contentOffset.y / styles.pickerItemContainer.height);
|
|
86
104
|
let newDuration = (disableInfiniteScroll ? newIndex : newIndex + padWithNItems) % (numberOfItems + 1);
|
|
@@ -154,7 +172,7 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
154
172
|
renderItem: renderItem,
|
|
155
173
|
keyExtractor: KEY_EXTRACTOR,
|
|
156
174
|
showsVerticalScrollIndicator: false,
|
|
157
|
-
decelerationRate: 0.
|
|
175
|
+
decelerationRate: 0.88,
|
|
158
176
|
scrollEventThrottle: 16,
|
|
159
177
|
snapToAlignment: "start"
|
|
160
178
|
// used in place of snapToOffset due to bug on Android
|
|
@@ -162,6 +180,7 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
162
180
|
snapToOffsets: [...Array(data.length)].map((_, i) => i * styles.pickerItemContainer.height),
|
|
163
181
|
viewabilityConfigCallbackPairs: !disableInfiniteScroll ? viewabilityConfigCallbackPairs === null || viewabilityConfigCallbackPairs === void 0 ? void 0 : viewabilityConfigCallbackPairs.current : undefined,
|
|
164
182
|
onMomentumScrollEnd: onMomentumScrollEnd,
|
|
183
|
+
onScroll: aggressivelyGetLatestDuration ? onScroll : undefined,
|
|
165
184
|
testID: "duration-scroll-flatlist"
|
|
166
185
|
}), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
167
186
|
style: styles.pickerLabelContainer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_generateNumbers","_colorToRgba","_getAdjustedLimit","_getScrollIndex","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","KEY_EXTRACTOR","_","index","toString","DurationScroll","forwardRef","_ref","ref","numberOfItems","label","initialValue","onDurationChange","padNumbersWithZero","disableInfiniteScroll","limit","padWithNItems","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","LinearGradient","testID","styles","flatListRef","useRef","data","generateNumbers","padWithZero","repeatNTimes","numberOfItemsToShow","adjustedLimited","getAdjustedLimit","initialScrollIndex","getScrollIndex","value","useImperativeHandle","reset","options","_flatListRef$current","current","scrollToIndex","animated","setValue","_flatListRef$current2","renderItem","useCallback","_ref2","item","intItem","parseInt","createElement","View","style","pickerItemContainer","Text","pickerItem","max","min","disabledPickerItem","onMomentumScrollEnd","newIndex","Math","round","nativeEvent","contentOffset","y","height","newDuration","_flatListRef$current3","targetScrollIndex","_flatListRef$current4","onViewableItemsChanged","_ref3","_viewableItems$","_viewableItems$2","viewableItems","_flatListRef$current5","_flatListRef$current6","getItemLayout","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","overflow","FlatList","windowSize","keyExtractor","showsVerticalScrollIndicator","decelerationRate","scrollEventThrottle","snapToAlignment","snapToOffsets","Array","map","undefined","pickerLabelContainer","pointerEvents","pickerLabel","Fragment","colors","pickerContainer","backgroundColor","colorToRgba","color","opacity","start","x","end","pickerGradientOverlay","top","bottom","_default","exports","React","memo"],"sources":["DurationScroll.tsx"],"sourcesContent":["import React, {\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\nimport {\n View,\n Text,\n FlatList,\n ViewabilityConfigCallbackPairs,\n ViewToken,\n NativeSyntheticEvent,\n NativeScrollEvent,\n} from \"react-native\";\n\nimport { generateNumbers } from \"../../utils/generateNumbers\";\nimport { colorToRgba } from \"../../utils/colorToRgba\";\nimport { generateStyles } from \"./TimerPicker.styles\";\nimport { getAdjustedLimit } from \"../../utils/getAdjustedLimit\";\nimport { getScrollIndex } from \"../../utils/getScrollIndex\";\n\nexport interface DurationScrollRef {\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 locations?: number[] | null;\n start?: LinearGradientPoint | null;\n end?: LinearGradientPoint | null;\n};\n\nexport type LimitType = {\n max?: number;\n min?: number;\n};\n\ninterface DurationScrollProps {\n numberOfItems: number;\n label?: string | React.ReactElement;\n initialValue?: number;\n onDurationChange: (duration: number) => void;\n padNumbersWithZero?: boolean;\n disableInfiniteScroll?: boolean;\n limit?: LimitType;\n padWithNItems: number;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n topPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n bottomPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n LinearGradient?: any;\n testID?: string;\n styles: ReturnType<typeof generateStyles>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst KEY_EXTRACTOR = (_: any, index: number) => index.toString();\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(\n (\n {\n numberOfItems,\n label,\n initialValue = 0,\n onDurationChange,\n padNumbersWithZero = false,\n disableInfiniteScroll = false,\n limit,\n padWithNItems,\n pickerGradientOverlayProps,\n topPickerGradientOverlayProps,\n bottomPickerGradientOverlayProps,\n LinearGradient,\n testID,\n styles,\n },\n ref\n ): React.ReactElement => {\n const flatListRef = useRef<FlatList | null>(null);\n\n const data = generateNumbers(numberOfItems, {\n padWithZero: padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems: 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 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 }));\n\n const renderItem = useCallback(\n ({ item }: { item: string }) => {\n const intItem = parseInt(item);\n\n return (\n <View\n key={item}\n style={styles.pickerItemContainer}\n testID=\"picker-item\">\n <Text\n style={[\n styles.pickerItem,\n intItem > adjustedLimited.max ||\n intItem < adjustedLimited.min\n ? styles.disabledPickerItem\n : {},\n ]}>\n {item}\n </Text>\n </View>\n );\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n styles.disabledPickerItem,\n styles.pickerItem,\n styles.pickerItemContainer,\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 testID={testID}\n style={{\n height:\n styles.pickerItemContainer.height * numberOfItemsToShow,\n overflow: \"hidden\",\n }}>\n <FlatList\n ref={flatListRef}\n data={data}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n windowSize={numberOfItemsToShow}\n renderItem={renderItem}\n keyExtractor={KEY_EXTRACTOR}\n showsVerticalScrollIndicator={false}\n decelerationRate={0.9}\n scrollEventThrottle={16}\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 viewabilityConfigCallbackPairs={\n !disableInfiniteScroll\n ? viewabilityConfigCallbackPairs?.current\n : undefined\n }\n onMomentumScrollEnd={onMomentumScrollEnd}\n testID=\"duration-scroll-flatlist\"\n />\n <View style={styles.pickerLabelContainer} pointerEvents=\"none\">\n {typeof label === \"string\" ? (\n <Text style={styles.pickerLabel}>{label}</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 start={{ x: 1, y: 0.3 }}\n end={{ x: 1, y: 1 }}\n pointerEvents=\"none\"\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 start={{ x: 1, y: 0 }}\n end={{ x: 1, y: 0.7 }}\n pointerEvents=\"none\"\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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"}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_generateNumbers","_colorToRgba","_getAdjustedLimit","_getScrollIndex","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","KEY_EXTRACTOR","_","index","toString","DurationScroll","forwardRef","_ref","ref","numberOfItems","label","initialValue","onDurationChange","padNumbersWithZero","disableInfiniteScroll","limit","aggressivelyGetLatestDuration","padWithNItems","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","LinearGradient","testID","styles","data","generateNumbers","padWithZero","repeatNTimes","numberOfItemsToShow","adjustedLimited","getAdjustedLimit","initialScrollIndex","getScrollIndex","value","latestDuration","useRef","flatListRef","useImperativeHandle","reset","options","_flatListRef$current","current","scrollToIndex","animated","setValue","_flatListRef$current2","renderItem","useCallback","_ref2","item","intItem","parseInt","createElement","View","style","pickerItemContainer","Text","pickerItem","max","min","disabledPickerItem","onScroll","newIndex","Math","round","nativeEvent","contentOffset","y","height","newDuration","onMomentumScrollEnd","_flatListRef$current3","targetScrollIndex","_flatListRef$current4","onViewableItemsChanged","_ref3","_viewableItems$","_viewableItems$2","viewableItems","_flatListRef$current5","_flatListRef$current6","getItemLayout","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","overflow","FlatList","windowSize","keyExtractor","showsVerticalScrollIndicator","decelerationRate","scrollEventThrottle","snapToAlignment","snapToOffsets","Array","map","undefined","pickerLabelContainer","pointerEvents","pickerLabel","Fragment","colors","pickerContainer","backgroundColor","colorToRgba","color","opacity","start","x","end","pickerGradientOverlay","top","bottom","_default","exports","React","memo"],"sources":["DurationScroll.tsx"],"sourcesContent":["import React, {\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n MutableRefObject,\n} from \"react\";\nimport {\n View,\n Text,\n FlatList,\n ViewabilityConfigCallbackPairs,\n ViewToken,\n NativeSyntheticEvent,\n NativeScrollEvent,\n} from \"react-native\";\n\nimport { generateNumbers } from \"../../utils/generateNumbers\";\nimport { colorToRgba } from \"../../utils/colorToRgba\";\nimport { generateStyles } from \"./TimerPicker.styles\";\nimport { getAdjustedLimit } from \"../../utils/getAdjustedLimit\";\nimport { getScrollIndex } from \"../../utils/getScrollIndex\";\n\nexport interface DurationScrollRef {\n reset: (options?: { animated?: boolean }) => void;\n setValue: (value: number, options?: { animated?: boolean }) => void;\n latestDuration: MutableRefObject<number>;\n}\n\ntype LinearGradientPoint = {\n x: number;\n y: number;\n};\n\nexport type LinearGradientProps = React.ComponentProps<typeof View> & {\n colors: string[];\n locations?: number[] | null;\n start?: LinearGradientPoint | null;\n end?: LinearGradientPoint | null;\n};\n\nexport type LimitType = {\n max?: number;\n min?: number;\n};\n\ninterface DurationScrollProps {\n numberOfItems: number;\n label?: string | React.ReactElement;\n initialValue?: number;\n onDurationChange: (duration: number) => void;\n padNumbersWithZero?: boolean;\n disableInfiniteScroll?: boolean;\n limit?: LimitType;\n aggressivelyGetLatestDuration: boolean;\n padWithNItems: number;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n topPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n bottomPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n LinearGradient?: any;\n testID?: string;\n styles: ReturnType<typeof generateStyles>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst KEY_EXTRACTOR = (_: any, index: number) => index.toString();\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(\n (\n {\n numberOfItems,\n label,\n initialValue = 0,\n onDurationChange,\n padNumbersWithZero = false,\n disableInfiniteScroll = false,\n limit,\n aggressivelyGetLatestDuration,\n padWithNItems,\n pickerGradientOverlayProps,\n topPickerGradientOverlayProps,\n bottomPickerGradientOverlayProps,\n LinearGradient,\n testID,\n styles,\n },\n ref\n ): React.ReactElement => {\n const data = generateNumbers(numberOfItems, {\n padWithZero: padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems: 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 const latestDuration = useRef(0);\n\n const flatListRef = useRef<FlatList | null>(null);\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 const intItem = parseInt(item);\n\n return (\n <View\n key={item}\n style={styles.pickerItemContainer}\n testID=\"picker-item\">\n <Text\n style={[\n styles.pickerItem,\n intItem > adjustedLimited.max ||\n intItem < adjustedLimited.min\n ? styles.disabledPickerItem\n : {},\n ]}>\n {item}\n </Text>\n </View>\n );\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n styles.disabledPickerItem,\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\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 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 newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n newDuration = adjustedLimited.min;\n }\n latestDuration.current = newDuration;\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\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 testID={testID}\n style={{\n height:\n styles.pickerItemContainer.height * numberOfItemsToShow,\n overflow: \"hidden\",\n }}>\n <FlatList\n ref={flatListRef}\n data={data}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n windowSize={numberOfItemsToShow}\n renderItem={renderItem}\n keyExtractor={KEY_EXTRACTOR}\n showsVerticalScrollIndicator={false}\n decelerationRate={0.88}\n scrollEventThrottle={16}\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 viewabilityConfigCallbackPairs={\n !disableInfiniteScroll\n ? viewabilityConfigCallbackPairs?.current\n : undefined\n }\n onMomentumScrollEnd={onMomentumScrollEnd}\n onScroll={aggressivelyGetLatestDuration ? onScroll : undefined}\n testID=\"duration-scroll-flatlist\"\n />\n <View style={styles.pickerLabelContainer} pointerEvents=\"none\">\n {typeof label === \"string\" ? (\n <Text style={styles.pickerLabel}>{label}</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 start={{ x: 1, y: 0.3 }}\n end={{ x: 1, y: 1 }}\n pointerEvents=\"none\"\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 start={{ x: 1, y: 0 }}\n end={{ x: 1, y: 0.7 }}\n pointerEvents=\"none\"\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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"}
|
|
@@ -29,6 +29,7 @@ const TimerPicker = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
29
29
|
secondLabel = "s",
|
|
30
30
|
padWithNItems = 1,
|
|
31
31
|
disableInfiniteScroll = false,
|
|
32
|
+
aggressivelyGetLatestDuration = false,
|
|
32
33
|
LinearGradient,
|
|
33
34
|
pickerContainerProps,
|
|
34
35
|
pickerGradientOverlayProps,
|
|
@@ -54,26 +55,34 @@ const TimerPicker = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
54
55
|
const hoursDurationScrollRef = (0, _react.useRef)(null);
|
|
55
56
|
const minutesDurationScrollRef = (0, _react.useRef)(null);
|
|
56
57
|
const secondsDurationScrollRef = (0, _react.useRef)(null);
|
|
57
|
-
(0, _react.useImperativeHandle)(ref, () =>
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
58
|
+
(0, _react.useImperativeHandle)(ref, () => {
|
|
59
|
+
var _hoursDurationScrollR3, _minutesDurationScrol3, _secondsDurationScrol3;
|
|
60
|
+
return {
|
|
61
|
+
reset: options => {
|
|
62
|
+
var _hoursDurationScrollR, _minutesDurationScrol, _secondsDurationScrol;
|
|
63
|
+
setSelectedHours(initialHours);
|
|
64
|
+
setSelectedMinutes(initialMinutes);
|
|
65
|
+
setSelectedSeconds(initialSeconds);
|
|
66
|
+
(_hoursDurationScrollR = hoursDurationScrollRef.current) === null || _hoursDurationScrollR === void 0 || _hoursDurationScrollR.reset(options);
|
|
67
|
+
(_minutesDurationScrol = minutesDurationScrollRef.current) === null || _minutesDurationScrol === void 0 || _minutesDurationScrol.reset(options);
|
|
68
|
+
(_secondsDurationScrol = secondsDurationScrollRef.current) === null || _secondsDurationScrol === void 0 || _secondsDurationScrol.reset(options);
|
|
69
|
+
},
|
|
70
|
+
setValue: (value, options) => {
|
|
71
|
+
var _hoursDurationScrollR2, _minutesDurationScrol2, _secondsDurationScrol2;
|
|
72
|
+
setSelectedHours(value.hours);
|
|
73
|
+
setSelectedMinutes(value.minutes);
|
|
74
|
+
setSelectedSeconds(value.seconds);
|
|
75
|
+
(_hoursDurationScrollR2 = hoursDurationScrollRef.current) === null || _hoursDurationScrollR2 === void 0 || _hoursDurationScrollR2.setValue(value.hours, options);
|
|
76
|
+
(_minutesDurationScrol2 = minutesDurationScrollRef.current) === null || _minutesDurationScrol2 === void 0 || _minutesDurationScrol2.setValue(value.minutes, options);
|
|
77
|
+
(_secondsDurationScrol2 = secondsDurationScrollRef.current) === null || _secondsDurationScrol2 === void 0 || _secondsDurationScrol2.setValue(value.seconds, options);
|
|
78
|
+
},
|
|
79
|
+
latestDuration: {
|
|
80
|
+
hours: (_hoursDurationScrollR3 = hoursDurationScrollRef.current) === null || _hoursDurationScrollR3 === void 0 ? void 0 : _hoursDurationScrollR3.latestDuration,
|
|
81
|
+
minutes: (_minutesDurationScrol3 = minutesDurationScrollRef.current) === null || _minutesDurationScrol3 === void 0 ? void 0 : _minutesDurationScrol3.latestDuration,
|
|
82
|
+
seconds: (_secondsDurationScrol3 = secondsDurationScrollRef.current) === null || _secondsDurationScrol3 === void 0 ? void 0 : _secondsDurationScrol3.latestDuration
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
});
|
|
77
86
|
return /*#__PURE__*/_react.default.createElement(_reactNative.View, _extends({}, pickerContainerProps, {
|
|
78
87
|
style: styles.pickerContainer,
|
|
79
88
|
testID: "timer-picker"
|
|
@@ -82,6 +91,7 @@ const TimerPicker = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
82
91
|
numberOfItems: 23,
|
|
83
92
|
label: hourLabel,
|
|
84
93
|
initialValue: initialHours,
|
|
94
|
+
aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
|
|
85
95
|
onDurationChange: setSelectedHours,
|
|
86
96
|
pickerGradientOverlayProps: pickerGradientOverlayProps,
|
|
87
97
|
topPickerGradientOverlayProps: topPickerGradientOverlayProps,
|
|
@@ -97,6 +107,7 @@ const TimerPicker = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
97
107
|
numberOfItems: 59,
|
|
98
108
|
label: minuteLabel,
|
|
99
109
|
initialValue: initialMinutes,
|
|
110
|
+
aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
|
|
100
111
|
onDurationChange: setSelectedMinutes,
|
|
101
112
|
padNumbersWithZero: true,
|
|
102
113
|
pickerGradientOverlayProps: pickerGradientOverlayProps,
|
|
@@ -113,6 +124,7 @@ const TimerPicker = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
113
124
|
numberOfItems: 59,
|
|
114
125
|
label: secondLabel,
|
|
115
126
|
initialValue: initialSeconds,
|
|
127
|
+
aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
|
|
116
128
|
onDurationChange: setSelectedSeconds,
|
|
117
129
|
padNumbersWithZero: true,
|
|
118
130
|
pickerGradientOverlayProps: pickerGradientOverlayProps,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_DurationScroll","_interopRequireDefault","_TimerPicker","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","TimerPicker","forwardRef","_ref","ref","onDurationChange","initialHours","initialMinutes","initialSeconds","hideHours","hideMinutes","hideSeconds","hourLimit","minuteLimit","secondLimit","hourLabel","minuteLabel","secondLabel","padWithNItems","disableInfiniteScroll","LinearGradient","pickerContainerProps","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","styles","customStyles","checkedPadWithNItems","Math","round","useMemo","generateStyles","selectedHours","setSelectedHours","useState","selectedMinutes","setSelectedMinutes","selectedSeconds","setSelectedSeconds","useEffect","hours","minutes","seconds","hoursDurationScrollRef","useRef","minutesDurationScrollRef","secondsDurationScrollRef","useImperativeHandle","reset","options","_hoursDurationScrollR","_minutesDurationScrol","_secondsDurationScrol","current","setValue","value","_hoursDurationScrollR2","_minutesDurationScrol2","_secondsDurationScrol2","createElement","View","style","pickerContainer","testID","numberOfItems","label","initialValue","limit","padNumbersWithZero","_default","exports","React","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { View } from \"react-native\";\n\nimport DurationScroll, { DurationScrollRef, LimitType } from \"./DurationScroll\";\n\nimport { generateStyles, CustomTimerPickerStyles } from \"./TimerPicker.styles\";\nimport { LinearGradientProps } from \"./DurationScroll\";\n\nexport interface TimerPickerRef {\n reset: (options?: { animated?: boolean }) => void;\n setValue: (\n value: {\n hours: number;\n minutes: number;\n seconds: number;\n },\n options?: { animated?: boolean }\n ) => void;\n}\n\nexport interface TimerPickerProps {\n onDurationChange?: (duration: {\n hours: number;\n minutes: number;\n seconds: number;\n }) => void;\n initialHours?: number;\n initialMinutes?: number;\n initialSeconds?: number;\n hideHours?: boolean;\n hideMinutes?: boolean;\n hideSeconds?: boolean;\n hourLimit?: LimitType;\n minuteLimit?: LimitType;\n secondLimit?: LimitType;\n hourLabel?: string | React.ReactElement;\n minuteLabel?: string | React.ReactElement;\n secondLabel?: string | React.ReactElement;\n padWithNItems?: number;\n disableInfiniteScroll?: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n LinearGradient?: any;\n pickerContainerProps?: React.ComponentProps<typeof View>;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n topPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n bottomPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n styles?: CustomTimerPickerStyles;\n}\n\nconst TimerPicker = forwardRef<TimerPickerRef, TimerPickerProps>(\n (\n {\n onDurationChange,\n initialHours = 0,\n initialMinutes = 0,\n initialSeconds = 0,\n hideHours = false,\n hideMinutes = false,\n hideSeconds = false,\n hourLimit,\n minuteLimit,\n secondLimit,\n hourLabel = \"h\",\n minuteLabel = \"m\",\n secondLabel = \"s\",\n padWithNItems = 1,\n disableInfiniteScroll = false,\n LinearGradient,\n pickerContainerProps,\n pickerGradientOverlayProps,\n topPickerGradientOverlayProps,\n bottomPickerGradientOverlayProps,\n styles: customStyles,\n },\n ref\n ): React.ReactElement => {\n const checkedPadWithNItems =\n padWithNItems >= 0 ? Math.round(padWithNItems) : 0;\n\n const styles = useMemo(\n () =>\n generateStyles(customStyles, {\n padWithNItems: checkedPadWithNItems,\n }),\n\n [checkedPadWithNItems, customStyles]\n );\n\n const [selectedHours, setSelectedHours] = useState(initialHours);\n const [selectedMinutes, setSelectedMinutes] = useState(initialMinutes);\n const [selectedSeconds, setSelectedSeconds] = useState(initialSeconds);\n\n useEffect(() => {\n onDurationChange?.({\n hours: selectedHours,\n minutes: selectedMinutes,\n seconds: selectedSeconds,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedHours, selectedMinutes, selectedSeconds]);\n\n const hoursDurationScrollRef = useRef<DurationScrollRef>(null);\n const minutesDurationScrollRef = useRef<DurationScrollRef>(null);\n const secondsDurationScrollRef = useRef<DurationScrollRef>(null);\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n setSelectedHours(initialHours);\n setSelectedMinutes(initialMinutes);\n setSelectedSeconds(initialSeconds);\n hoursDurationScrollRef.current?.reset(options);\n minutesDurationScrollRef.current?.reset(options);\n secondsDurationScrollRef.current?.reset(options);\n },\n setValue: (value, options) => {\n setSelectedHours(value.hours);\n setSelectedMinutes(value.minutes);\n setSelectedSeconds(value.seconds);\n hoursDurationScrollRef.current?.setValue(value.hours, options);\n minutesDurationScrollRef.current?.setValue(\n value.minutes,\n options\n );\n secondsDurationScrollRef.current?.setValue(\n value.seconds,\n options\n );\n },\n }));\n\n return (\n <View\n {...pickerContainerProps}\n style={styles.pickerContainer}\n testID=\"timer-picker\">\n {!hideHours ? (\n <DurationScroll\n ref={hoursDurationScrollRef}\n numberOfItems={23}\n label={hourLabel}\n initialValue={initialHours}\n onDurationChange={setSelectedHours}\n pickerGradientOverlayProps={pickerGradientOverlayProps}\n topPickerGradientOverlayProps={\n topPickerGradientOverlayProps\n }\n bottomPickerGradientOverlayProps={\n bottomPickerGradientOverlayProps\n }\n disableInfiniteScroll={disableInfiniteScroll}\n padWithNItems={checkedPadWithNItems}\n limit={hourLimit}\n LinearGradient={LinearGradient}\n styles={styles}\n testID=\"duration-scroll-hour\"\n />\n ) : null}\n {!hideMinutes ? (\n <DurationScroll\n ref={minutesDurationScrollRef}\n numberOfItems={59}\n label={minuteLabel}\n initialValue={initialMinutes}\n onDurationChange={setSelectedMinutes}\n padNumbersWithZero\n pickerGradientOverlayProps={pickerGradientOverlayProps}\n topPickerGradientOverlayProps={\n topPickerGradientOverlayProps\n }\n bottomPickerGradientOverlayProps={\n bottomPickerGradientOverlayProps\n }\n disableInfiniteScroll={disableInfiniteScroll}\n padWithNItems={checkedPadWithNItems}\n limit={minuteLimit}\n LinearGradient={LinearGradient}\n styles={styles}\n testID=\"duration-scroll-minute\"\n />\n ) : null}\n {!hideSeconds ? (\n <DurationScroll\n ref={secondsDurationScrollRef}\n numberOfItems={59}\n label={secondLabel}\n initialValue={initialSeconds}\n onDurationChange={setSelectedSeconds}\n padNumbersWithZero\n pickerGradientOverlayProps={pickerGradientOverlayProps}\n topPickerGradientOverlayProps={\n topPickerGradientOverlayProps\n }\n bottomPickerGradientOverlayProps={\n bottomPickerGradientOverlayProps\n }\n disableInfiniteScroll={disableInfiniteScroll}\n padWithNItems={checkedPadWithNItems}\n limit={secondLimit}\n LinearGradient={LinearGradient}\n styles={styles}\n testID=\"duration-scroll-second\"\n />\n ) : null}\n </View>\n );\n }\n);\n\nexport default React.memo(TimerPicker);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_DurationScroll","_interopRequireDefault","_TimerPicker","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","TimerPicker","forwardRef","_ref","ref","onDurationChange","initialHours","initialMinutes","initialSeconds","hideHours","hideMinutes","hideSeconds","hourLimit","minuteLimit","secondLimit","hourLabel","minuteLabel","secondLabel","padWithNItems","disableInfiniteScroll","aggressivelyGetLatestDuration","LinearGradient","pickerContainerProps","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","styles","customStyles","checkedPadWithNItems","Math","round","useMemo","generateStyles","selectedHours","setSelectedHours","useState","selectedMinutes","setSelectedMinutes","selectedSeconds","setSelectedSeconds","useEffect","hours","minutes","seconds","hoursDurationScrollRef","useRef","minutesDurationScrollRef","secondsDurationScrollRef","useImperativeHandle","_hoursDurationScrollR3","_minutesDurationScrol3","_secondsDurationScrol3","reset","options","_hoursDurationScrollR","_minutesDurationScrol","_secondsDurationScrol","current","setValue","value","_hoursDurationScrollR2","_minutesDurationScrol2","_secondsDurationScrol2","latestDuration","createElement","View","style","pickerContainer","testID","numberOfItems","label","initialValue","limit","padNumbersWithZero","_default","exports","React","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n MutableRefObject,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { View } from \"react-native\";\n\nimport DurationScroll, { DurationScrollRef, LimitType } from \"./DurationScroll\";\n\nimport { generateStyles, CustomTimerPickerStyles } from \"./TimerPicker.styles\";\nimport { LinearGradientProps } from \"./DurationScroll\";\n\nexport interface TimerPickerRef {\n reset: (options?: { animated?: boolean }) => void;\n setValue: (\n value: {\n hours: number;\n minutes: number;\n seconds: number;\n },\n options?: { animated?: boolean }\n ) => void;\n latestDuration: {\n hours: MutableRefObject<number> | undefined;\n minutes: MutableRefObject<number> | undefined;\n seconds: MutableRefObject<number> | undefined;\n };\n}\n\nexport interface TimerPickerProps {\n onDurationChange?: (duration: {\n hours: number;\n minutes: number;\n seconds: number;\n }) => void;\n initialHours?: number;\n initialMinutes?: number;\n initialSeconds?: number;\n aggressivelyGetLatestDuration?: boolean;\n hideHours?: boolean;\n hideMinutes?: boolean;\n hideSeconds?: boolean;\n hourLimit?: LimitType;\n minuteLimit?: LimitType;\n secondLimit?: LimitType;\n hourLabel?: string | React.ReactElement;\n minuteLabel?: string | React.ReactElement;\n secondLabel?: string | React.ReactElement;\n padWithNItems?: number;\n disableInfiniteScroll?: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n LinearGradient?: any;\n pickerContainerProps?: React.ComponentProps<typeof View>;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n topPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n bottomPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n styles?: CustomTimerPickerStyles;\n}\n\nconst TimerPicker = forwardRef<TimerPickerRef, TimerPickerProps>(\n (\n {\n onDurationChange,\n initialHours = 0,\n initialMinutes = 0,\n initialSeconds = 0,\n hideHours = false,\n hideMinutes = false,\n hideSeconds = false,\n hourLimit,\n minuteLimit,\n secondLimit,\n hourLabel = \"h\",\n minuteLabel = \"m\",\n secondLabel = \"s\",\n padWithNItems = 1,\n disableInfiniteScroll = false,\n aggressivelyGetLatestDuration = false,\n LinearGradient,\n pickerContainerProps,\n pickerGradientOverlayProps,\n topPickerGradientOverlayProps,\n bottomPickerGradientOverlayProps,\n styles: customStyles,\n },\n ref\n ): React.ReactElement => {\n const checkedPadWithNItems =\n padWithNItems >= 0 ? Math.round(padWithNItems) : 0;\n\n const styles = useMemo(\n () =>\n generateStyles(customStyles, {\n padWithNItems: checkedPadWithNItems,\n }),\n\n [checkedPadWithNItems, customStyles]\n );\n\n const [selectedHours, setSelectedHours] = useState(initialHours);\n const [selectedMinutes, setSelectedMinutes] = useState(initialMinutes);\n const [selectedSeconds, setSelectedSeconds] = useState(initialSeconds);\n\n useEffect(() => {\n onDurationChange?.({\n hours: selectedHours,\n minutes: selectedMinutes,\n seconds: selectedSeconds,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedHours, selectedMinutes, selectedSeconds]);\n\n const hoursDurationScrollRef = useRef<DurationScrollRef>(null);\n const minutesDurationScrollRef = useRef<DurationScrollRef>(null);\n const secondsDurationScrollRef = useRef<DurationScrollRef>(null);\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n setSelectedHours(initialHours);\n setSelectedMinutes(initialMinutes);\n setSelectedSeconds(initialSeconds);\n hoursDurationScrollRef.current?.reset(options);\n minutesDurationScrollRef.current?.reset(options);\n secondsDurationScrollRef.current?.reset(options);\n },\n setValue: (value, options) => {\n setSelectedHours(value.hours);\n setSelectedMinutes(value.minutes);\n setSelectedSeconds(value.seconds);\n hoursDurationScrollRef.current?.setValue(value.hours, options);\n minutesDurationScrollRef.current?.setValue(\n value.minutes,\n options\n );\n secondsDurationScrollRef.current?.setValue(\n value.seconds,\n options\n );\n },\n latestDuration: {\n hours: hoursDurationScrollRef.current?.latestDuration,\n minutes: minutesDurationScrollRef.current?.latestDuration,\n seconds: secondsDurationScrollRef.current?.latestDuration,\n },\n }));\n\n return (\n <View\n {...pickerContainerProps}\n style={styles.pickerContainer}\n testID=\"timer-picker\">\n {!hideHours ? (\n <DurationScroll\n ref={hoursDurationScrollRef}\n numberOfItems={23}\n label={hourLabel}\n initialValue={initialHours}\n aggressivelyGetLatestDuration={aggressivelyGetLatestDuration}\n onDurationChange={setSelectedHours}\n pickerGradientOverlayProps={pickerGradientOverlayProps}\n topPickerGradientOverlayProps={\n topPickerGradientOverlayProps\n }\n bottomPickerGradientOverlayProps={\n bottomPickerGradientOverlayProps\n }\n disableInfiniteScroll={disableInfiniteScroll}\n padWithNItems={checkedPadWithNItems}\n limit={hourLimit}\n LinearGradient={LinearGradient}\n styles={styles}\n testID=\"duration-scroll-hour\"\n />\n ) : null}\n {!hideMinutes ? (\n <DurationScroll\n ref={minutesDurationScrollRef}\n numberOfItems={59}\n label={minuteLabel}\n initialValue={initialMinutes}\n aggressivelyGetLatestDuration={aggressivelyGetLatestDuration}\n onDurationChange={setSelectedMinutes}\n padNumbersWithZero\n pickerGradientOverlayProps={pickerGradientOverlayProps}\n topPickerGradientOverlayProps={\n topPickerGradientOverlayProps\n }\n bottomPickerGradientOverlayProps={\n bottomPickerGradientOverlayProps\n }\n disableInfiniteScroll={disableInfiniteScroll}\n padWithNItems={checkedPadWithNItems}\n limit={minuteLimit}\n LinearGradient={LinearGradient}\n styles={styles}\n testID=\"duration-scroll-minute\"\n />\n ) : null}\n {!hideSeconds ? (\n <DurationScroll\n ref={secondsDurationScrollRef}\n numberOfItems={59}\n label={secondLabel}\n initialValue={initialSeconds}\n aggressivelyGetLatestDuration={aggressivelyGetLatestDuration}\n onDurationChange={setSelectedSeconds}\n padNumbersWithZero\n pickerGradientOverlayProps={pickerGradientOverlayProps}\n topPickerGradientOverlayProps={\n topPickerGradientOverlayProps\n }\n bottomPickerGradientOverlayProps={\n bottomPickerGradientOverlayProps\n }\n disableInfiniteScroll={disableInfiniteScroll}\n padWithNItems={checkedPadWithNItems}\n limit={secondLimit}\n LinearGradient={LinearGradient}\n styles={styles}\n testID=\"duration-scroll-second\"\n />\n ) : null}\n </View>\n );\n }\n);\n\nexport default React.memo(TimerPicker);\n"],"mappings":"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"}
|
|
@@ -53,6 +53,7 @@ const TimerPickerModal = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
53
53
|
styles: customStyles
|
|
54
54
|
} = _ref;
|
|
55
55
|
const styles = (0, _TimerPickerModal.generateStyles)(customStyles);
|
|
56
|
+
const timerPickerRef = (0, _react.useRef)(null);
|
|
56
57
|
const [selectedDuration, setSelectedDuration] = (0, _react.useState)({
|
|
57
58
|
hours: initialHours,
|
|
58
59
|
minutes: initialMinutes,
|
|
@@ -63,7 +64,7 @@ const TimerPickerModal = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
63
64
|
minutes: initialMinutes,
|
|
64
65
|
seconds: initialSeconds
|
|
65
66
|
});
|
|
66
|
-
const
|
|
67
|
+
const hideModalHandler = () => {
|
|
67
68
|
setSelectedDuration({
|
|
68
69
|
hours: confirmedDuration.hours,
|
|
69
70
|
minutes: confirmedDuration.minutes,
|
|
@@ -71,44 +72,58 @@ const TimerPickerModal = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
71
72
|
});
|
|
72
73
|
setIsVisible(false);
|
|
73
74
|
};
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
const confirmHandler = () => {
|
|
76
|
+
var _timerPickerRef$curre, _latestDuration$hours, _latestDuration$minut, _latestDuration$secon;
|
|
77
|
+
const latestDuration = (_timerPickerRef$curre = timerPickerRef.current) === null || _timerPickerRef$curre === void 0 ? void 0 : _timerPickerRef$curre.latestDuration;
|
|
78
|
+
const newDuration = {
|
|
79
|
+
hours: (latestDuration === null || latestDuration === void 0 || (_latestDuration$hours = latestDuration.hours) === null || _latestDuration$hours === void 0 ? void 0 : _latestDuration$hours.current) ?? selectedDuration.hours,
|
|
80
|
+
minutes: (latestDuration === null || latestDuration === void 0 || (_latestDuration$minut = latestDuration.minutes) === null || _latestDuration$minut === void 0 ? void 0 : _latestDuration$minut.current) ?? selectedDuration.minutes,
|
|
81
|
+
seconds: (latestDuration === null || latestDuration === void 0 || (_latestDuration$secon = latestDuration.seconds) === null || _latestDuration$secon === void 0 ? void 0 : _latestDuration$secon.current) ?? selectedDuration.seconds
|
|
82
|
+
};
|
|
83
|
+
setConfirmedDuration(newDuration);
|
|
84
|
+
onConfirm(newDuration);
|
|
77
85
|
};
|
|
78
|
-
const
|
|
86
|
+
const cancelHandler = () => {
|
|
79
87
|
setIsVisible(false);
|
|
80
88
|
setSelectedDuration(confirmedDuration);
|
|
81
89
|
onCancel === null || onCancel === void 0 || onCancel();
|
|
82
90
|
};
|
|
83
91
|
|
|
84
92
|
// wrapped in useCallback to avoid unnecessary re-renders of TimerPicker
|
|
85
|
-
const
|
|
93
|
+
const durationChangeHandler = (0, _react.useCallback)(duration => {
|
|
86
94
|
setSelectedDuration(duration);
|
|
87
95
|
onDurationChange === null || onDurationChange === void 0 || onDurationChange(duration);
|
|
88
96
|
}, [onDurationChange]);
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
97
|
+
(0, _react.useImperativeHandle)(ref, () => {
|
|
98
|
+
var _timerPickerRef$curre4, _timerPickerRef$curre5, _timerPickerRef$curre6;
|
|
99
|
+
return {
|
|
100
|
+
reset: options => {
|
|
101
|
+
var _timerPickerRef$curre2;
|
|
102
|
+
const initialDuration = {
|
|
103
|
+
hours: initialHours,
|
|
104
|
+
minutes: initialMinutes,
|
|
105
|
+
seconds: initialSeconds
|
|
106
|
+
};
|
|
107
|
+
setSelectedDuration(initialDuration);
|
|
108
|
+
setConfirmedDuration(initialDuration);
|
|
109
|
+
(_timerPickerRef$curre2 = timerPickerRef.current) === null || _timerPickerRef$curre2 === void 0 || _timerPickerRef$curre2.reset(options);
|
|
110
|
+
},
|
|
111
|
+
setValue: (value, options) => {
|
|
112
|
+
var _timerPickerRef$curre3;
|
|
113
|
+
setSelectedDuration(value);
|
|
114
|
+
setConfirmedDuration(value);
|
|
115
|
+
(_timerPickerRef$curre3 = timerPickerRef.current) === null || _timerPickerRef$curre3 === void 0 || _timerPickerRef$curre3.setValue(value, options);
|
|
116
|
+
},
|
|
117
|
+
latestDuration: {
|
|
118
|
+
hours: (_timerPickerRef$curre4 = timerPickerRef.current) === null || _timerPickerRef$curre4 === void 0 || (_timerPickerRef$curre4 = _timerPickerRef$curre4.latestDuration) === null || _timerPickerRef$curre4 === void 0 ? void 0 : _timerPickerRef$curre4.hours,
|
|
119
|
+
minutes: (_timerPickerRef$curre5 = timerPickerRef.current) === null || _timerPickerRef$curre5 === void 0 || (_timerPickerRef$curre5 = _timerPickerRef$curre5.latestDuration) === null || _timerPickerRef$curre5 === void 0 ? void 0 : _timerPickerRef$curre5.minutes,
|
|
120
|
+
seconds: (_timerPickerRef$curre6 = timerPickerRef.current) === null || _timerPickerRef$curre6 === void 0 || (_timerPickerRef$curre6 = _timerPickerRef$curre6.latestDuration) === null || _timerPickerRef$curre6 === void 0 ? void 0 : _timerPickerRef$curre6.seconds
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
});
|
|
109
124
|
return /*#__PURE__*/_react.default.createElement(_Modal.default, _extends({
|
|
110
125
|
isVisible: visible,
|
|
111
|
-
onOverlayPress: closeOnOverlayPress ?
|
|
126
|
+
onOverlayPress: closeOnOverlayPress ? hideModalHandler : undefined
|
|
112
127
|
}, modalProps, {
|
|
113
128
|
testID: "timer-picker-modal"
|
|
114
129
|
}), /*#__PURE__*/_react.default.createElement(_reactNative.View, _extends({}, containerProps, {
|
|
@@ -119,10 +134,11 @@ const TimerPickerModal = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
119
134
|
style: styles.modalTitle
|
|
120
135
|
}), modalTitle) : null, /*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
|
|
121
136
|
ref: timerPickerRef,
|
|
122
|
-
onDurationChange:
|
|
137
|
+
onDurationChange: durationChangeHandler,
|
|
123
138
|
initialHours: confirmedDuration.hours,
|
|
124
139
|
initialMinutes: confirmedDuration.minutes,
|
|
125
140
|
initialSeconds: confirmedDuration.seconds,
|
|
141
|
+
aggressivelyGetLatestDuration: true,
|
|
126
142
|
hideHours: hideHours,
|
|
127
143
|
hideMinutes: hideMinutes,
|
|
128
144
|
hideSeconds: hideSeconds,
|
|
@@ -143,11 +159,11 @@ const TimerPickerModal = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
|
143
159
|
}), /*#__PURE__*/_react.default.createElement(_reactNative.View, _extends({}, buttonContainerProps, {
|
|
144
160
|
style: styles.buttonContainer
|
|
145
161
|
}), !hideCancelButton ? /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, _extends({
|
|
146
|
-
onPress:
|
|
162
|
+
onPress: cancelHandler
|
|
147
163
|
}, buttonTouchableOpacityProps), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
148
164
|
style: [styles.button, styles.cancelButton]
|
|
149
165
|
}, cancelButtonText)) : null, /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, _extends({
|
|
150
|
-
onPress:
|
|
166
|
+
onPress: confirmHandler
|
|
151
167
|
}, buttonTouchableOpacityProps), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
152
168
|
style: [styles.button, styles.confirmButton]
|
|
153
169
|
}, confirmButtonText))))));
|