Skip to content

Commit ae039b9

Browse files
committed
[added] expose move and label methods for easier external toolbars
1 parent 7e7bc17 commit ae039b9

File tree

5 files changed

+65
-41
lines changed

5 files changed

+65
-41
lines changed

src/Calendar.jsx

+5-40
Original file line numberDiff line numberDiff line change
@@ -12,31 +12,14 @@ import { notify } from './utils/helpers';
1212
import { navigate, views } from './utils/constants';
1313
import dates from './utils/dates';
1414
import defaultFormats from './formats';
15-
16-
import Month from './Month';
17-
import Day from './Day';
18-
import Week from './Week';
19-
import Agenda from './Agenda';
15+
import viewLabel from './utils/viewLabel';
16+
import moveDate from './utils/move';
17+
import VIEWS from './Views';
2018
import Toolbar from './Toolbar';
2119

2220
import omit from 'lodash/object/omit';
2321
import defaults from 'lodash/object/defaults';
2422

25-
const VIEWS = {
26-
[views.MONTH]: Month,
27-
[views.WEEK]: Week,
28-
[views.DAY]: Day,
29-
[views.AGENDA]: Agenda
30-
};
31-
32-
const Formats = {
33-
[views.MONTH]: 'monthHeaderFormat',
34-
[views.WEEK]: 'dayRangeHeaderFormat',
35-
[views.DAY]: 'dayHeaderFormat',
36-
[views.AGENDA]: 'agendaHeaderFormat'
37-
}
38-
39-
4023
function viewNames(_views){
4124
return !Array.isArray(_views) ? Object.keys(_views) : _views
4225
}
@@ -232,18 +215,9 @@ let Calendar = React.createClass({
232215
formats = defaultFormats(formats)
233216

234217
let View = VIEWS[view];
235-
let headerSingle = view === views.MONTH || view === views.DAY
236-
218+
let label = viewLabel(current, view, formats, culture)
237219
let names = viewNames(this.props.views)
238220

239-
let { start, end } = View.range(current, this.props);
240-
241-
let headerFormat = formats[Formats[view]];
242-
243-
let label = headerSingle
244-
? localizer.format(current, headerFormat, culture)
245-
: localizer.format({ start, end }, headerFormat, culture)
246-
247221
let elementProps = omit(this.props, Object.keys(Calendar.propTypes))
248222

249223
let viewComponents = defaults(
@@ -286,16 +260,7 @@ let Calendar = React.createClass({
286260
_navigate(action, newDate) {
287261
let { view, date, onNavigate } = this.props;
288262

289-
switch (action){
290-
case navigate.TODAY:
291-
date = new Date()
292-
break;
293-
case navigate.DATE:
294-
date = newDate
295-
break;
296-
default:
297-
date = VIEWS[view].navigate(newDate || date, action)
298-
}
263+
date = moveDate(action, newDate || date, view)
299264

300265
onNavigate(date, view)
301266

src/Views.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { views } from './utils/constants';
2+
import Month from './Month';
3+
import Day from './Day';
4+
import Week from './Week';
5+
import Agenda from './Agenda';
6+
7+
const VIEWS = {
8+
[views.MONTH]: Month,
9+
[views.WEEK]: Week,
10+
[views.DAY]: Day,
11+
[views.AGENDA]: Agenda
12+
};
13+
14+
export default VIEWS;

src/index.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@ import Calendar from './Calendar';
22
import { set as setLocalizer } from './localizer';
33
import momentLocalizer from './moment-localizer';
44
import globalizeLocalizer from './globalize-localizer';
5+
import viewLabel from './utils/viewLabel';
6+
import move from './utils/move';
57

68
Object.assign(Calendar, {
79
setLocalizer,
810
globalizeLocalizer,
9-
momentLocalizer
11+
momentLocalizer,
12+
label: viewLabel,
13+
move
1014
})
1115

1216
export default Calendar

src/utils/move.js

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { navigate } from './constants';
2+
import VIEWS from '../Views';
3+
4+
export default function moveDate(action, date, view){
5+
switch (action){
6+
case navigate.TODAY:
7+
date = new Date()
8+
break;
9+
case navigate.DATE:
10+
break;
11+
default:
12+
date = VIEWS[view].navigate(date, action)
13+
}
14+
15+
return date
16+
}

src/utils/viewLabel.js

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { views } from './constants';
2+
import defaultFormats from '../formats';
3+
import localizer from '../localizer';
4+
5+
import VIEWS from '../Views';
6+
7+
const Formats = {
8+
[views.MONTH]: 'monthHeaderFormat',
9+
[views.WEEK]: 'dayRangeHeaderFormat',
10+
[views.DAY]: 'dayHeaderFormat',
11+
[views.AGENDA]: 'agendaHeaderFormat'
12+
}
13+
14+
export default function viewLabel(date, view, formats, culture){
15+
let View = VIEWS[view];
16+
let headerSingle = view === views.MONTH || view === views.DAY
17+
18+
formats = defaultFormats(formats || {})
19+
20+
let headerFormat = formats[Formats[view]];
21+
22+
return headerSingle
23+
? localizer.format(date, headerFormat, culture)
24+
: localizer.format(View.range(date, { culture }), headerFormat, culture)
25+
}

0 commit comments

Comments
 (0)