refun
Version:
A collection of React Hook-enabled functions that compose harmoniously with each other. Similar to `recompose`, but:
1 lines • 2.56 kB
Source Map (JSON)
{"version":3,"sources":["map-focused.ts"],"names":["useState","useRef","isFunction","NOOP","mapFocused","props","isFocused","setIsFocused","origOnFocusRef","origOnBlurRef","onFocusRef","onBlurRef","current","onFocus","onBlur","Boolean"],"mappings":";AAAA,SAASA,QAAT,EAAmBC,MAAnB,QAAiC,OAAjC;AACA,SAASC,UAAT,EAAqBC,IAArB,QAAiC,MAAjC;AAQA,OAAO,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAwBC,KAAxB,EAAgE;AAAA,kBACtDL,QAAQ,CAAC,KAAD,CAD8C;AAAA;AAAA,MACjFM,SADiF;AAAA,MACtEC,YADsE;;AAGxF,MAAMC,cAAc,GAAGP,MAAM,EAA7B;AACA,MAAMQ,aAAa,GAAGR,MAAM,EAA5B;AACA,MAAMS,UAAU,GAAGT,MAAM,CAAaE,IAAb,CAAzB;AACA,MAAMQ,SAAS,GAAGV,MAAM,CAAaE,IAAb,CAAxB;AAEAK,EAAAA,cAAc,CAACI,OAAf,GAAyBP,KAAK,CAACQ,OAA/B;AACAJ,EAAAA,aAAa,CAACG,OAAd,GAAwBP,KAAK,CAACS,MAA9B;;AAEA,MAAIJ,UAAU,CAACE,OAAX,KAAuBT,IAA3B,EAAiC;AAC/BO,IAAAA,UAAU,CAACE,OAAX,GAAqB,YAAM;AACzBL,MAAAA,YAAY,CAAC,IAAD,CAAZ;;AAEA,UAAIL,UAAU,CAACM,cAAc,CAACI,OAAhB,CAAd,EAAwC;AACtCJ,QAAAA,cAAc,CAACI,OAAf;AACD;AACF,KAND;AAOD;;AAED,MAAID,SAAS,CAACC,OAAV,KAAsBT,IAA1B,EAAgC;AAC9BQ,IAAAA,SAAS,CAACC,OAAV,GAAoB,YAAM;AACxBL,MAAAA,YAAY,CAAC,KAAD,CAAZ;;AAEA,UAAIL,UAAU,CAACO,aAAa,CAACG,OAAf,CAAd,EAAuC;AACrCH,QAAAA,aAAa,CAACG,OAAd;AACD;AACF,KAND;AAOD;;AAED,2BACKP,KADL;AAEEC,IAAAA,SAAS,EAAEA,SAAS,IAAIS,OAAO,CAACV,KAAK,CAACC,SAAP,CAFjC;AAGEO,IAAAA,OAAO,EAAEH,UAAU,CAACE,OAHtB;AAIEE,IAAAA,MAAM,EAAEH,SAAS,CAACC;AAJpB;AAMD,CArCM","sourcesContent":["import { useState, useRef } from 'react'\nimport { isFunction, NOOP } from 'tsfn'\n\nexport type TMapFocused = {\n isFocused?: boolean,\n onFocus?: () => void,\n onBlur?: () => void,\n}\n\nexport const mapFocused = <P extends TMapFocused>(props: P): P & Required<TMapFocused> => {\n const [isFocused, setIsFocused] = useState(false)\n\n const origOnFocusRef = useRef<() => void>()\n const origOnBlurRef = useRef<() => void>()\n const onFocusRef = useRef<() => void>(NOOP)\n const onBlurRef = useRef<() => void>(NOOP)\n\n origOnFocusRef.current = props.onFocus\n origOnBlurRef.current = props.onBlur\n\n if (onFocusRef.current === NOOP) {\n onFocusRef.current = () => {\n setIsFocused(true)\n\n if (isFunction(origOnFocusRef.current)) {\n origOnFocusRef.current()\n }\n }\n }\n\n if (onBlurRef.current === NOOP) {\n onBlurRef.current = () => {\n setIsFocused(false)\n\n if (isFunction(origOnBlurRef.current)) {\n origOnBlurRef.current()\n }\n }\n }\n\n return {\n ...props,\n isFocused: isFocused || Boolean(props.isFocused),\n onFocus: onFocusRef.current,\n onBlur: onBlurRef.current,\n }\n}\n"],"file":"map-focused.js"}