Merge in "create button initiates edit mode"

This commit is contained in:
Henry 2015-11-19 14:13:28 -08:00
commit 19d2970e0e
5 changed files with 49 additions and 65 deletions

View File

@ -150,7 +150,8 @@
"provides": "actionService",
"type": "provider",
"implementation": "creation/CreateActionProvider.js",
"depends": [ "typeService", "dialogService", "creationService", "policyService" ]
"depends": ["$q", "typeService",
"navigationService"]
},
{
"key": "CreationService",

View File

@ -25,8 +25,10 @@
* Module defining CreateAction. Created by vwoeltje on 11/10/14.
*/
define(
['./CreateWizard'],
function (CreateWizard) {
['./CreateWizard',
'uuid',
'../../../edit/src/objects/EditableDomainObject'],
function (CreateWizard, uuid, EditableDomainObject) {
"use strict";
/**
@ -45,13 +47,11 @@ define(
* override this)
* @param {ActionContext} context the context in which the
* action is being performed
* @param {DialogService} dialogService the dialog service
* to use when requesting user input
* @param {CreationService} creationService the creation service,
* which handles the actual instantiation and persistence
* of the newly-created domain object
* @param {NavigationService} navigationService the navigation service,
* which handles changes in navigation. It allows the object
* being browsed/edited to be set.
*/
function CreateAction(type, parent, context, dialogService, creationService, policyService) {
function CreateAction(type, parent, context, $q, navigationService) {
this.metadata = {
key: 'create',
glyph: type.getGlyph(),
@ -63,9 +63,8 @@ define(
this.type = type;
this.parent = parent;
this.policyService = policyService;
this.dialogService = dialogService;
this.creationService = creationService;
this.navigationService = navigationService;
this.$q = $q;
}
/**
@ -73,45 +72,24 @@ define(
* This will prompt for user input first.
*/
CreateAction.prototype.perform = function () {
/*
Overview of steps in object creation:
var newModel = this.type.getInitialModel(),
parentObject = this.navigationService.getNavigation(),
newObject,
editableObject;
1. Show dialog
a. Prepare dialog contents
b. Invoke dialogService
2. Create new object in persistence service
a. Generate UUID
b. Store model
3. Mutate destination container
a. Get mutation capability
b. Add new id to composition
4. Persist destination container
a. ...use persistence capability.
*/
newModel.type = this.type.getKey();
newObject = parentObject.useCapability('instantiation', newModel);
editableObject = new EditableDomainObject(newObject, this.$q);
editableObject.setOriginalObject(parentObject);
editableObject.useCapability('mutation', function(model){
model.location = parentObject.getId();
});
// The wizard will handle creating the form model based
// on the type...
var wizard =
new CreateWizard(this.type, this.parent, this.policyService),
self = this;
// Create and persist the new object, based on user
// input.
function persistResult(formValue) {
var parent = wizard.getLocation(formValue),
newModel = wizard.createModel(formValue);
return self.creationService.createObject(newModel, parent);
if (newObject.hasCapability('composition') && this.type.getKey()!=='folder') {
this.navigationService.setNavigation(editableObject);
} else {
return editableObject.getCapability('action').perform('save');
}
function doNothing() {
// Create cancelled, do nothing
return false;
}
return this.dialogService.getUserInput(
wizard.getFormStructure(),
wizard.getInitialFormValue()
).then(persistResult, doNothing);
};

View File

@ -46,11 +46,10 @@ define(
* introduced in this bundle), responsible for handling actual
* object creation.
*/
function CreateActionProvider(typeService, dialogService, creationService, policyService) {
function CreateActionProvider($q, typeService, navigationService) {
this.typeService = typeService;
this.dialogService = dialogService;
this.creationService = creationService;
this.policyService = policyService;
this.navigationService = navigationService;
this.$q = $q;
}
CreateActionProvider.prototype.getActions = function (actionContext) {
@ -75,9 +74,8 @@ define(
type,
destination,
context,
self.dialogService,
self.creationService,
self.policyService
self.$q,
self.navigationService
);
});
};

View File

@ -34,9 +34,9 @@ define(
* @memberof platform/commonUI/browse
* @constructor
*/
function CreateWizard(type, parent, policyService) {
function CreateWizard(type, parent, policyService, initialModel) {
this.type = type;
this.model = type.getInitialModel();
this.model = initialModel || type.getInitialModel();
this.properties = type.getProperties();
this.parent = parent;
this.policyService = policyService;

View File

@ -76,19 +76,26 @@ define(
function doWizardSave(parent) {
var context = domainObject.getCapability("context");
var wizard = new CreateWizard(domainObject.useCapability('type'), parent, self.policyService);
var wizard = new CreateWizard(domainObject.useCapability('type'), parent, self.policyService, domainObject.getModel());
function mergeObjects(fromObject, toObject){
Object.keys(fromObject).forEach(function(key) {
toObject[key] = fromObject[key];
});
}
// Create and persist the new object, based on user
// input.
function buildObjectFromInput(formValue) {
var parent = wizard.getLocation(formValue),
newModel = wizard.createModel(formValue);
formModel = wizard.createModel(formValue);
formModel.location = parent.getId();
//Replace domain object model with model collected
// from user form.
domainObject.useCapability("mutation", function(){
newModel.location = parent.getId();
newModel.composition = domainObject.getModel().composition;
return newModel;
//Replace object model with the model from the form
return formModel;
});
return domainObject;
}
@ -133,7 +140,7 @@ define(
function persistObject(object){
return (object.hasCapability('editor') && object.getCapability('editor').save() || object.getCapability('persistence').persist())
return (object.hasCapability('editor') && object.getCapability('editor').save(true) || object.getCapability('persistence').persist())
.then(resolveWith(object));
/*
if (object.hasCapability('editor')){
@ -165,9 +172,9 @@ define(
// during editing.
function doSave() {
//WARNING: HACK
//This is a new 'virtual panel' that has not been persisted
//This is a new 'virtual object' that has not been persisted
// yet.
if (domainObject.getModel().type === 'telemetry.panel' && !domainObject.getModel().persisted){
if (!domainObject.getModel().persisted){
return getParent(domainObject)
.then(doWizardSave)
.then(persistObject)