Skip to content

Infra/set haptic infra as an optional dependency #1245

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 8, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions demo/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ module.exports = {
get ChipsInputScreen() {
return require('./screens/componentScreens/ChipsInputScreen').default;
},
get HapticScreen() {
return require('./screens/componentScreens/HapticScreen').default;
},
get HintsScreen() {
return require('./screens/componentScreens/HintsScreen').default;
},
Expand Down
1 change: 1 addition & 0 deletions demo/src/screens/MenuStructure.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ export const navigationData = {
title: 'Animations & Gestures',
screens: [
{title: 'Animated Image', tags: 'animated image', screen: 'unicorn.components.AnimatedImageScreen'},
{title: 'Haptic feedback', tags: 'haptic feedback', screen: 'unicorn.components.HapticScreen'},
{title: 'ProgressiveImage', tags: 'progressive image cover overlay', screen: 'unicorn.components.ProgressiveImageScreen'},
{title: 'List Animations', tags: 'animated card', screen: 'unicorn.animations.ListAnimationsScreen'},
{title: 'Card Animations', tags: 'animated card', screen: 'unicorn.animations.CardAnimationsScreen'},
Expand Down
26 changes: 26 additions & 0 deletions demo/src/screens/componentScreens/HapticScreen.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import _ from 'lodash';
import React, {Component} from 'react';
import {ScrollView} from 'react-native';
import {View, Text, Button, HapticService} from 'react-native-ui-lib';

export default class HapticScreen extends Component {
onPress = ({method}: {method: string}) => {
HapticService.triggerHaptic(method, 'HapticScreen');
};

render() {
return (
<ScrollView showsVerticalScrollIndicator={false} keyboardShouldPersistTaps="always">
<View padding-20>
<Text text30 dark10 marginB-20>
Haptic Screen
</Text>

{_.map(HapticService.HapticMethods, method => {
return <Button marginV-8 marginH-60 label={method} key={method} onPress={() => this.onPress({method})}/>;
})}
</View>
</ScrollView>
);
}
}
1 change: 1 addition & 0 deletions demo/src/screens/componentScreens/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export function registerScreens(registrar) {
registrar('unicorn.components.DrawerScreen', () => require('./DrawerScreen').default);
registrar('unicorn.components.ExpandableSectionScreen', () => require('./ExpandableSectionScreen').default);
registrar('unicorn.components.ChipsInputScreen', () => require('./ChipsInputScreen').default);
registrar('unicorn.components.HapticScreen', () => require('./HapticScreen').default);
registrar('unicorn.components.HintsScreen', () => require('./HintsScreen').default);
registrar('unicorn.components.ImageScreen', () => require('./ImageScreen').default);
registrar('unicorn.components.ProgressiveImageScreen', () => require('./ProgressiveImageScreen').default);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
declare let HapticFeedbackPackage: any;
export default HapticFeedbackPackage;
1 change: 1 addition & 0 deletions generatedTypes/optionalDependencies/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export { default as DateTimePickerPackage } from './DateTimePickerPackage';
export { default as BlurViewPackage } from './BlurViewPackage';
export { default as NetInfoPackage } from './NetInfoPackage';
export { default as HapticFeedbackPackage } from './HapticFeedbackPackage';
export { PickerPackage, CommunityPickerPackage } from './PickerPackage';
6 changes: 6 additions & 0 deletions generatedTypes/services/HapticService.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
declare function triggerHaptic(hapticMethod: string, componentName: string): void;
declare const _default: {
HapticMethods: string[];
triggerHaptic: typeof triggerHaptic;
};
export default _default;
1 change: 1 addition & 0 deletions generatedTypes/services/index.d.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export { default as LogService } from './LogService';
export { default as HapticService } from './HapticService';
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@
"react-dom": "^15.4.2",
"react-native": "0.63.4",
"react-native-gesture-handler": "1.9.0",
"react-native-haptic-feedback": "^1.11.0",
"react-native-keyboard-tracking-view": "^5.6.1",
"react-native-navigation": "7.6.0",
"react-native-reanimated": "2.0.0",
Expand Down
3 changes: 3 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,9 @@ export default {
get LogService() {
return require('./services').LogService;
},
get HapticService() {
return require('./services').HapticService;
},

// NativeComponents
get HighlighterOverlayView() {
Expand Down
1 change: 1 addition & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ export {default as Avatar, AvatarPropTypes, AvatarProps} from './components/avat
export {default as Badge, BadgeProps} from './components/badge';
export {default as Card, CardPropTypes, CardProps, CardSectionProps} from './components/card';
export {default as Constants} from './helpers/Constants';
export {default as HapticService} from './services/HapticService';
export {default as View, ViewPropTypes, ViewProps} from './components/view';
export {default as Text, TextPropTypes, TextProps} from './components/text';
export {default as TouchableOpacity, TouchableOpacityProps} from './components/touchableOpacity';
Expand Down
6 changes: 6 additions & 0 deletions src/optionalDependencies/HapticFeedbackPackage.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
let HapticFeedbackPackage: any;
try {
HapticFeedbackPackage = require('react-native-haptic-feedback').default;
} catch (error) {}

export default HapticFeedbackPackage;
1 change: 1 addition & 0 deletions src/optionalDependencies/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export {default as DateTimePickerPackage} from './DateTimePickerPackage';
export {default as BlurViewPackage} from './BlurViewPackage';
export {default as NetInfoPackage} from './NetInfoPackage';
export {default as HapticFeedbackPackage} from './HapticFeedbackPackage';
export {PickerPackage, CommunityPickerPackage} from './PickerPackage';
29 changes: 29 additions & 0 deletions src/services/HapticService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import {HapticFeedbackPackage} from '../optionalDependencies';

const options = {
enableVibrateFallback: false,
ignoreAndroidSystemSettings: false
};

const HapticMethods = [
'selection',
'impactLight',
'impactMedium',
'impactHeavy',
'notificationSuccess',
'notificationWarning',
'notificationError'
];

function triggerHaptic(hapticMethod: string, componentName: string) {
if (HapticFeedbackPackage) {
HapticFeedbackPackage.trigger(hapticMethod, options);
} else {
console.error(`RNUILib ${componentName}'s requires installing "react-native-haptic-feedback" dependency`);
}
}

export default {
HapticMethods,
triggerHaptic
};
1 change: 1 addition & 0 deletions src/services/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export {default as LogService} from './LogService';
export {default as HapticService} from './HapticService';