-
-
Notifications
You must be signed in to change notification settings - Fork 515
/
Weekdays.jsx
69 lines (58 loc) · 1.78 KB
/
Weekdays.jsx
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
import React from 'react';
import PropTypes from 'prop-types';
import mergeClassNames from 'merge-class-names';
import { getYear, getMonth, getMonthStart } from '@wojtekmaj/date-utils';
import Flex from '../Flex';
import { getDayOfWeek, isWeekend } from '../shared/dates';
import {
formatWeekday,
formatShortWeekday as defaultFormatShortWeekday,
} from '../shared/dateFormatter';
import { isCalendarType } from '../shared/propTypes';
const className = 'react-calendar__month-view__weekdays';
const weekdayClassName = `${className}__weekday`;
export default function Weekdays(props) {
const {
calendarType,
formatShortWeekday = defaultFormatShortWeekday,
locale,
onMouseLeave,
} = props;
const anyDate = new Date();
const beginOfMonth = getMonthStart(anyDate);
const year = getYear(beginOfMonth);
const monthIndex = getMonth(beginOfMonth);
const weekdays = [];
for (let weekday = 1; weekday <= 7; weekday += 1) {
const weekdayDate = new Date(
year,
monthIndex,
weekday - getDayOfWeek(beginOfMonth, calendarType),
);
const abbr = formatWeekday(locale, weekdayDate);
weekdays.push(
<div
key={weekday}
className={mergeClassNames(
weekdayClassName,
isWeekend(weekdayDate, calendarType) && `${weekdayClassName}--weekend`,
)}
>
<abbr aria-label={abbr} title={abbr}>
{formatShortWeekday(locale, weekdayDate).replace('.', '')}
</abbr>
</div>,
);
}
return (
<Flex className={className} count={7} onFocus={onMouseLeave} onMouseOver={onMouseLeave}>
{weekdays}
</Flex>
);
}
Weekdays.propTypes = {
calendarType: isCalendarType.isRequired,
formatShortWeekday: PropTypes.func,
locale: PropTypes.string,
onMouseLeave: PropTypes.func,
};