import React, { Component } from 'react'; import PropTypes from 'prop-types'; import TabsHeader, { Tab } from './TabsHeader'; import { TabsContainer } from './styles/common'; import { StateFilterValue } from '../StateFilter/StateFilter'; export type Position = 'left' | 'right' | 'center'; export interface TabsProps

{ tabs: Tab

[]; selected?: string; main?: boolean; onClick: (value: string) => void; collapsible?: boolean; position: Position; setFilter?: (value: Partial) => void; stateFilterValue?: StateFilterValue; } export default class Tabs

extends Component> { SelectedComponent?: React.ComponentType

; selector?: () => P; onMouseUp: React.MouseEventHandler = (e) => { e.currentTarget.blur(); }; onClick: React.MouseEventHandler = (e) => { this.props.onClick(e.currentTarget.value); }; renderTabs() { const tabs = this.props.tabs; const selected = this.props.selected; return tabs.map((tab, i) => { let isSelected; const value = typeof tab.value !== 'undefined' ? tab.value : tab.name; if (value === selected) { isSelected = true; if (tab.component) { this.SelectedComponent = tab.component; if (tab.selector) this.selector = () => tab.selector!(tab); } } return ( ); }); } render() { const tabsHeader = ( ); if (!this.SelectedComponent) { return ( {tabsHeader} ); } return ( {tabsHeader}

); } static propTypes = { tabs: PropTypes.array.isRequired, selected: PropTypes.string, main: PropTypes.bool, onClick: PropTypes.func.isRequired, collapsible: PropTypes.bool, position: PropTypes.oneOf(['left', 'right', 'center']), }; static defaultProps = { position: 'left' }; }