@gssfed/vital-ui-kit-react
Version:
Vital UI Kit for React!
89 lines (77 loc) • 1.75 kB
JSX
/**
* @flow
* Copyright © 2018 Galaxy Software Services https://github.com/GSS-FED/vital-ui-kit-react
* MIT license
*/
import * as React from 'react';
import styled, { css } from 'styled-components';
import Badge from '../Badge';
const TabBadge = styled(Badge)`
padding: 2px 8px;
font-size: 0.75rem;
border-radius: 4.975rem;
margin: 0 -5px 0 4px;
`;
const Root = styled.div`
display: inline-block;
padding: 5px 20px 4px;
line-height: 1.4;
font-size: 1rem;
color: ${({ theme }) => theme.tab.item.color};
background-color: ${({ theme }) => theme.tab.item.bg};
border-radius: 4px 4px 0 0;
margin-right: 2px;
cursor: pointer;
${({ current, theme }) =>
current &&
css`
color: ${theme.tab.item.current.color};
background-color: ${theme.tab.item.current.bg};
`};
`;
const Span = styled.span`
vertical-align: middle;
display: inline-block;
`;
const Label = Span.extend`
overflow: hidden;
text-overflow: ellipsis;
margin-top: -1px;
margin-bottom: 1px;
`;
type Props = {
label: React.Node,
current?: boolean,
badge?: number | string,
panel: React.Node,
index: number,
onTabChange: (panel: React.Node, index: number) => {},
};
class TabItem extends React.Component<Props> {
static defaultProps = {
current: false,
badge: null,
};
render() {
const {
current,
onTabChange,
index,
label,
badge,
panel,
...props
} = this.props;
return (
<Root
current={current}
onClick={() => onTabChange(panel, index)}
{...props}
>
{label && <Label>{label}</Label>}
{badge && <TabBadge inverse={!current} label={badge} />}
</Root>
);
}
}
export default TabItem;