diff options
author | amadilsons <joao.amado.95@gmail.com> | 2017-10-05 16:46:55 +0200 |
---|---|---|
committer | amadilsons <joao.amado.95@gmail.com> | 2017-10-05 16:46:55 +0200 |
commit | 214fe6a61f60513d3ddfc9eee423c1b932ff8463 (patch) | |
tree | 9dee4e972a60a55f3c9dd18733c664c95520a248 | |
parent | c865bfe49785181d97b25cb683c0ed37d82c1a69 (diff) | |
download | wekan-214fe6a61f60513d3ddfc9eee423c1b932ff8463.tar.gz wekan-214fe6a61f60513d3ddfc9eee423c1b932ff8463.tar.bz2 wekan-214fe6a61f60513d3ddfc9eee423c1b932ff8463.zip |
feature implemented, known bugs fixed
-rw-r--r-- | client/components/lists/list.js | 2 | ||||
-rw-r--r-- | client/components/lists/listBody.js | 3 | ||||
-rw-r--r-- | client/components/lists/listHeader.jade | 8 | ||||
-rw-r--r-- | client/components/lists/listHeader.js | 54 | ||||
-rw-r--r-- | models/cards.js | 2 | ||||
-rw-r--r-- | models/lists.js | 47 |
6 files changed, 71 insertions, 45 deletions
diff --git a/client/components/lists/list.js b/client/components/lists/list.js index d99fc963..0e913207 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -81,7 +81,7 @@ BlazeComponent.extendComponent({ function userIsMember() { return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly(); } - + // Disable drag-dropping if the current user is not a board member or is comment only this.autorun(() => { $cards.sortable('option', 'disabled', !userIsMember()); diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js index 5ae645a9..22ed9e57 100644 --- a/client/components/lists/listBody.js +++ b/client/components/lists/listBody.js @@ -102,7 +102,8 @@ BlazeComponent.extendComponent({ reachedWipLimit() { const list = Template.currentData(); - return list.wipLimit.enabled && list.wipLimit.value == list.cards().count(); + if( !list.getWipLimit() ) { return false; } + return list.getWipLimit('enabled') && list.getWipLimit('value') === list.cards().count(); }, events() { diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index df395d65..f0c4e5f1 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -8,7 +8,7 @@ template(name="listHeader") = title if isWipLimitEnabled span - | (#{wipLimit.value}) + | ({{cards.count}}/#{wipLimit.value}) if showCardsCountForList cards.count = cards.count span.lowercase @@ -77,11 +77,11 @@ template(name="setWipLimitPopup") lable {{_ 'set-wip-limit-value'}} ul.pop-over-list li: a.js-enable-wip-limit Enable WIP Limit - if wipEnabled.get + if isWipLimitEnabled i.fa.fa-check - if wipEnabled.get + if isWipLimitEnabled p - input.wip-limit-value(type="number" value="#{wipLimit.value}" min="1" max="99" onkeydown="return false") + input.wip-limit-value(type="number" value="{{ wipLimitValue }}" min="1" max="99" onkeydown="return false") input.wip-limit-apply(type="submit" value="{{_ 'apply'}}") input.wip-limit-error diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index 94b70f2b..361f69cf 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -8,16 +8,19 @@ BlazeComponent.extendComponent({ } }, - isWipLimitEnabled() { - const limit = this.currentData().wipLimit - return limit.enabled && limit.value > 0; - }, - isWatching() { const list = this.currentData(); return list.findWatcher(Meteor.userId()); }, + isWipLimitEnabled() { + const wipLimit = this.currentData().getWipLimit(); + if(!wipLimit) { + return 0; + } + return wipLimit.enabled && wipLimit.value > 0; + }, + limitToShowCardsCount() { return Meteor.user().getLimitToShowCardsCount(); }, @@ -43,12 +46,7 @@ BlazeComponent.extendComponent({ Template.listActionPopup.helpers({ isWipLimitEnabled() { - const prevState = Template.parentData(4).stack[0].dataContext.wipEnableState; - // If user was already inside setWipLimitPopup, return previous state. Popup stack not reacting to database mutations - if(typeof prevState !== "undefined") { - return prevState; - } - return Template.currentData().wipLimit.enabled; + return Template.currentData().getWipLimit('enabled'); }, isWatching() { @@ -80,43 +78,33 @@ Template.listActionPopup.events({ }); BlazeComponent.extendComponent({ - onCreated() { - const prevState = Template.parentData(4).stack[0].dataContext.wipEnableState; - // Check if the user as already opened this popup before and retrieve previous state - // This check is necessary due to the fact that database mutations inside popups are not reactive inside the popup stack. - //The use of ReactiveVar is due to the same reason. - if(typeof prevState !== "undefined") { - this.wipEnabled = new ReactiveVar(prevState) - } else { - this.wipEnabled = new ReactiveVar(Template.currentData().wipLimit.enabled); - } - }, - - onDestroyed() { - // Save current wipEnabled state in the first element of the popup stack to maintain UI coherence if user returns to popup - Template.parentData(4).stack[0].dataContext.wipEnableState = this.wipEnabled.get(); - }, - applyWipLimit() { const list = Template.currentData(); - const limit = Template.instance().$('.wip-limit-value').val(); + const limit = parseInt(Template.instance().$('.wip-limit-value').val(), 10); if(limit < list.cards().count()){ Template.instance().$('.wip-limit-error').click(); } else { - list.setWipLimit(limit); + Meteor.call('applyWipLimit', list._id, limit); + Popup.back(); } }, enableWipLimit() { const list = Template.currentData(); // Prevent user from using previously stored wipLimit.value if it is less than the current number of cards in the list - if(!list.wipLimit.enabled && list.wipLimit.value < list.cards().count()){ + if(list.getWipLimit() && !list.wipLimit.enabled && list.wipLimit.value < list.cards().count()){ list.setWipLimit(list.cards().count()); } + Meteor.call('enableWipLimit', Template.currentData()._id); + }, + + isWipLimitEnabled() { + return Template.currentData().getWipLimit('enabled'); + }, - this.wipEnabled.set(!this.wipEnabled.get()); //If wipLimit.enabled is not yet definied, the negation of "undefined" is "true" - list.toggleWipLimit(this.wipEnabled.get()); + wipLimitValue(){ + return Template.currentData().getWipLimit('value'); }, events() { diff --git a/models/cards.js b/models/cards.js index 7d66bf8b..5b752ec3 100644 --- a/models/cards.js +++ b/models/cards.js @@ -182,7 +182,7 @@ Cards.helpers({ canBeRestored() { const list = Lists.findOne({_id: this.listId}); - if(list.wipLimit.enabled && list.wipLimit.value == list.cards().count()){ + if(list.getWipLimit() && list.getWipLimit('enabled') && list.getWipLimit('value') === list.cards().count()){ return false; } return true; diff --git a/models/lists.js b/models/lists.js index 442b9ee1..877b3d83 100644 --- a/models/lists.js +++ b/models/lists.js @@ -46,16 +46,24 @@ Lists.attachSchema(new SimpleSchema({ type: Object, optional: true, }, - "wipLimit.value": { - type: SimpleSchema.Integer, + 'wipLimit.value': { + type: Number, + decimal: false, + autoValue() { + if(this.isInsert){ + return 0; + } + return this.value; + }, optional: true, }, - "wipLimit.enabled":{ + 'wipLimit.enabled':{ type: Boolean, autoValue() { if(this.isInsert){ return false; } + return this.value; }, optional: true, }, @@ -89,6 +97,17 @@ Lists.helpers({ board() { return Boards.findOne(this.boardId); }, + + getWipLimit(option){ + const list = Lists.findOne({ _id: this._id }); + if(!list.wipLimit) { // Necessary check to avoid exceptions for the case where the doc doesn't have the wipLimit field yet set + return 0; + } else if(!option) { + return list.wipLimit; + } else { + return list.wipLimit[option] ? list.wipLimit[option] : 0; // Necessary check to avoid exceptions for the case where the doc doesn't have the wipLimit field yet set + } + }, }); Lists.mutations({ @@ -105,11 +124,29 @@ Lists.mutations({ }, toggleWipLimit(toggle) { - return { $set: { "wipLimit.enabled": toggle } }; + return { $set: { 'wipLimit.enabled': toggle } }; }, setWipLimit(limit) { - return { $set: { "wipLimit.value": limit } }; + return { $set: { 'wipLimit.value': limit } }; + }, +}); + +Meteor.methods({ + applyWipLimit(listId, limit){ + check(listId, String); + check(limit, Number); + Lists.findOne({ _id: listId }).setWipLimit(limit); + }, + + enableWipLimit(listId) { + check(listId, String); + const list = Lists.findOne({ _id: listId }); + if( list.getWipLimit() ){ // Necessary check to avoid exceptions for the case where the doc doesn't have the wipLimit field yet set + list.toggleWipLimit(!list.wipLimit.enabled); + } else { + list.toggleWipLimit(true); // First time toggle is always to 'true' because default is 'false' + } }, }); |