Средство выбора диапазона дат ReactJS с отключенными датами - Rsuite
Я ищу решение для своего проекта ReactJS. На странице свойств я хочу отобразить средство выбора диапазона дат с доступностью свойства. Запустив запрос с помощью Postman, я получаю доступность из календаря в следующем формате, хотя для меня нет проблем с манипулированием массивом, чтобы соответствовать требованиям для средства выбора диапазона дат.
Как отобразить в средстве выбора диапазона дат заблокированные дни, чтобы на них нельзя было щелкнуть мышью.
2 ответа
Это будет зависеть от выбора диапазона дат, который вы решите использовать (или если вы напишете свой собственный) - например, беглый взгляд на API этого компонента скажет вам, что у него есть свойство disabledDates: Date[], которое вы можете использовать для отключить определенные даты.
Мне удалось это сделать, получив данные из API. Управляется синтаксисом таким образом, чтобы DateRangePicker мог импортировать его через функцию.
Затем я использовал пакет «response-calendar» и импортировал его в свой проект узла.
npm i 'react-calendar' --save
Затем я использовал компонент Calendar, поскольку импортировал его с помощью следующей команды:
import Calendar from '../Components/CalendarRangePicker';
...
<Calendar modifiers={modifiers}/>
...
CalendarRangePicker.js
import { useState } from 'react';
import Calendar from 'react-calendar';
import 'react-calendar/dist/Calendar.css';
function CalendarRangePicker(props){
const [value, onChange] = useState(new Date());
const dataNotYetFetched = useState();
// disabled some days until I fetched the data...
var disabledDates = [
new Date(2021, 7, 1),
new Date(2021, 7, 2),
];
//console.log(disabledDates);
var modifiers = null;
if(props.modifiers != null) {
modifiers = props.modifiers;
console.log(modifiers);
disabledDates = modifiers.disabled;
}
return (
<div>
<Calendar
// Make calendar not viewable for previous months
minDate={new Date()}
// Whether to show two months
showDoubleView = {false}
ActiveStartDate = {new Date()}
returnValue={"range"}
// settings for the calendar
onChange={onChange}
value={value}
selectRange={true}
locale="en-US"
autofocus={false}
// disabled dates. Got data from channel manager
tileDisabled={({date, view}) =>
(view === 'month') && // Block day tiles only
disabledDates.some(disabledDate =>
date.getFullYear() === disabledDate.getFullYear() &&
date.getMonth() === disabledDate.getMonth() &&
date.getDate() === disabledDate.getDate()
)}
/>
</div>
);
}
export default CalendarRangePicker;