a1-redux
Version:
Angular >=1.5 and redux
67 lines (47 loc) • 2.57 kB
JavaScript
;
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;
}