react-native-timer-picker 1.2.10 → 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.
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_TimerPicker","_interopRequireDefault","_Modal","_TimerPickerModal","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","TimerPickerModal","forwardRef","_ref","ref","visible","setIsVisible","onConfirm","onCancel","onDurationChange","closeOnOverlayPress","initialHours","initialMinutes","initialSeconds","hideHours","hideMinutes","hideSeconds","hourLimit","minuteLimit","secondLimit","hourLabel","minuteLabel","secondLabel","padWithNItems","disableInfiniteScroll","hideCancelButton","confirmButtonText","cancelButtonText","modalTitle","LinearGradient","modalProps","containerProps","contentContainerProps","pickerContainerProps","buttonContainerProps","buttonTouchableOpacityProps","modalTitleProps","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","styles","customStyles","generateStyles","selectedDuration","setSelectedDuration","useState","hours","minutes","seconds","confirmedDuration","setConfirmedDuration","hideModal","confirm","cancel","durationChange","useCallback","duration","timerPickerRef","useRef","useImperativeHandle","reset","options","_timerPickerRef$curre","initialDuration","current","setValue","value","_timerPickerRef$curre2","createElement","isVisible","onOverlayPress","undefined","testID","View","style","container","contentContainer","Text","buttonContainer","TouchableOpacity","onPress","button","cancelButton","confirmButton","_default","exports","React","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { View, Text, TouchableOpacity } from \"react-native\";\n\nimport TimerPicker, { TimerPickerProps, TimerPickerRef } from \"./TimerPicker\";\nimport Modal from \"./Modal\";\n\nimport {\n generateStyles,\n CustomTimerPickerModalStyles,\n} from \"./TimerPickerModal.styles\";\n\nexport interface TimerPickerModalRef {\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 TimerPickerModalProps extends TimerPickerProps {\n visible: boolean;\n setIsVisible: (isVisible: boolean) => void;\n onConfirm: ({\n hours,\n minutes,\n seconds,\n }: {\n hours: number;\n minutes: number;\n seconds: number;\n }) => void;\n onCancel?: () => void;\n closeOnOverlayPress?: boolean;\n hideCancelButton?: boolean;\n confirmButtonText?: string;\n cancelButtonText?: string;\n modalTitle?: string;\n modalProps?: React.ComponentProps<typeof Modal>;\n containerProps?: React.ComponentProps<typeof View>;\n contentContainerProps?: React.ComponentProps<typeof View>;\n buttonContainerProps?: React.ComponentProps<typeof View>;\n buttonTouchableOpacityProps?: React.ComponentProps<typeof TouchableOpacity>;\n modalTitleProps?: React.ComponentProps<typeof Text>;\n styles?: CustomTimerPickerModalStyles;\n}\n\nconst TimerPickerModal = forwardRef<TimerPickerModalRef, TimerPickerModalProps>(\n (\n {\n visible,\n setIsVisible,\n onConfirm,\n onCancel,\n onDurationChange,\n closeOnOverlayPress,\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 hideCancelButton = false,\n confirmButtonText = \"Confirm\",\n cancelButtonText = \"Cancel\",\n modalTitle,\n LinearGradient,\n modalProps,\n containerProps,\n contentContainerProps,\n pickerContainerProps,\n buttonContainerProps,\n buttonTouchableOpacityProps,\n modalTitleProps,\n pickerGradientOverlayProps,\n topPickerGradientOverlayProps,\n bottomPickerGradientOverlayProps,\n styles: customStyles,\n },\n ref\n ): React.ReactElement => {\n const styles = generateStyles(customStyles);\n\n const [selectedDuration, setSelectedDuration] = useState({\n hours: initialHours,\n minutes: initialMinutes,\n seconds: initialSeconds,\n });\n const [confirmedDuration, setConfirmedDuration] = useState({\n hours: initialHours,\n minutes: initialMinutes,\n seconds: initialSeconds,\n });\n\n const hideModal = () => {\n setSelectedDuration({\n hours: confirmedDuration.hours,\n minutes: confirmedDuration.minutes,\n seconds: confirmedDuration.seconds,\n });\n setIsVisible(false);\n };\n\n const confirm = () => {\n setConfirmedDuration(selectedDuration);\n onConfirm(selectedDuration);\n };\n\n const cancel = () => {\n setIsVisible(false);\n setSelectedDuration(confirmedDuration);\n onCancel?.();\n };\n\n // wrapped in useCallback to avoid unnecessary re-renders of TimerPicker\n const durationChange = useCallback(\n (duration: { hours: number; minutes: number; seconds: number }) => {\n setSelectedDuration(duration);\n onDurationChange?.(duration);\n },\n [onDurationChange]\n );\n\n const timerPickerRef = useRef<TimerPickerRef>(null);\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n const initialDuration = {\n hours: initialHours,\n minutes: initialMinutes,\n seconds: initialSeconds,\n };\n setSelectedDuration(initialDuration);\n setConfirmedDuration(initialDuration);\n timerPickerRef.current?.reset(options);\n },\n setValue: (value, options) => {\n setSelectedDuration(value);\n setConfirmedDuration(value);\n timerPickerRef.current?.setValue(value, options);\n },\n }));\n\n return (\n <Modal\n isVisible={visible}\n onOverlayPress={closeOnOverlayPress ? hideModal : undefined}\n {...modalProps}\n testID=\"timer-picker-modal\">\n <View {...containerProps} style={styles.container}>\n <View\n {...contentContainerProps}\n style={styles.contentContainer}>\n {modalTitle ? (\n <Text\n {...modalTitleProps}\n style={styles.modalTitle}>\n {modalTitle}\n </Text>\n ) : null}\n <TimerPicker\n ref={timerPickerRef}\n onDurationChange={durationChange}\n initialHours={confirmedDuration.hours}\n initialMinutes={confirmedDuration.minutes}\n initialSeconds={confirmedDuration.seconds}\n hideHours={hideHours}\n hideMinutes={hideMinutes}\n hideSeconds={hideSeconds}\n hourLimit={hourLimit}\n minuteLimit={minuteLimit}\n secondLimit={secondLimit}\n hourLabel={hourLabel}\n minuteLabel={minuteLabel}\n secondLabel={secondLabel}\n padWithNItems={padWithNItems}\n disableInfiniteScroll={disableInfiniteScroll}\n LinearGradient={LinearGradient}\n pickerContainerProps={pickerContainerProps}\n pickerGradientOverlayProps={\n pickerGradientOverlayProps\n }\n topPickerGradientOverlayProps={\n topPickerGradientOverlayProps\n }\n bottomPickerGradientOverlayProps={\n bottomPickerGradientOverlayProps\n }\n styles={customStyles}\n />\n <View\n {...buttonContainerProps}\n style={styles.buttonContainer}>\n {!hideCancelButton ? (\n <TouchableOpacity\n onPress={cancel}\n {...buttonTouchableOpacityProps}>\n <Text\n style={[\n styles.button,\n styles.cancelButton,\n ]}>\n {cancelButtonText}\n </Text>\n </TouchableOpacity>\n ) : null}\n <TouchableOpacity\n onPress={confirm}\n {...buttonTouchableOpacityProps}>\n <Text\n style={[\n styles.button,\n styles.confirmButton,\n ]}>\n {confirmButtonText}\n </Text>\n </TouchableOpacity>\n </View>\n </View>\n </View>\n </Modal>\n );\n }\n);\n\nexport default React.memo(TimerPickerModal);\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_TimerPicker","_interopRequireDefault","_Modal","_TimerPickerModal","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","TimerPickerModal","forwardRef","_ref","ref","visible","setIsVisible","onConfirm","onCancel","onDurationChange","closeOnOverlayPress","initialHours","initialMinutes","initialSeconds","hideHours","hideMinutes","hideSeconds","hourLimit","minuteLimit","secondLimit","hourLabel","minuteLabel","secondLabel","padWithNItems","disableInfiniteScroll","hideCancelButton","confirmButtonText","cancelButtonText","modalTitle","LinearGradient","modalProps","containerProps","contentContainerProps","pickerContainerProps","buttonContainerProps","buttonTouchableOpacityProps","modalTitleProps","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","styles","customStyles","generateStyles","timerPickerRef","useRef","selectedDuration","setSelectedDuration","useState","hours","minutes","seconds","confirmedDuration","setConfirmedDuration","hideModalHandler","confirmHandler","_timerPickerRef$curre","_latestDuration$hours","_latestDuration$minut","_latestDuration$secon","latestDuration","current","newDuration","cancelHandler","durationChangeHandler","useCallback","duration","useImperativeHandle","_timerPickerRef$curre4","_timerPickerRef$curre5","_timerPickerRef$curre6","reset","options","_timerPickerRef$curre2","initialDuration","setValue","value","_timerPickerRef$curre3","createElement","isVisible","onOverlayPress","undefined","testID","View","style","container","contentContainer","Text","aggressivelyGetLatestDuration","buttonContainer","TouchableOpacity","onPress","button","cancelButton","confirmButton","_default","exports","React","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n MutableRefObject,\n forwardRef,\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { View, Text, TouchableOpacity } from \"react-native\";\n\nimport TimerPicker, { TimerPickerProps, TimerPickerRef } from \"./TimerPicker\";\nimport Modal from \"./Modal\";\n\nimport {\n generateStyles,\n CustomTimerPickerModalStyles,\n} from \"./TimerPickerModal.styles\";\n\nexport interface TimerPickerModalRef {\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 TimerPickerModalProps extends TimerPickerProps {\n visible: boolean;\n setIsVisible: (isVisible: boolean) => void;\n onConfirm: ({\n hours,\n minutes,\n seconds,\n }: {\n hours: number;\n minutes: number;\n seconds: number;\n }) => void;\n onCancel?: () => void;\n closeOnOverlayPress?: boolean;\n hideCancelButton?: boolean;\n confirmButtonText?: string;\n cancelButtonText?: string;\n modalTitle?: string;\n modalProps?: React.ComponentProps<typeof Modal>;\n containerProps?: React.ComponentProps<typeof View>;\n contentContainerProps?: React.ComponentProps<typeof View>;\n buttonContainerProps?: React.ComponentProps<typeof View>;\n buttonTouchableOpacityProps?: React.ComponentProps<typeof TouchableOpacity>;\n modalTitleProps?: React.ComponentProps<typeof Text>;\n styles?: CustomTimerPickerModalStyles;\n}\n\nconst TimerPickerModal = forwardRef<TimerPickerModalRef, TimerPickerModalProps>(\n (\n {\n visible,\n setIsVisible,\n onConfirm,\n onCancel,\n onDurationChange,\n closeOnOverlayPress,\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 hideCancelButton = false,\n confirmButtonText = \"Confirm\",\n cancelButtonText = \"Cancel\",\n modalTitle,\n LinearGradient,\n modalProps,\n containerProps,\n contentContainerProps,\n pickerContainerProps,\n buttonContainerProps,\n buttonTouchableOpacityProps,\n modalTitleProps,\n pickerGradientOverlayProps,\n topPickerGradientOverlayProps,\n bottomPickerGradientOverlayProps,\n styles: customStyles,\n },\n ref\n ): React.ReactElement => {\n const styles = generateStyles(customStyles);\n\n const timerPickerRef = useRef<TimerPickerRef>(null);\n\n const [selectedDuration, setSelectedDuration] = useState({\n hours: initialHours,\n minutes: initialMinutes,\n seconds: initialSeconds,\n });\n const [confirmedDuration, setConfirmedDuration] = useState({\n hours: initialHours,\n minutes: initialMinutes,\n seconds: initialSeconds,\n });\n\n const hideModalHandler = () => {\n setSelectedDuration({\n hours: confirmedDuration.hours,\n minutes: confirmedDuration.minutes,\n seconds: confirmedDuration.seconds,\n });\n setIsVisible(false);\n };\n\n const confirmHandler = () => {\n const latestDuration = timerPickerRef.current?.latestDuration;\n const newDuration = {\n hours: latestDuration?.hours?.current ?? selectedDuration.hours,\n minutes:\n latestDuration?.minutes?.current ??\n selectedDuration.minutes,\n seconds:\n latestDuration?.seconds?.current ??\n selectedDuration.seconds,\n };\n setConfirmedDuration(newDuration);\n onConfirm(newDuration);\n };\n\n const cancelHandler = () => {\n setIsVisible(false);\n setSelectedDuration(confirmedDuration);\n onCancel?.();\n };\n\n // wrapped in useCallback to avoid unnecessary re-renders of TimerPicker\n const durationChangeHandler = useCallback(\n (duration: { hours: number; minutes: number; seconds: number }) => {\n setSelectedDuration(duration);\n onDurationChange?.(duration);\n },\n [onDurationChange]\n );\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n const initialDuration = {\n hours: initialHours,\n minutes: initialMinutes,\n seconds: initialSeconds,\n };\n setSelectedDuration(initialDuration);\n setConfirmedDuration(initialDuration);\n timerPickerRef.current?.reset(options);\n },\n setValue: (value, options) => {\n setSelectedDuration(value);\n setConfirmedDuration(value);\n timerPickerRef.current?.setValue(value, options);\n },\n latestDuration: {\n hours: timerPickerRef.current?.latestDuration?.hours,\n minutes: timerPickerRef.current?.latestDuration?.minutes,\n seconds: timerPickerRef.current?.latestDuration?.seconds,\n },\n }));\n\n return (\n <Modal\n isVisible={visible}\n onOverlayPress={\n closeOnOverlayPress ? hideModalHandler : undefined\n }\n {...modalProps}\n testID=\"timer-picker-modal\">\n <View {...containerProps} style={styles.container}>\n <View\n {...contentContainerProps}\n style={styles.contentContainer}>\n {modalTitle ? (\n <Text\n {...modalTitleProps}\n style={styles.modalTitle}>\n {modalTitle}\n </Text>\n ) : null}\n <TimerPicker\n ref={timerPickerRef}\n onDurationChange={durationChangeHandler}\n initialHours={confirmedDuration.hours}\n initialMinutes={confirmedDuration.minutes}\n initialSeconds={confirmedDuration.seconds}\n aggressivelyGetLatestDuration={true}\n hideHours={hideHours}\n hideMinutes={hideMinutes}\n hideSeconds={hideSeconds}\n hourLimit={hourLimit}\n minuteLimit={minuteLimit}\n secondLimit={secondLimit}\n hourLabel={hourLabel}\n minuteLabel={minuteLabel}\n secondLabel={secondLabel}\n padWithNItems={padWithNItems}\n disableInfiniteScroll={disableInfiniteScroll}\n LinearGradient={LinearGradient}\n pickerContainerProps={pickerContainerProps}\n pickerGradientOverlayProps={\n pickerGradientOverlayProps\n }\n topPickerGradientOverlayProps={\n topPickerGradientOverlayProps\n }\n bottomPickerGradientOverlayProps={\n bottomPickerGradientOverlayProps\n }\n styles={customStyles}\n />\n <View\n {...buttonContainerProps}\n style={styles.buttonContainer}>\n {!hideCancelButton ? (\n <TouchableOpacity\n onPress={cancelHandler}\n {...buttonTouchableOpacityProps}>\n <Text\n style={[\n styles.button,\n styles.cancelButton,\n ]}>\n {cancelButtonText}\n </Text>\n </TouchableOpacity>\n ) : null}\n <TouchableOpacity\n onPress={confirmHandler}\n {...buttonTouchableOpacityProps}>\n <Text\n style={[\n styles.button,\n styles.confirmButton,\n ]}>\n {confirmButtonText}\n </Text>\n </TouchableOpacity>\n </View>\n </View>\n </View>\n </Modal>\n );\n }\n);\n\nexport default React.memo(TimerPickerModal);\n"],"mappings":"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"}
@@ -16,6 +16,7 @@ const DurationScroll = /*#__PURE__*/forwardRef((_ref, ref) => {
16
16
  padNumbersWithZero = false,
17
17
  disableInfiniteScroll = false,
18
18
  limit,
19
+ aggressivelyGetLatestDuration,
19
20
  padWithNItems,
20
21
  pickerGradientOverlayProps,
21
22
  topPickerGradientOverlayProps,
@@ -24,7 +25,6 @@ const DurationScroll = /*#__PURE__*/forwardRef((_ref, ref) => {
24
25
  testID,
25
26
  styles
26
27
  } = _ref;
27
- const flatListRef = useRef(null);
28
28
  const data = generateNumbers(numberOfItems, {
29
29
  padWithZero: padNumbersWithZero,
30
30
  repeatNTimes: 3,
@@ -39,6 +39,8 @@ const DurationScroll = /*#__PURE__*/forwardRef((_ref, ref) => {
39
39
  padWithNItems,
40
40
  disableInfiniteScroll
41
41
  });
42
+ const latestDuration = useRef(0);
43
+ const flatListRef = useRef(null);
42
44
  useImperativeHandle(ref, () => ({
43
45
  reset: options => {
44
46
  var _flatListRef$current;
@@ -58,7 +60,8 @@ const DurationScroll = /*#__PURE__*/forwardRef((_ref, ref) => {
58
60
  disableInfiniteScroll
59
61
  })
60
62
  });
61
- }
63
+ },
64
+ latestDuration: latestDuration
62
65
  }));
63
66
  const renderItem = useCallback(_ref2 => {
64
67
  let {
@@ -73,6 +76,21 @@ const DurationScroll = /*#__PURE__*/forwardRef((_ref, ref) => {
73
76
  style: [styles.pickerItem, intItem > adjustedLimited.max || intItem < adjustedLimited.min ? styles.disabledPickerItem : {}]
74
77
  }, item));
75
78
  }, [adjustedLimited.max, adjustedLimited.min, styles.disabledPickerItem, styles.pickerItem, styles.pickerItemContainer]);
79
+ const onScroll = useCallback(e => {
80
+ // this function is only used when the picker is in a modal
81
+ // it is used to ensure that the modal gets the latest duration on clicking
82
+ // the confirm button, even if the scrollview is still scrolling
83
+ const newIndex = Math.round(e.nativeEvent.contentOffset.y / styles.pickerItemContainer.height);
84
+ let newDuration = (disableInfiniteScroll ? newIndex : newIndex + padWithNItems) % (numberOfItems + 1);
85
+
86
+ // check limits
87
+ if (newDuration > adjustedLimited.max) {
88
+ newDuration = adjustedLimited.max;
89
+ } else if (newDuration < adjustedLimited.min) {
90
+ newDuration = adjustedLimited.min;
91
+ }
92
+ latestDuration.current = newDuration;
93
+ }, [adjustedLimited.max, adjustedLimited.min, disableInfiniteScroll, numberOfItems, padWithNItems, styles.pickerItemContainer.height]);
76
94
  const onMomentumScrollEnd = useCallback(e => {
77
95
  const newIndex = Math.round(e.nativeEvent.contentOffset.y / styles.pickerItemContainer.height);
78
96
  let newDuration = (disableInfiniteScroll ? newIndex : newIndex + padWithNItems) % (numberOfItems + 1);
@@ -146,7 +164,7 @@ const DurationScroll = /*#__PURE__*/forwardRef((_ref, ref) => {
146
164
  renderItem: renderItem,
147
165
  keyExtractor: KEY_EXTRACTOR,
148
166
  showsVerticalScrollIndicator: false,
149
- decelerationRate: 0.9,
167
+ decelerationRate: 0.88,
150
168
  scrollEventThrottle: 16,
151
169
  snapToAlignment: "start"
152
170
  // used in place of snapToOffset due to bug on Android
@@ -154,6 +172,7 @@ const DurationScroll = /*#__PURE__*/forwardRef((_ref, ref) => {
154
172
  snapToOffsets: [...Array(data.length)].map((_, i) => i * styles.pickerItemContainer.height),
155
173
  viewabilityConfigCallbackPairs: !disableInfiniteScroll ? viewabilityConfigCallbackPairs === null || viewabilityConfigCallbackPairs === void 0 ? void 0 : viewabilityConfigCallbackPairs.current : undefined,
156
174
  onMomentumScrollEnd: onMomentumScrollEnd,
175
+ onScroll: aggressivelyGetLatestDuration ? onScroll : undefined,
157
176
  testID: "duration-scroll-flatlist"
158
177
  }), /*#__PURE__*/React.createElement(View, {
159
178
  style: styles.pickerLabelContainer,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useRef","useCallback","forwardRef","useImperativeHandle","View","Text","FlatList","generateNumbers","colorToRgba","getAdjustedLimit","getScrollIndex","KEY_EXTRACTOR","_","index","toString","DurationScroll","_ref","ref","numberOfItems","label","initialValue","onDurationChange","padNumbersWithZero","disableInfiniteScroll","limit","padWithNItems","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","LinearGradient","testID","styles","flatListRef","data","padWithZero","repeatNTimes","numberOfItemsToShow","adjustedLimited","initialScrollIndex","value","reset","options","_flatListRef$current","current","scrollToIndex","animated","setValue","_flatListRef$current2","renderItem","_ref2","item","intItem","parseInt","createElement","key","style","pickerItemContainer","pickerItem","max","min","disabledPickerItem","onMomentumScrollEnd","e","newIndex","Math","round","nativeEvent","contentOffset","y","height","newDuration","_flatListRef$current3","targetScrollIndex","_flatListRef$current4","length","onViewableItemsChanged","_ref3","_viewableItems$","_viewableItems$2","viewableItems","_flatListRef$current5","_flatListRef$current6","getItemLayout","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","overflow","windowSize","keyExtractor","showsVerticalScrollIndicator","decelerationRate","scrollEventThrottle","snapToAlignment","snapToOffsets","Array","map","i","undefined","pickerLabelContainer","pointerEvents","pickerLabel","Fragment","_extends","colors","pickerContainer","backgroundColor","color","opacity","start","x","end","pickerGradientOverlay","top","bottom","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","useRef","useCallback","forwardRef","useImperativeHandle","View","Text","FlatList","generateNumbers","colorToRgba","getAdjustedLimit","getScrollIndex","KEY_EXTRACTOR","_","index","toString","DurationScroll","_ref","ref","numberOfItems","label","initialValue","onDurationChange","padNumbersWithZero","disableInfiniteScroll","limit","aggressivelyGetLatestDuration","padWithNItems","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","LinearGradient","testID","styles","data","padWithZero","repeatNTimes","numberOfItemsToShow","adjustedLimited","initialScrollIndex","value","latestDuration","flatListRef","reset","options","_flatListRef$current","current","scrollToIndex","animated","setValue","_flatListRef$current2","renderItem","_ref2","item","intItem","parseInt","createElement","key","style","pickerItemContainer","pickerItem","max","min","disabledPickerItem","onScroll","e","newIndex","Math","round","nativeEvent","contentOffset","y","height","newDuration","onMomentumScrollEnd","_flatListRef$current3","targetScrollIndex","_flatListRef$current4","length","onViewableItemsChanged","_ref3","_viewableItems$","_viewableItems$2","viewableItems","_flatListRef$current5","_flatListRef$current6","getItemLayout","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","overflow","windowSize","keyExtractor","showsVerticalScrollIndicator","decelerationRate","scrollEventThrottle","snapToAlignment","snapToOffsets","Array","map","i","undefined","pickerLabelContainer","pointerEvents","pickerLabel","Fragment","_extends","colors","pickerContainer","backgroundColor","color","opacity","start","x","end","pickerGradientOverlay","top","bottom","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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"}
@@ -20,6 +20,7 @@ const TimerPicker = /*#__PURE__*/forwardRef((_ref, ref) => {
20
20
  secondLabel = "s",
21
21
  padWithNItems = 1,
22
22
  disableInfiniteScroll = false,
23
+ aggressivelyGetLatestDuration = false,
23
24
  LinearGradient,
24
25
  pickerContainerProps,
25
26
  pickerGradientOverlayProps,
@@ -45,26 +46,34 @@ const TimerPicker = /*#__PURE__*/forwardRef((_ref, ref) => {
45
46
  const hoursDurationScrollRef = useRef(null);
46
47
  const minutesDurationScrollRef = useRef(null);
47
48
  const secondsDurationScrollRef = useRef(null);
48
- useImperativeHandle(ref, () => ({
49
- reset: options => {
50
- var _hoursDurationScrollR, _minutesDurationScrol, _secondsDurationScrol;
51
- setSelectedHours(initialHours);
52
- setSelectedMinutes(initialMinutes);
53
- setSelectedSeconds(initialSeconds);
54
- (_hoursDurationScrollR = hoursDurationScrollRef.current) === null || _hoursDurationScrollR === void 0 || _hoursDurationScrollR.reset(options);
55
- (_minutesDurationScrol = minutesDurationScrollRef.current) === null || _minutesDurationScrol === void 0 || _minutesDurationScrol.reset(options);
56
- (_secondsDurationScrol = secondsDurationScrollRef.current) === null || _secondsDurationScrol === void 0 || _secondsDurationScrol.reset(options);
57
- },
58
- setValue: (value, options) => {
59
- var _hoursDurationScrollR2, _minutesDurationScrol2, _secondsDurationScrol2;
60
- setSelectedHours(value.hours);
61
- setSelectedMinutes(value.minutes);
62
- setSelectedSeconds(value.seconds);
63
- (_hoursDurationScrollR2 = hoursDurationScrollRef.current) === null || _hoursDurationScrollR2 === void 0 || _hoursDurationScrollR2.setValue(value.hours, options);
64
- (_minutesDurationScrol2 = minutesDurationScrollRef.current) === null || _minutesDurationScrol2 === void 0 || _minutesDurationScrol2.setValue(value.minutes, options);
65
- (_secondsDurationScrol2 = secondsDurationScrollRef.current) === null || _secondsDurationScrol2 === void 0 || _secondsDurationScrol2.setValue(value.seconds, options);
66
- }
67
- }));
49
+ useImperativeHandle(ref, () => {
50
+ var _hoursDurationScrollR3, _minutesDurationScrol3, _secondsDurationScrol3;
51
+ return {
52
+ reset: options => {
53
+ var _hoursDurationScrollR, _minutesDurationScrol, _secondsDurationScrol;
54
+ setSelectedHours(initialHours);
55
+ setSelectedMinutes(initialMinutes);
56
+ setSelectedSeconds(initialSeconds);
57
+ (_hoursDurationScrollR = hoursDurationScrollRef.current) === null || _hoursDurationScrollR === void 0 || _hoursDurationScrollR.reset(options);
58
+ (_minutesDurationScrol = minutesDurationScrollRef.current) === null || _minutesDurationScrol === void 0 || _minutesDurationScrol.reset(options);
59
+ (_secondsDurationScrol = secondsDurationScrollRef.current) === null || _secondsDurationScrol === void 0 || _secondsDurationScrol.reset(options);
60
+ },
61
+ setValue: (value, options) => {
62
+ var _hoursDurationScrollR2, _minutesDurationScrol2, _secondsDurationScrol2;
63
+ setSelectedHours(value.hours);
64
+ setSelectedMinutes(value.minutes);
65
+ setSelectedSeconds(value.seconds);
66
+ (_hoursDurationScrollR2 = hoursDurationScrollRef.current) === null || _hoursDurationScrollR2 === void 0 || _hoursDurationScrollR2.setValue(value.hours, options);
67
+ (_minutesDurationScrol2 = minutesDurationScrollRef.current) === null || _minutesDurationScrol2 === void 0 || _minutesDurationScrol2.setValue(value.minutes, options);
68
+ (_secondsDurationScrol2 = secondsDurationScrollRef.current) === null || _secondsDurationScrol2 === void 0 || _secondsDurationScrol2.setValue(value.seconds, options);
69
+ },
70
+ latestDuration: {
71
+ hours: (_hoursDurationScrollR3 = hoursDurationScrollRef.current) === null || _hoursDurationScrollR3 === void 0 ? void 0 : _hoursDurationScrollR3.latestDuration,
72
+ minutes: (_minutesDurationScrol3 = minutesDurationScrollRef.current) === null || _minutesDurationScrol3 === void 0 ? void 0 : _minutesDurationScrol3.latestDuration,
73
+ seconds: (_secondsDurationScrol3 = secondsDurationScrollRef.current) === null || _secondsDurationScrol3 === void 0 ? void 0 : _secondsDurationScrol3.latestDuration
74
+ }
75
+ };
76
+ });
68
77
  return /*#__PURE__*/React.createElement(View, _extends({}, pickerContainerProps, {
69
78
  style: styles.pickerContainer,
70
79
  testID: "timer-picker"
@@ -73,6 +82,7 @@ const TimerPicker = /*#__PURE__*/forwardRef((_ref, ref) => {
73
82
  numberOfItems: 23,
74
83
  label: hourLabel,
75
84
  initialValue: initialHours,
85
+ aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
76
86
  onDurationChange: setSelectedHours,
77
87
  pickerGradientOverlayProps: pickerGradientOverlayProps,
78
88
  topPickerGradientOverlayProps: topPickerGradientOverlayProps,
@@ -88,6 +98,7 @@ const TimerPicker = /*#__PURE__*/forwardRef((_ref, ref) => {
88
98
  numberOfItems: 59,
89
99
  label: minuteLabel,
90
100
  initialValue: initialMinutes,
101
+ aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
91
102
  onDurationChange: setSelectedMinutes,
92
103
  padNumbersWithZero: true,
93
104
  pickerGradientOverlayProps: pickerGradientOverlayProps,
@@ -104,6 +115,7 @@ const TimerPicker = /*#__PURE__*/forwardRef((_ref, ref) => {
104
115
  numberOfItems: 59,
105
116
  label: secondLabel,
106
117
  initialValue: initialSeconds,
118
+ aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
107
119
  onDurationChange: setSelectedSeconds,
108
120
  padNumbersWithZero: true,
109
121
  pickerGradientOverlayProps: pickerGradientOverlayProps,
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","useEffect","useImperativeHandle","useMemo","useRef","useState","View","DurationScroll","generateStyles","TimerPicker","_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","selectedHours","setSelectedHours","selectedMinutes","setSelectedMinutes","selectedSeconds","setSelectedSeconds","hours","minutes","seconds","hoursDurationScrollRef","minutesDurationScrollRef","secondsDurationScrollRef","reset","options","_hoursDurationScrollR","_minutesDurationScrol","_secondsDurationScrol","current","setValue","value","_hoursDurationScrollR2","_minutesDurationScrol2","_secondsDurationScrol2","createElement","_extends","style","pickerContainer","testID","numberOfItems","label","initialValue","limit","padNumbersWithZero","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","forwardRef","useEffect","useImperativeHandle","useMemo","useRef","useState","View","DurationScroll","generateStyles","TimerPicker","_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","selectedHours","setSelectedHours","selectedMinutes","setSelectedMinutes","selectedSeconds","setSelectedSeconds","hours","minutes","seconds","hoursDurationScrollRef","minutesDurationScrollRef","secondsDurationScrollRef","_hoursDurationScrollR3","_minutesDurationScrol3","_secondsDurationScrol3","reset","options","_hoursDurationScrollR","_minutesDurationScrol","_secondsDurationScrol","current","setValue","value","_hoursDurationScrollR2","_minutesDurationScrol2","_secondsDurationScrol2","latestDuration","createElement","_extends","style","pickerContainer","testID","numberOfItems","label","initialValue","limit","padNumbersWithZero","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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"}
@@ -44,6 +44,7 @@ const TimerPickerModal = /*#__PURE__*/forwardRef((_ref, ref) => {
44
44
  styles: customStyles
45
45
  } = _ref;
46
46
  const styles = generateStyles(customStyles);
47
+ const timerPickerRef = useRef(null);
47
48
  const [selectedDuration, setSelectedDuration] = useState({
48
49
  hours: initialHours,
49
50
  minutes: initialMinutes,
@@ -54,7 +55,7 @@ const TimerPickerModal = /*#__PURE__*/forwardRef((_ref, ref) => {
54
55
  minutes: initialMinutes,
55
56
  seconds: initialSeconds
56
57
  });
57
- const hideModal = () => {
58
+ const hideModalHandler = () => {
58
59
  setSelectedDuration({
59
60
  hours: confirmedDuration.hours,
60
61
  minutes: confirmedDuration.minutes,
@@ -62,44 +63,58 @@ const TimerPickerModal = /*#__PURE__*/forwardRef((_ref, ref) => {
62
63
  });
63
64
  setIsVisible(false);
64
65
  };
65
- const confirm = () => {
66
- setConfirmedDuration(selectedDuration);
67
- onConfirm(selectedDuration);
66
+ const confirmHandler = () => {
67
+ var _timerPickerRef$curre, _latestDuration$hours, _latestDuration$minut, _latestDuration$secon;
68
+ const latestDuration = (_timerPickerRef$curre = timerPickerRef.current) === null || _timerPickerRef$curre === void 0 ? void 0 : _timerPickerRef$curre.latestDuration;
69
+ const newDuration = {
70
+ hours: (latestDuration === null || latestDuration === void 0 || (_latestDuration$hours = latestDuration.hours) === null || _latestDuration$hours === void 0 ? void 0 : _latestDuration$hours.current) ?? selectedDuration.hours,
71
+ minutes: (latestDuration === null || latestDuration === void 0 || (_latestDuration$minut = latestDuration.minutes) === null || _latestDuration$minut === void 0 ? void 0 : _latestDuration$minut.current) ?? selectedDuration.minutes,
72
+ seconds: (latestDuration === null || latestDuration === void 0 || (_latestDuration$secon = latestDuration.seconds) === null || _latestDuration$secon === void 0 ? void 0 : _latestDuration$secon.current) ?? selectedDuration.seconds
73
+ };
74
+ setConfirmedDuration(newDuration);
75
+ onConfirm(newDuration);
68
76
  };
69
- const cancel = () => {
77
+ const cancelHandler = () => {
70
78
  setIsVisible(false);
71
79
  setSelectedDuration(confirmedDuration);
72
80
  onCancel === null || onCancel === void 0 || onCancel();
73
81
  };
74
82
 
75
83
  // wrapped in useCallback to avoid unnecessary re-renders of TimerPicker
76
- const durationChange = useCallback(duration => {
84
+ const durationChangeHandler = useCallback(duration => {
77
85
  setSelectedDuration(duration);
78
86
  onDurationChange === null || onDurationChange === void 0 || onDurationChange(duration);
79
87
  }, [onDurationChange]);
80
- const timerPickerRef = useRef(null);
81
- useImperativeHandle(ref, () => ({
82
- reset: options => {
83
- var _timerPickerRef$curre;
84
- const initialDuration = {
85
- hours: initialHours,
86
- minutes: initialMinutes,
87
- seconds: initialSeconds
88
- };
89
- setSelectedDuration(initialDuration);
90
- setConfirmedDuration(initialDuration);
91
- (_timerPickerRef$curre = timerPickerRef.current) === null || _timerPickerRef$curre === void 0 || _timerPickerRef$curre.reset(options);
92
- },
93
- setValue: (value, options) => {
94
- var _timerPickerRef$curre2;
95
- setSelectedDuration(value);
96
- setConfirmedDuration(value);
97
- (_timerPickerRef$curre2 = timerPickerRef.current) === null || _timerPickerRef$curre2 === void 0 || _timerPickerRef$curre2.setValue(value, options);
98
- }
99
- }));
88
+ useImperativeHandle(ref, () => {
89
+ var _timerPickerRef$curre4, _timerPickerRef$curre5, _timerPickerRef$curre6;
90
+ return {
91
+ reset: options => {
92
+ var _timerPickerRef$curre2;
93
+ const initialDuration = {
94
+ hours: initialHours,
95
+ minutes: initialMinutes,
96
+ seconds: initialSeconds
97
+ };
98
+ setSelectedDuration(initialDuration);
99
+ setConfirmedDuration(initialDuration);
100
+ (_timerPickerRef$curre2 = timerPickerRef.current) === null || _timerPickerRef$curre2 === void 0 || _timerPickerRef$curre2.reset(options);
101
+ },
102
+ setValue: (value, options) => {
103
+ var _timerPickerRef$curre3;
104
+ setSelectedDuration(value);
105
+ setConfirmedDuration(value);
106
+ (_timerPickerRef$curre3 = timerPickerRef.current) === null || _timerPickerRef$curre3 === void 0 || _timerPickerRef$curre3.setValue(value, options);
107
+ },
108
+ latestDuration: {
109
+ 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,
110
+ 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,
111
+ 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
112
+ }
113
+ };
114
+ });
100
115
  return /*#__PURE__*/React.createElement(Modal, _extends({
101
116
  isVisible: visible,
102
- onOverlayPress: closeOnOverlayPress ? hideModal : undefined
117
+ onOverlayPress: closeOnOverlayPress ? hideModalHandler : undefined
103
118
  }, modalProps, {
104
119
  testID: "timer-picker-modal"
105
120
  }), /*#__PURE__*/React.createElement(View, _extends({}, containerProps, {
@@ -110,10 +125,11 @@ const TimerPickerModal = /*#__PURE__*/forwardRef((_ref, ref) => {
110
125
  style: styles.modalTitle
111
126
  }), modalTitle) : null, /*#__PURE__*/React.createElement(TimerPicker, {
112
127
  ref: timerPickerRef,
113
- onDurationChange: durationChange,
128
+ onDurationChange: durationChangeHandler,
114
129
  initialHours: confirmedDuration.hours,
115
130
  initialMinutes: confirmedDuration.minutes,
116
131
  initialSeconds: confirmedDuration.seconds,
132
+ aggressivelyGetLatestDuration: true,
117
133
  hideHours: hideHours,
118
134
  hideMinutes: hideMinutes,
119
135
  hideSeconds: hideSeconds,
@@ -134,11 +150,11 @@ const TimerPickerModal = /*#__PURE__*/forwardRef((_ref, ref) => {
134
150
  }), /*#__PURE__*/React.createElement(View, _extends({}, buttonContainerProps, {
135
151
  style: styles.buttonContainer
136
152
  }), !hideCancelButton ? /*#__PURE__*/React.createElement(TouchableOpacity, _extends({
137
- onPress: cancel
153
+ onPress: cancelHandler
138
154
  }, buttonTouchableOpacityProps), /*#__PURE__*/React.createElement(Text, {
139
155
  style: [styles.button, styles.cancelButton]
140
156
  }, cancelButtonText)) : null, /*#__PURE__*/React.createElement(TouchableOpacity, _extends({
141
- onPress: confirm
157
+ onPress: confirmHandler
142
158
  }, buttonTouchableOpacityProps), /*#__PURE__*/React.createElement(Text, {
143
159
  style: [styles.button, styles.confirmButton]
144
160
  }, confirmButtonText))))));