UNPKG

refun

Version:

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

1 lines 2.41 kB
{"version":3,"sources":["map-state-ref.ts"],"names":["useState","useRef","EMPTY_OBJECT","NOOP","shallowEqualByKeys","mapStateRef","stateName","stateFlusherName","getValue","watchKeys","props","useStateResult","prevProps","stateRef","stateFlushRef","current"],"mappings":";AAAA,SAASA,QAAT,EAAmBC,MAAnB,QAAiC,OAAjC;AAEA,SAASC,YAAT,EAAuBC,IAAvB,QAAmC,MAAnC;AAEA,SAASC,kBAAT,QAAmC,SAAnC;AAEA,OAAO,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAA0DC,SAA1D,EAAyEC,gBAAzE,EAAgGC,QAAhG,EAA2HC,SAA3H;AAAA,SACzB,UAACC,KAAD,EAA2F;AAAA;;AACzF,QAAMC,cAAc,GAAGX,QAAQ,CAAIE,YAAJ,CAA/B;AACA,QAAMU,SAAS,GAAGX,MAAM,CAAIC,YAAJ,CAAxB;AACA,QAAMW,QAAQ,GAAGZ,MAAM,CAAIC,YAAJ,CAAvB;AACA,QAAMY,aAAa,GAAGb,MAAM,CAACE,IAAD,CAA5B;;AAEA,QAAIW,aAAa,CAACC,OAAd,KAA0BZ,IAA9B,EAAoC;AAClCW,MAAAA,aAAa,CAACC,OAAd,GAAwB,YAAM;AAC5BJ,QAAAA,cAAc,CAAC,CAAD,CAAd,CAAkB,EAAlB;AACD,OAFD;AAGD;;AAED,QAAIC,SAAS,CAACG,OAAV,KAAsBb,YAAtB,IAAsC,CAACE,kBAAkB,CAACQ,SAAS,CAACG,OAAX,EAAoBL,KAApB,EAA2BD,SAA3B,CAA7D,EAAoG;AAClGI,MAAAA,QAAQ,CAACE,OAAT,GAAmBP,QAAQ,CAACE,KAAD,CAA3B;AACD;;AAEDE,IAAAA,SAAS,CAACG,OAAV,GAAoBL,KAApB;AAEA,6BACKA,KADL,wDAEGJ,SAFH,EAEeO,QAFf,mCAGGN,gBAHH,EAGsBO,aAAa,CAACC,OAHpC;AAMD,GAzBwB;AAAA,CAApB","sourcesContent":["import { useState, useRef } from 'react'\nimport type { MutableRefObject } from 'react'\nimport { EMPTY_OBJECT, NOOP } from 'tsfn'\nimport type { TExtend3 } from 'tsfn'\nimport { shallowEqualByKeys } from './utils'\n\nexport const mapStateRef = <SN extends string, SSN extends string, P extends {}, R> (stateName: SN, stateFlusherName: SSN, getValue: (props: P) => R, watchKeys: (keyof P)[]) =>\n (props: P): TExtend3<P, { [K in SN]: MutableRefObject<R> }, { [K in SSN]: () => void }> => {\n const useStateResult = useState<R>(EMPTY_OBJECT)\n const prevProps = useRef<P>(EMPTY_OBJECT)\n const stateRef = useRef<R>(EMPTY_OBJECT)\n const stateFlushRef = useRef(NOOP)\n\n if (stateFlushRef.current === NOOP) {\n stateFlushRef.current = () => {\n useStateResult[1]({} as R)\n }\n }\n\n if (prevProps.current === EMPTY_OBJECT || !shallowEqualByKeys(prevProps.current, props, watchKeys)) {\n stateRef.current = getValue(props)\n }\n\n prevProps.current = props\n\n return {\n ...props,\n [stateName]: stateRef,\n [stateFlusherName]: stateFlushRef.current,\n // FIXME: https://github.com/Microsoft/TypeScript/issues/13948\n } as any\n }\n"],"file":"map-state-ref.js"}