diff options
-rw-r--r-- | client/components/lists/list.styl | 5 | ||||
-rw-r--r-- | client/components/lists/listHeader.jade | 26 | ||||
-rw-r--r-- | client/components/lists/listHeader.js | 77 | ||||
-rw-r--r-- | i18n/en-GB.i18n.json | 1 | ||||
-rw-r--r-- | i18n/en.i18n.json | 1 | ||||
-rw-r--r-- | i18n/pt-BR.i18n.json | 1 | ||||
-rw-r--r-- | models/lists.js | 28 |
7 files changed, 125 insertions, 14 deletions
diff --git a/client/components/lists/list.styl b/client/components/lists/list.styl index 4c6c792f..f426b243 100644 --- a/client/components/lists/list.styl +++ b/client/components/lists/list.styl @@ -113,7 +113,7 @@ #js-wip-limit-edit padding-top: 2% - + p margin-bottom: 0 @@ -123,3 +123,6 @@ .wip-limit-value width: 20% margin-right: 5% + + .wip-limit-error + display: none diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index 5d352b2e..97dbf1c8 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -6,9 +6,9 @@ template(name="listHeader") h2.list-header-name( class="{{#if currentUser.isBoardMember}}js-open-inlined-form is-editable{{/if}}") = title - if hasWipLimit + if isWipLimitEnabled span - | (#{wipLimit}) + | (#{wipLimit.value}) if showCardsCountForList cards.count = cards.count span.lowercase @@ -37,7 +37,7 @@ template(name="listActionPopup") li: a.js-select-cards {{_ 'list-select-cards'}} hr ul.pop-over-list - li: a.js-set-wip-limit {{#if hasWipLimit}}{{_ 'edit-wip-limit'}}{{else}}{{_ 'setWipLimitPopup-title'}}{{/if}} + li: a.js-set-wip-limit {{#if isWipLimitEnabled }}EDIT{{else}}{{_ 'setWipLimitPopup-title'}}{{/if}} hr ul.pop-over-list li: a.js-close-list {{_ 'archive-list'}} @@ -74,6 +74,20 @@ template(name="listDeletePopup") template(name="setWipLimitPopup") #js-wip-limit-edit lable {{_ 'set-wip-limit-value'}} - p - input.wip-limit-value(type="number" value="#{wipLimit}" min="0" max="99" onkeydown="return false") - input.wip-limit-apply(type="submit" value="{{_ 'apply'}}") + {{one}} + ul.pop-over-list + li: a.js-enable-wip-limit Enable WIP Limit + if isWipLimitEnabled + i.fa.fa-check + + if isWipLimitEnabled + p + input.wip-limit-value(type="number" value="#{wipLimit.value}" min="1" max="99" onkeydown="return false") + input.wip-limit-apply(type="submit" value="{{_ 'apply'}}") + input.wip-limit-error + +template(name="wipLimitErrorPopup") + .wip-limit-invalid + p The number of tasks in this list is higher than the WIP limit you've defined. + p Please move some tasks out of this list, or set a higher WIP limit. + button.full.js-back-view(type="submit") {{_ 'cancel'}} diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index 0dc15315..9ae2c1fe 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -8,8 +8,9 @@ BlazeComponent.extendComponent({ } }, - hasWipLimit() { - return this.currentData().wipLimit > 0 ? true : false; + isWipLimitEnabled() { + const limit = this.currentData().wipLimit + return limit.enabled && limit.value > 0; }, isWatching() { @@ -41,10 +42,9 @@ BlazeComponent.extendComponent({ }).register('listHeader'); Template.listActionPopup.helpers({ - hasWipLimit() { - return this.wipLimit > 0 ? true : false; + isWipLimitEnabled() { + return Lists.findOne(this.data()._id, { 'wipLimit.enabled': 1 }).wipLimit.enabled; }, - isWatching() { return this.findWatcher(Meteor.userId()); }, @@ -73,12 +73,77 @@ Template.listActionPopup.events({ 'click .js-more': Popup.open('listMore'), }); +Template.setWipLimitPopup.helpers({ + one() { + //console.log(this) + //console.log(Template.instance()) + } +}); + +BlazeComponent.extendComponent({ + onCreated() { + this.wipEnabled = new ReactiveVar(Template.currentData().wipLimit.enabled); + }, + + toggleWipEnabled() { + const list = Lists.findOne(this.data()._id); + list.wipLimit.enabled ? list.setWipLimitDisabled() : list.setWipLimitEnabled() + }, + + isWipLimitEnabled() { + return Lists.findOne(this.data()._id, { 'wipLimit.enabled': 1 }).wipLimit.enabled; + }, + events() { + return [{ + 'click .js-enable-wip-limit'(_, instance) { + //By default wipLimit.enabled is false or undefined. First click will always be to enable wip limiting + this.wipEnabled.set(!this.wipEnabled.get()); + //console.log(Template.parentData(2)) + //Template.parentData(2).data.toggleWipLimit(!Template.currentData().wipLimit.enabled); //If wipLimit.enabled is not yet definied, the negation of "undefined" is "true" + this.toggleWipEnabled() + }, + 'click .wip-limit-apply'(_, instance) { + const list = Template.currentData(); + const limit = Template.instance().$('.wip-limit-value').val(); + + if(limit < list.allCards().count()){ + Template.instance().$('.wip-limit-error').click(); + } else { + list.setWipLimit(limit); + } + }, + 'click .wip-limit-error': Popup.open('wipLimitError'), + }]; + }, +}).register('setWipLimitPopup'); + + +/* +Template.setWipLimitPopup.helpers({ + isWipLimitEnabled(instance) { + console.log(this); + console.log(Template.currentData()); + console.log(instance); + return Template.currentData().wipLimit.enabled; + }, +}); + Template.setWipLimitPopup.events({ + 'click .js-enable-wip-limit'(_, instance) { + //By default wipLimit.enabled is false or undefined. First click will always be to enable wip limiting + instance.wipEnabled.set(!instance.wipEnabled.get()) + // list.toggleWipLimit(!list.wipLimit.enabled); //If wipLimit.enabled is not yet definied, the negation of "undefined" is "true" + }, 'click .wip-limit-apply'(_, instance) { const limit = instance.$('.wip-limit-value').val(); + if(limit < this.allCards().count()){ + instance.$('.wip-limit-error').click(); //open popup with invisible button click + return; + } this.setWipLimit(limit); }, -}); + 'click .wip-limit-error': Popup.open('wipLimitError'), +});*/ Template.listMorePopup.events({ 'click .js-delete': Popup.afterConfirm('listDelete', function () { diff --git a/i18n/en-GB.i18n.json b/i18n/en-GB.i18n.json index 816d4208..f49d3d84 100644 --- a/i18n/en-GB.i18n.json +++ b/i18n/en-GB.i18n.json @@ -349,6 +349,7 @@ "welcome-list1": "Basics", "welcome-list2": "Advanced", "what-to-do": "What do you want to do?", + "wipLimitErrorPopup-title": "Invalid WIP Limit", "admin-panel": "Admin Panel", "settings": "Settings", "people": "People", diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 139a1011..a16a3b3b 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -349,6 +349,7 @@ "welcome-list1": "Basics", "welcome-list2": "Advanced", "what-to-do": "What do you want to do?", + "wipLimitErrorPopup-title": "Invalid WIP Limit", "admin-panel": "Admin Panel", "settings": "Settings", "people": "People", diff --git a/i18n/pt-BR.i18n.json b/i18n/pt-BR.i18n.json index 39bb67c1..97927e6d 100644 --- a/i18n/pt-BR.i18n.json +++ b/i18n/pt-BR.i18n.json @@ -349,6 +349,7 @@ "welcome-list1": "Básico", "welcome-list2": "Avançado", "what-to-do": "O que você gostaria de fazer?", + "wipLimitErrorPopup-title": "Limite WIP Inválido", "admin-panel": "Painel Administrativo", "settings": "Configurações", "people": "Pessoas", diff --git a/models/lists.js b/models/lists.js index 837af73c..29dd28fb 100644 --- a/models/lists.js +++ b/models/lists.js @@ -43,9 +43,22 @@ Lists.attachSchema(new SimpleSchema({ }, }, wipLimit: { + type: Object, + optional: true, + }, + "wipLimit.value": { type: SimpleSchema.Integer, optional: true, }, + "wipLimit.enabled":{ + type: Boolean, + autoValue() { + if(this.isInsert){ + return false; + } + }, + optional: true, + }, })); Lists.allow({ @@ -91,8 +104,21 @@ Lists.mutations({ return { $set: { archived: false } }; }, + toggleWipLimit(toggle) { + console.log("toggle " + this.wipLimit.enabled) + return { $set: { "wipLimit.enabled": !this.wipLimit.enabled } }; + }, + + setWipLimitEnabled() { + return { $set: { "wipLimit.enabled": true } }; + }, + + setWipLimitDisabled() { + return { $set: { "wipLimit.enabled": false } }; + }, + setWipLimit(limit) { - return { $set: { wipLimit: limit } }; + return { $set: { "wipLimit.value": limit } }; }, }); |