UNPKG

transition-manager

Version:

Transition Manager. Framework independent transition manager to transition elements using states and actions.

127 lines (104 loc) 3.35 kB
'use strict'; 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'];