UNPKG

redux-wired

Version:

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

94 lines (78 loc) 2.6 kB
import React, { createContext, useContext } from 'react'; import { useSelector, useDispatch } from 'react-redux'; import getArguments from '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 = 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 = 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.createElement(WiredContext.Provider, { value: wired }, children); }; var wiredUp = function wiredUp(WrappedComponent) { return function (props) { var _useContext = 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, useSelector)); }); return /*#__PURE__*/React.createElement(WrappedComponent, newProps); }; }; var wired = function wired(actions, selectors) { return { actions: actions, selectors: selectors }; }; export { WProvider, wired, wiredUp }; //# sourceMappingURL=index.modern.js.map