summaryrefslogtreecommitdiffstats
path: root/client/components/sidebar/sidebarFilters.js
diff options
context:
space:
mode:
authorMaxime Quandalle <maxime@quandalle.com>2015-06-15 17:16:56 +0200
committerMaxime Quandalle <maxime@quandalle.com>2015-06-16 14:30:21 +0200
commit5478fc93dbe3be14c4a38754881e00dc0b6a38f9 (patch)
tree8b40a29a3cbe07747112e809db3fd12b719ae3bf /client/components/sidebar/sidebarFilters.js
parenta41e07b37ec9243191804ac2966e2d136ce79710 (diff)
downloadwekan-5478fc93dbe3be14c4a38754881e00dc0b6a38f9.tar.gz
wekan-5478fc93dbe3be14c4a38754881e00dc0b6a38f9.tar.bz2
wekan-5478fc93dbe3be14c4a38754881e00dc0b6a38f9.zip
Improve the multi-selection experience
New features: - select all filtered cards - assign or unassign a member to selected cards - archive selected cards This commit also fix the card sort indexes calculation when a multi- selection is drag-dropped.
Diffstat (limited to 'client/components/sidebar/sidebarFilters.js')
-rw-r--r--client/components/sidebar/sidebarFilters.js58
1 files changed, 50 insertions, 8 deletions
diff --git a/client/components/sidebar/sidebarFilters.js b/client/components/sidebar/sidebarFilters.js
index 42b6e185..c7b28443 100644
--- a/client/components/sidebar/sidebarFilters.js
+++ b/client/components/sidebar/sidebarFilters.js
@@ -5,19 +5,26 @@ BlazeComponent.extendComponent({
events: function() {
return [{
- 'click .js-toggle-label-filter': function(event) {
+ 'click .js-toggle-label-filter': function(evt) {
+ evt.preventDefault();
Filter.labelIds.toogle(this.currentData()._id);
Filter.resetExceptions();
- event.preventDefault();
},
- 'click .js-toogle-member-filter': function(event) {
+ 'click .js-toogle-member-filter': function(evt) {
+ evt.preventDefault();
Filter.members.toogle(this.currentData()._id);
Filter.resetExceptions();
- event.preventDefault();
},
- 'click .js-clear-all': function(event) {
+ 'click .js-clear-all': function(evt) {
+ evt.preventDefault();
Filter.reset();
- event.preventDefault();
+ },
+ 'click .js-filter-to-selection': function(evt) {
+ evt.preventDefault();
+ var selectedCards = Cards.find(Filter.mongoSelector()).map(function(c) {
+ return c._id;
+ });
+ MultiSelection.add(selectedCards);
}
}];
}
@@ -57,7 +64,7 @@ BlazeComponent.extendComponent({
events: function() {
return [{
- 'click .js-toggle-label-multiselection': function(evt, tpl) {
+ 'click .js-toggle-label-multiselection': function(evt) {
var labelId = this.currentData()._id;
var mappedSelection = this.mapSelection('label', labelId);
var operation;
@@ -69,7 +76,7 @@ BlazeComponent.extendComponent({
var popup = Popup.open('disambiguateMultiLabel');
// XXX We need to have a better integration between the popup and the
// UI components systems.
- return popup.call(this.currentData(), evt, tpl);
+ return popup.call(this.currentData(), evt);
}
var query = {};
@@ -77,6 +84,30 @@ BlazeComponent.extendComponent({
labelIds: labelId
};
updateSelectedCards(query);
+ },
+ 'click .js-toogle-member-multiselection': function(evt) {
+ var memberId = this.currentData()._id;
+ var mappedSelection = this.mapSelection('member', memberId);
+ var operation;
+ if (_.every(mappedSelection))
+ operation = '$pull';
+ else if (_.every(mappedSelection, function(bool) { return ! bool; }))
+ operation = '$addToSet';
+ else {
+ var popup = Popup.open('disambiguateMultiMember');
+ // XXX We need to have a better integration between the popup and the
+ // UI components systems.
+ return popup.call(this.currentData(), evt);
+ }
+
+ var query = {};
+ query[operation] = {
+ members: memberId
+ };
+ updateSelectedCards(query);
+ },
+ 'click .js-archive-selection': function() {
+ updateSelectedCards({$set: {archived: true}});
}
}];
}
@@ -92,3 +123,14 @@ Template.disambiguateMultiLabelPopup.events({
Popup.close();
}
});
+
+Template.disambiguateMultiMemberPopup.events({
+ 'click .js-unassign-member': function() {
+ updateSelectedCards({$pull: {members: this._id}});
+ Popup.close();
+ },
+ 'click .js-assign-member': function() {
+ updateSelectedCards({$addToSet: {members: this._id}});
+ Popup.close();
+ }
+});