Skip to content

Commit 9277bd2

Browse files
author
matteo
committed
calendar restricted dates
1 parent 8893c3c commit 9277bd2

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

src/controls/dateTimePicker/DateTimePicker.tsx

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as React from "react";
22
import { isEqual } from '@microsoft/sp-lodash-subset';
33
import { TimeConvention, DateConvention } from "./DateTimeConventions";
4+
import { Calendar } from "@fluentui/react";
45
import { DatePicker } from "@fluentui/react/lib/DatePicker";
56
import { Label } from "@fluentui/react/lib/Label";
67
import { IconButton } from "@fluentui/react/lib/Button";
@@ -246,14 +247,34 @@ export class DateTimePicker extends React.Component<IDateTimePickerProps, IDateT
246247
maxDate,
247248
minutesIncrementStep,
248249
showClearDate = false,
249-
showClearDateIcon = 'RemoveEvent'
250+
showClearDateIcon = 'RemoveEvent',
251+
restrictedDates = []
250252
} = this.props;
251253

252254
const { textErrorMessage } = dateStrings;
253255
const hours: number = value !== null ? value.getHours() : this.state.hours;
254256
const minutes: number = value !== null ? value.getMinutes() : this.state.minutes;
255257
const seconds: number = value !== null ? value.getSeconds() : this.state.seconds;
256258

259+
const CalendarView = (): JSX.Element => {
260+
return (
261+
<Calendar
262+
value={initialPickerDate}
263+
strings={dateStrings}
264+
isMonthPickerVisible={isMonthPickerVisible}
265+
onSelectDate={this.onSelectDate}
266+
firstDayOfWeek={firstDayOfWeek}
267+
firstWeekOfYear={firstWeekOfYear}
268+
showGoToToday={showGoToToday}
269+
showMonthPickerAsOverlay={showMonthPickerAsOverlay}
270+
showWeekNumbers={showWeekNumbers}
271+
minDate={minDate}
272+
maxDate={maxDate}
273+
restrictedDates={restrictedDates}
274+
/>
275+
);
276+
};
277+
257278
// Check if the time element needs to be rendered
258279
let timeElm: JSX.Element = <div className="hidden" />;
259280

@@ -341,6 +362,7 @@ export class DateTimePicker extends React.Component<IDateTimePickerProps, IDateT
341362
initialPickerDate={initialPickerDate}
342363
minDate={minDate}
343364
maxDate={maxDate}
365+
calendarAs={restrictedDates.length ? CalendarView : undefined}
344366
textField={{
345367
onChange: (e, newValue) => this.handleTextChange(e, newValue, textErrorMessage)
346368
}}

src/controls/dateTimePicker/IDateTimePickerProps.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,4 +153,10 @@ export interface IDateTimePickerProps {
153153
* Icon used for clearDate iconbutton. Defaults to RemoveEvent
154154
*/
155155
showClearDateIcon?: string;
156+
157+
/**
158+
* If set the Calendar will not allow selection of dates in this array.
159+
*/
160+
restrictedDates?: Date[];
161+
156162
}

src/webparts/controlsTest/components/ControlsTest.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1449,6 +1449,8 @@ export default class ControlsTest extends React.Component<IControlsTestProps, IC
14491449
/>
14501450

14511451
<DateTimePicker label="DateTime Picker (disabled)" disabled={true} />
1452+
1453+
<DateTimePicker label="DateTime Picker (restricted dates)" isMonthPickerVisible={false} showSeconds={false} onChange={(value) => console.log("DateTimePicker value:", value)} placeholder="Pick a date" restrictedDates={[new Date(2024,1,15), new Date(2024,1,16), new Date(2024,1,17)]}/>
14521454
</div>
14531455
<div id="RichTextDiv" className={styles.container} hidden={!isRichTextDivVisible}>
14541456
{/* <RichText isEditMode={this.props.displayMode === DisplayMode.Edit} onChange={value => { this.richTextValue = value; return value; }} /> */}

0 commit comments

Comments
 (0)