refun
Version:
A collection of React Hook-enabled functions that compose harmoniously with each other. Similar to `recompose`, but:
1 lines • 2.09 kB
Source Map (JSON)
{"version":3,"sources":["on-layout.ts"],"names":["useRef","useLayoutEffect","EMPTY_OBJECT","NOOP","EMPTY_ARRAY","shallowEqualByKeys","onLayout","onLayoutHandler","watchKeys","props","propsRef","useEffectFnRef","watchValuesRef","current","map","k"],"mappings":"AAAA,SAASA,MAAT,EAAiBC,eAAjB,QAAwC,OAAxC;AACA,SAASC,YAAT,EAAuBC,IAAvB,EAA6BC,WAA7B,QAAgD,MAAhD;AACA,SAASC,kBAAT,QAAmC,SAAnC;AAEA,OAAO,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAgBC,eAAhB,EAAoEC,SAApE;AAAA,SACtB,UAACC,KAAD,EAAiB;AACf,QAAMC,QAAQ,GAAGV,MAAM,CAAIE,YAAJ,CAAvB;AACA,QAAMS,cAAc,GAAGX,MAAM,CAACG,IAAD,CAA7B;AACA,QAAMS,cAAc,GAAGZ,MAAM,CAAMI,WAAN,CAA7B;;AAEA,QAAIQ,cAAc,CAACC,OAAf,KAA2BT,WAA3B,IAA0C,CAACC,kBAAkB,CAACK,QAAQ,CAACG,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;;AAEDL,IAAAA,QAAQ,CAACG,OAAT,GAAmBJ,KAAnB;;AAEA,QAAIE,cAAc,CAACE,OAAf,KAA2BV,IAA/B,EAAqC;AACnCQ,MAAAA,cAAc,CAACE,OAAf,GAAyB,YAAM;AAC7B,eAAON,eAAe,CAACG,QAAQ,CAACG,OAAV,CAAtB;AACD,OAFD;AAGD;;AAEDZ,IAAAA,eAAe,CAACU,cAAc,CAACE,OAAhB,EAAyBD,cAAc,CAACC,OAAxC,CAAf;AAEA,WAAOJ,KAAP;AACD,GArBqB;AAAA,CAAjB","sourcesContent":["import { useRef, useLayoutEffect } from 'react'\nimport { EMPTY_OBJECT, NOOP, EMPTY_ARRAY } from 'tsfn'\nimport { shallowEqualByKeys } from './utils'\n\nexport const onLayout = <P extends {}> (onLayoutHandler: (props: P) => (() => void) | void, watchKeys: (keyof P)[]) =>\n (props: P): P => {\n const propsRef = useRef<P>(EMPTY_OBJECT)\n const useEffectFnRef = useRef(NOOP)\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 propsRef.current = props\n\n if (useEffectFnRef.current === NOOP) {\n useEffectFnRef.current = () => {\n return onLayoutHandler(propsRef.current)\n }\n }\n\n useLayoutEffect(useEffectFnRef.current, watchValuesRef.current)\n\n return props\n }\n"],"file":"on-layout.js"}