react-native-timer-picker 1.2.11 → 1.4.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.
Files changed (54) hide show
  1. package/README.md +22 -2
  2. package/dist/commonjs/components/Modal/index.js +13 -14
  3. package/dist/commonjs/components/Modal/index.js.map +1 -1
  4. package/dist/commonjs/components/TimerPicker/DurationScroll.js +72 -34
  5. package/dist/commonjs/components/TimerPicker/DurationScroll.js.map +1 -1
  6. package/dist/commonjs/components/TimerPicker/TimerPicker.styles.js +23 -3
  7. package/dist/commonjs/components/TimerPicker/TimerPicker.styles.js.map +1 -1
  8. package/dist/commonjs/components/TimerPicker/index.js +64 -47
  9. package/dist/commonjs/components/TimerPicker/index.js.map +1 -1
  10. package/dist/commonjs/components/index.js +90 -69
  11. package/dist/commonjs/components/index.js.map +1 -1
  12. package/dist/commonjs/tests/Modal.test.js +3 -1
  13. package/dist/commonjs/tests/Modal.test.js.map +1 -1
  14. package/dist/commonjs/utils/generateNumbers.js +33 -10
  15. package/dist/commonjs/utils/generateNumbers.js.map +1 -1
  16. package/dist/commonjs/utils/padNumber.js +15 -0
  17. package/dist/commonjs/utils/padNumber.js.map +1 -0
  18. package/dist/module/components/Modal/index.js +13 -14
  19. package/dist/module/components/Modal/index.js.map +1 -1
  20. package/dist/module/components/TimerPicker/DurationScroll.js +73 -35
  21. package/dist/module/components/TimerPicker/DurationScroll.js.map +1 -1
  22. package/dist/module/components/TimerPicker/TimerPicker.styles.js +23 -3
  23. package/dist/module/components/TimerPicker/TimerPicker.styles.js.map +1 -1
  24. package/dist/module/components/TimerPicker/index.js +64 -47
  25. package/dist/module/components/TimerPicker/index.js.map +1 -1
  26. package/dist/module/components/index.js +90 -69
  27. package/dist/module/components/index.js.map +1 -1
  28. package/dist/module/tests/Modal.test.js +3 -1
  29. package/dist/module/tests/Modal.test.js.map +1 -1
  30. package/dist/module/utils/generateNumbers.js +31 -9
  31. package/dist/module/utils/generateNumbers.js.map +1 -1
  32. package/dist/module/utils/padNumber.js +8 -0
  33. package/dist/module/utils/padNumber.js.map +1 -0
  34. package/dist/typescript/components/TimerPicker/DurationScroll.d.ts +6 -1
  35. package/dist/typescript/components/TimerPicker/TimerPicker.styles.d.ts +4 -0
  36. package/dist/typescript/components/TimerPicker/index.d.ts +10 -1
  37. package/dist/typescript/components/index.d.ts +6 -1
  38. package/dist/typescript/utils/generateNumbers.d.ts +7 -2
  39. package/dist/typescript/utils/padNumber.d.ts +3 -0
  40. package/package.json +2 -2
  41. package/src/components/Modal/index.tsx +2 -2
  42. package/src/components/TimerPicker/DurationScroll.tsx +95 -12
  43. package/src/components/TimerPicker/TimerPicker.styles.ts +32 -1
  44. package/src/components/TimerPicker/index.tsx +39 -6
  45. package/src/components/index.tsx +45 -15
  46. package/src/tests/Modal.test.tsx +1 -1
  47. package/src/utils/generateNumbers.ts +40 -10
  48. package/src/utils/padNumber.ts +10 -0
  49. package/dist/commonjs/utils/padWithZero.js +0 -15
  50. package/dist/commonjs/utils/padWithZero.js.map +0 -1
  51. package/dist/module/utils/padWithZero.js +0 -8
  52. package/dist/module/utils/padWithZero.js.map +0 -1
  53. package/dist/typescript/utils/padWithZero.d.ts +0 -1
  54. package/src/utils/padWithZero.ts +0 -7
