UNPKG

use-context-selector

Version:
3 lines (2 loc) 2.34 kB
import{createContext as e,useRef as r,createElement as t,useContext as n,useReducer as o,useEffect as c,useLayoutEffect as u}from"react";import{unstable_runWithPriority as s,unstable_NormalPriority as i}from"scheduler";import{unstable_batchedUpdates as a}from"react-dom";function l(){return(l=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}const d=Symbol(),p=Symbol(),f="undefined"==typeof window||/ServerSideRendering/.test(window.navigator&&window.navigator.userAgent)?c:u,v=e=>e;function w(n){const o=e({[d]:{v:{current:n},n:{current:-1},l:new Set,u:e=>e()}});var c;return o[p]=o.Provider,o.Provider=(c=o.Provider,({value:e,children:n})=>{const o=r(e),u=r(0),l=r();if(!l.current){const e=new Set,r=r=>{a(()=>{u.current+=1,e.forEach(e=>e([u.current])),r()})};l.current={[d]:{v:o,n:u,l:e,u:r}}}return f(()=>{o.current=e,u.current+=1,s(i,()=>{l.current[d].l.forEach(r=>{r([u.current,e])})})},[e]),t(c,{value:l.current},n)}),delete o.Consumer,o}function h(e,r){const t=n(e)[d];if("object"==typeof process&&"production"!==process.env.NODE_ENV&&!t)throw new Error("useContextSelector requires special context");const{v:{current:c},n:{current:u},l:s}=t,i=r(c),[a,p]=o((e,t)=>{if(u<t[0]){try{if(2===t.length&&(Object.is(e.value,t[1])||Object.is(e.selected,r(t[1]))))return e}catch(e){}return l({},e)}return Object.is(e.value,c)||Object.is(e.selected,i)?e:{value:c,selected:i}},{value:c,selected:i});return f(()=>(s.add(p),()=>{s.delete(p)}),[s]),a.selected}function E(e){return h(e,v)}function b(e){const r=n(e)[d];if("object"==typeof process&&"production"!==process.env.NODE_ENV&&!r)throw new Error("useContextUpdate requires special context");const{u:t}=r;return t}const y=({context:e,value:r,children:n})=>{const{[p]:o}=e;if("object"==typeof process&&"production"!==process.env.NODE_ENV&&!o)throw new Error("BridgeProvider requires special context");return t(o,{value:r},n)},O=e=>{const r=n(e);if("object"==typeof process&&"production"!==process.env.NODE_ENV&&!r[d])throw new Error("useBridgeValue requires special context");return r};export{y as BridgeProvider,w as createContext,O as useBridgeValue,E as useContext,h as useContextSelector,b as useContextUpdate}; //# sourceMappingURL=index.modern.js.map