UNPKG

react-use-tools

Version:

A small library to manage global reactive tools across your React application.

3 lines (2 loc) 1 kB
"use strict";var e=require("react");function t(){var e,t;return((new Date).getTime()+(e=0,t=1e8,Math.floor(Math.random()*(t-e+1))+e)).toString(36)}function r(r){return(c,n)=>{const[s,o]=e.useState(0),a=e.useMemo(()=>function(e){const r=new Set(e);let c;do{c=t()}while(r.has(c));return c}(r.watchers.current.keys()),[]);e.useEffect(()=>()=>{r.tracks.current.delete(a),r.watchers.current.delete(a)},[]),e.useEffect(()=>{r.watchers.current.set(a,{tracker:c??(e=>e),callback(e){(void 0===n?.reRender||n.reRender)&&o(e=>e+1),n?.callback?.(e)}})},[c,n])}}exports.registerTools=function(t){window.tools=function(t){const c=e.useRef(new Map),n=e.useRef(new Map),s=e.useMemo(()=>r({watchers:c,tracks:n}),[]);return e.useEffect(()=>{c.current.forEach((e,r)=>{const c=e.tracker(t);n.current.get(r)!==c&&(n.current.set(r,c),e.callback(c))})},[t]),e.useMemo(()=>{const e=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t));return e.watch=s,e},[t])}(t)}; //# sourceMappingURL=index.cjs.js.map