UNPKG

refun

Version:

A collection of React Hook-enabled functions that compose harmoniously with each other. Similar to `recompose`, but:

1 lines 2.03 kB
{"version":3,"sources":["on-update.ts"],"names":["useRef","useEffect","EMPTY_OBJECT","NOOP","EMPTY_ARRAY","shallowEqualByKeys","onUpdate","onUpdateFn","watchKeys","props","useEffectFnRef","propsRef","watchValuesRef","current","map","k"],"mappings":"AAAA,SAASA,MAAT,EAAiBC,SAAjB,QAAkC,OAAlC;AACA,SAASC,YAAT,EAAuBC,IAAvB,EAA6BC,WAA7B,QAAgD,MAAhD;AACA,SAASC,kBAAT,QAAmC,SAAnC;AAEA,OAAO,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAgBC,UAAhB,EAA+DC,SAA/D;AAAA,SAA0F,UAACC,KAAD,EAAiB;AACjI,QAAMC,cAAc,GAAGV,MAAM,CAAaG,IAAb,CAA7B;AACA,QAAMQ,QAAQ,GAAGX,MAAM,CAAIE,YAAJ,CAAvB;AACA,QAAMU,cAAc,GAAGZ,MAAM,CAAMI,WAAN,CAA7B;;AAEA,QAAIQ,cAAc,CAACC,OAAf,KAA2BT,WAA3B,IAA0C,CAACC,kBAAkB,CAACM,QAAQ,CAACE,OAAV,EAAmBJ,KAAnB,EAA0BD,SAA1B,CAAjE,EAAuG;AACrGI,MAAAA,cAAc,CAACC,OAAf,GAAyBL,SAAS,CAACM,GAAV,CAAc,UAACC,CAAD;AAAA,eAAON,KAAK,CAACM,CAAD,CAAZ;AAAA,OAAd,CAAzB;AACD;;AAED,QAAIL,cAAc,CAACG,OAAf,KAA2BV,IAA/B,EAAqC;AACnCO,MAAAA,cAAc,CAACG,OAAf,GAAyB,YAAM;AAC7B,eAAON,UAAU,CAACI,QAAQ,CAACE,OAAV,CAAjB;AACD,OAFD;AAGD;;AAEDF,IAAAA,QAAQ,CAACE,OAAT,GAAmBJ,KAAnB;AAEAR,IAAAA,SAAS,CAACS,cAAc,CAACG,OAAhB,EAAyBD,cAAc,CAACC,OAAxC,CAAT;AAEA,WAAOJ,KAAP;AACD,GApBuB;AAAA,CAAjB","sourcesContent":["import { useRef, useEffect } from 'react'\nimport { EMPTY_OBJECT, NOOP, EMPTY_ARRAY } from 'tsfn'\nimport { shallowEqualByKeys } from './utils'\n\nexport const onUpdate = <P extends {}> (onUpdateFn: (props: P) => (() => void) | void, watchKeys: (keyof P)[]) => (props: P): P => {\n const useEffectFnRef = useRef<() => void>(NOOP)\n const propsRef = useRef<P>(EMPTY_OBJECT)\n const watchValuesRef = useRef<any>(EMPTY_ARRAY)\n\n if (watchValuesRef.current === EMPTY_ARRAY || !shallowEqualByKeys(propsRef.current, props, watchKeys)) {\n watchValuesRef.current = watchKeys.map((k) => props[k])\n }\n\n if (useEffectFnRef.current === NOOP) {\n useEffectFnRef.current = () => {\n return onUpdateFn(propsRef.current)\n }\n }\n\n propsRef.current = props\n\n useEffect(useEffectFnRef.current, watchValuesRef.current)\n\n return props\n}\n"],"file":"on-update.js"}