/* eslint-disable react/prop-types */ import React, { Component } from 'react'; import Icon from 'app/components/icon/icon.jsx'; import moment from 'moment'; import './day-picker.scss'; export default class DayPicker extends Component { /* this.props :{ onChange(day) value : Array of selected days } */ constructor(props) { super(props); this.state = { days: [], currentDate: moment(), }; this.openSelected = false; window.moment = moment; } componentDidMount() { this.setState(this.updateDay()); } UNSAFE_componentWillUpdate(nextProps, nextState) { if (moment(nextProps.value).valueOf() != this.oldProp) { var obj = this.updateDay(nextProps.value); nextState.days = obj.days; nextState.currentDate = obj.currentDate; } this.oldProp = moment(nextProps.value).valueOf(); } updateDay(date) { var searchedDate = date || moment(); var days = []; var first_day_of_month = moment(searchedDate).startOf('month').startOf('week'); for (var i = 0; i < 35; i++) { days.push(moment(moment(first_day_of_month).add(i, 'days'))); } return { days: days, currentDate: searchedDate, }; } isSelected(day) { if (this.props.value) { if ( Array.isArray(this.props.value) && this.props.value.length == 2 && this.props.value[0] && this.props.value[1] ) { return day.isBetween(this.props.value[0], this.props.value[1], 'day', '[]'); } else if ( Array.isArray(this.props.value) && this.props.value.length >= 1 && this.props.value[0] ) { return day.isSame(this.props.value[0], 'day'); } else if (!Array.isArray(this.props.value) && this.props.value) { return day.isSame(this.props.value, 'day'); } } return false; } isLast(day) { if (this.props.value) { if ( Array.isArray(this.props.value) && this.props.value.length == 2 && this.props.value[0] && this.props.value[1] ) { return day.isSame(this.props.value[1], 'day'); } else if ( Array.isArray(this.props.value) && this.props.value.length >= 1 && this.props.value[0] ) { return day.isSame(this.props.value[0], 'day'); } else if (!Array.isArray(this.props.value) && this.props.value) { return day.isSame(this.props.value, 'day'); } } return false; } render() { var last_week = -1; return (