@@ -3,30 +3,33 @@ import React, { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, use
3
3
  import { View } from "react-native";
4
4
  import DurationScroll from "./DurationScroll";
5
5
  import { generateStyles } from "./TimerPicker.styles";
6
- const TimerPicker = /*#__PURE__*/forwardRef((_ref, ref) => {
7
- let {
8
- onDurationChange,
9
- initialHours = 0,
10
- initialMinutes = 0,
11
- initialSeconds = 0,
12
- hideHours = false,
13
- hideMinutes = false,
14
- hideSeconds = false,
15
- hourLimit,
16
- minuteLimit,
17
- secondLimit,
18
- hourLabel = "h",
19
- minuteLabel = "m",
20
- secondLabel = "s",
21
- padWithNItems = 1,
22
- disableInfiniteScroll = false,
23
- LinearGradient,
24
- pickerContainerProps,
25
- pickerGradientOverlayProps,
26
- topPickerGradientOverlayProps,
27
- bottomPickerGradientOverlayProps,
28
- styles: customStyles
29
- } = _ref;
6
+ const TimerPicker = /*#__PURE__*/forwardRef(({
7
+ onDurationChange,
8
+ initialHours = 0,
9
+ initialMinutes = 0,
10
+ initialSeconds = 0,
11
+ hideHours = false,
12
+ hideMinutes = false,
13
+ hideSeconds = false,
14
+ hourLimit,
15
+ minuteLimit,
16
+ secondLimit,
17
+ hourLabel,
18
+ minuteLabel,
19
+ secondLabel,
20
+ padWithNItems = 1,
21
+ disableInfiniteScroll = false,
22
+ aggressivelyGetLatestDuration = false,
23
+ use12HourPicker = false,
24
+ amLabel = "am",
25
+ pmLabel = "pm",
26
+ LinearGradient,
27
+ pickerContainerProps,
28
+ pickerGradientOverlayProps,
29
+ topPickerGradientOverlayProps,
30
+ bottomPickerGradientOverlayProps,
31
+ styles: customStyles
32
+ }, ref) => {
30
33
  const checkedPadWithNItems = padWithNItems >= 0 ? Math.round(padWithNItems) : 0;
31
34
  const styles = useMemo(() => generateStyles(customStyles, {
32
35
  padWithNItems: checkedPadWithNItems
@@ -45,34 +48,43 @@ const TimerPicker = /*#__PURE__*/forwardRef((_ref, ref) => {
45
48
  const hoursDurationScrollRef = useRef(null);
46
49
  const minutesDurationScrollRef = useRef(null);
47
50
  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
- }));
51
+ useImperativeHandle(ref, () => {
52
+ var _hoursDurationScrollR3, _minutesDurationScrol3, _secondsDurationScrol3;
53
+ return {
54
+ reset: options => {
55
+ var _hoursDurationScrollR, _minutesDurationScrol, _secondsDurationScrol;
56
+ setSelectedHours(initialHours);
57
+ setSelectedMinutes(initialMinutes);
58
+ setSelectedSeconds(initialSeconds);
59
+ (_hoursDurationScrollR = hoursDurationScrollRef.current) === null || _hoursDurationScrollR === void 0 || _hoursDurationScrollR.reset(options);
60
+ (_minutesDurationScrol = minutesDurationScrollRef.current) === null || _minutesDurationScrol === void 0 || _minutesDurationScrol.reset(options);
61
+ (_secondsDurationScrol = secondsDurationScrollRef.current) === null || _secondsDurationScrol === void 0 || _secondsDurationScrol.reset(options);
62
+ },
63
+ setValue: (value, options) => {
64
+ var _hoursDurationScrollR2, _minutesDurationScrol2, _secondsDurationScrol2;
65
+ setSelectedHours(value.hours);
66
+ setSelectedMinutes(value.minutes);
67
+ setSelectedSeconds(value.seconds);
68
+ (_hoursDurationScrollR2 = hoursDurationScrollRef.current) === null || _hoursDurationScrollR2 === void 0 || _hoursDurationScrollR2.setValue(value.hours, options);
69
+ (_minutesDurationScrol2 = minutesDurationScrollRef.current) === null || _minutesDurationScrol2 === void 0 || _minutesDurationScrol2.setValue(value.minutes, options);
70
+ (_secondsDurationScrol2 = secondsDurationScrollRef.current) === null || _secondsDurationScrol2 === void 0 || _secondsDurationScrol2.setValue(value.seconds, options);
71
+ },
72
+ latestDuration: {
73
+ hours: (_hoursDurationScrollR3 = hoursDurationScrollRef.current) === null || _hoursDurationScrollR3 === void 0 ? void 0 : _hoursDurationScrollR3.latestDuration,
74
+ minutes: (_minutesDurationScrol3 = minutesDurationScrollRef.current) === null || _minutesDurationScrol3 === void 0 ? void 0 : _minutesDurationScrol3.latestDuration,
75
+ seconds: (_secondsDurationScrol3 = secondsDurationScrollRef.current) === null || _secondsDurationScrol3 === void 0 ? void 0 : _secondsDurationScrol3.latestDuration
76
+ }
77
+ };
78
+ });
68
79
  return /*#__PURE__*/React.createElement(View, _extends({}, pickerContainerProps, {
69
80
  style: styles.pickerContainer,
70
81
  testID: "timer-picker"
71
82
  }), !hideHours ? /*#__PURE__*/React.createElement(DurationScroll, {
72
83
  ref: hoursDurationScrollRef,
73
84
  numberOfItems: 23,
74
- label: hourLabel,
85
+ label: hourLabel ?? (!use12HourPicker ? "h" : undefined),
75
86
  initialValue: initialHours,
87
+ aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
76
88
  onDurationChange: setSelectedHours,
77
89
  pickerGradientOverlayProps: pickerGradientOverlayProps,
78
90
  topPickerGradientOverlayProps: topPickerGradientOverlayProps,
@@ -81,13 +93,17 @@ const TimerPicker = /*#__PURE__*/forwardRef((_ref, ref) => {
81
93
  padWithNItems: checkedPadWithNItems,
82
94
  limit: hourLimit,
83
95
  LinearGradient: LinearGradient,
96
+ is12HourPicker: use12HourPicker,
97
+ amLabel: amLabel,
98
+ pmLabel: pmLabel,
84
99
  styles: styles,
85
100
  testID: "duration-scroll-hour"
86
101
  }) : null, !hideMinutes ? /*#__PURE__*/React.createElement(DurationScroll, {
87
102
  ref: minutesDurationScrollRef,
88
103
  numberOfItems: 59,
89
- label: minuteLabel,
104
+ label: minuteLabel ?? "m",
90
105
  initialValue: initialMinutes,
106
+ aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
91
107
  onDurationChange: setSelectedMinutes,
92
108
  padNumbersWithZero: true,
93
109
  pickerGradientOverlayProps: pickerGradientOverlayProps,
@@ -102,8 +118,9 @@ const TimerPicker = /*#__PURE__*/forwardRef((_ref, ref) => {
102
118
  }) : null, !hideSeconds ? /*#__PURE__*/React.createElement(DurationScroll, {
103
119
  ref: secondsDurationScrollRef,
104
120
  numberOfItems: 59,
105
- label: secondLabel,
121
+ label: secondLabel ?? "s",
106
122
  initialValue: initialSeconds,
123
+ aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
107
124
  onDurationChange: setSelectedSeconds,
108
125
  padNumbersWithZero: true,
109
126
  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","onDurationChange","initialHours","initialMinutes","initialSeconds","hideHours","hideMinutes","hideSeconds","hourLimit","minuteLimit","secondLimit","hourLabel","minuteLabel","secondLabel","padWithNItems","disableInfiniteScroll","aggressivelyGetLatestDuration","use12HourPicker","amLabel","pmLabel","LinearGradient","pickerContainerProps","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","styles","customStyles","ref","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","undefined","initialValue","limit","is12HourPicker","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 use12HourPicker?: boolean;\n amLabel?: string;\n pmLabel?: string;\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,\n minuteLabel,\n secondLabel,\n padWithNItems = 1,\n disableInfiniteScroll = false,\n aggressivelyGetLatestDuration = false,\n use12HourPicker = false,\n amLabel = \"am\",\n pmLabel = \"pm\",\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={\n hourLabel ?? (!use12HourPicker ? \"h\" : undefined)\n }\n initialValue={initialHours}\n aggressivelyGetLatestDuration={\n aggressivelyGetLatestDuration\n }\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 is12HourPicker={use12HourPicker}\n amLabel={amLabel}\n pmLabel={pmLabel}\n styles={styles}\n testID=\"duration-scroll-hour\"\n />\n ) : null}\n {!hideMinutes ? (\n <DurationScroll\n ref={minutesDurationScrollRef}\n numberOfItems={59}\n label={minuteLabel ?? \"m\"}\n initialValue={initialMinutes}\n aggressivelyGetLatestDuration={\n aggressivelyGetLatestDuration\n }\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 ?? \"s\"}\n initialValue={initialSeconds}\n aggressivelyGetLatestDuration={\n aggressivelyGetLatestDuration\n }\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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"}
@@ -4,46 +4,49 @@ import { View, Text, TouchableOpacity } from "react-native";
4
4
  import TimerPicker from "./TimerPicker";
5
5
  import Modal from "./Modal";
6
6
  import { generateStyles } from "./TimerPickerModal.styles";
7
- const TimerPickerModal = /*#__PURE__*/forwardRef((_ref, ref) => {
8
- let {
9
- visible,
10
- setIsVisible,
11
- onConfirm,
12
- onCancel,
13
- onDurationChange,
14
- closeOnOverlayPress,
15
- initialHours = 0,
16
- initialMinutes = 0,
17
- initialSeconds = 0,
18
- hideHours = false,
19
- hideMinutes = false,
20
- hideSeconds = false,
21
- hourLimit,
22
- minuteLimit,
23
- secondLimit,
24
- hourLabel = "h",
25
- minuteLabel = "m",
26
- secondLabel = "s",
27
- padWithNItems = 1,
28
- disableInfiniteScroll = false,
29
- hideCancelButton = false,
30
- confirmButtonText = "Confirm",
31
- cancelButtonText = "Cancel",
32
- modalTitle,
33
- LinearGradient,
34
- modalProps,
35
- containerProps,
36
- contentContainerProps,
37
- pickerContainerProps,
38
- buttonContainerProps,
39
- buttonTouchableOpacityProps,
40
- modalTitleProps,
41
- pickerGradientOverlayProps,
42
- topPickerGradientOverlayProps,
43
- bottomPickerGradientOverlayProps,
44
- styles: customStyles
45
- } = _ref;
7
+ const TimerPickerModal = /*#__PURE__*/forwardRef(({
8
+ visible,
9
+ setIsVisible,
10
+ onConfirm,
11
+ onCancel,
12
+ onDurationChange,
13
+ closeOnOverlayPress,
14
+ initialHours = 0,
15
+ initialMinutes = 0,
16
+ initialSeconds = 0,
17
+ hideHours = false,
18
+ hideMinutes = false,
19
+ hideSeconds = false,
20
+ hourLimit,
21
+ minuteLimit,
22
+ secondLimit,
23
+ hourLabel,
24
+ minuteLabel,
25
+ secondLabel,
26
+ padWithNItems = 1,
27
+ disableInfiniteScroll = false,
28
+ use12HourPicker,
29
+ amLabel,
30
+ pmLabel,
31
+ hideCancelButton = false,
32
+ confirmButtonText = "Confirm",
33
+ cancelButtonText = "Cancel",
34
+ modalTitle,
35
+ LinearGradient,
36
+ modalProps,
37
+ containerProps,
38
+ contentContainerProps,
39
+ pickerContainerProps,
40
+ buttonContainerProps,
41
+ buttonTouchableOpacityProps,
42
+ modalTitleProps,
43
+ pickerGradientOverlayProps,
44
+ topPickerGradientOverlayProps,
45
+ bottomPickerGradientOverlayProps,
46
+ styles: customStyles
47
+ }, ref) => {
46
48
  const styles = generateStyles(customStyles);
49
+ const timerPickerRef = useRef(null);
47
50
  const [selectedDuration, setSelectedDuration] = useState({
48
51
  hours: initialHours,
49
52
  minutes: initialMinutes,
@@ -54,7 +57,7 @@ const TimerPickerModal = /*#__PURE__*/forwardRef((_ref, ref) => {
54
57
  minutes: initialMinutes,
55
58
  seconds: initialSeconds
56
59
  });
57
- const hideModal = () => {
60
+ const hideModalHandler = () => {
58
61
  setSelectedDuration({
59
62
  hours: confirmedDuration.hours,
60
63
  minutes: confirmedDuration.minutes,
@@ -62,44 +65,58 @@ const TimerPickerModal = /*#__PURE__*/forwardRef((_ref, ref) => {
62
65
  });
63
66
  setIsVisible(false);
64
67
  };
65
- const confirm = () => {
66
- setConfirmedDuration(selectedDuration);
67
- onConfirm(selectedDuration);
68
+ const confirmHandler = () => {
69
+ var _timerPickerRef$curre, _latestDuration$hours, _latestDuration$minut, _latestDuration$secon;
70
+ const latestDuration = (_timerPickerRef$curre = timerPickerRef.current) === null || _timerPickerRef$curre === void 0 ? void 0 : _timerPickerRef$curre.latestDuration;
71
+ const newDuration = {
72
+ hours: (latestDuration === null || latestDuration === void 0 || (_latestDuration$hours = latestDuration.hours) === null || _latestDuration$hours === void 0 ? void 0 : _latestDuration$hours.current) ?? selectedDuration.hours,
73
+ minutes: (latestDuration === null || latestDuration === void 0 || (_latestDuration$minut = latestDuration.minutes) === null || _latestDuration$minut === void 0 ? void 0 : _latestDuration$minut.current) ?? selectedDuration.minutes,
74
+ seconds: (latestDuration === null || latestDuration === void 0 || (_latestDuration$secon = latestDuration.seconds) === null || _latestDuration$secon === void 0 ? void 0 : _latestDuration$secon.current) ?? selectedDuration.seconds
75
+ };
76
+ setConfirmedDuration(newDuration);
77
+ onConfirm(newDuration);
68
78
  };
69
- const cancel = () => {
79
+ const cancelHandler = () => {
70
80
  setIsVisible(false);
71
81
  setSelectedDuration(confirmedDuration);
72
82
  onCancel === null || onCancel === void 0 || onCancel();
73
83
  };
74
84
 
75
85
  // wrapped in useCallback to avoid unnecessary re-renders of TimerPicker
76
- const durationChange = useCallback(duration => {
86
+ const durationChangeHandler = useCallback(duration => {
77
87
  setSelectedDuration(duration);
78
88
  onDurationChange === null || onDurationChange === void 0 || onDurationChange(duration);
79
89
  }, [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
- }));
90
+ useImperativeHandle(ref, () => {
91
+ var _timerPickerRef$curre4, _timerPickerRef$curre5, _timerPickerRef$curre6;
92
+ return {
93
+ reset: options => {
94
+ var _timerPickerRef$curre2;
95
+ const initialDuration = {
96
+ hours: initialHours,
97
+ minutes: initialMinutes,
98
+ seconds: initialSeconds
99
+ };
100
+ setSelectedDuration(initialDuration);
101
+ setConfirmedDuration(initialDuration);
102
+ (_timerPickerRef$curre2 = timerPickerRef.current) === null || _timerPickerRef$curre2 === void 0 || _timerPickerRef$curre2.reset(options);
103
+ },
104
+ setValue: (value, options) => {
105
+ var _timerPickerRef$curre3;
106
+ setSelectedDuration(value);
107
+ setConfirmedDuration(value);
108
+ (_timerPickerRef$curre3 = timerPickerRef.current) === null || _timerPickerRef$curre3 === void 0 || _timerPickerRef$curre3.setValue(value, options);
109
+ },
110
+ latestDuration: {
111
+ 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,
112
+ 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,
113
+ 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
114
+ }
115
+ };
116
+ });
100
117
  return /*#__PURE__*/React.createElement(Modal, _extends({
101
118
  isVisible: visible,
102
- onOverlayPress: closeOnOverlayPress ? hideModal : undefined
119
+ onOverlayPress: closeOnOverlayPress ? hideModalHandler : undefined
103
120
  }, modalProps, {
104
121
  testID: "timer-picker-modal"
105
122
  }), /*#__PURE__*/React.createElement(View, _extends({}, containerProps, {
@@ -110,10 +127,11 @@ const TimerPickerModal = /*#__PURE__*/forwardRef((_ref, ref) => {
110
127
  style: styles.modalTitle
111
128
  }), modalTitle) : null, /*#__PURE__*/React.createElement(TimerPicker, {
112
129
  ref: timerPickerRef,
113
- onDurationChange: durationChange,
130
+ onDurationChange: durationChangeHandler,
114
131
  initialHours: confirmedDuration.hours,
115
132
  initialMinutes: confirmedDuration.minutes,
116
133
  initialSeconds: confirmedDuration.seconds,
134
+ aggressivelyGetLatestDuration: true,
117
135
  hideHours: hideHours,
118
136
  hideMinutes: hideMinutes,
119
137
  hideSeconds: hideSeconds,
@@ -125,6 +143,9 @@ const TimerPickerModal = /*#__PURE__*/forwardRef((_ref, ref) => {
125
143
  secondLabel: secondLabel,
126
144
  padWithNItems: padWithNItems,
127
145
  disableInfiniteScroll: disableInfiniteScroll,
146
+ use12HourPicker: use12HourPicker,
147
+ amLabel: amLabel,
148
+ pmLabel: pmLabel,
128
149
  LinearGradient: LinearGradient,
129
150
  pickerContainerProps: pickerContainerProps,
130
151
  pickerGradientOverlayProps: pickerGradientOverlayProps,
@@ -134,11 +155,11 @@ const TimerPickerModal = /*#__PURE__*/forwardRef((_ref, ref) => {
134
155
  }), /*#__PURE__*/React.createElement(View, _extends({}, buttonContainerProps, {
135
156
  style: styles.buttonContainer
136
157
  }), !hideCancelButton ? /*#__PURE__*/React.createElement(TouchableOpacity, _extends({
137
- onPress: cancel
158
+ onPress: cancelHandler
138
159
  }, buttonTouchableOpacityProps), /*#__PURE__*/React.createElement(Text, {
139
160
  style: [styles.button, styles.cancelButton]
140
161
  }, cancelButtonText)) : null, /*#__PURE__*/React.createElement(TouchableOpacity, _extends({
141
- onPress: confirm
162
+ onPress: confirmHandler
142
163
  }, buttonTouchableOpacityProps), /*#__PURE__*/React.createElement(Text, {
143
164
  style: [styles.button, styles.confirmButton]
144
165
  }, confirmButtonText))))));
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","useCallback","useImperativeHandle","useRef","useState","View","Text","TouchableOpacity","TimerPicker","Modal","generateStyles","TimerPickerModal","_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","selectedDuration","setSelectedDuration","hours","minutes","seconds","confirmedDuration","setConfirmedDuration","hideModal","confirm","cancel","durationChange","duration","timerPickerRef","reset","options","_timerPickerRef$curre","initialDuration","current","setValue","value","_timerPickerRef$curre2","createElement","_extends","isVisible","onOverlayPress","undefined","testID","style","container","contentContainer","buttonContainer","onPress","button","cancelButton","confirmButton","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","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","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 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 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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"}
@@ -6,7 +6,9 @@ describe("Modal", () => {
6
6
  it("renders without crashing", () => {
7
7
  const {
8
8
  getByTestId
9
- } = render( /*#__PURE__*/React.createElement(Modal, null));
9
+ } = render( /*#__PURE__*/React.createElement(Modal, {
10
+ isVisible: true
11
+ }));
10
12
  const component = getByTestId("modal");
11
13
  expect(component).toBeDefined();
12
14
  });
@@ -1 +1 @@
1
- {"version":3,"names":["React","Text","render","fireEvent","Modal","describe","it","getByTestId","createElement","component","expect","toBeDefined","getByText","isVisible","content","onOverlayPressMock","jest","fn","onOverlayPress","overlay","press","toHaveBeenCalled"],"sources":["Modal.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { Text } from \"react-native\";\nimport { render, fireEvent } from \"@testing-library/react-native\";\nimport Modal from \"../components/Modal\";\n\ndescribe(\"Modal\", () => {\n it(\"renders without crashing\", () => {\n const { getByTestId } = render(<Modal />);\n const component = getByTestId(\"modal\");\n expect(component).toBeDefined();\n });\n\n it(\"renders children when visible\", () => {\n const { getByText } = render(\n <Modal isVisible>\n <Text>{\"Modal Content\"}</Text>\n </Modal>\n );\n const content = getByText(\"Modal Content\");\n expect(content).toBeDefined();\n });\n\n it(\"calls onOverlayPress when overlay is pressed\", () => {\n const onOverlayPressMock = jest.fn();\n const { getByTestId } = render(\n <Modal isVisible onOverlayPress={onOverlayPressMock} />\n );\n const overlay = getByTestId(\"modal-backdrop\");\n fireEvent.press(overlay);\n expect(onOverlayPressMock).toHaveBeenCalled();\n });\n\n // Add more test cases to cover different interactions, scenarios, and edge cases\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,MAAM,EAAEC,SAAS,QAAQ,+BAA+B;AACjE,OAAOC,KAAK,MAAM,qBAAqB;AAEvCC,QAAQ,CAAC,OAAO,EAAE,MAAM;EACpBC,EAAE,CAAC,0BAA0B,EAAE,MAAM;IACjC,MAAM;MAAEC;IAAY,CAAC,GAAGL,MAAM,eAACF,KAAA,CAAAQ,aAAA,CAACJ,KAAK,MAAE,CAAC,CAAC;IACzC,MAAMK,SAAS,GAAGF,WAAW,CAAC,OAAO,CAAC;IACtCG,MAAM,CAACD,SAAS,CAAC,CAACE,WAAW,CAAC,CAAC;EACnC,CAAC,CAAC;EAEFL,EAAE,CAAC,+BAA+B,EAAE,MAAM;IACtC,MAAM;MAAEM;IAAU,CAAC,GAAGV,MAAM,eACxBF,KAAA,CAAAQ,aAAA,CAACJ,KAAK;MAACS,SAAS;IAAA,gBACZb,KAAA,CAAAQ,aAAA,CAACP,IAAI,QAAE,eAAsB,CAC1B,CACX,CAAC;IACD,MAAMa,OAAO,GAAGF,SAAS,CAAC,eAAe,CAAC;IAC1CF,MAAM,CAACI,OAAO,CAAC,CAACH,WAAW,CAAC,CAAC;EACjC,CAAC,CAAC;EAEFL,EAAE,CAAC,8CAA8C,EAAE,MAAM;IACrD,MAAMS,kBAAkB,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;IACpC,MAAM;MAAEV;IAAY,CAAC,GAAGL,MAAM,eAC1BF,KAAA,CAAAQ,aAAA,CAACJ,KAAK;MAACS,SAAS;MAACK,cAAc,EAAEH;IAAmB,CAAE,CAC1D,CAAC;IACD,MAAMI,OAAO,GAAGZ,WAAW,CAAC,gBAAgB,CAAC;IAC7CJ,SAAS,CAACiB,KAAK,CAACD,OAAO,CAAC;IACxBT,MAAM,CAACK,kBAAkB,CAAC,CAACM,gBAAgB,CAAC,CAAC;EACjD,CAAC,CAAC;;EAEF;AACJ,CAAC,CAAC"}
1
+ {"version":3,"names":["React","Text","render","fireEvent","Modal","describe","it","getByTestId","createElement","isVisible","component","expect","toBeDefined","getByText","content","onOverlayPressMock","jest","fn","onOverlayPress","overlay","press","toHaveBeenCalled"],"sources":["Modal.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { Text } from \"react-native\";\nimport { render, fireEvent } from \"@testing-library/react-native\";\nimport Modal from \"../components/Modal\";\n\ndescribe(\"Modal\", () => {\n it(\"renders without crashing\", () => {\n const { getByTestId } = render(<Modal isVisible/>);\n const component = getByTestId(\"modal\");\n expect(component).toBeDefined();\n });\n\n it(\"renders children when visible\", () => {\n const { getByText } = render(\n <Modal isVisible>\n <Text>{\"Modal Content\"}</Text>\n </Modal>\n );\n const content = getByText(\"Modal Content\");\n expect(content).toBeDefined();\n });\n\n it(\"calls onOverlayPress when overlay is pressed\", () => {\n const onOverlayPressMock = jest.fn();\n const { getByTestId } = render(\n <Modal isVisible onOverlayPress={onOverlayPressMock} />\n );\n const overlay = getByTestId(\"modal-backdrop\");\n fireEvent.press(overlay);\n expect(onOverlayPressMock).toHaveBeenCalled();\n });\n\n // Add more test cases to cover different interactions, scenarios, and edge cases\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,MAAM,EAAEC,SAAS,QAAQ,+BAA+B;AACjE,OAAOC,KAAK,MAAM,qBAAqB;AAEvCC,QAAQ,CAAC,OAAO,EAAE,MAAM;EACpBC,EAAE,CAAC,0BAA0B,EAAE,MAAM;IACjC,MAAM;MAAEC;IAAY,CAAC,GAAGL,MAAM,eAACF,KAAA,CAAAQ,aAAA,CAACJ,KAAK;MAACK,SAAS;IAAA,CAAC,CAAC,CAAC;IAClD,MAAMC,SAAS,GAAGH,WAAW,CAAC,OAAO,CAAC;IACtCI,MAAM,CAACD,SAAS,CAAC,CAACE,WAAW,CAAC,CAAC;EACnC,CAAC,CAAC;EAEFN,EAAE,CAAC,+BAA+B,EAAE,MAAM;IACtC,MAAM;MAAEO;IAAU,CAAC,GAAGX,MAAM,eACxBF,KAAA,CAAAQ,aAAA,CAACJ,KAAK;MAACK,SAAS;IAAA,gBACZT,KAAA,CAAAQ,aAAA,CAACP,IAAI,QAAE,eAAsB,CAC1B,CACX,CAAC;IACD,MAAMa,OAAO,GAAGD,SAAS,CAAC,eAAe,CAAC;IAC1CF,MAAM,CAACG,OAAO,CAAC,CAACF,WAAW,CAAC,CAAC;EACjC,CAAC,CAAC;EAEFN,EAAE,CAAC,8CAA8C,EAAE,MAAM;IACrD,MAAMS,kBAAkB,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;IACpC,MAAM;MAAEV;IAAY,CAAC,GAAGL,MAAM,eAC1BF,KAAA,CAAAQ,aAAA,CAACJ,KAAK;MAACK,SAAS;MAACS,cAAc,EAAEH;IAAmB,CAAE,CAC1D,CAAC;IACD,MAAMI,OAAO,GAAGZ,WAAW,CAAC,gBAAgB,CAAC;IAC7CJ,SAAS,CAACiB,KAAK,CAACD,OAAO,CAAC;IACxBR,MAAM,CAACI,kBAAkB,CAAC,CAACM,gBAAgB,CAAC,CAAC;EACjD,CAAC,CAAC;;EAEF;AACJ,CAAC,CAAC"}
@@ -1,17 +1,39 @@
1
- import { padWithZero } from "./padWithZero";
1
+ import { padNumber } from "./padNumber";
2
2
  export const generateNumbers = (numberOfItems, options) => {
3
3
  if (numberOfItems <= 0) {
4
4
  return [];
5
5
  }
6
6
  let numbers = [];
7
- if (options.padWithZero) {
8
- for (let i = 0; i <= numberOfItems; i++) {
9
- numbers.push(padWithZero(i));
10
- }
11
- } else {
12
- for (let i = 0; i <= numberOfItems; i++) {
13
- numbers.push(String(i));
14
- }
7
+ for (let i = 0; i <= numberOfItems; i++) {
8
+ numbers.push(padNumber(i, {
9
+ padWithZero: options.padNumbersWithZero
10
+ }));
11
+ }
12
+ if ((options.repeatNTimes ?? 1) > 1) {
13
+ numbers = Array(options.repeatNTimes).fill(numbers).flat();
14
+ }
15
+ if (options.disableInfiniteScroll) {
16
+ numbers.push(...Array(options.padWithNItems).fill(""));
17
+ numbers.unshift(...Array(options.padWithNItems).fill(""));
18
+ }
19
+ return numbers;
20
+ };
21
+ export const generate12HourNumbers = options => {
22
+ let numbers = [];
23
+
24
+ // Generate numbers from 0 to 11 for AM
25
+ for (let i = 0; i <= 11; i++) {
26
+ numbers.push(`${padNumber(i, {
27
+ padWithZero: options.padNumbersWithZero
28
+ })} AM`);
29
+ }
30
+
31
+ // Generate numbers from 12 to 11 for PM
32
+ for (let i = 12; i <= 23; i++) {
33
+ const hour = i > 12 ? i - 12 : i;
34
+ numbers.push(`${padNumber(hour, {
35
+ padWithZero: options.padNumbersWithZero
36
+ })} PM`);
15
37
  }
16
38
  if ((options.repeatNTimes ?? 1) > 1) {
17
39
  numbers = Array(options.repeatNTimes).fill(numbers).flat();