react-native-split-screen
Version:

116 lines (107 loc) • 3.43 kB
JavaScript
import React from 'react';
import { View, StyleSheet } from 'react-native';
import { CommonActions, StackActions } from '@react-navigation/native';
var SplitView = function SplitView(_ref) {
var master = _ref.master,
detail = _ref.detail,
containerStyle = _ref.containerStyle,
masterStyle = _ref.masterStyle,
detailStyle = _ref.detailStyle;
return React.createElement(View, {
style: [styles.container, containerStyle]
}, React.createElement(View, {
style: [styles.masterView, masterStyle]
}, master), React.createElement(View, {
style: [styles.detailView, detailStyle]
}, detail));
};
var styles = /*#__PURE__*/StyleSheet.create({
container: {
flex: 1,
flexDirection: 'row'
},
masterView: {
flex: 1,
maxWidth: 400,
borderRightWidth: 1
},
detailView: {
flex: 1,
overflow: 'hidden'
}
});
var TabletContext = /*#__PURE__*/React.createContext(false);
var TabletContextProvider = function TabletContextProvider(_ref) {
var _ref$isTablet = _ref.isTablet,
isTablet = _ref$isTablet === void 0 ? false : _ref$isTablet,
children = _ref.children;
var state = React.useState(isTablet);
return React.createElement(TabletContext.Provider, {
value: state
}, children);
};
var useIsTablet = function useIsTablet() {
return React.useContext(TabletContext);
};
var Navigator = function Navigator() {
var _this = this;
// 设置路由
this.setNavigator = function (navigatorInstance) {
_this.navigator = navigatorInstance;
};
// 校验当前路由是否已挂载
this.isMounted = function () {
return Boolean(_this.navigator);
};
// 路由dispatch方法
this.dispatch = function (action) {
_this.navigator.dispatch(action);
};
// 调用CommonActions.navigate
this.navigate = function (screenName, params) {
_this.dispatch(CommonActions.navigate({
name: screenName,
params: params
}));
};
// 调用StackActions.push
this.push = function (screenName, params) {
_this.dispatch(StackActions.push(screenName, params));
};
};
var _Navigator = /*#__PURE__*/new Navigator(),
isDetailNavigatorMounted = _Navigator.isMounted,
detailPush = _Navigator.push,
detailNavigate = _Navigator.navigate,
setDetailNavigator = _Navigator.setNavigator;
var _Navigator$1 = /*#__PURE__*/new Navigator(),
masterPush = _Navigator$1.push,
masterNavigate = _Navigator$1.navigate,
setMasterNavigator = _Navigator$1.setNavigator;
/**
* 调用路由navigate方法
* @param routeName 路由名称
* @param params 路由参数
*/
var navigate = function navigate(routeName, params) {
if (isDetailNavigatorMounted()) {
return detailNavigate(routeName, params);
}
return masterNavigate(routeName, params);
};
/**
* 调用路由push方法
* @param routeName 路由名称
* @param params 路由参数
*/
var push = function push(routeName, params) {
if (isDetailNavigatorMounted()) {
return detailPush(routeName, params);
}
return masterPush(routeName, params);
};
var SplitView$1 = function SplitView$1(props) {
return React.createElement(SplitView, Object.assign({}, props));
};
export { SplitView$1 as SplitView, TabletContextProvider, detailNavigate, detailPush, isDetailNavigatorMounted, masterNavigate, masterPush, navigate, push, setDetailNavigator, setMasterNavigator, useIsTablet };
//# sourceMappingURL=react-native-split-screen.esm.js.map