Skip to content

Commit 176e5be

Browse files
committed
Add support for side-menu control via push()
1 parent 1e258b8 commit 176e5be

5 files changed

Lines changed: 31 additions & 11 deletions

File tree

lib/Mock/Layouts/BottomTabsNode.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ export default class BottomTabsNode extends ParentNode {
1010
this.selectedIndex = layout.data?.options?.bottomTabs?.currentTabIndex || 0;
1111
}
1212

13-
mergeOptions(options: Options) {
14-
super.mergeOptions(options);
13+
mergeOptions(_options: Options) {
14+
super.mergeOptions(_options);
15+
16+
const { options } = this.data;
1517
if (options.bottomTabs?.currentTabIndex) {
1618
this.selectedIndex = options.bottomTabs?.currentTabIndex;
1719
switchTabByIndex(this, this.selectedIndex);

lib/Mock/Layouts/ParentNode.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ export default class ParentNode extends Node {
3535
return this;
3636
}
3737

38+
applyOptions(_options: Options) {
39+
this.parentNode?.applyOptions(_options);
40+
}
41+
3842
mergeOptions(options: Options) {
3943
this.data.options = _.mergeWith(this.data.options, options, (objValue, srcValue, key) => {
4044
if (_.isArray(objValue)) {

lib/Mock/Layouts/SideMenu.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ export default class SideMenuRootNode extends ParentNode {
2020
}
2121
}
2222

23+
applyOptions(_options: Options) {
24+
super.applyOptions(_options);
25+
26+
this._updateVisibility(_options);
27+
}
28+
2329
mergeOptions(options: Options) {
2430
super.mergeOptions(options);
2531

@@ -34,15 +40,17 @@ export default class SideMenuRootNode extends ParentNode {
3440
}
3541

3642
_updateVisibility(options: Options) {
37-
if (options.sideMenu?.left?.visible) {
38-
this.visibleChild = this._getLeftChild();
39-
layoutActions.openSideMenu(this.visibleChild);
40-
} else if (options.sideMenu?.right?.visible) {
41-
this.visibleChild = this._getRightChild();
42-
layoutActions.openSideMenu(this.visibleChild);
43-
} else {
44-
this.visibleChild = this._getCenterChild();
45-
layoutActions.closeSideMenu(this.visibleChild);
43+
if (options.sideMenu) {
44+
if (options.sideMenu.left?.visible) {
45+
this.visibleChild = this._getLeftChild();
46+
layoutActions.openSideMenu(this.visibleChild);
47+
} else if (options.sideMenu.right?.visible) {
48+
this.visibleChild = this._getRightChild();
49+
layoutActions.openSideMenu(this.visibleChild);
50+
} else {
51+
this.visibleChild = this._getCenterChild();
52+
layoutActions.closeSideMenu(this.visibleChild);
53+
}
4654
}
4755
}
4856

lib/Mock/Stores/LayoutStore.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,11 @@ const setters = remx.setters({
8383
closeSideMenu(_layout: SideMenuNode) {
8484
state.sideMenu = undefined;
8585
},
86+
applyOptions(componentId: string, options: Options) {
87+
const layout = getters.getLayoutById(componentId);
88+
if (layout) layout.applyOptions(options);
89+
else console.warn(`[RNN error] Merge options failure: cannot find layout for: ${componentId}`);
90+
},
8691
mergeOptions(componentId: string, options: Options) {
8792
const layout = getters.getLayoutById(componentId);
8893
if (layout) layout.mergeOptions(options);

lib/Mock/mocks/NativeCommandsSender.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export class NativeCommandsSender {
3939
const layoutNode = LayoutNodeFactory.create(layout, stack);
4040
stack.getVisibleLayout().componentDidDisappear();
4141
LayoutStore.push(layoutNode, stack);
42+
LayoutStore.applyOptions(layoutNode.nodeId, layoutNode.data.options);
4243
stack.getVisibleLayout().componentDidAppear();
4344
resolve(stack.getVisibleLayout().nodeId);
4445
this.reportCommandCompletion(CommandName.Push, commandId);

0 commit comments

Comments
 (0)