Browse Source

Merge pull request #3500 from jrsupplee/patch-5

Fix some bugs when importing Wekan JSON
Lauri Ojansivu 4 years ago
parent
commit
f7cc1abc8e

+ 30 - 27
client/components/import/import.jade

@@ -13,38 +13,41 @@ template(name="import")
 template(name="importTextarea")
 template(name="importTextarea")
   form
   form
     p: label(for='import-textarea') {{_ instruction}} {{_ 'import-board-instruction-about-errors'}}
     p: label(for='import-textarea') {{_ instruction}} {{_ 'import-board-instruction-about-errors'}}
-    textarea.js-import-json(placeholder="{{_ importPlaceHolder}}" autofocus)
+    textarea.js-import-json(id='import-textarea' placeholder="{{_ importPlaceHolder}}" autofocus)
       | {{jsonText}}
       | {{jsonText}}
     input.primary.wide(type="submit" value="{{_ 'import'}}")
     input.primary.wide(type="submit" value="{{_ 'import'}}")
 
 
 template(name="importMapMembers")
 template(name="importMapMembers")
   h2 {{_ 'import-map-members'}}
   h2 {{_ 'import-map-members'}}
-  .map-members
-    p {{_ 'import-members-map'}}
-    .mapping-list
-      each members
-        a.mapping-item.js-select-member(class="{{#if wekanId}}filled{{/if}}")
-          .profile-source
-            .full-name= fullName
-            .username
-              | ({{username}})
-          .wekan
-            if wekanId
-              +userAvatar(userId=wekanId)
-            else
-              a.member.add-member
-                i.fa.fa-plus
-      //-
-        Due to the way the flewbox layout is working, we need to set some
-        invisible items so that the last row items have a consistent width.
-        See http://jsfiddle.net/Ln4h3c4n/ for an minimal example of the issue.
-      .mapping-item.ghost-item
-      .mapping-item.ghost-item
-      .mapping-item.ghost-item
-      .mapping-item.ghost-item
-      .mapping-item.ghost-item
-    form
-      input.primary.wide(type="submit" value="{{_ 'done'}}")
+  if usersLoaded.get
+    .map-members
+      p {{_ 'import-members-map'}}
+      .mapping-list
+        each members
+          a.mapping-item.js-select-member(class="{{#if wekanId}}filled{{/if}}")
+            .profile-source
+              .full-name= fullName
+              .username
+                | ({{username}})
+            .wekan
+              if wekanId
+                +userAvatar(userId=wekanId)
+              else
+                a.member.add-member
+                  i.fa.fa-plus
+        //-
+          Due to the way the flewbox layout is working, we need to set some
+          invisible items so that the last row items have a consistent width.
+          See http://jsfiddle.net/Ln4h3c4n/ for an minimal example of the issue.
+        .mapping-item.ghost-item
+        .mapping-item.ghost-item
+        .mapping-item.ghost-item
+        .mapping-item.ghost-item
+        .mapping-item.ghost-item
+      form
+        input.primary.wide(type="submit" value="{{_ 'done'}}")
+  else
+    +spinner
 
 
 template(name="importMapMembersAddPopup")
 template(name="importMapMembersAddPopup")
   .select-member
   .select-member

+ 30 - 5
client/components/import/import.js

@@ -150,14 +150,39 @@ BlazeComponent.extendComponent({
 
 
 BlazeComponent.extendComponent({
 BlazeComponent.extendComponent({
   onCreated() {
   onCreated() {
+    this.usersLoaded = new ReactiveVar(false);
+
     this.autorun(() => {
     this.autorun(() => {
-      this.parentComponent()
-        .membersToMap.get()
-        .forEach(({ wekanId }) => {
-          if (wekanId) {
-            this.subscribe('user-miniprofile', wekanId);
+      const handle = this.subscribe(
+        'user-miniprofile',
+        this.members().map(member => {
+          return member.username;
+        }),
+      );
+      Tracker.nonreactive(() => {
+        Tracker.autorun(() => {
+          if (
+            handle.ready() &&
+            !this.usersLoaded.get() &&
+            this.members().length
+          ) {
+            this._refreshMembers(
+              this.members().map(member => {
+                if (!member.wekanId) {
+                  const user = Users.findOne({ username: member.username });
+                  if (user) {
+                    // eslint-disable-next-line no-console
+                    console.log('found username:', user.username);
+                    member.wekanId = user._id;
+                  }
+                }
+                return member;
+              }),
+            );
           }
           }
+          this.usersLoaded.set(handle.ready());
         });
         });
+      });
     });
     });
   },
   },
 
 

+ 4 - 0
models/customFields.js

@@ -69,24 +69,28 @@ CustomFields.attachSchema(
        * should we show on the cards this custom field
        * should we show on the cards this custom field
        */
        */
       type: Boolean,
       type: Boolean,
+      defaultValue: false,
     },
     },
     automaticallyOnCard: {
     automaticallyOnCard: {
       /**
       /**
        * should the custom fields automatically be added on cards?
        * should the custom fields automatically be added on cards?
        */
        */
       type: Boolean,
       type: Boolean,
+      defaultValue: false,
     },
     },
     alwaysOnCard: {
     alwaysOnCard: {
       /**
       /**
        * should the custom field be automatically added to all cards?
        * should the custom field be automatically added to all cards?
        */
        */
       type: Boolean,
       type: Boolean,
+      defaultValue: false,
     },
     },
     showLabelOnMiniCard: {
     showLabelOnMiniCard: {
       /**
       /**
        * should the label of the custom field be shown on minicards?
        * should the label of the custom field be shown on minicards?
        */
        */
       type: Boolean,
       type: Boolean,
+      defaultValue: false,
     },
     },
     createdAt: {
     createdAt: {
       type: Date,
       type: Date,

+ 2 - 1
models/wekanCreator.js

@@ -258,8 +258,9 @@ export class WekanCreator {
     // now add other members
     // now add other members
     if (boardToImport.members) {
     if (boardToImport.members) {
       boardToImport.members.forEach(wekanMember => {
       boardToImport.members.forEach(wekanMember => {
-        // do we already have it in our list?
+        // is it defined and do we already have it in our list?
         if (
         if (
+          wekanMember.wekanId &&
           !boardToCreate.members.some(
           !boardToCreate.members.some(
             member => member.wekanId === wekanMember.wekanId,
             member => member.wekanId === wekanMember.wekanId,
           )
           )

+ 8 - 10
server/publications/users.js

@@ -1,14 +1,12 @@
-Meteor.publish('user-miniprofile', function(userId) {
-  check(userId, String);
+Meteor.publish('user-miniprofile', function(usernames) {
+  check(usernames, Array);
 
 
-  return Users.find(userId, {
-    fields: {
-      username: 1,
-      'profile.fullname': 1,
-      'profile.avatarUrl': 1,
-      'profile.initials': 1,
-    },
-  });
+  // eslint-disable-next-line no-console
+  // console.log('usernames:', usernames);
+  return Users.find(
+    { username: { $in: usernames } },
+    { fields: Users.safeFields },
+  );
 });
 });
 
 
 Meteor.publish('user-admin', function() {
 Meteor.publish('user-admin', function() {