mirror of
https://github.com/nasa/openmct.git
synced 2025-01-31 08:25:31 +00:00
[Edit] Undirty objects on refresh
Remove domain objects from the active transaction when they are refreshed, and use this from the SaveAsAction to prevent saving unintended changes. Fixes #1046
This commit is contained in:
parent
5485950130
commit
e42b8d22f7
@ -105,7 +105,8 @@ define(
|
|||||||
SaveAsAction.prototype.save = function () {
|
SaveAsAction.prototype.save = function () {
|
||||||
var self = this,
|
var self = this,
|
||||||
domainObject = this.domainObject,
|
domainObject = this.domainObject,
|
||||||
copyService = this.copyService;
|
copyService = this.copyService,
|
||||||
|
toUndirty = [];
|
||||||
|
|
||||||
function doWizardSave(parent) {
|
function doWizardSave(parent) {
|
||||||
var wizard = self.createWizard(parent);
|
var wizard = self.createWizard(parent);
|
||||||
@ -127,14 +128,28 @@ define(
|
|||||||
}
|
}
|
||||||
|
|
||||||
function allowClone(objectToClone) {
|
function allowClone(objectToClone) {
|
||||||
return (objectToClone.getId() === domainObject.getId()) ||
|
var allowed =
|
||||||
|
(objectToClone.getId() === domainObject.getId()) ||
|
||||||
objectToClone.getCapability('location').isOriginal();
|
objectToClone.getCapability('location').isOriginal();
|
||||||
|
if (allowed) {
|
||||||
|
toUndirty.push(objectToClone);
|
||||||
|
}
|
||||||
|
return allowed;
|
||||||
}
|
}
|
||||||
|
|
||||||
function cloneIntoParent(parent) {
|
function cloneIntoParent(parent) {
|
||||||
return copyService.perform(domainObject, parent, allowClone);
|
return copyService.perform(domainObject, parent, allowClone);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function undirty(domainObject) {
|
||||||
|
return domainObject.getCapability('persistence').refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
function undirtyOriginals(object) {
|
||||||
|
return Promise.all(toUndirty.map(undirty))
|
||||||
|
.then(resolveWith(object));
|
||||||
|
}
|
||||||
|
|
||||||
function commitEditingAfterClone(clonedObject) {
|
function commitEditingAfterClone(clonedObject) {
|
||||||
return domainObject.getCapability("editor").save()
|
return domainObject.getCapability("editor").save()
|
||||||
.then(resolveWith(clonedObject));
|
.then(resolveWith(clonedObject));
|
||||||
@ -144,6 +159,7 @@ define(
|
|||||||
.then(doWizardSave)
|
.then(doWizardSave)
|
||||||
.then(getParent)
|
.then(getParent)
|
||||||
.then(cloneIntoParent)
|
.then(cloneIntoParent)
|
||||||
|
.then(undirtyOriginals)
|
||||||
.then(commitEditingAfterClone)
|
.then(commitEditingAfterClone)
|
||||||
.catch(resolveWith(false));
|
.catch(resolveWith(false));
|
||||||
};
|
};
|
||||||
|
@ -49,6 +49,7 @@ define(
|
|||||||
this.domainObject = domainObject;
|
this.domainObject = domainObject;
|
||||||
this.$q = $q;
|
this.$q = $q;
|
||||||
this.persistPending = false;
|
this.persistPending = false;
|
||||||
|
this.removeFromTransaction = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -75,6 +76,7 @@ define(
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
self.persistPending = false;
|
self.persistPending = false;
|
||||||
|
self.removeFromTransaction = undefined;
|
||||||
//Model is undefined in persistence, so return undefined.
|
//Model is undefined in persistence, so return undefined.
|
||||||
return self.$q.when(undefined);
|
return self.$q.when(undefined);
|
||||||
}
|
}
|
||||||
@ -82,7 +84,8 @@ define(
|
|||||||
|
|
||||||
if (this.transactionService.isActive()) {
|
if (this.transactionService.isActive()) {
|
||||||
if (!this.persistPending) {
|
if (!this.persistPending) {
|
||||||
this.transactionService.addToTransaction(onCommit, onCancel);
|
this.removeFromTransaction = this.transactionService
|
||||||
|
.addToTransaction(onCommit, onCancel);
|
||||||
this.persistPending = true;
|
this.persistPending = true;
|
||||||
}
|
}
|
||||||
//Need to return a promise from this function
|
//Need to return a promise from this function
|
||||||
@ -93,6 +96,11 @@ define(
|
|||||||
};
|
};
|
||||||
|
|
||||||
TransactionalPersistenceCapability.prototype.refresh = function () {
|
TransactionalPersistenceCapability.prototype.refresh = function () {
|
||||||
|
if (this.persistPending) {
|
||||||
|
this.persistPending = false;
|
||||||
|
this.removeFromTransaction();
|
||||||
|
this.removeFromTransaction = undefined;
|
||||||
|
}
|
||||||
return this.persistenceCapability.refresh();
|
return this.persistenceCapability.refresh();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -81,6 +81,15 @@ define(
|
|||||||
//Log error because this is a programming error if it occurs.
|
//Log error because this is a programming error if it occurs.
|
||||||
this.$log.error("No transaction in progress");
|
this.$log.error("No transaction in progress");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return function () {
|
||||||
|
this.onCommits = this.onCommits.filter(function (callback) {
|
||||||
|
return callback !== onCommit;
|
||||||
|
});
|
||||||
|
this.onCancels = this.onCancels.filter(function (callback) {
|
||||||
|
return callback !== onCancel;
|
||||||
|
});
|
||||||
|
}.bind(this);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user