Fixed restoring characters not working correctly for sub documents

This commit is contained in:
Stefan Zermatten
2019-02-11 13:04:14 +02:00
parent c9710bdb09
commit 8489ef5ec0
4 changed files with 42 additions and 16 deletions

View File

@@ -86,17 +86,7 @@ Template.characterList.events({
template: "characterRestoreDialog",
element: event.currentTarget,
callback(dump){
if (!dump) return;
dump.character.name += " - Restored"
dump.character.owner = Meteor.userId();
dump.character.readers = [];
dump.character.writers = [];
giveCharacterDumpNewIds(dump);
restoreCharacter(dump);
Router.go("characterSheet", {
_id: dump.character._id,
urlName: dump.character.urlName || '-',
});
return;
},
})
},

View File

@@ -17,6 +17,9 @@
{{error}}
</p>
{{/if}}
{{#if loading}}
<paper-spinner active></paper-spinner>
{{/if}}
</div>
</app-header-layout>
<div class="buttons layout horizontal end-justified">

View File

@@ -2,14 +2,18 @@ Template.characterRestoreDialog.onCreated(function(){
this.dump = {};
this.valid = new ReactiveVar(false);
this.error = new ReactiveVar(null);
this.loading = new ReactiveVar(false);
});
Template.characterRestoreDialog.helpers({
invalid(){
return !Template.instance().valid.get();
},
error(){
error(){
return Template.instance().error.get();
},
loading(){
return Template.instance().loading.get();
},
});
@@ -44,6 +48,19 @@ Template.characterRestoreDialog.events({
popDialogStack();
},
"click .addButton": function(event, instance){
popDialogStack(instance.dump);
let dump = instance.dump;
if (!dump) return;
Meteor.call('restoreCharacter', dump, (e, char) => {
instance.loading.set(false);
if (!char){
instance.error.set(e.message)
} else {
popDialogStack();
Router.go("characterSheet", {
_id: char._id,
urlName: char.urlName || '-',
});
}
});
},
});

View File

@@ -73,11 +73,27 @@ giveCharacterDumpNewIds = function(characterDump){
}
restoreCharacter = function(characterDump){
Characters.insert(characterDump.character);
Characters.direct.insert(characterDump.character);
for (collectionName in characterDump.collections){
let collection = Meteor.Collection.get(collectionName);
for (doc in characterDump[collectionName]){
collection.insert(doc);
for (doc of characterDump.collections[collectionName]){
// delete problematic keys that shouldn't ever be available on insert
delete doc.restoredAt;
delete doc.restoredBy;
// Insert the doc with no hooks
collection.direct.insert(doc);
}
}
};
Meteor.methods({
restoreCharacter(characterDump){
characterDump.character.name += " - Restored"
characterDump.character.owner = Meteor.userId();
characterDump.character.readers = [];
characterDump.character.writers = [];
giveCharacterDumpNewIds(characterDump);
restoreCharacter(characterDump);
return characterDump.character
},
});