UNPKG

23.5 kBSource Map (JSON)View Raw
1{"version":3,"file":"Calendar.base.js","sourceRoot":"../src/","sources":["components/Calendar/Calendar.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport {\n DayOfWeek,\n FirstWeekOfYear,\n DateRangeType,\n addMonths,\n addYears,\n DEFAULT_CALENDAR_STRINGS,\n DEFAULT_DATE_FORMATTING,\n} from '@fluentui/date-time-utilities';\nimport { CalendarDay } from './CalendarDay/CalendarDay';\nimport { CalendarMonth } from './CalendarMonth/CalendarMonth';\nimport {\n css,\n KeyCodes,\n classNamesFunction,\n focusAsync,\n format,\n FocusRects,\n getPropsWithDefaults,\n getWindow,\n} from '@fluentui/utilities';\nimport { useControllableValue } from '@fluentui/react-hooks';\nimport { defaultCalendarNavigationIcons } from './defaults';\nimport type { ICalendarProps, ICalendarStyleProps, ICalendarStyles } from './Calendar.types';\nimport type { ICalendarDay } from './CalendarDay/CalendarDay.types';\nimport type { ICalendarMonth } from './CalendarMonth/CalendarMonth.types';\n\nconst MIN_SIZE_FORCE_OVERLAY = 440;\n\nconst getClassNames = classNamesFunction<ICalendarStyleProps, ICalendarStyles>();\n\nconst defaultWorkWeekDays: DayOfWeek[] = [\n DayOfWeek.Monday,\n DayOfWeek.Tuesday,\n DayOfWeek.Wednesday,\n DayOfWeek.Thursday,\n DayOfWeek.Friday,\n];\n\nconst DEFAULT_PROPS: Partial<ICalendarProps> = {\n isMonthPickerVisible: true,\n isDayPickerVisible: true,\n showMonthPickerAsOverlay: false,\n today: new Date(),\n firstDayOfWeek: DayOfWeek.Sunday,\n dateRangeType: DateRangeType.Day,\n showGoToToday: true,\n strings: DEFAULT_CALENDAR_STRINGS,\n highlightCurrentMonth: false,\n highlightSelectedMonth: false,\n navigationIcons: defaultCalendarNavigationIcons,\n showWeekNumbers: false,\n firstWeekOfYear: FirstWeekOfYear.FirstDay,\n dateTimeFormatter: DEFAULT_DATE_FORMATTING,\n showSixWeeksByDefault: false,\n workWeekDays: defaultWorkWeekDays,\n showCloseButton: false,\n allFocusable: false,\n};\n\nfunction useDateState({ value, today = new Date(), onSelectDate }: ICalendarProps) {\n /** The currently selected date in the calendar */\n const [selectedDate = today, setSelectedDate] = useControllableValue(value, today);\n\n /** The currently focused date in the day picker, but not necessarily selected */\n const [navigatedDay = today, setNavigatedDay] = React.useState(value);\n\n /** The currently focused date in the month picker, but not necessarily selected */\n const [navigatedMonth = today, setNavigatedMonth] = React.useState(value);\n\n /** If using a controlled value, when that value changes, navigate to that date */\n const [lastSelectedDate = today, setLastSelectedDate] = React.useState(value);\n if (value && lastSelectedDate.valueOf() !== value.valueOf()) {\n setNavigatedDay(value);\n setNavigatedMonth(value);\n setLastSelectedDate(value);\n }\n\n const navigateMonth = (date: Date) => {\n setNavigatedMonth(date);\n };\n\n const navigateDay = (date: Date) => {\n setNavigatedMonth(date);\n setNavigatedDay(date);\n };\n\n const onDateSelected = (date: Date, selectedDateRangeArray?: Date[]) => {\n setNavigatedMonth(date);\n setNavigatedDay(date);\n setSelectedDate(date);\n onSelectDate?.(date, selectedDateRangeArray);\n };\n\n return [selectedDate, navigatedDay, navigatedMonth, onDateSelected, navigateDay, navigateMonth] as const;\n}\n\nfunction useVisibilityState(props: ICalendarProps) {\n /** State used to show/hide month picker */\n const [isMonthPickerVisible = true, setIsMonthPickerVisible] = useControllableValue(\n getShowMonthPickerAsOverlay(props) ? undefined : props.isMonthPickerVisible,\n false,\n );\n /** State used to show/hide day picker */\n const [isDayPickerVisible = true, setIsDayPickerVisible] = useControllableValue(\n getShowMonthPickerAsOverlay(props) ? undefined : props.isDayPickerVisible,\n true,\n );\n\n const toggleDayMonthPickerVisibility = () => {\n setIsMonthPickerVisible(!isMonthPickerVisible);\n setIsDayPickerVisible(!isDayPickerVisible);\n };\n\n return [isMonthPickerVisible, isDayPickerVisible, toggleDayMonthPickerVisibility] as const;\n}\n\nfunction useFocusLogic({ componentRef }: ICalendarProps, isDayPickerVisible: boolean, isMonthPickerVisible: boolean) {\n const dayPicker = React.useRef<ICalendarDay>(null);\n const monthPicker = React.useRef<ICalendarMonth>(null);\n const focusOnUpdate = React.useRef(false);\n\n const focus = React.useCallback(() => {\n if (isDayPickerVisible && dayPicker.current) {\n focusAsync(dayPicker.current);\n } else if (isMonthPickerVisible && monthPicker.current) {\n focusAsync(monthPicker.current);\n }\n }, [isDayPickerVisible, isMonthPickerVisible]);\n\n React.useImperativeHandle(componentRef, () => ({ focus }), [focus]);\n\n React.useEffect(() => {\n if (focusOnUpdate.current) {\n focus();\n focusOnUpdate.current = false;\n }\n });\n\n const focusOnNextUpdate = () => {\n focusOnUpdate.current = true;\n };\n\n return [dayPicker, monthPicker, focusOnNextUpdate] as const;\n}\n\nexport const CalendarBase: React.FunctionComponent<ICalendarProps> = React.forwardRef<HTMLDivElement, ICalendarProps>(\n (propsWithoutDefaults, forwardedRef) => {\n const props = getPropsWithDefaults(DEFAULT_PROPS, propsWithoutDefaults);\n\n const [selectedDate, navigatedDay, navigatedMonth, onDateSelected, navigateDay, navigateMonth] = useDateState(\n props,\n );\n const [isMonthPickerVisible, isDayPickerVisible, toggleDayMonthPickerVisibility] = useVisibilityState(props);\n const [dayPicker, monthPicker, focusOnNextUpdate] = useFocusLogic(props, isDayPickerVisible, isMonthPickerVisible);\n\n const renderGoToTodayButton = () => {\n let goTodayEnabled = showGoToToday;\n\n if (goTodayEnabled && today) {\n goTodayEnabled =\n navigatedDay.getFullYear() !== today.getFullYear() ||\n navigatedDay.getMonth() !== today.getMonth() ||\n navigatedMonth.getFullYear() !== today.getFullYear() ||\n navigatedMonth.getMonth() !== today.getMonth();\n }\n\n return (\n showGoToToday && (\n <button\n className={css('js-goToday', classes.goTodayButton)}\n onClick={onGotoToday}\n onKeyDown={onButtonKeyDown(onGotoToday)}\n type=\"button\"\n disabled={!goTodayEnabled}\n >\n {strings!.goToToday}\n </button>\n )\n );\n };\n\n const onNavigateDayDate = (date: Date, focusOnNavigatedDay: boolean): void => {\n navigateDay(date);\n if (focusOnNavigatedDay) {\n focusOnNextUpdate();\n }\n };\n\n const onNavigateMonthDate = (date: Date, focusOnNavigatedDay: boolean): void => {\n if (focusOnNavigatedDay) {\n focusOnNextUpdate();\n }\n\n if (!focusOnNavigatedDay) {\n navigateMonth(date);\n return;\n }\n\n if (monthPickerOnly) {\n onDateSelected(date);\n }\n\n navigateDay(date);\n };\n\n const onHeaderSelect = getShowMonthPickerAsOverlay(props)\n ? (): void => {\n toggleDayMonthPickerVisibility();\n\n focusOnNextUpdate();\n }\n : undefined;\n\n const onGotoToday = (): void => {\n navigateDay(today!);\n focusOnNextUpdate();\n };\n\n const onButtonKeyDown = (callback: () => void): ((ev: React.KeyboardEvent<HTMLButtonElement>) => void) => {\n return (ev: React.KeyboardEvent<HTMLButtonElement>) => {\n // eslint-disable-next-line deprecation/deprecation\n switch (ev.which) {\n case KeyCodes.enter:\n case KeyCodes.space:\n callback();\n break;\n }\n };\n };\n\n const onDatePickerPopupKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\n // eslint-disable-next-line deprecation/deprecation\n switch (ev.which) {\n case KeyCodes.enter:\n ev.preventDefault();\n break;\n\n case KeyCodes.backspace:\n ev.preventDefault();\n break;\n\n case KeyCodes.escape:\n props.onDismiss?.();\n break;\n\n case KeyCodes.pageUp:\n if (ev.ctrlKey) {\n // go to next year\n navigateDay(addYears(navigatedDay, 1));\n } else {\n // go to next month\n navigateDay(addMonths(navigatedDay, 1));\n }\n ev.preventDefault();\n break;\n case KeyCodes.pageDown:\n if (ev.ctrlKey) {\n // go to previous year\n navigateDay(addYears(navigatedDay, -1));\n } else {\n // go to previous month\n navigateDay(addMonths(navigatedDay, -1));\n }\n ev.preventDefault();\n break;\n default:\n break;\n }\n };\n const rootClass = 'ms-DatePicker';\n const {\n firstDayOfWeek,\n dateRangeType,\n strings,\n showGoToToday,\n highlightCurrentMonth,\n highlightSelectedMonth,\n navigationIcons,\n minDate,\n maxDate,\n restrictedDates,\n className,\n showCloseButton,\n allFocusable,\n styles,\n showWeekNumbers,\n theme,\n calendarDayProps,\n calendarMonthProps,\n dateTimeFormatter,\n today = new Date(),\n } = props;\n\n const showMonthPickerAsOverlay = getShowMonthPickerAsOverlay(props);\n\n const monthPickerOnly = !showMonthPickerAsOverlay && !isDayPickerVisible;\n const overlaidWithButton = showMonthPickerAsOverlay && showGoToToday;\n\n const classes = getClassNames(styles, {\n theme: theme!,\n className,\n isMonthPickerVisible: isMonthPickerVisible,\n isDayPickerVisible: isDayPickerVisible,\n monthPickerOnly: monthPickerOnly,\n showMonthPickerAsOverlay: showMonthPickerAsOverlay,\n overlaidWithButton: overlaidWithButton,\n overlayedWithButton: overlaidWithButton,\n showGoToToday: showGoToToday,\n showWeekNumbers: showWeekNumbers,\n });\n\n let todayDateString: string = '';\n let selectedDateString: string = '';\n if (dateTimeFormatter && strings!.todayDateFormatString) {\n todayDateString = format(strings!.todayDateFormatString, dateTimeFormatter.formatMonthDayYear(today, strings!));\n }\n if (dateTimeFormatter && strings!.selectedDateFormatString) {\n selectedDateString = format(\n strings!.selectedDateFormatString,\n dateTimeFormatter.formatMonthDayYear(selectedDate, strings!),\n );\n }\n const selectionAndTodayString = selectedDateString + ', ' + todayDateString;\n\n return (\n <div\n ref={forwardedRef}\n role=\"group\"\n aria-label={selectionAndTodayString}\n className={css(rootClass, classes.root, className, 'ms-slideDownIn10')}\n onKeyDown={onDatePickerPopupKeyDown}\n >\n <div className={classes.liveRegion} aria-live=\"polite\" aria-atomic=\"true\">\n <span>{selectedDateString}</span>\n </div>\n {isDayPickerVisible && (\n <CalendarDay\n selectedDate={selectedDate!}\n navigatedDate={navigatedDay!}\n today={props.today}\n onSelectDate={onDateSelected}\n // eslint-disable-next-line react/jsx-no-bind\n onNavigateDate={onNavigateDayDate}\n onDismiss={props.onDismiss}\n firstDayOfWeek={firstDayOfWeek!}\n dateRangeType={dateRangeType!}\n strings={strings!}\n // eslint-disable-next-line react/jsx-no-bind\n onHeaderSelect={onHeaderSelect}\n navigationIcons={navigationIcons!}\n showWeekNumbers={props.showWeekNumbers}\n firstWeekOfYear={props.firstWeekOfYear!}\n dateTimeFormatter={props.dateTimeFormatter!}\n showSixWeeksByDefault={props.showSixWeeksByDefault}\n minDate={minDate}\n maxDate={maxDate}\n restrictedDates={restrictedDates}\n workWeekDays={props.workWeekDays}\n componentRef={dayPicker}\n showCloseButton={showCloseButton}\n allFocusable={allFocusable}\n {...calendarDayProps} // at end of list so consumer's custom functions take precedence\n />\n )}\n {isDayPickerVisible && isMonthPickerVisible && <div className={classes.divider} />}\n {isMonthPickerVisible ? (\n <div className={classes.monthPickerWrapper}>\n <CalendarMonth\n navigatedDate={navigatedMonth}\n selectedDate={navigatedDay}\n strings={strings!}\n // eslint-disable-next-line react/jsx-no-bind\n onNavigateDate={onNavigateMonthDate}\n today={props.today}\n highlightCurrentMonth={highlightCurrentMonth!}\n highlightSelectedMonth={highlightSelectedMonth!}\n // eslint-disable-next-line react/jsx-no-bind\n onHeaderSelect={onHeaderSelect}\n navigationIcons={navigationIcons!}\n dateTimeFormatter={props.dateTimeFormatter!}\n minDate={minDate}\n maxDate={maxDate}\n componentRef={monthPicker}\n {...calendarMonthProps} // at end of list so consumer's custom functions take precedence\n />\n {renderGoToTodayButton()}\n </div>\n ) : (\n renderGoToTodayButton()\n )}\n <FocusRects />\n </div>\n );\n },\n);\nCalendarBase.displayName = 'CalendarBase';\n\nfunction getShowMonthPickerAsOverlay({ showMonthPickerAsOverlay, isDayPickerVisible }: ICalendarProps) {\n const win = getWindow();\n return showMonthPickerAsOverlay || (isDayPickerVisible && win && win.innerWidth <= MIN_SIZE_FORCE_OVERLAY);\n}\n"]}
\No newline at end of file