UNPKG

wana

Version:

Easy observable state for React

1 lines 1.64 kB
{"version":3,"file":"79278540.mjs","sources":["../../src/ui/context.tsx","../../src/ui/useChanges.ts"],"sourcesContent":["import * as React from 'react'\n\nconst depth = React.createContext(0)\n\nexport const AutoDepth = depth.Provider\nexport const useAutoDepth = () => React.useContext(depth)\n","import { useLayoutEffect } from 'react-layout-effect'\nimport { useMemoOne as useMemo } from 'use-memo-one'\nimport { emptyArray } from '../common'\nimport { no } from '../no'\nimport { Change, ChangeObserver, ObserverTarget } from '../observable'\nimport { $O } from '../symbols'\n\n/** Listen for shallow changes to an observable object. */\nexport function useChanges(\n target: ObserverTarget,\n onChange: (change: Change) => void,\n deps?: readonly any[]\n) {\n const observable = target[$O]\n if (!observable) {\n throw Error('Expected an observable object')\n }\n\n const observer = useMemo<ChangeObserver>(\n () => ({ onChange } as any),\n emptyArray\n )\n\n useLayoutEffect(() => {\n observer.onChange = no(onChange)\n }, deps)\n\n useLayoutEffect(() => {\n const observers = observable.get($O)\n observers.add(observer)\n return () => {\n observers.delete(observer)\n }\n }, [observable])\n}\n"],"names":["useMemo"],"mappings":";;;;;;AAEA,MAAM,QAAQ,MAAM,cAAc;MAErB,YAAY,MAAM;MAClB,eAAe,MAAM,MAAM,WAAW;;oBCIjD,QACA,UACA,MACA;AACA,QAAM,aAAa,OAAO;AAC1B,MAAI,CAAC,YAAY;AACf,UAAM,MAAM;AAAA;AAGd,QAAM,WAAWA,WACf,QAAS,YACT;AAGF,kBAAgB,MAAM;AACpB,aAAS,WAAW,GAAG;AAAA,KACtB;AAEH,kBAAgB,MAAM;AACpB,UAAM,YAAY,WAAW,IAAI;AACjC,cAAU,IAAI;AACd,WAAO,MAAM;AACX,gBAAU,OAAO;AAAA;AAAA,KAElB,CAAC;AAAA;;;;"}