UNPKG

@appearhere/bloom

Version:

Appear Here's pattern library and styleguide

80 lines (73 loc) 2.48 kB
import PropTypes from 'prop-types'; import React from 'react'; import FittedImage from '../FittedImage/FittedImage'; import moment from '../../utils/moment/moment'; import LeftRight from '../LeftRight/LeftRight'; import css from './BookingRequestPreview.css'; import Icon from '../Icon/Icon'; const BookingRequestPreview = ({ bookingRequests, className, ...rest }) => { const keyedBookingRequests = bookingRequests.reduce((obj, next) => { const state = next.tooltip; const currentRequests = obj[state] || []; return Object.assign(obj, { [state]: [...currentRequests, next], }); }, {}); return ( <div {...rest} className={className}> { Object.keys(keyedBookingRequests).map((state) => { const requests = keyedBookingRequests[state]; return ( <div className={css.requestList} key={state}> <div className={css.state}>{ state }</div> { requests.map(request => ( <LeftRight className={css.request} key={request.id} primarySide="right" leftChildren={ <FittedImage className={css.image} src={request.primary_photo_thumbnail_url} alt={request.idea_name} /> } rightChildren={ <div className={css.requestDetail}> <div className={css.ideaName}> { request.idea_name } </div> <div className={css.dates}> { moment(request.start_on).format('L') } <Icon className={css.untilIcon} name="arrow" /> { moment(request.end_on).format('L') } </div> </div> } /> )) } </div> ); }) } </div> ); }; BookingRequestPreview.propTypes = { bookingRequests: PropTypes.arrayOf( PropTypes.shape({ id: PropTypes.number, idea_name: PropTypes.string, idea_category: PropTypes.string, start_on: PropTypes.string, end_on: PropTypes.string, primary_photo_thumbnail_url: PropTypes.string, tooltip: PropTypes.string, complete: PropTypes.bool, }) ), className: PropTypes.string, }; export default BookingRequestPreview;