Make sure user data is retrieved before proceeding with import

This commit is contained in:
John R. Supplee 2021-01-28 18:18:31 +02:00
parent 0adde3e06d
commit d647884b91
3 changed files with 68 additions and 42 deletions

View file

@ -13,12 +13,13 @@ 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'}}
if usersLoaded.get
.map-members .map-members
p {{_ 'import-members-map'}} p {{_ 'import-members-map'}}
.mapping-list .mapping-list
@ -45,6 +46,8 @@ template(name="importMapMembers")
.mapping-item.ghost-item .mapping-item.ghost-item
form form
input.primary.wide(type="submit" value="{{_ 'done'}}") input.primary.wide(type="submit" value="{{_ 'done'}}")
else
+spinner
template(name="importMapMembersAddPopup") template(name="importMapMembersAddPopup")
.select-member .select-member

View file

@ -150,13 +150,38 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({ BlazeComponent.extendComponent({
onCreated() { onCreated() {
this.usersLoaded = new ReactiveVar(false);
this.autorun(() => { this.autorun(() => {
this.parentComponent() const handle = this.subscribe(
.membersToMap.get() 'user-miniprofile',
.forEach(({ wekanId }) => { this.members().map(member => {
if (wekanId) { return member.username;
this.subscribe('user-miniprofile', wekanId); }),
);
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());
});
}); });
}); });
}, },

View file

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