react-native-timer-picker 1.8.1 → 1.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -84,6 +84,9 @@ This is currently only supported on Expo with the [expo-av](https://www.npmjs.co
84
84
 
85
85
  **To enable audio feedback, you need to supply the imported `Audio` class as a prop to either TimerPickerModal or TimerPicker.**
86
86
 
87
+ Please note that the default click sound uses a hosted mp3 file. To make the click sound work offline, you need to supply your own
88
+ sound asset through the `clickSoundAsset` prop. You can download the default click sound [here](https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I).
89
+
87
90
  <br>
88
91
 
89
92
  ## Installation 🚀
@@ -246,6 +249,7 @@ return (
246
249
  closeOnOverlayPress
247
250
  use12HourPicker
248
251
  Audio={Audio}
252
+ // supply your own custom click sound asset
249
253
  clickSoundAsset={require("./assets/custom_click.mp3")}
250
254
  LinearGradient={LinearGradient}
251
255
  Haptics={Haptics}
@@ -396,7 +400,7 @@ return (
396
400
  | LinearGradient | Linear Gradient Component | [expo-linear-gradient](https://www.npmjs.com/package/expo-linear-gradient).LinearGradient or [react-native-linear-gradient](https://www.npmjs.com/package/react-native-linear-gradient).default | - | false |
397
401
  | Haptics | Haptics Namespace (required for Haptic feedback) | [expo-haptics](https://www.npmjs.com/package/expo-haptics) | - | false |
398
402
  | Audio | Audio Class (required for audio feedback i.e. click sound) | [expo-av](https://www.npmjs.com/package/expo-av).Audio | - | false |
399
- | clickSoundAsset | Custom sound asset for click sound | require(.../somefolderpath) or {uri: www.someurl} | - | false |
403
+ | clickSoundAsset | Custom sound asset for click sound (required for offline click sound - download default [here](https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I)) | require(.../somefolderpath) or {uri: www.someurl} | - | false |
400
404
  | pickerContainerProps | Props for the picker container | `React.ComponentProps<typeof View>` | - | false |
401
405
  | pickerGradientOverlayProps | Props for both gradient overlays | `Partial<LinearGradientProps>` | - | false |
402
406
  | topPickerGradientOverlayProps | Props for the top gradient overlay | `Partial<LinearGradientProps>` | - | false |
@@ -72,7 +72,11 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
72
72
  if (Audio) {
73
73
  const {
74
74
  sound
75
- } = await Audio.Sound.createAsync(clickSoundAsset ?? require("../../assets/select_click.mp3"), {
75
+ } = await Audio.Sound.createAsync(clickSoundAsset ?? {
76
+ // use a hosted sound as a fallback (do not use local asset due to loader issues
77
+ // in some environments when including mp3 in library)
78
+ uri: "https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I"
79
+ }, {
76
80
  shouldPlay: false
77
81
  });
78
82
  setClickSound(sound);
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_colorToRgba","_generateNumbers","_getAdjustedLimit","_getScrollIndex","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","DurationScroll","forwardRef","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","bottomPickerGradientOverlayProps","clickSoundAsset","disableInfiniteScroll","Haptics","initialValue","is12HourPicker","isDisabled","label","limit","LinearGradient","numberOfItems","onDurationChange","padNumbersWithZero","padWithNItems","pickerGradientOverlayProps","pmLabel","styles","testID","topPickerGradientOverlayProps","data","generateNumbers","repeatNTimes","generate12HourNumbers","numberOfItemsToShow","adjustedLimited","getAdjustedLimit","initialScrollIndex","getScrollIndex","value","latestDuration","useRef","lastFeedbackIndex","flatListRef","clickSound","setClickSound","useState","useEffect","loadSound","sound","Sound","createAsync","shouldPlay","unloadAsync","useImperativeHandle","reset","options","_flatListRef$current","current","scrollToIndex","animated","index","setValue","_flatListRef$current2","renderItem","useCallback","item","stringItem","intItem","isAm","parseInt","includes","replace","createElement","View","style","pickerItemContainer","Text","pickerItem","max","min","disabledPickerItem","pointerEvents","pickerAmPmContainer","pickerAmPmLabel","onScroll","newIndex","Math","round","nativeEvent","contentOffset","y","height","newDuration","feedbackIndex","selectionAsync","replayAsync","onMomentumScrollEnd","_flatListRef$current3","targetScrollIndex","_flatListRef$current4","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current5","_flatListRef$current6","getItemLayout","_","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","undefined","overflow","disabledPickerContainer","FlatList","decelerationRate","keyExtractor","toString","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","windowSize","pickerLabelContainer","pickerLabel","Fragment","colors","pickerContainer","backgroundColor","colorToRgba","color","opacity","end","x","start","pickerGradientOverlay","top","bottom","_default","exports","React","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useState,\n useEffect,\n} from \"react\";\n\nimport { View, Text, FlatList } from \"react-native\";\nimport type {\n ViewabilityConfigCallbackPairs,\n ViewToken,\n NativeSyntheticEvent,\n NativeScrollEvent,\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 { getScrollIndex } from \"../../utils/getScrollIndex\";\n\nimport type { DurationScrollProps, DurationScrollRef } from \"./types\";\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(\n (props, ref) => {\n const {\n aggressivelyGetLatestDuration,\n allowFontScaling = false,\n amLabel,\n Audio,\n bottomPickerGradientOverlayProps,\n clickSoundAsset,\n disableInfiniteScroll = false,\n Haptics,\n initialValue = 0,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n numberOfItems,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerGradientOverlayProps,\n pmLabel,\n styles,\n testID,\n topPickerGradientOverlayProps,\n } = props;\n\n const data = !is12HourPicker\n ? generateNumbers(numberOfItems, {\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n })\n : generate12HourNumbers({\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n });\n\n const numberOfItemsToShow = 1 + padWithNItems * 2;\n\n const adjustedLimited = getAdjustedLimit(limit, numberOfItems);\n\n const initialScrollIndex = getScrollIndex({\n value: initialValue,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n });\n\n // 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<FlatList | null>(null);\n\n const [clickSound, setClickSound] = useState<\n | {\n replayAsync: () => Promise<void>;\n unloadAsync: () => Promise<void>;\n }\n | undefined\n >();\n\n // Preload the sound when the component mounts\n useEffect(() => {\n const loadSound = async () => {\n if (Audio) {\n const { sound } = await Audio.Sound.createAsync(\n clickSoundAsset ??\n require(\"../../assets/select_click.mp3\"),\n { shouldPlay: false }\n );\n setClickSound(sound);\n }\n };\n loadSound();\n\n // Unload sound when component unmounts\n return () => {\n clickSound?.unloadAsync();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [Audio]);\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: initialScrollIndex,\n });\n },\n setValue: (value, options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: getScrollIndex({\n value: value,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n }),\n });\n },\n latestDuration: latestDuration,\n }));\n\n const renderItem = useCallback(\n ({ item }: { item: string }) => {\n 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 return (\n <View\n key={item}\n style={styles.pickerItemContainer}\n testID=\"picker-item\">\n <Text\n allowFontScaling={allowFontScaling}\n style={[\n styles.pickerItem,\n intItem > adjustedLimited.max ||\n intItem < adjustedLimited.min\n ? styles.disabledPickerItem\n : {},\n ]}>\n {stringItem}\n </Text>\n {is12HourPicker ? (\n <View\n pointerEvents=\"none\"\n style={styles.pickerAmPmContainer}>\n <Text\n allowFontScaling={allowFontScaling}\n style={[styles.pickerAmPmLabel]}>\n {isAm ? amLabel : pmLabel}\n </Text>\n </View>\n ) : null}\n </View>\n );\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n allowFontScaling,\n amLabel,\n is12HourPicker,\n pmLabel,\n styles.disabledPickerItem,\n styles.pickerAmPmContainer,\n styles.pickerAmPmLabel,\n styles.pickerItem,\n styles.pickerItemContainer,\n ]\n );\n\n const onScroll = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n // this function is only used when the picker is in a modal 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) {\n return;\n }\n\n if (aggressivelyGetLatestDuration) {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n if (newDuration !== latestDuration.current) {\n // check limits\n if (newDuration > adjustedLimited.max) {\n newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n newDuration = adjustedLimited.min;\n }\n\n latestDuration.current = newDuration;\n }\n }\n\n if (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 Haptics?.selectionAsync();\n\n // play click sound if available\n clickSound?.replayAsync();\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 clickSound,\n disableInfiniteScroll,\n numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n // check limits\n if (newDuration > adjustedLimited.max) {\n const targetScrollIndex =\n newIndex - (newDuration - adjustedLimited.max);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex >= 0\n ? targetScrollIndex\n : adjustedLimited.max - 1,\n }); // scroll down to max\n newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n const targetScrollIndex =\n newIndex + (adjustedLimited.min - newDuration);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex <= data.length - 1\n ? targetScrollIndex\n : adjustedLimited.min,\n }); // scroll up to min\n newDuration = adjustedLimited.min;\n }\n\n onDurationChange(newDuration);\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n data.length,\n disableInfiniteScroll,\n numberOfItems,\n onDurationChange,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onViewableItemsChanged = useCallback(\n ({ viewableItems }: { viewableItems: ViewToken[] }) => {\n if (\n viewableItems[0]?.index &&\n viewableItems[0].index < numberOfItems * 0.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index + numberOfItems,\n });\n } else if (\n viewableItems[0]?.index &&\n viewableItems[0].index >= numberOfItems * 2.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index - numberOfItems,\n });\n }\n },\n [numberOfItems]\n );\n\n const getItemLayout = useCallback(\n (_: ArrayLike<string> | null | undefined, index: number) => ({\n length: styles.pickerItemContainer.height,\n offset: styles.pickerItemContainer.height * index,\n index,\n }),\n [styles.pickerItemContainer.height]\n );\n\n const viewabilityConfigCallbackPairs =\n useRef<ViewabilityConfigCallbackPairs>([\n {\n viewabilityConfig: { viewAreaCoveragePercentThreshold: 25 },\n onViewableItemsChanged: onViewableItemsChanged,\n },\n ]);\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n {\n height:\n styles.pickerItemContainer.height *\n numberOfItemsToShow,\n overflow: \"visible\",\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}>\n <FlatList\n ref={flatListRef}\n data={data}\n decelerationRate={0.88}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={(_, index) => index.toString()}\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 snapToOffset due to bug on Android\n snapToOffsets={[...Array(data.length)].map(\n (_, i) => i * styles.pickerItemContainer.height\n )}\n testID=\"duration-scroll-flatlist\"\n viewabilityConfigCallbackPairs={\n !disableInfiniteScroll\n ? viewabilityConfigCallbackPairs?.current\n : undefined\n }\n windowSize={numberOfItemsToShow}\n />\n <View pointerEvents=\"none\" 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 {LinearGradient ? (\n <>\n <LinearGradient\n colors={[\n styles.pickerContainer.backgroundColor ??\n \"white\",\n colorToRgba({\n color:\n styles.pickerContainer\n .backgroundColor ?? \"white\",\n opacity: 0,\n }),\n ]}\n end={{ x: 1, y: 1 }}\n pointerEvents=\"none\"\n start={{ x: 1, y: 0.3 }}\n {...pickerGradientOverlayProps}\n {...topPickerGradientOverlayProps}\n style={[styles.pickerGradientOverlay, { top: 0 }]}\n />\n <LinearGradient\n colors={[\n colorToRgba({\n color:\n styles.pickerContainer\n .backgroundColor ?? \"white\",\n opacity: 0,\n }),\n styles.pickerContainer.backgroundColor ??\n \"white\",\n ]}\n end={{ x: 1, y: 0.7 }}\n pointerEvents=\"none\"\n start={{ x: 1, y: 0 }}\n {...pickerGradientOverlayProps}\n {...bottomPickerGradientOverlayProps}\n style={[\n styles.pickerGradientOverlay,\n { bottom: -1 },\n ]}\n />\n </>\n ) : null}\n </View>\n );\n }\n);\n\nexport default React.memo(DurationScroll);\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_colorToRgba","_generateNumbers","_getAdjustedLimit","_getScrollIndex","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","DurationScroll","forwardRef","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","bottomPickerGradientOverlayProps","clickSoundAsset","disableInfiniteScroll","Haptics","initialValue","is12HourPicker","isDisabled","label","limit","LinearGradient","numberOfItems","onDurationChange","padNumbersWithZero","padWithNItems","pickerGradientOverlayProps","pmLabel","styles","testID","topPickerGradientOverlayProps","data","generateNumbers","repeatNTimes","generate12HourNumbers","numberOfItemsToShow","adjustedLimited","getAdjustedLimit","initialScrollIndex","getScrollIndex","value","latestDuration","useRef","lastFeedbackIndex","flatListRef","clickSound","setClickSound","useState","useEffect","loadSound","sound","Sound","createAsync","uri","shouldPlay","unloadAsync","useImperativeHandle","reset","options","_flatListRef$current","current","scrollToIndex","animated","index","setValue","_flatListRef$current2","renderItem","useCallback","item","stringItem","intItem","isAm","parseInt","includes","replace","createElement","View","style","pickerItemContainer","Text","pickerItem","max","min","disabledPickerItem","pointerEvents","pickerAmPmContainer","pickerAmPmLabel","onScroll","newIndex","Math","round","nativeEvent","contentOffset","y","height","newDuration","feedbackIndex","selectionAsync","replayAsync","onMomentumScrollEnd","_flatListRef$current3","targetScrollIndex","_flatListRef$current4","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current5","_flatListRef$current6","getItemLayout","_","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","undefined","overflow","disabledPickerContainer","FlatList","decelerationRate","keyExtractor","toString","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","windowSize","pickerLabelContainer","pickerLabel","Fragment","colors","pickerContainer","backgroundColor","colorToRgba","color","opacity","end","x","start","pickerGradientOverlay","top","bottom","_default","exports","React","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useState,\n useEffect,\n} from \"react\";\n\nimport { View, Text, FlatList } from \"react-native\";\nimport type {\n ViewabilityConfigCallbackPairs,\n ViewToken,\n NativeSyntheticEvent,\n NativeScrollEvent,\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 { getScrollIndex } from \"../../utils/getScrollIndex\";\n\nimport type { DurationScrollProps, DurationScrollRef } from \"./types\";\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(\n (props, ref) => {\n const {\n aggressivelyGetLatestDuration,\n allowFontScaling = false,\n amLabel,\n Audio,\n bottomPickerGradientOverlayProps,\n clickSoundAsset,\n disableInfiniteScroll = false,\n Haptics,\n initialValue = 0,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n numberOfItems,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerGradientOverlayProps,\n pmLabel,\n styles,\n testID,\n topPickerGradientOverlayProps,\n } = props;\n\n const data = !is12HourPicker\n ? generateNumbers(numberOfItems, {\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n })\n : generate12HourNumbers({\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n });\n\n const numberOfItemsToShow = 1 + padWithNItems * 2;\n\n const adjustedLimited = getAdjustedLimit(limit, numberOfItems);\n\n const initialScrollIndex = getScrollIndex({\n value: initialValue,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n });\n\n // 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<FlatList | null>(null);\n\n const [clickSound, setClickSound] = useState<\n | {\n replayAsync: () => Promise<void>;\n unloadAsync: () => Promise<void>;\n }\n | undefined\n >();\n\n // Preload the sound when the component mounts\n useEffect(() => {\n const loadSound = async () => {\n if (Audio) {\n const { sound } = 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 setClickSound(sound);\n }\n };\n loadSound();\n\n // Unload sound when component unmounts\n return () => {\n clickSound?.unloadAsync();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [Audio]);\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: initialScrollIndex,\n });\n },\n setValue: (value, options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: getScrollIndex({\n value: value,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n }),\n });\n },\n latestDuration: latestDuration,\n }));\n\n const renderItem = useCallback(\n ({ item }: { item: string }) => {\n 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 return (\n <View\n key={item}\n style={styles.pickerItemContainer}\n testID=\"picker-item\">\n <Text\n allowFontScaling={allowFontScaling}\n style={[\n styles.pickerItem,\n intItem > adjustedLimited.max ||\n intItem < adjustedLimited.min\n ? styles.disabledPickerItem\n : {},\n ]}>\n {stringItem}\n </Text>\n {is12HourPicker ? (\n <View\n pointerEvents=\"none\"\n style={styles.pickerAmPmContainer}>\n <Text\n allowFontScaling={allowFontScaling}\n style={[styles.pickerAmPmLabel]}>\n {isAm ? amLabel : pmLabel}\n </Text>\n </View>\n ) : null}\n </View>\n );\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n allowFontScaling,\n amLabel,\n is12HourPicker,\n pmLabel,\n styles.disabledPickerItem,\n styles.pickerAmPmContainer,\n styles.pickerAmPmLabel,\n styles.pickerItem,\n styles.pickerItemContainer,\n ]\n );\n\n const onScroll = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n // this function is only used when the picker is in a modal 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) {\n return;\n }\n\n if (aggressivelyGetLatestDuration) {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n if (newDuration !== latestDuration.current) {\n // check limits\n if (newDuration > adjustedLimited.max) {\n newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n newDuration = adjustedLimited.min;\n }\n\n latestDuration.current = newDuration;\n }\n }\n\n if (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 Haptics?.selectionAsync();\n\n // play click sound if available\n clickSound?.replayAsync();\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 clickSound,\n disableInfiniteScroll,\n numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n // check limits\n if (newDuration > adjustedLimited.max) {\n const targetScrollIndex =\n newIndex - (newDuration - adjustedLimited.max);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex >= 0\n ? targetScrollIndex\n : adjustedLimited.max - 1,\n }); // scroll down to max\n newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n const targetScrollIndex =\n newIndex + (adjustedLimited.min - newDuration);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex <= data.length - 1\n ? targetScrollIndex\n : adjustedLimited.min,\n }); // scroll up to min\n newDuration = adjustedLimited.min;\n }\n\n onDurationChange(newDuration);\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n data.length,\n disableInfiniteScroll,\n numberOfItems,\n onDurationChange,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onViewableItemsChanged = useCallback(\n ({ viewableItems }: { viewableItems: ViewToken[] }) => {\n if (\n viewableItems[0]?.index &&\n viewableItems[0].index < numberOfItems * 0.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index + numberOfItems,\n });\n } else if (\n viewableItems[0]?.index &&\n viewableItems[0].index >= numberOfItems * 2.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index - numberOfItems,\n });\n }\n },\n [numberOfItems]\n );\n\n const getItemLayout = useCallback(\n (_: ArrayLike<string> | null | undefined, index: number) => ({\n length: styles.pickerItemContainer.height,\n offset: styles.pickerItemContainer.height * index,\n index,\n }),\n [styles.pickerItemContainer.height]\n );\n\n const viewabilityConfigCallbackPairs =\n useRef<ViewabilityConfigCallbackPairs>([\n {\n viewabilityConfig: { viewAreaCoveragePercentThreshold: 25 },\n onViewableItemsChanged: onViewableItemsChanged,\n },\n ]);\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n {\n height:\n styles.pickerItemContainer.height *\n numberOfItemsToShow,\n overflow: \"visible\",\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}>\n <FlatList\n ref={flatListRef}\n data={data}\n decelerationRate={0.88}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={(_, index) => index.toString()}\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 snapToOffset due to bug on Android\n snapToOffsets={[...Array(data.length)].map(\n (_, i) => i * styles.pickerItemContainer.height\n )}\n testID=\"duration-scroll-flatlist\"\n viewabilityConfigCallbackPairs={\n !disableInfiniteScroll\n ? viewabilityConfigCallbackPairs?.current\n : undefined\n }\n windowSize={numberOfItemsToShow}\n />\n <View pointerEvents=\"none\" 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 {LinearGradient ? (\n <>\n <LinearGradient\n colors={[\n styles.pickerContainer.backgroundColor ??\n \"white\",\n colorToRgba({\n color:\n styles.pickerContainer\n .backgroundColor ?? \"white\",\n opacity: 0,\n }),\n ]}\n end={{ x: 1, y: 1 }}\n pointerEvents=\"none\"\n start={{ x: 1, y: 0.3 }}\n {...pickerGradientOverlayProps}\n {...topPickerGradientOverlayProps}\n style={[styles.pickerGradientOverlay, { top: 0 }]}\n />\n <LinearGradient\n colors={[\n colorToRgba({\n color:\n styles.pickerContainer\n .backgroundColor ?? \"white\",\n opacity: 0,\n }),\n styles.pickerContainer.backgroundColor ??\n \"white\",\n ]}\n end={{ x: 1, y: 0.7 }}\n pointerEvents=\"none\"\n start={{ x: 1, y: 0 }}\n {...pickerGradientOverlayProps}\n {...bottomPickerGradientOverlayProps}\n style={[\n styles.pickerGradientOverlay,\n { bottom: -1 },\n ]}\n />\n </>\n ) : null}\n </View>\n );\n }\n);\n\nexport default React.memo(DurationScroll);\n"],"mappings":"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"}
@@ -64,7 +64,11 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
64
64
  if (Audio) {
65
65
  const {
66
66
  sound
67
- } = await Audio.Sound.createAsync(clickSoundAsset ?? require("../../assets/select_click.mp3"), {
67
+ } = await Audio.Sound.createAsync(clickSoundAsset ?? {
68
+ // use a hosted sound as a fallback (do not use local asset due to loader issues
69
+ // in some environments when including mp3 in library)
70
+ uri: "https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I"
71
+ }, {
68
72
  shouldPlay: false
69
73
  });
70
74
  setClickSound(sound);
@@ -1 +1 @@
1
- {"version":3,"names":["React","useRef","useCallback","forwardRef","useImperativeHandle","useState","useEffect","View","Text","FlatList","colorToRgba","generate12HourNumbers","generateNumbers","getAdjustedLimit","getScrollIndex","DurationScroll","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","bottomPickerGradientOverlayProps","clickSoundAsset","disableInfiniteScroll","Haptics","initialValue","is12HourPicker","isDisabled","label","limit","LinearGradient","numberOfItems","onDurationChange","padNumbersWithZero","padWithNItems","pickerGradientOverlayProps","pmLabel","styles","testID","topPickerGradientOverlayProps","data","repeatNTimes","numberOfItemsToShow","adjustedLimited","initialScrollIndex","value","latestDuration","lastFeedbackIndex","flatListRef","clickSound","setClickSound","loadSound","sound","Sound","createAsync","require","shouldPlay","unloadAsync","reset","options","_flatListRef$current","current","scrollToIndex","animated","index","setValue","_flatListRef$current2","renderItem","item","stringItem","intItem","isAm","parseInt","includes","replace","createElement","key","style","pickerItemContainer","pickerItem","max","min","disabledPickerItem","pointerEvents","pickerAmPmContainer","pickerAmPmLabel","onScroll","e","newIndex","Math","round","nativeEvent","contentOffset","y","height","newDuration","feedbackIndex","selectionAsync","replayAsync","onMomentumScrollEnd","_flatListRef$current3","targetScrollIndex","_flatListRef$current4","length","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current5","_flatListRef$current6","getItemLayout","_","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","undefined","overflow","disabledPickerContainer","decelerationRate","keyExtractor","toString","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","i","windowSize","pickerLabelContainer","pickerLabel","Fragment","_extends","colors","pickerContainer","backgroundColor","color","opacity","end","x","start","pickerGradientOverlay","top","bottom","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useState,\n useEffect,\n} from \"react\";\n\nimport { View, Text, FlatList } from \"react-native\";\nimport type {\n ViewabilityConfigCallbackPairs,\n ViewToken,\n NativeSyntheticEvent,\n NativeScrollEvent,\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 { getScrollIndex } from \"../../utils/getScrollIndex\";\n\nimport type { DurationScrollProps, DurationScrollRef } from \"./types\";\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(\n (props, ref) => {\n const {\n aggressivelyGetLatestDuration,\n allowFontScaling = false,\n amLabel,\n Audio,\n bottomPickerGradientOverlayProps,\n clickSoundAsset,\n disableInfiniteScroll = false,\n Haptics,\n initialValue = 0,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n numberOfItems,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerGradientOverlayProps,\n pmLabel,\n styles,\n testID,\n topPickerGradientOverlayProps,\n } = props;\n\n const data = !is12HourPicker\n ? generateNumbers(numberOfItems, {\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n })\n : generate12HourNumbers({\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n });\n\n const numberOfItemsToShow = 1 + padWithNItems * 2;\n\n const adjustedLimited = getAdjustedLimit(limit, numberOfItems);\n\n const initialScrollIndex = getScrollIndex({\n value: initialValue,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n });\n\n // 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<FlatList | null>(null);\n\n const [clickSound, setClickSound] = useState<\n | {\n replayAsync: () => Promise<void>;\n unloadAsync: () => Promise<void>;\n }\n | undefined\n >();\n\n // Preload the sound when the component mounts\n useEffect(() => {\n const loadSound = async () => {\n if (Audio) {\n const { sound } = await Audio.Sound.createAsync(\n clickSoundAsset ??\n require(\"../../assets/select_click.mp3\"),\n { shouldPlay: false }\n );\n setClickSound(sound);\n }\n };\n loadSound();\n\n // Unload sound when component unmounts\n return () => {\n clickSound?.unloadAsync();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [Audio]);\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: initialScrollIndex,\n });\n },\n setValue: (value, options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: getScrollIndex({\n value: value,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n }),\n });\n },\n latestDuration: latestDuration,\n }));\n\n const renderItem = useCallback(\n ({ item }: { item: string }) => {\n 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 return (\n <View\n key={item}\n style={styles.pickerItemContainer}\n testID=\"picker-item\">\n <Text\n allowFontScaling={allowFontScaling}\n style={[\n styles.pickerItem,\n intItem > adjustedLimited.max ||\n intItem < adjustedLimited.min\n ? styles.disabledPickerItem\n : {},\n ]}>\n {stringItem}\n </Text>\n {is12HourPicker ? (\n <View\n pointerEvents=\"none\"\n style={styles.pickerAmPmContainer}>\n <Text\n allowFontScaling={allowFontScaling}\n style={[styles.pickerAmPmLabel]}>\n {isAm ? amLabel : pmLabel}\n </Text>\n </View>\n ) : null}\n </View>\n );\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n allowFontScaling,\n amLabel,\n is12HourPicker,\n pmLabel,\n styles.disabledPickerItem,\n styles.pickerAmPmContainer,\n styles.pickerAmPmLabel,\n styles.pickerItem,\n styles.pickerItemContainer,\n ]\n );\n\n const onScroll = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n // this function is only used when the picker is in a modal 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) {\n return;\n }\n\n if (aggressivelyGetLatestDuration) {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n if (newDuration !== latestDuration.current) {\n // check limits\n if (newDuration > adjustedLimited.max) {\n newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n newDuration = adjustedLimited.min;\n }\n\n latestDuration.current = newDuration;\n }\n }\n\n if (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 Haptics?.selectionAsync();\n\n // play click sound if available\n clickSound?.replayAsync();\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 clickSound,\n disableInfiniteScroll,\n numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n // check limits\n if (newDuration > adjustedLimited.max) {\n const targetScrollIndex =\n newIndex - (newDuration - adjustedLimited.max);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex >= 0\n ? targetScrollIndex\n : adjustedLimited.max - 1,\n }); // scroll down to max\n newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n const targetScrollIndex =\n newIndex + (adjustedLimited.min - newDuration);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex <= data.length - 1\n ? targetScrollIndex\n : adjustedLimited.min,\n }); // scroll up to min\n newDuration = adjustedLimited.min;\n }\n\n onDurationChange(newDuration);\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n data.length,\n disableInfiniteScroll,\n numberOfItems,\n onDurationChange,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onViewableItemsChanged = useCallback(\n ({ viewableItems }: { viewableItems: ViewToken[] }) => {\n if (\n viewableItems[0]?.index &&\n viewableItems[0].index < numberOfItems * 0.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index + numberOfItems,\n });\n } else if (\n viewableItems[0]?.index &&\n viewableItems[0].index >= numberOfItems * 2.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index - numberOfItems,\n });\n }\n },\n [numberOfItems]\n );\n\n const getItemLayout = useCallback(\n (_: ArrayLike<string> | null | undefined, index: number) => ({\n length: styles.pickerItemContainer.height,\n offset: styles.pickerItemContainer.height * index,\n index,\n }),\n [styles.pickerItemContainer.height]\n );\n\n const viewabilityConfigCallbackPairs =\n useRef<ViewabilityConfigCallbackPairs>([\n {\n viewabilityConfig: { viewAreaCoveragePercentThreshold: 25 },\n onViewableItemsChanged: onViewableItemsChanged,\n },\n ]);\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n {\n height:\n styles.pickerItemContainer.height *\n numberOfItemsToShow,\n overflow: \"visible\",\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}>\n <FlatList\n ref={flatListRef}\n data={data}\n decelerationRate={0.88}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={(_, index) => index.toString()}\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 snapToOffset due to bug on Android\n snapToOffsets={[...Array(data.length)].map(\n (_, i) => i * styles.pickerItemContainer.height\n )}\n testID=\"duration-scroll-flatlist\"\n viewabilityConfigCallbackPairs={\n !disableInfiniteScroll\n ? viewabilityConfigCallbackPairs?.current\n : undefined\n }\n windowSize={numberOfItemsToShow}\n />\n <View pointerEvents=\"none\" 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 {LinearGradient ? (\n <>\n <LinearGradient\n colors={[\n styles.pickerContainer.backgroundColor ??\n \"white\",\n colorToRgba({\n color:\n styles.pickerContainer\n .backgroundColor ?? \"white\",\n opacity: 0,\n }),\n ]}\n end={{ x: 1, y: 1 }}\n pointerEvents=\"none\"\n start={{ x: 1, y: 0.3 }}\n {...pickerGradientOverlayProps}\n {...topPickerGradientOverlayProps}\n style={[styles.pickerGradientOverlay, { top: 0 }]}\n />\n <LinearGradient\n colors={[\n colorToRgba({\n color:\n styles.pickerContainer\n .backgroundColor ?? \"white\",\n opacity: 0,\n }),\n styles.pickerContainer.backgroundColor ??\n \"white\",\n ]}\n end={{ x: 1, y: 0.7 }}\n pointerEvents=\"none\"\n start={{ x: 1, y: 0 }}\n {...pickerGradientOverlayProps}\n {...bottomPickerGradientOverlayProps}\n style={[\n styles.pickerGradientOverlay,\n { bottom: -1 },\n ]}\n />\n </>\n ) : null}\n </View>\n );\n }\n);\n\nexport default React.memo(DurationScroll);\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useRef","useCallback","forwardRef","useImperativeHandle","useState","useEffect","View","Text","FlatList","colorToRgba","generate12HourNumbers","generateNumbers","getAdjustedLimit","getScrollIndex","DurationScroll","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","bottomPickerGradientOverlayProps","clickSoundAsset","disableInfiniteScroll","Haptics","initialValue","is12HourPicker","isDisabled","label","limit","LinearGradient","numberOfItems","onDurationChange","padNumbersWithZero","padWithNItems","pickerGradientOverlayProps","pmLabel","styles","testID","topPickerGradientOverlayProps","data","repeatNTimes","numberOfItemsToShow","adjustedLimited","initialScrollIndex","value","latestDuration","lastFeedbackIndex","flatListRef","clickSound","setClickSound","loadSound","sound","Sound","createAsync","uri","shouldPlay","unloadAsync","reset","options","_flatListRef$current","current","scrollToIndex","animated","index","setValue","_flatListRef$current2","renderItem","item","stringItem","intItem","isAm","parseInt","includes","replace","createElement","key","style","pickerItemContainer","pickerItem","max","min","disabledPickerItem","pointerEvents","pickerAmPmContainer","pickerAmPmLabel","onScroll","e","newIndex","Math","round","nativeEvent","contentOffset","y","height","newDuration","feedbackIndex","selectionAsync","replayAsync","onMomentumScrollEnd","_flatListRef$current3","targetScrollIndex","_flatListRef$current4","length","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current5","_flatListRef$current6","getItemLayout","_","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","undefined","overflow","disabledPickerContainer","decelerationRate","keyExtractor","toString","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","i","windowSize","pickerLabelContainer","pickerLabel","Fragment","_extends","colors","pickerContainer","backgroundColor","color","opacity","end","x","start","pickerGradientOverlay","top","bottom","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useState,\n useEffect,\n} from \"react\";\n\nimport { View, Text, FlatList } from \"react-native\";\nimport type {\n ViewabilityConfigCallbackPairs,\n ViewToken,\n NativeSyntheticEvent,\n NativeScrollEvent,\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 { getScrollIndex } from \"../../utils/getScrollIndex\";\n\nimport type { DurationScrollProps, DurationScrollRef } from \"./types\";\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(\n (props, ref) => {\n const {\n aggressivelyGetLatestDuration,\n allowFontScaling = false,\n amLabel,\n Audio,\n bottomPickerGradientOverlayProps,\n clickSoundAsset,\n disableInfiniteScroll = false,\n Haptics,\n initialValue = 0,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n numberOfItems,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerGradientOverlayProps,\n pmLabel,\n styles,\n testID,\n topPickerGradientOverlayProps,\n } = props;\n\n const data = !is12HourPicker\n ? generateNumbers(numberOfItems, {\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n })\n : generate12HourNumbers({\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n });\n\n const numberOfItemsToShow = 1 + padWithNItems * 2;\n\n const adjustedLimited = getAdjustedLimit(limit, numberOfItems);\n\n const initialScrollIndex = getScrollIndex({\n value: initialValue,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n });\n\n // 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<FlatList | null>(null);\n\n const [clickSound, setClickSound] = useState<\n | {\n replayAsync: () => Promise<void>;\n unloadAsync: () => Promise<void>;\n }\n | undefined\n >();\n\n // Preload the sound when the component mounts\n useEffect(() => {\n const loadSound = async () => {\n if (Audio) {\n const { sound } = 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 setClickSound(sound);\n }\n };\n loadSound();\n\n // Unload sound when component unmounts\n return () => {\n clickSound?.unloadAsync();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [Audio]);\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: initialScrollIndex,\n });\n },\n setValue: (value, options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: getScrollIndex({\n value: value,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n }),\n });\n },\n latestDuration: latestDuration,\n }));\n\n const renderItem = useCallback(\n ({ item }: { item: string }) => {\n 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 return (\n <View\n key={item}\n style={styles.pickerItemContainer}\n testID=\"picker-item\">\n <Text\n allowFontScaling={allowFontScaling}\n style={[\n styles.pickerItem,\n intItem > adjustedLimited.max ||\n intItem < adjustedLimited.min\n ? styles.disabledPickerItem\n : {},\n ]}>\n {stringItem}\n </Text>\n {is12HourPicker ? (\n <View\n pointerEvents=\"none\"\n style={styles.pickerAmPmContainer}>\n <Text\n allowFontScaling={allowFontScaling}\n style={[styles.pickerAmPmLabel]}>\n {isAm ? amLabel : pmLabel}\n </Text>\n </View>\n ) : null}\n </View>\n );\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n allowFontScaling,\n amLabel,\n is12HourPicker,\n pmLabel,\n styles.disabledPickerItem,\n styles.pickerAmPmContainer,\n styles.pickerAmPmLabel,\n styles.pickerItem,\n styles.pickerItemContainer,\n ]\n );\n\n const onScroll = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n // this function is only used when the picker is in a modal 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) {\n return;\n }\n\n if (aggressivelyGetLatestDuration) {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n if (newDuration !== latestDuration.current) {\n // check limits\n if (newDuration > adjustedLimited.max) {\n newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n newDuration = adjustedLimited.min;\n }\n\n latestDuration.current = newDuration;\n }\n }\n\n if (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 Haptics?.selectionAsync();\n\n // play click sound if available\n clickSound?.replayAsync();\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 clickSound,\n disableInfiniteScroll,\n numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n // check limits\n if (newDuration > adjustedLimited.max) {\n const targetScrollIndex =\n newIndex - (newDuration - adjustedLimited.max);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex >= 0\n ? targetScrollIndex\n : adjustedLimited.max - 1,\n }); // scroll down to max\n newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n const targetScrollIndex =\n newIndex + (adjustedLimited.min - newDuration);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex <= data.length - 1\n ? targetScrollIndex\n : adjustedLimited.min,\n }); // scroll up to min\n newDuration = adjustedLimited.min;\n }\n\n onDurationChange(newDuration);\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n data.length,\n disableInfiniteScroll,\n numberOfItems,\n onDurationChange,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onViewableItemsChanged = useCallback(\n ({ viewableItems }: { viewableItems: ViewToken[] }) => {\n if (\n viewableItems[0]?.index &&\n viewableItems[0].index < numberOfItems * 0.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index + numberOfItems,\n });\n } else if (\n viewableItems[0]?.index &&\n viewableItems[0].index >= numberOfItems * 2.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index - numberOfItems,\n });\n }\n },\n [numberOfItems]\n );\n\n const getItemLayout = useCallback(\n (_: ArrayLike<string> | null | undefined, index: number) => ({\n length: styles.pickerItemContainer.height,\n offset: styles.pickerItemContainer.height * index,\n index,\n }),\n [styles.pickerItemContainer.height]\n );\n\n const viewabilityConfigCallbackPairs =\n useRef<ViewabilityConfigCallbackPairs>([\n {\n viewabilityConfig: { viewAreaCoveragePercentThreshold: 25 },\n onViewableItemsChanged: onViewableItemsChanged,\n },\n ]);\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n {\n height:\n styles.pickerItemContainer.height *\n numberOfItemsToShow,\n overflow: \"visible\",\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}>\n <FlatList\n ref={flatListRef}\n data={data}\n decelerationRate={0.88}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={(_, index) => index.toString()}\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 snapToOffset due to bug on Android\n snapToOffsets={[...Array(data.length)].map(\n (_, i) => i * styles.pickerItemContainer.height\n )}\n testID=\"duration-scroll-flatlist\"\n viewabilityConfigCallbackPairs={\n !disableInfiniteScroll\n ? viewabilityConfigCallbackPairs?.current\n : undefined\n }\n windowSize={numberOfItemsToShow}\n />\n <View pointerEvents=\"none\" 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 {LinearGradient ? (\n <>\n <LinearGradient\n colors={[\n styles.pickerContainer.backgroundColor ??\n \"white\",\n colorToRgba({\n color:\n styles.pickerContainer\n .backgroundColor ?? \"white\",\n opacity: 0,\n }),\n ]}\n end={{ x: 1, y: 1 }}\n pointerEvents=\"none\"\n start={{ x: 1, y: 0.3 }}\n {...pickerGradientOverlayProps}\n {...topPickerGradientOverlayProps}\n style={[styles.pickerGradientOverlay, { top: 0 }]}\n />\n <LinearGradient\n colors={[\n colorToRgba({\n color:\n styles.pickerContainer\n .backgroundColor ?? \"white\",\n opacity: 0,\n }),\n styles.pickerContainer.backgroundColor ??\n \"white\",\n ]}\n end={{ x: 1, y: 0.7 }}\n pointerEvents=\"none\"\n start={{ x: 1, y: 0 }}\n {...pickerGradientOverlayProps}\n {...bottomPickerGradientOverlayProps}\n style={[\n styles.pickerGradientOverlay,\n { bottom: -1 },\n ]}\n />\n </>\n ) : null}\n </View>\n );\n }\n);\n\nexport default React.memo(DurationScroll);\n"],"mappings":"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"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "https://github.com/troberts-28"
7
7
  },
8
8
  "license": "MIT",
9
- "version": "1.8.1",
9
+ "version": "1.8.2",
10
10
  "main": "dist/commonjs/index.js",
11
11
  "types": "dist/typescript/src/index.d.ts",
12
12
  "scripts": {
@@ -98,8 +98,11 @@ const DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(
98
98
  const loadSound = async () => {
99
99
  if (Audio) {
100
100
  const { sound } = await Audio.Sound.createAsync(
101
- clickSoundAsset ??
102
- require("../../assets/select_click.mp3"),
101
+ clickSoundAsset ?? {
102
+ // use a hosted sound as a fallback (do not use local asset due to loader issues
103
+ // in some environments when including mp3 in library)
104
+ uri: "https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I",
105
+ },
103
106
  { shouldPlay: false }
104
107
  );
105
108
  setClickSound(sound);
Binary file
Binary file