Home Identifier Source Repository

src/components/area-of-study-group.js

import React, {Component, PropTypes} from 'react'
import pluralizeArea from '../lib/pluralize-area'
import capitalize from 'lodash/string/capitalize'
import * as areaTypeConstants from '../models/area-types'
import values from 'lodash/object/values'

import {List} from 'immutable'

import AreaOfStudy from './area-of-study'
import AreaPicker from './area-picker'
import Button from './button'

import './area-of-study-group.scss'

export default class AreaOfStudyGroup extends Component {
	static propTypes = {
		addArea: PropTypes.func.isRequired,
		addOverride: PropTypes.func.isRequired,
		allAreas: PropTypes.instanceOf(List).isRequired,
		areas: PropTypes.instanceOf(List).isRequired,
		endAddArea: PropTypes.func.isRequired,
		initiateAddArea: PropTypes.func.isRequired,
		removeArea: PropTypes.func.isRequired,
		removeOverride: PropTypes.func.isRequired,
		showAreaPicker: PropTypes.bool.isRequired,
		studentId: PropTypes.string.isRequired,
		toggleOverride: PropTypes.func.isRequired,
		type: PropTypes.oneOf(values(areaTypeConstants)).isRequired,
	}

	static defaultProps = {
		showAreaPicker: false,
	}

	render() {
		return (
			<section key={this.props.type} className='area-of-study-group'>
				<h1 className='area-type-heading'>
					{capitalize(pluralizeArea(this.props.type))}
					{
						this.props.showAreaPicker
							? <Button className='add-area-of-study' type='flat' onClick={ev => this.props.endAddArea({ev, type: this.props.type})}>
								Close
							</Button>
							: <Button className='add-area-of-study' type='flat' onClick={ev => this.props.initiateAddArea({ev, type: this.props.type})}>
								Add ∙ Edit
							</Button>
					}
				</h1>

				{this.props.areas.map(area =>
					<AreaOfStudy {...area}
						key={area.id}
						removeArea={this.props.removeArea}
						addOverride={this.props.addOverride}
						removeOverride={this.props.removeOverride}
						toggleOverride={this.props.toggleOverride}
						showCloseButton={this.props.showAreaPicker}
						showEditButton={this.props.showAreaPicker}
						studentId={this.props.studentId}
					/>).toArray()}

				{this.props.showAreaPicker
					? <AreaPicker
						currentAreas={this.props.areas}
						closePicker={ev => this.props.endAddArea({ev, type: this.props.type})}
						type={this.props.type}
						allAreas={this.props.allAreas}
						addArea={this.props.addArea}
						removeArea={this.props.removeArea} />
					: null}
			</section>
		)
	}
}