instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
85 lines (75 loc) • 1.75 kB
JSX
import React, {Component} from 'react'
import {browserHistory} from 'react-router'
import styled, {css} from 'styled-components'
import make_tabs_with_routes from './make_tabs_with_routes'
import auto_bind from 'common/auto_bind'
import {color, link} from 'common/styles'
export default class Tabbar extends Component {
constructor(props) {
super(props)
auto_bind(this)
}
defaultProps = {
children: [],
}
static make_tabs_with_routes = make_tabs_with_routes
render_tab({label, active, onClick}, index) {
return (
<Tab key={index} onClick={onClick} active={active}>
{label}
</Tab>
)
}
render() {
const {children: tabs, header, className} = this.props
return (
<Container className={className}>
{header ? (
<Header>
{header}
</Header>
) : null}
<Tabs>
{tabs.map(this.render_tab)}
</Tabs>
</Container>
)
}
}
const Container = styled.div`
flex-shrink: 0;
display: flex;
flex-direction: column;
align-items: stretch;
width: 200px;
background-color: ${color('white')};
box-shadow: 0 1px 2px 1px ${color('black', 'normal', 0.25)};
z-index: 1;
overflow: scroll;
`
const Header = styled.div`
flex-shrink: 0;
display: flex;
align-items: center;
`
const Tabs = styled.div`
flex: 1;
display: flex;
flex-direction: column;
align-items: stretch;
`
const Tab = styled.div`
display: flex;
color: ${color('black')};
padding: 8px 12px;
flex-shrink: 0;
${({active}) => active ? css`
background-color: ${color('black', 'pale')};
` : css`
${link}
&:hover {
opacity: 1;
background-color: ${color('black', 'translucent')};
}
`}
`