summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/components/lists/list.styl5
-rw-r--r--client/components/lists/listHeader.jade26
-rw-r--r--client/components/lists/listHeader.js77
-rw-r--r--i18n/en-GB.i18n.json1
-rw-r--r--i18n/en.i18n.json1
-rw-r--r--i18n/pt-BR.i18n.json1
-rw-r--r--models/lists.js28
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 } };
},
});