UNPKG

a1-redux

Version:

Angular >=1.5 and redux

67 lines (47 loc) 2.57 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = connect; var _angular = require('angular'); var _invariant = require('invariant'); var _invariant2 = _interopRequireDefault(_invariant); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function connect(_ref, directiveDef) { var mapStateToScope = _ref.mapStateToScope; var mapDispatchToScope = _ref.mapDispatchToScope; (0, _invariant2.default)((0, _angular.isFunction)(directiveDef) || (0, _angular.isArray)(directiveDef), 'invalid definition of angular directive definition. Should be array or function'); (0, _invariant2.default)((0, _angular.isFunction)(mapStateToScope), 'should be function with store state as param'); (0, _invariant2.default)((0, _angular.isFunction)(mapDispatchToScope), 'should be function with store dispatch, state as param'); var directiveFun = (0, _angular.isFunction)(directiveDef) ? directiveDef : directiveDef[directiveDef.length - 1]; var directiveDependency = (0, _angular.isArray)(directiveDef) && directiveDef.length >= 2 ? directiveDef.slice(0, directiveDef.length - 1) : []; var wrappedDirectiveDependency = directiveDependency.concat('ngStore'); var wrappedDirectiveFun = function wrappedDirectiveFun() { var ngStore = arguments.length <= arguments.length - 1 + 0 ? undefined : arguments[arguments.length - 1 + 0]; var dirApi = directiveFun.apply(undefined, arguments); (0, _invariant2.default)((0, _angular.isFunction)(dirApi.link), 'directive link must be defined as a function'); function wrappedLink($scope, $element, $attrs) { var $nuScope = $scope; function mapState() { (0, _angular.forEach)(mapStateToScope(ngStore.getState), function (val, key) { $nuScope[key] = val; }); } var unsubscribe = ngStore.subscribe(mapState); $nuScope.$on('$destroy', unsubscribe); mapState(); (0, _angular.forEach)(mapDispatchToScope(ngStore.dispatch, ngStore.getState, $nuScope), function (val, key) { $nuScope[key] = val; }); for (var _len = arguments.length, more = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { more[_key - 3] = arguments[_key]; } return dirApi.link.apply(dirApi, [$nuScope, $element, $attrs].concat(more)); } return (0, _angular.extend)({}, dirApi, { link: wrappedLink }); }; var finalDirDef = wrappedDirectiveDependency.concat(wrappedDirectiveFun); return finalDirDef; }