Skip to content

Commit 7fa04f8

Browse files
committed
fix: CTabPane: fix 'active' prop, refactor component
1 parent 44839c9 commit 7fa04f8

File tree

2 files changed

+24
-17
lines changed

2 files changed

+24
-17
lines changed

src/tabs/CTabPane.js

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import React, { useState, useContext, useRef, useEffect } from 'react'
1+
import React, {
2+
useState,
3+
useContext,
4+
useRef,
5+
useEffect
6+
} from 'react'
27
import PropTypes from 'prop-types'
38
import classNames from 'classnames'
49
import CFade from '../fade/CFade'
@@ -9,7 +14,7 @@ import { Context } from './CTabs.js'
914
import { Context as FadeContext } from './CTabContent.js'
1015

1116
//component - CoreUI / CTabPane
12-
const getIndex = (el) => Array.from(el.parentNode.children).indexOf(el)
17+
const getIndex = el => Array.from(el.parentNode.children).indexOf(el)
1318

1419
const getState = r => r.current.dataset.tab || getIndex(r.current)
1520

@@ -22,17 +27,22 @@ const CTabPane = props => {
2227
...attributes
2328
} = props
2429

25-
const context = useContext(Context)
30+
const { active: activeTab, setActiveTab } = useContext(Context) || {}
2631
const fade = useContext(FadeContext)
27-
const act = (context || {}).active
2832
const ref = typeof innerRef === 'object' ? innerRef : useRef()
2933
typeof innerRef === 'function' && innerRef(ref)
30-
31-
const [isActive, setIsActive] = useState(active)
34+
35+
const [isActive, setIsActive] = useState()
36+
37+
useEffect(() => {
38+
setIsActive(activeTab === getState(ref))
39+
}, [activeTab])
3240

3341
useEffect(() => {
34-
setIsActive(active !== undefined ? active : act === getState(ref))
35-
}, [act, active])
42+
if (active !== undefined) {
43+
setActiveTab ? setActiveTab(active && getState(ref)) : setIsActive(active)
44+
}
45+
}, [active])
3646

3747
//render
3848
const classes = classNames(
@@ -56,9 +66,8 @@ const CTabPane = props => {
5666

5767
CTabPane.propTypes = {
5868
className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]),
59-
//
6069
innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
61-
active: PropTypes.bool,
70+
active: PropTypes.bool
6271
}
6372

6473
export default CTabPane

src/tabs/CTabs.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ const CTabs = props => {
1111
onActiveTabChange
1212
} = props
1313

14-
const [active, setActive] = useState()
15-
useEffect(() => setActive(activeTab), [activeTab])
14+
const [active, setActive] = useState(0)
15+
useEffect(() => {
16+
activeTab !== undefined && setActive(activeTab)
17+
}, [activeTab])
1618

17-
const setActiveTab = (tab) => {
19+
const setActiveTab = tab => {
1820
onActiveTabChange && onActiveTabChange(tab)
1921
setActive(tab)
2022
}
@@ -34,8 +36,4 @@ CTabs.propTypes = {
3436
onActiveTabChange: PropTypes.func,
3537
}
3638

37-
CTabs.defaultProps = {
38-
activeTab: 0
39-
}
40-
4139
export default CTabs

0 commit comments

Comments
 (0)