UNPKG

@appearhere/bloom

Version:

Appear Here's pattern library and styleguide

103 lines (95 loc) 3.1 kB
import PropTypes from 'prop-types'; import React, { Component } from 'react'; import cx from 'classnames'; import { SELECT_DATE } from '../DayRangePicker/DayRangePicker'; import noop from '../../../utils/noop'; import mergeObjectStrings from '../../../utils/mergeObjectStrings/mergeObjectStrings'; import Icon from '../../Icon/Icon'; import BtnContainer from '../../BtnContainer/BtnContainer'; import { Value, Placeholder } from '../../Form/FormComponents'; import css from './DayRange.css'; export default class DayRange extends Component { static propTypes = { id: PropTypes.string, startLabel: PropTypes.string, endLabel: PropTypes.string, startDate: PropTypes.string, endDate: PropTypes.string, startDatePlaceholder: PropTypes.string, endDatePlaceholder: PropTypes.string, children: PropTypes.node, classNames: PropTypes.shape({ root: PropTypes.string, container: PropTypes.string, btn: PropTypes.string, value: PropTypes.string, placeholder: PropTypes.string, arrow: PropTypes.string, }), onStartDateClick: PropTypes.func, onEndDateClick: PropTypes.func, inputClassNames: PropTypes.object, selectDate: PropTypes.oneOf([SELECT_DATE.START, SELECT_DATE.END, '']), }; static defaultProps = { onStartDateClick: noop, onEndDateClick: noop, selectDate: null, startDatePlaceholder: 'Start date', endDatePlaceholder: 'End date', }; render() { const { classNames, onStartDateClick, onEndDateClick, startDate, endDate, startDatePlaceholder, endDatePlaceholder, selectDate, ...rest } = this.props; const mergedClassNames = mergeObjectStrings(css, classNames); return ( <div className={mergedClassNames.root}> <div className={css.container}> <BtnContainer {...rest} onClick={onStartDateClick} type="button" className={cx( mergedClassNames.btn, selectDate === SELECT_DATE.START ? mergedClassNames.btnActive : null, )} > { startDate ? ( <Value className={mergedClassNames.value}>{ startDate }</Value> ) : ( <Placeholder className={mergedClassNames.placeholder}> { startDatePlaceholder } </Placeholder> ) } </BtnContainer> <Icon className={mergedClassNames.arrow} name="arrow" /> <BtnContainer onClick={onEndDateClick} className={cx( mergedClassNames.btn, selectDate === SELECT_DATE.END ? mergedClassNames.btnActive : null, )} type="button" > { endDate ? ( <Value className={mergedClassNames.value}>{ endDate }</Value> ) : ( <Placeholder className={mergedClassNames.placeholder}> { endDatePlaceholder } </Placeholder> ) } </BtnContainer> </div> </div> ); } }