diff --git a/client/components/import/import.jade b/client/components/import/import.jade index 2bea24ae4..e8f0a5be2 100644 --- a/client/components/import/import.jade +++ b/client/components/import/import.jade @@ -13,38 +13,41 @@ template(name="import") template(name="importTextarea") form 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}} input.primary.wide(type="submit" value="{{_ 'import'}}") template(name="importMapMembers") 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") .select-member diff --git a/client/components/import/import.js b/client/components/import/import.js index 03afb69b7..f97ab508d 100644 --- a/client/components/import/import.js +++ b/client/components/import/import.js @@ -150,14 +150,39 @@ BlazeComponent.extendComponent({ BlazeComponent.extendComponent({ onCreated() { + this.usersLoaded = new ReactiveVar(false); + 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()); }); + }); }); }, diff --git a/server/publications/users.js b/server/publications/users.js index c04f8c5c1..42861d355 100644 --- a/server/publications/users.js +++ b/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() {