From bbe37cfad83f261e2c24cca3b4f31baa0e818f58 Mon Sep 17 00:00:00 2001 From: amadilsons Date: Wed, 27 Sep 2017 14:29:52 +0200 Subject: sugested fix for issue #881 --- client/components/cards/checklists.js | 90 ++++++++++++++++++++++++++++------- 1 file changed, 72 insertions(+), 18 deletions(-) (limited to 'client/components/cards/checklists.js') diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js index bd9d275a..257f1ec8 100644 --- a/client/components/cards/checklists.js +++ b/client/components/cards/checklists.js @@ -64,6 +64,7 @@ Template.checklists.onRendered(function () { }); BlazeComponent.extendComponent({ + addChecklist(event) { event.preventDefault(); const textarea = this.find('textarea.js-add-checklist-item'); @@ -99,6 +100,30 @@ BlazeComponent.extendComponent({ textarea.focus(); }, + canModifyCard() { + return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly(); + }, + + deleteChecklist() { + const checklist = this.currentData().checklist; + if (checklist && checklist._id) { + Checklists.remove(checklist._id); + this.toggleDeleteDialog.set(false); + } + }, + + deleteDialog() { + return this.toggleDeleteDialog.get(); + }, + + deleteItem() { + const checklist = this.currentData().checklist; + const item = this.currentData().item; + if (checklist && item && item._id) { + checklist.removeItem(item._id); + } + }, + editChecklist(event) { event.preventDefault(); const textarea = this.find('textarea.js-edit-checklist-item'); @@ -107,10 +132,6 @@ BlazeComponent.extendComponent({ checklist.setTitle(title); }, - canModifyCard() { - return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly(); - }, - editChecklistItem(event) { event.preventDefault(); @@ -121,19 +142,9 @@ BlazeComponent.extendComponent({ checklist.editItem(itemId, title); }, - deleteItem() { - const checklist = this.currentData().checklist; - const item = this.currentData().item; - if (checklist && item && item._id) { - checklist.removeItem(item._id); - } - }, - - deleteChecklist() { - const checklist = this.currentData().checklist; - if (checklist && checklist._id) { - Checklists.remove(checklist._id); - } + onCreated() { + this.toggleDeleteDialog = new ReactiveVar(false); + this.checklistToDelete = null; //Store data context to pass to checklistDeleteDialog template }, pressKey(event) { @@ -146,18 +157,61 @@ BlazeComponent.extendComponent({ }, events() { + const events = { + 'click .toggle-delete-checklist-dialog'(event) { + if($(event.target).hasClass('js-delete-checklist')){ + this.checklistToDelete = this.currentData().checklist; //Store data context + } + this.toggleDeleteDialog.set(!this.toggleDeleteDialog.get()); + }, + }; + return [{ + ...events, 'submit .js-add-checklist': this.addChecklist, 'submit .js-edit-checklist-title': this.editChecklist, 'submit .js-add-checklist-item': this.addChecklistItem, 'submit .js-edit-checklist-item': this.editChecklistItem, 'click .js-delete-checklist-item': this.deleteItem, - 'click .js-delete-checklist': this.deleteChecklist, + 'click .confirm-checklist-delete': this.deleteChecklist, keydown: this.pressKey, }]; }, }).register('checklists'); +Template.checklistDeleteDialog.onCreated(() => { + const $cardDetails = this.$('.card-details'); + this.scrollState = { position: $cardDetails.scrollTop(), //save current scroll position + top: false //required for smooth scroll animation + }; + //Callback's purpose is to only prevent scrolling after animation is complete + $cardDetails.animate({ scrollTop: 0 }, 500, () => { this.scrollState.top = true; }); + + //Prevent scrolling while dialog is open + $cardDetails.on('scroll', () => { + if(this.scrollState.top) { //If it's already in position, keep it there. Otherwise let animation scroll + $cardDetails.scrollTop(0); + } + }); +}); + +Template.checklistDeleteDialog.onDestroyed(() => { + const $cardDetails = this.$('.card-details'); + $cardDetails.off('scroll'); //Reactivate scrolling + $cardDetails.animate( { scrollTop: this.scrollState.position }); +}); + +BlazeComponent.extendComponent({ + events() { + const handlers = { + 'click .confirm-checklist-delete'() { + console.log(this.scrollState) + }, + } + + return [ handlers ]; + } +}).register('checklistDeleteDialog'); Template.itemDetail.helpers({ canModifyCard() { return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly(); -- cgit v1.2.3-1-g7c22 From dcd4a2f1e35eccf056b12de05add8d6ec1707887 Mon Sep 17 00:00:00 2001 From: amadilsons Date: Wed, 27 Sep 2017 14:50:00 +0200 Subject: code clean up --- client/components/cards/checklists.js | 11 ----------- 1 file changed, 11 deletions(-) (limited to 'client/components/cards/checklists.js') diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js index 0596d7eb..eccd0551 100644 --- a/client/components/cards/checklists.js +++ b/client/components/cards/checklists.js @@ -203,17 +203,6 @@ Template.checklistDeleteDialog.onDestroyed(() => { $cardDetails.animate( { scrollTop: this.scrollState.position }); }); -BlazeComponent.extendComponent({ - events() { - const handlers = { - 'click .confirm-checklist-delete'() { - console.log(this.scrollState) - }, - } - - return [ handlers ]; - } -}).register('checklistDeleteDialog'); Template.itemDetail.helpers({ canModifyCard() { return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly(); -- cgit v1.2.3-1-g7c22 From 9940d635b447d98f60d31181e2fc15610d05b969 Mon Sep 17 00:00:00 2001 From: amadilsons Date: Wed, 27 Sep 2017 15:42:48 +0200 Subject: removed linting errors --- client/components/cards/checklists.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'client/components/cards/checklists.js') diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js index eccd0551..014b72a4 100644 --- a/client/components/cards/checklists.js +++ b/client/components/cards/checklists.js @@ -184,7 +184,7 @@ BlazeComponent.extendComponent({ Template.checklistDeleteDialog.onCreated(() => { const $cardDetails = this.$('.card-details'); this.scrollState = { position: $cardDetails.scrollTop(), //save current scroll position - top: false //required for smooth scroll animation + top: false, //required for smooth scroll animation }; //Callback's purpose is to only prevent scrolling after animation is complete $cardDetails.animate({ scrollTop: 0 }, 500, () => { this.scrollState.top = true; }); -- cgit v1.2.3-1-g7c22 From 4a20208d95134ba26d2e9fdba3d1e7a4329eb451 Mon Sep 17 00:00:00 2001 From: amadilsons Date: Fri, 29 Sep 2017 14:13:36 +0200 Subject: removed unnecessary deleteDialog helper, delete dialog now uses tap-i18n --- client/components/cards/checklists.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'client/components/cards/checklists.js') diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js index 014b72a4..030711bc 100644 --- a/client/components/cards/checklists.js +++ b/client/components/cards/checklists.js @@ -113,11 +113,7 @@ BlazeComponent.extendComponent({ this.toggleDeleteDialog.set(false); } }, - - deleteDialog() { - return this.toggleDeleteDialog.get(); - }, - + deleteItem() { const checklist = this.currentData().checklist; const item = this.currentData().item; -- cgit v1.2.3-1-g7c22 From e03f2102de5d5e47c997058d4f2c86c3ff2a1373 Mon Sep 17 00:00:00 2001 From: amadilsons Date: Fri, 29 Sep 2017 14:23:54 +0200 Subject: fixed linting error --- client/components/cards/checklists.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'client/components/cards/checklists.js') diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js index 030711bc..1cd77c9f 100644 --- a/client/components/cards/checklists.js +++ b/client/components/cards/checklists.js @@ -113,7 +113,7 @@ BlazeComponent.extendComponent({ this.toggleDeleteDialog.set(false); } }, - + deleteItem() { const checklist = this.currentData().checklist; const item = this.currentData().item; -- cgit v1.2.3-1-g7c22