[Edit Mode Prototype] Create button initiates edit-mode immediately #286

This commit is contained in:
Henry 2015-11-19 10:33:44 -08:00
parent 2251a0c1e9
commit 2e2b18eaa5
4 changed files with 37 additions and 58 deletions

View File

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

View File

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

View File

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

View File

@ -133,7 +133,7 @@ define(
function persistObject(object){ 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)); .then(resolveWith(object));
/* /*
if (object.hasCapability('editor')){ if (object.hasCapability('editor')){
@ -165,9 +165,9 @@ define(
// during editing. // during editing.
function doSave() { function doSave() {
//WARNING: HACK //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. // yet.
if (domainObject.getModel().type === 'telemetry.panel' && !domainObject.getModel().persisted){ if (!domainObject.getModel().persisted){
return getParent(domainObject) return getParent(domainObject)
.then(doWizardSave) .then(doWizardSave)
.then(persistObject) .then(persistObject)