/JS_UniversityTask

Primary LanguageJavaScriptThe UnlicenseUnlicense

Задание

Допишите код так, чтобы DatePicker был контролируемым компонентом.

При выборе даты в input'е, текст на ним должен обновляться и показывать выбранную дату

При нажатии на кнопку Reset date, input должен очищаться, а надпись становаиться 'Select date'

Документация по JQuery UI

https://jqueryui.com/datepicker

https://api.jqueryui.com/datepicker

Готовая программа:

import React from 'react';
import './style.css';

// Задание
// Допишите код так, чтобы DatePicker был контролируемым компонентом.
// При выборе даты в input'е, текст на ним должен обновляться и показывать выбранную дату
// При нажатии на кнопку Reset date, input должен очищаться, а надпись становаиться 'Select date'
// Документация по JQuery UI
// https://jqueryui.com/datepicker
// https://api.jqueryui.com/datepicker

class DatePicker extends React.Component {
  inputRef = null;
  componentDidMount() {
    $(this.inputRef).datepicker({
      dateFormat: 'dd/mm/yy',
      onSelect: this.props.handleClick,
    });
    $(this.inputRef).datepicker('setDate', this.props.value || '');
  };

  componentDidUpdate() {
    $(this.inputRef).datepicker('setDate', this.props.value || '');
  };

  render() {
    return (
      <input
        ref={(domElement) => {
          this.inputRef = domElement;
        }}
      />
    );
  };
}

export default class App extends React.Component {
  state = {
    date: '1/4/2023',
  };

  onSelectUpdateDate = (newDate) => {
    this.setState(() => ({
      date: newDate,
    }));
  };

  render() {
    return (
      <React.Fragment>
        <div>
          {this.state.date ? `Date: ${this.state.date}` : 'Select date'}{' '}
        </div>
        <div>
          <DatePicker handleClick={(newDate) => handleDatePickerClick(this, newDate)}
            value={this.state.date} />
        </div>
        <div>
          <button onClick={() => handleResetBtnClick(this)}>Reset date</button>
        </div>
      </React.Fragment>
    );
  };
}

function handleDatePickerClick(datePicker, newDate) {
  datePicker.onSelectUpdateDate(newDate);
}

function handleResetBtnClick(btn) {
  btn.onSelectUpdateDate();
}