@@ -51,9 +51,13 @@ const _apiProps = {
5151 return this ;
5252 } ,
5353 _subscribeSelectedTabsHistory : function ( ) {
54- this . on ( 'onChange' , ( { currentData, perviousData} ) => {
54+ this . on ( 'onChange' , ( { currentData, perviousData, closeTabIDs} ) => {
55+ for ( let i = 0 , l = closeTabIDs . length ; i < l ; i ++ ) {
56+ this . activedTabsHistory . remove ( closeTabIDs [ i ] ) ;
57+ }
5558 const isSwitched = perviousData . selectedTabID !== currentData . selectedTabID ;
56- isSwitched && this . activedTabsHistory . add ( perviousData . selectedTabID ) ;
59+ if ( isSwitched && this . isOpen ( perviousData . selectedTabID ) && ! this . isSelected ( perviousData . selectedTabID ) )
60+ this . activedTabsHistory . add ( perviousData . selectedTabID ) ;
5761 } ) ;
5862 return this ;
5963 } ,
@@ -98,37 +102,37 @@ const _apiProps = {
98102 this . _select ( id ) ;
99103 return result ;
100104 } ,
101- _findTabIdForSwitching : ( function ( ) {
102- const _findOpenedAndNoneDisableTabId = function ( tabsIdArr , isRightToLeft ) {
103- return (
104- this . helper . arrFilterUntilFirstValue (
105- tabsIdArr ,
106- ( id ) => this . isOpen ( id ) && ! this . getTab ( id ) . disable && ! this . isSelected ( id ) ,
107- isRightToLeft ,
108- ) || ''
109- ) ;
110- } ,
111- _getPreSelectedTabId = function ( ) {
112- return _findOpenedAndNoneDisableTabId . call ( this , [ ... this . activedTabsHistory . tabsId ] , true ) ;
113- } ,
114- _getPreSiblingTabId = function ( ) {
115- const data = this . stateRef ,
116- arr = data . openTabIDs ;
117- return _findOpenedAndNoneDisableTabId . call ( this , arr . slice ( 0 , arr . indexOf ( data . selectedTabID ) ) , true ) ;
118- } ,
119- _getNextSiblingTabId = function ( ) {
120- const data = this . stateRef ,
121- arr = data . openTabIDs ;
122- return _findOpenedAndNoneDisableTabId . call ( this , arr . slice ( arr . indexOf ( data . selectedTabID ) + 1 ) ) ;
123- } ;
124- return function ( ) {
125- let tabId = '' ;
126- tabId = _getPreSelectedTabId . call ( this ) ;
127- tabId = tabId || _getPreSiblingTabId . call ( this ) ;
128- tabId = tabId || _getNextSiblingTabId . call ( this ) ;
129- return tabId ;
130- } ;
131- } ) ( ) ,
105+ _getPreSelectedTabId : function ( ) {
106+ const selectedTabHistory = this . activedTabsHistory ;
107+ let tabID = '' ;
108+ while ( ! tabID && selectedTabHistory . tabsId . length ) {
109+ const _tabID = selectedTabHistory . popLastTabID ( ) ;
110+ if ( _tabID ) {
111+ const _tabData = this . getTab ( _tabID ) ;
112+ if ( _tabData && ! _tabData . disable && this . isOpen ( _tabID ) && ! this . isSelected ( _tabID ) ) tabID = _tabID ;
113+ }
114+ }
115+ return tabID ;
116+ } ,
117+ _getPreSiblingTabId : function ( ) {
118+ const { selectedTabID , openTabIDs } = this . stateRef ;
119+ const isRightToLeft = true ;
120+ const arr = openTabIDs . slice ( 0 , openTabIDs . indexOf ( selectedTabID ) ) ;
121+ return this . helper . filterArrayUntilFirstValue ( arr , ( id ) => ! this . getTab ( id ) . disable , isRightToLeft ) ;
122+ } ,
123+ _getNextSiblingTabId : function ( ) {
124+ const { selectedTabID , openTabIDs } = this . stateRef ;
125+ const isRightToLeft = false ;
126+ const arr = openTabIDs . slice ( openTabIDs . indexOf ( selectedTabID ) + 1 ) ;
127+ return this . helper . filterArrayUntilFirstValue ( arr , ( id ) => ! this . getTab ( id ) . disable , isRightToLeft ) ;
128+ } ,
129+ _findTabIdForSwitching : function ( ) {
130+ let tabId = '' ;
131+ tabId = this . _getPreSelectedTabId ( ) ;
132+ tabId = tabId || this . _getPreSiblingTabId ( ) ;
133+ tabId = tabId || this . _getNextSiblingTabId ( ) ;
134+ return tabId || '' ;
135+ } ,
132136 setTab : function ( id , newData = { } ) {
133137 this . optionsManager . validateObjectiveTabData ( newData ) . validatePanelComponent ( newData ) ;
134138 this . _setTab ( id , newData ) ;
@@ -163,28 +167,16 @@ const _apiProps = {
163167 } ,
164168} ;
165169Helper . setNoneEnumProps ( _apiProps , {
166- // getInitialState: function () {
167- // if (!this._initialState) {
168- // const { selectedTabID, tabs, defaultPanelComponent } = this.optionsManager.options, openTabIDs = [];
169- // tabs.map(tab => {
170- // const newTab = this._addTab(tab, { defaultPanelComponent });
171- // openTabIDs.push(newTab.id);
172- // });
173- // this._initialState = {
174- // selectedTabID: selectedTabID + '', //make sure it is type of string
175- // openTabIDs
176- // };
177- // }
178- // return this._initialState;
179- // },
180- onChange : function ( { newState, oldState, closedTabsId, openedTabsId, isSwitched} ) {
181- if ( isSwitched || openedTabsId . length || closedTabsId . length ) {
170+ onChange : function ( { newState, oldState, closeTabIDs, openedTabIDs, isSwitched} ) {
171+ if ( isSwitched || openedTabIDs . length || closeTabIDs . length ) {
182172 this . trigger ( 'onChange' , this . userProxy , {
183173 currentData : { ...newState } ,
184174 perviousData : { ...oldState } ,
175+ closeTabIDs,
176+ openedTabIDs,
185177 } ) ;
186- openedTabsId . length && this . trigger ( 'onOpen' , this . userProxy , openedTabsId ) ;
187- closedTabsId . length && this . trigger ( 'onClose' , this . userProxy , closedTabsId ) ;
178+ openedTabIDs . length && this . trigger ( 'onOpen' , this . userProxy , openedTabIDs ) ;
179+ closeTabIDs . length && this . trigger ( 'onClose' , this . userProxy , closeTabIDs ) ;
188180 isSwitched &&
189181 this . trigger ( 'onSelect' , this . userProxy , {
190182 currentSelectedTabId : newState . selectedTabID ,
0 commit comments