react-native-timer-picker 1.5.1 → 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -11,29 +11,32 @@ Great for timers, alarms and duration inputs ⏰🕰️⏳
11
11
 
12
12
  Works with Expo and bare React Native apps.
13
13
 
14
- - [Demos 📱](#demos-📱)
15
- - [Peer Dependencies 👶](#peer-dependencies-)
16
- - [Installation 🚀](#installation-)
17
- - [Examples 😎](#examples-)
18
- - [Timer Picker Modal (Dark Mode) 🌚](#timer-picker-modal-dark-mode-)
19
- - [Timer Picker Modal (Light Mode) 🌞](#timer-picker-modal-light-mode-)
20
- - [Timer Picker with Customisation (Dark Mode) 🌒](#timer-picker-with-customisation-dark-mode-)
21
- - [Timer Picker with Customisation (Light Mode) 🌔](#timer-picker-with-customisation-light-mode-)
22
- - [Props 💅](#props-)
23
- - [TimerPicker ⏲️](#timerpicker-️)
24
- - [Custom Styles 👗](#custom-styles-)
25
- - [TimerPickerModal ⏰](#timerpickermodal-)
26
- - [Custom Styles 👕](#custom-styles--1)
27
- - [Methods 🔄](#methods-)
28
- - [TimerPicker](#timerpicker)
29
- - [TimerPickerModal](#timerpickermodal)
30
- - [License 📝](#license-)
14
+ - [Demos 📱](#demos-)
15
+ - [Peer Dependencies 👶](#peer-dependencies-)
16
+ - [Installation 🚀](#installation-)
17
+ - [Examples 😎](#examples-)
18
+ - [Timer Picker Modal (Dark Mode) 🌚](#timer-picker-modal-dark-mode-)
19
+ - [Timer Picker Modal (Light Mode) 🌞](#timer-picker-modal-light-mode-)
20
+ - [Timer Picker with Customisation (Dark Mode) 🌒](#timer-picker-with-customisation-dark-mode-)
21
+ - [Timer Picker with Customisation (Light Mode) 🌔](#timer-picker-with-customisation-light-mode-)
22
+ - [Props 💅](#props-)
23
+ - [TimerPicker ⏲️](#timerpicker-️)
24
+ - [Custom Styles 👗](#custom-styles-)
25
+ - [TimerPickerModal ⏰](#timerpickermodal-)
26
+ - [Custom Styles 👕](#custom-styles--1)
27
+ - [Methods 🔄](#methods-)
28
+ - [TimerPicker](#timerpicker)
29
+ - [TimerPickerModal](#timerpickermodal)
30
+ - [Contributing 🧑‍🤝‍🧑](#contributing-)
31
+ - [Dev Setup](#dev-setup)
32
+ - [GitHub Guidelines](#github-guidelines)
33
+ - [License 📝](#license-)
31
34
 
32
35
  <br>
33
36
 
34
37
  ## Demos 📱
35
38
 
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.
39
+ **Try it out for yourself on [Expo Snack](https://snack.expo.dev/@nuumi/react-native-timer-picker-demo)!** Make sure to run it on a mobile to see it working properly.
37
40
 
38
41
  <p>
39
42
  <img src="demos/example1.gif" width="250" height="550" style="margin-right:50px"/>
@@ -316,34 +319,34 @@ return (
316
319
 
317
320
  ### TimerPicker ⏲️
318
321
 
319
- | Prop | Description | Type | Default | Required |
320
- | :------------------------------: | :---------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----: | :------: |
321
- | onDurationChange | Callback when the duration changes | `(duration: { hours: number, minutes: number, seconds: number }) => void` | - | false |
322
- | initialHours | Initial value for hours | Number | - | false |
323
- | initialMinutes | Initial value for minutes | Number | - | false |
324
- | initialSeconds | Initial value for seconds | Number | - | false |
325
- | hideHours | Hide the hours picker | Boolean | false | false |
326
- | hideMinutes | Hide the minutes picker | Boolean | false | false |
327
- | hideSeconds | Hide the seconds picker | Boolean | false | false |
328
- | hourLimit | Limit on the hours it is possible to select | { max?: Number, min?: Number } | - | false |
329
- | minuteLimit | Limit on the minutes it is possible to select | { max?: Number, min?: Number } | - | false |
330
- | secondLimit | Limit on the seconds it is possible to select | { max?: Number, min?: Number } | - | false |
331
- | hourLabel | Label for the hours picker | String \| React.ReactElement | h | false |
332
- | minuteLabel | Label for the minutes picker | String \| React.ReactElement | m | false |
333
- | secondLabel | Label for the seconds picker | String \| React.ReactElement | s | false |
334
- | padWithNItems | Number of items to pad the picker with on either side | Number | 1 | false |
335
- | aggressivelyGetLatestDuration | Set to True to ask DurationScroll to aggressively update the latestDuration ref | Boolean | false | false |
336
- | allowFontScaling | Allow font in the picker to scale with accessibility settings | Boolean | false | false |
337
- | use12HourPicker | Switch the hour picker to 12-hour format with an AM / PM label | Boolean | false | false |
338
- | amLabel | Set the AM label if using the 12-hour picker | String | am | false |
339
- | pmLabel | Set the PM label if using the 12-hour picker | String | pm | false |
340
- | disableInfiniteScroll | Disable the infinite scroll feature | Boolean | false | false |
341
- | 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 |
342
- | pickerContainerProps | Props for the picker container | `React.ComponentProps<typeof View>` | - | false |
343
- | pickerGradientOverlayProps | Props for both gradient overlays | `Partial<LinearGradientProps>` | - | false |
344
- | topPickerGradientOverlayProps | Props for the top gradient overlay | `Partial<LinearGradientProps>` | - | false |
345
- | bottomPickerGradientOverlayProps | Props for the bottom gradient overlay | `Partial<LinearGradientProps>` | - | false |
346
- | styles | Custom styles for the timer picker | [CustomTimerPickerStyles](#custom-styles-) | - | false |
322
+ | Prop | Description | Type | Default | Required |
323
+ | :------------------------------: | :------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----: | :------: |
324
+ | onDurationChange | Callback when the duration changes | `(duration: { hours: number, minutes: number, seconds: number }) => void` | - | false |
325
+ | initialHours | Initial value for hours | Number | - | false |
326
+ | initialMinutes | Initial value for minutes | Number | - | false |
327
+ | initialSeconds | Initial value for seconds | Number | - | false |
328
+ | hideHours | Hide the hours picker | Boolean | false | false |
329
+ | hideMinutes | Hide the minutes picker | Boolean | false | false |
330
+ | hideSeconds | Hide the seconds picker | Boolean | false | false |
331
+ | hourLimit | Limit on the hours it is possible to select | { max?: Number, min?: Number } | - | false |
332
+ | minuteLimit | Limit on the minutes it is possible to select | { max?: Number, min?: Number } | - | false |
333
+ | secondLimit | Limit on the seconds it is possible to select | { max?: Number, min?: Number } | - | false |
334
+ | hourLabel | Label for the hours picker | String \| React.ReactElement | h | false |
335
+ | minuteLabel | Label for the minutes picker | String \| React.ReactElement | m | false |
336
+ | secondLabel | Label for the seconds picker | String \| React.ReactElement | s | false |
337
+ | padWithNItems | Number of items to pad the picker with on either side | Number | 1 | false |
338
+ | aggressivelyGetLatestDuration | Set to True to ask DurationScroll to aggressively update the latestDuration ref | Boolean | false | false |
339
+ | allowFontScaling | Allow font in the picker to scale with accessibility settings | Boolean | false | false |
340
+ | use12HourPicker | Switch the hour picker to 12-hour format with an AM / PM label | Boolean | false | false |
341
+ | amLabel | Set the AM label if using the 12-hour picker | String | am | false |
342
+ | pmLabel | Set the PM label if using the 12-hour picker | String | pm | false |
343
+ | disableInfiniteScroll | Disable the infinite scroll feature | Boolean | false | false |
344
+ | 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 |
345
+ | pickerContainerProps | Props for the picker container | `React.ComponentProps<typeof View>` | - | false |
346
+ | pickerGradientOverlayProps | Props for both gradient overlays | `Partial<LinearGradientProps>` | - | false |
347
+ | topPickerGradientOverlayProps | Props for the top gradient overlay | `Partial<LinearGradientProps>` | - | false |
348
+ | bottomPickerGradientOverlayProps | Props for the bottom gradient overlay | `Partial<LinearGradientProps>` | - | false |
349
+ | styles | Custom styles for the timer picker | [CustomTimerPickerStyles](#custom-styles-) | - | false |
347
350
 
348
351
  #### Custom Styles 👗
349
352
 
@@ -357,8 +360,8 @@ The following custom styles can be supplied to re-style the component in any way
357
360
  | pickerContainer | Main container for the picker | ViewStyle |
358
361
  | pickerLabelContainer | Container for the picker's labels | ViewStyle |
359
362
  | pickerLabel | Style for the picker's labels | TextStyle |
360
- | pickerAmPmContainer | Style for the picker's labels | ViewStyle |
361
- | pickerAmPmLabel | Style for the picker's labels | TextStyle |
363
+ | pickerAmPmContainer | Style for the picker's labels | ViewStyle |
364
+ | pickerAmPmLabel | Style for the picker's labels | TextStyle |
362
365
  | pickerItemContainer | Container for each number in the picker | ViewStyle |
363
366
  | pickerItem | Style for each individual picker number | TextStyle |
364
367
  | disabledPickerItem | Style for any numbers outside any set limits | TextStyle |
@@ -446,6 +449,29 @@ An identical ref is also exposed for the TimerPickerModal component.
446
449
 
447
450
  <br>
448
451
 
452
+ ## Contributing 🧑‍🤝‍🧑
453
+
454
+ Contributions to this project are more than welcome.
455
+
456
+ ### Dev Setup
457
+
458
+ To get this project running locally:
459
+
460
+ 1. Clone the Git repo.
461
+ 2. Run `yarn setup` from the project root (this installs the dev dependencies and the example's additional dependencies)
462
+ 3. Run `yarn start` to start the example in Expo Go.
463
+ 4. Start adding cool stuff! Your changes should be immediately reflected in the Expo Go app.
464
+
465
+ ### GitHub Guidelines
466
+
467
+ There are two permenant branches: `main` and `develop`. You should never work directly on either of these branches.
468
+
469
+ 1. Create a new branch off `develop` for your work using the pattern `feature/{DESCRIPTION}`.
470
+ 2. When you think your work is ready for review, submit a PR from your branch back to `develop`.
471
+ 3. Once the PR is resolved, your work will be merged into `develop`, and will be included in the next major/minor release.
472
+
473
+ <br>
474
+
449
475
  ## License 📝
450
476
 
451
477
  This project is licensed under the [MIT License](LICENSE).
@@ -67,6 +67,23 @@ const TimerPickerModal = /*#__PURE__*/(0, _react.forwardRef)(({
67
67
  minutes: initialMinutes,
68
68
  seconds: initialSeconds
69
69
  });
70
+ const reset = options => {
71
+ var _timerPickerRef$curre;
72
+ const initialDuration = {
73
+ hours: initialHours,
74
+ minutes: initialMinutes,
75
+ seconds: initialSeconds
76
+ };
77
+ setSelectedDuration(initialDuration);
78
+ setConfirmedDuration(initialDuration);
79
+ (_timerPickerRef$curre = timerPickerRef.current) === null || _timerPickerRef$curre === void 0 || _timerPickerRef$curre.reset(options);
80
+ };
81
+
82
+ // reset state if the initial times change
83
+ (0, _react.useEffect)(() => {
84
+ reset();
85
+ // eslint-disable-next-line react-hooks/exhaustive-deps
86
+ }, [initialHours, initialMinutes, initialSeconds]);
70
87
  const hideModalHandler = () => {
71
88
  setSelectedDuration({
72
89
  hours: confirmedDuration.hours,
@@ -76,8 +93,8 @@ const TimerPickerModal = /*#__PURE__*/(0, _react.forwardRef)(({
76
93
  setIsVisible(false);
77
94
  };
78
95
  const confirmHandler = () => {
79
- var _timerPickerRef$curre, _latestDuration$hours, _latestDuration$minut, _latestDuration$secon;
80
- const latestDuration = (_timerPickerRef$curre = timerPickerRef.current) === null || _timerPickerRef$curre === void 0 ? void 0 : _timerPickerRef$curre.latestDuration;
96
+ var _timerPickerRef$curre2, _latestDuration$hours, _latestDuration$minut, _latestDuration$secon;
97
+ const latestDuration = (_timerPickerRef$curre2 = timerPickerRef.current) === null || _timerPickerRef$curre2 === void 0 ? void 0 : _timerPickerRef$curre2.latestDuration;
81
98
  const newDuration = {
82
99
  hours: (latestDuration === null || latestDuration === void 0 || (_latestDuration$hours = latestDuration.hours) === null || _latestDuration$hours === void 0 ? void 0 : _latestDuration$hours.current) ?? selectedDuration.hours,
83
100
  minutes: (latestDuration === null || latestDuration === void 0 || (_latestDuration$minut = latestDuration.minutes) === null || _latestDuration$minut === void 0 ? void 0 : _latestDuration$minut.current) ?? selectedDuration.minutes,
@@ -100,17 +117,7 @@ const TimerPickerModal = /*#__PURE__*/(0, _react.forwardRef)(({
100
117
  (0, _react.useImperativeHandle)(ref, () => {
101
118
  var _timerPickerRef$curre4, _timerPickerRef$curre5, _timerPickerRef$curre6;
102
119
  return {
103
- reset: options => {
104
- var _timerPickerRef$curre2;
105
- const initialDuration = {
106
- hours: initialHours,
107
- minutes: initialMinutes,
108
- seconds: initialSeconds
109
- };
110
- setSelectedDuration(initialDuration);
111
- setConfirmedDuration(initialDuration);
112
- (_timerPickerRef$curre2 = timerPickerRef.current) === null || _timerPickerRef$curre2 === void 0 || _timerPickerRef$curre2.reset(options);
113
- },
120
+ reset,
114
121
  setValue: (value, options) => {
115
122
  var _timerPickerRef$curre3;
116
123
  setSelectedDuration(value);
@@ -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","visible","setIsVisible","onConfirm","onCancel","onDurationChange","closeOnOverlayPress","initialHours","initialMinutes","initialSeconds","hideHours","hideMinutes","hideSeconds","hourLimit","minuteLimit","secondLimit","hourLabel","minuteLabel","secondLabel","padWithNItems","disableInfiniteScroll","allowFontScaling","use12HourPicker","amLabel","pmLabel","hideCancelButton","confirmButtonText","cancelButtonText","modalTitle","LinearGradient","modalProps","containerProps","contentContainerProps","pickerContainerProps","buttonContainerProps","buttonTouchableOpacityProps","modalTitleProps","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","styles","customStyles","ref","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,\n minuteLabel,\n secondLabel,\n padWithNItems = 1,\n disableInfiniteScroll = false,\n allowFontScaling = false,\n use12HourPicker,\n amLabel,\n pmLabel,\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 allowFontScaling={allowFontScaling}\n use12HourPicker={use12HourPicker}\n amLabel={amLabel}\n pmLabel={pmLabel}\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":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAQA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,YAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,MAAA,GAAAD,sBAAA,CAAAH,OAAA;AAEA,IAAAK,iBAAA,GAAAL,OAAA;AAGmC,SAAAG,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAX,wBAAAW,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAH,UAAA,SAAAG,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAF,OAAA,EAAAE,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAC,GAAA,CAAAJ,CAAA,UAAAG,CAAA,CAAAE,GAAA,CAAAL,CAAA,OAAAM,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAZ,CAAA,oBAAAY,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAY,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAX,CAAA,EAAAY,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAZ,CAAA,CAAAY,CAAA,YAAAN,CAAA,CAAAR,OAAA,GAAAE,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAc,GAAA,CAAAjB,CAAA,EAAAM,CAAA,GAAAA,CAAA;AAAA,SAAAY,SAAA,IAAAA,QAAA,GAAAT,MAAA,CAAAU,MAAA,GAAAV,MAAA,CAAAU,MAAA,CAAAC,IAAA,eAAAC,MAAA,aAAAL,CAAA,MAAAA,CAAA,GAAAM,SAAA,CAAAC,MAAA,EAAAP,CAAA,UAAAQ,MAAA,GAAAF,SAAA,CAAAN,CAAA,YAAAS,GAAA,IAAAD,MAAA,QAAAf,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAS,MAAA,EAAAC,GAAA,KAAAJ,MAAA,CAAAI,GAAA,IAAAD,MAAA,CAAAC,GAAA,gBAAAJ,MAAA,YAAAH,QAAA,CAAAQ,KAAA,OAAAJ,SAAA;AA8CnC,MAAMK,gBAAgB,gBAAG,IAAAC,iBAAU,EAC/B,CACI;EACIC,OAAO;EACPC,YAAY;EACZC,SAAS;EACTC,QAAQ;EACRC,gBAAgB;EAChBC,mBAAmB;EACnBC,YAAY,GAAG,CAAC;EAChBC,cAAc,GAAG,CAAC;EAClBC,cAAc,GAAG,CAAC;EAClBC,SAAS,GAAG,KAAK;EACjBC,WAAW,GAAG,KAAK;EACnBC,WAAW,GAAG,KAAK;EACnBC,SAAS;EACTC,WAAW;EACXC,WAAW;EACXC,SAAS;EACTC,WAAW;EACXC,WAAW;EACXC,aAAa,GAAG,CAAC;EACjBC,qBAAqB,GAAG,KAAK;EAC7BC,gBAAgB,GAAG,KAAK;EACxBC,eAAe;EACfC,OAAO;EACPC,OAAO;EACPC,gBAAgB,GAAG,KAAK;EACxBC,iBAAiB,GAAG,SAAS;EAC7BC,gBAAgB,GAAG,QAAQ;EAC3BC,UAAU;EACVC,cAAc;EACdC,UAAU;EACVC,cAAc;EACdC,qBAAqB;EACrBC,oBAAoB;EACpBC,oBAAoB;EACpBC,2BAA2B;EAC3BC,eAAe;EACfC,0BAA0B;EAC1BC,6BAA6B;EAC7BC,gCAAgC;EAChCC,MAAM,EAAEC;AACZ,CAAC,EACDC,GAAG,KACkB;EACrB,MAAMF,MAAM,GAAG,IAAAG,gCAAc,EAACF,YAAY,CAAC;EAE3C,MAAMG,cAAc,GAAG,IAAAC,aAAM,EAAiB,IAAI,CAAC;EAEnD,MAAM,CAACC,gBAAgB,EAAEC,mBAAmB,CAAC,GAAG,IAAAC,eAAQ,EAAC;IACrDC,KAAK,EAAE1C,YAAY;IACnB2C,OAAO,EAAE1C,cAAc;IACvB2C,OAAO,EAAE1C;EACb,CAAC,CAAC;EACF,MAAM,CAAC2C,iBAAiB,EAAEC,oBAAoB,CAAC,GAAG,IAAAL,eAAQ,EAAC;IACvDC,KAAK,EAAE1C,YAAY;IACnB2C,OAAO,EAAE1C,cAAc;IACvB2C,OAAO,EAAE1C;EACb,CAAC,CAAC;EAEF,MAAM6C,gBAAgB,GAAGA,CAAA,KAAM;IAC3BP,mBAAmB,CAAC;MAChBE,KAAK,EAAEG,iBAAiB,CAACH,KAAK;MAC9BC,OAAO,EAAEE,iBAAiB,CAACF,OAAO;MAClCC,OAAO,EAAEC,iBAAiB,CAACD;IAC/B,CAAC,CAAC;IACFjD,YAAY,CAAC,KAAK,CAAC;EACvB,CAAC;EAED,MAAMqD,cAAc,GAAGA,CAAA,KAAM;IAAA,IAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA;IACzB,MAAMC,cAAc,IAAAJ,qBAAA,GAAGZ,cAAc,CAACiB,OAAO,cAAAL,qBAAA,uBAAtBA,qBAAA,CAAwBI,cAAc;IAC7D,MAAME,WAAW,GAAG;MAChBb,KAAK,EAAE,CAAAW,cAAc,aAAdA,cAAc,gBAAAH,qBAAA,GAAdG,cAAc,CAAEX,KAAK,cAAAQ,qBAAA,uBAArBA,qBAAA,CAAuBI,OAAO,KAAIf,gBAAgB,CAACG,KAAK;MAC/DC,OAAO,EACH,CAAAU,cAAc,aAAdA,cAAc,gBAAAF,qBAAA,GAAdE,cAAc,CAAEV,OAAO,cAAAQ,qBAAA,uBAAvBA,qBAAA,CAAyBG,OAAO,KAChCf,gBAAgB,CAACI,OAAO;MAC5BC,OAAO,EACH,CAAAS,cAAc,aAAdA,cAAc,gBAAAD,qBAAA,GAAdC,cAAc,CAAET,OAAO,cAAAQ,qBAAA,uBAAvBA,qBAAA,CAAyBE,OAAO,KAChCf,gBAAgB,CAACK;IACzB,CAAC;IACDE,oBAAoB,CAACS,WAAW,CAAC;IACjC3D,SAAS,CAAC2D,WAAW,CAAC;EAC1B,CAAC;EAED,MAAMC,aAAa,GAAGA,CAAA,KAAM;IACxB7D,YAAY,CAAC,KAAK,CAAC;IACnB6C,mBAAmB,CAACK,iBAAiB,CAAC;IACtChD,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAG,CAAC;EAChB,CAAC;;EAED;EACA,MAAM4D,qBAAqB,GAAG,IAAAC,kBAAW,EACpCC,QAA6D,IAAK;IAC/DnB,mBAAmB,CAACmB,QAAQ,CAAC;IAC7B7D,gBAAgB,aAAhBA,gBAAgB,eAAhBA,gBAAgB,CAAG6D,QAAQ,CAAC;EAChC,CAAC,EACD,CAAC7D,gBAAgB,CACrB,CAAC;EAED,IAAA8D,0BAAmB,EAACzB,GAAG,EAAE;IAAA,IAAA0B,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA;IAAA,OAAO;MAC5BC,KAAK,EAAGC,OAAO,IAAK;QAAA,IAAAC,sBAAA;QAChB,MAAMC,eAAe,GAAG;UACpBzB,KAAK,EAAE1C,YAAY;UACnB2C,OAAO,EAAE1C,cAAc;UACvB2C,OAAO,EAAE1C;QACb,CAAC;QACDsC,mBAAmB,CAAC2B,eAAe,CAAC;QACpCrB,oBAAoB,CAACqB,eAAe,CAAC;QACrC,CAAAD,sBAAA,GAAA7B,cAAc,CAACiB,OAAO,cAAAY,sBAAA,eAAtBA,sBAAA,CAAwBF,KAAK,CAACC,OAAO,CAAC;MAC1C,CAAC;MACDG,QAAQ,EAAEA,CAACC,KAAK,EAAEJ,OAAO,KAAK;QAAA,IAAAK,sBAAA;QAC1B9B,mBAAmB,CAAC6B,KAAK,CAAC;QAC1BvB,oBAAoB,CAACuB,KAAK,CAAC;QAC3B,CAAAC,sBAAA,GAAAjC,cAAc,CAACiB,OAAO,cAAAgB,sBAAA,eAAtBA,sBAAA,CAAwBF,QAAQ,CAACC,KAAK,EAAEJ,OAAO,CAAC;MACpD,CAAC;MACDZ,cAAc,EAAE;QACZX,KAAK,GAAAmB,sBAAA,GAAExB,cAAc,CAACiB,OAAO,cAAAO,sBAAA,gBAAAA,sBAAA,GAAtBA,sBAAA,CAAwBR,cAAc,cAAAQ,sBAAA,uBAAtCA,sBAAA,CAAwCnB,KAAK;QACpDC,OAAO,GAAAmB,sBAAA,GAAEzB,cAAc,CAACiB,OAAO,cAAAQ,sBAAA,gBAAAA,sBAAA,GAAtBA,sBAAA,CAAwBT,cAAc,cAAAS,sBAAA,uBAAtCA,sBAAA,CAAwCnB,OAAO;QACxDC,OAAO,GAAAmB,sBAAA,GAAE1B,cAAc,CAACiB,OAAO,cAAAS,sBAAA,gBAAAA,sBAAA,GAAtBA,sBAAA,CAAwBV,cAAc,cAAAU,sBAAA,uBAAtCA,sBAAA,CAAwCnB;MACrD;IACJ,CAAC;EAAA,CAAC,CAAC;EAEH,oBACI3F,MAAA,CAAAU,OAAA,CAAA4G,aAAA,CAAChH,MAAA,CAAAI,OAAK,EAAAoB,QAAA;IACFyF,SAAS,EAAE9E,OAAQ;IACnB+E,cAAc,EACV1E,mBAAmB,GAAGgD,gBAAgB,GAAG2B;EAC5C,GACGnD,UAAU;IACdoD,MAAM,EAAC;EAAoB,iBAC3B1H,MAAA,CAAAU,OAAA,CAAA4G,aAAA,CAACnH,YAAA,CAAAwH,IAAI,EAAA7F,QAAA,KAAKyC,cAAc;IAAEqD,KAAK,EAAE5C,MAAM,CAAC6C;EAAU,iBAC9C7H,MAAA,CAAAU,OAAA,CAAA4G,aAAA,CAACnH,YAAA,CAAAwH,IAAI,EAAA7F,QAAA,KACG0C,qBAAqB;IACzBoD,KAAK,EAAE5C,MAAM,CAAC8C;EAAiB,IAC9B1D,UAAU,gBACPpE,MAAA,CAAAU,OAAA,CAAA4G,aAAA,CAACnH,YAAA,CAAA4H,IAAI,EAAAjG,QAAA,KACG8C,eAAe;IACnBgD,KAAK,EAAE5C,MAAM,CAACZ;EAAW,IACxBA,UACC,CAAC,GACP,IAAI,eACRpE,MAAA,CAAAU,OAAA,CAAA4G,aAAA,CAAClH,YAAA,CAAAM,OAAW;IACRwE,GAAG,EAAEE,cAAe;IACpBvC,gBAAgB,EAAE2D,qBAAsB;IACxCzD,YAAY,EAAE6C,iBAAiB,CAACH,KAAM;IACtCzC,cAAc,EAAE4C,iBAAiB,CAACF,OAAQ;IAC1CzC,cAAc,EAAE2C,iBAAiB,CAACD,OAAQ;IAC1CqC,6BAA6B,EAAE,IAAK;IACpC9E,SAAS,EAAEA,SAAU;IACrBC,WAAW,EAAEA,WAAY;IACzBC,WAAW,EAAEA,WAAY;IACzBC,SAAS,EAAEA,SAAU;IACrBC,WAAW,EAAEA,WAAY;IACzBC,WAAW,EAAEA,WAAY;IACzBC,SAAS,EAAEA,SAAU;IACrBC,WAAW,EAAEA,WAAY;IACzBC,WAAW,EAAEA,WAAY;IACzBC,aAAa,EAAEA,aAAc;IAC7BC,qBAAqB,EAAEA,qBAAsB;IAC7CC,gBAAgB,EAAEA,gBAAiB;IACnCC,eAAe,EAAEA,eAAgB;IACjCC,OAAO,EAAEA,OAAQ;IACjBC,OAAO,EAAEA,OAAQ;IACjBK,cAAc,EAAEA,cAAe;IAC/BI,oBAAoB,EAAEA,oBAAqB;IAC3CI,0BAA0B,EACtBA,0BACH;IACDC,6BAA6B,EACzBA,6BACH;IACDC,gCAAgC,EAC5BA,gCACH;IACDC,MAAM,EAAEC;EAAa,CACxB,CAAC,eACFjF,MAAA,CAAAU,OAAA,CAAA4G,aAAA,CAACnH,YAAA,CAAAwH,IAAI,EAAA7F,QAAA,KACG4C,oBAAoB;IACxBkD,KAAK,EAAE5C,MAAM,CAACiD;EAAgB,IAC7B,CAAChE,gBAAgB,gBACdjE,MAAA,CAAAU,OAAA,CAAA4G,aAAA,CAACnH,YAAA,CAAA+H,gBAAgB,EAAApG,QAAA;IACbqG,OAAO,EAAE5B;EAAc,GACnB5B,2BAA2B,gBAC/B3E,MAAA,CAAAU,OAAA,CAAA4G,aAAA,CAACnH,YAAA,CAAA4H,IAAI;IACDH,KAAK,EAAE,CACH5C,MAAM,CAACoD,MAAM,EACbpD,MAAM,CAACqD,YAAY;EACrB,GACDlE,gBACC,CACQ,CAAC,GACnB,IAAI,eACRnE,MAAA,CAAAU,OAAA,CAAA4G,aAAA,CAACnH,YAAA,CAAA+H,gBAAgB,EAAApG,QAAA;IACbqG,OAAO,EAAEpC;EAAe,GACpBpB,2BAA2B,gBAC/B3E,MAAA,CAAAU,OAAA,CAAA4G,aAAA,CAACnH,YAAA,CAAA4H,IAAI;IACDH,KAAK,EAAE,CACH5C,MAAM,CAACoD,MAAM,EACbpD,MAAM,CAACsD,aAAa;EACtB,GACDpE,iBACC,CACQ,CAChB,CACJ,CACJ,CACH,CAAC;AAEhB,CACJ,CAAC;AAAC,IAAAqE,QAAA,GAAAC,OAAA,CAAA9H,OAAA,gBAEa+H,cAAK,CAACC,IAAI,CAACnG,gBAAgB,CAAC"}
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","visible","setIsVisible","onConfirm","onCancel","onDurationChange","closeOnOverlayPress","initialHours","initialMinutes","initialSeconds","hideHours","hideMinutes","hideSeconds","hourLimit","minuteLimit","secondLimit","hourLabel","minuteLabel","secondLabel","padWithNItems","disableInfiniteScroll","allowFontScaling","use12HourPicker","amLabel","pmLabel","hideCancelButton","confirmButtonText","cancelButtonText","modalTitle","LinearGradient","modalProps","containerProps","contentContainerProps","pickerContainerProps","buttonContainerProps","buttonTouchableOpacityProps","modalTitleProps","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","styles","customStyles","ref","generateStyles","timerPickerRef","useRef","selectedDuration","setSelectedDuration","useState","hours","minutes","seconds","confirmedDuration","setConfirmedDuration","reset","options","_timerPickerRef$curre","initialDuration","current","useEffect","hideModalHandler","confirmHandler","_timerPickerRef$curre2","_latestDuration$hours","_latestDuration$minut","_latestDuration$secon","latestDuration","newDuration","cancelHandler","durationChangeHandler","useCallback","duration","useImperativeHandle","_timerPickerRef$curre4","_timerPickerRef$curre5","_timerPickerRef$curre6","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 useEffect,\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,\n minuteLabel,\n secondLabel,\n padWithNItems = 1,\n disableInfiniteScroll = false,\n allowFontScaling = false,\n use12HourPicker,\n amLabel,\n pmLabel,\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 reset = (options?: { animated?: boolean }) => {\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\n // reset state if the initial times change\n useEffect(() => {\n reset();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialHours, initialMinutes, initialSeconds]);\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,\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 allowFontScaling={allowFontScaling}\n use12HourPicker={use12HourPicker}\n amLabel={amLabel}\n pmLabel={pmLabel}\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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"}
@@ -1,5 +1,5 @@
1
1
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
- import React, { forwardRef, useCallback, useImperativeHandle, useRef, useState } from "react";
2
+ import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from "react";
3
3
  import { View, Text, TouchableOpacity } from "react-native";
4
4
  import TimerPicker from "./TimerPicker";
5
5
  import Modal from "./Modal";
@@ -58,6 +58,23 @@ const TimerPickerModal = /*#__PURE__*/forwardRef(({
58
58
  minutes: initialMinutes,
59
59
  seconds: initialSeconds
60
60
  });
61
+ const reset = options => {
62
+ var _timerPickerRef$curre;
63
+ const initialDuration = {
64
+ hours: initialHours,
65
+ minutes: initialMinutes,
66
+ seconds: initialSeconds
67
+ };
68
+ setSelectedDuration(initialDuration);
69
+ setConfirmedDuration(initialDuration);
70
+ (_timerPickerRef$curre = timerPickerRef.current) === null || _timerPickerRef$curre === void 0 || _timerPickerRef$curre.reset(options);
71
+ };
72
+
73
+ // reset state if the initial times change
74
+ useEffect(() => {
75
+ reset();
76
+ // eslint-disable-next-line react-hooks/exhaustive-deps
77
+ }, [initialHours, initialMinutes, initialSeconds]);
61
78
  const hideModalHandler = () => {
62
79
  setSelectedDuration({
63
80
  hours: confirmedDuration.hours,
@@ -67,8 +84,8 @@ const TimerPickerModal = /*#__PURE__*/forwardRef(({
67
84
  setIsVisible(false);
68
85
  };
69
86
  const confirmHandler = () => {
70
- var _timerPickerRef$curre, _latestDuration$hours, _latestDuration$minut, _latestDuration$secon;
71
- const latestDuration = (_timerPickerRef$curre = timerPickerRef.current) === null || _timerPickerRef$curre === void 0 ? void 0 : _timerPickerRef$curre.latestDuration;
87
+ var _timerPickerRef$curre2, _latestDuration$hours, _latestDuration$minut, _latestDuration$secon;
88
+ const latestDuration = (_timerPickerRef$curre2 = timerPickerRef.current) === null || _timerPickerRef$curre2 === void 0 ? void 0 : _timerPickerRef$curre2.latestDuration;
72
89
  const newDuration = {
73
90
  hours: (latestDuration === null || latestDuration === void 0 || (_latestDuration$hours = latestDuration.hours) === null || _latestDuration$hours === void 0 ? void 0 : _latestDuration$hours.current) ?? selectedDuration.hours,
74
91
  minutes: (latestDuration === null || latestDuration === void 0 || (_latestDuration$minut = latestDuration.minutes) === null || _latestDuration$minut === void 0 ? void 0 : _latestDuration$minut.current) ?? selectedDuration.minutes,
@@ -91,17 +108,7 @@ const TimerPickerModal = /*#__PURE__*/forwardRef(({
91
108
  useImperativeHandle(ref, () => {
92
109
  var _timerPickerRef$curre4, _timerPickerRef$curre5, _timerPickerRef$curre6;
93
110
  return {
94
- reset: options => {
95
- var _timerPickerRef$curre2;
96
- const initialDuration = {
97
- hours: initialHours,
98
- minutes: initialMinutes,
99
- seconds: initialSeconds
100
- };
101
- setSelectedDuration(initialDuration);
102
- setConfirmedDuration(initialDuration);
103
- (_timerPickerRef$curre2 = timerPickerRef.current) === null || _timerPickerRef$curre2 === void 0 || _timerPickerRef$curre2.reset(options);
104
- },
111
+ reset,
105
112
  setValue: (value, options) => {
106
113
  var _timerPickerRef$curre3;
107
114
  setSelectedDuration(value);
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","useCallback","useImperativeHandle","useRef","useState","View","Text","TouchableOpacity","TimerPicker","Modal","generateStyles","TimerPickerModal","visible","setIsVisible","onConfirm","onCancel","onDurationChange","closeOnOverlayPress","initialHours","initialMinutes","initialSeconds","hideHours","hideMinutes","hideSeconds","hourLimit","minuteLimit","secondLimit","hourLabel","minuteLabel","secondLabel","padWithNItems","disableInfiniteScroll","allowFontScaling","use12HourPicker","amLabel","pmLabel","hideCancelButton","confirmButtonText","cancelButtonText","modalTitle","LinearGradient","modalProps","containerProps","contentContainerProps","pickerContainerProps","buttonContainerProps","buttonTouchableOpacityProps","modalTitleProps","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","styles","customStyles","ref","timerPickerRef","selectedDuration","setSelectedDuration","hours","minutes","seconds","confirmedDuration","setConfirmedDuration","hideModalHandler","confirmHandler","_timerPickerRef$curre","_latestDuration$hours","_latestDuration$minut","_latestDuration$secon","latestDuration","current","newDuration","cancelHandler","durationChangeHandler","duration","_timerPickerRef$curre4","_timerPickerRef$curre5","_timerPickerRef$curre6","reset","options","_timerPickerRef$curre2","initialDuration","setValue","value","_timerPickerRef$curre3","createElement","_extends","isVisible","onOverlayPress","undefined","testID","style","container","contentContainer","aggressivelyGetLatestDuration","buttonContainer","onPress","button","cancelButton","confirmButton","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,\n minuteLabel,\n secondLabel,\n padWithNItems = 1,\n disableInfiniteScroll = false,\n allowFontScaling = false,\n use12HourPicker,\n amLabel,\n pmLabel,\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 allowFontScaling={allowFontScaling}\n use12HourPicker={use12HourPicker}\n amLabel={amLabel}\n pmLabel={pmLabel}\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":";AAAA,OAAOA,KAAK,IAERC,UAAU,EACVC,WAAW,EACXC,mBAAmB,EACnBC,MAAM,EACNC,QAAQ,QACL,OAAO;AACd,SAASC,IAAI,EAAEC,IAAI,EAAEC,gBAAgB,QAAQ,cAAc;AAE3D,OAAOC,WAAW,MAA4C,eAAe;AAC7E,OAAOC,KAAK,MAAM,SAAS;AAE3B,SACIC,cAAc,QAEX,2BAA2B;AA8ClC,MAAMC,gBAAgB,gBAAGX,UAAU,CAC/B,CACI;EACIY,OAAO;EACPC,YAAY;EACZC,SAAS;EACTC,QAAQ;EACRC,gBAAgB;EAChBC,mBAAmB;EACnBC,YAAY,GAAG,CAAC;EAChBC,cAAc,GAAG,CAAC;EAClBC,cAAc,GAAG,CAAC;EAClBC,SAAS,GAAG,KAAK;EACjBC,WAAW,GAAG,KAAK;EACnBC,WAAW,GAAG,KAAK;EACnBC,SAAS;EACTC,WAAW;EACXC,WAAW;EACXC,SAAS;EACTC,WAAW;EACXC,WAAW;EACXC,aAAa,GAAG,CAAC;EACjBC,qBAAqB,GAAG,KAAK;EAC7BC,gBAAgB,GAAG,KAAK;EACxBC,eAAe;EACfC,OAAO;EACPC,OAAO;EACPC,gBAAgB,GAAG,KAAK;EACxBC,iBAAiB,GAAG,SAAS;EAC7BC,gBAAgB,GAAG,QAAQ;EAC3BC,UAAU;EACVC,cAAc;EACdC,UAAU;EACVC,cAAc;EACdC,qBAAqB;EACrBC,oBAAoB;EACpBC,oBAAoB;EACpBC,2BAA2B;EAC3BC,eAAe;EACfC,0BAA0B;EAC1BC,6BAA6B;EAC7BC,gCAAgC;EAChCC,MAAM,EAAEC;AACZ,CAAC,EACDC,GAAG,KACkB;EACrB,MAAMF,MAAM,GAAGzC,cAAc,CAAC0C,YAAY,CAAC;EAE3C,MAAME,cAAc,GAAGnD,MAAM,CAAiB,IAAI,CAAC;EAEnD,MAAM,CAACoD,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGpD,QAAQ,CAAC;IACrDqD,KAAK,EAAEvC,YAAY;IACnBwC,OAAO,EAAEvC,cAAc;IACvBwC,OAAO,EAAEvC;EACb,CAAC,CAAC;EACF,MAAM,CAACwC,iBAAiB,EAAEC,oBAAoB,CAAC,GAAGzD,QAAQ,CAAC;IACvDqD,KAAK,EAAEvC,YAAY;IACnBwC,OAAO,EAAEvC,cAAc;IACvBwC,OAAO,EAAEvC;EACb,CAAC,CAAC;EAEF,MAAM0C,gBAAgB,GAAGA,CAAA,KAAM;IAC3BN,mBAAmB,CAAC;MAChBC,KAAK,EAAEG,iBAAiB,CAACH,KAAK;MAC9BC,OAAO,EAAEE,iBAAiB,CAACF,OAAO;MAClCC,OAAO,EAAEC,iBAAiB,CAACD;IAC/B,CAAC,CAAC;IACF9C,YAAY,CAAC,KAAK,CAAC;EACvB,CAAC;EAED,MAAMkD,cAAc,GAAGA,CAAA,KAAM;IAAA,IAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA;IACzB,MAAMC,cAAc,IAAAJ,qBAAA,GAAGV,cAAc,CAACe,OAAO,cAAAL,qBAAA,uBAAtBA,qBAAA,CAAwBI,cAAc;IAC7D,MAAME,WAAW,GAAG;MAChBb,KAAK,EAAE,CAAAW,cAAc,aAAdA,cAAc,gBAAAH,qBAAA,GAAdG,cAAc,CAAEX,KAAK,cAAAQ,qBAAA,uBAArBA,qBAAA,CAAuBI,OAAO,KAAId,gBAAgB,CAACE,KAAK;MAC/DC,OAAO,EACH,CAAAU,cAAc,aAAdA,cAAc,gBAAAF,qBAAA,GAAdE,cAAc,CAAEV,OAAO,cAAAQ,qBAAA,uBAAvBA,qBAAA,CAAyBG,OAAO,KAChCd,gBAAgB,CAACG,OAAO;MAC5BC,OAAO,EACH,CAAAS,cAAc,aAAdA,cAAc,gBAAAD,qBAAA,GAAdC,cAAc,CAAET,OAAO,cAAAQ,qBAAA,uBAAvBA,qBAAA,CAAyBE,OAAO,KAChCd,gBAAgB,CAACI;IACzB,CAAC;IACDE,oBAAoB,CAACS,WAAW,CAAC;IACjCxD,SAAS,CAACwD,WAAW,CAAC;EAC1B,CAAC;EAED,MAAMC,aAAa,GAAGA,CAAA,KAAM;IACxB1D,YAAY,CAAC,KAAK,CAAC;IACnB2C,mBAAmB,CAACI,iBAAiB,CAAC;IACtC7C,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAG,CAAC;EAChB,CAAC;;EAED;EACA,MAAMyD,qBAAqB,GAAGvE,WAAW,CACpCwE,QAA6D,IAAK;IAC/DjB,mBAAmB,CAACiB,QAAQ,CAAC;IAC7BzD,gBAAgB,aAAhBA,gBAAgB,eAAhBA,gBAAgB,CAAGyD,QAAQ,CAAC;EAChC,CAAC,EACD,CAACzD,gBAAgB,CACrB,CAAC;EAEDd,mBAAmB,CAACmD,GAAG,EAAE;IAAA,IAAAqB,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA;IAAA,OAAO;MAC5BC,KAAK,EAAGC,OAAO,IAAK;QAAA,IAAAC,sBAAA;QAChB,MAAMC,eAAe,GAAG;UACpBvB,KAAK,EAAEvC,YAAY;UACnBwC,OAAO,EAAEvC,cAAc;UACvBwC,OAAO,EAAEvC;QACb,CAAC;QACDoC,mBAAmB,CAACwB,eAAe,CAAC;QACpCnB,oBAAoB,CAACmB,eAAe,CAAC;QACrC,CAAAD,sBAAA,GAAAzB,cAAc,CAACe,OAAO,cAAAU,sBAAA,eAAtBA,sBAAA,CAAwBF,KAAK,CAACC,OAAO,CAAC;MAC1C,CAAC;MACDG,QAAQ,EAAEA,CAACC,KAAK,EAAEJ,OAAO,KAAK;QAAA,IAAAK,sBAAA;QAC1B3B,mBAAmB,CAAC0B,KAAK,CAAC;QAC1BrB,oBAAoB,CAACqB,KAAK,CAAC;QAC3B,CAAAC,sBAAA,GAAA7B,cAAc,CAACe,OAAO,cAAAc,sBAAA,eAAtBA,sBAAA,CAAwBF,QAAQ,CAACC,KAAK,EAAEJ,OAAO,CAAC;MACpD,CAAC;MACDV,cAAc,EAAE;QACZX,KAAK,GAAAiB,sBAAA,GAAEpB,cAAc,CAACe,OAAO,cAAAK,sBAAA,gBAAAA,sBAAA,GAAtBA,sBAAA,CAAwBN,cAAc,cAAAM,sBAAA,uBAAtCA,sBAAA,CAAwCjB,KAAK;QACpDC,OAAO,GAAAiB,sBAAA,GAAErB,cAAc,CAACe,OAAO,cAAAM,sBAAA,gBAAAA,sBAAA,GAAtBA,sBAAA,CAAwBP,cAAc,cAAAO,sBAAA,uBAAtCA,sBAAA,CAAwCjB,OAAO;QACxDC,OAAO,GAAAiB,sBAAA,GAAEtB,cAAc,CAACe,OAAO,cAAAO,sBAAA,gBAAAA,sBAAA,GAAtBA,sBAAA,CAAwBR,cAAc,cAAAQ,sBAAA,uBAAtCA,sBAAA,CAAwCjB;MACrD;IACJ,CAAC;EAAA,CAAC,CAAC;EAEH,oBACI5D,KAAA,CAAAqF,aAAA,CAAC3E,KAAK,EAAA4E,QAAA;IACFC,SAAS,EAAE1E,OAAQ;IACnB2E,cAAc,EACVtE,mBAAmB,GAAG6C,gBAAgB,GAAG0B;EAC5C,GACG/C,UAAU;IACdgD,MAAM,EAAC;EAAoB,iBAC3B1F,KAAA,CAAAqF,aAAA,CAAC/E,IAAI,EAAAgF,QAAA,KAAK3C,cAAc;IAAEgD,KAAK,EAAEvC,MAAM,CAACwC;EAAU,iBAC9C5F,KAAA,CAAAqF,aAAA,CAAC/E,IAAI,EAAAgF,QAAA,KACG1C,qBAAqB;IACzB+C,KAAK,EAAEvC,MAAM,CAACyC;EAAiB,IAC9BrD,UAAU,gBACPxC,KAAA,CAAAqF,aAAA,CAAC9E,IAAI,EAAA+E,QAAA,KACGtC,eAAe;IACnB2C,KAAK,EAAEvC,MAAM,CAACZ;EAAW,IACxBA,UACC,CAAC,GACP,IAAI,eACRxC,KAAA,CAAAqF,aAAA,CAAC5E,WAAW;IACR6C,GAAG,EAAEC,cAAe;IACpBtC,gBAAgB,EAAEwD,qBAAsB;IACxCtD,YAAY,EAAE0C,iBAAiB,CAACH,KAAM;IACtCtC,cAAc,EAAEyC,iBAAiB,CAACF,OAAQ;IAC1CtC,cAAc,EAAEwC,iBAAiB,CAACD,OAAQ;IAC1CkC,6BAA6B,EAAE,IAAK;IACpCxE,SAAS,EAAEA,SAAU;IACrBC,WAAW,EAAEA,WAAY;IACzBC,WAAW,EAAEA,WAAY;IACzBC,SAAS,EAAEA,SAAU;IACrBC,WAAW,EAAEA,WAAY;IACzBC,WAAW,EAAEA,WAAY;IACzBC,SAAS,EAAEA,SAAU;IACrBC,WAAW,EAAEA,WAAY;IACzBC,WAAW,EAAEA,WAAY;IACzBC,aAAa,EAAEA,aAAc;IAC7BC,qBAAqB,EAAEA,qBAAsB;IAC7CC,gBAAgB,EAAEA,gBAAiB;IACnCC,eAAe,EAAEA,eAAgB;IACjCC,OAAO,EAAEA,OAAQ;IACjBC,OAAO,EAAEA,OAAQ;IACjBK,cAAc,EAAEA,cAAe;IAC/BI,oBAAoB,EAAEA,oBAAqB;IAC3CI,0BAA0B,EACtBA,0BACH;IACDC,6BAA6B,EACzBA,6BACH;IACDC,gCAAgC,EAC5BA,gCACH;IACDC,MAAM,EAAEC;EAAa,CACxB,CAAC,eACFrD,KAAA,CAAAqF,aAAA,CAAC/E,IAAI,EAAAgF,QAAA,KACGxC,oBAAoB;IACxB6C,KAAK,EAAEvC,MAAM,CAAC2C;EAAgB,IAC7B,CAAC1D,gBAAgB,gBACdrC,KAAA,CAAAqF,aAAA,CAAC7E,gBAAgB,EAAA8E,QAAA;IACbU,OAAO,EAAExB;EAAc,GACnBzB,2BAA2B,gBAC/B/C,KAAA,CAAAqF,aAAA,CAAC9E,IAAI;IACDoF,KAAK,EAAE,CACHvC,MAAM,CAAC6C,MAAM,EACb7C,MAAM,CAAC8C,YAAY;EACrB,GACD3D,gBACC,CACQ,CAAC,GACnB,IAAI,eACRvC,KAAA,CAAAqF,aAAA,CAAC7E,gBAAgB,EAAA8E,QAAA;IACbU,OAAO,EAAEhC;EAAe,GACpBjB,2BAA2B,gBAC/B/C,KAAA,CAAAqF,aAAA,CAAC9E,IAAI;IACDoF,KAAK,EAAE,CACHvC,MAAM,CAAC6C,MAAM,EACb7C,MAAM,CAAC+C,aAAa;EACtB,GACD7D,iBACC,CACQ,CAChB,CACJ,CACJ,CACH,CAAC;AAEhB,CACJ,CAAC;AAED,4BAAetC,KAAK,CAACoG,IAAI,CAACxF,gBAAgB,CAAC"}
1
+ {"version":3,"names":["React","forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","View","Text","TouchableOpacity","TimerPicker","Modal","generateStyles","TimerPickerModal","visible","setIsVisible","onConfirm","onCancel","onDurationChange","closeOnOverlayPress","initialHours","initialMinutes","initialSeconds","hideHours","hideMinutes","hideSeconds","hourLimit","minuteLimit","secondLimit","hourLabel","minuteLabel","secondLabel","padWithNItems","disableInfiniteScroll","allowFontScaling","use12HourPicker","amLabel","pmLabel","hideCancelButton","confirmButtonText","cancelButtonText","modalTitle","LinearGradient","modalProps","containerProps","contentContainerProps","pickerContainerProps","buttonContainerProps","buttonTouchableOpacityProps","modalTitleProps","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","styles","customStyles","ref","timerPickerRef","selectedDuration","setSelectedDuration","hours","minutes","seconds","confirmedDuration","setConfirmedDuration","reset","options","_timerPickerRef$curre","initialDuration","current","hideModalHandler","confirmHandler","_timerPickerRef$curre2","_latestDuration$hours","_latestDuration$minut","_latestDuration$secon","latestDuration","newDuration","cancelHandler","durationChangeHandler","duration","_timerPickerRef$curre4","_timerPickerRef$curre5","_timerPickerRef$curre6","setValue","value","_timerPickerRef$curre3","createElement","_extends","isVisible","onOverlayPress","undefined","testID","style","container","contentContainer","aggressivelyGetLatestDuration","buttonContainer","onPress","button","cancelButton","confirmButton","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n MutableRefObject,\n forwardRef,\n useCallback,\n useEffect,\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,\n minuteLabel,\n secondLabel,\n padWithNItems = 1,\n disableInfiniteScroll = false,\n allowFontScaling = false,\n use12HourPicker,\n amLabel,\n pmLabel,\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 reset = (options?: { animated?: boolean }) => {\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\n // reset state if the initial times change\n useEffect(() => {\n reset();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialHours, initialMinutes, initialSeconds]);\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,\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 allowFontScaling={allowFontScaling}\n use12HourPicker={use12HourPicker}\n amLabel={amLabel}\n pmLabel={pmLabel}\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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"}
package/package.json CHANGED
@@ -6,14 +6,15 @@
6
6
  "url": "https://github.com/troberts-28"
7
7
  },
8
8
  "license": "MIT",
9
- "version": "1.5.1",
9
+ "version": "1.5.3",
10
10
  "main": "dist/commonjs/index.js",
11
11
  "types": "dist/typescript/src/index.d.ts",
12
12
  "scripts": {
13
+ "setup": "yarn && cd example && yarn",
14
+ "start": " cd example && yarn start",
13
15
  "test": "jest --forceExit --silent",
14
16
  "build": "bob build",
15
17
  "clean": "rm yarn.lock && rm -rf ./node_modules && yarn install",
16
- "start": "cp -Rf src example && cd example && npx expo install && npx expo start",
17
18
  "lint": "eslint --ext .ts,.tsx .",
18
19
  "lint:fix": "eslint --ext .ts,.tsx . --fix",
19
20
  "prepare": "yarn build"
@@ -2,6 +2,7 @@ import React, {
2
2
  MutableRefObject,
3
3
  forwardRef,
4
4
  useCallback,
5
+ useEffect,
5
6
  useImperativeHandle,
6
7
  useRef,
7
8
  useState,
@@ -121,6 +122,23 @@ const TimerPickerModal = forwardRef<TimerPickerModalRef, TimerPickerModalProps>(
121
122
  seconds: initialSeconds,
122
123
  });
123
124
 
125
+ const reset = (options?: { animated?: boolean }) => {
126
+ const initialDuration = {
127
+ hours: initialHours,
128
+ minutes: initialMinutes,
129
+ seconds: initialSeconds,
130
+ };
131
+ setSelectedDuration(initialDuration);
132
+ setConfirmedDuration(initialDuration);
133
+ timerPickerRef.current?.reset(options);
134
+ };
135
+
136
+ // reset state if the initial times change
137
+ useEffect(() => {
138
+ reset();
139
+ // eslint-disable-next-line react-hooks/exhaustive-deps
140
+ }, [initialHours, initialMinutes, initialSeconds]);
141
+
124
142
  const hideModalHandler = () => {
125
143
  setSelectedDuration({
126
144
  hours: confirmedDuration.hours,
@@ -161,16 +179,7 @@ const TimerPickerModal = forwardRef<TimerPickerModalRef, TimerPickerModalProps>(
161
179
  );
162
180
 
163
181
  useImperativeHandle(ref, () => ({
164
- reset: (options) => {
165
- const initialDuration = {
166
- hours: initialHours,
167
- minutes: initialMinutes,
168
- seconds: initialSeconds,
169
- };
170
- setSelectedDuration(initialDuration);
171
- setConfirmedDuration(initialDuration);
172
- timerPickerRef.current?.reset(options);
173
- },
182
+ reset,
174
183
  setValue: (value, options) => {
175
184
  setSelectedDuration(value);
176
185
  setConfirmedDuration(value);