@@ -2,15 +2,17 @@ import _ from 'lodash';
22import BottomTabsNode from '../Layouts/BottomTabsNode' ;
33import ParentNode from '../Layouts/ParentNode' ;
44import LayoutNodeFactory from '../Layouts/LayoutNodeFactory' ;
5- import { Options } from '../../src/interfaces/Options ' ;
5+ import { SideMenuNode } from '../Layouts/SideMenu ' ;
66import StackNode from '../Layouts/StackNode' ;
7+ import { Options } from '../../src/interfaces/Options' ;
78
89const remx = require ( 'remx' ) ;
910
1011const state = remx . state ( {
1112 root : { } ,
1213 modals : [ ] ,
1314 overlays : [ ] ,
15+ sideMenu : undefined ,
1416} ) ;
1517
1618const setters = remx . setters ( {
@@ -75,6 +77,12 @@ const setters = remx.setters({
7577 selectTabIndex ( layout : BottomTabsNode , index : number ) {
7678 getters . getLayoutById ( layout . nodeId ) . selectedIndex = index ;
7779 } ,
80+ openSideMenu ( layout : SideMenuNode ) {
81+ state . sideMenu = layout ;
82+ } ,
83+ closeSideMenu ( _layout : SideMenuNode ) {
84+ state . sideMenu = undefined ;
85+ } ,
7886 mergeOptions ( componentId : string , options : Options ) {
7987 const layout = getters . getLayoutById ( componentId ) ;
8088 if ( layout ) layout . mergeOptions ( options ) ;
@@ -87,12 +95,27 @@ const getters = remx.getters({
8795 return state . root ;
8896 } ,
8997 getVisibleLayout ( ) {
98+ let layout : ParentNode | undefined ;
9099 if ( state . modals . length > 0 ) {
91- return _ . last < ParentNode > ( state . modals ) ! . getVisibleLayout ( ) ;
92- } else if ( ! _ . isEqual ( state . root , { } ) ) return state . root . getVisibleLayout ( ) ;
100+ layout = _ . last < ParentNode > ( state . modals ) ! ;
101+ } else if ( ! _ . isEqual ( state . root , { } ) ) {
102+ layout = state . root ;
103+ }
104+
105+ // TODO revisit this logic; working or not - state.sideMenu has
106+ // to be touched here in order to force reevaluation of the visible layout
107+ // while side menu open/close handling (i.e. to move away-from / back-to the
108+ // side-menu center child).
109+ if ( layout && state . sideMenu && findNode ( state . sideMenu . nodeId , layout ! ) ) {
110+ layout = state . sideMenu . parentNode ;
111+ }
112+
113+ return layout ?. getVisibleLayout ( ) ;
93114 } ,
94115 isVisibleLayout ( layout : ParentNode ) {
95- return getters . getVisibleLayout ( ) && getters . getVisibleLayout ( ) . nodeId === layout . nodeId ;
116+ const nodeId = layout . nodeId ;
117+ const visibleLayout = getters . getVisibleLayout ( ) ;
118+ return visibleLayout ?. nodeId === nodeId ;
96119 } ,
97120 getModals ( ) {
98121 return state . modals ;
@@ -101,13 +124,12 @@ const getters = remx.getters({
101124 return state . overlays ;
102125 } ,
103126 getLayoutById ( layoutId : string ) {
104- if ( getters . getModalById ( layoutId ) )
105- return findParentNode ( layoutId , getters . getModalById ( layoutId ) ) ;
127+ if ( getters . getModalById ( layoutId ) ) return findNode ( layoutId , getters . getModalById ( layoutId ) ) ;
106128
107- return findParentNode ( layoutId , state . root ) ;
129+ return findNode ( layoutId , state . root ) ;
108130 } ,
109131 getModalById ( layoutId : string ) {
110- return _ . find ( state . modals , ( layout ) => findParentNode ( layoutId , layout ) ) ;
132+ return _ . find ( state . modals , ( layout ) => findNode ( layoutId , layout ) ) ;
111133 } ,
112134 getLayoutChildren ( layoutId : string ) {
113135 return getters . getLayoutById ( layoutId ) . children ;
@@ -120,13 +142,13 @@ const getters = remx.getters({
120142 } ,
121143} ) ;
122144
123- function findParentNode ( layoutId : string , layout : ParentNode ) : any | ParentNode {
145+ function findNode ( layoutId : string , layout : ParentNode ) : any | ParentNode {
124146 if ( layoutId === layout . nodeId ) {
125147 return layout ;
126148 } else if ( layout . children ) {
127149 for ( let i = 0 ; i < layout . children . length ; i += 1 ) {
128150 const child = layout . children [ i ] ;
129- const result = findParentNode ( layoutId , child ) ;
151+ const result = findNode ( layoutId , child ) ;
130152
131153 if ( result !== false ) {
132154 return result ;
0 commit comments