Skip to content

Commit 749c91c

Browse files
hareljquense
authored andcommitted
feat: add Date-fns localizer (jquense#1542)
* testing date-fns localizer * format updates for fns 2.0 * format updates for fns 2.0 * README update * README update
1 parent 77004e2 commit 749c91c

File tree

3 files changed

+100
-2
lines changed

3 files changed

+100
-2
lines changed

README.md

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ const MyCalendar = props => (
5151
events={myEventsList}
5252
startAccessor="start"
5353
endAccessor="end"
54-
style={{height: 500}}
54+
style={{ height: 500 }}
5555
/>
5656
</div>
5757
)
@@ -72,7 +72,39 @@ const MyCalendar = props => (
7272
events={myEventsList}
7373
startAccessor="start"
7474
endAccessor="end"
75-
style={{height: 500}}
75+
style={{ height: 500 }}
76+
/>
77+
</div>
78+
)
79+
```
80+
81+
#### date-fns 2.0
82+
83+
```js
84+
import { Calendar, dateFnsLocalizer } from 'react-big-calendar'
85+
import format from 'date-fns/format'
86+
import parse from 'date-fns/parse'
87+
import startOfWeek from 'date-fns/startOfWeek'
88+
import getDay from 'date-fns/getDay'
89+
const locales = {
90+
'en-US': require('date-fns/locale/en-US'),
91+
}
92+
const localizer = dateFnsLocalizer({
93+
format,
94+
parse,
95+
startOfWeek,
96+
getDay,
97+
locales,
98+
})
99+
100+
const MyCalendar = props => (
101+
<div>
102+
<Calendar
103+
localizer={localizer}
104+
events={myEventsList}
105+
startAccessor="start"
106+
endAccessor="end"
107+
style={{ height: 500 }}
76108
/>
77109
</div>
78110
)

src/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ export { default as Calendar } from './Calendar'
1111
export { DateLocalizer } from './localizer'
1212
export { default as momentLocalizer } from './localizers/moment'
1313
export { default as globalizeLocalizer } from './localizers/globalize'
14+
export { default as dateFnsLocalizer } from './localizers/date-fns'
1415
export { default as move } from './utils/move'
1516
export { views as Views, navigate as Navigate } from './utils/constants'

src/localizers/date-fns.js

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import * as dates from '../utils/dates'
2+
import { DateLocalizer } from '../localizer'
3+
4+
let dateRangeFormat = ({ start, end }, culture, local) =>
5+
`${local.format(start, 'P', culture)}${local.format(end, 'P', culture)}`
6+
7+
let timeRangeFormat = ({ start, end }, culture, local) =>
8+
`${local.format(start, 'p', culture)}${local.format(end, 'p', culture)}`
9+
10+
let timeRangeStartFormat = ({ start }, culture, local) =>
11+
`${local.format(start, 'h:mma', culture)} – `
12+
13+
let timeRangeEndFormat = ({ end }, culture, local) =>
14+
` – ${local.format(end, 'h:mma', culture)}`
15+
16+
let weekRangeFormat = ({ start, end }, culture, local) =>
17+
`${local.format(start, 'MMMM dd', culture)}${local.format(
18+
end,
19+
dates.eq(start, end, 'month') ? 'dd' : 'MMMM dd',
20+
culture
21+
)}`
22+
23+
export let formats = {
24+
dateFormat: 'dd',
25+
dayFormat: 'dd ddd',
26+
weekdayFormat: 'cccc',
27+
28+
selectRangeFormat: timeRangeFormat,
29+
eventTimeRangeFormat: timeRangeFormat,
30+
eventTimeRangeStartFormat: timeRangeStartFormat,
31+
eventTimeRangeEndFormat: timeRangeEndFormat,
32+
33+
timeGutterFormat: 'p',
34+
35+
monthHeaderFormat: 'MMMM yyyy',
36+
dayHeaderFormat: 'dddd MMM dd',
37+
dayRangeHeaderFormat: weekRangeFormat,
38+
agendaHeaderFormat: dateRangeFormat,
39+
40+
agendaDateFormat: 'ddd MMM dd',
41+
agendaTimeFormat: 'p',
42+
agendaTimeRangeFormat: timeRangeFormat,
43+
}
44+
45+
const dateFnsLocalizer = function({
46+
startOfWeek,
47+
getDay,
48+
format: _format,
49+
locales,
50+
}) {
51+
return new DateLocalizer({
52+
formats,
53+
firstOfWeek(culture) {
54+
return getDay(startOfWeek(new Date(), { locale: locales[culture] }))
55+
},
56+
57+
format(value, formatString, culture) {
58+
return _format(new Date(value), formatString, {
59+
locale: locales[culture],
60+
})
61+
},
62+
})
63+
}
64+
65+
export default dateFnsLocalizer

0 commit comments

Comments
 (0)