UNPKG

@xailabs/altx

Version:

Flux flavor based on alt.js

72 lines (53 loc) 2.64 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _getOwnPropertyDescriptor = require('babel-runtime/core-js/object/get-own-property-descriptor'); var _getOwnPropertyDescriptor2 = _interopRequireDefault(_getOwnPropertyDescriptor); exports.default = bindHandlers; var _decorators = require('alt-utils/lib/decorators'); var _flatten = require('../utils/flatten'); var _flatten2 = _interopRequireDefault(_flatten); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function bindHandlers(actions) { for (var _len = arguments.length, handlers = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { handlers[_key - 1] = arguments[_key]; } return function decorateStore(storeClass) { (0, _flatten2.default)(handlers).forEach(function (handler) { return attachBoundHandler(storeClass, actions[handler.name], handler); }); return storeClass; }; } function attachBoundHandler(storeClass, action, handler) { var methodName = '__handle_' + handler.name; if (storeClass.prototype[methodName]) throw new Error('Duplicate method "' + methodName + '"'); storeClass.prototype[methodName] = function handleAction(payload) { var reducer = handler.hasOwnProperty('reducer') && handler.reducer; var sideEffect = handler.hasOwnProperty('sideEffect') && handler.sideEffect; var currentState = this.state; var nextState = currentState; if (reducer) { try { nextState = reducer(currentState, payload); } catch (error) { console.error('Error in reducer (' + handler.name + ', ' + handler.name + ')', error); } } if (nextState) { this.setState(nextState); } else if (reducer) { console.warn('reducer "' + handler.name + '" in call "' + handler.name + '" did not return a new state.\n Either you forgot to return it, or if no state change is required, maybe you should use a sideEffect instead of a reducer.\n '); } if (sideEffect) { try { sideEffect({ state: nextState, prevState: currentState, payload: payload }); } catch (error) { console.error('Error in sideEffect (' + handler.name + ', ' + handler.name + ')', error); } } }; var bindhandler = (0, _decorators.bind)(action); bindhandler(storeClass, methodName, (0, _getOwnPropertyDescriptor2.default)(storeClass.prototype, methodName)); }