react-native-sortables
Version:
Powerful Sortable Components for Flexible Content Reordering in React Native
45 lines (36 loc) • 1.01 kB
text/typescript
import { useCallback, useMemo } from 'react';
import { useDerivedValue } from 'react-native-reanimated';
import { IS_WEB } from '../../../constants';
import { ReactNativeHapticFeedback } from '../adapters';
type HapticImpact = {
light(): void;
medium(): void;
};
let hapticFeedback: null | ReturnType<typeof ReactNativeHapticFeedback.load> =
null;
export default function useHaptics(enabled: boolean): HapticImpact {
const isEnabled = !IS_WEB && enabled;
const enabledValue = useDerivedValue(() => isEnabled);
if (isEnabled && !hapticFeedback) {
hapticFeedback = ReactNativeHapticFeedback.load();
}
const light = useCallback(() => {
'worklet';
if (enabledValue.value) {
hapticFeedback?.('impactLight');
}
}, [enabledValue]);
const medium = useCallback(() => {
'worklet';
if (enabledValue.value) {
hapticFeedback?.('impactMedium');
}
}, [enabledValue]);
return useMemo(
() => ({
light,
medium
}),
[light, medium]
);
}