-
-
Notifications
You must be signed in to change notification settings - Fork 530
Expand file tree
/
Copy pathWeekNumbers.jsx
More file actions
76 lines (65 loc) · 2.15 KB
/
WeekNumbers.jsx
File metadata and controls
76 lines (65 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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) {
const {
activeStartDate,
calendarType,
onClickWeekNumber,
onMouseLeave,
showFixedNumberOfWeeks,
weekNumberContent,
} = props;
const numberOfWeeks = (() => {
if (showFixedNumberOfWeeks) {
return 6;
}
const numberOfDays = getDaysInMonth(activeStartDate);
const startWeekday = getDayOfWeek(activeStartDate, calendarType);
const days = numberOfDays - (7 - startWeekday);
return 1 + Math.ceil(days / 7);
})();
const dates = (() => {
const year = getYear(activeStartDate);
const monthIndex = getMonth(activeStartDate);
const day = getDate(activeStartDate);
const result = [];
for (let index = 0; index < numberOfWeeks; index += 1) {
result.push(getBeginOfWeek(new Date(year, monthIndex, day + index * 7), calendarType));
}
return result;
})();
const weekNumbers = dates.map((date) => getWeekNumber(date, calendarType));
return (
<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((weekNumber, weekIndex) => (
<WeekNumber
key={weekNumber}
date={dates[weekIndex]}
onClickWeekNumber={onClickWeekNumber}
weekNumber={weekNumber}
weekNumberContent={weekNumberContent}
/>
))}
</Flex>
);
}
WeekNumbers.propTypes = {
activeStartDate: PropTypes.instanceOf(Date).isRequired,
calendarType: isCalendarType.isRequired,
onClickWeekNumber: PropTypes.func,
onMouseLeave: PropTypes.func,
showFixedNumberOfWeeks: PropTypes.bool,
weekNumberContent: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),
};