react-native-timer-picker 1.6.0 → 1.7.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.
@@ -6,9 +6,7 @@ import { generateStyles } from "./TimerPicker.styles";
6
6
  const TimerPicker = /*#__PURE__*/forwardRef(({
7
7
  allowFontScaling = false,
8
8
  onDurationChange,
9
- initialHours = 0,
10
- initialMinutes = 0,
11
- initialSeconds = 0,
9
+ initialValue,
12
10
  hideHours = false,
13
11
  hideMinutes = false,
14
12
  hideSeconds = false,
@@ -38,9 +36,14 @@ const TimerPicker = /*#__PURE__*/forwardRef(({
38
36
  const styles = useMemo(() => generateStyles(customStyles, {
39
37
  padWithNItems: checkedPadWithNItems
40
38
  }), [checkedPadWithNItems, customStyles]);
41
- const [selectedHours, setSelectedHours] = useState(initialHours);
42
- const [selectedMinutes, setSelectedMinutes] = useState(initialMinutes);
43
- const [selectedSeconds, setSelectedSeconds] = useState(initialSeconds);
39
+ const safeInitialValue = {
40
+ hours: (initialValue === null || initialValue === void 0 ? void 0 : initialValue.hours) ?? 0,
41
+ minutes: (initialValue === null || initialValue === void 0 ? void 0 : initialValue.minutes) ?? 0,
42
+ seconds: (initialValue === null || initialValue === void 0 ? void 0 : initialValue.seconds) ?? 0
43
+ };
44
+ const [selectedHours, setSelectedHours] = useState(safeInitialValue.hours);
45
+ const [selectedMinutes, setSelectedMinutes] = useState(safeInitialValue.minutes);
46
+ const [selectedSeconds, setSelectedSeconds] = useState(safeInitialValue.seconds);
44
47
  useEffect(() => {
45
48
  onDurationChange === null || onDurationChange === void 0 || onDurationChange({
46
49
  hours: selectedHours,
@@ -57,9 +60,9 @@ const TimerPicker = /*#__PURE__*/forwardRef(({
57
60
  return {
58
61
  reset: options => {
59
62
  var _hoursDurationScrollR, _minutesDurationScrol, _secondsDurationScrol;
60
- setSelectedHours(initialHours);
61
- setSelectedMinutes(initialMinutes);
62
- setSelectedSeconds(initialSeconds);
63
+ setSelectedHours(safeInitialValue.hours);
64
+ setSelectedMinutes(safeInitialValue.minutes);
65
+ setSelectedSeconds(safeInitialValue.seconds);
63
66
  (_hoursDurationScrollR = hoursDurationScrollRef.current) === null || _hoursDurationScrollR === void 0 || _hoursDurationScrollR.reset(options);
64
67
  (_minutesDurationScrol = minutesDurationScrollRef.current) === null || _minutesDurationScrol === void 0 || _minutesDurationScrol.reset(options);
65
68
  (_secondsDurationScrol = secondsDurationScrollRef.current) === null || _secondsDurationScrol === void 0 || _secondsDurationScrol.reset(options);
@@ -88,7 +91,7 @@ const TimerPicker = /*#__PURE__*/forwardRef(({
88
91
  numberOfItems: 23,
89
92
  label: hourLabel ?? (!use12HourPicker ? "h" : undefined),
90
93
  isDisabled: hoursPickerIsDisabled,
91
- initialValue: initialHours,
94
+ initialValue: safeInitialValue.hours,
92
95
  allowFontScaling: allowFontScaling,
93
96
  aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
94
97
  onDurationChange: setSelectedHours,
@@ -109,7 +112,7 @@ const TimerPicker = /*#__PURE__*/forwardRef(({
109
112
  numberOfItems: 59,
110
113
  label: minuteLabel ?? "m",
111
114
  isDisabled: minutesPickerIsDisabled,
112
- initialValue: initialMinutes,
115
+ initialValue: safeInitialValue.minutes,
113
116
  allowFontScaling: allowFontScaling,
114
117
  aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
115
118
  onDurationChange: setSelectedMinutes,
@@ -128,7 +131,7 @@ const TimerPicker = /*#__PURE__*/forwardRef(({
128
131
  numberOfItems: 59,
129
132
  label: secondLabel ?? "s",
130
133
  isDisabled: secondsPickerIsDisabled,
131
- initialValue: initialSeconds,
134
+ initialValue: safeInitialValue.seconds,
132
135
  allowFontScaling: allowFontScaling,
133
136
  aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
134
137
  onDurationChange: setSelectedSeconds,
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","useEffect","useImperativeHandle","useMemo","useRef","useState","View","DurationScroll","generateStyles","TimerPicker","allowFontScaling","onDurationChange","initialHours","initialMinutes","initialSeconds","hideHours","hideMinutes","hideSeconds","hoursPickerIsDisabled","minutesPickerIsDisabled","secondsPickerIsDisabled","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","isDisabled","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 allowFontScaling?: boolean;\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 hoursPickerIsDisabled?: boolean;\n minutesPickerIsDisabled?: boolean;\n secondsPickerIsDisabled?: 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 allowFontScaling = false,\n onDurationChange,\n initialHours = 0,\n initialMinutes = 0,\n initialSeconds = 0,\n hideHours = false,\n hideMinutes = false,\n hideSeconds = false,\n hoursPickerIsDisabled = false,\n minutesPickerIsDisabled = false,\n secondsPickerIsDisabled = 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 isDisabled={hoursPickerIsDisabled}\n initialValue={initialHours}\n allowFontScaling={allowFontScaling}\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 isDisabled={minutesPickerIsDisabled}\n initialValue={initialMinutes}\n allowFontScaling={allowFontScaling}\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 isDisabled={secondsPickerIsDisabled}\n initialValue={initialSeconds}\n allowFontScaling={allowFontScaling}\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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"}
1
+ {"version":3,"names":["React","forwardRef","useEffect","useImperativeHandle","useMemo","useRef","useState","View","DurationScroll","generateStyles","TimerPicker","allowFontScaling","onDurationChange","initialValue","hideHours","hideMinutes","hideSeconds","hoursPickerIsDisabled","minutesPickerIsDisabled","secondsPickerIsDisabled","hourLimit","minuteLimit","secondLimit","hourLabel","minuteLabel","secondLabel","padWithNItems","disableInfiniteScroll","aggressivelyGetLatestDuration","use12HourPicker","amLabel","pmLabel","LinearGradient","pickerContainerProps","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","styles","customStyles","ref","checkedPadWithNItems","Math","round","safeInitialValue","hours","minutes","seconds","selectedHours","setSelectedHours","selectedMinutes","setSelectedMinutes","selectedSeconds","setSelectedSeconds","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","isDisabled","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 allowFontScaling?: boolean;\n onDurationChange?: (duration: {\n hours: number;\n minutes: number;\n seconds: number;\n }) => void;\n initialValue?: {\n hours?: number;\n minutes?: number;\n seconds?: number;\n };\n aggressivelyGetLatestDuration?: boolean;\n use12HourPicker?: boolean;\n amLabel?: string;\n pmLabel?: string;\n hideHours?: boolean;\n hideMinutes?: boolean;\n hideSeconds?: boolean;\n hoursPickerIsDisabled?: boolean;\n minutesPickerIsDisabled?: boolean;\n secondsPickerIsDisabled?: 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 allowFontScaling = false,\n onDurationChange,\n initialValue,\n hideHours = false,\n hideMinutes = false,\n hideSeconds = false,\n hoursPickerIsDisabled = false,\n minutesPickerIsDisabled = false,\n secondsPickerIsDisabled = 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 safeInitialValue = {\n hours: initialValue?.hours ?? 0,\n minutes: initialValue?.minutes ?? 0,\n seconds: initialValue?.seconds ?? 0,\n };\n\n const [selectedHours, setSelectedHours] = useState(\n safeInitialValue.hours\n );\n const [selectedMinutes, setSelectedMinutes] = useState(\n safeInitialValue.minutes\n );\n const [selectedSeconds, setSelectedSeconds] = useState(\n safeInitialValue.seconds\n );\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(safeInitialValue.hours);\n setSelectedMinutes(safeInitialValue.minutes);\n setSelectedSeconds(safeInitialValue.seconds);\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 isDisabled={hoursPickerIsDisabled}\n initialValue={safeInitialValue.hours}\n allowFontScaling={allowFontScaling}\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 isDisabled={minutesPickerIsDisabled}\n initialValue={safeInitialValue.minutes}\n allowFontScaling={allowFontScaling}\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 isDisabled={secondsPickerIsDisabled}\n initialValue={safeInitialValue.seconds}\n allowFontScaling={allowFontScaling}\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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"}
@@ -1 +1 @@
1
- {"version":3,"names":["StyleSheet","DARK_MODE_BACKGROUND_COLOR","DARK_MODE_TEXT_COLOR","LIGHT_MODE_BACKGROUND_COLOR","LIGHT_MODE_TEXT_COLOR","generateStyles","customStyles","create","container","justifyContent","alignItems","overflow","contentContainer","backgroundColor","theme","borderRadius","padding","buttonContainer","flexDirection","marginTop","button","marginHorizontal","paddingVertical","paddingHorizontal","borderWidth","fontSize","text","cancelButton","borderColor","color","undefined","confirmButton","modalTitle","fontWeight","marginBottom"],"sources":["TimerPickerModal.styles.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { StyleSheet } from \"react-native\";\n\nimport type { CustomTimerPickerStyles } from \"./TimerPicker/TimerPicker.styles\";\n\nexport interface CustomTimerPickerModalStyles extends CustomTimerPickerStyles {\n container?: any;\n contentContainer?: any;\n buttonContainer?: any;\n button?: any;\n cancelButton?: any;\n confirmButton?: any;\n modalTitle?: any;\n}\n\nconst DARK_MODE_BACKGROUND_COLOR = \"#232323\";\nconst DARK_MODE_TEXT_COLOR = \"#E9E9E9\";\nconst LIGHT_MODE_BACKGROUND_COLOR = \"#F1F1F1\";\nconst LIGHT_MODE_TEXT_COLOR = \"#1B1B1B\";\n\nexport const generateStyles = (\n customStyles: CustomTimerPickerModalStyles | undefined\n) =>\n StyleSheet.create({\n container: {\n justifyContent: \"center\",\n alignItems: \"center\",\n overflow: \"hidden\",\n ...customStyles?.container,\n },\n contentContainer: {\n backgroundColor:\n customStyles?.backgroundColor ?? customStyles?.theme === \"dark\"\n ? DARK_MODE_BACKGROUND_COLOR\n : LIGHT_MODE_BACKGROUND_COLOR,\n justifyContent: \"center\",\n alignItems: \"center\",\n borderRadius: 20,\n padding: 20,\n ...customStyles?.contentContainer,\n },\n buttonContainer: {\n flexDirection: \"row\",\n marginTop: 25,\n ...customStyles?.buttonContainer,\n },\n button: {\n marginHorizontal: 12,\n paddingVertical: 10,\n paddingHorizontal: 20,\n borderWidth: 1,\n borderRadius: 10,\n fontSize: 16,\n overflow: \"hidden\",\n ...customStyles?.text,\n ...customStyles?.button,\n },\n cancelButton: {\n borderColor: \"gray\",\n color:\n customStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"gray\",\n backgroundColor:\n customStyles?.theme === \"dark\" ? \"gray\" : undefined,\n ...customStyles?.text,\n ...customStyles?.cancelButton,\n },\n confirmButton: {\n borderColor: \"green\",\n color:\n customStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"green\",\n backgroundColor:\n customStyles?.theme === \"dark\" ? \"green\" : undefined,\n ...customStyles?.text,\n ...customStyles?.confirmButton,\n },\n modalTitle: {\n fontSize: 24,\n fontWeight: \"bold\",\n marginBottom: 15,\n color:\n customStyles?.theme === \"dark\"\n ? DARK_MODE_TEXT_COLOR\n : LIGHT_MODE_TEXT_COLOR,\n ...customStyles?.text,\n ...customStyles?.modalTitle,\n },\n });\n"],"mappings":"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"}
1
+ {"version":3,"names":["StyleSheet","DARK_MODE_BACKGROUND_COLOR","DARK_MODE_TEXT_COLOR","LIGHT_MODE_BACKGROUND_COLOR","LIGHT_MODE_TEXT_COLOR","generateStyles","customStyles","create","container","justifyContent","alignItems","overflow","contentContainer","backgroundColor","theme","borderRadius","padding","buttonContainer","flexDirection","marginTop","button","marginHorizontal","paddingVertical","paddingHorizontal","borderWidth","fontSize","text","cancelButton","borderColor","color","undefined","confirmButton","modalTitle","fontWeight","marginBottom"],"sources":["TimerPickerModal.styles.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { StyleSheet, TextStyle, ViewStyle } from \"react-native\";\n\nimport type { CustomTimerPickerStyles } from \"./TimerPicker/TimerPicker.styles\";\n\nexport interface CustomTimerPickerModalStyles extends CustomTimerPickerStyles {\n container?: ViewStyle;\n contentContainer?: ViewStyle;\n buttonContainer?: ViewStyle;\n button?: TextStyle;\n cancelButton?: TextStyle;\n confirmButton?: TextStyle;\n modalTitle?: TextStyle;\n}\n\nconst DARK_MODE_BACKGROUND_COLOR = \"#232323\";\nconst DARK_MODE_TEXT_COLOR = \"#E9E9E9\";\nconst LIGHT_MODE_BACKGROUND_COLOR = \"#F1F1F1\";\nconst LIGHT_MODE_TEXT_COLOR = \"#1B1B1B\";\n\nexport const generateStyles = (\n customStyles: CustomTimerPickerModalStyles | undefined\n) =>\n StyleSheet.create({\n container: {\n justifyContent: \"center\",\n alignItems: \"center\",\n overflow: \"hidden\",\n ...customStyles?.container,\n },\n contentContainer: {\n backgroundColor:\n customStyles?.backgroundColor ?? customStyles?.theme === \"dark\"\n ? DARK_MODE_BACKGROUND_COLOR\n : LIGHT_MODE_BACKGROUND_COLOR,\n justifyContent: \"center\",\n alignItems: \"center\",\n borderRadius: 20,\n padding: 20,\n ...customStyles?.contentContainer,\n },\n buttonContainer: {\n flexDirection: \"row\",\n marginTop: 25,\n ...customStyles?.buttonContainer,\n },\n button: {\n marginHorizontal: 12,\n paddingVertical: 10,\n paddingHorizontal: 20,\n borderWidth: 1,\n borderRadius: 10,\n fontSize: 16,\n overflow: \"hidden\",\n ...customStyles?.text,\n ...customStyles?.button,\n },\n cancelButton: {\n borderColor: \"gray\",\n color:\n customStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"gray\",\n backgroundColor:\n customStyles?.theme === \"dark\" ? \"gray\" : undefined,\n ...customStyles?.text,\n ...customStyles?.cancelButton,\n },\n confirmButton: {\n borderColor: \"green\",\n color:\n customStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"green\",\n backgroundColor:\n customStyles?.theme === \"dark\" ? \"green\" : undefined,\n ...customStyles?.text,\n ...customStyles?.confirmButton,\n },\n modalTitle: {\n fontSize: 24,\n fontWeight: \"bold\",\n marginBottom: 15,\n color:\n customStyles?.theme === \"dark\"\n ? DARK_MODE_TEXT_COLOR\n : LIGHT_MODE_TEXT_COLOR,\n ...customStyles?.text,\n ...customStyles?.modalTitle,\n },\n });\n"],"mappings":"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"}
@@ -11,9 +11,7 @@ const TimerPickerModal = /*#__PURE__*/forwardRef(({
11
11
  onCancel,
12
12
  onDurationChange,
13
13
  closeOnOverlayPress,
14
- initialHours = 0,
15
- initialMinutes = 0,
16
- initialSeconds = 0,
14
+ initialValue,
17
15
  hideHours = false,
18
16
  hideMinutes = false,
19
17
  hideSeconds = false,
@@ -51,33 +49,25 @@ const TimerPickerModal = /*#__PURE__*/forwardRef(({
51
49
  }, ref) => {
52
50
  const styles = generateStyles(customStyles);
53
51
  const timerPickerRef = useRef(null);
54
- const [selectedDuration, setSelectedDuration] = useState({
55
- hours: initialHours,
56
- minutes: initialMinutes,
57
- seconds: initialSeconds
58
- });
59
- const [confirmedDuration, setConfirmedDuration] = useState({
60
- hours: initialHours,
61
- minutes: initialMinutes,
62
- seconds: initialSeconds
63
- });
52
+ const safeInitialValue = {
53
+ hours: (initialValue === null || initialValue === void 0 ? void 0 : initialValue.hours) ?? 0,
54
+ minutes: (initialValue === null || initialValue === void 0 ? void 0 : initialValue.minutes) ?? 0,
55
+ seconds: (initialValue === null || initialValue === void 0 ? void 0 : initialValue.seconds) ?? 0
56
+ };
57
+ const [selectedDuration, setSelectedDuration] = useState(safeInitialValue);
58
+ const [confirmedDuration, setConfirmedDuration] = useState(safeInitialValue);
64
59
  const reset = options => {
65
60
  var _timerPickerRef$curre;
66
- const initialDuration = {
67
- hours: initialHours,
68
- minutes: initialMinutes,
69
- seconds: initialSeconds
70
- };
71
- setSelectedDuration(initialDuration);
72
- setConfirmedDuration(initialDuration);
61
+ setSelectedDuration(safeInitialValue);
62
+ setConfirmedDuration(safeInitialValue);
73
63
  (_timerPickerRef$curre = timerPickerRef.current) === null || _timerPickerRef$curre === void 0 || _timerPickerRef$curre.reset(options);
74
64
  };
75
65
 
76
- // reset state if the initial times change
66
+ // reset state if the initial value changes
77
67
  useEffect(() => {
78
68
  reset();
79
69
  // eslint-disable-next-line react-hooks/exhaustive-deps
80
- }, [initialHours, initialMinutes, initialSeconds]);
70
+ }, [safeInitialValue.hours, safeInitialValue.minutes, safeInitialValue.seconds]);
81
71
  const hideModalHandler = () => {
82
72
  setSelectedDuration({
83
73
  hours: confirmedDuration.hours,
@@ -139,9 +129,7 @@ const TimerPickerModal = /*#__PURE__*/forwardRef(({
139
129
  }), modalTitle) : null, /*#__PURE__*/React.createElement(TimerPicker, {
140
130
  ref: timerPickerRef,
141
131
  onDurationChange: durationChangeHandler,
142
- initialHours: confirmedDuration.hours,
143
- initialMinutes: confirmedDuration.minutes,
144
- initialSeconds: confirmedDuration.seconds,
132
+ initialValue: confirmedDuration,
145
133
  aggressivelyGetLatestDuration: true,
146
134
  hideHours: hideHours,
147
135
  hideMinutes: hideMinutes,
@@ -1 +1 @@
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","hoursPickerIsDisabled","minutesPickerIsDisabled","secondsPickerIsDisabled","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 hoursPickerIsDisabled = false,\n minutesPickerIsDisabled = false,\n secondsPickerIsDisabled = 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 hoursPickerIsDisabled={hoursPickerIsDisabled}\n minutesPickerIsDisabled={minutesPickerIsDisabled}\n secondsPickerIsDisabled={secondsPickerIsDisabled}\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
+ {"version":3,"names":["React","forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","View","Text","TouchableOpacity","TimerPicker","Modal","generateStyles","TimerPickerModal","visible","setIsVisible","onConfirm","onCancel","onDurationChange","closeOnOverlayPress","initialValue","hideHours","hideMinutes","hideSeconds","hoursPickerIsDisabled","minutesPickerIsDisabled","secondsPickerIsDisabled","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","safeInitialValue","hours","minutes","seconds","selectedDuration","setSelectedDuration","confirmedDuration","setConfirmedDuration","reset","options","_timerPickerRef$curre","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 initialValue,\n hideHours = false,\n hideMinutes = false,\n hideSeconds = false,\n hoursPickerIsDisabled = false,\n minutesPickerIsDisabled = false,\n secondsPickerIsDisabled = 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 safeInitialValue = {\n hours: initialValue?.hours ?? 0,\n minutes: initialValue?.minutes ?? 0,\n seconds: initialValue?.seconds ?? 0,\n };\n\n const [selectedDuration, setSelectedDuration] =\n useState(safeInitialValue);\n const [confirmedDuration, setConfirmedDuration] =\n useState(safeInitialValue);\n\n const reset = (options?: { animated?: boolean }) => {\n setSelectedDuration(safeInitialValue);\n setConfirmedDuration(safeInitialValue);\n timerPickerRef.current?.reset(options);\n };\n\n // reset state if the initial value changes\n useEffect(() => {\n reset();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n safeInitialValue.hours,\n safeInitialValue.minutes,\n safeInitialValue.seconds,\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,\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 initialValue={confirmedDuration}\n aggressivelyGetLatestDuration={true}\n hideHours={hideHours}\n hideMinutes={hideMinutes}\n hideSeconds={hideSeconds}\n hoursPickerIsDisabled={hoursPickerIsDisabled}\n minutesPickerIsDisabled={minutesPickerIsDisabled}\n secondsPickerIsDisabled={secondsPickerIsDisabled}\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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"}