react-native-navigation
Version:
React Native Navigation - truly native navigation for iOS and Android
72 lines (70 loc) • 2.28 kB
JavaScript
;
import ParentNode from "./ParentNode.js";
import * as layoutActions from "../actions/layoutActions.js";
const isCenterChild = child => child.type === 'SideMenuCenter';
const isLeftChild = child => child.type === 'SideMenuLeft';
const isRightChild = child => child.type === 'SideMenuRight';
export default class SideMenuRootNode extends ParentNode {
constructor(layout, parentNode) {
super(layout, 'SideMenuRoot', parentNode);
this.visibleChild = this._getCenterChild();
if (!this.visibleChild) {
throw new Error('SideMenuRootNode must have a SideMenuCenter child');
}
}
applyOptions(_options) {
super.applyOptions(_options);
this._updateVisibility(_options);
}
mergeOptions(options) {
super.mergeOptions(options);
this._updateVisibility(options);
}
/**
* @override
*/
getVisibleLayout() {
return this.visibleChild.getVisibleLayout();
}
_updateVisibility(options) {
if (options.sideMenu) {
if (options.sideMenu.left?.visible) {
this.visibleChild = this._getLeftChild();
layoutActions.openSideMenu(this.visibleChild);
} else if (options.sideMenu.right?.visible) {
this.visibleChild = this._getRightChild();
layoutActions.openSideMenu(this.visibleChild);
} else {
this.visibleChild = this._getCenterChild();
layoutActions.closeSideMenu(this.visibleChild);
}
}
}
_getCenterChild = () => this.children.find(isCenterChild);
_getLeftChild = () => this.children.find(isLeftChild);
_getRightChild = () => this.children.find(isRightChild);
}
export class SideMenuNode extends ParentNode {
constructor(layout, type, parentNode) {
super(layout, type, parentNode);
}
getVisibleLayout() {
return this.children[0].getVisibleLayout();
}
}
export class SideMenuLeftNode extends SideMenuNode {
constructor(layout, parentNode) {
super(layout, 'SideMenuLeft', parentNode);
}
}
export class SideMenuRightNode extends SideMenuNode {
constructor(layout, parentNode) {
super(layout, 'SideMenuRight', parentNode);
}
}
export class SideMenuCenterNode extends SideMenuNode {
constructor(layout, parentNode) {
super(layout, 'SideMenuCenter', parentNode);
}
}
//# sourceMappingURL=SideMenu.js.map