UNPKG

instantjob-recruiter-client

Version:

a set of tools for creating an instantjob recruiter react client

111 lines (99 loc) 2.37 kB
import React, {Component} from 'react' import styled, {css} from 'styled-components' import Periods from './periods' import get_week_periods from './get_week_periods' import auto_bind from 'common/auto_bind' import moment from 'common/moment' import event_system from 'common/event_system' import {capitalize_first_letter} from 'common/utilities' import {color} from 'common/styles' export default class Week extends Component { constructor(props) { super(props) this.state = { week: moment(), } auto_bind(this) } componentDidMount() { this.stop_retrieving_calendar_week = event_system.retrieve(`calendar-week`, (week) => { this.setState({week}) }) } componentWillUnmount() { this.stop_retrieving_calendar_week() } get_days() { const start = moment(this.state.week).startOf('week') return get_week_periods(start)(this.props).map((periods, index) => ({ periods, date: moment(start).add(index, 'day'), })) } render_day(day, index) { return <Day key={index} {...day} /> } render() { return ( <Container> {this.get_days().map(this.render_day)} </Container> ) } } class Day extends Component { constructor(props) { super(props) auto_bind(this) } render() { const {date, periods} = this.props return ( <DayContainer> <Header> <WeekDay> {capitalize_first_letter(date.format("dddd"))} </WeekDay> <FullDate> {date.format("D/M")} </FullDate> </Header> <Content> <Periods periods={periods} /> </Content> </DayContainer> ) } } const border = css`solid 1px ${color('black', 'pale')}` const Container = styled.div` flex: 1; display: flex; align-items: stretch; ` const DayContainer = styled.div` flex: 1; display: flex; align-items: stretch; flex-direction: column; ` const Header = styled.div` display: flex; align-items: center; justify-content: center; flex-direction: column; border-bottom: ${border}; ` const WeekDay = styled.div`` const FullDate = styled.div` font-size: 12px; ` const Content = styled.div` border-left: ${border}; background-color: ${color('black', 'translucent')}; flex: 1; overflow: scroll; &:last-of-type { border-right: ${border}; } `