@@ -51,9 +51,13 @@ const _apiProps = {
51
51
return this ;
52
52
} ,
53
53
_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
+ }
55
58
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 ) ;
57
61
} ) ;
58
62
return this ;
59
63
} ,
@@ -98,37 +102,37 @@ const _apiProps = {
98
102
this . _select ( id ) ;
99
103
return result ;
100
104
} ,
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
+ } ,
132
136
setTab : function ( id , newData = { } ) {
133
137
this . optionsManager . validateObjectiveTabData ( newData ) . validatePanelComponent ( newData ) ;
134
138
this . _setTab ( id , newData ) ;
@@ -163,28 +167,16 @@ const _apiProps = {
163
167
} ,
164
168
} ;
165
169
Helper . 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 ) {
182
172
this . trigger ( 'onChange' , this . userProxy , {
183
173
currentData : { ...newState } ,
184
174
perviousData : { ...oldState } ,
175
+ closeTabIDs,
176
+ openedTabIDs,
185
177
} ) ;
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 ) ;
188
180
isSwitched &&
189
181
this . trigger ( 'onSelect' , this . userProxy , {
190
182
currentSelectedTabId : newState . selectedTabID ,
0 commit comments