Skip to content
Snippets Groups Projects
PerspectiveTabs.js 2.37 KiB
Newer Older
import React from 'react'
import PropTypes from 'prop-types'
import { withStyles } from '@material-ui/core/styles'
import Tabs from '@material-ui/core/Tabs'
import Tab from '@material-ui/core/Tab'
import { Link } from 'react-router-dom'
import Paper from '@material-ui/core/Paper'
import intl from 'react-intl-universal'
esikkala's avatar
esikkala committed

esikkala's avatar
esikkala committed
const styles = () => ({
esikkala's avatar
esikkala committed
  root: {
esikkala's avatar
esikkala committed
    flexGrow: 1,
esikkala's avatar
esikkala committed
    borderBottomLeftRadius: 0,
    borderBottomRightRadius: 0
  }
})
esikkala's avatar
esikkala committed

esikkala's avatar
esikkala committed
/**
 * A component for generating view tabs for a faceted search perspective or an entity landing page.
 */
esikkala's avatar
esikkala committed
class PerspectiveTabs extends React.Component {
  constructor (props) {
    super(props)
    const value = this.pathnameToValue(this.props.routeProps.location.pathname)
    this.state = { value }
    const newPath = this.props.routeProps.location.pathname
    const oldPath = prevProps.routeProps.location.pathname
    if (newPath !== oldPath) {
      this.setState({ value: this.pathnameToValue(newPath) })
    const activeID = pathname.split('/').pop()
    let value = 0
esikkala's avatar
esikkala committed
    this.props.tabs.map(tab => {
      if (tab.id === activeID) {
        value = tab.value
esikkala's avatar
esikkala committed
      }
    })
    return value
esikkala's avatar
esikkala committed
  handleChange = (event, value) => {
    this.setState({ value })
esikkala's avatar
esikkala committed
  };

  render () {
esikkala's avatar
esikkala committed
    const { classes, tabs } = this.props
    // const largeScreen = screenSize === 'xl'
    const variant = tabs.length > 3 ? 'scrollable' : 'fullWidth'
    const scrollButtons = tabs.length > 3 ? 'auto' : 'on'
esikkala's avatar
esikkala committed
    return (
esikkala's avatar
esikkala committed
      <Paper className={classes.root}>
esikkala's avatar
esikkala committed
        <Tabs
          value={this.state.value}
          onChange={this.handleChange}
          indicatorColor='secondary'
          textColor='secondary'
esikkala's avatar
esikkala committed
          variant={variant}
          scrollButtons={scrollButtons}
esikkala's avatar
esikkala committed
        >
          {tabs.map(tab =>
            <Tab
              key={tab.id}
              icon={tab.icon}
              label={intl.get(`tabs.${tab.id}`)}
esikkala's avatar
esikkala committed
              component={Link}
              to={tab.id}
esikkala's avatar
esikkala committed
              wrapped
esikkala's avatar
esikkala committed
            />
esikkala's avatar
esikkala committed
          )}
esikkala's avatar
esikkala committed
        </Tabs>
      </Paper>
esikkala's avatar
esikkala committed
PerspectiveTabs.propTypes = {
esikkala's avatar
esikkala committed
  classes: PropTypes.object.isRequired,
esikkala's avatar
esikkala committed
  routeProps: PropTypes.object.isRequired,
  tabs: PropTypes.array.isRequired,
  screenSize: PropTypes.string.isRequired
esikkala's avatar
esikkala committed

esikkala's avatar
esikkala committed
export const PerspectiveTabsComponent = PerspectiveTabs

export default withStyles(styles)(PerspectiveTabs)