UNPKG

subapp-redux

Version:

Electrode subapp redux support

1 lines 2.38 kB
import{configureStore,combineReducers}from"@reduxjs/toolkit";let persistenStoreContainer={namedStores:{}};function initContainer(e){return(e=e||persistenStoreContainer).namedStores||(e.namedStores={}),e}function setStoreContainer(e){persistenStoreContainer=e,initContainer(e)}function clearSharedStore(){persistenStoreContainer.namedStores={}}function getSharedStore(e,r){return r=initContainer(r),e&&r.namedStores[!0===e?"_":e]||{}}function setSharedStore(e,r,t){(t=initContainer(t)).namedStores[!0===e?"_":e]=r}const assert=(e,r)=>{if(!e)throw new Error(r)},reducerNamesSym="- reducer owner names -",originalReplaceReducerSym="- original replace reducer -",newReducerContainer=()=>({[reducerNamesSym]:[]}),WHEN_SHARED_MSG="When using reduxShareStore to share stores",errReducersMustBeObject=`${WHEN_SHARED_MSG}, reduxReducers must be an object of named reducers.`,addSharedReducer=(e,r,t)=>{assert("object"==typeof t,errReducersMustBeObject);const n=r[reducerNamesSym];r.hasOwnProperty(e.name)||n.push(e.name),r[e.name]=t;return n.reduce((e,t)=>Object.assign(e,r[t]),{})},combineSharedReducers=(e,r,t)=>combineReducers(addSharedReducer(e,r,t));function replaceReducer(e,r,t){let{store:n,reducerContainer:o}=getSharedStore(r.reduxShareStore,t);const a=combineSharedReducers(r,o,e);return n[originalReplaceReducerSym](a)}function createSharedStore(e,r,t){const n=r.reduxShareStore;if(n){assert(r._genReduxCreateStore||!r.reduxCreateStore,`${WHEN_SHARED_MSG}, you cannot have reduxCreateStore`);let{store:o,reducerContainer:a}=getSharedStore(n,t);return o?replaceReducer(r.reduxReducers,r,t):(a=newReducerContainer(),o=configureStore({reducer:combineSharedReducers(r,a,r.reduxReducers),preloadedState:e,enhancers:r.reduxEnhancer,middleware:r.middleware}),o[originalReplaceReducerSym]=o.replaceReducer,o.replaceReducer=(e,r,t)=>replaceReducer(e,r,t)),setSharedStore(n,{store:o,reducerContainer:a},t),o}if(r.reduxCreateStore&&!r._genReduxCreateStore)return r.reduxCreateStore(e);let o;const a=typeof r.reduxReducers;return o="function"===a?r.reduxReducers:"object"===a?combineReducers(r.reduxReducers):e=>e,configureStore({reducer:o,preloadedState:e,enhancers:r.reduxEnhancer,middleware:r.middleware})}function getReduxCreateStore(e){return(r,t)=>createSharedStore(r,e,t)}export{setStoreContainer,getReduxCreateStore,createSharedStore,getSharedStore,setSharedStore,clearSharedStore};