Skip to content

Commit e2ca7fa

Browse files
authored
Infra/set haptic infra as an optional dependency (#1245)
* set haptic infra as optional dependency * move haptic-feedback to devDep * export HapticService
1 parent 9e9dad6 commit e2ca7fa

File tree

15 files changed

+83
-0
lines changed

15 files changed

+83
-0
lines changed

demo/src/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ module.exports = {
5858
get ChipsInputScreen() {
5959
return require('./screens/componentScreens/ChipsInputScreen').default;
6060
},
61+
get HapticScreen() {
62+
return require('./screens/componentScreens/HapticScreen').default;
63+
},
6164
get HintsScreen() {
6265
return require('./screens/componentScreens/HintsScreen').default;
6366
},

demo/src/screens/MenuStructure.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ export const navigationData = {
139139
title: 'Animations & Gestures',
140140
screens: [
141141
{title: 'Animated Image', tags: 'animated image', screen: 'unicorn.components.AnimatedImageScreen'},
142+
{title: 'Haptic feedback', tags: 'haptic feedback', screen: 'unicorn.components.HapticScreen'},
142143
{title: 'ProgressiveImage', tags: 'progressive image cover overlay', screen: 'unicorn.components.ProgressiveImageScreen'},
143144
{title: 'List Animations', tags: 'animated card', screen: 'unicorn.animations.ListAnimationsScreen'},
144145
{title: 'Card Animations', tags: 'animated card', screen: 'unicorn.animations.CardAnimationsScreen'},
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import _ from 'lodash';
2+
import React, {Component} from 'react';
3+
import {ScrollView} from 'react-native';
4+
import {View, Text, Button, HapticService} from 'react-native-ui-lib';
5+
6+
export default class HapticScreen extends Component {
7+
onPress = ({method}: {method: string}) => {
8+
HapticService.triggerHaptic(method, 'HapticScreen');
9+
};
10+
11+
render() {
12+
return (
13+
<ScrollView showsVerticalScrollIndicator={false} keyboardShouldPersistTaps="always">
14+
<View padding-20>
15+
<Text text30 dark10 marginB-20>
16+
Haptic Screen
17+
</Text>
18+
19+
{_.map(HapticService.HapticMethods, method => {
20+
return <Button marginV-8 marginH-60 label={method} key={method} onPress={() => this.onPress({method})}/>;
21+
})}
22+
</View>
23+
</ScrollView>
24+
);
25+
}
26+
}

demo/src/screens/componentScreens/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export function registerScreens(registrar) {
1818
registrar('unicorn.components.DrawerScreen', () => require('./DrawerScreen').default);
1919
registrar('unicorn.components.ExpandableSectionScreen', () => require('./ExpandableSectionScreen').default);
2020
registrar('unicorn.components.ChipsInputScreen', () => require('./ChipsInputScreen').default);
21+
registrar('unicorn.components.HapticScreen', () => require('./HapticScreen').default);
2122
registrar('unicorn.components.HintsScreen', () => require('./HintsScreen').default);
2223
registrar('unicorn.components.ImageScreen', () => require('./ImageScreen').default);
2324
registrar('unicorn.components.ProgressiveImageScreen', () => require('./ProgressiveImageScreen').default);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
declare let HapticFeedbackPackage: any;
2+
export default HapticFeedbackPackage;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export { default as DateTimePickerPackage } from './DateTimePickerPackage';
22
export { default as BlurViewPackage } from './BlurViewPackage';
33
export { default as NetInfoPackage } from './NetInfoPackage';
4+
export { default as HapticFeedbackPackage } from './HapticFeedbackPackage';
45
export { PickerPackage, CommunityPickerPackage } from './PickerPackage';
56
export { default as SvgPackage } from './SvgPackage';
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
declare function triggerHaptic(hapticMethod: string, componentName: string): void;
2+
declare const _default: {
3+
HapticMethods: string[];
4+
triggerHaptic: typeof triggerHaptic;
5+
};
6+
export default _default;

generatedTypes/services/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export { default as LogService } from './LogService';
2+
export { default as HapticService } from './HapticService';

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@
9898
"react-dom": "^15.4.2",
9999
"react-native": "0.63.4",
100100
"react-native-gesture-handler": "1.9.0",
101+
"react-native-haptic-feedback": "^1.11.0",
101102
"react-native-keyboard-tracking-view": "^5.6.1",
102103
"react-native-navigation": "7.6.0",
103104
"react-native-svg": "^12.1.0",

src/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,9 @@ export default {
250250
get LogService() {
251251
return require('./services').LogService;
252252
},
253+
get HapticService() {
254+
return require('./services').HapticService;
255+
},
253256

254257
// NativeComponents
255258
get HighlighterOverlayView() {

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export {default as Avatar, AvatarPropTypes, AvatarProps} from './components/avat
2424
export {default as Badge, BadgeProps} from './components/badge';
2525
export {default as Card, CardPropTypes, CardProps, CardSectionProps} from './components/card';
2626
export {default as Constants} from './helpers/Constants';
27+
export {default as HapticService} from './services/HapticService';
2728
export {default as View, ViewPropTypes, ViewProps} from './components/view';
2829
export {default as Text, TextPropTypes, TextProps} from './components/text';
2930
export {default as TouchableOpacity, TouchableOpacityProps} from './components/touchableOpacity';
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
let HapticFeedbackPackage: any;
2+
try {
3+
HapticFeedbackPackage = require('react-native-haptic-feedback').default;
4+
} catch (error) {}
5+
6+
export default HapticFeedbackPackage;

src/optionalDependencies/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export {default as DateTimePickerPackage} from './DateTimePickerPackage';
22
export {default as BlurViewPackage} from './BlurViewPackage';
33
export {default as NetInfoPackage} from './NetInfoPackage';
4+
export {default as HapticFeedbackPackage} from './HapticFeedbackPackage';
45
export {PickerPackage, CommunityPickerPackage} from './PickerPackage';
56
export {default as SvgPackage} from './SvgPackage';

src/services/HapticService.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import {HapticFeedbackPackage} from '../optionalDependencies';
2+
3+
const options = {
4+
enableVibrateFallback: false,
5+
ignoreAndroidSystemSettings: false
6+
};
7+
8+
const HapticMethods = [
9+
'selection',
10+
'impactLight',
11+
'impactMedium',
12+
'impactHeavy',
13+
'notificationSuccess',
14+
'notificationWarning',
15+
'notificationError'
16+
];
17+
18+
function triggerHaptic(hapticMethod: string, componentName: string) {
19+
if (HapticFeedbackPackage) {
20+
HapticFeedbackPackage.trigger(hapticMethod, options);
21+
} else {
22+
console.error(`RNUILib ${componentName}'s requires installing "react-native-haptic-feedback" dependency`);
23+
}
24+
}
25+
26+
export default {
27+
HapticMethods,
28+
triggerHaptic
29+
};

src/services/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export {default as LogService} from './LogService';
2+
export {default as HapticService} from './HapticService';

0 commit comments

Comments
 (0)