* WIP ViewController.loadFromMCIMapAndConfig()
This commit is contained in:
parent
cca9334bd3
commit
8c9b0e729f
|
@ -122,4 +122,3 @@ MCIViewFactory.prototype.createFromMCI = function(mci) {
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -85,9 +85,9 @@ function getFormConfig(menuConfig, mciMap, cb) {
|
||||||
function filtered(form) {
|
function filtered(form) {
|
||||||
if(form.length > 0) {
|
if(form.length > 0) {
|
||||||
assert(1 === form.length);
|
assert(1 === form.length);
|
||||||
cb(form[0]);
|
cb(null, form[0]);
|
||||||
} else {
|
} else {
|
||||||
cb(null);
|
cb(new Error('No matching form configuration found'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -5,6 +5,9 @@ var events = require('events');
|
||||||
var util = require('util');
|
var util = require('util');
|
||||||
var assert = require('assert');
|
var assert = require('assert');
|
||||||
var MCIViewFactory = require('./mci_view_factory.js').MCIViewFactory;
|
var MCIViewFactory = require('./mci_view_factory.js').MCIViewFactory;
|
||||||
|
var menuUtil = require('./menu_util.js');
|
||||||
|
|
||||||
|
var async = require('async');
|
||||||
|
|
||||||
exports.ViewController = ViewController;
|
exports.ViewController = ViewController;
|
||||||
|
|
||||||
|
@ -200,3 +203,67 @@ ViewController.prototype.loadFromMCIMap = function(mciMap) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ViewController.prototype.loadFromMCIMapAndConfig = function(mciMap, menuConfig, cb) {
|
||||||
|
var factory = new MCIViewFactory(this.client);
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
async.waterfall(
|
||||||
|
[
|
||||||
|
function getFormConfig(callback) {
|
||||||
|
menuUtil.getFormConfig(menuConfig, mciMap, function onFormConfig(err, formConfig) {
|
||||||
|
if(err) {
|
||||||
|
// :TODO: Log about missing form config -- this is not fatal, however
|
||||||
|
}
|
||||||
|
callback(null, formConfig);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
function createViewsFromMCIMap(formConfig, callback) {
|
||||||
|
async.each(Object.keys(mciMap), function onMciEntry(name, eachCb) {
|
||||||
|
var mci = mciMap[name];
|
||||||
|
var view = factory.createFromMCI(mci);
|
||||||
|
|
||||||
|
if(view) {
|
||||||
|
view.on('action', self.onViewAction);
|
||||||
|
self.addView(view);
|
||||||
|
view.redraw(); // :TODO: This can result in double redraw() if we set focus on this item after
|
||||||
|
}
|
||||||
|
eachCb(null);
|
||||||
|
},
|
||||||
|
function eachMciComplete(err) {
|
||||||
|
self.setViewOrder();
|
||||||
|
|
||||||
|
callback(err, formConfig);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
function applyFormConfig(formConfig, callback) {
|
||||||
|
async.each(Object.keys(formConfig.mci), function onMciConf(mci, eachCb) {
|
||||||
|
var viewId = parseInt(mci[2]); // :TODO: what about auto-generated ID's? Do they simply not apply to menu configs?
|
||||||
|
var mciConf = formConfig.mci[mci];
|
||||||
|
|
||||||
|
// :TODO: Break all of this up ... and/or better way of doing it
|
||||||
|
if(mciConf.items) {
|
||||||
|
self.getView(viewId).setItems(mciConf.items);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mciConf.submit) {
|
||||||
|
self.getView(viewId).submit = true; // :TODO: should really be actual value
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mciConf.focus) {
|
||||||
|
self.switchFocus(viewId);
|
||||||
|
}
|
||||||
|
|
||||||
|
eachCb(null);
|
||||||
|
},
|
||||||
|
function eachMciConfComplete(err) {
|
||||||
|
callback(err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
],
|
||||||
|
function complete(err) {
|
||||||
|
if(cb) {
|
||||||
|
cb(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
|
@ -7,12 +7,14 @@
|
||||||
"form" : [
|
"form" : [
|
||||||
{
|
{
|
||||||
"mciReq" : [ "VM1" ],
|
"mciReq" : [ "VM1" ],
|
||||||
|
"mci" : {
|
||||||
"VM1" : {
|
"VM1" : {
|
||||||
"submit" : true,
|
"submit" : true,
|
||||||
"focus" : true,
|
"focus" : true,
|
||||||
"items" : [ "Login", "Apply", "Log Off" ]
|
"items" : [ "Login", "Apply", "Log Off" ]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
//"module" : "matrix"
|
//"module" : "matrix"
|
||||||
},
|
},
|
||||||
|
|
|
@ -36,16 +36,35 @@ StandardMenuModule.prototype.mciReady = function(mciMap) {
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
menuUtil.getFormConfig(self.menuConfig, mciMap, function onFormConfig(formConfig) {
|
var vc = self.addViewController(new ViewController(self.client));
|
||||||
|
vc.loadFromMCIMapAndConfig(mciMap, self.menuConfig, function onViewReady(err) {
|
||||||
|
if(err) {
|
||||||
|
console.log(err);
|
||||||
|
} else {
|
||||||
|
// vc.switchFocus(1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
menuUtil.getFormConfig(self.menuConfig, mciMap, function onFormConfig(err, formConfig) {
|
||||||
console.log(formConfig);
|
console.log(formConfig);
|
||||||
var vc = self.addViewController(new ViewController(self.client));
|
var vc = self.addViewController(new ViewController(self.client));
|
||||||
vc.loadFromMCIMap(mciMap);
|
vc.loadFromMCIMap(mciMap);
|
||||||
vc.setViewOrder();
|
vc.setViewOrder();
|
||||||
|
|
||||||
vc.getView(1).setItems(['Login', 'New User', 'Goodbye!']);
|
Object.keys(formConfig.mci).forEach(function onFormMci(mci) {
|
||||||
|
var viewId = parseInt(mci[2]);
|
||||||
|
if(formConfig.mci[mci].items && formConfig.mci[mci].items.length > 0) {
|
||||||
|
vc.getView(viewId).setItems(formConfig.mci[mci].items);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//vc.getView(1).setItems(['Login', 'New User', 'Goodbye!']);
|
||||||
vc.getView(1).submit = true;
|
vc.getView(1).submit = true;
|
||||||
vc.switchFocus(1);
|
vc.switchFocus(1);
|
||||||
});
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue