instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
84 lines (79 loc) • 2.44 kB
JSX
import React, {Component} from 'react'
import classNames from 'classnames/bind'
import {MdEvent, MdPlace} from 'react-icons/lib/md'
import LineBrokenText from '../components/line_broken_text'
import {make_periods} from '../common/calendar'
import {mission_period} from '../common/missions'
import {human_join, property_getter} from '../common/utilities'
const cx = classNames.bind(require('../styles/user_mission.scss'))
export default ({id, events, workplace, fields}) => (
<div>
<div className={cx('user-mission__events')}>
<div className={cx('user-mission__events-icon')}>
<MdEvent />
</div>
<div className={cx('user-mission__events-periods')}>
{make_periods(events).map((period) => (
<div key={period.events[0].id} className={cx('user-mission__events-periods-period')}>
{mission_period(period)}
</div>
))}
</div>
</div>
{workplace ? (
<div className={cx('user-mission__place')}>
<div className={cx('user-mission__place-icon')}>
<MdPlace />
</div>
<div className={cx('user-mission__place-label')}>
<div className={cx('user-mission__place-label-name')}>
{workplace.name}
</div>
<div className={cx('user-mission__place-label-address', {'user-mission__place-label-address-empty' : !workplace.name && !workplace.address})}>
{workplace.address || 'Non renseigné'}
</div>
</div>
</div>
) : null}
{fields.map((field) => <Field key={field.id} {...field} />)}
</div>
)
const Field = ({name, ...field}) => (
<div className={cx('user-mission__field')}>
<span className={cx('user-mission__field-name')}>
{`${name} : `}
</span>
<FieldContent {...field} />
</div>
)
const FieldContent = ({category, comment, selected_values, selected_value, empty}) => {
if (empty) {
return (
<span className={cx('user-mission__field-empty')}>
Vide
</span>
)
}
switch (category) {
case 'comment':
return (
<LineBrokenText>
{comment}
</LineBrokenText>
)
case 'non_exclusive':
return (
<span>
{human_join(selected_values.map(property_getter('name')))}
</span>
)
case 'exclusive':
return (
<span>
{selected_value.name}
</span>
)
default:
return null
}
}