Explorar el Código

Merge pull request #4598 from Viehlieb/feature/save_description_on_card_exit

Feature/save description on card exit
Lauri Ojansivu hace 2 años
padre
commit
5b883f4ea6

+ 19 - 0
client/components/cards/cardDetails.js

@@ -1714,10 +1714,29 @@ BlazeComponent.extendComponent({
 EscapeActions.register(
   'detailsPane',
   () => {
+    // if card description diverges from database due to editing
+    // ask user whether changes should be applied
+    if(currentUser.profile.rescueCardDescription== true)
+    {
+      currentDescription = document.getElementsByClassName("editor js-new-description-input").item(0)
+      if (currentDescription?.value && !(currentDescription.value === Utils.getCurrentCard().getDescription()))
+      {
+        if (confirm(TAPi18n.__('rescue-card-description-dialogue'))) {
+          Utils.getCurrentCard().setDescription(document.getElementsByClassName("editor js-new-description-input").item(0).value);
+          // Save it!
+          console.log(document.getElementsByClassName("editor js-new-description-input").item(0).value);
+          console.log("current description",Utils.getCurrentCard().getDescription());
+        } else {
+          // Do nothing!
+          console.log('Description changes were not saved to the database.');
+        }
+      }
+    }
     if (Session.get('cardDetailsIsDragging')) {
       // Reset dragging status as the mouse landed outside the cardDetails template area and this will prevent a mousedown event from firing
       Session.set('cardDetailsIsDragging', false);
       Session.set('cardDetailsIsMouseDown', false);
+
     } else {
       // Prevent close card when the user is selecting text and moves the mouse cursor outside the card detail area
       Utils.goBoardId(Session.get('currentBoard'));

+ 7 - 0
client/components/users/userHeader.jade

@@ -180,6 +180,13 @@ template(name="changeSettingsPopup")
               option(selected="true", value="#{day.value}") #{day.name}
             else
               option(value="#{day.value}") #{day.name}
+        label.bold.clear
+          | {{_ 'card-settings'}}
+        ul#cards.card-description-rescued
+          a.flex.js-rescue-card-description(title="{{_ 'rescue-card-description'}}")
+            b  
+            #rescue-card-description.materialCheckBox.left(class="{{#if rescueCardDescription}}is-checked{{/if}}", value=rescueCardDescription)
+            span {{_ 'rescue-card-description'}}
         input.js-apply-user-settings.left(type="submit" value="{{_ 'apply'}}")
 
 template(name="userDeletePopup")

+ 13 - 0
client/components/users/userHeader.js

@@ -297,6 +297,16 @@ Template.changeSettingsPopup.helpers({
       return false;
     }
   },
+  rescueCardDescription() {
+    currentUser = Meteor.user();
+    if (currentUser) {
+      return (currentUser.profile || {}).rescueCardDescription;
+    } else if (window.localStorage.getItem('rescueCardDescription')) {
+      return true;
+    } else {
+      return false;
+    }
+  },
   showCardsCountAt() {
     currentUser = Meteor.user();
     if (currentUser) {
@@ -356,6 +366,9 @@ Template.changeSettingsPopup.events({
       window.localStorage.setItem('hasHiddenSystemMessages', 'true');
     }
   },
+  'click .js-rescue-card-description'() {
+    Meteor.call('toggleRescueCardDescription')
+    },
   'click .js-apply-user-settings'(event, templateInstance) {
     event.preventDefault();
     let minLimit = parseInt(

+ 4 - 1
imports/i18n/data/de.i18n.json

@@ -541,6 +541,9 @@
     "rename": "Umbenennen",
     "rename-board": "Board umbenennen",
     "restore": "Wiederherstellen",
+    "rescue-card-description": "Vor dem Schließen Dialog für ungespeicherte Änderungen von Kartenbeschreibungen anzeigen",
+    "rescue-card-description-dialogue": "Aktuelle Kartenbeschreibung mit ihren Änderungen überschreiben?",
+    "card-settings": "Karteneinstellungen",
     "save": "Speichern",
     "search": "Suchen",
     "rules": "Regeln",
@@ -1178,4 +1181,4 @@
     "action": "Aktion",
     "board-title": "Board-Titel",
     "attachmentRenamePopup-title": "Umbenennen"
-}
+}

+ 3 - 0
imports/i18n/data/en.i18n.json

@@ -541,6 +541,9 @@
   "rename": "Rename",
   "rename-board": "Rename Board",
   "restore": "Restore",
+  "rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions",
+  "rescue-card-description-dialogue": "Overwrite current card description with your changes?",
+  "card-settings":"Card Settings",
   "save": "Save",
   "search": "Search",
   "rules": "Rules",

+ 23 - 0
models/users.js

@@ -337,6 +337,13 @@ Users.attachSchema(
       type: Date,
       optional: true,
     },
+    'profile.rescueCardDescription': {
+      /**
+       * show dialog for saving card description on unintentional card closing
+       */
+      type: Boolean,
+      optional: true,
+    },
     'profile.showCardsCountAt': {
       /**
        * showCardCountAt field of the user
@@ -794,6 +801,11 @@ Users.helpers({
     return profile.hiddenMinicardLabelText || false;
   },
 
+  hasRescuedCardDescription(){
+    const profile = this.profile || {};
+    return profile.rescueCardDescription || false;
+  },
+
   getEmailBuffer() {
     const { emailBuffer = [] } = this.profile || {};
     return emailBuffer;
@@ -1004,6 +1016,13 @@ Users.mutations({
       },
     };
   },
+  toggleRescueCardDescription(value = false) {
+    return {
+      $set: {
+        'profile.rescueCardDescription': !value,
+      },
+    };
+  },
 
   addNotification(activityId) {
     return {
@@ -1103,6 +1122,10 @@ Meteor.methods({
     const user = Meteor.user();
     user.toggleLabelText(user.hasHiddenMinicardLabelText());
   },
+  toggleRescueCardDescription() {
+    const user = Meteor.user();
+    user.toggleRescueCardDescription(user.hasRescuedCardDescription());
+  },
   changeLimitToShowCardsCount(limit) {
     check(limit, Number);
     Meteor.user().setShowCardsCountAt(limit);