Home Reference Source

src/components/controls/DatePicker/DatePicker.jsx

import React from 'react';
import PropTypes from 'prop-types';
import moment from 'moment';

import DateTimeControl from './DateTimeControl';

/**
 * Компонент для выбора даты. Состоит из поля ввода {@link DateInput} и попапа {@link PopUp} с календарем {@link Calendar}.
 * @reactProps {string} defaultTime - время выбранной даты. Пример: '11:11'
 * @reactProps {string|moment|Date} date - дефолтная дата.
 * @reactProps {string|moment|Date} min - самая ранняя доступная дата
 * @reactProps {string|moment|Date} max - самая поздняя дотсупная дата
 * @reactProps {function} onChange - вызывается при изменении
 * @reactProps {string} dateFormat - формат даты. Пример: "DD-MM_YYYY"
 * @reactProps {string} timeFormat - формат времени. Пример: "HH:mm"
 * @reactProps {string} outputFormat - формат даты при сохранение. Пример: "DD-MM_YYYY HH~mm"
 * @reactProps {boolean} disabled - задизейблен пикер / нет
 * @reactProps {string} placeholder - плэйсхолдер для поля
 * @reactProps {string} locale - Локаль. Варианты: 'en', 'ru'
 * @reactProps {bool} openOnFocus - открывать календарь при фокусе
 * @example
 * <DatePicker defaultTime = '12:11'/>
 */
class DatePicker extends React.Component {
  constructor(props) {
    super(props);
  }
  /**
   * базовый рендер
   **/
  render() {
    let { value, defaultValue } = this.props;
    value = value || defaultValue || null;
    return <DateTimeControl {...this.props} value={value} type="date-picker" />;
  }
}

DatePicker.defaultProps = {
  onChange: () => {},
  onFocus: () => {},
  onBlur: () => {},
  dateFormat: 'DD/MM/YYYY',
  locale: 'ru',
  placeholder: '',
  disabled: false,
  className: '',
  defaultTime: '00:00',
  autoFocus: false,
  openOnFocus: false,
};

DatePicker.propTypes = {
  value: PropTypes.oneOfType([
    PropTypes.instanceOf(moment),
    PropTypes.instanceOf(Date),
    PropTypes.string,
  ]),
  min: PropTypes.oneOfType([
    PropTypes.instanceOf(moment),
    PropTypes.instanceOf(Date),
    PropTypes.string,
  ]),
  max: PropTypes.oneOfType([
    PropTypes.instanceOf(moment),
    PropTypes.instanceOf(Date),
    PropTypes.string,
  ]),
  onFocus: PropTypes.func,
  onBlur: PropTypes.func,
  dateDivider: PropTypes.string,
  onChange: PropTypes.func,
  dateFormat: PropTypes.string,
  timeFormat: PropTypes.string,
  outputFormat: PropTypes.string,
  disabled: PropTypes.bool,
  placeholder: PropTypes.string,
  locale: PropTypes.oneOf(['en', 'ru']),
  autoFocus: PropTypes.bool,
  openOnFocus: PropTypes.bool,
};

export default DatePicker;