UNPKG

3.01 kBSource Map (JSON)View Raw
1{"version":3,"file":"useArrowKeysFocus.js","sources":["../src/hooks/useArrowKeysFocus.js"],"sourcesContent":["import { useState, useCallback, useEffect } from 'react'\nimport { KEY_UP, KEY_DOWN } from '../utils'\n\nexport function useArrowKeysFocus(refs) {\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n\n const cycleFocus = useCallback(\n (e, change) => {\n e.preventDefault()\n let next = highlightedIndex + change\n if (next > refs.length - 1) {\n next = 0\n }\n if (next < 0) {\n next = refs.length - 1\n }\n setHighlightedIndex(next)\n },\n [highlightedIndex, refs.length]\n )\n\n const handleKeyDown = useCallback(\n event => {\n const { keyCode } = event\n if (keyCode === KEY_UP || keyCode === KEY_DOWN) {\n cycleFocus(event, keyCode === KEY_UP ? -1 : 1)\n }\n },\n [cycleFocus]\n )\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [handleKeyDown])\n\n useEffect(() => {\n if (highlightedIndex === -1) {\n return\n }\n if (!refs[highlightedIndex]) {\n return\n }\n refs[highlightedIndex].focus()\n }, [highlightedIndex, refs])\n\n return {\n highlightedIndex,\n setHighlightedIndex,\n }\n}\n"],"names":["useArrowKeysFocus","refs","useState","highlightedIndex","setHighlightedIndex","cycleFocus","useCallback","e","change","preventDefault","next","length","handleKeyDown","event","keyCode","KEY_UP","KEY_DOWN","useEffect","document","addEventListener","removeEventListener","focus"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,SAASA,iBAAT,CAA2BC,IAA3B,EAAiC;AAAA,kBACUC,cAAQ,CAAC,CAAC,CAAF,CADlB;AAAA;AAAA,MAC/BC,gBAD+B;AAAA,MACbC,mBADa;;AAGtC,MAAMC,UAAU,GAAGC,iBAAW,CAC5B,UAACC,CAAD,EAAIC,MAAJ,EAAe;AACbD,IAAAA,CAAC,CAACE,cAAF;AACA,QAAIC,IAAI,GAAGP,gBAAgB,GAAGK,MAA9B;;AACA,QAAIE,IAAI,GAAGT,IAAI,CAACU,MAAL,GAAc,CAAzB,EAA4B;AAC1BD,MAAAA,IAAI,GAAG,CAAP;AACD;;AACD,QAAIA,IAAI,GAAG,CAAX,EAAc;AACZA,MAAAA,IAAI,GAAGT,IAAI,CAACU,MAAL,GAAc,CAArB;AACD;;AACDP,IAAAA,mBAAmB,CAACM,IAAD,CAAnB;AACD,GAX2B,EAY5B,CAACP,gBAAD,EAAmBF,IAAI,CAACU,MAAxB,CAZ4B,CAA9B;AAeA,MAAMC,aAAa,GAAGN,iBAAW,CAC/B,UAAAO,KAAK,EAAI;AAAA,QACCC,OADD,GACaD,KADb,CACCC,OADD;;AAEP,QAAIA,OAAO,KAAKC,eAAZ,IAAsBD,OAAO,KAAKE,iBAAtC,EAAgD;AAC9CX,MAAAA,UAAU,CAACQ,KAAD,EAAQC,OAAO,KAAKC,eAAZ,GAAqB,CAAC,CAAtB,GAA0B,CAAlC,CAAV;AACD;AACF,GAN8B,EAO/B,CAACV,UAAD,CAP+B,CAAjC;AAUAY,EAAAA,eAAS,CAAC,YAAM;AACdC,IAAAA,QAAQ,CAACC,gBAAT,CAA0B,SAA1B,EAAqCP,aAArC;AACA,WAAO;AAAA,aAAMM,QAAQ,CAACE,mBAAT,CAA6B,SAA7B,EAAwCR,aAAxC,CAAN;AAAA,KAAP;AACD,GAHQ,EAGN,CAACA,aAAD,CAHM,CAAT;AAKAK,EAAAA,eAAS,CAAC,YAAM;AACd,QAAId,gBAAgB,KAAK,CAAC,CAA1B,EAA6B;AAC3B;AACD;;AACD,QAAI,CAACF,IAAI,CAACE,gBAAD,CAAT,EAA6B;AAC3B;AACD;;AACDF,IAAAA,IAAI,CAACE,gBAAD,CAAJ,CAAuBkB,KAAvB;AACD,GARQ,EAQN,CAAClB,gBAAD,EAAmBF,IAAnB,CARM,CAAT;AAUA,SAAO;AACLE,IAAAA,gBAAgB,EAAhBA,gBADK;AAELC,IAAAA,mBAAmB,EAAnBA;AAFK,GAAP;AAID;;;;"}
\No newline at end of file