Skip to content

Commit ddf3926

Browse files
committed
feat: add disabled dates list or callback prop
1 parent 334bcf7 commit ddf3926

File tree

5 files changed

+25
-0
lines changed

5 files changed

+25
-0
lines changed

example/src/App.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,8 @@ export default function App() {
192192
dates={dates}
193193
//minDate={dayjs().startOf('day')}
194194
//maxDate={dayjs().add(3, 'day').endOf('day')}
195+
//disabledDates={[dayjs(), dayjs().add(1, 'day')]}
196+
//disabledDates={(date) => [0, 6].includes(dayjs(date).day())}// disable weekends
195197
//firstDayOfWeek={1}
196198
displayFullDays
197199
timePicker={timePicker}

src/DateTimePicker.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ const DateTimePicker = (
7373
// endYear,
7474
minDate,
7575
maxDate,
76+
disabledDates,
7677
date,
7778
startDate,
7879
endDate,
@@ -298,6 +299,7 @@ const DateTimePicker = (
298299
timePicker,
299300
minDate,
300301
maxDate,
302+
disabledDates,
301303
firstDayOfWeek: firstDay,
302304
height,
303305
theme: rest,

src/components/DaySelector.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ const DaySelector = () => {
2626
displayFullDays,
2727
minDate,
2828
maxDate,
29+
disabledDates,
2930
firstDayOfWeek,
3031
theme,
3132
height,
@@ -48,6 +49,7 @@ const DaySelector = () => {
4849
displayFullDays,
4950
minDate,
5051
maxDate,
52+
disabledDates,
5153
firstDayOfWeek
5254
).map((day, index) => {
5355
if (day) {
@@ -156,6 +158,7 @@ const DaySelector = () => {
156158
firstDayOfWeek,
157159
minDate,
158160
maxDate,
161+
disabledDates,
159162
date,
160163
startDate,
161164
endDate,

src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ export interface DatePickerBaseProps {
8686
endYear?: number;
8787
minDate?: DateType;
8888
maxDate?: DateType;
89+
disabledDates?: DateType[] | ((date: DateType) => boolean);
8990
firstDayOfWeek?: number;
9091
displayFullDays?: boolean;
9192
timePicker?: boolean;

src/utils.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ export const getParsedDate = (date: DateType) => {
149149
* @param displayFullDays
150150
* @param minDate - min selectable date
151151
* @param maxDate - max selectable date
152+
* @param disabledDates - array of disabled dates, or a function that returns true for a given date
152153
* @param firstDayOfWeek - first day of week, number 0-6, 0 – Sunday, 6 – Saturday
153154
*
154155
* @returns days array based on current date
@@ -158,6 +159,7 @@ export const getMonthDays = (
158159
displayFullDays: boolean,
159160
minDate: DateType,
160161
maxDate: DateType,
162+
disabledDates: DateType[] | ((date: DateType) => boolean) | undefined,
161163
firstDayOfWeek: number
162164
): IDayObject[] => {
163165
const date = getDate(datetime);
@@ -177,6 +179,7 @@ export const getMonthDays = (
177179
thisDay,
178180
minDate,
179181
maxDate,
182+
disabledDates,
180183
false,
181184
index + 1
182185
);
@@ -191,6 +194,7 @@ export const getMonthDays = (
191194
thisDay,
192195
minDate,
193196
maxDate,
197+
disabledDates,
194198
true,
195199
prevMonthOffset + day
196200
);
@@ -204,6 +208,7 @@ export const getMonthDays = (
204208
thisDay,
205209
minDate,
206210
maxDate,
211+
disabledDates,
207212
false,
208213
daysInCurrentMonth + prevMonthOffset + day
209214
);
@@ -219,6 +224,7 @@ export const getMonthDays = (
219224
* @param date - calculated date based on day, month, and year
220225
* @param minDate - min selectable date
221226
* @param maxDate - max selectable date
227+
* @param disabledDates - array of disabled dates, or a function that returns true for a given date
222228
* @param isCurrentMonth - define the day is in the current month
223229
*
224230
* @returns days object based on current date
@@ -228,6 +234,7 @@ const generateDayObject = (
228234
date: dayjs.Dayjs,
229235
minDate: DateType,
230236
maxDate: DateType,
237+
disabledDates: DateType[] | ((date: DateType) => boolean) | undefined,
231238
isCurrentMonth: boolean,
232239
dayOfMonth: number
233240
) => {
@@ -238,6 +245,16 @@ const generateDayObject = (
238245
if (maxDate && !disabled) {
239246
disabled = date > getDate(maxDate);
240247
}
248+
if (disabledDates) {
249+
if (Array.isArray(disabledDates)) {
250+
const dates = disabledDates.filter((disabledDate) =>
251+
areDatesOnSameDay(date, disabledDate)
252+
);
253+
disabled = dates.length > 0;
254+
} else if (disabledDates instanceof Function) {
255+
disabled = disabledDates(date);
256+
}
257+
}
241258
return {
242259
text: day.toString(),
243260
day: day,

0 commit comments

Comments
 (0)