Skip to content

Commit 94e09bd

Browse files
ethansharM-i-k-e-l
andauthored
Feat/optional dependencies (#1198)
* Create optional dependencies for safe requires * Remove GestureHandlerPackage * Update src/optionalDependencies/PickerPackage.ts Co-authored-by: Miki Leib <[email protected]> * Fix lint issues Co-authored-by: Miki Leib <[email protected]>
1 parent a959bb6 commit 94e09bd

File tree

17 files changed

+82
-25
lines changed

17 files changed

+82
-25
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
declare let BlurViewPackage: any;
2+
declare let DateTimePickerPackage: any;
3+
declare let NetInfoPackage: any;
4+
declare let PickerPackage: any, CommunityPickerPackage: any;
5+
export { BlurViewPackage, DateTimePickerPackage, NetInfoPackage, PickerPackage, CommunityPickerPackage };
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
declare let BlurViewPackage: any;
2+
export default BlurViewPackage;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
declare let DateTimePickerPackage: any;
2+
export default DateTimePickerPackage;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
declare let GestureHandlerPackage: any;
2+
export default GestureHandlerPackage;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
declare let NetInfoPackage: any;
2+
export default NetInfoPackage;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
declare let PickerPackage: any, CommunityPickerPackage: any;
2+
export { PickerPackage, CommunityPickerPackage };
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export { default as DateTimePickerPackage } from './DateTimePickerPackage';
2+
export { default as BlurViewPackage } from './BlurViewPackage';
3+
export { default as NetInfoPackage } from './NetInfoPackage';
4+
export { PickerPackage, CommunityPickerPackage } from './PickerPackage';

lib/components/WheelPicker/index.js

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,14 @@ import WheelPickerItem from './WheelPickerItem';
77
import {Constants} from '../../../src/helpers';
88
import {Typography, Colors} from '../../../src/style';
99

10-
/* Safely require picker component */
11-
let Picker = () => null;
12-
if (Constants.isIOS) {
13-
try {
14-
Picker = require('@react-native-picker/picker').Picker; // New package
15-
} catch (e) {
16-
try {
17-
Picker = require('@react-native-community/picker').Picker; // Deprecated package
18-
console.warn(`RNUILib Picker will soon migrate to use "@react-native-picker/picker" package instead of '@react-native-community/picker'`);
19-
} catch (e) {
20-
console.error(`RNUILib Picker requires installing "@react-native-picker/picker" dependency`);
21-
}
10+
import {PickerPackage, CommunityPickerPackage} from '../../../src/optionalDependencies';
11+
const Picker = PickerPackage?.Picker || CommunityPickerPackage?.Picker || (() => null);
12+
13+
if (!PickerPackage) {
14+
if (CommunityPickerPackage) {
15+
console.warn(`RNUILib Picker will soon migrate to use "@react-native-picker/picker" package instead of '@react-native-community/picker'`);
16+
} else {
17+
console.error(`RNUILib Picker requires installing "@react-native-picker/picker" dependency`);
2218
}
2319
}
2420

src/components/card/index.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,14 @@ import TouchableOpacity, {TouchableOpacityProps} from '../touchableOpacity';
1515
import Image from '../image';
1616
import CardImage from './CardImage';
1717
import CardSection, {CardSectionProps} from './CardSection';
18+
import {BlurViewPackage} from '../../optionalDependencies';
1819
// @ts-ignore
1920
import Assets from '../../assets';
2021
import CardContext from './CardContext';
2122
import * as CardPresenter from './CardPresenter';
2223

23-
let BlurView: any;
24-
try {
25-
BlurView = require('@react-native-community/blur').BlurView;
26-
} catch (error) {} // warning in ctor, depends if user pass enableBlur
24+
const BlurView = BlurViewPackage?.BlurView;
25+
2726

2827
const DEFAULT_BORDER_RADIUS = BorderRadiuses.br40;
2928
const DEFAULT_SELECTION_PROPS = {

src/components/connectionStatusBar/index.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React from 'react';
22
import PropTypes from 'prop-types';
33
import _ from 'lodash';
44
import {StyleSheet, Text} from 'react-native';
5-
import NetInfo from '@react-native-community/netinfo';
5+
import {NetInfoPackage as NetInfo} from '../../optionalDependencies';
66
import {Constants} from '../../helpers';
77
import {PureBaseComponent} from '../../commons';
88
import {Colors, Typography} from '../../style';
@@ -59,15 +59,20 @@ export default class ConnectionStatusBar extends PureBaseComponent {
5959
isConnected: true,
6060
isCancelled: false
6161
};
62-
this.getInitialConnectionState();
62+
63+
if (NetInfo) {
64+
this.getInitialConnectionState();
65+
} else {
66+
console.error(`RNUILib ConnectionStatusBar component requires installing "@react-native-community/netinfo" dependency`);
67+
}
6368
}
6469

6570
generateStyles() {
6671
this.styles = createStyles();
6772
}
6873

6974
componentDidMount() {
70-
this.unsubscribe = NetInfo.addEventListener(this.onConnectionChange);
75+
this.unsubscribe = NetInfo?.addEventListener(this.onConnectionChange);
7176
}
7277

7378
componentWillUnmount() {
@@ -100,7 +105,7 @@ export default class ConnectionStatusBar extends PureBaseComponent {
100105
}
101106

102107
async getInitialConnectionState() {
103-
const isConnected = (await NetInfo.fetch()).isConnected;
108+
const isConnected = (await NetInfo?.fetch()).isConnected;
104109

105110
this.setState({isConnected});
106111
if (this.props.onConnectionChange) {

src/components/dateTimePicker/index.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
33
import moment from 'moment';
44
import React, {Component} from 'react';
55
import {StyleSheet} from 'react-native';
6-
import RNDateTimePicker from '@react-native-community/datetimepicker';
6+
import {DateTimePickerPackage as RNDateTimePicker} from '../../optionalDependencies';
77
import {Constants} from '../../helpers';
88
import {Colors} from '../../style';
99
import Assets from '../../assets';
@@ -115,6 +115,10 @@ class DateTimePicker extends Component {
115115
prevValue: props.value,
116116
value: props.value
117117
};
118+
119+
if (!RNDateTimePicker) {
120+
console.error(`RNUILib DateTimePicker component requires installing "@react-native-community/datetimepicker" dependency`);
121+
}
118122
}
119123

120124
static getDerivedStateFromProps(nextProps, prevState) {
@@ -226,6 +230,10 @@ class DateTimePicker extends Component {
226230
}
227231

228232
renderDateTimePicker() {
233+
if (!RNDateTimePicker) {
234+
return null;
235+
}
236+
229237
const {value, showExpandableOverlay} = this.state;
230238
const {mode, minimumDate, maximumDate, locale, is24Hour, minuteInterval, timeZoneOffsetInMinutes} = this.props;
231239

src/components/modal/index.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import _ from 'lodash';
22
import React, {Component} from 'react';
33
import {StyleSheet, Modal as RNModal, ModalProps as RNModalProps, TouchableWithoutFeedback, GestureResponderEvent} from 'react-native';
4+
import {BlurViewPackage} from '../../optionalDependencies';
45
import {Constants} from '../../helpers';
56
import {asBaseComponent} from '../../commons/new';
67
import TopBar, {ModalTopBarProps} from './TopBar';
78
import View from '../../components/view';
89

9-
let BlurView: any;
10-
try {
11-
BlurView = require('@react-native-community/blur').BlurView;
12-
} catch (error) {} // warning in ctor, depends if user pass enableBlur
10+
const BlurView = BlurViewPackage?.BlurView;
1311

1412
export {ModalTopBarProps};
1513
export interface ModalProps extends RNModalProps {
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
let BlurViewPackage: any;
2+
try {
3+
BlurViewPackage = require('@react-native-community/blur');
4+
} catch (error) {}
5+
6+
export default BlurViewPackage;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
let DateTimePickerPackage: any;
2+
try {
3+
DateTimePickerPackage = require('@react-native-community/datetimepicker')?.default;
4+
} catch (error) {}
5+
6+
export default DateTimePickerPackage;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
let NetInfoPackage: any;
2+
try {
3+
NetInfoPackage = require('@react-native-community/netinfo');
4+
} catch (error) {}
5+
6+
export default NetInfoPackage;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
let PickerPackage: any, CommunityPickerPackage: any;
2+
try {
3+
PickerPackage = require('@react-native-picker/picker'); // New package
4+
} catch (error) {
5+
try {
6+
CommunityPickerPackage = require('@react-native-community/picker'); // Deprecated package
7+
} catch (error) {}
8+
}
9+
10+
export {PickerPackage, CommunityPickerPackage};

src/optionalDependencies/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export {default as DateTimePickerPackage} from './DateTimePickerPackage';
2+
export {default as BlurViewPackage} from './BlurViewPackage';
3+
export {default as NetInfoPackage} from './NetInfoPackage';
4+
export {PickerPackage, CommunityPickerPackage} from './PickerPackage';

0 commit comments

Comments
 (0)