@deephaven/components 0.11.8-beta.0 → 0.11.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AutoCompleteInput.d.ts +3 -0
- package/dist/AutoCompleteInput.d.ts.map +1 -1
- package/dist/AutoCompleteInput.js +8 -4
- package/dist/AutoCompleteInput.js.map +1 -1
- package/dist/AutoResizeTextarea.d.ts +4 -1
- package/dist/AutoResizeTextarea.d.ts.map +1 -1
- package/dist/AutoResizeTextarea.js +8 -4
- package/dist/AutoResizeTextarea.js.map +1 -1
- package/dist/BasicModal.d.ts +1 -0
- package/dist/BasicModal.d.ts.map +1 -1
- package/dist/BasicModal.js +14 -7
- package/dist/BasicModal.js.map +1 -1
- package/dist/Button.d.ts +1 -1
- package/dist/ButtonGroup.d.ts +3 -0
- package/dist/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup.js +8 -4
- package/dist/ButtonGroup.js.map +1 -1
- package/dist/CardFlip.d.ts +2 -1
- package/dist/CardFlip.d.ts.map +1 -1
- package/dist/CardFlip.js +4 -2
- package/dist/CardFlip.js.map +1 -1
- package/dist/Checkbox.d.ts +1 -0
- package/dist/Checkbox.d.ts.map +1 -1
- package/dist/Checkbox.js +8 -4
- package/dist/Checkbox.js.map +1 -1
- package/dist/Collapse.d.ts +3 -0
- package/dist/Collapse.d.ts.map +1 -1
- package/dist/Collapse.js +8 -4
- package/dist/Collapse.js.map +1 -1
- package/dist/ComboBox.d.ts +3 -0
- package/dist/ComboBox.d.ts.map +1 -1
- package/dist/ComboBox.js +10 -5
- package/dist/ComboBox.js.map +1 -1
- package/dist/CustomTimeSelect.d.ts +1 -0
- package/dist/CustomTimeSelect.d.ts.map +1 -1
- package/dist/CustomTimeSelect.js +6 -3
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DebouncedSearchInput.d.ts +2 -0
- package/dist/DebouncedSearchInput.d.ts.map +1 -1
- package/dist/DebouncedSearchInput.js +6 -3
- package/dist/DebouncedSearchInput.js.map +1 -1
- package/dist/DeephavenSpinner.d.ts +2 -1
- package/dist/DeephavenSpinner.d.ts.map +1 -1
- package/dist/DeephavenSpinner.js +4 -2
- package/dist/DeephavenSpinner.js.map +1 -1
- package/dist/DraggableItemList.d.ts +2 -0
- package/dist/DraggableItemList.d.ts.map +1 -1
- package/dist/DraggableItemList.js +6 -3
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/HierarchicalCheckboxMenu.d.ts +1 -0
- package/dist/HierarchicalCheckboxMenu.d.ts.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js +12 -6
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/ItemList.d.ts +2 -0
- package/dist/ItemList.d.ts.map +1 -1
- package/dist/ItemList.js +6 -3
- package/dist/ItemList.js.map +1 -1
- package/dist/ItemListItem.d.ts +2 -0
- package/dist/ItemListItem.d.ts.map +1 -1
- package/dist/ItemListItem.js +5 -2
- package/dist/ItemListItem.js.map +1 -1
- package/dist/LoadingOverlay.d.ts +2 -1
- package/dist/LoadingOverlay.d.ts.map +1 -1
- package/dist/LoadingOverlay.js +4 -2
- package/dist/LoadingOverlay.js.map +1 -1
- package/dist/LoadingSpinner.d.ts +2 -1
- package/dist/LoadingSpinner.d.ts.map +1 -1
- package/dist/LoadingSpinner.js +4 -2
- package/dist/LoadingSpinner.js.map +1 -1
- package/dist/MaskedInput.d.ts +1 -0
- package/dist/MaskedInput.d.ts.map +1 -1
- package/dist/MaskedInput.js +6 -3
- package/dist/MaskedInput.js.map +1 -1
- package/dist/Option.d.ts +2 -1
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.js +4 -2
- package/dist/Option.js.map +1 -1
- package/dist/RadioGroup.d.ts +1 -0
- package/dist/RadioGroup.d.ts.map +1 -1
- package/dist/RadioGroup.js +4 -2
- package/dist/RadioGroup.js.map +1 -1
- package/dist/SearchInput.d.ts +2 -0
- package/dist/SearchInput.d.ts.map +1 -1
- package/dist/SearchInput.js +6 -3
- package/dist/SearchInput.js.map +1 -1
- package/dist/Select.d.ts +2 -1
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js +4 -2
- package/dist/Select.js.map +1 -1
- package/dist/SelectValueList.d.ts +2 -0
- package/dist/SelectValueList.d.ts.map +1 -1
- package/dist/SelectValueList.js +6 -3
- package/dist/SelectValueList.js.map +1 -1
- package/dist/SocketedButton.d.ts +1 -0
- package/dist/SocketedButton.d.ts.map +1 -1
- package/dist/SocketedButton.js +6 -3
- package/dist/SocketedButton.js.map +1 -1
- package/dist/TimeInput.d.ts +1 -0
- package/dist/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput.js +6 -3
- package/dist/TimeInput.js.map +1 -1
- package/dist/TimeSlider.d.ts +2 -1
- package/dist/TimeSlider.d.ts.map +1 -1
- package/dist/TimeSlider.js +18 -9
- package/dist/TimeSlider.js.map +1 -1
- package/dist/ToastNotification.d.ts +2 -1
- package/dist/ToastNotification.d.ts.map +1 -1
- package/dist/ToastNotification.js +4 -2
- package/dist/ToastNotification.js.map +1 -1
- package/dist/UISwitch.d.ts +3 -2
- package/dist/UISwitch.d.ts.map +1 -1
- package/dist/UISwitch.js +4 -2
- package/dist/UISwitch.js.map +1 -1
- package/dist/context-actions/ContextActions.d.ts +1 -0
- package/dist/context-actions/ContextActions.d.ts.map +1 -1
- package/dist/context-actions/ContextActions.js +5 -1
- package/dist/context-actions/ContextActions.js.map +1 -1
- package/dist/context-actions/ContextMenu.d.ts +2 -0
- package/dist/context-actions/ContextMenu.d.ts.map +1 -1
- package/dist/context-actions/ContextMenu.js +6 -3
- package/dist/context-actions/ContextMenu.js.map +1 -1
- package/dist/context-actions/ContextMenuItem.d.ts +1 -0
- package/dist/context-actions/ContextMenuItem.d.ts.map +1 -1
- package/dist/context-actions/ContextMenuItem.js +10 -5
- package/dist/context-actions/ContextMenuItem.js.map +1 -1
- package/dist/context-actions/ContextMenuRoot.d.ts +3 -1
- package/dist/context-actions/ContextMenuRoot.d.ts.map +1 -1
- package/dist/context-actions/ContextMenuRoot.js +5 -1
- package/dist/context-actions/ContextMenuRoot.js.map +1 -1
- package/dist/context-actions/GlobalContextActions.d.ts +1 -0
- package/dist/context-actions/GlobalContextActions.d.ts.map +1 -1
- package/dist/context-actions/GlobalContextActions.js +4 -2
- package/dist/context-actions/GlobalContextActions.js.map +1 -1
- package/dist/menu-actions/DropdownMenu.d.ts +2 -0
- package/dist/menu-actions/DropdownMenu.d.ts.map +1 -1
- package/dist/menu-actions/DropdownMenu.js +6 -3
- package/dist/menu-actions/DropdownMenu.js.map +1 -1
- package/dist/menu-actions/Menu.d.ts +2 -0
- package/dist/menu-actions/Menu.d.ts.map +1 -1
- package/dist/menu-actions/Menu.js +7 -2
- package/dist/menu-actions/Menu.js.map +1 -1
- package/dist/navigation/Menu.d.ts +2 -1
- package/dist/navigation/Menu.d.ts.map +1 -1
- package/dist/navigation/Menu.js +4 -2
- package/dist/navigation/Menu.js.map +1 -1
- package/dist/navigation/MenuItem.d.ts +2 -1
- package/dist/navigation/MenuItem.d.ts.map +1 -1
- package/dist/navigation/MenuItem.js +4 -2
- package/dist/navigation/MenuItem.js.map +1 -1
- package/dist/navigation/Page.d.ts +2 -1
- package/dist/navigation/Page.d.ts.map +1 -1
- package/dist/navigation/Page.js +4 -2
- package/dist/navigation/Page.js.map +1 -1
- package/dist/navigation/Stack.d.ts +2 -1
- package/dist/navigation/Stack.d.ts.map +1 -1
- package/dist/navigation/Stack.js +4 -2
- package/dist/navigation/Stack.js.map +1 -1
- package/dist/popper/Popper.d.ts +3 -0
- package/dist/popper/Popper.d.ts.map +1 -1
- package/dist/popper/Popper.js +9 -3
- package/dist/popper/Popper.js.map +1 -1
- package/dist/popper/Tooltip.d.ts +2 -0
- package/dist/popper/Tooltip.d.ts.map +1 -1
- package/dist/popper/Tooltip.js +6 -3
- package/dist/popper/Tooltip.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/CustomTimeSelect.tsx"],"names":["React","Component","FontAwesomeIcon","vsCheck","dhSort","TimeUtils","classNames","TimeInput","DropdownMenu","CUSTOM_OPTION","MENU_NAVIGATION_DIRECTION","CustomTimeSelect","constructor","props","value","valueToTime","toggleMenu","bind","handleMenuKeyDown","closeMenu","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","handleCustomInput","csContainer","createRef","menuContainer","button","input","state","keyboardOptionIndex","menuIsOpen","inputWidth","customTime","inputFocused","getSelectedText","options","placeholder","i","length","option","title","formatTime","setInputWidth","current","setState","getBoundingClientRect","width","focus","updateInputValue","onChange","handleResize","event","key","updateFromCustom","stopPropagation","preventDefault","shiftKey","handleMenuNavigation","UP","DOWN","direction","menuOptionsLength","newKeyboardOptionIndex","focusInput","focusOption","scrollOptionIntoView","optionIndex","Number","currentTarget","timeToValue","update","updateAndClose","target","activeOption","querySelector","HTMLElement","valueIndex","map","indexOf","index","children","item","openMenu","updateKeyboardIndex","focusButton","offsetTop","DROP_DOWN_MENU_HEIGHT","scrollTop","renderMenuElement","renderOptions","icon","customText","matchFound","optionArray","push","render","disabled","invalid","popperOptions","placement","modifiers","preventOverflow","enabled","menuElement","maxWidth","Math","round","time"],"mappings":";;;;;;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AAEA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,OAAT,EAAkBC,MAAlB,QAAgD,kBAAhD;AACA,SAASC,SAAT,QAA0B,kBAA1B;AACA,OAAOC,UAAP,MAAuB,YAAvB;OACOC,S;OACAC,Y;;;AAIP,IAAMC,aAAa,GAAG,CAAC,CAAvB;IAEKC,yB;;WAAAA,yB;AAAAA,EAAAA,yB;AAAAA,EAAAA,yB;GAAAA,yB,KAAAA,yB;;AA+BL,MAAMC,gBAAN,SAA+BV,SAA/B,CAGE;AAoBAW,EAAAA,WAAW,CAACC,KAAD,EAA+B;AACxC,UAAMA,KAAN;;AADwC;;AAAA;;AAAA;;AAAA;;AAGxC,QAAM;AAAEC,MAAAA,KAAF;AAASC,MAAAA;AAAT,QAAyBF,KAA/B;AAEA,SAAKG,UAAL,GAAkB,KAAKA,UAAL,CAAgBC,IAAhB,CAAqB,IAArB,CAAlB;AACA,SAAKC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBD,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKE,SAAL,GAAiB,KAAKA,SAAL,CAAeF,IAAf,CAAoB,IAApB,CAAjB;AAEA,SAAKG,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBH,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKI,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBJ,IAAvB,CAA4B,IAA5B,CAAzB;AAEA,SAAKK,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBL,IAAtB,CAA2B,IAA3B,CAAxB;AACA,SAAKM,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBN,IAAtB,CAA2B,IAA3B,CAAxB;AACA,SAAKO,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBP,IAAvB,CAA4B,IAA5B,CAAzB;AAEA,SAAKQ,WAAL,gBAAmBzB,KAAK,CAAC0B,SAAN,EAAnB;AACA,SAAKC,aAAL,gBAAqB3B,KAAK,CAAC0B,SAAN,EAArB;AACA,SAAKE,MAAL,gBAAc5B,KAAK,CAAC0B,SAAN,EAAd;AACA,SAAKG,KAAL,gBAAa7B,KAAK,CAAC0B,SAAN,EAAb;AAEA,SAAKI,KAAL,GAAa;AACXC,MAAAA,mBAAmB,EAAE,CADV;AAEXC,MAAAA,UAAU,EAAE,KAFD;AAGXC,MAAAA,UAAU,EAAE,GAHD;AAIXC,MAAAA,UAAU,EAAEnB,WAAW,CAACD,KAAD,CAJZ;AAKXqB,MAAAA,YAAY,EAAE;AALH,KAAb;AAOD;;AAUDC,EAAAA,eAAe,GAAW;AACxB,QAAM;AAAEC,MAAAA,OAAF;AAAWvB,MAAAA,KAAX;AAAkBwB,MAAAA;AAAlB,QAAkC,KAAKzB,KAA7C;AACA,QAAM;AAAEqB,MAAAA;AAAF,QAAiB,KAAKJ,KAA5B;;AAEA,QAAIhB,KAAK,KAAK,IAAd,EAAoB;AAClB,aAAOwB,WAAP;AACD;;AAED,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,OAAO,CAACG,MAA5B,EAAoCD,CAAC,IAAI,CAAzC,EAA4C;AAC1C,UAAME,MAAM,GAAGJ,OAAO,CAACE,CAAD,CAAtB;;AACA,UAAIE,MAAM,CAAC3B,KAAP,KAAiBA,KAArB,EAA4B;AAC1B,eAAO2B,MAAM,CAACC,KAAd;AACD;AACF;;AAED,WAAOrC,SAAS,CAACsC,UAAV,CAAqBT,UAArB,CAAP;AACD;;AAEDU,EAAAA,aAAa,GAAS;AACpB,QAAI,KAAKnB,WAAL,CAAiBoB,OAArB,EAA8B;AAC5B,WAAKC,QAAL,CAAc;AACZb,QAAAA,UAAU,EAAE,KAAKR,WAAL,CAAiBoB,OAAjB,CAAyBE,qBAAzB,GAAiDC;AADjD,OAAd;AAGD;AACF;;AAEDC,EAAAA,KAAK,GAAS;AAAA;;AACZ,iCAAKrB,MAAL,CAAYiB,OAAZ,8EAAqBI,KAArB;AACD;;AAEDC,EAAAA,gBAAgB,CAACpC,KAAD,EAAsB;AACpC,QAAM;AAAEqC,MAAAA;AAAF,QAAe,KAAKtC,KAA1B;AACAsC,IAAAA,QAAQ,CAACrC,KAAD,CAAR;AACD;;AAEDsC,EAAAA,YAAY,GAAS;AACnB,SAAKR,aAAL;AACD;;AAED1B,EAAAA,iBAAiB,CAACmC,KAAD,EAAmD;AAAA;;AAClE,QAAM;AAAEtB,MAAAA,mBAAF;AAAuBI,MAAAA;AAAvB,QAAwC,KAAKL,KAAnD;AACA,QAAM;AAAEO,MAAAA;AAAF,QAAc,KAAKxB,KAAzB;;AAEA,YAAQwC,KAAK,CAACC,GAAd;AACE,WAAK,OAAL;AACA,WAAK,GAAL;AAAU;AACR,YAAInB,YAAJ,EAAkB;AAChB,eAAKoB,gBAAL;AACD,SAFD,MAEO;AACL,eAAKL,gBAAL,CAAsBb,OAAO,CAACN,mBAAD,CAAP,CAA6BjB,KAAnD;AACD;;AACD,aAAKK,SAAL;AACA,sCAAKS,MAAL,CAAYiB,OAAZ,gFAAqBI,KAArB;AACAI,QAAAA,KAAK,CAACG,eAAN;AACAH,QAAAA,KAAK,CAACI,cAAN;AACA;;AACF,WAAK,KAAL;AACE,YAAIJ,KAAK,CAACK,QAAV,EAAoB;AAClB,eAAKC,oBAAL,CACEhD,gBAAgB,CAACD,yBAAjB,CAA2CkD,EAD7C;AAGD,SAJD,MAIO;AACL,eAAKD,oBAAL,CACEhD,gBAAgB,CAACD,yBAAjB,CAA2CmD,IAD7C;AAGD;;AACDR,QAAAA,KAAK,CAACG,eAAN;AACAH,QAAAA,KAAK,CAACI,cAAN;AACA;;AACF,WAAK,SAAL;AACE,aAAKE,oBAAL,CACEhD,gBAAgB,CAACD,yBAAjB,CAA2CkD,EAD7C;AAGAP,QAAAA,KAAK,CAACG,eAAN;AACAH,QAAAA,KAAK,CAACI,cAAN;AACA;;AACF,WAAK,WAAL;AACE,aAAKE,oBAAL,CACEhD,gBAAgB,CAACD,yBAAjB,CAA2CmD,IAD7C;AAGAR,QAAAA,KAAK,CAACG,eAAN;AACAH,QAAAA,KAAK,CAACI,cAAN;AACA;;AACF,WAAK,QAAL;AACE,aAAKtC,SAAL;AACA;;AACF;AACE;AA5CJ;AA8CD;;AAEDwC,EAAAA,oBAAoB,CAACG,SAAD,EAA6C;AAC/D,QAAM;AAAE/B,MAAAA,mBAAF;AAAuBI,MAAAA;AAAvB,QAAwC,KAAKL,KAAnD;AACA,QAAM;AAAEO,MAAAA;AAAF,QAAc,KAAKxB,KAAzB;AACA,QAAMkD,iBAAiB,GAAG1B,OAAO,CAACG,MAAlC;AACA,QAAIwB,sBAAsB,GAAGjC,mBAA7B;;AACA,YAAQ+B,SAAR;AACE,WAAKnD,gBAAgB,CAACD,yBAAjB,CAA2CkD,EAAhD;AACE,YAAI,CAACzB,YAAD,IAAiBJ,mBAAmB,KAAK,CAA7C,EAAgD;AAC9C,eAAKkC,UAAL;AACA;AACD,SAHD,MAGO,IAAI9B,YAAJ,EAAkB;AACvB,eAAK+B,WAAL,CAAiBnC,mBAAjB;AACD;;AAED,YAAIA,mBAAmB,GAAG,CAAtB,IAA2B,CAACI,YAAhC,EAA8C;AAC5C6B,UAAAA,sBAAsB,GACpB,CAACA,sBAAsB,GAAG,CAA1B,IAA+BD,iBADjC;AAEA,eAAKjB,QAAL,CAAc;AACZf,YAAAA,mBAAmB,EAAEiC;AADT,WAAd;AAGD,SAND,MAMO,IAAIjC,mBAAmB,KAAK,CAA5B,EAA+B;AACpCiC,UAAAA,sBAAsB,GAAGD,iBAAiB,GAAG,CAA7C;AACA,eAAKjB,QAAL,CAAc;AACZf,YAAAA,mBAAmB,EAAEiC;AADT,WAAd;AAGD;;AACD,aAAKG,oBAAL,CAA0BH,sBAA1B;AACA;;AACF,WAAKrD,gBAAgB,CAACD,yBAAjB,CAA2CmD,IAAhD;AACE,YAAI,CAAC1B,YAAD,IAAiBJ,mBAAmB,KAAKgC,iBAAiB,GAAG,CAAjE,EAAoE;AAClE,eAAKE,UAAL;AACA;AACD,SAHD,MAGO,IAAI9B,YAAJ,EAAkB;AACvB,eAAK+B,WAAL,CAAiBnC,mBAAjB;AACD;;AAED,YACEA,mBAAmB,GAAGgC,iBAAtB,IACA,EAAE5B,YAAY,IAAIJ,mBAAmB,KAAK,CAA1C,CAFF,EAGE;AACAiC,UAAAA,sBAAsB,GACpB,CAACA,sBAAsB,GAAG,CAA1B,IAA+BD,iBADjC;AAEA,eAAKjB,QAAL,CAAc;AACZf,YAAAA,mBAAmB,EAAEiC;AADT,WAAd;AAGD;;AACD,aAAKG,oBAAL,CAA0BH,sBAA1B;AACA;;AACF;AACE;AA5CJ;AA8CD;;AAED5C,EAAAA,iBAAiB,CAACiC,KAAD,EAAmD;AAClE,QAAMe,WAAW,GAAGC,MAAM,CAAChB,KAAK,CAACiB,aAAN,CAAoBxD,KAArB,CAA1B;AACA,QAAM;AAAEuB,MAAAA,OAAF;AAAWkC,MAAAA;AAAX,QAA2B,KAAK1D,KAAtC;AACA,QAAM;AAAEqB,MAAAA;AAAF,QAAiB,KAAKJ,KAA5B;;AAEA,QAAIsC,WAAW,KAAK3D,aAApB,EAAmC;AACjC,UAAM+D,MAAM,GAAGD,WAAW,CAACrC,UAAD,CAA1B;AACA,WAAKuC,cAAL,CAAoBD,MAApB;AACD,KAHD,MAGO;AACL,WAAKC,cAAL,CAAoBpC,OAAO,CAAC+B,WAAD,CAAP,CAAqBtD,KAAzC;AACD;AACF;;AAED2D,EAAAA,cAAc,CAACD,MAAD,EAAuB;AAAA;;AACnC,SAAKtB,gBAAL,CAAsBsB,MAAtB;AACA,SAAKrD,SAAL;AACA,kCAAKS,MAAL,CAAYiB,OAAZ,gFAAqBI,KAArB;AACD;;AAED5B,EAAAA,iBAAiB,CAACgC,KAAD,EAAmD;AAClE,SAAKP,QAAL,CAAc;AAAEf,MAAAA,mBAAmB,EAAEsC,MAAM,CAAChB,KAAK,CAACqB,MAAN,CAAa5D,KAAd;AAA7B,KAAd;AACD;;AAEDQ,EAAAA,gBAAgB,GAAS;AAAA;;AACvB,QAAM;AAAEe,MAAAA,OAAF;AAAWvB,MAAAA;AAAX,QAAqB,KAAKD,KAAhC;AACA,QAAM;AAAEkB,MAAAA;AAAF,QAA0B,KAAKD,KAArC;AACA,SAAKqC,oBAAL,CAA0BpC,mBAA1B;AACA,QAAM4C,YAAY,4BAAG,KAAKhD,aAAL,CAAmBkB,OAAtB,0DAAG,sBAA4B+B,aAA5B,CACnB,gCADmB,CAArB;;AAGA,QAAID,YAAY,YAAYE,WAA5B,EAAyC;AACvCF,MAAAA,YAAY,CAAC1B,KAAb;AACD;;AAED,QAAInC,KAAK,KAAK,IAAd,EAAoB;AAClB;AACD;;AACD,QAAMgE,UAAU,GAAGzC,OAAO,CAAC0C,GAAR,CAAYtC,MAAM,IAAIA,MAAM,CAAC3B,KAA7B,EAAoCkE,OAApC,CAA4ClE,KAA5C,CAAnB;;AACA,QAAIgE,UAAU,GAAG,CAAjB,EAAoB;AAClB;AACA,WAAKb,UAAL;AACD;AACF;;AAEDA,EAAAA,UAAU,GAAS;AAAA;;AACjB,gCAAKpC,KAAL,CAAWgB,OAAX,4EAAoBI,KAApB;AACD;;AAEDiB,EAAAA,WAAW,CAACe,KAAD,EAAsB;AAAA;;AAC/B,QAAM5C,OAAO,6BAAG,KAAKV,aAAL,CAAmBkB,OAAtB,2DAAG,uBAA4B+B,aAA5B,CAA0C,aAA1C,CAAhB;;AACA,QAAIvC,OAAO,IAAIA,OAAO,CAAC6C,QAAvB,EAAiC;AAC/B,UAAMzC,MAAM,GAAGJ,OAAO,CAAC6C,QAAR,CAAiBC,IAAjB,CAAsBF,KAAtB,CAAf;;AACA,UAAIxC,MAAM,YAAYoC,WAAtB,EAAmC;AACjCpC,QAAAA,MAAM,CAACQ,KAAP;AACD;AACF;AACF;;AAED1B,EAAAA,gBAAgB,GAAS;AACvB,QAAM;AAAES,MAAAA;AAAF,QAAiB,KAAKF,KAA5B;;AACA,QAAIE,UAAJ,EAAgB;AACd,WAAKc,QAAL,CAAc;AAAEd,QAAAA,UAAU,EAAE,KAAd;AAAqBD,QAAAA,mBAAmB,EAAE;AAA1C,OAAd;AACD;AACF;;AAEDP,EAAAA,iBAAiB,CAACV,KAAD,EAAsB;AACrC,QAAM;AAAEyD,MAAAA;AAAF,QAAkB,KAAK1D,KAA7B;AAEA,QAAM2D,MAAM,GAAGD,WAAW,CAACzD,KAAD,CAA1B;AACA,SAAKoC,gBAAL,CAAsBsB,MAAtB;AACA,SAAK1B,QAAL,CAAc;AACZZ,MAAAA,UAAU,EAAEpB;AADA,KAAd;AAGD;;AAEDyC,EAAAA,gBAAgB,GAAS;AACvB,QAAM;AAAEgB,MAAAA;AAAF,QAAkB,KAAK1D,KAA7B;AACA,QAAM;AAAEqB,MAAAA;AAAF,QAAiB,KAAKJ,KAA5B;AAEA,QAAM0C,MAAM,GAAGD,WAAW,CAACrC,UAAD,CAA1B;AACA,SAAKgB,gBAAL,CAAsBsB,MAAtB;AACD;;AAEDxD,EAAAA,UAAU,CAACqC,KAAD,EAAmD;AAC3D,QAAM;AAAErB,MAAAA;AAAF,QAAiB,KAAKF,KAA5B;;AACA,QAAIE,UAAJ,EAAgB;AACd,WAAKb,SAAL;AACD,KAFD,MAEO;AACL,WAAKiE,QAAL;AACD;;AACD/B,IAAAA,KAAK,CAACG,eAAN;AACD;;AAED4B,EAAAA,QAAQ,GAAS;AACf,SAAKC,mBAAL;AACA,SAAKzC,aAAL;AACA,SAAKE,QAAL,CAAc;AAAEd,MAAAA,UAAU,EAAE;AAAd,KAAd;AACD;;AAEDb,EAAAA,SAAS,GAA2B;AAAA,QAA1BmE,WAA0B,uEAAZ,IAAY;AAClC,SAAKxC,QAAL,CAAc;AAAEd,MAAAA,UAAU,EAAE;AAAd,KAAd;;AACA,QAAIsD,WAAJ,EAAiB;AAAA;;AACf,oCAAK1D,MAAL,CAAYiB,OAAZ,gFAAqBI,KAArB;AACD;AACF;;AAEDoC,EAAAA,mBAAmB,GAAS;AAC1B,QAAM;AAAEhD,MAAAA,OAAF;AAAWvB,MAAAA;AAAX,QAAqB,KAAKD,KAAhC;;AACA,QAAIC,KAAK,KAAK,IAAd,EAAoB;AAClB;AACD;;AACD,QAAMgE,UAAU,GAAGzC,OAAO,CAAC0C,GAAR,CAAYtC,MAAM,IAAIA,MAAM,CAAC3B,KAA7B,EAAoCkE,OAApC,CAA4ClE,KAA5C,CAAnB;;AACA,QAAIgE,UAAU,GAAG,CAAjB,EAAoB;AAClB,WAAKhC,QAAL,CAAc;AAAEf,QAAAA,mBAAmB,EAAE+C;AAAvB,OAAd;AACD;AACF;;AAEDX,EAAAA,oBAAoB,CAACc,KAAD,EAAsB;AAAA;;AACxC,QAAM5C,OAAO,6BAAG,KAAKV,aAAL,CAAmBkB,OAAtB,2DAAG,uBAA4B+B,aAA5B,CAA0C,aAA1C,CAAhB;;AACA,QAAIvC,OAAO,IAAIA,OAAO,CAAC6C,QAAvB,EAAiC;AAC/B,UAAMP,YAAY,GAAGtC,OAAO,CAAC6C,QAAR,CAAiBC,IAAjB,CAAsBF,KAAtB,CAArB;;AACA,UACEN,YAAY,YAAYE,WAAxB,IACAF,YAAY,CAACY,SAAb,GAAyB5E,gBAAgB,CAAC6E,qBAF5C,EAGE;AACAnD,QAAAA,OAAO,CAACoD,SAAR,GACEd,YAAY,CAACY,SAAb,GAAyB5E,gBAAgB,CAAC6E,qBAD5C;AAED,OAND,MAMO,IACJb,YAAY,YAAYE,WAAxB,IAAuCF,YAAY,CAACY,SAAb,GAAyB,CAAjE,IACAN,KAAK,KAAK,CAFL,EAGL;AACA5C,QAAAA,OAAO,CAACoD,SAAR,GAAoB,CAApB;AACD;AACF;AACF;;AAEDC,EAAAA,iBAAiB,GAAgB;AAC/B,QAAM;AAAEzD,MAAAA;AAAF,QAAiB,KAAKH,KAA5B;AACA,wBACE;AACE,MAAA,SAAS,EAAC,mBADZ;AAEE,MAAA,GAAG,EAAE,KAAKH,aAFZ;AAGE,MAAA,IAAI,EAAC,cAHP;AAIE,MAAA,SAAS,EAAE,KAAKT,iBAJlB;AAKE,MAAA,OAAO,EAAEmC,KAAK,IAAI;AAChBA,QAAAA,KAAK,CAACG,eAAN;AACD,OAPH;AAQE,MAAA,KAAK,EAAE;AAAER,QAAAA,KAAK,EAAEf;AAAT;AART,oBAUE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AAAK,MAAA,SAAS,EAAC;AAAf,OAA6B,KAAK0D,aAAL,EAA7B,CADF,CAVF,CADF;AAgBD;;AAEDA,EAAAA,aAAa,GAAoB;AAC/B,QAAM;AAAEtD,MAAAA,OAAF;AAAWvB,MAAAA,KAAX;AAAkB8E,MAAAA,IAAlB;AAAwBC,MAAAA;AAAxB,QAAuC,KAAKhF,KAAlD;AACA,QAAM;AAAEkB,MAAAA,mBAAF;AAAuBG,MAAAA,UAAvB;AAAmCC,MAAAA;AAAnC,QAAoD,KAAKL,KAA/D;AAEA,QAAIgE,UAAU,GAAG,KAAjB;AACA,QAAMC,WAA0B,GAAG,EAAnC;;AACA,SAAK,IAAId,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAG5C,OAAO,CAACG,MAApC,EAA4CyC,KAAK,IAAI,CAArD,EAAwD;AACtD,UAAMxC,MAAM,GAAGJ,OAAO,CAAC4C,KAAD,CAAtB;AACA,UAAM3B,GAAG,oBAAa2B,KAAb,cAAsBxC,MAAM,CAAC3B,KAA7B,CAAT;AACAgF,MAAAA,UAAU,GAAGA,UAAU,IAAIrD,MAAM,CAAC3B,KAAP,KAAiBA,KAA5C;AACAiF,MAAAA,WAAW,CAACC,IAAZ,eACE;AACE,QAAA,GAAG,EAAE1C,GADP;AAEE,QAAA,IAAI,EAAC,QAFP;AAGE,QAAA,KAAK,EAAE2B,KAHT;AAIE,QAAA,SAAS,EAAE3E,UAAU,CAAC,eAAD,EAAkB;AACrC,6BAAmByB,mBAAmB,KAAKkD,KAAxB,IAAiC,CAAC9C;AADhB,SAAlB,CAJvB;AAOE,QAAA,OAAO,EAAE,KAAKf,iBAPhB;AAQE,QAAA,OAAO,EAAE,KAAKC;AARhB,SAUGoB,MAAM,CAAC3B,KAAP,KAAiBA,KAAjB,iBACC,oBAAC,eAAD;AAAiB,QAAA,IAAI,EAAE8E,IAAvB;AAA6B,QAAA,SAAS,EAAC;AAAvC,QAXJ,EAaGnD,MAAM,CAAC3B,KAAP,KAAiBA,KAAjB,iBAA0B;AAAM,QAAA,SAAS,EAAC;AAAhB,QAb7B,EAcG2B,MAAM,CAACC,KAdV,CADF;AAkBD;;AAEDqD,IAAAA,WAAW,CAACC,IAAZ,eAAiB;AAAI,MAAA,SAAS,EAAC,YAAd;AAA2B,MAAA,GAAG,EAAC;AAA/B,MAAjB;AAEAD,IAAAA,WAAW,CAACC,IAAZ,eACE;AACE,MAAA,GAAG,EAAC,qBADN;AAEE,MAAA,IAAI,EAAC,QAFP;AAGE,MAAA,KAAK,EAAEvF,aAHT;AAIE,MAAA,SAAS,EAAEH,UAAU,CAAC,eAAD,EAAkB;AACrC,2BAAmB6B;AADkB,OAAlB,CAJvB;AAOE,MAAA,OAAO,EAAE,KAAKf,iBAPhB;AAQE,MAAA,OAAO,EAAE,KAAKC;AARhB,OAUG,CAACyE,UAAD,IAAehF,KAAK,KAAK,IAAzB,gBACC,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAE8E,IAAvB;AAA6B,MAAA,SAAS,EAAC;AAAvC,MADD,gBAGC;AAAM,MAAA,SAAS,EAAC;AAAhB,MAbJ,EAeGC,UAfH,CADF;AAoBAE,IAAAA,WAAW,CAACC,IAAZ,eACE;AAAK,MAAA,GAAG,EAAC,qBAAT;AAA+B,MAAA,SAAS,EAAC;AAAzC,oBACE;AAAM,MAAA,SAAS,EAAC;AAAhB,MADF,eAEE,oBAAC,SAAD;AACE,MAAA,GAAG,EAAC,cADN;AAEE,MAAA,GAAG,EAAE,KAAKnE,KAFZ;AAGE,MAAA,QAAQ,EAAE,KAAKL,iBAHjB;AAIE,MAAA,KAAK,EAAEU,UAJT;AAKE,MAAA,OAAO,EAAE,MAAM,KAAKY,QAAL,CAAc;AAAEX,QAAAA,YAAY,EAAE;AAAhB,OAAd,CALjB;AAME,MAAA,MAAM,EAAE,MAAM,KAAKW,QAAL,CAAc;AAAEX,QAAAA,YAAY,EAAE;AAAhB,OAAd;AANhB,MAFF,eAUE;AAAM,MAAA,SAAS,EAAC;AAAhB,MAVF,CADF;AAeA4D,IAAAA,WAAW,CAACC,IAAZ,eAAiB;AAAI,MAAA,GAAG,EAAC,YAAR;AAAqB,MAAA,SAAS,EAAC;AAA/B,MAAjB;AAEA,WAAOD,WAAP;AACD;;AAEDE,EAAAA,MAAM,GAAgB;AACpB,QAAM;AAAEC,MAAAA,QAAF;AAAYC,MAAAA,OAAZ;AAAqBrF,MAAAA;AAArB,QAA+B,KAAKD,KAA1C;AACA,QAAM;AAAEmB,MAAAA;AAAF,QAAiB,KAAKF,KAA5B;AACA,QAAI;AAAEsE,MAAAA;AAAF,QAAoB,KAAKvF,KAA7B;AACAuF,IAAAA,aAAa;AACXC,MAAAA,SAAS,EAAE,YADA;AAEXC,MAAAA,SAAS,EAAE;AACTC,QAAAA,eAAe,EAAE;AAAEC,UAAAA,OAAO,EAAE;AAAX;AADR;AAFA,OAKRJ,aALQ,CAAb;AAQA,wBACE;AACE,MAAA,SAAS,EAAC,uCADZ;AAEE,MAAA,GAAG,EAAE,KAAK3E;AAFZ,oBAIE;AACE,MAAA,SAAS,EAAEnB,UAAU,CAAC,gCAAD,EAAmC;AACtD,+BAAuB6F;AAD+B,OAAnC;AADvB,oBAKE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAE7F,UAAU,CAAC,yBAAD,EAA4B;AAC/C,0BAAkB6F;AAD6B,OAA5B,CAFvB;AAKE,MAAA,GAAG,EAAE,KAAKvE,MALZ;AAME,MAAA,OAAO,EAAE,KAAKZ,UANhB;AAOE,MAAA,QAAQ,EAAEkF;AAPZ,oBASE;AACE,MAAA,SAAS,EAAE5F,UAAU,CAAC;AACpB,sBAAcQ,KAAK,KAAK;AADJ,OAAD;AADvB,OAKG,KAAKsB,eAAL,EALH,CATF,eAgBE,+CACE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAEhC,MAAvB;AAA+B,MAAA,SAAS,EAAC;AAAzC,MADF,CAhBF,eAmBE,oBAAC,YAAD;AACE,MAAA,OAAO,EAAE4B,UADX;AAEE,MAAA,OAAO,EAAE;AAAEyE,QAAAA,WAAW,EAAE,KAAKf,iBAAL;AAAf,OAFX;AAGE,MAAA,aAAa,EAAEU,aAHjB;AAIE,MAAA,eAAe,EAAC,kBAJlB;AAKE,MAAA,YAAY,EAAE,KAAK9E,gBALrB;AAME,MAAA,YAAY,EAAE,KAAKC,gBANrB;AAOE,MAAA,SAAS,EAAE;AAAEmF,QAAAA,QAAQ,EAAE;AAAZ;AAPb,MAnBF,CALF,CAJF,CADF;AA0CD;;AApeD;;gBAHI/F,gB,+BAI+BD,yB;;gBAJ/BC,gB,2BAM2B,G;;gBAN3BA,gB,kBAQkD;AACpDwC,EAAAA,QAAQ,GAAS,CACf;AACD,GAHmD;;AAIpDrC,EAAAA,KAAK,EAAE,IAJ6C;AAKpDoF,EAAAA,QAAQ,EAAE,KAL0C;AAMpDE,EAAAA,aAAa,EAAE,EANqC;AAOpDR,EAAAA,IAAI,EAAEzF,OAP8C;AAQpD0F,EAAAA,UAAU,EAAE,QARwC;AASpDvD,EAAAA,WAAW,EAAE,eATuC;AAUpDvB,EAAAA,WAAW,EAAED,KAAK,IAAKA,KAAK,KAAK,IAAV,GAAiB,CAAjB,GAAqB6F,IAAI,CAACC,KAAL,CAAW9F,KAAK,GAAG,IAAnB,CAVQ;AAWpDyD,EAAAA,WAAW,EAAEsC,IAAI,IAAIA,IAAI,GAAG,IAXwB;AAYpDV,EAAAA,OAAO,EAAE;AAZ2C,C;;AAkexD,eAAexF,gBAAf","sourcesContent":["import React, { Component } from 'react';\nimport { PopperOptions } from 'popper.js';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsCheck, dhSort, IconDefinition } from '@deephaven/icons';\nimport { TimeUtils } from '@deephaven/utils';\nimport classNames from 'classnames';\nimport TimeInput from './TimeInput';\nimport DropdownMenu from './menu-actions/DropdownMenu';\nimport './CustomTimeSelect.scss';\nimport './context-actions/ContextActions.scss';\n\nconst CUSTOM_OPTION = -1;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ntype CustomTimeSelectProps = {\n options: { title: string; value: number }[];\n popperOptions: PopperOptions;\n value: number | null;\n onChange(value: number): void;\n disabled: boolean;\n icon: IconDefinition;\n placeholder: string;\n customText: string;\n // Defaults to converting the value in milliseconds to time in seconds\n valueToTime(val: number | null): number;\n // Defaults to converting the time in seconds to value in milliseconds\n timeToValue(time: number): number;\n invalid: boolean;\n};\n\ntype TimeInSeconds = number;\n\ntype CustomTimeSelectState = {\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n customTime: TimeInSeconds;\n inputFocused: boolean;\n};\n\nclass CustomTimeSelect extends Component<\n CustomTimeSelectProps,\n CustomTimeSelectState\n> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 125;\n\n static defaultProps: Partial<CustomTimeSelectProps> = {\n onChange(): void {\n // no-op\n },\n value: null,\n disabled: false,\n popperOptions: {},\n icon: vsCheck,\n customText: 'Custom',\n placeholder: 'Select a time',\n valueToTime: value => (value === null ? 0 : Math.round(value / 1000)),\n timeToValue: time => time * 1000,\n invalid: false,\n };\n\n constructor(props: CustomTimeSelectProps) {\n super(props);\n\n const { value, valueToTime } = props;\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n this.handleCustomInput = this.handleCustomInput.bind(this);\n\n this.csContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.button = React.createRef();\n this.input = React.createRef();\n\n this.state = {\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n customTime: valueToTime(value),\n inputFocused: false,\n };\n }\n\n csContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n button: React.RefObject<HTMLButtonElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n getSelectedText(): string {\n const { options, value, placeholder } = this.props;\n const { customTime } = this.state;\n\n if (value === null) {\n return placeholder;\n }\n\n for (let i = 0; i < options.length; i += 1) {\n const option = options[i];\n if (option.value === value) {\n return option.title;\n }\n }\n\n return TimeUtils.formatTime(customTime);\n }\n\n setInputWidth(): void {\n if (this.csContainer.current) {\n this.setState({\n inputWidth: this.csContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n focus(): void {\n this.button.current?.focus();\n }\n\n updateInputValue(value: number): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent<HTMLDivElement>): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n\n switch (event.key) {\n case 'Enter':\n case ' ': // Space Bar\n if (inputFocused) {\n this.updateFromCustom();\n } else {\n this.updateInputValue(options[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.button.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Tab':\n if (event.shiftKey) {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n } else {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n }\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n const menuOptionsLength = options.length;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n switch (direction) {\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP:\n if (!inputFocused && keyboardOptionIndex === 0) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (keyboardOptionIndex > 0 && !inputFocused) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = menuOptionsLength - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN:\n if (!inputFocused && keyboardOptionIndex === menuOptionsLength - 1) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (\n keyboardOptionIndex < menuOptionsLength &&\n !(inputFocused && keyboardOptionIndex === 0)\n ) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n default:\n break;\n }\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { options, timeToValue } = this.props;\n const { customTime } = this.state;\n\n if (optionIndex === CUSTOM_OPTION) {\n const update = timeToValue(customTime);\n this.updateAndClose(update);\n } else {\n this.updateAndClose(options[optionIndex].value);\n }\n }\n\n updateAndClose(update: number): void {\n this.updateInputValue(update);\n this.closeMenu();\n this.button.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleMenuOpened(): void {\n const { options, value } = this.props;\n const { keyboardOptionIndex } = this.state;\n this.scrollOptionIntoView(keyboardOptionIndex);\n const activeOption = this.menuContainer.current?.querySelector(\n '.cs-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.focus();\n }\n\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex < 0) {\n // The custom option should be selected\n this.focusInput();\n }\n }\n\n focusInput(): void {\n this.input.current?.focus();\n }\n\n focusOption(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children) {\n const option = options.children.item(index);\n if (option instanceof HTMLElement) {\n option.focus();\n }\n }\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n handleCustomInput(value: number): void {\n const { timeToValue } = this.props;\n\n const update = timeToValue(value);\n this.updateInputValue(update);\n this.setState({\n customTime: value,\n });\n }\n\n updateFromCustom(): void {\n const { timeToValue } = this.props;\n const { customTime } = this.state;\n\n const update = timeToValue(customTime);\n this.updateInputValue(update);\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n }\n\n closeMenu(focusButton = true): void {\n this.setState({ menuIsOpen: false });\n if (focusButton) {\n this.button.current?.focus();\n }\n }\n\n updateKeyboardIndex(): void {\n const { options, value } = this.props;\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex > 0) {\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n }\n\n scrollOptionIntoView(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children) {\n const activeOption = options.children.item(index);\n if (\n activeOption instanceof HTMLElement &&\n activeOption.offsetTop > CustomTimeSelect.DROP_DOWN_MENU_HEIGHT\n ) {\n options.scrollTop =\n activeOption.offsetTop - CustomTimeSelect.DROP_DOWN_MENU_HEIGHT;\n } else if (\n (activeOption instanceof HTMLElement && activeOption.offsetTop < 0) ||\n index === 0\n ) {\n options.scrollTop = 0;\n }\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className=\"cs-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n >\n <div className=\"cs-options-container\">\n <div className=\"cs-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options, value, icon, customText } = this.props;\n const { keyboardOptionIndex, customTime, inputFocused } = this.state;\n\n let matchFound = false;\n const optionArray: JSX.Element[] = [];\n for (let index = 0; index < options.length; index += 1) {\n const option = options[index];\n const key = `option-${index}-${option.value}`;\n matchFound = matchFound || option.value === value;\n optionArray.push(\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cs-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index && !inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.value === value && (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n )}\n {option.value !== value && <span className=\"mr-4\" />}\n {option.title}\n </button>\n );\n }\n\n optionArray.push(<hr className=\"cs-divider\" key=\"option-divider\" />);\n\n optionArray.push(\n <button\n key=\"option-custom-label\"\n type=\"button\"\n value={CUSTOM_OPTION}\n className={classNames('cs-option-btn', {\n 'keyboard-active': inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {!matchFound && value !== null ? (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n ) : (\n <span className=\"mr-4\" />\n )}\n {customText}\n </button>\n );\n\n optionArray.push(\n <div key=\"cs-custom-container\" className=\"cs-custom-container\">\n <span className=\"mr-2\" />\n <TimeInput\n key=\"option-input\"\n ref={this.input}\n onChange={this.handleCustomInput}\n value={customTime}\n onFocus={() => this.setState({ inputFocused: true })}\n onBlur={() => this.setState({ inputFocused: false })}\n />\n <span className=\"ml-2\" />\n </div>\n );\n\n optionArray.push(<hr key=\"option-end\" className=\"mb-2\" />);\n\n return optionArray;\n }\n\n render(): JSX.Element {\n const { disabled, invalid, value } = this.props;\n const { menuIsOpen } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div\n className=\"input-group cs-container context-menu\"\n ref={this.csContainer}\n >\n <div\n className={classNames('input-group-append cs-dropdown', {\n 'cs-dropdown-invalid': invalid,\n })}\n >\n <button\n type=\"button\"\n className={classNames('btn cs-btn form-control', {\n 'cs-btn-invalid': invalid,\n })}\n ref={this.button}\n onClick={this.toggleMenu}\n disabled={disabled}\n >\n <span\n className={classNames({\n 'text-muted': value === null,\n })}\n >\n {this.getSelectedText()}\n </span>\n <span>\n <FontAwesomeIcon icon={dhSort} className=\"cs-caret\" />\n </span>\n <DropdownMenu\n isShown={menuIsOpen}\n actions={{ menuElement: this.renderMenuElement() }}\n popperOptions={popperOptions}\n popperClassName=\"CustomTimeSelect\"\n onMenuOpened={this.handleMenuOpened}\n onMenuClosed={this.handleMenuExited}\n menuStyle={{ maxWidth: '100rem' }}\n />\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomTimeSelect;\n"],"file":"CustomTimeSelect.js"}
|
|
1
|
+
{"version":3,"sources":["../src/CustomTimeSelect.tsx"],"names":["React","Component","FontAwesomeIcon","vsCheck","dhSort","TimeUtils","classNames","TimeInput","DropdownMenu","CUSTOM_OPTION","MENU_NAVIGATION_DIRECTION","CustomTimeSelect","constructor","props","value","valueToTime","toggleMenu","bind","handleMenuKeyDown","closeMenu","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","handleCustomInput","csContainer","createRef","menuContainer","button","input","state","keyboardOptionIndex","menuIsOpen","inputWidth","customTime","inputFocused","getSelectedText","options","placeholder","i","length","option","title","formatTime","setInputWidth","current","setState","getBoundingClientRect","width","focus","updateInputValue","onChange","handleResize","event","key","updateFromCustom","stopPropagation","preventDefault","shiftKey","handleMenuNavigation","UP","DOWN","direction","menuOptionsLength","newKeyboardOptionIndex","focusInput","focusOption","scrollOptionIntoView","optionIndex","Number","currentTarget","timeToValue","update","updateAndClose","target","activeOption","querySelector","HTMLElement","valueIndex","map","indexOf","index","children","item","openMenu","updateKeyboardIndex","focusButton","offsetTop","DROP_DOWN_MENU_HEIGHT","scrollTop","renderMenuElement","renderOptions","icon","customText","matchFound","optionArray","push","render","disabled","invalid","dataTestId","popperOptions","placement","modifiers","preventOverflow","enabled","menuElement","maxWidth","Math","round","time","undefined"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport { PopperOptions } from 'popper.js';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsCheck, dhSort, IconDefinition } from '@deephaven/icons';\nimport { TimeUtils } from '@deephaven/utils';\nimport classNames from 'classnames';\nimport TimeInput from './TimeInput';\nimport DropdownMenu from './menu-actions/DropdownMenu';\nimport './CustomTimeSelect.scss';\nimport './context-actions/ContextActions.scss';\n\nconst CUSTOM_OPTION = -1;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ntype CustomTimeSelectProps = {\n options: { title: string; value: number }[];\n popperOptions: PopperOptions;\n value: number | null;\n onChange(value: number): void;\n disabled: boolean;\n icon: IconDefinition;\n placeholder: string;\n customText: string;\n // Defaults to converting the value in milliseconds to time in seconds\n valueToTime(val: number | null): number;\n // Defaults to converting the time in seconds to value in milliseconds\n timeToValue(time: number): number;\n invalid: boolean;\n 'data-testid'?: string;\n};\n\ntype TimeInSeconds = number;\n\ntype CustomTimeSelectState = {\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n customTime: TimeInSeconds;\n inputFocused: boolean;\n};\n\nclass CustomTimeSelect extends Component<\n CustomTimeSelectProps,\n CustomTimeSelectState\n> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 125;\n\n static defaultProps: Partial<CustomTimeSelectProps> = {\n onChange(): void {\n // no-op\n },\n value: null,\n disabled: false,\n popperOptions: {},\n icon: vsCheck,\n customText: 'Custom',\n placeholder: 'Select a time',\n valueToTime: value => (value === null ? 0 : Math.round(value / 1000)),\n timeToValue: time => time * 1000,\n invalid: false,\n 'data-testid': undefined,\n };\n\n constructor(props: CustomTimeSelectProps) {\n super(props);\n\n const { value, valueToTime } = props;\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n this.handleCustomInput = this.handleCustomInput.bind(this);\n\n this.csContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.button = React.createRef();\n this.input = React.createRef();\n\n this.state = {\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n customTime: valueToTime(value),\n inputFocused: false,\n };\n }\n\n csContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n button: React.RefObject<HTMLButtonElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n getSelectedText(): string {\n const { options, value, placeholder } = this.props;\n const { customTime } = this.state;\n\n if (value === null) {\n return placeholder;\n }\n\n for (let i = 0; i < options.length; i += 1) {\n const option = options[i];\n if (option.value === value) {\n return option.title;\n }\n }\n\n return TimeUtils.formatTime(customTime);\n }\n\n setInputWidth(): void {\n if (this.csContainer.current) {\n this.setState({\n inputWidth: this.csContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n focus(): void {\n this.button.current?.focus();\n }\n\n updateInputValue(value: number): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent<HTMLDivElement>): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n\n switch (event.key) {\n case 'Enter':\n case ' ': // Space Bar\n if (inputFocused) {\n this.updateFromCustom();\n } else {\n this.updateInputValue(options[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.button.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Tab':\n if (event.shiftKey) {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n } else {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n }\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n const menuOptionsLength = options.length;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n switch (direction) {\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP:\n if (!inputFocused && keyboardOptionIndex === 0) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (keyboardOptionIndex > 0 && !inputFocused) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = menuOptionsLength - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN:\n if (!inputFocused && keyboardOptionIndex === menuOptionsLength - 1) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (\n keyboardOptionIndex < menuOptionsLength &&\n !(inputFocused && keyboardOptionIndex === 0)\n ) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n default:\n break;\n }\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { options, timeToValue } = this.props;\n const { customTime } = this.state;\n\n if (optionIndex === CUSTOM_OPTION) {\n const update = timeToValue(customTime);\n this.updateAndClose(update);\n } else {\n this.updateAndClose(options[optionIndex].value);\n }\n }\n\n updateAndClose(update: number): void {\n this.updateInputValue(update);\n this.closeMenu();\n this.button.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleMenuOpened(): void {\n const { options, value } = this.props;\n const { keyboardOptionIndex } = this.state;\n this.scrollOptionIntoView(keyboardOptionIndex);\n const activeOption = this.menuContainer.current?.querySelector(\n '.cs-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.focus();\n }\n\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex < 0) {\n // The custom option should be selected\n this.focusInput();\n }\n }\n\n focusInput(): void {\n this.input.current?.focus();\n }\n\n focusOption(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children) {\n const option = options.children.item(index);\n if (option instanceof HTMLElement) {\n option.focus();\n }\n }\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n handleCustomInput(value: number): void {\n const { timeToValue } = this.props;\n\n const update = timeToValue(value);\n this.updateInputValue(update);\n this.setState({\n customTime: value,\n });\n }\n\n updateFromCustom(): void {\n const { timeToValue } = this.props;\n const { customTime } = this.state;\n\n const update = timeToValue(customTime);\n this.updateInputValue(update);\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n }\n\n closeMenu(focusButton = true): void {\n this.setState({ menuIsOpen: false });\n if (focusButton) {\n this.button.current?.focus();\n }\n }\n\n updateKeyboardIndex(): void {\n const { options, value } = this.props;\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex > 0) {\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n }\n\n scrollOptionIntoView(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children) {\n const activeOption = options.children.item(index);\n if (\n activeOption instanceof HTMLElement &&\n activeOption.offsetTop > CustomTimeSelect.DROP_DOWN_MENU_HEIGHT\n ) {\n options.scrollTop =\n activeOption.offsetTop - CustomTimeSelect.DROP_DOWN_MENU_HEIGHT;\n } else if (\n (activeOption instanceof HTMLElement && activeOption.offsetTop < 0) ||\n index === 0\n ) {\n options.scrollTop = 0;\n }\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className=\"cs-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n >\n <div className=\"cs-options-container\">\n <div className=\"cs-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options, value, icon, customText } = this.props;\n const { keyboardOptionIndex, customTime, inputFocused } = this.state;\n\n let matchFound = false;\n const optionArray: JSX.Element[] = [];\n for (let index = 0; index < options.length; index += 1) {\n const option = options[index];\n const key = `option-${index}-${option.value}`;\n matchFound = matchFound || option.value === value;\n optionArray.push(\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cs-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index && !inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.value === value && (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n )}\n {option.value !== value && <span className=\"mr-4\" />}\n {option.title}\n </button>\n );\n }\n\n optionArray.push(<hr className=\"cs-divider\" key=\"option-divider\" />);\n\n optionArray.push(\n <button\n key=\"option-custom-label\"\n type=\"button\"\n value={CUSTOM_OPTION}\n className={classNames('cs-option-btn', {\n 'keyboard-active': inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {!matchFound && value !== null ? (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n ) : (\n <span className=\"mr-4\" />\n )}\n {customText}\n </button>\n );\n\n optionArray.push(\n <div key=\"cs-custom-container\" className=\"cs-custom-container\">\n <span className=\"mr-2\" />\n <TimeInput\n key=\"option-input\"\n ref={this.input}\n onChange={this.handleCustomInput}\n value={customTime}\n onFocus={() => this.setState({ inputFocused: true })}\n onBlur={() => this.setState({ inputFocused: false })}\n />\n <span className=\"ml-2\" />\n </div>\n );\n\n optionArray.push(<hr key=\"option-end\" className=\"mb-2\" />);\n\n return optionArray;\n }\n\n render(): JSX.Element {\n const { disabled, invalid, value, 'data-testid': dataTestId } = this.props;\n const { menuIsOpen } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div\n className=\"input-group cs-container context-menu\"\n ref={this.csContainer}\n data-testid={dataTestId}\n >\n <div\n className={classNames('input-group-append cs-dropdown', {\n 'cs-dropdown-invalid': invalid,\n })}\n >\n <button\n type=\"button\"\n className={classNames('btn cs-btn form-control', {\n 'cs-btn-invalid': invalid,\n })}\n ref={this.button}\n onClick={this.toggleMenu}\n disabled={disabled}\n >\n <span\n className={classNames({\n 'text-muted': value === null,\n })}\n >\n {this.getSelectedText()}\n </span>\n <span>\n <FontAwesomeIcon icon={dhSort} className=\"cs-caret\" />\n </span>\n <DropdownMenu\n isShown={menuIsOpen}\n actions={{ menuElement: this.renderMenuElement() }}\n popperOptions={popperOptions}\n popperClassName=\"CustomTimeSelect\"\n onMenuOpened={this.handleMenuOpened}\n onMenuClosed={this.handleMenuExited}\n menuStyle={{ maxWidth: '100rem' }}\n />\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomTimeSelect;\n"],"file":"CustomTimeSelect.js"}
|
|
@@ -8,6 +8,7 @@ interface DebouncedSearchInputProps {
|
|
|
8
8
|
matchCount: number;
|
|
9
9
|
debounceMs: number;
|
|
10
10
|
id: string;
|
|
11
|
+
'data-testid'?: string;
|
|
11
12
|
}
|
|
12
13
|
interface DebouncedSearchInputState {
|
|
13
14
|
value: string;
|
|
@@ -19,6 +20,7 @@ declare class DebouncedSearchInput extends PureComponent<DebouncedSearchInputPro
|
|
|
19
20
|
matchCount: null;
|
|
20
21
|
debounceMs: number;
|
|
21
22
|
id: string;
|
|
23
|
+
'data-testid': undefined;
|
|
22
24
|
};
|
|
23
25
|
constructor(props: DebouncedSearchInputProps);
|
|
24
26
|
componentDidUpdate(prevProps: DebouncedSearchInputProps): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DebouncedSearchInput.d.ts","sourceRoot":"","sources":["../src/DebouncedSearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,UAAU,yBAAyB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"DebouncedSearchInput.d.ts","sourceRoot":"","sources":["../src/DebouncedSearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,UAAU,yBAAyB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,yBAAyB;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,cAAM,oBAAqB,SAAQ,aAAa,CAC9C,yBAAyB,EACzB,yBAAyB,CAC1B;IACC,MAAM,CAAC,YAAY;;;;;;;MAOjB;gBAEU,KAAK,EAAE,yBAAyB;IAW5C,kBAAkB,CAAC,SAAS,EAAE,yBAAyB,GAAG,IAAI;IAQ9D,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAE1C,KAAK,IAAI,IAAI;IAIb,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAI9D,UAAU,IAAI,IAAI;IAMlB,MAAM,IAAI,GAAG,CAAC,OAAO;CAsBtB;AAED,eAAe,oBAAoB,CAAC"}
|
|
@@ -58,7 +58,8 @@ class DebouncedSearchInput extends PureComponent {
|
|
|
58
58
|
placeholder,
|
|
59
59
|
className,
|
|
60
60
|
matchCount,
|
|
61
|
-
id
|
|
61
|
+
id,
|
|
62
|
+
'data-testid': dataTestId
|
|
62
63
|
} = this.props;
|
|
63
64
|
var {
|
|
64
65
|
value
|
|
@@ -70,7 +71,8 @@ class DebouncedSearchInput extends PureComponent {
|
|
|
70
71
|
className: className,
|
|
71
72
|
matchCount: matchCount,
|
|
72
73
|
ref: this.searchInput,
|
|
73
|
-
id: id
|
|
74
|
+
id: id,
|
|
75
|
+
"data-testid": dataTestId
|
|
74
76
|
});
|
|
75
77
|
}
|
|
76
78
|
|
|
@@ -81,7 +83,8 @@ _defineProperty(DebouncedSearchInput, "defaultProps", {
|
|
|
81
83
|
className: '',
|
|
82
84
|
matchCount: null,
|
|
83
85
|
debounceMs: 250,
|
|
84
|
-
id: ''
|
|
86
|
+
id: '',
|
|
87
|
+
'data-testid': undefined
|
|
85
88
|
});
|
|
86
89
|
|
|
87
90
|
export default DebouncedSearchInput;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/DebouncedSearchInput.tsx"],"names":["React","PureComponent","debounce","SearchInput","DebouncedSearchInput","constructor","props","searchInput","createRef","handleChange","bind","sendUpdate","debounceMs","state","value","componentDidUpdate","prevProps","setState","focus","current","event","target","onChange","render","placeholder","className","matchCount","id"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,OAAOC,QAAP,MAAqB,iBAArB;OACOC,W;;
|
|
1
|
+
{"version":3,"sources":["../src/DebouncedSearchInput.tsx"],"names":["React","PureComponent","debounce","SearchInput","DebouncedSearchInput","constructor","props","searchInput","createRef","handleChange","bind","sendUpdate","debounceMs","state","value","componentDidUpdate","prevProps","setState","focus","current","event","target","onChange","render","placeholder","className","matchCount","id","dataTestId","undefined"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,OAAOC,QAAP,MAAqB,iBAArB;OACOC,W;;AAiBP,MAAMC,oBAAN,SAAmCH,aAAnC,CAGE;AAUAI,EAAAA,WAAW,CAACC,KAAD,EAAmC;AAC5C,UAAMA,KAAN;;AAD4C;;AAE5C,SAAKC,WAAL,gBAAmBP,KAAK,CAACQ,SAAN,EAAnB;AACA,SAAKC,YAAL,GAAoB,KAAKA,YAAL,CAAkBC,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKC,UAAL,GAAkBT,QAAQ,CAAC,KAAKS,UAAL,CAAgBD,IAAhB,CAAqB,IAArB,CAAD,EAA6BJ,KAAK,CAACM,UAAnC,CAA1B;AAEA,SAAKC,KAAL,GAAa;AACXC,MAAAA,KAAK,EAAER,KAAK,CAACQ;AADF,KAAb;AAGD;;AAEDC,EAAAA,kBAAkB,CAACC,SAAD,EAA6C;AAC7D,QAAM;AAAEF,MAAAA;AAAF,QAAY,KAAKR,KAAvB;;AACA,QAAIU,SAAS,CAACF,KAAV,KAAoBA,KAAxB,EAA+B;AAC7B;AACA,WAAKG,QAAL,CAAc;AAAEH,QAAAA;AAAF,OAAd;AACD;AACF;;AAIDI,EAAAA,KAAK,GAAS;AAAA;;AACZ,kCAAKX,WAAL,CAAiBY,OAAjB,gFAA0BD,KAA1B;AACD;;AAEDT,EAAAA,YAAY,CAACW,KAAD,EAAmD;AAC7D,SAAKH,QAAL,CAAc;AAAEH,MAAAA,KAAK,EAAEM,KAAK,CAACC,MAAN,CAAaP;AAAtB,KAAd,EAA6C,KAAKH,UAAlD;AACD;;AAEDA,EAAAA,UAAU,GAAS;AACjB,QAAM;AAAEW,MAAAA;AAAF,QAAe,KAAKhB,KAA1B;AACA,QAAM;AAAEQ,MAAAA;AAAF,QAAY,KAAKD,KAAvB;AACAS,IAAAA,QAAQ,CAACR,KAAD,CAAR;AACD;;AAEDS,EAAAA,MAAM,GAAgB;AACpB,QAAM;AACJC,MAAAA,WADI;AAEJC,MAAAA,SAFI;AAGJC,MAAAA,UAHI;AAIJC,MAAAA,EAJI;AAKJ,qBAAeC;AALX,QAMF,KAAKtB,KANT;AAOA,QAAM;AAAEQ,MAAAA;AAAF,QAAY,KAAKD,KAAvB;AACA,wBACE,oBAAC,WAAD;AACE,MAAA,KAAK,EAAEC,KADT;AAEE,MAAA,WAAW,EAAEU,WAFf;AAGE,MAAA,QAAQ,EAAE,KAAKf,YAHjB;AAIE,MAAA,SAAS,EAAEgB,SAJb;AAKE,MAAA,UAAU,EAAEC,UALd;AAME,MAAA,GAAG,EAAE,KAAKnB,WANZ;AAOE,MAAA,EAAE,EAAEoB,EAPN;AAQE,qBAAaC;AARf,MADF;AAYD;;AAlED;;gBAHIxB,oB,kBAIkB;AACpBoB,EAAAA,WAAW,EAAE,QADO;AAEpBC,EAAAA,SAAS,EAAE,EAFS;AAGpBC,EAAAA,UAAU,EAAE,IAHQ;AAIpBd,EAAAA,UAAU,EAAE,GAJQ;AAKpBe,EAAAA,EAAE,EAAE,EALgB;AAMpB,iBAAeE;AANK,C;;AAoExB,eAAezB,oBAAf","sourcesContent":["import React, { PureComponent } from 'react';\nimport debounce from 'lodash.debounce';\nimport SearchInput from './SearchInput';\n\ninterface DebouncedSearchInputProps {\n value: string;\n placeholder: string;\n onChange(value: string): void;\n className: string;\n matchCount: number;\n debounceMs: number;\n id: string;\n 'data-testid'?: string;\n}\n\ninterface DebouncedSearchInputState {\n value: string;\n}\n\nclass DebouncedSearchInput extends PureComponent<\n DebouncedSearchInputProps,\n DebouncedSearchInputState\n> {\n static defaultProps = {\n placeholder: 'Search',\n className: '',\n matchCount: null,\n debounceMs: 250,\n id: '',\n 'data-testid': undefined,\n };\n\n constructor(props: DebouncedSearchInputProps) {\n super(props);\n this.searchInput = React.createRef();\n this.handleChange = this.handleChange.bind(this);\n this.sendUpdate = debounce(this.sendUpdate.bind(this), props.debounceMs);\n\n this.state = {\n value: props.value,\n };\n }\n\n componentDidUpdate(prevProps: DebouncedSearchInputProps): void {\n const { value } = this.props;\n if (prevProps.value !== value) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ value });\n }\n }\n\n searchInput: React.RefObject<SearchInput>;\n\n focus(): void {\n this.searchInput.current?.focus();\n }\n\n handleChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ value: event.target.value }, this.sendUpdate);\n }\n\n sendUpdate(): void {\n const { onChange } = this.props;\n const { value } = this.state;\n onChange(value);\n }\n\n render(): JSX.Element {\n const {\n placeholder,\n className,\n matchCount,\n id,\n 'data-testid': dataTestId,\n } = this.props;\n const { value } = this.state;\n return (\n <SearchInput\n value={value}\n placeholder={placeholder}\n onChange={this.handleChange}\n className={className}\n matchCount={matchCount}\n ref={this.searchInput}\n id={id}\n data-testid={dataTestId}\n />\n );\n }\n}\n\nexport default DebouncedSearchInput;\n"],"file":"DebouncedSearchInput.js"}
|
|
@@ -3,12 +3,13 @@ import './DeephavenSpinner.scss';
|
|
|
3
3
|
interface DeephavenSpinnerProps {
|
|
4
4
|
className?: string;
|
|
5
5
|
show?: boolean;
|
|
6
|
+
'data-testid'?: string;
|
|
6
7
|
}
|
|
7
8
|
/**
|
|
8
9
|
* Break apart a generated svg into indivdual svg layers, to allow each to be animated on the GPU
|
|
9
10
|
* CSS animations that reach into the svg are blocking since SVG aren't drawn by the gpu, only animations
|
|
10
11
|
* that are performed on the whole svg remain hardware accelerated.
|
|
11
12
|
*/
|
|
12
|
-
declare const DeephavenSpinner: ({ className, show, }: DeephavenSpinnerProps) => JSX.Element;
|
|
13
|
+
declare const DeephavenSpinner: ({ className, show, "data-testid": dataTestId, }: DeephavenSpinnerProps) => JSX.Element;
|
|
13
14
|
export default DeephavenSpinner;
|
|
14
15
|
//# sourceMappingURL=DeephavenSpinner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeephavenSpinner.d.ts","sourceRoot":"","sources":["../src/DeephavenSpinner.tsx"],"names":[],"mappings":";AACA,OAAO,yBAAyB,CAAC;AAGjC,UAAU,qBAAqB;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DeephavenSpinner.d.ts","sourceRoot":"","sources":["../src/DeephavenSpinner.tsx"],"names":[],"mappings":";AACA,OAAO,yBAAyB,CAAC;AAGjC,UAAU,qBAAqB;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,QAAA,MAAM,gBAAgB,oDAInB,qBAAqB,KAAG,WAsF1B,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
package/dist/DeephavenSpinner.js
CHANGED
|
@@ -10,12 +10,14 @@ import classNames from 'classnames';
|
|
|
10
10
|
var DeephavenSpinner = _ref => {
|
|
11
11
|
var {
|
|
12
12
|
className = '',
|
|
13
|
-
show = true
|
|
13
|
+
show = true,
|
|
14
|
+
'data-testid': dataTestId
|
|
14
15
|
} = _ref;
|
|
15
16
|
return /*#__PURE__*/React.createElement("div", {
|
|
16
17
|
className: classNames('dh-loader', className, {
|
|
17
18
|
show
|
|
18
|
-
})
|
|
19
|
+
}),
|
|
20
|
+
"data-testid": dataTestId
|
|
19
21
|
}, /*#__PURE__*/React.createElement("svg", {
|
|
20
22
|
className: "dh-outer-shape",
|
|
21
23
|
viewBox: "0 0 182 182"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/DeephavenSpinner.tsx"],"names":["React","classNames","DeephavenSpinner","className","show"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAEA,OAAOC,UAAP,MAAuB,YAAvB;;
|
|
1
|
+
{"version":3,"sources":["../src/DeephavenSpinner.tsx"],"names":["React","classNames","DeephavenSpinner","className","show","dataTestId"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAEA,OAAOC,UAAP,MAAuB,YAAvB;;AAQA;AACA;AACA;AACA;AACA;AACA,IAAMC,gBAAgB,GAAG;AAAA,MAAC;AACxBC,IAAAA,SAAS,GAAG,EADY;AAExBC,IAAAA,IAAI,GAAG,IAFiB;AAGxB,mBAAeC;AAHS,GAAD;AAAA,sBAKvB;AACE,IAAA,SAAS,EAAEJ,UAAU,CAAC,WAAD,EAAcE,SAAd,EAAyB;AAAEC,MAAAA;AAAF,KAAzB,CADvB;AAEE,mBAAaC;AAFf,kBAIE;AAAK,IAAA,SAAS,EAAC,gBAAf;AAAgC,IAAA,OAAO,EAAC;AAAxC,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AACE,IAAA,CAAC,EAAC,wsBADJ;AAEE,IAAA,IAAI,EAAC;AAFP,IADF,CADF,CAJF,eAYE;AAAK,IAAA,SAAS,EAAC,iCAAf;AAAiD,IAAA,OAAO,EAAC;AAAzD,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AACE,IAAA,KAAK,EAAC,SADR;AAEE,IAAA,MAAM,EAAC,SAFT;AAGE,IAAA,IAAI,EAAC,SAHP;AAIE,IAAA,SAAS,EAAC;AAJZ,IADF,CADF,CADF,CAZF,eAwBE;AAAK,IAAA,SAAS,EAAC,iCAAf;AAAiD,IAAA,OAAO,EAAC;AAAzD,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AACE,IAAA,KAAK,EAAC,SADR;AAEE,IAAA,MAAM,EAAC,SAFT;AAGE,IAAA,IAAI,EAAC,SAHP;AAIE,IAAA,SAAS,EAAC;AAJZ,IADF,CADF,CADF,CAxBF,eAoCE;AAAK,IAAA,SAAS,EAAC,iCAAf;AAAiD,IAAA,OAAO,EAAC;AAAzD,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AACE,IAAA,KAAK,EAAC,SADR;AAEE,IAAA,MAAM,EAAC,SAFT;AAGE,IAAA,IAAI,EAAC,SAHP;AAIE,IAAA,SAAS,EAAC;AAJZ,IADF,CADF,CADF,CApCF,eAgDE;AAAK,IAAA,SAAS,EAAC,iCAAf;AAAiD,IAAA,OAAO,EAAC;AAAzD,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AACE,IAAA,KAAK,EAAC,SADR;AAEE,IAAA,MAAM,EAAC,SAFT;AAGE,IAAA,IAAI,EAAC,SAHP;AAIE,IAAA,SAAS,EAAC;AAJZ,IADF,CADF,CADF,CAhDF,eA4DE;AAAK,IAAA,SAAS,EAAC,iCAAf;AAAiD,IAAA,OAAO,EAAC;AAAzD,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AACE,IAAA,KAAK,EAAC,SADR;AAEE,IAAA,MAAM,EAAC,SAFT;AAGE,IAAA,IAAI,EAAC,SAHP;AAIE,IAAA,SAAS,EAAC;AAJZ,IADF,CADF,CADF,CA5DF,eAwEE;AAAK,IAAA,SAAS,EAAC,iCAAf;AAAiD,IAAA,OAAO,EAAC;AAAzD,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AACE,IAAA,KAAK,EAAC,SADR;AAEE,IAAA,MAAM,EAAC,SAFT;AAGE,IAAA,IAAI,EAAC,SAHP;AAIE,IAAA,SAAS,EAAC;AAJZ,IADF,CADF,CADF,CAxEF,CALuB;AAAA,CAAzB;;AA4FA,eAAeH,gBAAf","sourcesContent":["import React from 'react';\nimport './DeephavenSpinner.scss';\nimport classNames from 'classnames';\n\ninterface DeephavenSpinnerProps {\n className?: string;\n show?: boolean;\n 'data-testid'?: string;\n}\n\n/**\n * Break apart a generated svg into indivdual svg layers, to allow each to be animated on the GPU\n * CSS animations that reach into the svg are blocking since SVG aren't drawn by the gpu, only animations\n * that are performed on the whole svg remain hardware accelerated.\n */\nconst DeephavenSpinner = ({\n className = '',\n show = true,\n 'data-testid': dataTestId,\n}: DeephavenSpinnerProps): JSX.Element => (\n <div\n className={classNames('dh-loader', className, { show })}\n data-testid={dataTestId}\n >\n <svg className=\"dh-outer-shape\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <path\n d=\"M82.7429,0L82.7429,41.3714L45.2571,41.3714L45.2571,0L0,0L0,128L45.2571,128L45.2571,86.6286L82.5143,86.6286L82.5143,128L128,128L128,0L82.7429,0ZM41.3714,124.114L4.11429,124.114L4.11429,86.6286L41.3714,86.6286L41.3714,124.114ZM41.3714,82.7429L4.11429,82.7429L4.11429,45.2571L41.3714,45.2571L41.3714,82.7429ZM41.3714,41.3714L4.11429,41.3714L4.11429,4.11429L41.3714,4.11429L41.3714,41.3714ZM45.2571,82.7429L45.2571,45.2571L82.5143,45.2571L82.5143,82.5143L45.2571,82.5143ZM124.114,124.114L86.6286,124.114L86.6286,86.6286L123.886,86.6286L123.886,124.114ZM124.114,82.7429L86.6286,82.7429L86.6286,45.2571L123.886,45.2571L123.886,82.7429ZM86.6286,41.3714L86.6286,4.11429L123.886,4.11429L123.886,41.3714L86.6286,41.3714Z\"\n fill=\"#f0f0ee\"\n />\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-3\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.3438\"\n height=\"37.6389\"\n fill=\"#5189e5\"\n transform=\"translate(-21.9838,29.7957) translate(21.9838,15.3027)\"\n />\n </g>\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-2\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.2755\"\n height=\"37.4675\"\n fill=\"#5189e5\"\n transform=\"translate(-21.9838,69.7957) translate(22.0822,16.7783)\"\n />\n </g>\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-5\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.3512\"\n height=\"41.3781\"\n fill=\"#35618c\"\n transform=\"translate(18.0162,72.7957) translate(23.1643,13.7278)\"\n />\n </g>\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-6\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.2483\"\n height=\"37.5869\"\n fill=\"#35618c\"\n transform=\"translate(59.0162,29.7957) translate(23.6379,15.3564)\"\n />\n </g>\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-7\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.5664\"\n height=\"41.2747\"\n fill=\"#35618c\"\n transform=\"translate(17.0162,-13.2043) translate(24.2531,13.2043)\"\n />\n </g>\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-4\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.2854\"\n height=\"37.3014\"\n fill=\"#5189e5\"\n transform=\"translate(-21.9838,-13.2043) translate(22.0822,17.1792)\"\n />\n </g>\n </g>\n </svg>\n </div>\n);\n\nexport default DeephavenSpinner;\n"],"file":"DeephavenSpinner.js"}
|
|
@@ -18,6 +18,7 @@ declare type DraggableItemListProps<T> = Omit<ItemListProps<T>, 'overscanCount'
|
|
|
18
18
|
style: React.CSSProperties;
|
|
19
19
|
draggablePrefix: string;
|
|
20
20
|
droppableId: string;
|
|
21
|
+
'data-testid'?: string;
|
|
21
22
|
};
|
|
22
23
|
declare type DraggableItemListState = {
|
|
23
24
|
selectedCount: number;
|
|
@@ -53,6 +54,7 @@ declare class DraggableItemList<T> extends PureComponent<DraggableItemListProps<
|
|
|
53
54
|
selectedRanges: never[];
|
|
54
55
|
draggablePrefix: string;
|
|
55
56
|
droppableId: string;
|
|
57
|
+
'data-testid': undefined;
|
|
56
58
|
};
|
|
57
59
|
static renderHandle(): JSX.Element;
|
|
58
60
|
static renderBadge({ text }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DraggableItemList.d.ts","sourceRoot":"","sources":["../src/DraggableItemList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,OAAO,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAwB,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAGhF,OAAO,EAAc,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,QAAQ,EAAE,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,OAAO,0BAA0B,CAAC;AAElC,oBAAY,wBAAwB,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,aAAK,qBAAqB,CAAC,CAAC,IAAI,CAC9B,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAC/B,KAAK,CAAC,SAAS,CAAC;AAErB,aAAK,sBAAsB,CAAC,CAAC,IAAI,IAAI,CACnC,aAAa,CAAC,CAAC,CAAC,EAChB,eAAe,GAAG,eAAe,GAAG,cAAc,CACnD,GAAG;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,OAAO,CAAC;IAExB,cAAc,EAAE,OAAO,CAAC;IAExB,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACrC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;IAG3B,eAAe,EAAE,MAAM,CAAC;IAExB,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"DraggableItemList.d.ts","sourceRoot":"","sources":["../src/DraggableItemList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -202,13 +202,15 @@ class DraggableItemList extends PureComponent {
|
|
|
202
202
|
renderItem,
|
|
203
203
|
rowHeight,
|
|
204
204
|
selectedRanges,
|
|
205
|
-
style
|
|
205
|
+
style,
|
|
206
|
+
'data-testid': dataTestId
|
|
206
207
|
} = this.props;
|
|
207
208
|
return /*#__PURE__*/React.createElement(Droppable, {
|
|
208
209
|
isDropDisabled: isDropDisabled,
|
|
209
210
|
droppableId: droppableId,
|
|
210
211
|
mode: "virtual",
|
|
211
|
-
renderClone: this.getCachedRenderClone(draggingItemClassName, items, offset, renderItem)
|
|
212
|
+
renderClone: this.getCachedRenderClone(draggingItemClassName, items, offset, renderItem),
|
|
213
|
+
"data-testid": dataTestId
|
|
212
214
|
}, (provided, snapshot) => /*#__PURE__*/React.createElement("div", _extends({
|
|
213
215
|
role: "menu",
|
|
214
216
|
className: classNames('draggable-item-list', className, {
|
|
@@ -275,7 +277,8 @@ _defineProperty(DraggableItemList, "defaultProps", {
|
|
|
275
277
|
renderItem: DraggableItemList.renderItem,
|
|
276
278
|
selectedRanges: [],
|
|
277
279
|
draggablePrefix: 'draggable-item',
|
|
278
|
-
droppableId: 'droppable-item-list'
|
|
280
|
+
droppableId: 'droppable-item-list',
|
|
281
|
+
'data-testid': undefined
|
|
279
282
|
});
|
|
280
283
|
|
|
281
284
|
export default DraggableItemList;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/DraggableItemList.tsx"],"names":["React","PureComponent","classNames","memoize","Draggable","Droppable","FontAwesomeIcon","vsGripper","RangeUtils","ItemList","Tooltip","DraggableItemList","renderHandle","renderBadge","text","renderTextItem","badgeText","className","renderItem","item","isClone","selectedCount","displayValue","value","getDraggableId","draggablePrefix","itemIndex","getDraggableIndex","draggableId","parseInt","split","pop","constructor","props","isFocused","isSelected","isDragDisabled","style","provided","innerRef","draggableProps","dragHandleProps","max","CACHE_SIZE","getCachedDraggableItem","draggingItemClassName","items","offset","snapshot","rubric","state","index","source","handleSelectionChange","bind","itemList","createRef","selectItem","current","focusItem","scrollToItem","selectedRanges","setState","count","onSelectionChange","render","droppableId","isDoubleClickSelect","isDropDisabled","isMultiSelect","isStickyBottom","itemCount","onFocusChange","onSelect","onViewportChange","rowHeight","getCachedRenderClone","draggingFromThisWith","isDraggingOver","draggingOverWith","droppableProps","getCachedRenderDraggableItem","DEFAULT_ROW_HEIGHT","isDeselectOnClick","disableSelect"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport { Draggable, Droppable, DraggableChildrenFn } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGripper } from '@deephaven/icons';\nimport { RangeUtils, Range } from '@deephaven/utils';\nimport ItemList, {\n RenderItemProps,\n DefaultListItem,\n ItemListProps,\n} from './ItemList';\nimport { Tooltip } from './popper';\nimport './DraggableItemList.scss';\n\nexport type DraggableRenderItemProps<T> = RenderItemProps<T> & {\n isClone?: boolean;\n selectedCount?: number;\n};\n\ntype DraggableRenderItemFn<T> = (\n props: DraggableRenderItemProps<T>\n) => React.ReactNode;\n\ntype DraggableItemListProps<T> = Omit<\n ItemListProps<T>,\n 'overscanCount' | 'focusSelector' | 'isDragSelect'\n> & {\n className: string;\n draggingItemClassName: string;\n isDropDisabled: boolean;\n // Whether to allow dragging items from this list\n isDragDisabled: boolean;\n\n renderItem: DraggableRenderItemFn<T>;\n style: React.CSSProperties;\n\n // The prefix to add to all draggable item IDs\n draggablePrefix: string;\n // The ID to give the droppable list\n droppableId: string;\n};\n\ntype DraggableItemListState = {\n selectedCount: number;\n};\n\n/**\n * Show a draggable item list. It _must_ be used within a `DragDropContext`.\n * This implementation uses react-beautiful-dnd for handling dragging and dropping of items.\n * We use ItemList to handle selection for multi drag and drop (not built in to react-beautiful-dnd).\n * One caveat with the use of react-beautiful-dnd is that it doesn't allow a drag to be initiated while\n * using a modifier key: https://github.com/atlassian/react-beautiful-dnd/issues/1678\n */\nclass DraggableItemList<T> extends PureComponent<\n DraggableItemListProps<T>,\n DraggableItemListState\n> {\n static DEFAULT_ROW_HEIGHT = 30;\n\n static defaultProps = {\n className: '',\n draggingItemClassName: '',\n offset: 0,\n items: [],\n rowHeight: DraggableItemList.DEFAULT_ROW_HEIGHT,\n isDeselectOnClick: true,\n isDoubleClickSelect: true,\n isDropDisabled: false,\n isDragDisabled: false,\n isMultiSelect: false,\n isStickyBottom: false,\n disableSelect: false,\n style: null,\n onFocusChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n onSelectionChange(): void {\n // no-op\n },\n onViewportChange(): void {\n // no-op\n },\n renderItem: DraggableItemList.renderItem,\n selectedRanges: [],\n draggablePrefix: 'draggable-item',\n droppableId: 'droppable-item-list',\n };\n\n static renderHandle(): JSX.Element {\n return (\n <div>\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </div>\n );\n }\n\n static renderBadge({ text }: { text?: string }): React.ReactNode {\n return text ? <span className=\"number-badge\">{text}</span> : null;\n }\n\n static renderTextItem({\n text,\n badgeText = '',\n className = '',\n }: {\n text: string;\n badgeText: string;\n className: string;\n }): JSX.Element {\n return (\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">{text}</span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n );\n }\n\n static renderItem<P extends DefaultListItem>({\n item,\n isClone,\n selectedCount,\n }: DraggableRenderItemProps<P>): JSX.Element {\n const text = item && (item.displayValue || item.value || `${item}`);\n const badgeText = isClone ? `${selectedCount}` : '';\n const className = isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static getDraggableId(draggablePrefix: string, itemIndex: number): string {\n return `${draggablePrefix}/${itemIndex}`;\n }\n\n static getDraggableIndex(draggableId: string): number {\n return parseInt(draggableId.split('/').pop() || '', 10);\n }\n\n constructor(props: DraggableItemListProps<T>) {\n super(props);\n\n this.handleSelectionChange = this.handleSelectionChange.bind(this);\n\n this.itemList = React.createRef();\n\n this.state = {\n selectedCount: 0,\n };\n }\n\n itemList: React.RefObject<ItemList<T>>;\n\n selectItem(itemIndex: number): void {\n this.itemList.current?.selectItem(itemIndex);\n }\n\n focusItem(itemIndex: number): void {\n this.itemList.current?.focusItem(itemIndex);\n }\n\n scrollToItem(itemIndex: number): void {\n this.itemList.current?.scrollToItem(itemIndex);\n }\n\n getCachedDraggableItem = memoize(\n (\n draggablePrefix: string,\n renderItem: DraggableRenderItemFn<T>,\n item: T,\n itemIndex: number,\n isFocused: boolean,\n isSelected: boolean,\n isDragDisabled: boolean,\n style: React.CSSProperties\n ) => (\n <Draggable\n key={itemIndex}\n draggableId={DraggableItemList.getDraggableId(\n draggablePrefix,\n itemIndex\n )}\n index={itemIndex}\n isDragDisabled={isDragDisabled}\n >\n {provided => (\n <div\n role=\"menuitem\"\n className=\"draggable-item-list-item\"\n ref={provided.innerRef}\n tabIndex={-1}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n isClone: false,\n })}\n </div>\n )}\n </Draggable>\n ),\n { max: ItemList.CACHE_SIZE }\n );\n\n handleSelectionChange(selectedRanges: Range[]): void {\n this.setState({ selectedCount: RangeUtils.count(selectedRanges) });\n\n const { onSelectionChange } = this.props;\n onSelectionChange(selectedRanges);\n }\n\n getCachedRenderDraggableItem = memoize(\n (\n draggablePrefix: string,\n isDragDisabled: boolean,\n renderItem: DraggableRenderItemFn<T>\n ) => ({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n }: RenderItemProps<T>) =>\n this.getCachedDraggableItem(\n draggablePrefix,\n renderItem,\n item,\n itemIndex,\n isFocused,\n isSelected,\n isDragDisabled,\n style\n ),\n { max: 1 }\n );\n\n getCachedRenderClone = memoize(\n (\n draggingItemClassName: string,\n items: T[],\n offset: number,\n renderItem: DraggableRenderItemFn<T>\n ): DraggableChildrenFn => (provided, snapshot, rubric) => {\n const { selectedCount } = this.state;\n const { index: itemIndex } = rubric.source;\n const item = items[itemIndex - offset];\n return (\n <div\n className={classNames(\n 'draggable-item-list-dragging-item-container',\n draggingItemClassName\n )}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n ref={provided.innerRef}\n >\n <div\n className={classNames(\n 'draggable-item-list-dragging-item',\n { 'two-dragged': selectedCount === 2 },\n { 'multiple-dragged': selectedCount > 2 }\n )}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused: false,\n isSelected: true,\n style: {},\n isClone: true,\n selectedCount,\n })}\n </div>\n </div>\n );\n },\n { max: 1 }\n );\n\n render(): JSX.Element {\n const {\n className,\n draggablePrefix,\n draggingItemClassName,\n droppableId,\n isDoubleClickSelect,\n isDragDisabled,\n isDropDisabled,\n isMultiSelect,\n isStickyBottom,\n itemCount,\n items,\n offset,\n onFocusChange,\n onSelect,\n onViewportChange,\n renderItem,\n rowHeight,\n selectedRanges,\n style,\n } = this.props;\n return (\n <Droppable\n isDropDisabled={isDropDisabled}\n droppableId={droppableId}\n mode=\"virtual\"\n renderClone={this.getCachedRenderClone(\n draggingItemClassName,\n items,\n offset,\n renderItem\n )}\n >\n {(provided, snapshot) => (\n <div\n role=\"menu\"\n className={classNames('draggable-item-list', className, {\n 'is-drop-disabled': isDropDisabled,\n 'is-drag-disabled': isDragDisabled,\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith,\n })}\n style={style}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n <ItemList\n focusSelector=\".draggable-item-list-item\"\n isDoubleClickSelect={isDoubleClickSelect}\n isDragSelect={false}\n isMultiSelect={isMultiSelect}\n isStickyBottom={isStickyBottom}\n itemCount={itemCount}\n items={items}\n onFocusChange={onFocusChange}\n onSelect={onSelect}\n onSelectionChange={this.handleSelectionChange}\n onViewportChange={onViewportChange}\n offset={offset}\n ref={this.itemList}\n renderItem={this.getCachedRenderDraggableItem(\n draggablePrefix,\n isDragDisabled,\n renderItem\n )}\n rowHeight={rowHeight}\n selectedRanges={selectedRanges}\n />\n </div>\n )}\n </Droppable>\n );\n }\n}\n\nexport default DraggableItemList;\n"],"file":"DraggableItemList.js"}
|
|
1
|
+
{"version":3,"sources":["../src/DraggableItemList.tsx"],"names":["React","PureComponent","classNames","memoize","Draggable","Droppable","FontAwesomeIcon","vsGripper","RangeUtils","ItemList","Tooltip","DraggableItemList","renderHandle","renderBadge","text","renderTextItem","badgeText","className","renderItem","item","isClone","selectedCount","displayValue","value","getDraggableId","draggablePrefix","itemIndex","getDraggableIndex","draggableId","parseInt","split","pop","constructor","props","isFocused","isSelected","isDragDisabled","style","provided","innerRef","draggableProps","dragHandleProps","max","CACHE_SIZE","getCachedDraggableItem","draggingItemClassName","items","offset","snapshot","rubric","state","index","source","handleSelectionChange","bind","itemList","createRef","selectItem","current","focusItem","scrollToItem","selectedRanges","setState","count","onSelectionChange","render","droppableId","isDoubleClickSelect","isDropDisabled","isMultiSelect","isStickyBottom","itemCount","onFocusChange","onSelect","onViewportChange","rowHeight","dataTestId","getCachedRenderClone","draggingFromThisWith","isDraggingOver","draggingOverWith","droppableProps","getCachedRenderDraggableItem","DEFAULT_ROW_HEIGHT","isDeselectOnClick","disableSelect","undefined"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport { Draggable, Droppable, DraggableChildrenFn } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGripper } from '@deephaven/icons';\nimport { RangeUtils, Range } from '@deephaven/utils';\nimport ItemList, {\n RenderItemProps,\n DefaultListItem,\n ItemListProps,\n} from './ItemList';\nimport { Tooltip } from './popper';\nimport './DraggableItemList.scss';\n\nexport type DraggableRenderItemProps<T> = RenderItemProps<T> & {\n isClone?: boolean;\n selectedCount?: number;\n};\n\ntype DraggableRenderItemFn<T> = (\n props: DraggableRenderItemProps<T>\n) => React.ReactNode;\n\ntype DraggableItemListProps<T> = Omit<\n ItemListProps<T>,\n 'overscanCount' | 'focusSelector' | 'isDragSelect'\n> & {\n className: string;\n draggingItemClassName: string;\n isDropDisabled: boolean;\n // Whether to allow dragging items from this list\n isDragDisabled: boolean;\n\n renderItem: DraggableRenderItemFn<T>;\n style: React.CSSProperties;\n\n // The prefix to add to all draggable item IDs\n draggablePrefix: string;\n // The ID to give the droppable list\n droppableId: string;\n\n 'data-testid'?: string;\n};\n\ntype DraggableItemListState = {\n selectedCount: number;\n};\n\n/**\n * Show a draggable item list. It _must_ be used within a `DragDropContext`.\n * This implementation uses react-beautiful-dnd for handling dragging and dropping of items.\n * We use ItemList to handle selection for multi drag and drop (not built in to react-beautiful-dnd).\n * One caveat with the use of react-beautiful-dnd is that it doesn't allow a drag to be initiated while\n * using a modifier key: https://github.com/atlassian/react-beautiful-dnd/issues/1678\n */\nclass DraggableItemList<T> extends PureComponent<\n DraggableItemListProps<T>,\n DraggableItemListState\n> {\n static DEFAULT_ROW_HEIGHT = 30;\n\n static defaultProps = {\n className: '',\n draggingItemClassName: '',\n offset: 0,\n items: [],\n rowHeight: DraggableItemList.DEFAULT_ROW_HEIGHT,\n isDeselectOnClick: true,\n isDoubleClickSelect: true,\n isDropDisabled: false,\n isDragDisabled: false,\n isMultiSelect: false,\n isStickyBottom: false,\n disableSelect: false,\n style: null,\n onFocusChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n onSelectionChange(): void {\n // no-op\n },\n onViewportChange(): void {\n // no-op\n },\n renderItem: DraggableItemList.renderItem,\n selectedRanges: [],\n draggablePrefix: 'draggable-item',\n droppableId: 'droppable-item-list',\n 'data-testid': undefined,\n };\n\n static renderHandle(): JSX.Element {\n return (\n <div>\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </div>\n );\n }\n\n static renderBadge({ text }: { text?: string }): React.ReactNode {\n return text ? <span className=\"number-badge\">{text}</span> : null;\n }\n\n static renderTextItem({\n text,\n badgeText = '',\n className = '',\n }: {\n text: string;\n badgeText: string;\n className: string;\n }): JSX.Element {\n return (\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">{text}</span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n );\n }\n\n static renderItem<P extends DefaultListItem>({\n item,\n isClone,\n selectedCount,\n }: DraggableRenderItemProps<P>): JSX.Element {\n const text = item && (item.displayValue || item.value || `${item}`);\n const badgeText = isClone ? `${selectedCount}` : '';\n const className = isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static getDraggableId(draggablePrefix: string, itemIndex: number): string {\n return `${draggablePrefix}/${itemIndex}`;\n }\n\n static getDraggableIndex(draggableId: string): number {\n return parseInt(draggableId.split('/').pop() || '', 10);\n }\n\n constructor(props: DraggableItemListProps<T>) {\n super(props);\n\n this.handleSelectionChange = this.handleSelectionChange.bind(this);\n\n this.itemList = React.createRef();\n\n this.state = {\n selectedCount: 0,\n };\n }\n\n itemList: React.RefObject<ItemList<T>>;\n\n selectItem(itemIndex: number): void {\n this.itemList.current?.selectItem(itemIndex);\n }\n\n focusItem(itemIndex: number): void {\n this.itemList.current?.focusItem(itemIndex);\n }\n\n scrollToItem(itemIndex: number): void {\n this.itemList.current?.scrollToItem(itemIndex);\n }\n\n getCachedDraggableItem = memoize(\n (\n draggablePrefix: string,\n renderItem: DraggableRenderItemFn<T>,\n item: T,\n itemIndex: number,\n isFocused: boolean,\n isSelected: boolean,\n isDragDisabled: boolean,\n style: React.CSSProperties\n ) => (\n <Draggable\n key={itemIndex}\n draggableId={DraggableItemList.getDraggableId(\n draggablePrefix,\n itemIndex\n )}\n index={itemIndex}\n isDragDisabled={isDragDisabled}\n >\n {provided => (\n <div\n role=\"menuitem\"\n className=\"draggable-item-list-item\"\n ref={provided.innerRef}\n tabIndex={-1}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n isClone: false,\n })}\n </div>\n )}\n </Draggable>\n ),\n { max: ItemList.CACHE_SIZE }\n );\n\n handleSelectionChange(selectedRanges: Range[]): void {\n this.setState({ selectedCount: RangeUtils.count(selectedRanges) });\n\n const { onSelectionChange } = this.props;\n onSelectionChange(selectedRanges);\n }\n\n getCachedRenderDraggableItem = memoize(\n (\n draggablePrefix: string,\n isDragDisabled: boolean,\n renderItem: DraggableRenderItemFn<T>\n ) => ({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n }: RenderItemProps<T>) =>\n this.getCachedDraggableItem(\n draggablePrefix,\n renderItem,\n item,\n itemIndex,\n isFocused,\n isSelected,\n isDragDisabled,\n style\n ),\n { max: 1 }\n );\n\n getCachedRenderClone = memoize(\n (\n draggingItemClassName: string,\n items: T[],\n offset: number,\n renderItem: DraggableRenderItemFn<T>\n ): DraggableChildrenFn => (provided, snapshot, rubric) => {\n const { selectedCount } = this.state;\n const { index: itemIndex } = rubric.source;\n const item = items[itemIndex - offset];\n return (\n <div\n className={classNames(\n 'draggable-item-list-dragging-item-container',\n draggingItemClassName\n )}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n ref={provided.innerRef}\n >\n <div\n className={classNames(\n 'draggable-item-list-dragging-item',\n { 'two-dragged': selectedCount === 2 },\n { 'multiple-dragged': selectedCount > 2 }\n )}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused: false,\n isSelected: true,\n style: {},\n isClone: true,\n selectedCount,\n })}\n </div>\n </div>\n );\n },\n { max: 1 }\n );\n\n render(): JSX.Element {\n const {\n className,\n draggablePrefix,\n draggingItemClassName,\n droppableId,\n isDoubleClickSelect,\n isDragDisabled,\n isDropDisabled,\n isMultiSelect,\n isStickyBottom,\n itemCount,\n items,\n offset,\n onFocusChange,\n onSelect,\n onViewportChange,\n renderItem,\n rowHeight,\n selectedRanges,\n style,\n 'data-testid': dataTestId,\n } = this.props;\n return (\n <Droppable\n isDropDisabled={isDropDisabled}\n droppableId={droppableId}\n mode=\"virtual\"\n renderClone={this.getCachedRenderClone(\n draggingItemClassName,\n items,\n offset,\n renderItem\n )}\n data-testid={dataTestId}\n >\n {(provided, snapshot) => (\n <div\n role=\"menu\"\n className={classNames('draggable-item-list', className, {\n 'is-drop-disabled': isDropDisabled,\n 'is-drag-disabled': isDragDisabled,\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith,\n })}\n style={style}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n <ItemList\n focusSelector=\".draggable-item-list-item\"\n isDoubleClickSelect={isDoubleClickSelect}\n isDragSelect={false}\n isMultiSelect={isMultiSelect}\n isStickyBottom={isStickyBottom}\n itemCount={itemCount}\n items={items}\n onFocusChange={onFocusChange}\n onSelect={onSelect}\n onSelectionChange={this.handleSelectionChange}\n onViewportChange={onViewportChange}\n offset={offset}\n ref={this.itemList}\n renderItem={this.getCachedRenderDraggableItem(\n draggablePrefix,\n isDragDisabled,\n renderItem\n )}\n rowHeight={rowHeight}\n selectedRanges={selectedRanges}\n />\n </div>\n )}\n </Droppable>\n );\n }\n}\n\nexport default DraggableItemList;\n"],"file":"DraggableItemList.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HierarchicalCheckboxMenu.d.ts","sourceRoot":"","sources":["../src/HierarchicalCheckboxMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAU,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAI1D,OAAO,iCAAiC,CAAC;AAEzC,aAAK,4BAA4B,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEhF,aAAK,6BAA6B,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,4BAA4B,CAAC;IACvC,gBAAgB,CAAC,GAAG,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAC1D,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"HierarchicalCheckboxMenu.d.ts","sourceRoot":"","sources":["../src/HierarchicalCheckboxMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAU,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAI1D,OAAO,iCAAiC,CAAC;AAEzC,aAAK,4BAA4B,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEhF,aAAK,6BAA6B,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,4BAA4B,CAAC;IACvC,gBAAgB,CAAC,GAAG,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAC1D,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,aAAK,6BAA6B,GAAG;IACnC,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,cAAM,wBAAyB,SAAQ,SAAS,CAC9C,6BAA6B,EAC7B,6BAA6B,CAC9B;IACC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,6BAA6B,CAAC,CAKzD;IAEF,MAAM,CAAC,gBAAgB,CACrB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,4BAA4B,GACrC,OAAO,GAAG,IAAI;gBAkBL,KAAK,EAAE,6BAA6B;IAahD,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAS5D,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAwCpD,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAkBlC,SAAS,IAAI,IAAI;IAIjB,KAAK,IAAI,IAAI;IAIb,iBAAiB,IAAI,KAAK,CAAC,SAAS;IAkDpC,MAAM,IAAI,GAAG,CAAC,OAAO;CAqCtB;AAED,eAAe,wBAAwB,CAAC"}
|
|
@@ -150,7 +150,8 @@ class HierarchicalCheckboxMenu extends Component {
|
|
|
150
150
|
|
|
151
151
|
renderMenuElement() {
|
|
152
152
|
var {
|
|
153
|
-
valueMap
|
|
153
|
+
valueMap,
|
|
154
|
+
'data-testid': dataTestId
|
|
154
155
|
} = this.props;
|
|
155
156
|
return /*#__PURE__*/React.createElement("div", {
|
|
156
157
|
className: "hcm-menu-container"
|
|
@@ -174,11 +175,13 @@ class HierarchicalCheckboxMenu extends Component {
|
|
|
174
175
|
}), /*#__PURE__*/React.createElement("button", {
|
|
175
176
|
type: "button",
|
|
176
177
|
className: "btn btn-link",
|
|
177
|
-
onClick: this.selectAll
|
|
178
|
+
onClick: this.selectAll,
|
|
179
|
+
"data-testid": dataTestId ? "".concat(dataTestId, "-btn-select-all") : undefined
|
|
178
180
|
}, "Select All"), /*#__PURE__*/React.createElement("button", {
|
|
179
181
|
type: "button",
|
|
180
182
|
className: "btn btn-link",
|
|
181
|
-
onClick: this.clear
|
|
183
|
+
onClick: this.clear,
|
|
184
|
+
"data-testid": dataTestId ? "".concat(dataTestId, "-btn-clear") : undefined
|
|
182
185
|
}, "Clear"));
|
|
183
186
|
}
|
|
184
187
|
|
|
@@ -187,7 +190,8 @@ class HierarchicalCheckboxMenu extends Component {
|
|
|
187
190
|
menuText,
|
|
188
191
|
className,
|
|
189
192
|
icon,
|
|
190
|
-
id
|
|
193
|
+
id,
|
|
194
|
+
'data-testid': dataTestId
|
|
191
195
|
} = this.props;
|
|
192
196
|
var {
|
|
193
197
|
menuIsOpen
|
|
@@ -196,7 +200,8 @@ class HierarchicalCheckboxMenu extends Component {
|
|
|
196
200
|
type: "button",
|
|
197
201
|
className: classNames('btn hcm-btn', className),
|
|
198
202
|
onClick: this.toggleMenu,
|
|
199
|
-
id: id
|
|
203
|
+
id: id,
|
|
204
|
+
"data-testid": dataTestId
|
|
200
205
|
}, /*#__PURE__*/React.createElement("span", null, icon && /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
201
206
|
icon: icon,
|
|
202
207
|
className: "hcm-icon mr-1"
|
|
@@ -223,7 +228,8 @@ class HierarchicalCheckboxMenu extends Component {
|
|
|
223
228
|
_defineProperty(HierarchicalCheckboxMenu, "defaultProps", {
|
|
224
229
|
className: '',
|
|
225
230
|
icon: null,
|
|
226
|
-
id: ''
|
|
231
|
+
id: '',
|
|
232
|
+
'data-testid': undefined
|
|
227
233
|
});
|
|
228
234
|
|
|
229
235
|
export default HierarchicalCheckboxMenu;
|