import React, { useEffect, useMemo, useRef } from 'react' import { TabsInternalCellProps, useTabsContext } from './tabs-context' import useTheme from '../use-theme' import useScale, { withScale } from '../use-scale' import useClasses from '../use-classes' interface Props { label: string | React.ReactNode value: string disabled?: boolean } const defaultProps = { disabled: false } type NativeAttrs = Omit, keyof Props> export type TabsItemProps = Props & NativeAttrs const TabsItemComponent: React.FC> = ({ children, className, value, label, disabled }: React.PropsWithChildren) => { const { SCALES } = useScale() const { register, currentValue } = useTabsContext() const isActive = useMemo(() => currentValue === value, [currentValue, value]) const TabsInternalCell: React.FC = ({ onClick, onMouseOver, activeClassName, activeStyle, hideBorder }) => { const theme = useTheme() const ref = useRef(null) const { currentValue } = useTabsContext() const active = currentValue === value const classes = useClasses('tab', { active, disabled, [activeClassName!]: active, 'hide-border': hideBorder, [className!]: className }) const clickHandler = () => { if (disabled) return onClick && onClick(value) } return (
{label}
) } TabsInternalCell.displayName = 'HuiTabsInternalCell' useEffect(() => { register && register({ value, cell: TabsInternalCell }) }, [value, label, disabled]) /* eslint-disable react/jsx-no-useless-fragment */ return isActive ? <>{children} : null } TabsItemComponent.defaultProps = defaultProps TabsItemComponent.displayName = 'HuiTabsItem' const TabsItem = withScale(TabsItemComponent) export default TabsItem /* eslint-enable */