Set date dynamically with material ui keyboarddatepicker

Viewed 799

I am using KeyboardDatePicker from material-ui/pickers, and it is working well. But I have multiple date pickers in my form and I want to set state as

   
  const [selectedDate, setSelectedDate] = useState({
    selectedFromDate: new Date(),
    selectedToDate: new Date(),
  });

  // jsx
          <MuiPickersUtilsProvider utils={DateFnsUtils}>
              <KeyboardDatePicker
                id="selectedFromDate"
                label="From Date"
                format="dd/MM/yyyy"
                value={selectedDate.selectedFromDate}
                onChange={handleDateChange}
                KeyboardButtonProps={{
                  "aria-label": "change date",
                }}
              />
          </MuiPickersUtilsProvider>
          <MuiPickersUtilsProvider utils={DateFnsUtils}>
              <KeyboardDatePicker
                id="selectedToDate"
                label="To Date"
                format="dd/MM/yyyy"
                value={selectedDate.selectedToDate}
                onChange={handleDateChange}
                KeyboardButtonProps={{
                  "aria-label": "change date",
                }}
              />
          </MuiPickersUtilsProvider>

    const handleDateChange = (e) => {
    
    // here `e` is `DateIOType` and not event 
      setSelectedDate({
        ...selectedDate,
        [e.target.id]: e.target.value
      })
    };

But I can't find a way to get event prop in KeyboardDatePicker, they only come with (date: DateIOType, value?: string | null) as in their documentation. Are there any workarounds to achieve this ? Thanks in advance

1 Answers

As Id is not returning, add one more state variable for selectedFieldFor:

const [selectedFieldFor, setSelectedFieldFor] = useState("")
const [selectedDate, setSelectedDate] = useState({
    selectedFromDate: new Date(),
    selectedToDate: new Date(),
});
              
<MuiPickersUtilsProvider utils={DateFnsUtils}>
    <KeyboardDatePicker
        id="selectedFromDate"
        ......
        onClick={() => setSelectedFieldFor("selectedFromDate")}
    />
</MuiPickersUtilsProvider>
<MuiPickersUtilsProvider utils={DateFnsUtils}>
    <KeyboardDatePicker
        id="selectedToDate"
        ......
        onClick={() => setSelectedFieldFor("selectedToDate")}
    />
</MuiPickersUtilsProvider>

const handleDateChange = (e) => {
    setSelectedDate({
        ...selectedDate,
        selectedFieldFor: e.target.value
    })
};
Related