UNPKG

react-calendar

Version:

Ultimate calendar for your React app.

45 lines (44 loc) 2.27 kB
import React from 'react'; import PropTypes from 'prop-types'; import { getYear, getMonth, getDate, getDaysInMonth } from '@wojtekmaj/date-utils'; import WeekNumber from './WeekNumber'; import Flex from '../Flex'; import { getBeginOfWeek, getDayOfWeek, getWeekNumber } from '../shared/dates'; import { isCalendarType } from '../shared/propTypes'; export default function WeekNumbers(props) { var activeStartDate = props.activeStartDate, calendarType = props.calendarType, onClickWeekNumber = props.onClickWeekNumber, onMouseLeave = props.onMouseLeave, showFixedNumberOfWeeks = props.showFixedNumberOfWeeks; var numberOfWeeks = (function () { if (showFixedNumberOfWeeks) { return 6; } var numberOfDays = getDaysInMonth(activeStartDate); var startWeekday = getDayOfWeek(activeStartDate, calendarType); var days = numberOfDays - (7 - startWeekday); return 1 + Math.ceil(days / 7); })(); var dates = (function () { var year = getYear(activeStartDate); var monthIndex = getMonth(activeStartDate); var day = getDate(activeStartDate); var result = []; for (var index = 0; index < numberOfWeeks; index += 1) { result.push(getBeginOfWeek(new Date(year, monthIndex, day + index * 7), calendarType)); } return result; })(); var weekNumbers = dates.map(function (date) { return getWeekNumber(date, calendarType); }); return (React.createElement(Flex, { className: "react-calendar__month-view__weekNumbers", count: numberOfWeeks, direction: "column", onFocus: onMouseLeave, onMouseOver: onMouseLeave, style: { flexBasis: 'calc(100% * (1 / 8)', flexShrink: 0 } }, weekNumbers.map(function (weekNumber, weekIndex) { var date = dates[weekIndex]; if (!date) { throw new Error('date is not defined'); } return (React.createElement(WeekNumber, { key: weekNumber, date: date, onClickWeekNumber: onClickWeekNumber, weekNumber: weekNumber })); }))); } WeekNumbers.propTypes = { activeStartDate: PropTypes.instanceOf(Date).isRequired, calendarType: isCalendarType, onClickWeekNumber: PropTypes.func, onMouseLeave: PropTypes.func, showFixedNumberOfWeeks: PropTypes.bool, };