UNPKG

redux-wired

Version:

Redux-Wired help you improves react applications that use the redux library

99 lines (82 loc) 2.83 kB
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