React.js: отключить DateTime при переходе в прошлое

Я использую response-datetime и хочу запретить кому-либо выбирать дату / время в прошлом, так как при этом будут отправляться электронные письма, которые не должны были быть отправлены в прошлом. Документация показывает, как раньше отключать даты, но когда я пытался отключить минуты, их все равно можно изменить вручную в раскрывающемся списке календаря. Приведенный ниже код является частью большой почтовой платформы, но должен иметь смысл с фрагментами. Файл живет здесь, и вы можете увидеть весь репо там же.

В идеале, если кто-то выберет дату или время, которое было на одну минуту или более в прошлом, он должен вернуться к текущему и иметь возможность "отправить" только в настоящий момент. Любая помощь будет потрясающей - спасибо!

  isValidDate(dt) {
    return (dt >= (moment().startOf('day')))
      && (dt <= moment().add(30, 'days'))
      && moment().subtract(1, 'minute');
  }

Я уже пробовал выше, но все же давайте редактировать вручную:(

class EmailSendDialog extends Component {
  constructor(props) {
    super(props);
    this.state = {
      listId: null,
      now: true,
      date: moment(),
      tz: this.defaultTz
    };
  }

  handleDateTimeSelect(date) {
    this.setState({ date });
  }

  isValidDate(dt) {
    return (dt >= (moment().startOf('day')))
      && (dt <= moment().add(30, 'days'))
      && moment().subtract(1, 'minute');
  }

Для рендеринга у меня есть это:

      <DateTime
        value={date}
        dateFormat="D MMM YYYY"
        isValidDate={this.isValidDate}
        onChange={(_date) => this.handleDateTimeSelect(_date)}
      />

1 ответ

Решение

Круто - я просто пойду и отвечу на свой вопрос;)

  handleDateTimeSelect(date) {
    if (date < moment()) {
      date = moment();
    }
    this.setState({ date });
  }

Это устанавливает момент, в который мы сейчас находимся, даже если вы попытаетесь изменить его вручную, он откатится назад.

пересмотр
Чтобы уменьшить вычислительную нагрузку, в конце я использовал следующее:

  handleDateTimeSelect(date) {
    const currentDate = moment();
    date = date < currentDate ? currentDate : date;
    this.setState({ date });
  }
Другие вопросы по тегам