import * as React from 'react'; import { HeaderTabs, Marker, ActiveComponent } from './Tabs.styled'; interface IProps { headers: string[]; } export default class extends React.PureComponent { static Panel = ActiveComponent; state = { activePanel: '', marker: { width: 0, index: 0 } } tab = React.createRef(); changeTabState = (element: HTMLLIElement) => this.setState({ marker: { width: element.clientWidth, index: element.offsetLeft }, activePanel: element.textContent }) activatePanel = ({ currentTarget }: React.MouseEvent) => this.changeTabState((currentTarget as HTMLLIElement)); componentDidMount() { // @ts-ignore this.changeTabState((this.tab.current.children[0] as HTMLLIElement)); } render = () => { const { children, headers } = this.props; const { activePanel, marker } = this.state; return ( {headers.map((header, index) => (
  • {header}
  • ))}
    { React.Children.map(children, (child: any) => (child.props.fromHeader === activePanel) && child) }
    ) } };