40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import {isIOS, isWeb} from 'platform/detection'
|
|
import ReactNativeHapticFeedback, {
|
|
HapticFeedbackTypes,
|
|
} from 'react-native-haptic-feedback'
|
|
|
|
const hapticImpact: HapticFeedbackTypes = isIOS ? 'impactMedium' : 'impactLight' // Users said the medium impact was too strong on Android; see APP-537s
|
|
|
|
export class Haptics {
|
|
static default() {
|
|
if (isWeb) {
|
|
return
|
|
}
|
|
ReactNativeHapticFeedback.trigger(hapticImpact)
|
|
}
|
|
static impact(type: HapticFeedbackTypes = hapticImpact) {
|
|
if (isWeb) {
|
|
return
|
|
}
|
|
ReactNativeHapticFeedback.trigger(type)
|
|
}
|
|
static selection() {
|
|
if (isWeb) {
|
|
return
|
|
}
|
|
ReactNativeHapticFeedback.trigger('selection')
|
|
}
|
|
static notification = (type: 'success' | 'warning' | 'error') => {
|
|
if (isWeb) {
|
|
return
|
|
}
|
|
switch (type) {
|
|
case 'success':
|
|
return ReactNativeHapticFeedback.trigger('notificationSuccess')
|
|
case 'warning':
|
|
return ReactNativeHapticFeedback.trigger('notificationWarning')
|
|
case 'error':
|
|
return ReactNativeHapticFeedback.trigger('notificationError')
|
|
}
|
|
}
|
|
}
|