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 CHANGED
@@ -1,7 +1,7 @@
1
1
  # React Native Timer Picker ⏰🕰️⏳
2
2
 
3
3
  [![license](https://img.shields.io/github/license/mashape/apistatus.svg?style=for-the-badge)]()
4
- ![platforms](https://img.shields.io/badge/platforms-Android%20%7C%20iOS%20%7C%20Web-brightgreen.svg?style=for-the-badge&colorB=191A17)
4
+ ![platforms](https://img.shields.io/badge/platforms-Android%20%7C%20iOS-brightgreen.svg?style=for-the-badge&colorB=191A17)
5
5
  [![Version](https://img.shields.io/npm/v/react-native-timer-picker.svg?style=for-the-badge)](https://www.npmjs.com/package/react-native-timer-picker)
6
6
  [![npm](https://img.shields.io/npm/dt/react-native-timer-picker.svg?style=for-the-badge)](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 try it out properly.
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.9,
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
- reset: options => {
59
- var _hoursDurationScrollR, _minutesDurationScrol, _secondsDurationScrol;
60
- setSelectedHours(initialHours);
61
- setSelectedMinutes(initialMinutes);
62
- setSelectedSeconds(initialSeconds);
63
- (_hoursDurationScrollR = hoursDurationScrollRef.current) === null || _hoursDurationScrollR === void 0 || _hoursDurationScrollR.reset(options);
64
- (_minutesDurationScrol = minutesDurationScrollRef.current) === null || _minutesDurationScrol === void 0 || _minutesDurationScrol.reset(options);
65
- (_secondsDurationScrol = secondsDurationScrollRef.current) === null || _secondsDurationScrol === void 0 || _secondsDurationScrol.reset(options);
66
- },
67
- setValue: (value, options) => {
68
- var _hoursDurationScrollR2, _minutesDurationScrol2, _secondsDurationScrol2;
69
- setSelectedHours(value.hours);
70
- setSelectedMinutes(value.minutes);
71
- setSelectedSeconds(value.seconds);
72
- (_hoursDurationScrollR2 = hoursDurationScrollRef.current) === null || _hoursDurationScrollR2 === void 0 || _hoursDurationScrollR2.setValue(value.hours, options);
73
- (_minutesDurationScrol2 = minutesDurationScrollRef.current) === null || _minutesDurationScrol2 === void 0 || _minutesDurationScrol2.setValue(value.minutes, options);
74
- (_secondsDurationScrol2 = secondsDurationScrollRef.current) === null || _secondsDurationScrol2 === void 0 || _secondsDurationScrol2.setValue(value.seconds, options);
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 hideModal = () => {
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 confirm = () => {
75
- setConfirmedDuration(selectedDuration);
76
- onConfirm(selectedDuration);
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 cancel = () => {
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 durationChange = (0, _react.useCallback)(duration => {
93
+ const durationChangeHandler = (0, _react.useCallback)(duration => {
86
94
  setSelectedDuration(duration);
87
95
  onDurationChange === null || onDurationChange === void 0 || onDurationChange(duration);
88
96
  }, [onDurationChange]);
89
- const timerPickerRef = (0, _react.useRef)(null);
90
- (0, _react.useImperativeHandle)(ref, () => ({
91
- reset: options => {
92
- var _timerPickerRef$curre;
93
- const initialDuration = {
94
- hours: initialHours,
95
- minutes: initialMinutes,
96
- seconds: initialSeconds
97
- };
98
- setSelectedDuration(initialDuration);
99
- setConfirmedDuration(initialDuration);
100
- (_timerPickerRef$curre = timerPickerRef.current) === null || _timerPickerRef$curre === void 0 || _timerPickerRef$curre.reset(options);
101
- },
102
- setValue: (value, options) => {
103
- var _timerPickerRef$curre2;
104
- setSelectedDuration(value);
105
- setConfirmedDuration(value);
106
- (_timerPickerRef$curre2 = timerPickerRef.current) === null || _timerPickerRef$curre2 === void 0 || _timerPickerRef$curre2.setValue(value, options);
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 ? hideModal : undefined
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: durationChange,
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: cancel
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: confirm
166
+ onPress: confirmHandler
151
167
  }, buttonTouchableOpacityProps), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
152
168
  style: [styles.button, styles.confirmButton]
153
169
  }, confirmButtonText))))));