mahaplatform/reframe

View on GitHub
src/components/filters/overview.js

Summary

Maintainability
C
1 day
Test Coverage
import PropTypes from 'prop-types'
import Lookup from './lookup'
import Select from './select'
import Toggle from './toggle'
import Daterange from './daterange'
import React from 'react'

class Overview extends React.Component {

  static propTypes = {
    filters: PropTypes.array,
    results: PropTypes.object,
    onAddPanel: PropTypes.func,
    onChange: PropTypes.func,
    onDone: PropTypes.func,
    onRemovePanel: PropTypes.func,
    onReset: PropTypes.func,
    onUpdate: PropTypes.func
  }

  render() {
    const { filters, onDone } = this.props
    return (
      <div className="reframe-filters-panel">
        <div className="reframe-filters-header">
          { onDone ?
            <div className="reframe-filters-header-icon" onClick={ this._handleDone.bind(this) }>
              <i className="fa fa-chevron-left" />
            </div> :
            <div className="reframe-filters-header-icon" />
          }
          <div className="reframe-filters-header-title">
            Filter Results
          </div>
          <div className="reframe-filters-header-icon" />
        </div>
        <div className="reframe-filters-body">
          <div className="reframe-filters-overview">
            { filters.map((filter, index) => {
              if(filter.type === 'toggle') return <Toggle {...this._getToggle(filter) } key={`filter_${index}`} />
              if(filter.type === 'lookup') return <Lookup {...this._getLookup(filter) } key={`filter_${index}`} />
              if(filter.type === 'select') return <Select {...this._getSelect(filter) } key={`filter_${index}`} />
              if(filter.type === 'daterange') return <Daterange {...this._getDaterange(filter) } key={`filter_${index}`} />
            })}
          </div>
        </div>
        <div className="reframe-filters-footer">
          <button className="ui red fluid button" onClick={ this._handleReset.bind(this) }>
            Reset Filters
          </button>
        </div>
      </div>
    )
  }

  _getToggle(filter) {
    const { results, onChange } = this.props
    const { format, label, name } = filter
    return {
      format,
      label,
      name,
      results,
      onChange
    }
  }

  _getLookup(filter) {
    const { results, onAddPanel, onChange, onRemovePanel } = this.props
    const { format, label, multiple, options } = filter
    return {
      format,
      label,
      multiple,
      name,
      options,
      results,
      onAddPanel,
      onChange,
      onRemovePanel
    }
  }

  _getSelect(filter) {
    const { results, onAddPanel, onChange, onRemovePanel } = this.props
    return {
      ...filter,
      results,
      onAddPanel,
      onChange,
      onRemovePanel
    }
  }

  _getDaterange(filter) {
    const { results, onAddPanel, onChange, onRemovePanel } = this.props
    return {
      ...filter,
      results,
      onAddPanel,
      onChange,
      onRemovePanel
    }
  }

  _handleDone() {
    this.props.onDone()
  }

  _handleReset() {
    this.props.onReset()
  }

}

export default Overview