about summary refs log tree commit diff
path: root/src/lib/haptics.ts
blob: b22d69d703c20103b1d5c7d61752f7544c3057c3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import {
  impactAsync,
  ImpactFeedbackStyle,
  notificationAsync,
  NotificationFeedbackType,
  selectionAsync,
} from 'expo-haptics'

import {isIOS, isWeb} from 'platform/detection'

const hapticImpact: ImpactFeedbackStyle = isIOS
  ? ImpactFeedbackStyle.Medium
  : ImpactFeedbackStyle.Light // Users said the medium impact was too strong on Android; see APP-537s

export class Haptics {
  static default() {
    if (isWeb) {
      return
    }
    impactAsync(hapticImpact)
  }
  static impact(type: ImpactFeedbackStyle = hapticImpact) {
    if (isWeb) {
      return
    }
    impactAsync(type)
  }
  static selection() {
    if (isWeb) {
      return
    }
    selectionAsync()
  }
  static notification = (type: 'success' | 'warning' | 'error') => {
    if (isWeb) {
      return
    }
    switch (type) {
      case 'success':
        return notificationAsync(NotificationFeedbackType.Success)
      case 'warning':
        return notificationAsync(NotificationFeedbackType.Warning)
      case 'error':
        return notificationAsync(NotificationFeedbackType.Error)
    }
  }
}