transition-manager
Version:
Transition Manager. Framework independent transition manager to transition elements using states and actions.
127 lines (104 loc) • 3.35 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true
});
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _utilsForIn = require('../utils/forIn');
var _utilsForIn2 = _interopRequireDefault(_utilsForIn);
var _utilsUnique = require('../utils/unique');
var _utilsUnique2 = _interopRequireDefault(_utilsUnique);
var AppDataParser = {};
(function () {
/**
* extract the actual transition data for the state
* @param {object} configState - state data
* @return {array} transition array - FSM
*/
function _extractActions(opts) {
// main properties
var data = opts.data,
configState = opts.stateData,
stateView = opts.stateView,
stateName = opts.stateName;
// new defined properties
var stateTransitions = [],
viewData = opts.viewData,
appDataView = undefined,
action = undefined,
statePrefix = undefined;
_utilsForIn2['default'](configState.actions, function (prop, actionName) {
statePrefix = stateName + '->' + actionName;
appDataView = data[prop.target].view;
// Return action data for FSM
action = {
action: actionName,
target: prop.target,
_id: statePrefix
};
// return ViewData for View manager and append all views
viewData[statePrefix] = {
currentView: stateView,
nextView: appDataView,
linkedVTransModules: _extractTransitions(prop, stateView, appDataView),
name: actionName
};
// // assign fsm action to state
stateTransitions[stateTransitions.length] = action;
});
return { stateTransitions: stateTransitions, viewData: viewData };
}
/**
* extract transition information
* and extract data if transition information is
* an array of transitions
* @param {onbject} prop
* @param {string} stateView - id of state view
* @param {string} nextView - id of view this transition goes to
* @return {array} array of transitions fot this action
*/
function _extractTransitions(prop, stateView, nextView) {
var groupedTransitions = [];
if (prop.transitions) {
// if more transitions exist, add them
groupedTransitions = prop.transitions.map(function (transitionObject) {
return transitionObject;
});
}
prop.views = _utilsUnique2['default'](prop.views, [stateView, nextView]);
groupedTransitions.unshift({ transitionType: prop.transitionType, views: prop.views });
return groupedTransitions;
}
/**
* Extract only the FSM data from the config file
* create states
* @param {object} data
* @return {object} fsm formatted config
*/
AppDataParser.parseData = function (data) {
if (!data) {
throw new Error('*Data Object is undefined!');
}
var config = [],
viewData = {},
extracted = undefined,
state = undefined;
_utilsForIn2['default'](data, function (stateData, stateName) {
extracted = _extractActions({
data: data,
stateData: stateData,
viewData: viewData,
stateView: stateData.view,
stateName: stateName
});
state = {
name: stateName,
initial: stateData.initial,
stateTransitions: extracted.stateTransitions
};
config[config.length] = state;
});
return { fsmConfig: config, TVMConfig: extracted.viewData };
};
})();
exports['default'] = AppDataParser;
module.exports = exports['default'];