Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
436c5bb785 | ||
|
|
8489ef5ec0 |
@@ -86,17 +86,7 @@ Template.characterList.events({
|
|||||||
template: "characterRestoreDialog",
|
template: "characterRestoreDialog",
|
||||||
element: event.currentTarget,
|
element: event.currentTarget,
|
||||||
callback(dump){
|
callback(dump){
|
||||||
if (!dump) return;
|
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 || '-',
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -17,6 +17,9 @@
|
|||||||
{{error}}
|
{{error}}
|
||||||
</p>
|
</p>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
{{#if loading}}
|
||||||
|
<paper-spinner active></paper-spinner>
|
||||||
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
</app-header-layout>
|
</app-header-layout>
|
||||||
<div class="buttons layout horizontal end-justified">
|
<div class="buttons layout horizontal end-justified">
|
||||||
|
|||||||
@@ -2,14 +2,18 @@ Template.characterRestoreDialog.onCreated(function(){
|
|||||||
this.dump = {};
|
this.dump = {};
|
||||||
this.valid = new ReactiveVar(false);
|
this.valid = new ReactiveVar(false);
|
||||||
this.error = new ReactiveVar(null);
|
this.error = new ReactiveVar(null);
|
||||||
|
this.loading = new ReactiveVar(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.characterRestoreDialog.helpers({
|
Template.characterRestoreDialog.helpers({
|
||||||
invalid(){
|
invalid(){
|
||||||
return !Template.instance().valid.get();
|
return !Template.instance().valid.get();
|
||||||
},
|
},
|
||||||
error(){
|
error(){
|
||||||
return Template.instance().error.get();
|
return Template.instance().error.get();
|
||||||
|
},
|
||||||
|
loading(){
|
||||||
|
return Template.instance().loading.get();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -44,6 +48,19 @@ Template.characterRestoreDialog.events({
|
|||||||
popDialogStack();
|
popDialogStack();
|
||||||
},
|
},
|
||||||
"click .addButton": function(event, instance){
|
"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 || '-',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -73,11 +73,27 @@ giveCharacterDumpNewIds = function(characterDump){
|
|||||||
}
|
}
|
||||||
|
|
||||||
restoreCharacter = function(characterDump){
|
restoreCharacter = function(characterDump){
|
||||||
Characters.insert(characterDump.character);
|
Characters.direct.insert(characterDump.character);
|
||||||
for (collectionName in characterDump.collections){
|
for (collectionName in characterDump.collections){
|
||||||
let collection = Meteor.Collection.get(collectionName);
|
let collection = Meteor.Collection.get(collectionName);
|
||||||
for (doc in characterDump[collectionName]){
|
for (doc of characterDump.collections[collectionName]){
|
||||||
collection.insert(doc);
|
// 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
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ canViewCharacter = function(char, userId){
|
|||||||
userId = userId || Meteor.userId();
|
userId = userId || Meteor.userId();
|
||||||
if (typeof char !== 'object'){
|
if (typeof char !== 'object'){
|
||||||
char = Characters.findOne(
|
char = Characters.findOne(
|
||||||
charId,
|
char,
|
||||||
{fields: {owner: 1, writers: 1, readers: 1, "settings.viewPermission": 1}}
|
{fields: {owner: 1, writers: 1, readers: 1, "settings.viewPermission": 1}}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user