react-native-timer-picker 2.5.0 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -13
- package/dist/commonjs/components/DurationScroll/DurationScroll.js +39 -18
- package/dist/commonjs/components/DurationScroll/DurationScroll.js.map +1 -1
- package/dist/commonjs/components/DurationScroll/types.js.map +1 -1
- package/dist/commonjs/components/Modal/Modal.js +10 -10
- package/dist/commonjs/components/Modal/Modal.js.map +1 -1
- package/dist/commonjs/components/Modal/styles.js +5 -5
- package/dist/commonjs/components/Modal/styles.js.map +1 -1
- package/dist/commonjs/components/Modal/types.js.map +1 -1
- package/dist/commonjs/components/PickerItem/PickerItem.js +2 -1
- package/dist/commonjs/components/PickerItem/PickerItem.js.map +1 -1
- package/dist/commonjs/components/TimerPicker/TimerPicker.js +47 -21
- package/dist/commonjs/components/TimerPicker/TimerPicker.js.map +1 -1
- package/dist/commonjs/components/TimerPicker/index.js.map +1 -1
- package/dist/commonjs/components/TimerPicker/styles.js +79 -69
- package/dist/commonjs/components/TimerPicker/styles.js.map +1 -1
- package/dist/commonjs/components/TimerPicker/types.js.map +1 -1
- package/dist/commonjs/components/TimerPickerModal/TimerPickerModal.js +34 -14
- package/dist/commonjs/components/TimerPickerModal/TimerPickerModal.js.map +1 -1
- package/dist/commonjs/components/TimerPickerModal/styles.js +34 -28
- package/dist/commonjs/components/TimerPickerModal/styles.js.map +1 -1
- package/dist/commonjs/components/TimerPickerModal/types.js.map +1 -1
- package/dist/commonjs/index.js +3 -39
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/tests/DurationScroll.test.js +8 -8
- package/dist/commonjs/tests/DurationScroll.test.js.map +1 -1
- package/dist/commonjs/tests/Modal.test.js.map +1 -1
- package/dist/commonjs/tests/TimerPicker.test.js +1 -9
- package/dist/commonjs/tests/TimerPicker.test.js.map +1 -1
- package/dist/commonjs/tests/TimerPickerModal.test.js +3 -3
- package/dist/commonjs/tests/TimerPickerModal.test.js.map +1 -1
- package/dist/commonjs/tests/colorToRgba.test.js.map +1 -1
- package/dist/commonjs/tests/generateNumbers.test.js +63 -63
- package/dist/commonjs/tests/generateNumbers.test.js.map +1 -1
- package/dist/commonjs/tests/getAdjustedLimit.test.js +38 -38
- package/dist/commonjs/tests/getAdjustedLimit.test.js.map +1 -1
- package/dist/commonjs/tests/getDurationAndIndexFromScrollOffset.test.js.map +1 -1
- package/dist/commonjs/tests/getInitialScrollIndex.test.js.map +1 -1
- package/dist/commonjs/tests/getSafeInitialValue.test.js +2 -0
- package/dist/commonjs/tests/getSafeInitialValue.test.js.map +1 -1
- package/dist/commonjs/tests/padNumber.test.js.map +1 -1
- package/dist/commonjs/utils/colorToRgba.js +4 -4
- package/dist/commonjs/utils/colorToRgba.js.map +1 -1
- package/dist/commonjs/utils/generateNumbers.js.map +1 -1
- package/dist/commonjs/utils/getAdjustedLimit.js.map +1 -1
- package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js.map +1 -1
- package/dist/commonjs/utils/getInitialScrollIndex.js +4 -4
- package/dist/commonjs/utils/getInitialScrollIndex.js.map +1 -1
- package/dist/commonjs/utils/getSafeInitialValue.js +5 -5
- package/dist/commonjs/utils/getSafeInitialValue.js.map +1 -1
- package/dist/commonjs/utils/padNumber.js.map +1 -1
- package/dist/module/components/DurationScroll/DurationScroll.js +39 -18
- package/dist/module/components/DurationScroll/DurationScroll.js.map +1 -1
- package/dist/module/components/DurationScroll/types.js.map +1 -1
- package/dist/module/components/Modal/Modal.js +10 -10
- package/dist/module/components/Modal/Modal.js.map +1 -1
- package/dist/module/components/Modal/styles.js +5 -5
- package/dist/module/components/Modal/styles.js.map +1 -1
- package/dist/module/components/Modal/types.js.map +1 -1
- package/dist/module/components/PickerItem/PickerItem.js +2 -1
- package/dist/module/components/PickerItem/PickerItem.js.map +1 -1
- package/dist/module/components/TimerPicker/TimerPicker.js +47 -21
- package/dist/module/components/TimerPicker/TimerPicker.js.map +1 -1
- package/dist/module/components/TimerPicker/index.js.map +1 -1
- package/dist/module/components/TimerPicker/styles.js +79 -69
- package/dist/module/components/TimerPicker/styles.js.map +1 -1
- package/dist/module/components/TimerPicker/types.js.map +1 -1
- package/dist/module/components/TimerPickerModal/TimerPickerModal.js +35 -15
- package/dist/module/components/TimerPickerModal/TimerPickerModal.js.map +1 -1
- package/dist/module/components/TimerPickerModal/styles.js +33 -27
- package/dist/module/components/TimerPickerModal/styles.js.map +1 -1
- package/dist/module/components/TimerPickerModal/types.js.map +1 -1
- package/dist/module/index.js +2 -2
- package/dist/module/index.js.map +1 -1
- package/dist/module/tests/DurationScroll.test.js +8 -8
- package/dist/module/tests/DurationScroll.test.js.map +1 -1
- package/dist/module/tests/Modal.test.js.map +1 -1
- package/dist/module/tests/TimerPicker.test.js +1 -8
- package/dist/module/tests/TimerPicker.test.js.map +1 -1
- package/dist/module/tests/TimerPickerModal.test.js +3 -3
- package/dist/module/tests/TimerPickerModal.test.js.map +1 -1
- package/dist/module/tests/colorToRgba.test.js.map +1 -1
- package/dist/module/tests/generateNumbers.test.js +63 -63
- package/dist/module/tests/generateNumbers.test.js.map +1 -1
- package/dist/module/tests/getAdjustedLimit.test.js +38 -38
- package/dist/module/tests/getAdjustedLimit.test.js.map +1 -1
- package/dist/module/tests/getDurationAndIndexFromScrollOffset.test.js.map +1 -1
- package/dist/module/tests/getInitialScrollIndex.test.js.map +1 -1
- package/dist/module/tests/getSafeInitialValue.test.js +1 -0
- package/dist/module/tests/getSafeInitialValue.test.js.map +1 -1
- package/dist/module/tests/padNumber.test.js.map +1 -1
- package/dist/module/utils/colorToRgba.js +4 -4
- package/dist/module/utils/colorToRgba.js.map +1 -1
- package/dist/module/utils/generateNumbers.js.map +1 -1
- package/dist/module/utils/getAdjustedLimit.js.map +1 -1
- package/dist/module/utils/getDurationAndIndexFromScrollOffset.js.map +1 -1
- package/dist/module/utils/getInitialScrollIndex.js +4 -4
- package/dist/module/utils/getInitialScrollIndex.js.map +1 -1
- package/dist/module/utils/getSafeInitialValue.js +5 -5
- package/dist/module/utils/getSafeInitialValue.js.map +1 -1
- package/dist/module/utils/padNumber.js.map +1 -1
- package/dist/typescript/components/DurationScroll/types.d.ts +9 -6
- package/dist/typescript/components/Modal/styles.d.ts +5 -5
- package/dist/typescript/components/Modal/types.d.ts +2 -1
- package/dist/typescript/components/PickerItem/PickerItem.d.ts +4 -0
- package/dist/typescript/components/TimerPicker/styles.d.ts +230 -225
- package/dist/typescript/components/TimerPicker/types.d.ts +9 -8
- package/dist/typescript/components/TimerPickerModal/styles.d.ts +158 -154
- package/dist/typescript/components/TimerPickerModal/types.d.ts +2 -1
- package/dist/typescript/index.d.ts +4 -2
- package/dist/typescript/tests/DurationScroll.test.d.ts +1 -0
- package/dist/typescript/tests/Modal.test.d.ts +1 -0
- package/dist/typescript/tests/TimerPicker.test.d.ts +1 -0
- package/dist/typescript/tests/TimerPickerModal.test.d.ts +1 -0
- package/dist/typescript/tests/colorToRgba.test.d.ts +1 -0
- package/dist/typescript/tests/generateNumbers.test.d.ts +1 -0
- package/dist/typescript/tests/getAdjustedLimit.test.d.ts +1 -0
- package/dist/typescript/tests/getDurationAndIndexFromScrollOffset.test.d.ts +1 -0
- package/dist/typescript/tests/getInitialScrollIndex.test.d.ts +1 -0
- package/dist/typescript/tests/getSafeInitialValue.test.d.ts +1 -0
- package/dist/typescript/tests/padNumber.test.d.ts +1 -0
- package/package.json +144 -126
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["padNumber","value","options","padWithZero","String","exports"],"sources":["padNumber.ts"],"sourcesContent":["/**\n * Formats a number by optionally padding it with a leading zero or space.\n * Numbers less than 10 are padded based on the options provided.\n *\n * @param {number} value - The number to format\n * @param {Object} [options] - Optional formatting options\n * @param {boolean} [options.padWithZero] - Whether to pad with zero (true) or space (false)\n *\n * @returns {string} The formatted number string\n *\n * @example\n * // Pad with zero\n * padNumber(5, { padWithZero: true })\n * // Returns: '05'\n *\n * @example\n * // Pad with figure space (same width as zero)\n * padNumber(5, { padWithZero: false })\n * // Returns: ' 5'\n *\n * @example\n * // No padding needed\n * padNumber(15)\n * // Returns: '15'\n */\nexport const padNumber = (
|
|
1
|
+
{"version":3,"names":["padNumber","value","options","padWithZero","String","exports"],"sources":["padNumber.ts"],"sourcesContent":["/**\n * Formats a number by optionally padding it with a leading zero or space.\n * Numbers less than 10 are padded based on the options provided.\n *\n * @param {number} value - The number to format\n * @param {Object} [options] - Optional formatting options\n * @param {boolean} [options.padWithZero] - Whether to pad with zero (true) or space (false)\n *\n * @returns {string} The formatted number string\n *\n * @example\n * // Pad with zero\n * padNumber(5, { padWithZero: true })\n * // Returns: '05'\n *\n * @example\n * // Pad with figure space (same width as zero)\n * padNumber(5, { padWithZero: false })\n * // Returns: ' 5'\n *\n * @example\n * // No padding needed\n * padNumber(15)\n * // Returns: '15'\n */\nexport const padNumber = (value: number, options?: { padWithZero?: boolean }): string => {\n if (value < 10) {\n return (options?.padWithZero ? \"0\" : \"\\u2007\") + value;\n } else {\n return String(value);\n }\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,SAAS,GAAGA,CAACC,KAAa,EAAEC,OAAmC,KAAa;EACvF,IAAID,KAAK,GAAG,EAAE,EAAE;IACd,OAAO,CAACC,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEC,WAAW,GAAG,GAAG,GAAG,QAAQ,IAAIF,KAAK;EACxD,CAAC,MAAM;IACL,OAAOG,MAAM,CAACH,KAAK,CAAC;EACtB;AACF,CAAC;AAACI,OAAA,CAAAL,SAAA,GAAAA,SAAA","ignoreList":[]}
|
|
@@ -32,8 +32,10 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
32
32
|
onDurationChange,
|
|
33
33
|
padNumbersWithZero = false,
|
|
34
34
|
padWithNItems,
|
|
35
|
+
pickerColumnWidth,
|
|
35
36
|
pickerFeedback,
|
|
36
37
|
pickerGradientOverlayProps,
|
|
38
|
+
pickerLabelGap,
|
|
37
39
|
pmLabel,
|
|
38
40
|
repeatNumbersNTimes = 3,
|
|
39
41
|
repeatNumbersNTimesNotExplicitlySet,
|
|
@@ -41,6 +43,21 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
41
43
|
styles,
|
|
42
44
|
testID
|
|
43
45
|
} = props;
|
|
46
|
+
const labelPositionStyle = useMemo(() => {
|
|
47
|
+
// When the style already has an explicit `left` (from legacy percentage system or
|
|
48
|
+
// user override), don't apply pixel-based positioning.
|
|
49
|
+
if (styles.pickerLabelContainer.left != null) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
const gap = pickerLabelGap ?? 6;
|
|
53
|
+
const fontSize = styles.pickerItem.fontSize ?? 25;
|
|
54
|
+
const maxDigitCount = Math.max(2, String(maximumValue).length);
|
|
55
|
+
const halfNumberWidth = maxDigitCount * fontSize * 0.55 / 2;
|
|
56
|
+
return {
|
|
57
|
+
left: "50%",
|
|
58
|
+
marginLeft: halfNumberWidth + gap
|
|
59
|
+
};
|
|
60
|
+
}, [maximumValue, pickerLabelGap, styles.pickerItem.fontSize, styles.pickerLabelContainer.left]);
|
|
44
61
|
const numberOfItems = useMemo(() => {
|
|
45
62
|
// guard against negative maximum values
|
|
46
63
|
if (maximumValue < 0) {
|
|
@@ -70,19 +87,19 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
70
87
|
const numbersForFlatList = useMemo(() => {
|
|
71
88
|
if (is12HourPicker) {
|
|
72
89
|
return generate12HourNumbers({
|
|
73
|
-
padNumbersWithZero,
|
|
74
|
-
repeatNTimes: safeRepeatNumbersNTimes,
|
|
75
90
|
disableInfiniteScroll,
|
|
91
|
+
interval,
|
|
92
|
+
padNumbersWithZero,
|
|
76
93
|
padWithNItems,
|
|
77
|
-
|
|
94
|
+
repeatNTimes: safeRepeatNumbersNTimes
|
|
78
95
|
});
|
|
79
96
|
}
|
|
80
97
|
return generateNumbers(numberOfItems, {
|
|
81
|
-
padNumbersWithZero,
|
|
82
|
-
repeatNTimes: safeRepeatNumbersNTimes,
|
|
83
98
|
disableInfiniteScroll,
|
|
99
|
+
interval,
|
|
100
|
+
padNumbersWithZero,
|
|
84
101
|
padWithNItems,
|
|
85
|
-
|
|
102
|
+
repeatNTimes: safeRepeatNumbersNTimes
|
|
86
103
|
});
|
|
87
104
|
}, [disableInfiniteScroll, is12HourPicker, interval, numberOfItems, padNumbersWithZero, padWithNItems, safeRepeatNumbersNTimes]);
|
|
88
105
|
const initialScrollIndex = useMemo(() => getInitialScrollIndex({
|
|
@@ -152,10 +169,11 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
152
169
|
amLabel: amLabel,
|
|
153
170
|
is12HourPicker: is12HourPicker,
|
|
154
171
|
item: item,
|
|
172
|
+
pickerAmPmPositionStyle: labelPositionStyle,
|
|
155
173
|
pmLabel: pmLabel,
|
|
156
174
|
selectedValue: selectedValue,
|
|
157
175
|
styles: styles
|
|
158
|
-
}), [adjustedLimited.max, adjustedLimited.min, allowFontScaling, amLabel, is12HourPicker, pmLabel, selectedValue, styles]);
|
|
176
|
+
}), [adjustedLimited.max, adjustedLimited.min, allowFontScaling, amLabel, is12HourPicker, labelPositionStyle, pmLabel, selectedValue, styles]);
|
|
159
177
|
const onScroll = useCallback(e => {
|
|
160
178
|
// this function is only used when the picker is in a modal and/or has Haptic/Audio feedback
|
|
161
179
|
// it is used to ensure that the modal gets the latest duration on clicking
|
|
@@ -270,10 +288,10 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
270
288
|
}
|
|
271
289
|
}, [numberOfItems, safeRepeatNumbersNTimes]);
|
|
272
290
|
const [viewabilityConfigCallbackPairs, setViewabilityConfigCallbackPairs] = useState(!disableInfiniteScroll ? [{
|
|
291
|
+
onViewableItemsChanged: onViewableItemsChanged,
|
|
273
292
|
viewabilityConfig: {
|
|
274
293
|
viewAreaCoveragePercentThreshold: 0
|
|
275
|
-
}
|
|
276
|
-
onViewableItemsChanged: onViewableItemsChanged
|
|
294
|
+
}
|
|
277
295
|
}] : undefined);
|
|
278
296
|
const [flatListRenderKey, setFlatListRenderKey] = useState(0);
|
|
279
297
|
const initialRender = useRef(true);
|
|
@@ -288,18 +306,19 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
288
306
|
// which requires the FlatList to be remounted, hence the increase of the FlatList key
|
|
289
307
|
setFlatListRenderKey(prev => prev + 1);
|
|
290
308
|
setViewabilityConfigCallbackPairs(!disableInfiniteScroll ? [{
|
|
309
|
+
onViewableItemsChanged: onViewableItemsChanged,
|
|
291
310
|
viewabilityConfig: {
|
|
292
311
|
viewAreaCoveragePercentThreshold: 0
|
|
293
|
-
}
|
|
294
|
-
onViewableItemsChanged: onViewableItemsChanged
|
|
312
|
+
}
|
|
295
313
|
}] : undefined);
|
|
296
314
|
}, [disableInfiniteScroll, onViewableItemsChanged]);
|
|
297
315
|
const getItemLayout = useCallback((_, index) => ({
|
|
316
|
+
index,
|
|
298
317
|
length: styles.pickerItemContainer.height,
|
|
299
|
-
offset: styles.pickerItemContainer.height * index
|
|
300
|
-
index
|
|
318
|
+
offset: styles.pickerItemContainer.height * index
|
|
301
319
|
}), [styles.pickerItemContainer.height]);
|
|
302
320
|
useImperativeHandle(ref, () => ({
|
|
321
|
+
latestDuration: latestDuration,
|
|
303
322
|
reset: options => {
|
|
304
323
|
var _flatListRef$current5;
|
|
305
324
|
(_flatListRef$current5 = flatListRef.current) === null || _flatListRef$current5 === void 0 || _flatListRef$current5.scrollToIndex({
|
|
@@ -320,8 +339,7 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
320
339
|
value: value
|
|
321
340
|
})
|
|
322
341
|
});
|
|
323
|
-
}
|
|
324
|
-
latestDuration: latestDuration
|
|
342
|
+
}
|
|
325
343
|
}));
|
|
326
344
|
const renderContent = useMemo(() => {
|
|
327
345
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FlatList, {
|
|
@@ -350,12 +368,12 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
350
368
|
windowSize: numberOfItemsToShow
|
|
351
369
|
}), /*#__PURE__*/React.createElement(View, {
|
|
352
370
|
pointerEvents: "none",
|
|
353
|
-
style: styles.pickerLabelContainer
|
|
371
|
+
style: [styles.pickerLabelContainer, labelPositionStyle]
|
|
354
372
|
}, typeof label === "string" ? /*#__PURE__*/React.createElement(Text, {
|
|
355
373
|
allowFontScaling: allowFontScaling,
|
|
356
374
|
style: styles.pickerLabel
|
|
357
375
|
}, label) : label ?? null));
|
|
358
|
-
}, [FlatList, allowFontScaling, decelerationRate, flatListRenderKey, getItemLayout, initialScrollIndex, isDisabled, label, numberOfItemsToShow, numbersForFlatList, onMomentumScrollEnd, onScroll, renderItem, styles.durationScrollFlatList, styles.durationScrollFlatListContentContainer, styles.pickerItemContainer.height, styles.pickerLabel, styles.pickerLabelContainer, viewabilityConfigCallbackPairs]);
|
|
376
|
+
}, [FlatList, allowFontScaling, decelerationRate, flatListRenderKey, getItemLayout, initialScrollIndex, isDisabled, label, labelPositionStyle, numberOfItemsToShow, numbersForFlatList, onMomentumScrollEnd, onScroll, renderItem, styles.durationScrollFlatList, styles.durationScrollFlatListContentContainer, styles.pickerItemContainer.height, styles.pickerLabel, styles.pickerLabelContainer, viewabilityConfigCallbackPairs]);
|
|
359
377
|
const renderLinearGradient = useMemo(() => {
|
|
360
378
|
if (!LinearGradient) {
|
|
361
379
|
return null;
|
|
@@ -384,7 +402,10 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
384
402
|
}, [LinearGradient, MaskedView, padWithNItems, pickerGradientOverlayProps, styles.pickerContainer.backgroundColor, styles.pickerGradientOverlay]);
|
|
385
403
|
return /*#__PURE__*/React.createElement(View, {
|
|
386
404
|
pointerEvents: isDisabled ? "none" : undefined,
|
|
387
|
-
style: [styles.durationScrollFlatListContainer, {
|
|
405
|
+
style: [styles.durationScrollFlatListContainer, pickerColumnWidth != null && {
|
|
406
|
+
flex: 0,
|
|
407
|
+
width: pickerColumnWidth
|
|
408
|
+
}, {
|
|
388
409
|
height: styles.pickerItemContainer.height * numberOfItemsToShow
|
|
389
410
|
}, isDisabled && styles.disabledPickerContainer],
|
|
390
411
|
testID: testID
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useRef","useCallback","forwardRef","useImperativeHandle","useState","useEffect","useMemo","View","Text","FlatList","RNFlatList","colorToRgba","generate12HourNumbers","generateNumbers","getAdjustedLimit","getDurationAndIndexFromScrollOffset","getInitialScrollIndex","PickerItem","keyExtractor","item","index","toString","DurationScroll","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","clickSoundAsset","decelerationRate","disableInfiniteScroll","Haptics","initialValue","interval","is12HourPicker","isDisabled","label","limit","LinearGradient","MaskedView","maximumValue","onDurationChange","padNumbersWithZero","padWithNItems","pickerFeedback","pickerGradientOverlayProps","pmLabel","repeatNumbersNTimes","repeatNumbersNTimesNotExplicitlySet","selectedValue","styles","testID","numberOfItems","Math","floor","safeRepeatNumbersNTimes","isNaN","max","round","numbersForFlatList","repeatNTimes","initialScrollIndex","value","adjustedLimited","numberOfItemsToShow","latestDuration","lastFeedbackIndex","flatListRef","clickSound","setClickSound","soundInstance","loadSound","sound","newSound","Sound","createAsync","uri","shouldPlay","error","console","warn","_soundInstance","unloadAsync","playClickSound","replayAsync","renderItem","createElement","adjustedLimitedMax","adjustedLimitedMin","min","onScroll","e","newValues","itemHeight","pickerItemContainer","height","yContentOffset","nativeEvent","contentOffset","y","duration","current","feedbackIndex","selectionAsync","onMomentumScrollEnd","_flatListRef$current","targetScrollIndex","scrollToIndex","animated","_flatListRef$current2","length","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current3","_flatListRef$current4","viewabilityConfigCallbackPairs","setViewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","undefined","flatListRenderKey","setFlatListRenderKey","initialRender","prev","getItemLayout","_","offset","reset","options","_flatListRef$current5","setValue","_flatListRef$current6","renderContent","Fragment","key","contentContainerStyle","durationScrollFlatListContentContainer","data","nestedScrollEnabled","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","i","style","durationScrollFlatList","windowSize","pointerEvents","pickerLabelContainer","pickerLabel","renderLinearGradient","colors","backgroundColor","pickerContainer","transparentBackgroundColor","color","opacity","gradientHeight","_extends","locations","pickerGradientOverlay","durationScrollFlatListContainer","disabledPickerContainer","maskElement","maskedView","memo"],"sources":["DurationScroll.tsx"],"sourcesContent":["import React, {\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useState,\n useEffect,\n useMemo,\n} from \"react\";\n\nimport { View, Text, FlatList as RNFlatList } from \"react-native\";\nimport type {\n ViewabilityConfigCallbackPairs,\n FlatListProps,\n} from \"react-native\";\n\nimport { colorToRgba } from \"../../utils/colorToRgba\";\nimport {\n generate12HourNumbers,\n generateNumbers,\n} from \"../../utils/generateNumbers\";\nimport { getAdjustedLimit } from \"../../utils/getAdjustedLimit\";\nimport { getDurationAndIndexFromScrollOffset } from \"../../utils/getDurationAndIndexFromScrollOffset\";\nimport { getInitialScrollIndex } from \"../../utils/getInitialScrollIndex\";\nimport PickerItem from \"../PickerItem\";\n\nimport type {\n DurationScrollProps,\n DurationScrollRef,\n ExpoAvAudioInstance,\n} from \"./types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst keyExtractor = (item: any, index: number) => index.toString();\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(\n (props, ref) => {\n const {\n aggressivelyGetLatestDuration,\n allowFontScaling = false,\n amLabel,\n Audio,\n clickSoundAsset,\n decelerationRate = 0.88,\n disableInfiniteScroll = false,\n FlatList = RNFlatList,\n Haptics,\n initialValue = 0,\n interval,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n MaskedView,\n maximumValue,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerFeedback,\n pickerGradientOverlayProps,\n pmLabel,\n repeatNumbersNTimes = 3,\n repeatNumbersNTimesNotExplicitlySet,\n selectedValue,\n styles,\n testID,\n } = props;\n\n const numberOfItems = useMemo(() => {\n // guard against negative maximum values\n if (maximumValue < 0) {\n return 1;\n }\n\n return Math.floor(maximumValue / interval) + 1;\n }, [interval, maximumValue]);\n\n const safeRepeatNumbersNTimes = useMemo(() => {\n // do not repeat numbers if there is only one option\n if (numberOfItems === 1) {\n return 1;\n }\n\n if (!disableInfiniteScroll && repeatNumbersNTimes < 2) {\n return 2;\n } else if (repeatNumbersNTimes < 1 || isNaN(repeatNumbersNTimes)) {\n return 1;\n }\n\n // if this variable is not explicitly set, we calculate a reasonable value based on\n // the number of items in the picker, avoiding regular jumps up/down the list\n // whilst avoiding rendering too many items in the picker\n if (repeatNumbersNTimesNotExplicitlySet) {\n return Math.max(Math.round(180 / numberOfItems), 1);\n }\n\n return Math.round(repeatNumbersNTimes);\n }, [\n disableInfiniteScroll,\n numberOfItems,\n repeatNumbersNTimes,\n repeatNumbersNTimesNotExplicitlySet,\n ]);\n\n const numbersForFlatList = useMemo(() => {\n if (is12HourPicker) {\n return generate12HourNumbers({\n padNumbersWithZero,\n repeatNTimes: safeRepeatNumbersNTimes,\n disableInfiniteScroll,\n padWithNItems,\n interval,\n });\n }\n\n return generateNumbers(numberOfItems, {\n padNumbersWithZero,\n repeatNTimes: safeRepeatNumbersNTimes,\n disableInfiniteScroll,\n padWithNItems,\n interval,\n });\n }, [\n disableInfiniteScroll,\n is12HourPicker,\n interval,\n numberOfItems,\n padNumbersWithZero,\n padWithNItems,\n safeRepeatNumbersNTimes,\n ]);\n\n const initialScrollIndex = useMemo(\n () =>\n getInitialScrollIndex({\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes: safeRepeatNumbersNTimes,\n value: initialValue,\n }),\n [\n disableInfiniteScroll,\n initialValue,\n interval,\n numberOfItems,\n padWithNItems,\n safeRepeatNumbersNTimes,\n ]\n );\n\n const adjustedLimited = useMemo(\n () => getAdjustedLimit(limit, numberOfItems, interval),\n [interval, limit, numberOfItems]\n );\n\n const numberOfItemsToShow = 1 + padWithNItems * 2;\n\n // keep track of the latest duration as it scrolls\n const latestDuration = useRef(0);\n // keep track of the last index scrolled past for haptic/audio feedback\n const lastFeedbackIndex = useRef(0);\n\n const flatListRef = useRef<RNFlatList | null>(null);\n\n const [clickSound, setClickSound] =\n useState<ExpoAvAudioInstance | null>(null);\n\n useEffect(() => {\n // Audio prop deprecated in v2.2.0 (use pickerFeedback instead) - will be removed in a future version\n\n // preload the sound when the component mounts\n let soundInstance: ExpoAvAudioInstance | null = null;\n\n const loadSound = async () => {\n if (!Audio) {\n return;\n }\n\n try {\n const { sound: newSound } = await Audio.Sound.createAsync(\n clickSoundAsset ?? {\n // use a hosted sound as a fallback (do not use local asset due to loader issues\n // in some environments when including mp3 in library)\n uri: \"https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I\",\n },\n { shouldPlay: false }\n );\n soundInstance = newSound;\n setClickSound(newSound);\n } catch (error) {\n console.warn(\"Failed to load click sound:\", error);\n }\n };\n\n loadSound();\n\n return () => {\n // unload sound when component unmounts\n soundInstance?.unloadAsync();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [Audio]);\n\n const playClickSound = useCallback(async () => {\n if (!clickSound) return;\n\n try {\n await clickSound.replayAsync();\n } catch (error) {\n console.warn(\"Failed to play click sound:\", error);\n }\n }, [clickSound]);\n\n const renderItem = useCallback<\n NonNullable<FlatListProps<string>[\"renderItem\"]>\n >(\n ({ item }) => (\n <PickerItem\n adjustedLimitedMax={adjustedLimited.max}\n adjustedLimitedMin={adjustedLimited.min}\n allowFontScaling={allowFontScaling}\n amLabel={amLabel}\n is12HourPicker={is12HourPicker}\n item={item}\n pmLabel={pmLabel}\n selectedValue={selectedValue}\n styles={styles}\n />\n ),\n [\n adjustedLimited.max,\n adjustedLimited.min,\n allowFontScaling,\n amLabel,\n is12HourPicker,\n pmLabel,\n selectedValue,\n styles,\n ]\n );\n\n const onScroll = useCallback<\n NonNullable<FlatListProps<string>[\"onScroll\"]>\n >(\n (e) => {\n // this function is only used when the picker is in a modal and/or has Haptic/Audio feedback\n // it is used to ensure that the modal gets the latest duration on clicking\n // the confirm button, even if the scrollview is still scrolling\n if (\n !aggressivelyGetLatestDuration &&\n !Haptics &&\n !Audio &&\n !pickerFeedback\n ) {\n return;\n }\n\n if (aggressivelyGetLatestDuration) {\n const newValues = getDurationAndIndexFromScrollOffset({\n disableInfiniteScroll,\n interval,\n itemHeight: styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n yContentOffset: e.nativeEvent.contentOffset.y,\n });\n\n if (newValues.duration !== latestDuration.current) {\n // check limits\n if (newValues.duration > adjustedLimited.max) {\n newValues.duration = adjustedLimited.max;\n } else if (newValues.duration < adjustedLimited.min) {\n newValues.duration = adjustedLimited.min;\n }\n\n latestDuration.current = newValues.duration;\n }\n }\n\n if (pickerFeedback || Haptics || Audio) {\n const feedbackIndex = Math.round(\n (e.nativeEvent.contentOffset.y +\n styles.pickerItemContainer.height / 2) /\n styles.pickerItemContainer.height\n );\n\n if (feedbackIndex !== lastFeedbackIndex.current) {\n // this check stops the feedback firing when the component mounts\n if (lastFeedbackIndex.current) {\n // fire haptic feedback if available\n try {\n Haptics?.selectionAsync();\n } catch {\n // do nothing\n }\n\n // play click sound if available\n try {\n playClickSound();\n } catch {\n // do nothing\n }\n\n // fire custom feedback if available\n try {\n pickerFeedback?.();\n } catch {\n // do nothing\n }\n }\n\n lastFeedbackIndex.current = feedbackIndex;\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n adjustedLimited.max,\n adjustedLimited.min,\n aggressivelyGetLatestDuration,\n playClickSound,\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback<\n NonNullable<FlatListProps<string>[\"onMomentumScrollEnd\"]>\n >(\n (e) => {\n const newValues = getDurationAndIndexFromScrollOffset({\n disableInfiniteScroll,\n interval,\n itemHeight: styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n yContentOffset: e.nativeEvent.contentOffset.y,\n });\n\n // check limits\n if (newValues.duration > adjustedLimited.max) {\n const targetScrollIndex =\n newValues.index -\n (newValues.duration - adjustedLimited.max);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex >= 0\n ? targetScrollIndex\n : adjustedLimited.max - 1,\n }); // scroll down to max\n newValues.duration = adjustedLimited.max;\n } else if (newValues.duration < adjustedLimited.min) {\n const targetScrollIndex =\n newValues.index +\n (adjustedLimited.min - newValues.duration);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex <= numbersForFlatList.length - 1\n ? targetScrollIndex\n : adjustedLimited.min,\n }); // scroll up to min\n newValues.duration = adjustedLimited.min;\n }\n\n onDurationChange(newValues.duration);\n },\n [\n disableInfiniteScroll,\n interval,\n styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n adjustedLimited.max,\n adjustedLimited.min,\n onDurationChange,\n numbersForFlatList.length,\n ]\n );\n\n const onViewableItemsChanged = useCallback<\n NonNullable<FlatListProps<string>[\"onViewableItemsChanged\"]>\n >(\n ({ viewableItems }) => {\n if (numberOfItems === 1) {\n return;\n }\n\n if (\n viewableItems[0]?.index &&\n viewableItems[0].index < numberOfItems * 0.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index + numberOfItems,\n });\n } else if (\n viewableItems[0]?.index &&\n viewableItems[0].index >=\n numberOfItems * (safeRepeatNumbersNTimes - 0.5)\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index - numberOfItems,\n });\n }\n },\n [numberOfItems, safeRepeatNumbersNTimes]\n );\n\n const [\n viewabilityConfigCallbackPairs,\n setViewabilityConfigCallbackPairs,\n ] = useState<ViewabilityConfigCallbackPairs | undefined>(\n !disableInfiniteScroll\n ? [\n {\n viewabilityConfig: {\n viewAreaCoveragePercentThreshold: 0,\n },\n onViewableItemsChanged: onViewableItemsChanged,\n },\n ]\n : undefined\n );\n\n const [flatListRenderKey, setFlatListRenderKey] = useState(0);\n\n const initialRender = useRef(true);\n\n useEffect(() => {\n // don't run on first render\n if (initialRender.current) {\n initialRender.current = false;\n return;\n }\n\n // if the onViewableItemsChanged callback changes, we need to update viewabilityConfigCallbackPairs\n // which requires the FlatList to be remounted, hence the increase of the FlatList key\n setFlatListRenderKey((prev) => prev + 1);\n setViewabilityConfigCallbackPairs(\n !disableInfiniteScroll\n ? [\n {\n viewabilityConfig: {\n viewAreaCoveragePercentThreshold: 0,\n },\n onViewableItemsChanged: onViewableItemsChanged,\n },\n ]\n : undefined\n );\n }, [disableInfiniteScroll, onViewableItemsChanged]);\n\n const getItemLayout = useCallback<\n NonNullable<FlatListProps<string>[\"getItemLayout\"]>\n >(\n (_, index) => ({\n length: styles.pickerItemContainer.height,\n offset: styles.pickerItemContainer.height * index,\n index,\n }),\n [styles.pickerItemContainer.height]\n );\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: initialScrollIndex,\n });\n },\n setValue: (value, options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: getInitialScrollIndex({\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes: safeRepeatNumbersNTimes,\n value: value,\n }),\n });\n },\n latestDuration: latestDuration,\n }));\n\n const renderContent = useMemo(() => {\n return (\n <>\n <FlatList\n key={flatListRenderKey}\n ref={flatListRef}\n contentContainerStyle={\n styles.durationScrollFlatListContentContainer\n }\n data={numbersForFlatList}\n decelerationRate={decelerationRate}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={keyExtractor}\n nestedScrollEnabled\n onMomentumScrollEnd={onMomentumScrollEnd}\n onScroll={onScroll}\n renderItem={renderItem}\n scrollEnabled={!isDisabled}\n scrollEventThrottle={16}\n showsVerticalScrollIndicator={false}\n snapToAlignment=\"start\"\n // used in place of snapToInterval due to bug on Android\n snapToOffsets={[\n ...Array(numbersForFlatList.length),\n ].map((_, i) => i * styles.pickerItemContainer.height)}\n style={styles.durationScrollFlatList}\n testID=\"duration-scroll-flatlist\"\n viewabilityConfigCallbackPairs={\n viewabilityConfigCallbackPairs\n }\n windowSize={numberOfItemsToShow}\n />\n <View\n pointerEvents=\"none\"\n style={styles.pickerLabelContainer}>\n {typeof label === \"string\" ? (\n <Text\n allowFontScaling={allowFontScaling}\n style={styles.pickerLabel}>\n {label}\n </Text>\n ) : (\n label ?? null\n )}\n </View>\n </>\n );\n }, [\n FlatList,\n allowFontScaling,\n decelerationRate,\n flatListRenderKey,\n getItemLayout,\n initialScrollIndex,\n isDisabled,\n label,\n numberOfItemsToShow,\n numbersForFlatList,\n onMomentumScrollEnd,\n onScroll,\n renderItem,\n styles.durationScrollFlatList,\n styles.durationScrollFlatListContentContainer,\n styles.pickerItemContainer.height,\n styles.pickerLabel,\n styles.pickerLabelContainer,\n viewabilityConfigCallbackPairs,\n ]);\n\n const renderLinearGradient = useMemo(() => {\n if (!LinearGradient) {\n return null;\n }\n\n let colors: string[];\n\n if (MaskedView) {\n // if using masked view, we only care about the opacity\n colors = [\n \"rgba(0,0,0,0)\",\n \"rgba(0,0,0,1)\",\n \"rgba(0,0,0,1)\",\n \"rgba(0,0,0,0)\",\n ];\n } else {\n const backgroundColor =\n styles.pickerContainer.backgroundColor ?? \"white\";\n const transparentBackgroundColor = colorToRgba({\n color: backgroundColor,\n opacity: 0,\n });\n colors = [\n backgroundColor,\n transparentBackgroundColor,\n transparentBackgroundColor,\n backgroundColor,\n ];\n }\n\n // calculate the gradient height to cover the top item and bottom item\n const gradientHeight =\n padWithNItems > 0 ? 1 / (padWithNItems * 2 + 1) : 0.3;\n\n return (\n <LinearGradient\n colors={colors}\n locations={[0, gradientHeight, 1 - gradientHeight, 1]}\n pointerEvents=\"none\"\n style={styles.pickerGradientOverlay}\n {...pickerGradientOverlayProps}\n />\n );\n }, [\n LinearGradient,\n MaskedView,\n padWithNItems,\n pickerGradientOverlayProps,\n styles.pickerContainer.backgroundColor,\n styles.pickerGradientOverlay,\n ]);\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n styles.durationScrollFlatListContainer,\n {\n height:\n styles.pickerItemContainer.height *\n numberOfItemsToShow,\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}>\n {MaskedView ? (\n <MaskedView\n maskElement={renderLinearGradient}\n style={[styles.maskedView]}>\n {renderContent}\n </MaskedView>\n ) : (\n <>\n {renderContent}\n {renderLinearGradient}\n </>\n )}\n </View>\n );\n }\n);\n\nexport default React.memo(DurationScroll);"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","useRef","useCallback","forwardRef","useImperativeHandle","useState","useEffect","useMemo","View","Text","FlatList","RNFlatList","colorToRgba","generate12HourNumbers","generateNumbers","getAdjustedLimit","getDurationAndIndexFromScrollOffset","getInitialScrollIndex","PickerItem","keyExtractor","item","index","toString","DurationScroll","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","clickSoundAsset","decelerationRate","disableInfiniteScroll","Haptics","initialValue","interval","is12HourPicker","isDisabled","label","limit","LinearGradient","MaskedView","maximumValue","onDurationChange","padNumbersWithZero","padWithNItems","pickerColumnWidth","pickerFeedback","pickerGradientOverlayProps","pickerLabelGap","pmLabel","repeatNumbersNTimes","repeatNumbersNTimesNotExplicitlySet","selectedValue","styles","testID","labelPositionStyle","pickerLabelContainer","left","undefined","gap","fontSize","pickerItem","maxDigitCount","Math","max","String","length","halfNumberWidth","marginLeft","numberOfItems","floor","safeRepeatNumbersNTimes","isNaN","round","numbersForFlatList","repeatNTimes","initialScrollIndex","value","adjustedLimited","numberOfItemsToShow","latestDuration","lastFeedbackIndex","flatListRef","clickSound","setClickSound","soundInstance","loadSound","sound","newSound","Sound","createAsync","uri","shouldPlay","error","console","warn","_soundInstance","unloadAsync","playClickSound","replayAsync","renderItem","createElement","adjustedLimitedMax","adjustedLimitedMin","min","pickerAmPmPositionStyle","onScroll","e","newValues","itemHeight","pickerItemContainer","height","yContentOffset","nativeEvent","contentOffset","y","duration","current","feedbackIndex","selectionAsync","onMomentumScrollEnd","_flatListRef$current","targetScrollIndex","scrollToIndex","animated","_flatListRef$current2","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current3","_flatListRef$current4","viewabilityConfigCallbackPairs","setViewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","flatListRenderKey","setFlatListRenderKey","initialRender","prev","getItemLayout","_","offset","reset","options","_flatListRef$current5","setValue","_flatListRef$current6","renderContent","Fragment","key","contentContainerStyle","durationScrollFlatListContentContainer","data","nestedScrollEnabled","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","i","style","durationScrollFlatList","windowSize","pointerEvents","pickerLabel","renderLinearGradient","colors","backgroundColor","pickerContainer","transparentBackgroundColor","color","opacity","gradientHeight","_extends","locations","pickerGradientOverlay","durationScrollFlatListContainer","flex","width","disabledPickerContainer","maskElement","maskedView","memo"],"sources":["DurationScroll.tsx"],"sourcesContent":["import React, {\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useState,\n useEffect,\n useMemo,\n} from \"react\";\n\nimport { View, Text, FlatList as RNFlatList } from \"react-native\";\nimport type { ViewabilityConfigCallbackPairs, FlatListProps } from \"react-native\";\n\nimport { colorToRgba } from \"../../utils/colorToRgba\";\nimport { generate12HourNumbers, generateNumbers } from \"../../utils/generateNumbers\";\nimport { getAdjustedLimit } from \"../../utils/getAdjustedLimit\";\nimport { getDurationAndIndexFromScrollOffset } from \"../../utils/getDurationAndIndexFromScrollOffset\";\nimport { getInitialScrollIndex } from \"../../utils/getInitialScrollIndex\";\nimport PickerItem from \"../PickerItem\";\nimport type { DurationScrollProps, DurationScrollRef, ExpoAvAudioInstance } from \"./types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst keyExtractor = (item: any, index: number) => index.toString();\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>((props, ref) => {\n const {\n aggressivelyGetLatestDuration,\n allowFontScaling = false,\n amLabel,\n Audio,\n clickSoundAsset,\n decelerationRate = 0.88,\n disableInfiniteScroll = false,\n FlatList = RNFlatList,\n Haptics,\n initialValue = 0,\n interval,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n MaskedView,\n maximumValue,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerColumnWidth,\n pickerFeedback,\n pickerGradientOverlayProps,\n pickerLabelGap,\n pmLabel,\n repeatNumbersNTimes = 3,\n repeatNumbersNTimesNotExplicitlySet,\n selectedValue,\n styles,\n testID,\n } = props;\n\n const labelPositionStyle = useMemo(() => {\n // When the style already has an explicit `left` (from legacy percentage system or\n // user override), don't apply pixel-based positioning.\n if (styles.pickerLabelContainer.left != null) {\n return undefined;\n }\n\n const gap = pickerLabelGap ?? 6;\n const fontSize = styles.pickerItem.fontSize ?? 25;\n const maxDigitCount = Math.max(2, String(maximumValue).length);\n const halfNumberWidth = (maxDigitCount * fontSize * 0.55) / 2;\n\n return {\n left: \"50%\" as const,\n marginLeft: halfNumberWidth + gap,\n };\n }, [maximumValue, pickerLabelGap, styles.pickerItem.fontSize, styles.pickerLabelContainer.left]);\n\n const numberOfItems = useMemo(() => {\n // guard against negative maximum values\n if (maximumValue < 0) {\n return 1;\n }\n\n return Math.floor(maximumValue / interval) + 1;\n }, [interval, maximumValue]);\n\n const safeRepeatNumbersNTimes = useMemo(() => {\n // do not repeat numbers if there is only one option\n if (numberOfItems === 1) {\n return 1;\n }\n\n if (!disableInfiniteScroll && repeatNumbersNTimes < 2) {\n return 2;\n } else if (repeatNumbersNTimes < 1 || isNaN(repeatNumbersNTimes)) {\n return 1;\n }\n\n // if this variable is not explicitly set, we calculate a reasonable value based on\n // the number of items in the picker, avoiding regular jumps up/down the list\n // whilst avoiding rendering too many items in the picker\n if (repeatNumbersNTimesNotExplicitlySet) {\n return Math.max(Math.round(180 / numberOfItems), 1);\n }\n\n return Math.round(repeatNumbersNTimes);\n }, [\n disableInfiniteScroll,\n numberOfItems,\n repeatNumbersNTimes,\n repeatNumbersNTimesNotExplicitlySet,\n ]);\n\n const numbersForFlatList = useMemo(() => {\n if (is12HourPicker) {\n return generate12HourNumbers({\n disableInfiniteScroll,\n interval,\n padNumbersWithZero,\n padWithNItems,\n repeatNTimes: safeRepeatNumbersNTimes,\n });\n }\n\n return generateNumbers(numberOfItems, {\n disableInfiniteScroll,\n interval,\n padNumbersWithZero,\n padWithNItems,\n repeatNTimes: safeRepeatNumbersNTimes,\n });\n }, [\n disableInfiniteScroll,\n is12HourPicker,\n interval,\n numberOfItems,\n padNumbersWithZero,\n padWithNItems,\n safeRepeatNumbersNTimes,\n ]);\n\n const initialScrollIndex = useMemo(\n () =>\n getInitialScrollIndex({\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes: safeRepeatNumbersNTimes,\n value: initialValue,\n }),\n [\n disableInfiniteScroll,\n initialValue,\n interval,\n numberOfItems,\n padWithNItems,\n safeRepeatNumbersNTimes,\n ]\n );\n\n const adjustedLimited = useMemo(\n () => getAdjustedLimit(limit, numberOfItems, interval),\n [interval, limit, numberOfItems]\n );\n\n const numberOfItemsToShow = 1 + padWithNItems * 2;\n\n // keep track of the latest duration as it scrolls\n const latestDuration = useRef(0);\n // keep track of the last index scrolled past for haptic/audio feedback\n const lastFeedbackIndex = useRef(0);\n\n const flatListRef = useRef<RNFlatList | null>(null);\n\n const [clickSound, setClickSound] = useState<ExpoAvAudioInstance | null>(null);\n\n useEffect(() => {\n // Audio prop deprecated in v2.2.0 (use pickerFeedback instead) - will be removed in a future version\n\n // preload the sound when the component mounts\n let soundInstance: ExpoAvAudioInstance | null = null;\n\n const loadSound = async () => {\n if (!Audio) {\n return;\n }\n\n try {\n const { sound: newSound } = await Audio.Sound.createAsync(\n clickSoundAsset ?? {\n // use a hosted sound as a fallback (do not use local asset due to loader issues\n // in some environments when including mp3 in library)\n uri: \"https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I\",\n },\n { shouldPlay: false }\n );\n soundInstance = newSound;\n setClickSound(newSound);\n } catch (error) {\n console.warn(\"Failed to load click sound:\", error);\n }\n };\n\n loadSound();\n\n return () => {\n // unload sound when component unmounts\n soundInstance?.unloadAsync();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [Audio]);\n\n const playClickSound = useCallback(async () => {\n if (!clickSound) return;\n\n try {\n await clickSound.replayAsync();\n } catch (error) {\n console.warn(\"Failed to play click sound:\", error);\n }\n }, [clickSound]);\n\n const renderItem = useCallback<NonNullable<FlatListProps<string>[\"renderItem\"]>>(\n ({ item }) => (\n <PickerItem\n adjustedLimitedMax={adjustedLimited.max}\n adjustedLimitedMin={adjustedLimited.min}\n allowFontScaling={allowFontScaling}\n amLabel={amLabel}\n is12HourPicker={is12HourPicker}\n item={item}\n pickerAmPmPositionStyle={labelPositionStyle}\n pmLabel={pmLabel}\n selectedValue={selectedValue}\n styles={styles}\n />\n ),\n [\n adjustedLimited.max,\n adjustedLimited.min,\n allowFontScaling,\n amLabel,\n is12HourPicker,\n labelPositionStyle,\n pmLabel,\n selectedValue,\n styles,\n ]\n );\n\n const onScroll = useCallback<NonNullable<FlatListProps<string>[\"onScroll\"]>>(\n (e) => {\n // this function is only used when the picker is in a modal and/or has Haptic/Audio feedback\n // it is used to ensure that the modal gets the latest duration on clicking\n // the confirm button, even if the scrollview is still scrolling\n if (!aggressivelyGetLatestDuration && !Haptics && !Audio && !pickerFeedback) {\n return;\n }\n\n if (aggressivelyGetLatestDuration) {\n const newValues = getDurationAndIndexFromScrollOffset({\n disableInfiniteScroll,\n interval,\n itemHeight: styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n yContentOffset: e.nativeEvent.contentOffset.y,\n });\n\n if (newValues.duration !== latestDuration.current) {\n // check limits\n if (newValues.duration > adjustedLimited.max) {\n newValues.duration = adjustedLimited.max;\n } else if (newValues.duration < adjustedLimited.min) {\n newValues.duration = adjustedLimited.min;\n }\n\n latestDuration.current = newValues.duration;\n }\n }\n\n if (pickerFeedback || Haptics || Audio) {\n const feedbackIndex = Math.round(\n (e.nativeEvent.contentOffset.y + styles.pickerItemContainer.height / 2) /\n styles.pickerItemContainer.height\n );\n\n if (feedbackIndex !== lastFeedbackIndex.current) {\n // this check stops the feedback firing when the component mounts\n if (lastFeedbackIndex.current) {\n // fire haptic feedback if available\n try {\n Haptics?.selectionAsync();\n } catch {\n // do nothing\n }\n\n // play click sound if available\n try {\n playClickSound();\n } catch {\n // do nothing\n }\n\n // fire custom feedback if available\n try {\n pickerFeedback?.();\n } catch {\n // do nothing\n }\n }\n\n lastFeedbackIndex.current = feedbackIndex;\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n adjustedLimited.max,\n adjustedLimited.min,\n aggressivelyGetLatestDuration,\n playClickSound,\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback<\n NonNullable<FlatListProps<string>[\"onMomentumScrollEnd\"]>\n >(\n (e) => {\n const newValues = getDurationAndIndexFromScrollOffset({\n disableInfiniteScroll,\n interval,\n itemHeight: styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n yContentOffset: e.nativeEvent.contentOffset.y,\n });\n\n // check limits\n if (newValues.duration > adjustedLimited.max) {\n const targetScrollIndex = newValues.index - (newValues.duration - adjustedLimited.max);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex >= 0 ? targetScrollIndex : adjustedLimited.max - 1,\n }); // scroll down to max\n newValues.duration = adjustedLimited.max;\n } else if (newValues.duration < adjustedLimited.min) {\n const targetScrollIndex = newValues.index + (adjustedLimited.min - newValues.duration);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex <= numbersForFlatList.length - 1\n ? targetScrollIndex\n : adjustedLimited.min,\n }); // scroll up to min\n newValues.duration = adjustedLimited.min;\n }\n\n onDurationChange(newValues.duration);\n },\n [\n disableInfiniteScroll,\n interval,\n styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n adjustedLimited.max,\n adjustedLimited.min,\n onDurationChange,\n numbersForFlatList.length,\n ]\n );\n\n const onViewableItemsChanged = useCallback<\n NonNullable<FlatListProps<string>[\"onViewableItemsChanged\"]>\n >(\n ({ viewableItems }) => {\n if (numberOfItems === 1) {\n return;\n }\n\n if (viewableItems[0]?.index && viewableItems[0].index < numberOfItems * 0.5) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index + numberOfItems,\n });\n } else if (\n viewableItems[0]?.index &&\n viewableItems[0].index >= numberOfItems * (safeRepeatNumbersNTimes - 0.5)\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index - numberOfItems,\n });\n }\n },\n [numberOfItems, safeRepeatNumbersNTimes]\n );\n\n const [viewabilityConfigCallbackPairs, setViewabilityConfigCallbackPairs] = useState<\n ViewabilityConfigCallbackPairs | undefined\n >(\n !disableInfiniteScroll\n ? [\n {\n onViewableItemsChanged: onViewableItemsChanged,\n viewabilityConfig: {\n viewAreaCoveragePercentThreshold: 0,\n },\n },\n ]\n : undefined\n );\n\n const [flatListRenderKey, setFlatListRenderKey] = useState(0);\n\n const initialRender = useRef(true);\n\n useEffect(() => {\n // don't run on first render\n if (initialRender.current) {\n initialRender.current = false;\n return;\n }\n\n // if the onViewableItemsChanged callback changes, we need to update viewabilityConfigCallbackPairs\n // which requires the FlatList to be remounted, hence the increase of the FlatList key\n setFlatListRenderKey((prev) => prev + 1);\n setViewabilityConfigCallbackPairs(\n !disableInfiniteScroll\n ? [\n {\n onViewableItemsChanged: onViewableItemsChanged,\n viewabilityConfig: {\n viewAreaCoveragePercentThreshold: 0,\n },\n },\n ]\n : undefined\n );\n }, [disableInfiniteScroll, onViewableItemsChanged]);\n\n const getItemLayout = useCallback<NonNullable<FlatListProps<string>[\"getItemLayout\"]>>(\n (_, index) => ({\n index,\n length: styles.pickerItemContainer.height,\n offset: styles.pickerItemContainer.height * index,\n }),\n [styles.pickerItemContainer.height]\n );\n\n useImperativeHandle(ref, () => ({\n latestDuration: latestDuration,\n reset: (options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: initialScrollIndex,\n });\n },\n setValue: (value, options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: getInitialScrollIndex({\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes: safeRepeatNumbersNTimes,\n value: value,\n }),\n });\n },\n }));\n\n const renderContent = useMemo(() => {\n return (\n <>\n <FlatList\n key={flatListRenderKey}\n ref={flatListRef}\n contentContainerStyle={styles.durationScrollFlatListContentContainer}\n data={numbersForFlatList}\n decelerationRate={decelerationRate}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={keyExtractor}\n nestedScrollEnabled\n onMomentumScrollEnd={onMomentumScrollEnd}\n onScroll={onScroll}\n renderItem={renderItem}\n scrollEnabled={!isDisabled}\n scrollEventThrottle={16}\n showsVerticalScrollIndicator={false}\n snapToAlignment=\"start\"\n // used in place of snapToInterval due to bug on Android\n snapToOffsets={[...Array(numbersForFlatList.length)].map(\n (_, i) => i * styles.pickerItemContainer.height\n )}\n style={styles.durationScrollFlatList}\n testID=\"duration-scroll-flatlist\"\n viewabilityConfigCallbackPairs={viewabilityConfigCallbackPairs}\n windowSize={numberOfItemsToShow}\n />\n <View pointerEvents=\"none\" style={[styles.pickerLabelContainer, labelPositionStyle]}>\n {typeof label === \"string\" ? (\n <Text allowFontScaling={allowFontScaling} style={styles.pickerLabel}>\n {label}\n </Text>\n ) : (\n label ?? null\n )}\n </View>\n </>\n );\n }, [\n FlatList,\n allowFontScaling,\n decelerationRate,\n flatListRenderKey,\n getItemLayout,\n initialScrollIndex,\n isDisabled,\n label,\n labelPositionStyle,\n numberOfItemsToShow,\n numbersForFlatList,\n onMomentumScrollEnd,\n onScroll,\n renderItem,\n styles.durationScrollFlatList,\n styles.durationScrollFlatListContentContainer,\n styles.pickerItemContainer.height,\n styles.pickerLabel,\n styles.pickerLabelContainer,\n viewabilityConfigCallbackPairs,\n ]);\n\n const renderLinearGradient = useMemo(() => {\n if (!LinearGradient) {\n return null;\n }\n\n let colors: string[];\n\n if (MaskedView) {\n // if using masked view, we only care about the opacity\n colors = [\"rgba(0,0,0,0)\", \"rgba(0,0,0,1)\", \"rgba(0,0,0,1)\", \"rgba(0,0,0,0)\"];\n } else {\n const backgroundColor = styles.pickerContainer.backgroundColor ?? \"white\";\n const transparentBackgroundColor = colorToRgba({\n color: backgroundColor,\n opacity: 0,\n });\n colors = [\n backgroundColor,\n transparentBackgroundColor,\n transparentBackgroundColor,\n backgroundColor,\n ];\n }\n\n // calculate the gradient height to cover the top item and bottom item\n const gradientHeight = padWithNItems > 0 ? 1 / (padWithNItems * 2 + 1) : 0.3;\n\n return (\n <LinearGradient\n colors={colors}\n locations={[0, gradientHeight, 1 - gradientHeight, 1]}\n pointerEvents=\"none\"\n style={styles.pickerGradientOverlay}\n {...pickerGradientOverlayProps}\n />\n );\n }, [\n LinearGradient,\n MaskedView,\n padWithNItems,\n pickerGradientOverlayProps,\n styles.pickerContainer.backgroundColor,\n styles.pickerGradientOverlay,\n ]);\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n styles.durationScrollFlatListContainer,\n pickerColumnWidth != null && { flex: 0, width: pickerColumnWidth },\n {\n height: styles.pickerItemContainer.height * numberOfItemsToShow,\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}\n >\n {MaskedView ? (\n <MaskedView maskElement={renderLinearGradient} style={[styles.maskedView]}>\n {renderContent}\n </MaskedView>\n ) : (\n <>\n {renderContent}\n {renderLinearGradient}\n </>\n )}\n </View>\n );\n});\n\nexport default React.memo(DurationScroll);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { RefObject } from \"react\";\n\nimport type { View } from \"react-native\";\n\nimport type { generateStyles } from \"../TimerPicker/styles\";\n\nexport interface DurationScrollProps {\n
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type React from \"react\";\nimport { type RefObject } from \"react\";\n\nimport type { View } from \"react-native\";\n\nimport type { generateStyles } from \"../TimerPicker/styles\";\n\nexport interface DurationScrollProps {\n aggressivelyGetLatestDuration: boolean;\n allowFontScaling?: boolean;\n amLabel?: string;\n Audio?: any;\n clickSoundAsset?: SoundAsset;\n decelerationRate?: number | \"normal\" | \"fast\";\n disableInfiniteScroll?: boolean;\n FlatList?: any;\n Haptics?: any;\n initialValue?: number;\n interval: number;\n is12HourPicker?: boolean;\n isDisabled?: boolean;\n label?: string | React.ReactElement;\n limit?: Limit;\n LinearGradient?: any;\n MaskedView?: any;\n maximumValue: number;\n onDurationChange: (duration: number) => void;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n pickerColumnWidth?: number;\n pickerFeedback?: () => void | Promise<void>;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n pickerLabelGap?: number;\n pmLabel?: string;\n repeatNumbersNTimes?: number;\n repeatNumbersNTimesNotExplicitlySet: boolean;\n selectedValue?: number;\n styles: ReturnType<typeof generateStyles>;\n testID?: string;\n}\n\nexport interface DurationScrollRef {\n latestDuration: RefObject<number>;\n reset: (options?: { animated?: boolean }) => void;\n setValue: (value: number, options?: { animated?: boolean }) => void;\n}\n\ntype LinearGradientPoint = {\n x: number;\n y: number;\n};\n\nexport type LinearGradientProps = React.ComponentProps<typeof View> & {\n colors: string[];\n end?: LinearGradientPoint | null;\n locations?: number[] | null;\n start?: LinearGradientPoint | null;\n};\n\nexport type Limit = {\n max?: number;\n min?: number;\n};\n\nexport type SoundAsset =\n | number\n | {\n headers?: Record<string, string>;\n overrideFileExtensionAndroid?: string;\n uri: string;\n };\n\nexport type ExpoAvAudioInstance = {\n replayAsync: () => Promise<void>;\n unloadAsync: () => Promise<void>;\n};\n"],"mappings":"","ignoreList":[]}
|
|
@@ -40,28 +40,28 @@ export const Modal = props => {
|
|
|
40
40
|
const contentAnimatedStyle = {
|
|
41
41
|
transform: [{
|
|
42
42
|
translateY: animatedOpacity.current.interpolate({
|
|
43
|
+
extrapolate: "clamp",
|
|
43
44
|
inputRange: [0, 1],
|
|
44
|
-
outputRange: [screenHeight, 0]
|
|
45
|
-
extrapolate: "clamp"
|
|
45
|
+
outputRange: [screenHeight, 0]
|
|
46
46
|
})
|
|
47
47
|
}]
|
|
48
48
|
};
|
|
49
49
|
const show = useCallback(() => {
|
|
50
50
|
Animated.timing(animatedOpacity.current, {
|
|
51
|
+
duration: animationDuration,
|
|
51
52
|
easing: Easing.inOut(Easing.quad),
|
|
53
|
+
toValue: 1,
|
|
52
54
|
// Using native driver in the modal makes the content flash
|
|
53
|
-
useNativeDriver: true
|
|
54
|
-
duration: animationDuration,
|
|
55
|
-
toValue: 1
|
|
55
|
+
useNativeDriver: true
|
|
56
56
|
}).start();
|
|
57
57
|
}, [animationDuration]);
|
|
58
58
|
const hide = useCallback(() => {
|
|
59
59
|
Animated.timing(animatedOpacity.current, {
|
|
60
|
+
duration: animationDuration,
|
|
60
61
|
easing: Easing.inOut(Easing.quad),
|
|
62
|
+
toValue: 0,
|
|
61
63
|
// Using native driver in the modal makes the content flash
|
|
62
|
-
useNativeDriver: true
|
|
63
|
-
duration: animationDuration,
|
|
64
|
-
toValue: 0
|
|
64
|
+
useNativeDriver: true
|
|
65
65
|
}).start(() => {
|
|
66
66
|
if (isMounted.current) {
|
|
67
67
|
onHide === null || onHide === void 0 || onHide();
|
|
@@ -87,8 +87,8 @@ export const Modal = props => {
|
|
|
87
87
|
testID: "modal-backdrop"
|
|
88
88
|
}, /*#__PURE__*/React.createElement(Animated.View, {
|
|
89
89
|
style: [styles.backdrop, backdropAnimatedStyle, {
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
height: screenHeight,
|
|
91
|
+
width: screenWidth
|
|
92
92
|
}, overlayStyle]
|
|
93
93
|
})), /*#__PURE__*/React.createElement(Animated.View, {
|
|
94
94
|
pointerEvents: "box-none",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useEffect","useRef","Animated","Easing","Modal","ReactNativeModal","TouchableWithoutFeedback","useWindowDimensions","styles","props","animationDuration","children","contentStyle","isVisible","modalProps","onHide","onOverlayPress","overlayOpacity","overlayStyle","testID","height","screenHeight","width","screenWidth","isMounted","animatedOpacity","Value","current","show","backdropAnimatedStyle","opacity","interpolate","inputRange","outputRange","contentAnimatedStyle","transform","translateY","extrapolate","timing","easing","inOut","quad","
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useRef","Animated","Easing","Modal","ReactNativeModal","TouchableWithoutFeedback","useWindowDimensions","styles","props","animationDuration","children","contentStyle","isVisible","modalProps","onHide","onOverlayPress","overlayOpacity","overlayStyle","testID","height","screenHeight","width","screenWidth","isMounted","animatedOpacity","Value","current","show","backdropAnimatedStyle","opacity","interpolate","inputRange","outputRange","contentAnimatedStyle","transform","translateY","extrapolate","timing","duration","easing","inOut","quad","toValue","useNativeDriver","start","hide","createElement","_extends","animationType","transparent","visible","onPress","View","style","backdrop","pointerEvents","content","memo"],"sources":["Modal.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from \"react\";\n\nimport {\n Animated,\n Easing,\n Modal as ReactNativeModal,\n TouchableWithoutFeedback,\n useWindowDimensions,\n} from \"react-native\";\n\nimport { styles } from \"./styles\";\nimport type { ModalProps } from \"./types\";\n\nexport const Modal = (props: ModalProps) => {\n const {\n animationDuration = 300,\n children,\n contentStyle,\n isVisible = false,\n modalProps,\n onHide,\n onOverlayPress,\n overlayOpacity = 0.4,\n overlayStyle,\n testID = \"modal\",\n } = props;\n\n const { height: screenHeight, width: screenWidth } = useWindowDimensions();\n\n const isMounted = useRef(false);\n const animatedOpacity = useRef(new Animated.Value(0));\n\n useEffect(() => {\n isMounted.current = true;\n if (isVisible) {\n show();\n }\n\n return () => {\n isMounted.current = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const backdropAnimatedStyle = {\n opacity: animatedOpacity.current.interpolate({\n inputRange: [0, 1],\n outputRange: [0, overlayOpacity],\n }),\n };\n const contentAnimatedStyle = {\n transform: [\n {\n translateY: animatedOpacity.current.interpolate({\n extrapolate: \"clamp\",\n inputRange: [0, 1],\n outputRange: [screenHeight, 0],\n }),\n },\n ],\n };\n\n const show = useCallback(() => {\n Animated.timing(animatedOpacity.current, {\n duration: animationDuration,\n easing: Easing.inOut(Easing.quad),\n toValue: 1,\n // Using native driver in the modal makes the content flash\n useNativeDriver: true,\n }).start();\n }, [animationDuration]);\n\n const hide = useCallback(() => {\n Animated.timing(animatedOpacity.current, {\n duration: animationDuration,\n easing: Easing.inOut(Easing.quad),\n toValue: 0,\n // Using native driver in the modal makes the content flash\n useNativeDriver: true,\n }).start(() => {\n if (isMounted.current) {\n onHide?.();\n }\n });\n }, [animationDuration, onHide]);\n\n useEffect(() => {\n if (isVisible) {\n show();\n } else {\n hide();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isVisible]);\n\n return (\n <ReactNativeModal\n animationType=\"fade\"\n transparent\n visible={isVisible}\n {...modalProps}\n testID={testID}\n >\n <TouchableWithoutFeedback onPress={onOverlayPress} testID=\"modal-backdrop\">\n <Animated.View\n style={[\n styles.backdrop,\n backdropAnimatedStyle,\n { height: screenHeight, width: screenWidth },\n overlayStyle,\n ]}\n />\n </TouchableWithoutFeedback>\n <Animated.View\n pointerEvents=\"box-none\"\n style={[styles.content, contentAnimatedStyle, contentStyle]}\n >\n {children}\n </Animated.View>\n </ReactNativeModal>\n );\n};\n\nexport default React.memo(Modal);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { StyleSheet } from "react-native";
|
|
2
2
|
export const styles = StyleSheet.create({
|
|
3
3
|
backdrop: {
|
|
4
|
-
|
|
5
|
-
top: 0,
|
|
4
|
+
backgroundColor: "black",
|
|
6
5
|
bottom: 0,
|
|
7
6
|
left: 0,
|
|
7
|
+
opacity: 0,
|
|
8
|
+
position: "absolute",
|
|
8
9
|
right: 0,
|
|
9
|
-
|
|
10
|
-
opacity: 0
|
|
10
|
+
top: 0
|
|
11
11
|
},
|
|
12
12
|
content: {
|
|
13
|
+
alignItems: "center",
|
|
13
14
|
flex: 1,
|
|
14
15
|
justifyContent: "center",
|
|
15
|
-
alignItems: "center",
|
|
16
16
|
zIndex: 1
|
|
17
17
|
}
|
|
18
18
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StyleSheet","styles","create","backdrop","
|
|
1
|
+
{"version":3,"names":["StyleSheet","styles","create","backdrop","backgroundColor","bottom","left","opacity","position","right","top","content","alignItems","flex","justifyContent","zIndex"],"sources":["styles.ts"],"sourcesContent":["import { StyleSheet } from \"react-native\";\n\nexport const styles = StyleSheet.create({\n backdrop: {\n backgroundColor: \"black\",\n bottom: 0,\n left: 0,\n opacity: 0,\n position: \"absolute\",\n right: 0,\n top: 0,\n },\n content: {\n alignItems: \"center\",\n flex: 1,\n justifyContent: \"center\",\n zIndex: 1,\n },\n});\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,cAAc;AAEzC,OAAO,MAAMC,MAAM,GAAGD,UAAU,CAACE,MAAM,CAAC;EACtCC,QAAQ,EAAE;IACRC,eAAe,EAAE,OAAO;IACxBC,MAAM,EAAE,CAAC;IACTC,IAAI,EAAE,CAAC;IACPC,OAAO,EAAE,CAAC;IACVC,QAAQ,EAAE,UAAU;IACpBC,KAAK,EAAE,CAAC;IACRC,GAAG,EAAE;EACP,CAAC;EACDC,OAAO,EAAE;IACPC,UAAU,EAAE,QAAQ;IACpBC,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBC,MAAM,EAAE;EACV;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { ComponentProps } from \"react\";\n\nimport type { ViewStyle } from \"react-native\";\nimport type { Modal as ReactNativeModal } from \"react-native\";\n\nexport interface ModalProps {\n
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from \"react\";\nimport { type ComponentProps } from \"react\";\n\nimport type { ViewStyle } from \"react-native\";\nimport type { Modal as ReactNativeModal } from \"react-native\";\n\nexport interface ModalProps {\n animationDuration?: number;\n children?: React.ReactElement;\n contentStyle?: ViewStyle;\n isVisible?: boolean;\n modalProps?: ComponentProps<typeof ReactNativeModal>;\n onHide?: () => void;\n onOverlayPress?: () => void;\n overlayOpacity?: number;\n overlayStyle?: ViewStyle;\n testID?: string;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -7,6 +7,7 @@ const PickerItem = /*#__PURE__*/React.memo(({
|
|
|
7
7
|
amLabel,
|
|
8
8
|
is12HourPicker,
|
|
9
9
|
item,
|
|
10
|
+
pickerAmPmPositionStyle,
|
|
10
11
|
pmLabel,
|
|
11
12
|
selectedValue,
|
|
12
13
|
styles
|
|
@@ -30,7 +31,7 @@ const PickerItem = /*#__PURE__*/React.memo(({
|
|
|
30
31
|
allowFontScaling: allowFontScaling,
|
|
31
32
|
style: [styles.pickerItem, isSelected && styles.selectedPickerItem, intItem > adjustedLimitedMax || intItem < adjustedLimitedMin ? styles.disabledPickerItem : {}]
|
|
32
33
|
}, stringItem), is12HourPicker && /*#__PURE__*/React.createElement(View, {
|
|
33
|
-
style: styles.pickerAmPmContainer
|
|
34
|
+
style: [styles.pickerAmPmContainer, pickerAmPmPositionStyle]
|
|
34
35
|
}, /*#__PURE__*/React.createElement(Text, {
|
|
35
36
|
allowFontScaling: allowFontScaling,
|
|
36
37
|
style: styles.pickerAmPmLabel
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","View","Text","PickerItem","memo","adjustedLimitedMax","adjustedLimitedMin","allowFontScaling","amLabel","is12HourPicker","item","pmLabel","selectedValue","styles","stringItem","intItem","isAm","parseInt","includes","replace","isSelected","createElement","key","style","pickerItemContainer","testID","pickerItem","selectedPickerItem","disabledPickerItem","pickerAmPmContainer","pickerAmPmLabel"],"sources":["PickerItem.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"names":["React","View","Text","PickerItem","memo","adjustedLimitedMax","adjustedLimitedMin","allowFontScaling","amLabel","is12HourPicker","item","pickerAmPmPositionStyle","pmLabel","selectedValue","styles","stringItem","intItem","isAm","parseInt","includes","replace","isSelected","createElement","key","style","pickerItemContainer","testID","pickerItem","selectedPickerItem","disabledPickerItem","pickerAmPmContainer","pickerAmPmLabel"],"sources":["PickerItem.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { View, Text } from \"react-native\";\n\nimport type { generateStyles } from \"../TimerPicker/styles\";\n\ninterface PickerItemProps {\n adjustedLimitedMax: number;\n adjustedLimitedMin: number;\n allowFontScaling: boolean;\n amLabel?: string;\n is12HourPicker?: boolean;\n item: string;\n pickerAmPmPositionStyle?: { left: \"50%\"; marginLeft: number };\n pmLabel?: string;\n selectedValue?: number;\n styles: ReturnType<typeof generateStyles>;\n}\n\nconst PickerItem = React.memo<PickerItemProps>(\n ({\n adjustedLimitedMax,\n adjustedLimitedMin,\n allowFontScaling,\n amLabel,\n is12HourPicker,\n item,\n pickerAmPmPositionStyle,\n pmLabel,\n selectedValue,\n styles,\n }) => {\n let stringItem = item;\n let intItem: number;\n let isAm: boolean | undefined;\n\n if (!is12HourPicker) {\n intItem = parseInt(item);\n } else {\n isAm = item.includes(\"AM\");\n stringItem = item.replace(/\\s[AP]M/g, \"\");\n intItem = parseInt(stringItem);\n }\n\n const isSelected = intItem === selectedValue;\n\n return (\n <View key={item} style={styles.pickerItemContainer} testID=\"picker-item\">\n <Text\n allowFontScaling={allowFontScaling}\n style={[\n styles.pickerItem,\n isSelected && styles.selectedPickerItem,\n intItem > adjustedLimitedMax || intItem < adjustedLimitedMin\n ? styles.disabledPickerItem\n : {},\n ]}\n >\n {stringItem}\n </Text>\n {is12HourPicker && (\n <View style={[styles.pickerAmPmContainer, pickerAmPmPositionStyle]}>\n <Text allowFontScaling={allowFontScaling} style={styles.pickerAmPmLabel}>\n {isAm ? amLabel : pmLabel}\n </Text>\n </View>\n )}\n </View>\n );\n }\n);\n\nexport default PickerItem;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AAiBzC,MAAMC,UAAU,gBAAGH,KAAK,CAACI,IAAI,CAC3B,CAAC;EACCC,kBAAkB;EAClBC,kBAAkB;EAClBC,gBAAgB;EAChBC,OAAO;EACPC,cAAc;EACdC,IAAI;EACJC,uBAAuB;EACvBC,OAAO;EACPC,aAAa;EACbC;AACF,CAAC,KAAK;EACJ,IAAIC,UAAU,GAAGL,IAAI;EACrB,IAAIM,OAAe;EACnB,IAAIC,IAAyB;EAE7B,IAAI,CAACR,cAAc,EAAE;IACnBO,OAAO,GAAGE,QAAQ,CAACR,IAAI,CAAC;EAC1B,CAAC,MAAM;IACLO,IAAI,GAAGP,IAAI,CAACS,QAAQ,CAAC,IAAI,CAAC;IAC1BJ,UAAU,GAAGL,IAAI,CAACU,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;IACzCJ,OAAO,GAAGE,QAAQ,CAACH,UAAU,CAAC;EAChC;EAEA,MAAMM,UAAU,GAAGL,OAAO,KAAKH,aAAa;EAE5C,oBACEb,KAAA,CAAAsB,aAAA,CAACrB,IAAI;IAACsB,GAAG,EAAEb,IAAK;IAACc,KAAK,EAAEV,MAAM,CAACW,mBAAoB;IAACC,MAAM,EAAC;EAAa,gBACtE1B,KAAA,CAAAsB,aAAA,CAACpB,IAAI;IACHK,gBAAgB,EAAEA,gBAAiB;IACnCiB,KAAK,EAAE,CACLV,MAAM,CAACa,UAAU,EACjBN,UAAU,IAAIP,MAAM,CAACc,kBAAkB,EACvCZ,OAAO,GAAGX,kBAAkB,IAAIW,OAAO,GAAGV,kBAAkB,GACxDQ,MAAM,CAACe,kBAAkB,GACzB,CAAC,CAAC;EACN,GAEDd,UACG,CAAC,EACNN,cAAc,iBACbT,KAAA,CAAAsB,aAAA,CAACrB,IAAI;IAACuB,KAAK,EAAE,CAACV,MAAM,CAACgB,mBAAmB,EAAEnB,uBAAuB;EAAE,gBACjEX,KAAA,CAAAsB,aAAA,CAACpB,IAAI;IAACK,gBAAgB,EAAEA,gBAAiB;IAACiB,KAAK,EAAEV,MAAM,CAACiB;EAAgB,GACrEd,IAAI,GAAGT,OAAO,GAAGI,OACd,CACF,CAEJ,CAAC;AAEX,CACF,CAAC;AAED,eAAeT,UAAU","ignoreList":[]}
|