UNPKG

use-context-selector

Version:
3 lines (2 loc) 2.35 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-native";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 p=Symbol(),d=Symbol(),v="undefined"==typeof window||/ServerSideRendering/.test(window.navigator&&window.navigator.userAgent)?c:u,f=e=>e;function w(n){const o=e({[p]:{v:{current:n},n:{current:-1},l:new Set,u:e=>e()}});var c;return o[d]=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={[p]:{v:o,n:u,l:e,u:r}}}return v(()=>{o.current=e,u.current+=1,s(i,()=>{l.current[p].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)[p];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,d]=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 v(()=>(s.add(d),()=>{s.delete(d)}),[s]),a.selected}function E(e){return h(e,f)}function b(e){const r=n(e)[p];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{[d]: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[p])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.native.modern.js.map