Skip to content

Commit ca1ff06

Browse files
committed
feat(CTabs): the initial release of the new react tabs component
1 parent ded2c0c commit ca1ff06

File tree

4 files changed

+16
-16
lines changed

4 files changed

+16
-16
lines changed

packages/coreui-react/src/components/tabs/CTab.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ export interface CTabProps extends HTMLAttributes<HTMLButtonElement> {
1212
/**
1313
* Item key.
1414
*/
15-
itemKey?: number | string
15+
itemKey: number | string
1616
}
1717

1818
export const CTab = forwardRef<HTMLButtonElement, CTabProps>(
1919
({ children, className, itemKey, ...rest }, ref) => {
20-
const { _activeItemKey, setActiveKey, id } = useContext(TabsContext)
20+
const { _activeItemKey, setActiveItemKey, id } = useContext(TabsContext)
2121

2222
const isActive = () => itemKey === _activeItemKey
2323

@@ -31,8 +31,8 @@ export const CTab = forwardRef<HTMLButtonElement, CTabProps>(
3131
className,
3232
)}
3333
id={`${id}${itemKey}-tab`}
34-
onClick={() => setActiveKey(itemKey)}
35-
onFocus={() => setActiveKey(itemKey)}
34+
onClick={() => setActiveItemKey(itemKey)}
35+
onFocus={() => setActiveItemKey(itemKey)}
3636
role="tab"
3737
tabIndex={isActive() ? 0 : -1}
3838
type="button"
@@ -50,7 +50,7 @@ export const CTab = forwardRef<HTMLButtonElement, CTabProps>(
5050
CTab.propTypes = {
5151
children: PropTypes.node,
5252
className: PropTypes.string,
53-
itemKey: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
53+
itemKey: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
5454
}
5555

5656
CTab.displayName = 'CTab'

packages/coreui-react/src/components/tabs/CTabList.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ export interface CTabListProps extends HTMLAttributes<HTMLDivElement> {
2222

2323
export const CTabList = forwardRef<HTMLDivElement, CTabListProps>(
2424
({ children, className, layout, variant, ...rest }, ref) => {
25-
const tabsRef = useRef<HTMLDivElement | HTMLUListElement | HTMLOListElement>(null)
26-
const forkedRef = useForkedRef(ref, tabsRef)
25+
const tabListRef = useRef<HTMLDivElement>(null)
26+
const forkedRef = useForkedRef(ref, tabListRef)
2727

2828
const handleKeydown = (event: KeyboardEvent<HTMLDivElement>) => {
2929
if (
30-
tabsRef.current !== null &&
30+
tabListRef.current !== null &&
3131
(event.key === 'ArrowDown' ||
3232
event.key === 'ArrowUp' ||
3333
event.key === 'ArrowLeft' ||
@@ -39,7 +39,7 @@ export const CTabList = forwardRef<HTMLDivElement, CTabListProps>(
3939
const target = event.target as HTMLElement
4040
// eslint-disable-next-line unicorn/prefer-spread
4141
const items: HTMLElement[] = Array.from(
42-
tabsRef.current.querySelectorAll('.nav-link:not(.disabled):not(:disabled)'),
42+
tabListRef.current.querySelectorAll('.nav-link:not(.disabled):not(:disabled)'),
4343
)
4444

4545
let nextActiveElement

packages/coreui-react/src/components/tabs/CTabPanel.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export interface CTabPanelProps extends HTMLAttributes<HTMLDivElement> {
1515
/**
1616
* Item key.
1717
*/
18-
itemKey?: number | string
18+
itemKey: number | string
1919
/**
2020
* Callback fired when the component requests to be hidden.
2121
*/
@@ -88,7 +88,7 @@ export const CTabPanel = forwardRef<HTMLDivElement, CTabPanelProps>(
8888
CTabPanel.propTypes = {
8989
children: PropTypes.node,
9090
className: PropTypes.string,
91-
itemKey: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
91+
itemKey: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
9292
onHide: PropTypes.func,
9393
onShow: PropTypes.func,
9494
transition: PropTypes.bool,

packages/coreui-react/src/components/tabs/CTabs.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export interface CTabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChan
66
/**
77
* The active item key.
88
*/
9-
activeItemKey?: number | string
9+
activeItemKey: number | string
1010
/**
1111
* A string of all className you want applied to the base component.
1212
*/
@@ -19,7 +19,7 @@ export interface CTabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChan
1919

2020
export interface TabsContextProps {
2121
_activeItemKey?: number | string
22-
setActiveKey: React.Dispatch<React.SetStateAction<number | string | undefined>>
22+
setActiveItemKey: React.Dispatch<React.SetStateAction<number | string | undefined>>
2323
id?: string
2424
}
2525

@@ -28,14 +28,14 @@ export const TabsContext = createContext({} as TabsContextProps)
2828
export const CTabs = forwardRef<HTMLDivElement, CTabsProps>(
2929
({ children, activeItemKey, className, onChange }, ref) => {
3030
const id = useId()
31-
const [_activeItemKey, setActiveKey] = useState(activeItemKey)
31+
const [_activeItemKey, setActiveItemKey] = useState(activeItemKey)
3232

3333
useEffect(() => {
3434
_activeItemKey && onChange && onChange(_activeItemKey)
3535
}, [_activeItemKey])
3636

3737
return (
38-
<TabsContext.Provider value={{ _activeItemKey, setActiveKey, id }}>
38+
<TabsContext.Provider value={{ _activeItemKey, setActiveItemKey, id }}>
3939
<div className={classNames('tabs', className)} ref={ref}>
4040
{children}
4141
</div>
@@ -45,7 +45,7 @@ export const CTabs = forwardRef<HTMLDivElement, CTabsProps>(
4545
)
4646

4747
CTabs.propTypes = {
48-
activeItemKey: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
48+
activeItemKey: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
4949
children: PropTypes.node,
5050
className: PropTypes.string,
5151
onChange: PropTypes.func,

0 commit comments

Comments
 (0)