Skip to content

Commit 810a89d

Browse files
authored
Merge pull request #109 from TheoremOne/feature/multiple-push-pull
Feature: Multiple push pull
2 parents 63241fe + ae8261c commit 810a89d

File tree

7 files changed

+58
-9
lines changed

7 files changed

+58
-9
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@theoremone/th1-calendar",
3-
"version": "3.4.1",
3+
"version": "3.4.2",
44
"description": "React Calendar",
55
"contributors": ["Brian Diaz <[email protected]>"],
66
"repository": "https://github.com/TheoremOne/react-big-calendar",

src/Calendar.js

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class Calendar extends React.Component {
8080
state = {
8181
selected: {},
8282
switchMonthHeader: false,
83+
selectedList: [],
8384
};
8485

8586
static propTypes = {
@@ -791,6 +792,7 @@ class Calendar extends React.Component {
791792
onShowMore={this._showMore}
792793
ref="view"
793794
selected={this.state.selected}
795+
selectedList={this.state.selectedList}
794796
showAllEvents={this.props.showAllEvents}
795797
/>
796798
<div
@@ -838,6 +840,7 @@ class Calendar extends React.Component {
838840
onShowMore={this._showMore}
839841
ref="view"
840842
selected={this.state.selected}
843+
selectedList={this.state.selectedList}
841844
showAllEvents={this.props.showAllEvents}
842845
/>
843846
</div>
@@ -867,10 +870,39 @@ class Calendar extends React.Component {
867870

868871
handleSelectEvent = (eventInfo, ...args) => {
869872
const [event] = args;
873+
const { selectedList } = this.state;
870874
event.persist();
875+
871876
if (event && event.shiftKey) {
872-
console.log('isSelectingShiftKey');
873-
notify(this.props.onShiftSelect, event);
877+
const copySelectedList = selectedList;
878+
let eventIndex = null,
879+
hasEvent = false;
880+
881+
for (let index = 0; index < selectedList.length; index++) {
882+
const evt = selectedList[index];
883+
884+
if (evt.id === eventInfo.id) {
885+
eventIndex = index;
886+
hasEvent = true;
887+
break;
888+
}
889+
}
890+
891+
if (hasEvent) {
892+
copySelectedList.splice(eventIndex, eventIndex + 1);
893+
} else {
894+
copySelectedList.push(eventInfo);
895+
}
896+
this.setState({ selectedList: copySelectedList }, () => {
897+
console.log('is selecting', copySelectedList);
898+
notify(this.props.onShiftSelect, copySelectedList);
899+
});
900+
} else {
901+
selectedList.length = 0;
902+
this.setState({ selectedList }, () => {
903+
console.log('left selecting', selectedList);
904+
notify(this.props.onShiftSelect, selectedList);
905+
});
874906
}
875907

876908
this.setState({ selected: eventInfo }, () => {

src/DateContentRow.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const propTypes = {
2525

2626
container: PropTypes.func,
2727
selected: PropTypes.object,
28+
selectedList: PropTypes.array,
2829
selectable: PropTypes.oneOf([true, false, 'ignoreEvents']),
2930
longPressThreshold: PropTypes.number,
3031

src/DayColumn.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class DayColumn extends React.Component {
4949
messages: PropTypes.object,
5050

5151
selected: PropTypes.object,
52+
selectedList: PropTypes.array,
5253
selectable: PropTypes.oneOf([true, false, 'ignoreEvents']),
5354
eventOffset: PropTypes.number,
5455
longPressThreshold: PropTypes.number,
@@ -127,6 +128,7 @@ class DayColumn extends React.Component {
127128
culture,
128129
eventPropGetter,
129130
selected,
131+
selectedList,
130132
messages,
131133
eventComponent,
132134
eventTimeRangeFormat,
@@ -186,6 +188,12 @@ class DayColumn extends React.Component {
186188

187189
let _isSelected = isSelected(event, selected);
188190

191+
console.log({ selectedList });
192+
193+
if (selectedList.length) {
194+
_isSelected = selectedList.some(evt => evt.id === event.data.id);
195+
}
196+
189197
if (eventPropGetter)
190198
var { style: xStyle, className } = eventPropGetter(event, start, end, _isSelected);
191199

src/EventCell.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ let propTypes = {
2121
onInlineEditEventTitle: PropTypes.func.isRequired,
2222
onSelect: PropTypes.func,
2323
selected: PropTypes.bool,
24+
selectedList: PropTypes.array,
2425
slotEnd: PropTypes.instanceOf(Date),
2526
slotStart: PropTypes.instanceOf(Date),
2627
startAccessor: accessor,

src/EventRowMixin.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export default {
1515
start: PropTypes.instanceOf(Date),
1616

1717
selected: PropTypes.object,
18+
selectedList: PropTypes.array,
1819
eventPropGetter: PropTypes.func,
1920
titleAccessor: accessor,
2021
allDayAccessor: accessor,
@@ -30,6 +31,7 @@ export default {
3031
defaultProps: {
3132
segments: [],
3233
selected: {},
34+
selectedList: [],
3335
slots: 7,
3436
},
3537

@@ -45,10 +47,16 @@ export default {
4547
onInlineEditEventTitle,
4648
onSelect,
4749
selected,
50+
selectedList,
4851
start,
4952
startAccessor,
5053
titleAccessor,
5154
} = props;
55+
let _isSelected = isSelected(event.data, selected);
56+
57+
if (selectedList.length) {
58+
_isSelected = selectedList.some(evt => evt.id === event.data.id);
59+
}
5260

5361
return (
5462
<EventCell
@@ -61,7 +69,8 @@ export default {
6169
onDoubleClick={onDoubleClick}
6270
onInlineEditEventTitle={onInlineEditEventTitle}
6371
onSelect={onSelect}
64-
selected={isSelected(event.data, selected)}
72+
selected={_isSelected}
73+
selectedList={selectedList}
6574
slotEnd={end}
6675
slotStart={start}
6776
startAccessor={startAccessor}

src/Month.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ let propTypes = {
5050
endAccessor: accessor.isRequired,
5151

5252
selected: PropTypes.object,
53+
selectedList: PropTypes.array,
5354
selectable: PropTypes.oneOf([true, false, 'ignoreEvents']),
5455
longPressThreshold: PropTypes.number,
5556

@@ -188,6 +189,7 @@ class MonthView extends React.Component {
188189
eventPropGetter,
189190
messages,
190191
selected,
192+
selectedList,
191193
now,
192194
date,
193195
longPressThreshold,
@@ -236,6 +238,7 @@ class MonthView extends React.Component {
236238
renderHeader={this.readerDateHeading}
237239
selectable={selectable}
238240
selected={selected}
241+
selectedList={selectedList}
239242
startAccessor={startAccessor}
240243
titleAccessor={titleAccessor}
241244
onNavigate={onNavigate}
@@ -340,13 +343,8 @@ class MonthView extends React.Component {
340343
};
341344

342345
handleSelectEvent = (...args) => {
343-
const [_, e] = args;
344346
this.clearSelection();
345347
notify(this.props.onSelectEvent, args);
346-
347-
if (e && e.shiftKey) {
348-
notify(this.props.onShiftSelect, e);
349-
}
350348
};
351349

352350
handleDoubleClickEvent = (...args) => {

0 commit comments

Comments
 (0)