@@ -17,6 +17,7 @@ import {
17
17
TabPanel ,
18
18
} from 'react-tabs' ;
19
19
import { fixStyle } from 'utils/contentful' ;
20
+ import { getQuery , updateQuery } from 'utils/url' ;
20
21
import defaultTheme from './themes/style.scss' ;
21
22
import zurichTheme from './themes/zurich.scss' ;
22
23
import tabsGroup from './themes/tabsGroup.scss' ;
@@ -40,7 +41,38 @@ export const TAB_THEMES = {
40
41
export default class TabsItemsLoader extends Component {
41
42
constructor ( props ) {
42
43
super ( props ) ;
43
- this . state = { tabIndex : props . selected } ;
44
+ this . state = {
45
+ tabIndex : props . selected || 0 ,
46
+ } ;
47
+
48
+ this . updatePageUrl . bind ( this ) ;
49
+ }
50
+
51
+ componentDidMount ( ) {
52
+ const q = getQuery ( ) ;
53
+ const { tabId } = this . props ;
54
+ const { tabIndex } = this . state ;
55
+ if ( q . tabs && q . tabs [ tabId ] && Number ( q . tabs [ tabId ] ) !== tabIndex ) {
56
+ this . setState ( { tabIndex : Number ( q . tabs [ tabId ] ) } ) ;
57
+ } else {
58
+ this . updatePageUrl ( ) ;
59
+ }
60
+ }
61
+
62
+ componentDidUpdate ( ) {
63
+ this . updatePageUrl ( ) ;
64
+ }
65
+
66
+ updatePageUrl ( ) {
67
+ const q = getQuery ( ) ;
68
+ const { tabId } = this . props ;
69
+ const { tabIndex } = this . state ;
70
+ updateQuery ( {
71
+ tabs : {
72
+ ...q . tabs ,
73
+ [ tabId ] : tabIndex || 0 ,
74
+ } ,
75
+ } ) ;
44
76
}
45
77
46
78
render ( ) {
@@ -50,6 +82,7 @@ export default class TabsItemsLoader extends Component {
50
82
spaceName,
51
83
environment,
52
84
theme,
85
+ tabId,
53
86
} = this . props ;
54
87
const { tabIndex } = this . state ;
55
88
@@ -129,6 +162,7 @@ export default class TabsItemsLoader extends Component {
129
162
environment = { environment }
130
163
selected = { fields . selected }
131
164
theme = { TAB_THEMES [ fields . theme || 'Default' ] }
165
+ tabId = { tabId }
132
166
/>
133
167
) ;
134
168
}
@@ -173,4 +207,5 @@ TabsItemsLoader.propTypes = {
173
207
environment : PT . string ,
174
208
selected : PT . number ,
175
209
theme : PT . shape ( ) . isRequired ,
210
+ tabId : PT . string . isRequired ,
176
211
} ;
0 commit comments