import { NativeModule, NativeModules, Vibration } from 'react-native'; import { isAndroid } from '../platform'; import { getHapticPatternValue, getIOSHapticPatternValue } from './getHapticPattern'; import { IHapticFeedbackProps } from './type'; interface IHapticFeedbackModule extends NativeModule { trigger: (variant: 'light' | 'medium' | 'heavy' | 'soft' | 'rigid', intensity?: number) => void; } const { HapticFeedback: HapticFeedbackModule } = NativeModules as { HapticFeedback: IHapticFeedbackModule }; export class HapticFeedback { static vibrate({ pattern, repeat = false, variant = 'subtle' }: IHapticFeedbackProps) { if (isAndroid()) { Vibration.vibrate(pattern || getHapticPatternValue(variant), repeat); } else { const hapticVariant = getIOSHapticPatternValue(variant); /** * !NOTE: We are not using intensity as of now. */ HapticFeedbackModule.trigger(hapticVariant, -1); } } }