react-remux
Version:
7 lines (6 loc) • 3.24 kB
JavaScript
/*!
* react-remux.js v0.0.4
* (c) 2018-2019 空鱼
* Released under the MIT License.
*/
;function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var reactRedux=require("react-redux"),remuxCore=require("remux-core"),rmagixLib=require("rmagix-lib"),React=require("react"),React__default=_interopDefault(React);const{ACTION_REFRESH:ACTION_REFRESH,subscribe:subscribe}=remuxCore.subscribeOtherStorePlugin,analysisDeps=e=>{const t=[];return e(new Proxy({},{get(e,r){t.push(r)}})),t},getCurrentStore=e=>{const t=Object.keys(e)[0];return remuxCore.globalStore.get(t)},listenOtherStore=(e,t)=>{const r=analysisDeps(e),o=getCurrentStore(t),a=o._namespace,s=o.getDispatch(),c=r.filter(e=>!(e.includes("loading")||e===a)),n=remuxCore.globalStore.getAll();Object.keys(n).filter(e=>c.includes(e)).forEach(e=>{subscribe(n[e],()=>{s({type:ACTION_REFRESH})},a)})},mapStateToPropsFactory=e=>{return(t,...r)=>{listenOtherStore(e,t);const o=remuxCore.globalStore.getStates();return e(o,...r)}},hooksWarning=(...e)=>{rmagixLib.invariant(!1,"当前react-redux版本过低,如果想使用hooks,请升级到react-redux@^7.1.1 redux@^4.0.4")};function connect(e,...t){const r=mapStateToPropsFactory(e);return reactRedux.connect(r,...t)}class Provider extends React__default.Component{constructor(e){super(e);const{model:t,...r}=e,{namespace:o}=t;rmagixLib.invariant(o,`namespace except get string,but get ${typeof o}`),this.state={store:remuxCore.createStore({model:t,...r})}}componentWillUnmount(){this.state.store.unmount()}render(){return React__default.createElement(reactRedux.Provider,{store:this.state.store.getStore()},this.props.children)}}const useStore=e=>{const t=void 0===e,r=t?remuxCore.globalStore.getAll():remuxCore.globalStore.get(e),o=(React.createContext||hooksWarning)({store:r}),a=t?void 0:o;return reactRedux.createStoreHook(a)()},useDispatch=reactRedux.useDispatch||hooksWarning,useSelector=(e,t)=>{return(reactRedux.createSelectorHook||hooksWarning)()(mapStateToPropsFactory(e),t)},useSelectorSE=(e,t=reactRedux.shallowEqual)=>{return(reactRedux.createSelectorHook||hooksWarning)()(mapStateToPropsFactory(e),t)},useModel=(e,t,r={})=>{const{namespace:o}=e;rmagixLib.invariant(o,`namespace except get string,but get ${typeof o}`);const{useHooks:a,...s}=r;remuxCore.globalStore.getManager().has(e.namespace)||remuxCore.createStore({model:e,...s});const c=remuxCore.globalStore.get(e.namespace).getStore(),n=(React.createContext||hooksWarning)({store:c,storeState:c.getState()});return{state:((e,t=reactRedux.shallowEqual)=>{return reactRedux.createSelectorHook(n)(mapStateToPropsFactory(e),t)})(t||function(t){return t[e.namespace]}),dispatch:reactRedux.createDispatchHook(n)()}};Object.keys(remuxCore).forEach((function(e){"default"!==e&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return remuxCore[e]}})})),Object.defineProperty(exports,"shallowEqual",{enumerable:!0,get:function(){return reactRedux.shallowEqual}}),exports.Provider=Provider,exports.connect=connect,exports.useDispatch=useDispatch,exports.useModel=useModel,exports.useSelector=useSelector,exports.useSelectorSE=useSelectorSE,exports.useStore=useStore;