UNPKG

react-reducer-provider

Version:

Asynchronous/Synchronous React Centralized State with Hooks and HOC

2 lines 6.32 kB
// Copyright (c) 2020 Gonzalo Müller Bravo. "use strict";var e=require("react");function t(r){if(r&&r.__esModule)return r;var s=Object.create(null);return r&&Object.keys(r).forEach(function(e){var t;"default"!==e&&(t=Object.getOwnPropertyDescriptor(r,e),Object.defineProperty(s,e,t.get?t:{enumerable:!0,get:function(){return r[e]}}))}),s.default=r,Object.freeze(s)}var o=t(e);const r=new Map,s=Symbol("react-reducer-provider-singleton"),n=function(e=s){return r.get(e)},u=function(e=s){return(r.get(e)||r.set(e,o.createContext(null)).get(e)).Provider};function c(e,t){return this.state!==t}function p(){return o.createElement(this._P,this.state,this.props.children)}function i(){return!1}function a(){return o.createElement(this._P,this._v,this.props.children)}function d(){return o.createElement(this._C,null,this.rwc)}function h(e,t,r,s){e._P=u(t),e.wd=e.wd.bind(e),e.shouldComponentUpdate=r,e.render=s}function g(e,t,r){return Object.defineProperties([],{state:{value:t,enumerable:!0},0:{value:t},dispatch:{value:r,enumerable:!0},1:{value:r},provider:{value:e,enumerable:!0},2:{value:e}})}function x(e,t,r){return{value:Object.preventExtensions(g(e,t,r))}}function l(e,t){h(e,t.id,c,p),e.state=x(t.id,"function"!=typeof t.initialState?t.initialState:t.initialState(),e.wd)}function f(e,t){return t!==e.state.value.state&&e.setState(x(e.state.value.provider,t,e.wd)),t}function m(e,t,...r){return"function"!=typeof t?e.state.value.state:t(...r)}class v extends o.Component{constructor(e){super(e),l(this,e)}async wd(...e){return f(this,await m(this,this.props.mapper,...e))}}class w extends o.Component{constructor(e){super(e),l(this,e)}async wd(...e){return f(this,await m(this,this.props.reducer,this.state.value.state,...e))}}class j extends o.Component{constructor(e){super(e),l(this,e)}wd(...e){return f(this,m(this,this.props.mapper,...e))}}class C extends o.Component{constructor(e){super(e),l(this,e)}wd(...e){return f(this,m(this,this.props.reducer,this.state.value.state,...e))}}function y(e,t){throw`props must be define before mounting ${e.constructor.name} ${t?`component with id ${t}`:"singleton component"}`}function b(e,t,r,s){return Object.preventExtensions(Object.defineProperties(g(e,r,s),{tag:{value:t,enumerable:!0},3:{value:t}}))}function T(e){return{value:Object.freeze({get:e})}}function M(s,n,e){e instanceof Array||y(s,n),h(s,n,c,p),s._ps=new Map(e.map(([t,,e],r)=>[t,b(n,t,"function"!=typeof e?e:e(),(...e)=>s.wd(s._ps.get(t),r,...e))])),s.get=e=>s._ps.get(e),s.state=T(s.get)}function P(e,t,r){return t.state!==r&&(e._ps.set(t.tag,b(t.provider,t.tag,r,t.dispatch)),e.setState(T(e.get))),r}function S(e,t,r,...s){if(t){const n=t[r];if(n&&"function"==typeof n[1])return n[1](...s)}return e.state}class R extends o.Component{constructor(e){super(e),M(this,e.id,e.reducers)}wd(e,t,...r){return P(this,e,S(e,this.props.reducers,t,e.state,...r))}}class _ extends o.Component{constructor(e){super(e),M(this,e.id,e.reducers)}async wd(e,t,...r){return P(this,e,await S(e,this.props.reducers,t,e.state,...r))}}class A extends o.Component{constructor(e){super(e),M(this,e.id,e.mappers)}wd(e,t,...r){return P(this,e,S(e,this.props.mappers,t,...r))}}class O extends o.Component{constructor(e){super(e),M(this,e.id,e.mappers)}async wd(e,t,...r){return P(this,e,await S(e,this.props.mappers,t,...r))}}function E(e,t,r){return r.provider=e,r.tag=t,Object.freeze(r)}class D extends o.Component{constructor(r){super(r),r.actuators instanceof Array||y(this,r.id),h(this,r.id,i,a),this._ps=new Map(r.actuators.map((e,t)=>[e[0],E(r.id,e[0],(...e)=>this.wd(t,...e))])),this._v=T(e=>this._ps.get(e))}wd(e,...t){return S(this,this.props.actuators,e,...t)}}class z extends o.Component{constructor(e){super(e),h(this,e.id,i,a),this.wd.provider=e.id,this._v={value:Object.freeze(this.wd)}}wd(...e){return"function"!=typeof this.props.actuator?void 0:this.props.actuator(...e)}}function $(e){return o.useContext(n(e))}function k(e){return o.useContext(n(e))[1]}function q(e){return o.useContext(n(e))[0]}function U(e,t){return o.useContext(n(t)).get(e)}function B(e,t){return o.useContext(n(t)).get(e)[0]}function F(e,t){return o.useContext(n(t)).get(e)[1]}function G(e,t){e._C=n(t).Consumer,e.rwc=e.rwc.bind(e),e.render=d}function H(t,r,s){return class extends o.Component{constructor(e){super(e),G(this,s)}rwc(e){return o.createElement(t,{...this.props,[r]:e})}}}function I(t,r,s){return class extends o.Component{constructor(e){super(e),G(this,s)}rwc(e){return o.createElement(t,{...this.props,[r]:e[0]})}}}function J(t,r,s){return class extends o.Component{constructor(e){super(e),G(this,s)}rwc(e){return o.createElement(t,{...this.props,[r]:e[1]})}}}function K(t,r,s,n){return class extends o.Component{constructor(e){super(e),G(this,n)}rwc(e){return o.createElement(t,{...this.props,[r]:e.get(s)})}}}function L(t,r,s,n){return class extends o.Component{constructor(e){super(e),G(this,n)}rwc(e){return o.createElement(t,{...this.props,[r]:e.get(s)[0]})}}}function N(t,r,s,n){return class extends o.Component{constructor(e){super(e),G(this,n)}rwc(e){return o.createElement(t,{...this.props,[r]:e.get(s)[1]})}}}exports.ActuatorProvider=z,exports.AsyncMapperProvider=v,exports.AsyncReducerProvider=w,exports.AsyncTaggedMapperProvider=O,exports.AsyncTaggedReducerProvider=_,exports.SyncMapperProvider=j,exports.SyncReducerProvider=C,exports.SyncTaggedMapperProvider=A,exports.SyncTaggedReducerProvider=R,exports.TaggedActuatorProvider=D,exports.injectActuator=H,exports.injectMapper=H,exports.injectMapperDispatcher=J,exports.injectMapperState=I,exports.injectReducer=H,exports.injectReducerDispatcher=J,exports.injectReducerState=I,exports.injectTaggedActuator=K,exports.injectTaggedAny=H,exports.injectTaggedMapper=K,exports.injectTaggedMapperDispatcher=N,exports.injectTaggedMapperState=L,exports.injectTaggedReducer=K,exports.injectTaggedReducerDispatcher=N,exports.injectTaggedReducerState=L,exports.useActuator=$,exports.useMapper=$,exports.useMapperDispatcher=k,exports.useMapperState=q,exports.useReducer=$,exports.useReducerDispatcher=k,exports.useReducerState=q,exports.useTaggedActuator=U,exports.useTaggedAny=$,exports.useTaggedMapper=U,exports.useTaggedMapperDispatcher=F,exports.useTaggedMapperState=B,exports.useTaggedReducer=U,exports.useTaggedReducerDispatcher=F,exports.useTaggedReducerState=B;