redux-wired
Version:
Redux-Wired help you improves react applications that use the redux library
99 lines (82 loc) • 2.83 kB
JavaScript
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var React = require('react');
var React__default = _interopDefault(React);
var reactRedux = require('react-redux');
var getArguments = _interopDefault(require('es-arguments'));
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
var WiredContext = React.createContext(null);
function getDefaultProps(component) {
if (component.defaultProps) {
return Object.keys(component.defaultProps);
}
var componentArguments = getComponentProps(component);
return Object.values(componentArguments);
}
function getComponentProps(component) {
var _getArguments = getArguments(component),
args = _getArguments[0];
var argsArray = args.split(',');
argsArray = argsArray.map(function (arg) {
return arg.replace(/[{}]/g, '').trim();
});
return _extends({}, argsArray);
}
function useAction(action) {
var dispatch = reactRedux.useDispatch();
return function (value) {
return dispatch(action(value));
};
}
function useWired(reduxBundle, componentProp, handleHook) {
var propsFromStore;
Object.values(reduxBundle).forEach(function (func) {
propsFromStore = updatePropsWithStore(func, componentProp, handleHook);
});
return propsFromStore;
}
var updatePropsWithStore = function updatePropsWithStore(func, componentProp, handleHook) {
return _extends({}, func(componentProp, handleHook));
};
var WProvider = function WProvider(_ref) {
var wired = _ref.wired,
children = _ref.children;
return /*#__PURE__*/React__default.createElement(WiredContext.Provider, {
value: wired
}, children);
};
var wiredUp = function wiredUp(WrappedComponent) {
return function (props) {
var _useContext = React.useContext(WiredContext),
actions = _useContext.actions,
selectors = _useContext.selectors;
var defaultProps = getDefaultProps(WrappedComponent);
var newProps = props;
defaultProps.forEach(function (componentProp) {
newProps = _extends({}, newProps, {}, useWired(actions, componentProp, useAction), {}, useWired(selectors, componentProp, reactRedux.useSelector));
});
return /*#__PURE__*/React__default.createElement(WrappedComponent, newProps);
};
};
var wired = function wired(actions, selectors) {
return {
actions: actions,
selectors: selectors
};
};
exports.WProvider = WProvider;
exports.wired = wired;
exports.wiredUp = wiredUp;
//# sourceMappingURL=index.js.map