@deephaven/iris-grid 0.15.7-beta.3 → 0.16.1-vite.18
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/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnHeaderGroup.js.map +1 -1
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CommonTypes.js.map +1 -1
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.d.ts +1 -15
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelFactory.js.map +1 -1
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridShortcuts.js.map +1 -1
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.d.ts +2 -2
- package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/MissingKeyError.js.map +1 -1
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/TableViewportUpdater.js.map +1 -1
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/TreeTableViewportUpdater.js.map +1 -1
- package/dist/declaration.d.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
- package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
- package/dist/key-handlers/index.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/mousehandlers/index.js.map +1 -1
- package/dist/sidebar/AdvancedSettings.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +1 -1
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js +1 -1
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/OptionType.js.map +1 -1
- package/dist/sidebar/RollupRows.js +1 -1
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.d.ts +2 -2
- package/dist/sidebar/TableSaver.d.ts.map +1 -1
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.js +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/aggregations/index.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/icons/BarIcon.js +1 -1
- package/dist/sidebar/icons/BarIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatColumnWhereIcon.js +1 -1
- package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatRowWhereIcon.js +1 -1
- package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/HistogramIcon.js +1 -1
- package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
- package/dist/sidebar/icons/LineIcon.js +1 -1
- package/dist/sidebar/icons/LineIcon.js.map +1 -1
- package/dist/sidebar/icons/PieIcon.js +1 -1
- package/dist/sidebar/icons/PieIcon.js.map +1 -1
- package/dist/sidebar/icons/ScatterIcon.js +1 -1
- package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
- package/dist/sidebar/icons/index.js.map +1 -1
- package/dist/sidebar/index.js.map +1 -1
- package/package.json +16 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sidebar/VisibilityOrderingBuilder.tsx"],"names":["React","Component","classNames","GridUtils","TextUtils","assertNotNull","FontAwesomeIcon","dhEye","dhEyeSlash","dhSortAlphaDown","dhSortAlphaUp","dhArrowToTop","dhArrowToBottom","vsChevronUp","vsChevronDown","vsGripper","DragDropContext","Draggable","Droppable","memoize","debounce","SearchInput","Tooltip","Log","log","module","DEBOUNCE_SEARCH_COLUMN","VisibilityOrderingBuilder","constructor","props","searchColumns","model","columns","i","length","isColumnMovable","columnName","modelIndex","visibleIndex","isHidden","isSelected","isDragging","isDragged","columnsDragged","provided","innerRef","draggableProps","event","handleVisibilityDraggingStart","VISIBILITY_OPTIONS","SHOW","HIDE","handleMouseEnter","handleVisibilityDraggingEnd","handleItemClick","key","handleVisibilityKeyDown","stopPropagation","preventDefault","dragHandleProps","handleSearchInputChange","bind","handleOrderDraggingStart","handleOrderDraggingEnd","state","selectedColumns","lastSelectedColumns","isDraggingVisibility","visibilityDraggingOption","undefined","visibilityDraggingStartColumn","isDraggingOrder","orderDraggingColumn","searchFilter","list","componentWillUnmount","debouncedSearchColumns","cancel","resetVisibilityOrdering","onColumnVisibilityChanged","onMovedColumnsChanged","map","column","index","getColumnIndexByName","name","setState","resetSelection","target","value","movedColumns","columnsMatch","visibleIndexToFocus","forEach","toLowerCase","includes","push","Math","min","getVisibleIndex","addColumnToSelected","columnItemToFocus","querySelectorAll","scrollIntoView","block","visibilityOption","isModifierKeyDown","isShiftKeyDown","shiftKey","focus","start","document","documentElement","classList","add","draggableId","source","startIndex","parseInt","result","remove","destination","destinationIndex","selectedColumnsSortByVisibleIndex","sort","columnA","columnB","newMoves","draggingVisibleIndex","upper","lower","moveItem","columnVisibleIndex","bottomDestinationIndex","reverse","debug","targetModelIndex","userColumnWidths","draggingStartVisibleIndex","targetVisibleIndex","columnsToChangeVisibility","checkDownward","visibleIndexToCheck","modelIndexToCheck","getModelIndex","checkColumnHidden","handleMoveColumns","option","firstMovableIndex","getFirstMovableIndex","lastMovableIndex","getLastMovableIndex","sortedSelectedColumns","MOVE_OPTIONS","TOP","UP","scrollListAfterMove","columnModelIndex","scrollTop","BOTTOM","scrollHeight","DOWN","concat","handleSortColumns","movableColumns","immovableColumns","movableColumnsSorted","a","b","isAscending","SORTING_OPTIONS","ASC","aName","toUpperCase","bName","modelIndexAlphaSorted","insertIndex","modelIndexClicked","removeSelectionOnClick","currentTarget","columnsToBeAdded","removeColumnFromSelected","lastSelectedColumn","lastSelectedColumnVisibleIndex","visibleIndexToBeSelected","columnsInBetween","addToExisting","newSelectedColumns","newLastSelectedColumns","splice","findIndex","selected","pop","makeVisibilityOrderingList","elements","wasMovable","isMovable","get","renderVisibilityOrderingItem","renderImmovableItem","render","noSelection","columnsToToggle","c","filter","toggleToShow","checkAllColumnsHidden","selectedToggleText","columnItems","DSC","snapshot","draggingFromThisWith","droppableProps","placeholder","ALL","SELECTION"],"mappings":";;;;AAAA;AACA,OAAOA,KAAP,IAA6BC,SAA7B,QAA4D,OAA5D;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SACEC,SADF,QAMO,iBANP;AAOA,SAASC,SAAT,EAAoBC,aAApB,QAAyC,kBAAzC;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SACEC,KADF,EAEEC,UAFF,EAGEC,eAHF,EAIEC,aAJF,EAKEC,YALF,EAMEC,eANF,EAOEC,WAPF,EAQEC,aARF,EASEC,SATF,QAUO,kBAVP;AAWA,SACEC,eADF,EAEEC,SAFF,EAIEC,SAJF,QAMO,qBANP;AAOA,OAAOC,OAAP,MAAoB,UAApB;AACA,OAAOC,QAAP,MAAqB,iBAArB;AACA,SAASC,WAAT,EAAsBC,OAAtB,QAAqC,uBAArC;AACA,OAAOC,GAAP,MAAgB,gBAAhB;;AAKA,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAJ,CAAW,2BAAX,CAAZ;AACA,IAAMC,sBAAsB,GAAG,GAA/B;;AA8BA,MAAMC,yBAAN,SAAwC1B,SAAxC,CAGE;AAoBA2B,EAAAA,WAAW,CAACC,KAAD,EAAwC;AACjD,UAAMA,KAAN;;AADiD;;AAAA,oDA4B1BT,QAAQ,CAAC,KAAKU,aAAN,EAAqBJ,sBAArB,CA5BkB;;AAAA,kDA4nB5BP,OAAO,CAAC,CAACY,KAAD,EAAQC,OAAR,KAAoB;AACjD,WAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,OAAO,CAACE,MAA5B,EAAoCD,CAAC,IAAI,CAAzC,EAA4C;AAC1C,YAAIF,KAAK,CAACI,eAAN,CAAsBF,CAAtB,CAAJ,EAA8B;AAC5B,iBAAOA,CAAP;AACD;AACF;;AAED,aAAO,IAAP;AACD,KAR6B,CA5nBqB;;AAAA,iDAsoB7Bd,OAAO,CAAC,CAACY,KAAD,EAAQC,OAAR,KAAoB;AAChD,WAAK,IAAIC,CAAC,GAAGD,OAAO,CAACE,MAAR,GAAiB,CAA9B,EAAiCD,CAAC,IAAI,CAAtC,EAAyCA,CAAC,IAAI,CAA9C,EAAiD;AAC/C,YAAIF,KAAK,CAACI,eAAN,CAAsBF,CAAtB,CAAJ,EAA8B;AAC5B,iBAAOA,CAAP;AACD;AACF;;AAED,aAAO,IAAP;AACD,KAR4B,CAtoBsB;;AAAA,iDAgpB7Bd,OAAO,CAC1BiB,UAAD,iBACE;AAAK,MAAA,SAAS,EAAC,yCAAf;AAAyD,MAAA,GAAG,EAAEA;AAA9D,oBACE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AAAM,MAAA,SAAS,EAAC;AAAhB,OAA+BA,UAA/B,CADF,CADF,CAFyB,CAhpBsB;;AAAA,0DA0pBpBjB,OAAO,CACpC,CACEiB,UADF,EAEEC,UAFF,EAGEC,YAHF,EAIEC,QAJF,EAKEC,UALF,EAMEC,UANF,EAOEC,SAPF,EAQEC,cARF,kBAUE,oBAAC,SAAD;AACE,MAAA,WAAW,YAAKN,UAAL,CADb,CACgC;AADhC;AAEE,MAAA,KAAK,EAAEC,YAFT;AAGE,MAAA,GAAG,EAAEF,UAHP;AAIE,MAAA,iCAAiC;AAJnC,OAMGQ,QAAQ,iBACP;AACE,MAAA,SAAS,EAAC,+BADZ;AAEE,MAAA,GAAG,EAAEA,QAAQ,CAACC,QAFhB,CAGE;;AAHF,OAIMD,QAAQ,CAACE,cAJf,gBAME;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,uCAFZ;AAGE,MAAA,WAAW,EAAEC,KAAK,IAAI;AACpB,aAAKC,6BAAL,CACEX,UADF,EAEEE,QAAQ,GACJZ,yBAAyB,CAACsB,kBAA1B,CAA6CC,IADzC,GAEJvB,yBAAyB,CAACsB,kBAA1B,CAA6CE,IAJnD,EAKEJ,KALF;AAOD,OAXH;AAYE,MAAA,YAAY,EAAEA,KAAK,IAAI;AACrB,aAAKK,gBAAL,CAAsBf,UAAtB,EAAkCU,KAAlC;AACD,OAdH;AAeE,MAAA,SAAS,EAAEA,KAAK,IAAI;AAClB,aAAKM,2BAAL,CAAiCN,KAAjC;AACD,OAjBH;AAkBE,MAAA,OAAO,EAAEA,KAAK,IAAI;AAChB,aAAKO,eAAL,CAAqBjB,UAArB,EAAiCU,KAAjC,EAAwC,KAAxC;AACD,OApBH;AAqBE,MAAA,SAAS,EAAEA,KAAK,IAAI;AAClB;AACA,YAAIA,KAAK,CAACQ,GAAN,KAAc,OAAd,IAAyBR,KAAK,CAACQ,GAAN,KAAc,GAA3C,EAAgD;AAC9C,eAAKC,uBAAL,CACEnB,UADF,EAEEE,QAAQ,GACJZ,yBAAyB,CAACsB,kBAA1B,CAA6CC,IADzC,GAEJvB,yBAAyB,CAACsB,kBAA1B,CAA6CE,IAJnD;AAMAJ,UAAAA,KAAK,CAACU,eAAN;AACAV,UAAAA,KAAK,CAACW,cAAN;AACD;AACF;AAjCH,oBAmCE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAEnB,QAAQ,GAAG/B,UAAH,GAAgBD;AAA/C,MAnCF,CANF,eA2CE;AACE,MAAA,IAAI,EAAC,UADP;AAEE,MAAA,QAAQ,EAAE,CAFZ;AAGE,MAAA,SAAS,EAAEL,UAAU,CACnB,sBADmB,EAEnB;AACEsC,QAAAA;AADF,OAFmB,EAKnB;AAAEC,QAAAA;AAAF,OALmB,EAMnB;AAAEC,QAAAA;AAAF,OANmB,EAOnB;AAAE,uBAAeC,cAAc,KAAK;AAApC,OAPmB,EAQnB;AAAE,4BAAoBA,cAAc,GAAG;AAAvC,OARmB,CAHvB;AAaE,MAAA,OAAO,EAAEI,KAAK,IAAI;AAChB,aAAKO,eAAL,CAAqBjB,UAArB,EAAiCU,KAAjC;AACD,OAfH,CAgBE;;AAhBF,OAiBMH,QAAQ,CAACe,eAjBf,gBAmBE;AAAM,MAAA,SAAS,EAAC;AAAhB,OAA+BvB,UAA/B,CAnBF,eAoBE,iCACGO,cAAc,iBACb;AAAM,MAAA,SAAS,EAAC;AAAhB,OAAgCA,cAAhC,CAFJ,eAIE,oBAAC,OAAD,2BAJF,eAKE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAE5B;AAAvB,MALF,CApBF,CA3CF,CAPJ,CAXkC,CA1pBa;;AAGjD,SAAK6C,uBAAL,GAA+B,KAAKA,uBAAL,CAA6BC,IAA7B,CAAkC,IAAlC,CAA/B;AACA,SAAK/B,aAAL,GAAqB,KAAKA,aAAL,CAAmB+B,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAKC,wBAAL,GAAgC,KAAKA,wBAAL,CAA8BD,IAA9B,CAAmC,IAAnC,CAAhC;AACA,SAAKE,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BF,IAA5B,CAAiC,IAAjC,CAA9B;AAEA,SAAKG,KAAL,GAAa;AACXC,MAAAA,eAAe,EAAE,EADN;AACU;AACrBC,MAAAA,mBAAmB,EAAE,EAFV;AAGXC,MAAAA,oBAAoB,EAAE,KAHX;AAIXC,MAAAA,wBAAwB,EAAEC,SAJf;AAKXC,MAAAA,6BAA6B,EAAE,IALpB;AAMXC,MAAAA,eAAe,EAAE,KANN;AAOXC,MAAAA,mBAAmB,EAAE,IAPV;AAQXC,MAAAA,YAAY,EAAE;AARH,KAAb;AAWA,SAAKC,IAAL,GAAY,IAAZ;AACD;;AAEDC,EAAAA,oBAAoB,GAAS;AAC3B,SAAKC,sBAAL,CAA4BC,MAA5B;AACD;;AAMDC,EAAAA,uBAAuB,GAAS;AAC9B,QAAM;AACJ/C,MAAAA,KADI;AAEJgD,MAAAA,yBAFI;AAGJC,MAAAA;AAHI,QAIF,KAAKnD,KAJT;AAKA,QAAM;AAAEG,MAAAA;AAAF,QAAcD,KAApB;AAEAgD,IAAAA,yBAAyB,CACvB/C,OAAO,CAACiD,GAAR,CAAYC,MAAM,IAAI;AACpB,UAAMC,KAAK,GAAGpD,KAAK,CAACqD,oBAAN,CAA2BF,MAAM,CAACG,IAAlC,CAAd;AACAhF,MAAAA,aAAa,CAAC8E,KAAD,CAAb;AACA,aAAOA,KAAP;AACD,KAJD,CADuB,EAMvBxD,yBAAyB,CAACsB,kBAA1B,CAA6CC,IANtB,CAAzB;AAQA,SAAKoC,QAAL,CAAc;AACZrB,MAAAA,eAAe,EAAE,EADL;AAEZC,MAAAA,mBAAmB,EAAE,EAFT;AAGZO,MAAAA,YAAY,EAAE;AAHF,KAAd;AAKAO,IAAAA,qBAAqB,CAAC,EAAD,CAArB;AACD;;AAEDO,EAAAA,cAAc,GAAS;AACrB,QAAM;AAAEhB,MAAAA;AAAF,QAAsB,KAAKP,KAAjC,CADqB,CAErB;;AACA,QAAIO,eAAJ,EAAqB;AACnB;AACD;;AACD,SAAKe,QAAL,CAAc;AAAErB,MAAAA,eAAe,EAAE,EAAnB;AAAuBC,MAAAA,mBAAmB,EAAE;AAA5C,KAAd;AACD;;AAEDN,EAAAA,uBAAuB,CAACb,KAAD,EAA6C;AAClE,QAAM0B,YAAY,GAAG1B,KAAK,CAACyC,MAAN,CAAaC,KAAlC;AACA,SAAKH,QAAL,CAAc;AAAEb,MAAAA;AAAF,KAAd;;AACA,QAAI,CAACA,YAAL,EAAmB;AACjB,WAAKG,sBAAL,CAA4BC,MAA5B;AACA,WAAKU,cAAL;AACA;AACD;;AACD,SAAKX,sBAAL,CAA4BH,YAA5B;AACD;;AAED3C,EAAAA,aAAa,CAAC2C,YAAD,EAA6B;AACxC,QAAM;AAAE1C,MAAAA,KAAF;AAAS2D,MAAAA;AAAT,QAA0B,KAAK7D,KAArC;AACA,QAAM;AAAEG,MAAAA;AAAF,QAAcD,KAApB;AAEA,QAAM4D,YAAY,GAAG,EAArB;AACA,QAAIC,mBAAmB,GAAG5D,OAAO,CAACE,MAAlC;AACAF,IAAAA,OAAO,CAAC6D,OAAR,CAAgB,CAACX,MAAD,EAASC,KAAT,KAAmB;AACjC,UAAM/C,UAAU,GAAG8C,MAAM,CAACG,IAAP,CAAYS,WAAZ,EAAnB;;AACA,UACE/D,KAAK,CAACI,eAAN,CAAsBgD,KAAtB,KACA/C,UAAU,CAAC2D,QAAX,CAAoBtB,YAAY,CAACqB,WAAb,EAApB,CAFF,EAGE;AACAH,QAAAA,YAAY,CAACK,IAAb,CAAkBb,KAAlB;AACAS,QAAAA,mBAAmB,GAAGK,IAAI,CAACC,GAAL,CACpBN,mBADoB,EAEpBzF,SAAS,CAACgG,eAAV,CAA0BhB,KAA1B,EAAiCO,YAAjC,CAFoB,CAAtB;AAID;AACF,KAZD;AAaA,SAAKU,mBAAL,CAAyBT,YAAzB,EAAuC,KAAvC;;AACA,QAAIA,YAAY,CAACzD,MAAb,GAAsB,CAA1B,EAA6B;AAAA;;AAC3B,UAAMmE,iBAAiB,iBAAG,KAAK3B,IAAR,+CAAG,WAAW4B,gBAAX,CAA4B,cAA5B,EACxBV,mBADwB,CAA1B;AAGAS,MAAAA,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,YAAAA,iBAAiB,CAAEE,cAAnB,CAAkC;AAAEC,QAAAA,KAAK,EAAE;AAAT,OAAlC;AACD;AACF;;AAEDhD,EAAAA,uBAAuB,CACrBnB,UADqB,EAErBoE,gBAFqB,EAGf;AACN,QAAM;AAAE1B,MAAAA;AAAF,QAAgC,KAAKlD,KAA3C;AACAkD,IAAAA,yBAAyB,CAAC,CAAC1C,UAAD,CAAD,EAAeoE,gBAAf,CAAzB;AACD;;AAEDzD,EAAAA,6BAA6B,CAC3BX,UAD2B,EAE3BoE,gBAF2B,EAG3B1D,KAH2B,EAIrB;AACN,QAAM;AAAEgC,MAAAA,yBAAF;AAA6BW,MAAAA;AAA7B,QAA8C,KAAK7D,KAAzD;AAEA,QAAM6E,iBAAiB,GAAGvG,SAAS,CAACuG,iBAAV,CAA4B3D,KAA5B,CAA1B;AACA,QAAM4D,cAAc,GAAG5D,KAAK,CAAC6D,QAA7B;AAEA,QAAIF,iBAAiB,IAAIC,cAAzB,EAAyC;AAEzC5B,IAAAA,yBAAyB,CAAC,CAAC1C,UAAD,CAAD,EAAeoE,gBAAf,CAAzB;AAEA,QAAMnE,YAAY,GAAGnC,SAAS,CAACgG,eAAV,CAA0B9D,UAA1B,EAAsCqD,YAAtC,CAArB;AAEA,SAAKJ,QAAL,CAAc;AACZnB,MAAAA,oBAAoB,EAAE,IADV;AAEZC,MAAAA,wBAAwB,EAAEqC,gBAFd;AAGZnC,MAAAA,6BAA6B,EAAEhC;AAHnB,KAAd;AAMA,SAAK8D,mBAAL,CAAyB,CAAC/D,UAAD,CAAzB;AACD;;AAEDgB,EAAAA,2BAA2B,GAEnB;AAAA,QADNN,KACM,uEAD0D,IAC1D;AACN,QAAIA,KAAJ,EAAYA,KAAK,CAACyC,MAAP,CAAoCqB,KAApC;AAEX,QAAM;AAAE1C,MAAAA;AAAF,QAA2B,KAAKH,KAAtC;;AACA,QAAIG,oBAAJ,EAA0B;AACxB,WAAKmB,QAAL,CAAc;AACZnB,QAAAA,oBAAoB,EAAE,KADV;AAEZC,QAAAA,wBAAwB,EAAEC,SAFd;AAGZC,QAAAA,6BAA6B,EAAE;AAHnB,OAAd;AAKD;AACF;;AAEDR,EAAAA,wBAAwB,CAACgD,KAAD,EAAyB;AAAA;;AAC/CC,IAAAA,QAAQ,CAACC,eAAT,CAAyBC,SAAzB,CAAmCC,GAAnC,CAAuC,0BAAvC;AAEA,QAAM;AAAEjD,MAAAA;AAAF,QAAsB,KAAKD,KAAjC;AACA,QAAM;AACJmD,MAAAA,WADI;AAEJC,MAAAA,MAAM,EAAE;AAAEjC,QAAAA,KAAK,EAAEkC;AAAT;AAFJ,QAGFP,KAHJ;AAIA,QAAMtC,mBAAmB,GAAG8C,QAAQ,CAACH,WAAD,EAAc,EAAd,CAApC,CAR+C,CAU/C;AACA;AACA;;AACA,oBAAC,KAAKzC,IAAN,gDAAC,YAAW4B,gBAAX,CAA4B,cAA5B,EACCe,UADD,CAAD,EAEqBR,KAFrB;;AAIA,QAAI,CAAC5C,eAAe,CAAC8B,QAAhB,CAAyBvB,mBAAzB,CAAL,EAAoD;AAClD,WAAKc,QAAL,CAAc;AACZf,QAAAA,eAAe,EAAE,IADL;AAEZC,QAAAA,mBAFY;AAGZP,QAAAA,eAAe,EAAE,CAACO,mBAAD;AAHL,OAAd;AAKA;AACD;;AACD,SAAKc,QAAL,CAAc;AAAEf,MAAAA,eAAe,EAAE,IAAnB;AAAyBC,MAAAA;AAAzB,KAAd;AACD;;AAEDT,EAAAA,sBAAsB,CAACwD,MAAD,EAA2B;AAC/CR,IAAAA,QAAQ,CAACC,eAAT,CAAyBC,SAAzB,CAAmCO,MAAnC,CAA0C,0BAA1C;AAEA,QAAM;AAAE9B,MAAAA,YAAF;AAAgBV,MAAAA;AAAhB,QAA0C,KAAKnD,KAArD;AACA,QAAM;AAAEoC,MAAAA,eAAF;AAAmBO,MAAAA;AAAnB,QAA2C,KAAKR,KAAtD,CAJ+C,CAM/C;;AACA,SAAKsB,QAAL,CAAc;AAAEf,MAAAA,eAAe,EAAE,KAAnB;AAA0BC,MAAAA,mBAAmB,EAAE;AAA/C,KAAd,EAP+C,CAS/C;;AACA,QAAI,CAAC+C,MAAM,CAACE,WAAZ,EAAyB;AACvB;AACD;;AAED,QAAM;AAAEtC,MAAAA,KAAK,EAAEuC;AAAT,QAA8BH,MAAM,CAACE,WAA3C;AAEA,QAAME,iCAAiC,GAAG,CAAC,GAAG1D,eAAJ,EAAqB2D,IAArB,CACxC,CAACC,OAAD,EAAUC,OAAV,KACE3H,SAAS,CAACgG,eAAV,CAA0B0B,OAA1B,EAAmCnC,YAAnC,IACAvF,SAAS,CAACgG,eAAV,CAA0B2B,OAA1B,EAAmCpC,YAAnC,CAHsC,CAA1C;AAMA,QAAIqC,QAAQ,GAAG,CAAC,GAAGrC,YAAJ,CAAf;AACArF,IAAAA,aAAa,CAACmE,mBAAD,CAAb;AACA,QAAMwD,oBAAoB,GAAG7H,SAAS,CAACgG,eAAV,CAC3B3B,mBAD2B,EAE3BuD,QAF2B,CAA7B;AAIA,QAAME,KAAe,GAAG,EAAxB;AACA,QAAMC,KAAe,GAAG,EAAxB,CA7B+C,CA+B/C;;AACAH,IAAAA,QAAQ,GAAG5H,SAAS,CAACgI,QAAV,CACTH,oBADS,EAETN,gBAFS,EAGTK,QAHS,CAAX,CAhC+C,CAsC/C;;AACAJ,IAAAA,iCAAiC,CAAC9B,OAAlC,CAA0CX,MAAM,IAAI;AAClD,UAAMkD,kBAAkB,GAAGjI,SAAS,CAACgG,eAAV,CAA0BjB,MAA1B,EAAkC6C,QAAlC,CAA3B;;AACA,UAAI7C,MAAM,KAAKV,mBAAf,EAAoC;AAClC;AACD;;AACD,UAAI4D,kBAAkB,GAAGV,gBAAzB,EAA2C;AACzCO,QAAAA,KAAK,CAACjC,IAAN,CAAWd,MAAX;AACD,OAFD,MAEO;AACLgD,QAAAA,KAAK,CAAClC,IAAN,CAAWd,MAAX;AACD;AACF,KAVD,EAvC+C,CAmD/C;;AACA+C,IAAAA,KAAK,CAACpC,OAAN,CAAcX,MAAM,IAAI;AACtB,UAAM5C,YAAY,GAAGnC,SAAS,CAACgG,eAAV,CAA0BjB,MAA1B,EAAkC6C,QAAlC,CAArB;AACAA,MAAAA,QAAQ,GAAG5H,SAAS,CAACgI,QAAV,CAAmB7F,YAAnB,EAAiCoF,gBAAjC,EAAmDK,QAAnD,CAAX;AACD,KAHD,EApD+C,CAyD/C;AACA;;AACA,QAAMM,sBAAsB,GAC1BJ,KAAK,CAAC/F,MAAN,GAAe,CAAf,IAAoB8F,oBAAoB,GAAGN,gBAA3C,GACIA,gBAAgB,GAAG,CADvB,GAEIA,gBAHN;AAKAQ,IAAAA,KAAK,CAACI,OAAN,GAAgBzC,OAAhB,CAAwBX,MAAM,IAAI;AAChC,UAAM5C,YAAY,GAAGnC,SAAS,CAACgG,eAAV,CAA0BjB,MAA1B,EAAkC6C,QAAlC,CAArB;AACAA,MAAAA,QAAQ,GAAG5H,SAAS,CAACgI,QAAV,CACT7F,YADS,EAET+F,sBAFS,EAGTN,QAHS,CAAX;AAKD,KAPD;AASA/C,IAAAA,qBAAqB,CAAC+C,QAAD,CAArB;AACAvG,IAAAA,GAAG,CAAC+G,KAAJ,CAAU,kCAAV,EAA8CR,QAA9C;AACD;;AAED3E,EAAAA,gBAAgB,CACdoF,gBADc,EAEdzF,KAFc,EAGR;AACN,QAAM;AACJgC,MAAAA,yBADI;AAEJW,MAAAA,YAFI;AAGJ+C,MAAAA;AAHI,QAIF,KAAK5G,KAJT;AAKA,QAAM;AACJsC,MAAAA,oBADI;AAEJC,MAAAA,wBAFI;AAGJE,MAAAA,6BAA6B,EAAEoE;AAH3B,QAIF,KAAK1E,KAJT;AAKA,QAAM2E,kBAAkB,GAAGxI,SAAS,CAACgG,eAAV,CACzBqC,gBADyB,EAEzB9C,YAFyB,CAA3B;AAIA,QAAMgB,iBAAiB,GAAGvG,SAAS,CAACuG,iBAAV,CAA4B3D,KAA5B,CAA1B;AACA,QAAM4D,cAAc,GAAG5D,KAAK,CAAC6D,QAA7B;;AAEA,QAAI,CAACzC,oBAAD,IAAyBuC,iBAAzB,IAA8CC,cAAlD,EAAkE;AAChE;AACD;;AAEA5D,IAAAA,KAAK,CAACyC,MAAP,CAAoCqB,KAApC,GAtBM,CAwBN;AACA;;AACA,QAAM+B,yBAAyB,GAAG,CAACJ,gBAAD,CAAlC;AACAnI,IAAAA,aAAa,CAACqI,yBAAD,CAAb;AACA,QAAMG,aAAa,GAAGF,kBAAkB,GAAGD,yBAA3C;;AAEA,SACE,IAAII,mBAAmB,GAAGJ,yBAD5B,EAEEG,aAAa,GACTC,mBAAmB,GAAGH,kBADb,GAETG,mBAAmB,GAAGH,kBAJ5B,EAKEE,aAAa,GAAIC,mBAAmB,IAAI,CAA3B,GAAiCA,mBAAmB,IAAI,CALvE,EAME;AACA,UAAMC,iBAAiB,GAAG5I,SAAS,CAAC6I,aAAV,CACxBF,mBADwB,EAExBpD,YAFwB,CAA1B;AAIA,UAAMnD,QAAQ,GAAGpC,SAAS,CAAC8I,iBAAV,CACfF,iBADe,EAEfN,gBAFe,CAAjB;;AAIA,UACElG,QAAQ,IACR6B,wBAAwB,KACtBzC,yBAAyB,CAACsB,kBAA1B,CAA6CC,IAHjD,EAIE;AACA0F,QAAAA,yBAAyB,CAAC5C,IAA1B,CAA+B+C,iBAA/B;AACD,OAND,MAMO,IACL,CAACxG,QAAD,IACA6B,wBAAwB,KACtBzC,yBAAyB,CAACsB,kBAA1B,CAA6CE,IAH1C,EAIL;AACAyF,QAAAA,yBAAyB,CAAC5C,IAA1B,CAA+B+C,iBAA/B;AACD;AACF;;AAED,SAAK3C,mBAAL,CAAyBwC,yBAAzB,EAAoD,IAApD;AAEA7D,IAAAA,yBAAyB,CACvB6D,yBADuB,EAEvBxE,wBAFuB,CAAzB;AAID;;AAED8E,EAAAA,iBAAiB,CAACC,MAAD,EAAuB;AACtC,QAAM;AAAEzD,MAAAA,YAAF;AAAgBV,MAAAA,qBAAhB;AAAuCjD,MAAAA;AAAvC,QAAiD,KAAKF,KAA5D;AACA,QAAM;AAAEG,MAAAA;AAAF,QAAcD,KAApB;AACA,QAAM;AAAEkC,MAAAA;AAAF,QAAsB,KAAKD,KAAjC;;AACA,QAAIC,eAAe,CAAC/B,MAAhB,KAA2B,CAA/B,EAAkC;AAChC;AACD;;AAED,QAAMkH,iBAAiB,GAAG,KAAKC,oBAAL,CAA0BtH,KAA1B,EAAiCC,OAAjC,CAA1B;AACA,QAAMsH,gBAAgB,GAAG,KAAKC,mBAAL,CAAyBxH,KAAzB,EAAgCC,OAAhC,CAAzB;;AACA,QAAIoH,iBAAiB,IAAI,IAArB,IAA6BE,gBAAgB,IAAI,IAArD,EAA2D;AACzD;AACD,KAZqC,CActC;AACA;;;AACA,QAAME,qBAAqB,GAAG,CAC5B,GAAGvF,eADyB,EAE5B2D,IAF4B,CAEvB,CAACC,OAAD,EAAUC,OAAV,KACLqB,MAAM,KAAKxH,yBAAyB,CAAC8H,YAA1B,CAAuCC,GAAlD,IACAP,MAAM,KAAKxH,yBAAyB,CAAC8H,YAA1B,CAAuCE,EADlD,GAEIxJ,SAAS,CAACgG,eAAV,CAA0B0B,OAA1B,EAAmCnC,YAAnC,IACAvF,SAAS,CAACgG,eAAV,CAA0B2B,OAA1B,EAAmCpC,YAAnC,CAHJ,GAIIvF,SAAS,CAACgG,eAAV,CAA0B2B,OAA1B,EAAmCpC,YAAnC,IACAvF,SAAS,CAACgG,eAAV,CAA0B0B,OAA1B,EAAmCnC,YAAnC,CARwB,CAA9B;AAWA,QAAIqC,QAAQ,GAAG,EAAf;;AACA,QAAI6B,mBAA+B,GAAG,MAAMvF,SAA5C;;AAEA,YAAQ8E,MAAR;AACE,WAAKxH,yBAAyB,CAAC8H,YAA1B,CAAuCC,GAA5C;AACEF,QAAAA,qBAAqB,CAAC3D,OAAtB,CAA8B,CAACgE,gBAAD,EAAmB1E,KAAnB,KAA6B;AACzD,cAAM7C,YAAY,GAAGnC,SAAS,CAACgG,eAAV,CACnB0D,gBADmB,EAEnBnE,YAFmB,CAArB;AAIAqC,UAAAA,QAAQ,GAAG5H,SAAS,CAACgI,QAAV,CACT7F,YADS,EAET8G,iBAAiB,GAAGjE,KAFX,EAGT4C,QAHS,CAAX;AAKD,SAVD;;AAWA6B,QAAAA,mBAAmB,GAAG,MAAM;AAC1BvJ,UAAAA,aAAa,CAAC,KAAKqE,IAAN,CAAb;AACA,eAAKA,IAAL,CAAUoF,SAAV,GAAsB,CAAtB;AACD,SAHD;;AAIA;;AACF,WAAKnI,yBAAyB,CAAC8H,YAA1B,CAAuCM,MAA5C;AACEP,QAAAA,qBAAqB,CAAC3D,OAAtB,CAA8B,CAACgE,gBAAD,EAAmB1E,KAAnB,KAA6B;AACzD,cAAM7C,YAAY,GAAGnC,SAAS,CAACgG,eAAV,CACnB0D,gBADmB,EAEnBnE,YAFmB,CAArB;AAIAqC,UAAAA,QAAQ,GAAG5H,SAAS,CAACgI,QAAV,CACT7F,YADS,EAETgH,gBAAgB,GAAGnE,KAFV,EAGT4C,QAHS,CAAX;AAKD,SAVD;;AAWA6B,QAAAA,mBAAmB,GAAG,MAAM;AAC1BvJ,UAAAA,aAAa,CAAC,KAAKqE,IAAN,CAAb;AACA,eAAKA,IAAL,CAAUoF,SAAV,GAAsB,KAAKpF,IAAL,CAAUsF,YAAhC;AACD,SAHD;;AAKA;;AACF,WAAKrI,yBAAyB,CAAC8H,YAA1B,CAAuCE,EAA5C;AACE,YACExJ,SAAS,CAACgG,eAAV,CAA0BqD,qBAAqB,CAAC,CAAD,CAA/C,EAAoD9D,YAApD,MACA0D,iBAFF,CAEoB;AAFpB,UAGE;AACAI,UAAAA,qBAAqB,CAAC3D,OAAtB,CAA8BgE,gBAAgB,IAAI;AAChD,gBAAMvH,YAAY,GAAGnC,SAAS,CAACgG,eAAV,CACnB0D,gBADmB,EAEnBnE,YAFmB,CAArB;AAIAqC,YAAAA,QAAQ,GAAG5H,SAAS,CAACgI,QAAV,CACT7F,YADS,EAETA,YAAY,GAAG,CAFN,EAGTyF,QAHS,CAAX;AAKD,WAVD;AAWD;;AACD;;AACF,WAAKpG,yBAAyB,CAAC8H,YAA1B,CAAuCQ,IAA5C;AACE,YACE9J,SAAS,CAACgG,eAAV,CAA0BqD,qBAAqB,CAAC,CAAD,CAA/C,EAAoD9D,YAApD,MACA4D,gBAFF,CAEmB;AAFnB,UAGE;AACAE,UAAAA,qBAAqB,CAAC3D,OAAtB,CAA8BgE,gBAAgB,IAAI;AAChD,gBAAMvH,YAAY,GAAGnC,SAAS,CAACgG,eAAV,CACnB0D,gBADmB,EAEnBnE,YAFmB,CAArB;AAIAqC,YAAAA,QAAQ,GAAG5H,SAAS,CAACgI,QAAV,CACT7F,YADS,EAETA,YAAY,GAAG,CAFN,EAGTyF,QAHS,CAAX;AAKD,WAVD;AAWD;;AACD;;AACF;AACE;AAzEJ;;AA2EA,QAAIA,QAAQ,CAAC7F,MAAT,GAAkB,CAAtB,EAAyB;AACvB8C,MAAAA,qBAAqB,CAACU,YAAY,CAACwE,MAAb,CAAoBnC,QAApB,CAAD,EAAgC6B,mBAAhC,CAArB;AACD;AACF;;AAEDO,EAAAA,iBAAiB,CAAChB,MAAD,EAAuB;AACtC,QAAM;AAAEpH,MAAAA,KAAF;AAASiD,MAAAA;AAAT,QAAmC,KAAKnD,KAA9C;AACA,QAAM;AAAEG,MAAAA;AAAF,QAAcD,KAApB,CAFsC,CAItC;;AACA,QAAMqI,cAAc,GAAG,EAAvB;AACA,QAAMC,gBAAgB,GAAG,EAAzB;;AACA,SAAK,IAAIhI,UAAU,GAAG,CAAtB,EAAyBA,UAAU,GAAGL,OAAO,CAACE,MAA9C,EAAsDG,UAAU,IAAI,CAApE,EAAuE;AACrE,UAAIN,KAAK,CAACI,eAAN,CAAsBE,UAAtB,CAAJ,EAAuC;AACrC+H,QAAAA,cAAc,CAACpE,IAAf,CAAoB3D,UAApB;AACD,OAFD,MAEO;AACLgI,QAAAA,gBAAgB,CAACrE,IAAjB,CAAsB3D,UAAtB;AACD;AACF,KAbqC,CAetC;;;AACA,QAAMiI,oBAAoB,GAAGF,cAAc,CAACxC,IAAf,CAAoB,CAAC2C,CAAD,EAAIC,CAAJ,KAAU;AACzD,UAAMC,WAAW,GACftB,MAAM,KAAKxH,yBAAyB,CAAC+I,eAA1B,CAA0CC,GADvD;AAEA,UAAMC,KAAK,GAAG5I,OAAO,CAACuI,CAAD,CAAP,CAAWlF,IAAX,CAAgBwF,WAAhB,EAAd;AACA,UAAMC,KAAK,GAAG9I,OAAO,CAACwI,CAAD,CAAP,CAAWnF,IAAX,CAAgBwF,WAAhB,EAAd;AACA,aAAOzK,SAAS,CAACwH,IAAV,CAAegD,KAAf,EAAsBE,KAAtB,EAA6BL,WAA7B,CAAP;AACD,KAN4B,CAA7B,CAhBsC,CAwBtC;;AACA,QAAMM,qBAAqB,GAAG,EAA9B;;AACA,SAAK,IAAI9I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoI,gBAAgB,CAACnI,MAArC,EAA6CD,CAAC,IAAI,CAAlD,EAAqD;AACnD,UAAMI,WAAU,GAAGgI,gBAAgB,CAACpI,CAAD,CAAnC;AACA8I,MAAAA,qBAAqB,CAAC1I,WAAD,CAArB,GAAoCA,WAApC;AACD,KA7BqC,CA+BtC;;;AACA,QAAI2I,WAAW,GAAG,CAAlB;;AACA,SAAK,IAAI/I,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGqI,oBAAoB,CAACpI,MAAzC,EAAiDD,EAAC,IAAI,CAAtD,EAAyD;AACvD,aAAO8I,qBAAqB,CAACC,WAAD,CAArB,IAAsC,IAA7C,EAAmD;AACjDA,QAAAA,WAAW,IAAI,CAAf;AACD;;AAEDD,MAAAA,qBAAqB,CAACC,WAAD,CAArB,GAAqCV,oBAAoB,CAACrI,EAAD,CAAzD;AACD;;AAED,QAAI8F,QAAQ,GAAG,EAAf;AACAgD,IAAAA,qBAAqB,CAAClF,OAAtB,CAA8B,CAACxD,UAAD,EAAa8C,KAAb,KAAuB;AACnD,UAAM7C,YAAY,GAAGnC,SAAS,CAACgG,eAAV,CAA0B9D,UAA1B,EAAsC0F,QAAtC,CAArB;AACAA,MAAAA,QAAQ,GAAG5H,SAAS,CAACgI,QAAV,CAAmB7F,YAAnB,EAAiC6C,KAAjC,EAAwC4C,QAAxC,CAAX;AACD,KAHD;AAIA/C,IAAAA,qBAAqB,CAAC+C,QAAD,CAArB;AACD;;AAEDzE,EAAAA,eAAe,CACb2H,iBADa,EAEblI,KAFa,EAIP;AAAA,QADNmI,sBACM,uEADmB,IACnB;AACNnI,IAAAA,KAAK,CAACU,eAAN;AACAV,IAAAA,KAAK,CAACoI,aAAN,CAAoBtE,KAApB;AAEA,QAAM;AAAE5C,MAAAA,eAAF;AAAmBC,MAAAA;AAAnB,QAA2C,KAAKF,KAAtD;AACA,QAAM0C,iBAAiB,GAAGvG,SAAS,CAACuG,iBAAV,CAA4B3D,KAA5B,CAA1B;AACA,QAAM4D,cAAc,GAAG5D,KAAK,CAAC6D,QAA7B;AACA,QAAMpE,UAAU,GAAGyB,eAAe,CAAC8B,QAAhB,CAAyBkF,iBAAzB,CAAnB;AACA,QAAMG,gBAAgB,GAAG,CAACH,iBAAD,CAAzB;;AAEA,QAAIzI,UAAU,IAAIkE,iBAAlB,EAAqC;AACnC,WAAK2E,wBAAL,CAA8BJ,iBAA9B;AACA;AACD;;AAED,QAAIzI,UAAU,IAAIyB,eAAe,CAAC/B,MAAhB,KAA2B,CAAzC,IAA8CgJ,sBAAlD,EAA0E;AACxE,WAAKG,wBAAL,CAA8BJ,iBAA9B;AACA;AACD;;AAED,QAAItE,cAAJ,EAAoB;AAClB,UAAM;AAAEjB,QAAAA;AAAF,UAAmB,KAAK7D,KAA9B;AACA,UAAMyJ,kBAAkB,GACtBpH,mBAAmB,CAACA,mBAAmB,CAAChC,MAApB,GAA6B,CAA9B,CADrB;AAEA,UAAMqJ,8BAA8B,GAAGpL,SAAS,CAACgG,eAAV,CACrCmF,kBADqC,EAErC5F,YAFqC,CAAvC;AAIA,UAAM8F,wBAAwB,GAAGrL,SAAS,CAACgG,eAAV,CAC/B8E,iBAD+B,EAE/BvF,YAF+B,CAAjC;AAIA,UAAMmD,aAAa,GACjB2C,wBAAwB,GAAGD,8BAD7B;AAEA,UAAME,gBAAgB,GAAG,EAAzB;;AACA,WACE,IAAIxJ,CAAC,GAAGsJ,8BADV,EAEE1C,aAAa,GACT5G,CAAC,GAAGuJ,wBADK,GAETvJ,CAAC,GAAGuJ,wBAJV,EAKE3C,aAAa,GAAI5G,CAAC,IAAI,CAAT,GAAeA,CAAC,IAAI,CALnC,EAME;AACAwJ,QAAAA,gBAAgB,CAACzF,IAAjB,CAAsB7F,SAAS,CAAC6I,aAAV,CAAwB/G,CAAxB,EAA2ByD,YAA3B,CAAtB;AACD;;AACD+F,MAAAA,gBAAgB,CAAC5F,OAAjB,CAAyBX,MAAM,IAAI;AACjC,YAAI,CAACjB,eAAe,CAAC8B,QAAhB,CAAyBb,MAAzB,CAAL,EAAuC;AACrCkG,UAAAA,gBAAgB,CAACpF,IAAjB,CAAsBd,MAAtB;AACD;AACF,OAJD;AAKD;;AAED,SAAKkB,mBAAL,CACEgF,gBADF,EAEE1E,iBAAiB,IAAIC,cAFvB;AAID;;AAEDP,EAAAA,mBAAmB,CACjBgF,gBADiB,EAGX;AAAA,QADNM,aACM,uEADU,KACV;AACN,QAAM;AAAEzH,MAAAA,eAAF;AAAmBC,MAAAA;AAAnB,QAA2C,KAAKF,KAAtD;AACA,QAAM2H,kBAAkB,GAAGD,aAAa,GACpCzH,eAAe,CAACiG,MAAhB,CAAuBkB,gBAAvB,CADoC,GAEpCA,gBAFJ;AAGA,QAAMQ,sBAAsB,GAAGF,aAAa,GACxCxH,mBAAmB,CAACgG,MAApB,CAA2BkB,gBAA3B,CADwC,GAExCA,gBAFJ;AAIA,SAAK9F,QAAL,CAAc;AACZrB,MAAAA,eAAe,EAAE0H,kBADL;AAEZzH,MAAAA,mBAAmB,EAAE0H;AAFT,KAAd;AAID;;AAEDP,EAAAA,wBAAwB,CAAChJ,UAAD,EAA+B;AACrD,QAAM;AAAE4B,MAAAA,eAAF;AAAmBC,MAAAA;AAAnB,QAA2C,KAAKF,KAAtD;AACA,QAAM2H,kBAAkB,GAAG,CAAC,GAAG1H,eAAJ,CAA3B;AAEA0H,IAAAA,kBAAkB,CAACE,MAAnB,CACEF,kBAAkB,CAACG,SAAnB,CAA6BC,QAAQ,IAAIA,QAAQ,KAAK1J,UAAtD,CADF,EAEE,CAFF;AAIA,QAAMiJ,kBAAkB,GACtBpH,mBAAmB,CAACA,mBAAmB,CAAChC,MAApB,GAA6B,CAA9B,CADrB;AAEA,QAAM0J,sBAAsB,GAAG,CAAC,GAAG1H,mBAAJ,CAA/B;;AACA,QAAIoH,kBAAkB,KAAKjJ,UAA3B,EAAuC;AACrCuJ,MAAAA,sBAAsB,CAACI,GAAvB;AACD;;AACD,SAAK1G,QAAL,CAAc;AACZrB,MAAAA,eAAe,EAAE0H,kBADL;AAEZzH,MAAAA,mBAAmB,EAAE0H;AAFT,KAAd;AAID;;AAEDK,EAAAA,0BAA0B,GAAmB;AAC3C,QAAM;AAAElK,MAAAA,KAAF;AAAS0G,MAAAA,gBAAT;AAA2B/C,MAAAA;AAA3B,QAA4C,KAAK7D,KAAvD;AACA,QAAM;AAAEG,MAAAA;AAAF,QAAcD,KAApB;AACA,QAAM;AACJkC,MAAAA,eADI;AAEJM,MAAAA,eAFI;AAGJC,MAAAA;AAHI,QAIF,KAAKR,KAJT;AAMA,QAAMkI,QAAQ,GAAG,EAAjB;AACA,QAAIC,UAAU,GAAG,KAAjB;;AACA,SACE,IAAI7J,YAAY,GAAG,CADrB,EAEEA,YAAY,GAAGN,OAAO,CAACE,MAFzB,EAGEI,YAAY,IAAI,CAHlB,EAIE;AACA,UAAMD,UAAU,GAAGlC,SAAS,CAAC6I,aAAV,CAAwB1G,YAAxB,EAAsCoD,YAAtC,CAAnB;AACA,UAAMR,MAAM,GAAGlD,OAAO,CAACK,UAAD,CAAtB;AACA,UAAM+J,SAAS,GAAGrK,KAAK,CAACI,eAAN,CAAsBE,UAAtB,CAAlB;;AACA,UAAIC,YAAY,GAAG,CAAf,IAAoB8J,SAAS,KAAKD,UAAtC,EAAkD;AAChDD,QAAAA,QAAQ,CAAClG,IAAT,eAAc,+BAAd;AACD;;AACD,UAAIoG,SAAJ,EAAe;AACb,YAAM7J,QAAQ,GAAGkG,gBAAgB,CAAC4D,GAAjB,CAAqBhK,UAArB,MAAqC,CAAtD;AACA,YAAMG,UAAU,GAAGyB,eAAe,CAAC8B,QAAhB,CAAyB1D,UAAzB,CAAnB;AACA,YAAMK,SAAS,GAAG8B,mBAAmB,KAAKnC,UAA1C;AACA,YAAMM,cAAc,GAClB4B,eAAe,IAAI7B,SAAnB,IAAgCuB,eAAe,CAAC/B,MAAhB,GAAyB,CAAzD,GACI+B,eAAe,CAAC/B,MADpB,GAEI,IAHN;AAIAgK,QAAAA,QAAQ,CAAClG,IAAT,CACE,KAAKsG,4BAAL,CACEpH,MAAM,CAACG,IADT,EAEEhD,UAFF,EAGEC,YAHF,EAIEC,QAJF,EAKEC,UALF,EAME+B,eANF,EAOE7B,SAPF,EAQEC,cARF,CADF;AAYD,OApBD,MAoBO;AACLuJ,QAAAA,QAAQ,CAAClG,IAAT,CAAc,KAAKuG,mBAAL,CAAyBrH,MAAM,CAACG,IAAhC,CAAd;AACD;;AAED8G,MAAAA,UAAU,GAAGC,SAAb;AACD;;AAED,WAAOF,QAAP;AACD;;AA+HDM,EAAAA,MAAM,GAAiB;AACrB,QAAM;AAAEzK,MAAAA,KAAF;AAAS0G,MAAAA,gBAAT;AAA2B1D,MAAAA;AAA3B,QAAyD,KAAKlD,KAApE;AACA,QAAM;AAAEoC,MAAAA,eAAF;AAAmBQ,MAAAA;AAAnB,QAAoC,KAAKT,KAA/C;AACA,QAAM;AAAEhC,MAAAA;AAAF,QAAcD,KAApB;AACA,QAAM0K,WAAW,GAAGxI,eAAe,CAAC/B,MAAhB,KAA2B,CAA/C;AACA,QAAMwK,eAAe,GAAGD,WAAW,GAC/BzK,OAAO,CAACiD,GAAR,CAAY,CAAC0H,CAAD,EAAI1K,CAAJ,KAAUA,CAAtB,EAAyB2K,MAAzB,CAAgC3K,CAAC,IAAIF,KAAK,CAACI,eAAN,CAAsBF,CAAtB,CAArC,CAD+B,GAE/B,CAAC,GAAGgC,eAAJ,CAFJ;AAGA,QAAM4I,YAAY,GAAG1M,SAAS,CAAC2M,qBAAV,CACnBJ,eADmB,EAEnBjE,gBAFmB,CAArB;AAIA,QAAMsE,kBAAkB,GAAGF,YAAY,GAAG,eAAH,GAAqB,eAA5D;AAEA,QAAMG,WAAW,GAAG,KAAKf,0BAAL,EAApB;AAEA,wBACE;AACE,MAAA,IAAI,EAAC,MADP;AAEE,MAAA,SAAS,EAAC,6BAFZ;AAGE,MAAA,QAAQ,EAAE,CAHZ;AAIE,MAAA,SAAS,EAAE,MAAM;AACf,aAAK5I,2BAAL;AACD,OANH;AAOE,MAAA,YAAY,EAAE,MAAM;AAClB,aAAKA,2BAAL;AACD;AATH,oBAWE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,cAFZ;AAGE,MAAA,OAAO,EAAE,MAAM;AACb0B,QAAAA,yBAAyB,CACvB2H,eADuB,EAEvBG,YAAY,GACRlL,yBAAyB,CAACsB,kBAA1B,CAA6CC,IADrC,GAERvB,yBAAyB,CAACsB,kBAA1B,CAA6CE,IAJ1B,CAAzB;AAMD;AAVH,oBAYE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAE0J,YAAY,GAAGrM,UAAH,GAAgBD;AAAnD,MAZF,eAaE,oBAAC,OAAD,mCAbF,EAcGkM,WAAW,GAAG,YAAH,GAAkBM,kBAdhC,CADF,eAkBE,8CACE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,yBAFZ;AAGE,MAAA,OAAO,EAAE,MAAM;AACb,aAAKjI,uBAAL;AACD;AALH,6BAQE,oBAAC,OAAD,2BARF,CADF,eAWE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,4BAFZ;AAGE,MAAA,OAAO,EAAE,MAAM;AACb,aAAKqF,iBAAL,CACExI,yBAAyB,CAAC+I,eAA1B,CAA0CC,GAD5C;AAGD;AAPH,oBASE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAElK;AAAvB,MATF,eAUE,oBAAC,OAAD,yBAVF,CAXF,eAuBE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,4BAFZ;AAGE,MAAA,OAAO,EAAE,MAAM;AACb,aAAK0J,iBAAL,CACExI,yBAAyB,CAAC+I,eAA1B,CAA0CuC,GAD5C;AAGD;AAPH,oBASE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAEvM;AAAvB,MATF,eAUE,oBAAC,OAAD,0BAVF,CAvBF,eAmCE;AAAM,MAAA,SAAS,EAAC;AAAhB,MAnCF,eAoCE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,4BAFZ;AAGE,MAAA,OAAO,EAAE,MAAM;AACb,aAAKwI,iBAAL,CACEvH,yBAAyB,CAAC8H,YAA1B,CAAuCE,EADzC;AAGD,OAPH;AAQE,MAAA,QAAQ,EAAE8C;AARZ,oBAUE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAE5L;AAAvB,MAVF,eAWE,oBAAC,OAAD,4BAXF,CApCF,eAiDE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,4BAFZ;AAGE,MAAA,OAAO,EAAE,MAAM;AACb,aAAKqI,iBAAL,CACEvH,yBAAyB,CAAC8H,YAA1B,CAAuCQ,IADzC;AAGD,OAPH;AAQE,MAAA,QAAQ,EAAEwC;AARZ,oBAUE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAE3L;AAAvB,MAVF,eAWE,oBAAC,OAAD,8BAXF,CAjDF,eA8DE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,4BAFZ;AAGE,MAAA,OAAO,EAAE,MAAM;AACb,aAAKoI,iBAAL,CACEvH,yBAAyB,CAAC8H,YAA1B,CAAuCC,GADzC;AAGD,OAPH;AAQE,MAAA,QAAQ,EAAE+C;AARZ,oBAUE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAE9L;AAAvB,MAVF,eAWE,oBAAC,OAAD,gCAXF,CA9DF,eA2EE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,4BAFZ;AAGE,MAAA,OAAO,EAAE,MAAM;AACb,aAAKuI,iBAAL,CACEvH,yBAAyB,CAAC8H,YAA1B,CAAuCM,MADzC;AAGD,OAPH;AAQE,MAAA,QAAQ,EAAE0C;AARZ,oBAUE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAE7L;AAAvB,MAVF,eAWE,oBAAC,OAAD,mCAXF,CA3EF,CAlBF,CAXF,eAuHE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE,oBAAC,WAAD;AACE,MAAA,SAAS,EAAC,OADZ;AAEE,MAAA,KAAK,EAAE6D,YAFT;AAGE,MAAA,UAAU,EAAEA,YAAY,GAAGR,eAAe,CAAC/B,MAAnB,GAA4BmC,SAHtD;AAIE,MAAA,QAAQ,EAAE,KAAKT;AAJjB,MADF,CAvHF,eA+HE,oBAAC,eAAD;AACE,MAAA,WAAW,EAAE,KAAKE,wBADpB;AAEE,MAAA,SAAS,EAAE,KAAKC;AAFlB,oBAIE,oBAAC,SAAD;AAAW,MAAA,WAAW,EAAC;AAAvB,OACG,CAACnB,QAAD,EAAWsK,QAAX;AAAA;AACC;AACA;AACE,MAAA,IAAI,EAAC,MADP;AAEE,MAAA,SAAS,EAAEhN,UAAU,CAAC,0BAAD,EAA6B;AAChDuC,QAAAA,UAAU,EAAEyK,QAAQ,CAACC;AAD2B,OAA7B,CAFvB;AAKE,MAAA,GAAG,EAAEvK,QAAQ,CAACC,QALhB,CAME;;AANF,OAOMD,QAAQ,CAACwK,cAPf,gBASE;AACE,MAAA,SAAS,EAAC,aADZ;AAEE,MAAA,GAAG,EAAE1I,IAAI,IAAI;AACX,aAAKA,IAAL,GAAYA,IAAZ;AACD;AAJH,OAMGsI,WANH,EAOGpK,QAAQ,CAACyK,WAPZ,CATF,CAHJ,CAJF,CA/HF,CADF;AA+JD;;AA57BD;;gBAHI1L,yB,wBAIwB;AAAEuB,EAAAA,IAAI,EAAE,MAAR;AAAgBC,EAAAA,IAAI,EAAE;AAAtB,C;;gBAJxBxB,yB,qBAMqB;AAAEsL,EAAAA,GAAG,EAAE,KAAP;AAActC,EAAAA,GAAG,EAAE;AAAnB,C;;gBANrBhJ,yB,kBAQkB;AACpB+H,EAAAA,GAAG,EAAE,KADe;AAEpBK,EAAAA,MAAM,EAAE,QAFY;AAGpBJ,EAAAA,EAAE,EAAE,IAHgB;AAIpBM,EAAAA,IAAI,EAAE;AAJc,C;;gBARlBtI,yB,2BAe2B;AAAE2L,EAAAA,GAAG,EAAE,KAAP;AAAcC,EAAAA,SAAS,EAAE;AAAzB,C;;gBAf3B5L,yB,kBAiBkB;AACpB+D,EAAAA,YAAY,EAAE,EADM;AAEpBX,EAAAA,yBAAyB,EAAE,MAAYV,SAFnB;AAGpBW,EAAAA,qBAAqB,EAAE,MAAYX;AAHf,C;;AAi7BxB,eAAe1C,yBAAf","sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { ChangeEvent, Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport {\n GridUtils,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n VisibleIndex,\n} from '@deephaven/grid';\nimport { TextUtils, assertNotNull } from '@deephaven/utils';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhEye,\n dhEyeSlash,\n dhSortAlphaDown,\n dhSortAlphaUp,\n dhArrowToTop,\n dhArrowToBottom,\n vsChevronUp,\n vsChevronDown,\n vsGripper,\n} from '@deephaven/icons';\nimport {\n DragDropContext,\n Draggable,\n DragStart,\n Droppable,\n DropResult,\n} from 'react-beautiful-dnd';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport { SearchInput, Tooltip } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport './VisibilityOrderingBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\nimport { ColumnName } from '../CommonTypes';\n\nconst log = Log.module('VisibilityOrderingBuilder');\nconst DEBOUNCE_SEARCH_COLUMN = 150;\n\ninterface VisibilityOrderingBuilderProps {\n model: IrisGridModel;\n movedColumns: MoveOperation[];\n userColumnWidths: ModelSizeMap;\n onColumnVisibilityChanged: (\n columns: VisibleIndex[],\n options?: VisibilityOptionType\n ) => void;\n onMovedColumnsChanged: (operations: MoveOperation[], cb?: () => void) => void;\n}\n\ninterface VisibilityOrderingBuilderState {\n selectedColumns: ModelIndex[]; // model index of selected column(s)\n lastSelectedColumns: ModelIndex[];\n isDraggingVisibility: boolean;\n visibilityDraggingOption?: VisibilityOptionType;\n visibilityDraggingStartColumn: number | null;\n isDraggingOrder: boolean;\n orderDraggingColumn: number | null;\n searchFilter: string;\n}\n\ntype Values<T> = T[keyof T];\n\nexport type VisibilityOptionType = Values<\n typeof VisibilityOrderingBuilder.VISIBILITY_OPTIONS\n>;\n\nclass VisibilityOrderingBuilder extends Component<\n VisibilityOrderingBuilderProps,\n VisibilityOrderingBuilderState\n> {\n static VISIBILITY_OPTIONS = { SHOW: 'SHOW', HIDE: 'HIDE' } as const;\n\n static SORTING_OPTIONS = { DSC: 'DSC', ASC: 'ASC' };\n\n static MOVE_OPTIONS = {\n TOP: 'TOP',\n BOTTOM: 'BOTTOM',\n UP: 'UP',\n DOWN: 'DOWN',\n };\n\n static COLUMN_CHANGE_OPTIONS = { ALL: 'ALL', SELECTION: 'SELECTION' };\n\n static defaultProps = {\n movedColumns: [],\n onColumnVisibilityChanged: (): void => undefined,\n onMovedColumnsChanged: (): void => undefined,\n };\n\n constructor(props: VisibilityOrderingBuilderProps) {\n super(props);\n\n this.handleSearchInputChange = this.handleSearchInputChange.bind(this);\n this.searchColumns = this.searchColumns.bind(this);\n this.handleOrderDraggingStart = this.handleOrderDraggingStart.bind(this);\n this.handleOrderDraggingEnd = this.handleOrderDraggingEnd.bind(this);\n\n this.state = {\n selectedColumns: [], // model index of selected column(s)\n lastSelectedColumns: [],\n isDraggingVisibility: false,\n visibilityDraggingOption: undefined,\n visibilityDraggingStartColumn: null,\n isDraggingOrder: false,\n orderDraggingColumn: null,\n searchFilter: '',\n };\n\n this.list = null;\n }\n\n componentWillUnmount(): void {\n this.debouncedSearchColumns.cancel();\n }\n\n list: HTMLDivElement | null;\n\n debouncedSearchColumns = debounce(this.searchColumns, DEBOUNCE_SEARCH_COLUMN);\n\n resetVisibilityOrdering(): void {\n const {\n model,\n onColumnVisibilityChanged,\n onMovedColumnsChanged,\n } = this.props;\n const { columns } = model;\n\n onColumnVisibilityChanged(\n columns.map(column => {\n const index = model.getColumnIndexByName(column.name);\n assertNotNull(index);\n return index;\n }),\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n );\n this.setState({\n selectedColumns: [],\n lastSelectedColumns: [],\n searchFilter: '',\n });\n onMovedColumnsChanged([]);\n }\n\n resetSelection(): void {\n const { isDraggingOrder } = this.state;\n // don't reset selection if user is dragging column(s)\n if (isDraggingOrder) {\n return;\n }\n this.setState({ selectedColumns: [], lastSelectedColumns: [] });\n }\n\n handleSearchInputChange(event: ChangeEvent<HTMLInputElement>): void {\n const searchFilter = event.target.value;\n this.setState({ searchFilter });\n if (!searchFilter) {\n this.debouncedSearchColumns.cancel();\n this.resetSelection();\n return;\n }\n this.debouncedSearchColumns(searchFilter);\n }\n\n searchColumns(searchFilter: string): void {\n const { model, movedColumns } = this.props;\n const { columns } = model;\n\n const columnsMatch = [] as number[];\n let visibleIndexToFocus = columns.length;\n columns.forEach((column, index) => {\n const columnName = column.name.toLowerCase();\n if (\n model.isColumnMovable(index) &&\n columnName.includes(searchFilter.toLowerCase())\n ) {\n columnsMatch.push(index);\n visibleIndexToFocus = Math.min(\n visibleIndexToFocus,\n GridUtils.getVisibleIndex(index, movedColumns)\n );\n }\n });\n this.addColumnToSelected(columnsMatch, false);\n if (columnsMatch.length > 0) {\n const columnItemToFocus = this.list?.querySelectorAll('.column-item')[\n visibleIndexToFocus\n ];\n columnItemToFocus?.scrollIntoView({ block: 'center' });\n }\n }\n\n handleVisibilityKeyDown(\n modelIndex: ModelIndex,\n visibilityOption: VisibilityOptionType\n ): void {\n const { onColumnVisibilityChanged } = this.props;\n onColumnVisibilityChanged([modelIndex], visibilityOption);\n }\n\n handleVisibilityDraggingStart(\n modelIndex: ModelIndex,\n visibilityOption: VisibilityOptionType,\n event: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ): void {\n const { onColumnVisibilityChanged, movedColumns } = this.props;\n\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n\n if (isModifierKeyDown || isShiftKeyDown) return;\n\n onColumnVisibilityChanged([modelIndex], visibilityOption);\n\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n\n this.setState({\n isDraggingVisibility: true,\n visibilityDraggingOption: visibilityOption,\n visibilityDraggingStartColumn: visibleIndex,\n });\n\n this.addColumnToSelected([modelIndex]);\n }\n\n handleVisibilityDraggingEnd(\n event: React.MouseEvent<HTMLButtonElement, MouseEvent> | null = null\n ): void {\n if (event) (event.target as HTMLButtonElement).focus();\n\n const { isDraggingVisibility } = this.state;\n if (isDraggingVisibility) {\n this.setState({\n isDraggingVisibility: false,\n visibilityDraggingOption: undefined,\n visibilityDraggingStartColumn: null,\n });\n }\n }\n\n handleOrderDraggingStart(start: DragStart): void {\n document.documentElement.classList.add('drag-pointer-events-none');\n\n const { selectedColumns } = this.state;\n const {\n draggableId,\n source: { index: startIndex },\n } = start;\n const orderDraggingColumn = parseInt(draggableId, 10);\n\n // we want to clear focus from any eye toggles\n // however to maintain react-beautiful-dnd keyboard functionality the only valid\n // focus target is the drag target itself, so we set it there instead of blurring\n (this.list?.querySelectorAll('.column-item')[\n startIndex\n ] as HTMLDivElement).focus();\n\n if (!selectedColumns.includes(orderDraggingColumn)) {\n this.setState({\n isDraggingOrder: true,\n orderDraggingColumn,\n selectedColumns: [orderDraggingColumn],\n });\n return;\n }\n this.setState({ isDraggingOrder: true, orderDraggingColumn });\n }\n\n handleOrderDraggingEnd(result: DropResult): void {\n document.documentElement.classList.remove('drag-pointer-events-none');\n\n const { movedColumns, onMovedColumnsChanged } = this.props;\n const { selectedColumns, orderDraggingColumn } = this.state;\n\n // reset dragging state\n this.setState({ isDraggingOrder: false, orderDraggingColumn: null });\n\n // if dropped outside the list, re-focus on the dragged item if necessary\n if (!result.destination) {\n return;\n }\n\n const { index: destinationIndex } = result.destination;\n\n const selectedColumnsSortByVisibleIndex = [...selectedColumns].sort(\n (columnA, columnB) =>\n GridUtils.getVisibleIndex(columnA, movedColumns) -\n GridUtils.getVisibleIndex(columnB, movedColumns)\n );\n\n let newMoves = [...movedColumns];\n assertNotNull(orderDraggingColumn);\n const draggingVisibleIndex = GridUtils.getVisibleIndex(\n orderDraggingColumn,\n newMoves\n );\n const upper: number[] = [];\n const lower: number[] = [];\n\n // move the dragged column to destination first,\n newMoves = GridUtils.moveItem(\n draggingVisibleIndex,\n destinationIndex,\n newMoves\n );\n\n // split selected columns into two parts on drop destination index: top & bottom\n selectedColumnsSortByVisibleIndex.forEach(column => {\n const columnVisibleIndex = GridUtils.getVisibleIndex(column, newMoves);\n if (column === orderDraggingColumn) {\n return;\n }\n if (columnVisibleIndex < destinationIndex) {\n upper.push(column);\n } else {\n lower.push(column);\n }\n });\n\n // for the top part, move column(s) to the destination index\n upper.forEach(column => {\n const visibleIndex = GridUtils.getVisibleIndex(column, newMoves);\n newMoves = GridUtils.moveItem(visibleIndex, destinationIndex, newMoves);\n });\n\n // for the bottom part, in reverse order, move column(s) to the drop destination index if there's no top column(s) or the dragged column is not dropped upside\n // otherwise, move column(s) under the dropping destination index\n const bottomDestinationIndex =\n upper.length > 0 || draggingVisibleIndex > destinationIndex\n ? destinationIndex + 1\n : destinationIndex;\n\n lower.reverse().forEach(column => {\n const visibleIndex = GridUtils.getVisibleIndex(column, newMoves);\n newMoves = GridUtils.moveItem(\n visibleIndex,\n bottomDestinationIndex,\n newMoves\n );\n });\n\n onMovedColumnsChanged(newMoves);\n log.debug('move column order by drag & drop', newMoves);\n }\n\n handleMouseEnter(\n targetModelIndex: ModelIndex,\n event: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ): void {\n const {\n onColumnVisibilityChanged,\n movedColumns,\n userColumnWidths,\n } = this.props;\n const {\n isDraggingVisibility,\n visibilityDraggingOption,\n visibilityDraggingStartColumn: draggingStartVisibleIndex,\n } = this.state;\n const targetVisibleIndex = GridUtils.getVisibleIndex(\n targetModelIndex,\n movedColumns\n );\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n\n if (!isDraggingVisibility || isModifierKeyDown || isShiftKeyDown) {\n return;\n }\n\n (event.target as HTMLButtonElement).focus();\n\n // browser can skip mouseEnter / mouseMove event if user moves the mouse too fast\n // try to check columns between dragging start index to current index to compensate missing event,\n const columnsToChangeVisibility = [targetModelIndex];\n assertNotNull(draggingStartVisibleIndex);\n const checkDownward = targetVisibleIndex > draggingStartVisibleIndex;\n\n for (\n let visibleIndexToCheck = draggingStartVisibleIndex;\n checkDownward\n ? visibleIndexToCheck < targetVisibleIndex\n : visibleIndexToCheck > targetVisibleIndex;\n checkDownward ? (visibleIndexToCheck += 1) : (visibleIndexToCheck -= 1)\n ) {\n const modelIndexToCheck = GridUtils.getModelIndex(\n visibleIndexToCheck,\n movedColumns\n );\n const isHidden = GridUtils.checkColumnHidden(\n modelIndexToCheck,\n userColumnWidths\n );\n if (\n isHidden &&\n visibilityDraggingOption ===\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n ) {\n columnsToChangeVisibility.push(modelIndexToCheck);\n } else if (\n !isHidden &&\n visibilityDraggingOption ===\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n ) {\n columnsToChangeVisibility.push(modelIndexToCheck);\n }\n }\n\n this.addColumnToSelected(columnsToChangeVisibility, true);\n\n onColumnVisibilityChanged(\n columnsToChangeVisibility,\n visibilityDraggingOption\n );\n }\n\n handleMoveColumns(option: string): void {\n const { movedColumns, onMovedColumnsChanged, model } = this.props;\n const { columns } = model;\n const { selectedColumns } = this.state;\n if (selectedColumns.length === 0) {\n return;\n }\n\n const firstMovableIndex = this.getFirstMovableIndex(model, columns);\n const lastMovableIndex = this.getLastMovableIndex(model, columns);\n if (firstMovableIndex == null || lastMovableIndex == null) {\n return;\n }\n\n // for moving up and to the top, move column(s) in visibility index order\n // for moving down and to the bottom, move column(s) in reverse visibility index order\n const sortedSelectedColumns = [\n ...selectedColumns,\n ].sort((columnA, columnB) =>\n option === VisibilityOrderingBuilder.MOVE_OPTIONS.TOP ||\n option === VisibilityOrderingBuilder.MOVE_OPTIONS.UP\n ? GridUtils.getVisibleIndex(columnA, movedColumns) -\n GridUtils.getVisibleIndex(columnB, movedColumns)\n : GridUtils.getVisibleIndex(columnB, movedColumns) -\n GridUtils.getVisibleIndex(columnA, movedColumns)\n );\n\n let newMoves = [] as MoveOperation[];\n let scrollListAfterMove: () => void = () => undefined;\n\n switch (option) {\n case VisibilityOrderingBuilder.MOVE_OPTIONS.TOP:\n sortedSelectedColumns.forEach((columnModelIndex, index) => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n firstMovableIndex + index,\n newMoves\n );\n });\n scrollListAfterMove = () => {\n assertNotNull(this.list);\n this.list.scrollTop = 0;\n };\n break;\n case VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM:\n sortedSelectedColumns.forEach((columnModelIndex, index) => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n lastMovableIndex - index,\n newMoves\n );\n });\n scrollListAfterMove = () => {\n assertNotNull(this.list);\n this.list.scrollTop = this.list.scrollHeight;\n };\n\n break;\n case VisibilityOrderingBuilder.MOVE_OPTIONS.UP:\n if (\n GridUtils.getVisibleIndex(sortedSelectedColumns[0], movedColumns) !==\n firstMovableIndex // check if the first visible column has reached top\n ) {\n sortedSelectedColumns.forEach(columnModelIndex => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n visibleIndex - 1,\n newMoves\n );\n });\n }\n break;\n case VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN:\n if (\n GridUtils.getVisibleIndex(sortedSelectedColumns[0], movedColumns) !==\n lastMovableIndex // check if the last visible column has reached bottom\n ) {\n sortedSelectedColumns.forEach(columnModelIndex => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n visibleIndex + 1,\n newMoves\n );\n });\n }\n break;\n default:\n break;\n }\n if (newMoves.length > 0) {\n onMovedColumnsChanged(movedColumns.concat(newMoves), scrollListAfterMove);\n }\n }\n\n handleSortColumns(option: string): void {\n const { model, onMovedColumnsChanged } = this.props;\n const { columns } = model;\n\n // We can't move the immovable columns when sorting, so separate them out first\n const movableColumns = [];\n const immovableColumns = [];\n for (let modelIndex = 0; modelIndex < columns.length; modelIndex += 1) {\n if (model.isColumnMovable(modelIndex)) {\n movableColumns.push(modelIndex);\n } else {\n immovableColumns.push(modelIndex);\n }\n }\n\n // Sort all the movable columns\n const movableColumnsSorted = movableColumns.sort((a, b) => {\n const isAscending =\n option === VisibilityOrderingBuilder.SORTING_OPTIONS.ASC;\n const aName = columns[a].name.toUpperCase();\n const bName = columns[b].name.toUpperCase();\n return TextUtils.sort(aName, bName, isAscending);\n });\n\n // Place all the immovable columns where they need to be\n const modelIndexAlphaSorted = [];\n for (let i = 0; i < immovableColumns.length; i += 1) {\n const modelIndex = immovableColumns[i];\n modelIndexAlphaSorted[modelIndex] = modelIndex;\n }\n\n // Then the rest of the sorted columns can be put in the empty spaces\n let insertIndex = 0;\n for (let i = 0; i < movableColumnsSorted.length; i += 1) {\n while (modelIndexAlphaSorted[insertIndex] != null) {\n insertIndex += 1;\n }\n\n modelIndexAlphaSorted[insertIndex] = movableColumnsSorted[i];\n }\n\n let newMoves = [] as MoveOperation[];\n modelIndexAlphaSorted.forEach((modelIndex, index) => {\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, newMoves);\n newMoves = GridUtils.moveItem(visibleIndex, index, newMoves);\n });\n onMovedColumnsChanged(newMoves);\n }\n\n handleItemClick(\n modelIndexClicked: ModelIndex,\n event: React.MouseEvent<HTMLDivElement | HTMLButtonElement, MouseEvent>,\n removeSelectionOnClick = true\n ): void {\n event.stopPropagation();\n event.currentTarget.focus();\n\n const { selectedColumns, lastSelectedColumns } = this.state;\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n const isSelected = selectedColumns.includes(modelIndexClicked);\n const columnsToBeAdded = [modelIndexClicked];\n\n if (isSelected && isModifierKeyDown) {\n this.removeColumnFromSelected(modelIndexClicked);\n return;\n }\n\n if (isSelected && selectedColumns.length === 1 && removeSelectionOnClick) {\n this.removeColumnFromSelected(modelIndexClicked);\n return;\n }\n\n if (isShiftKeyDown) {\n const { movedColumns } = this.props;\n const lastSelectedColumn =\n lastSelectedColumns[lastSelectedColumns.length - 1];\n const lastSelectedColumnVisibleIndex = GridUtils.getVisibleIndex(\n lastSelectedColumn,\n movedColumns\n );\n const visibleIndexToBeSelected = GridUtils.getVisibleIndex(\n modelIndexClicked,\n movedColumns\n );\n const checkDownward =\n visibleIndexToBeSelected > lastSelectedColumnVisibleIndex;\n const columnsInBetween = [];\n for (\n let i = lastSelectedColumnVisibleIndex;\n checkDownward\n ? i < visibleIndexToBeSelected\n : i > visibleIndexToBeSelected;\n checkDownward ? (i += 1) : (i -= 1)\n ) {\n columnsInBetween.push(GridUtils.getModelIndex(i, movedColumns));\n }\n columnsInBetween.forEach(column => {\n if (!selectedColumns.includes(column)) {\n columnsToBeAdded.push(column);\n }\n });\n }\n\n this.addColumnToSelected(\n columnsToBeAdded,\n isModifierKeyDown || isShiftKeyDown\n );\n }\n\n addColumnToSelected(\n columnsToBeAdded: ModelIndex[],\n addToExisting = false\n ): void {\n const { selectedColumns, lastSelectedColumns } = this.state;\n const newSelectedColumns = addToExisting\n ? selectedColumns.concat(columnsToBeAdded)\n : columnsToBeAdded;\n const newLastSelectedColumns = addToExisting\n ? lastSelectedColumns.concat(columnsToBeAdded)\n : columnsToBeAdded;\n\n this.setState({\n selectedColumns: newSelectedColumns,\n lastSelectedColumns: newLastSelectedColumns,\n });\n }\n\n removeColumnFromSelected(modelIndex: ModelIndex): void {\n const { selectedColumns, lastSelectedColumns } = this.state;\n const newSelectedColumns = [...selectedColumns];\n\n newSelectedColumns.splice(\n newSelectedColumns.findIndex(selected => selected === modelIndex),\n 1\n );\n const lastSelectedColumn =\n lastSelectedColumns[lastSelectedColumns.length - 1];\n const newLastSelectedColumns = [...lastSelectedColumns];\n if (lastSelectedColumn === modelIndex) {\n newLastSelectedColumns.pop();\n }\n this.setState({\n selectedColumns: newSelectedColumns,\n lastSelectedColumns: newLastSelectedColumns,\n });\n }\n\n makeVisibilityOrderingList(): ReactElement[] {\n const { model, userColumnWidths, movedColumns } = this.props;\n const { columns } = model;\n const {\n selectedColumns,\n isDraggingOrder,\n orderDraggingColumn,\n } = this.state;\n\n const elements = [];\n let wasMovable = false;\n for (\n let visibleIndex = 0;\n visibleIndex < columns.length;\n visibleIndex += 1\n ) {\n const modelIndex = GridUtils.getModelIndex(visibleIndex, movedColumns);\n const column = columns[modelIndex];\n const isMovable = model.isColumnMovable(modelIndex);\n if (visibleIndex > 0 && isMovable !== wasMovable) {\n elements.push(<hr />);\n }\n if (isMovable) {\n const isHidden = userColumnWidths.get(modelIndex) === 0;\n const isSelected = selectedColumns.includes(modelIndex);\n const isDragged = orderDraggingColumn === modelIndex;\n const columnsDragged =\n isDraggingOrder && isDragged && selectedColumns.length > 1\n ? selectedColumns.length\n : null;\n elements.push(\n this.renderVisibilityOrderingItem(\n column.name,\n modelIndex,\n visibleIndex,\n isHidden,\n isSelected,\n isDraggingOrder,\n isDragged,\n columnsDragged\n )\n );\n } else {\n elements.push(this.renderImmovableItem(column.name));\n }\n\n wasMovable = isMovable;\n }\n\n return elements;\n }\n\n getFirstMovableIndex = memoize((model, columns) => {\n for (let i = 0; i < columns.length; i += 1) {\n if (model.isColumnMovable(i)) {\n return i;\n }\n }\n\n return null;\n });\n\n getLastMovableIndex = memoize((model, columns) => {\n for (let i = columns.length - 1; i >= 0; i -= 1) {\n if (model.isColumnMovable(i)) {\n return i;\n }\n }\n\n return null;\n });\n\n renderImmovableItem = memoize(\n (columnName: ColumnName): ReactElement => (\n <div className=\"visibility-ordering-list-item immovable\" key={columnName}>\n <div className=\"column-item\">\n <span className=\"column-name\">{columnName}</span>\n </div>\n </div>\n )\n );\n\n renderVisibilityOrderingItem = memoize(\n (\n columnName: ColumnName,\n modelIndex: ModelIndex,\n visibleIndex: VisibleIndex,\n isHidden: boolean,\n isSelected: boolean,\n isDragging: boolean,\n isDragged: boolean,\n columnsDragged\n ) => (\n <Draggable\n draggableId={`${modelIndex}`} // draggableId requires string input\n index={visibleIndex}\n key={columnName}\n disableInteractiveElementBlocking\n >\n {provided => (\n <div\n className=\"visibility-ordering-list-item\"\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n >\n <button\n type=\"button\"\n className=\"visibility btn btn-link btn-link-icon\"\n onMouseDown={event => {\n this.handleVisibilityDraggingStart(\n modelIndex,\n isHidden\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE,\n event\n );\n }}\n onMouseEnter={event => {\n this.handleMouseEnter(modelIndex, event);\n }}\n onMouseUp={event => {\n this.handleVisibilityDraggingEnd(event);\n }}\n onClick={event => {\n this.handleItemClick(modelIndex, event, false);\n }}\n onKeyDown={event => {\n // trigger on keyboard enter or space keys\n if (event.key === 'Enter' || event.key === ' ') {\n this.handleVisibilityKeyDown(\n modelIndex,\n isHidden\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n );\n event.stopPropagation();\n event.preventDefault();\n }\n }}\n >\n <FontAwesomeIcon icon={isHidden ? dhEyeSlash : dhEye} />\n </button>\n <div\n role=\"menuitem\"\n tabIndex={0}\n className={classNames(\n 'ordering column-item',\n {\n isSelected,\n },\n { isDragging },\n { isDragged },\n { 'two-dragged': columnsDragged === 2 },\n { 'multiple-dragged': columnsDragged > 2 }\n )}\n onClick={event => {\n this.handleItemClick(modelIndex, event);\n }}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n <span className=\"column-name\">{columnName}</span>\n <div>\n {columnsDragged && (\n <span className=\"number-badge\">{columnsDragged}</span>\n )}\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </div>\n </div>\n </div>\n )}\n </Draggable>\n )\n );\n\n render(): ReactElement {\n const { model, userColumnWidths, onColumnVisibilityChanged } = this.props;\n const { selectedColumns, searchFilter } = this.state;\n const { columns } = model;\n const noSelection = selectedColumns.length === 0;\n const columnsToToggle = noSelection\n ? columns.map((c, i) => i).filter(i => model.isColumnMovable(i))\n : [...selectedColumns];\n const toggleToShow = GridUtils.checkAllColumnsHidden(\n columnsToToggle,\n userColumnWidths\n );\n const selectedToggleText = toggleToShow ? 'Show Selected' : 'Hide Selected';\n\n const columnItems = this.makeVisibilityOrderingList();\n\n return (\n <div\n role=\"menu\"\n className=\"visibility-ordering-builder\"\n tabIndex={0}\n onMouseUp={() => {\n this.handleVisibilityDraggingEnd();\n }}\n onMouseLeave={() => {\n this.handleVisibilityDraggingEnd();\n }}\n >\n <div className=\"top-menu\">\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={() => {\n onColumnVisibilityChanged(\n columnsToToggle,\n toggleToShow\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n );\n }}\n >\n <FontAwesomeIcon icon={toggleToShow ? dhEyeSlash : dhEye} />\n <Tooltip>Toggle column visibility</Tooltip>\n {noSelection ? 'Toggle All' : selectedToggleText}\n </button>\n\n <div>\n <button\n type=\"button\"\n className=\"btn btn-link text-muted\"\n onClick={() => {\n this.resetVisibilityOrdering();\n }}\n >\n Reset\n <Tooltip>Reset to default</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilder.SORTING_OPTIONS.ASC\n );\n }}\n >\n <FontAwesomeIcon icon={dhSortAlphaDown} />\n <Tooltip>Sort ascending</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilder.SORTING_OPTIONS.DSC\n );\n }}\n >\n <FontAwesomeIcon icon={dhSortAlphaUp} />\n <Tooltip>Sort descending</Tooltip>\n </button>\n <span className=\"vertical-divider\" />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.UP\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={vsChevronUp} />\n <Tooltip>Move selection up</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={vsChevronDown} />\n <Tooltip>Move selection down</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.TOP\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={dhArrowToTop} />\n <Tooltip>Move selection to top</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={dhArrowToBottom} />\n <Tooltip>Move selection to bottom</Tooltip>\n </button>\n </div>\n </div>\n <div className=\"top-menu\">\n <SearchInput\n className=\"w-100\"\n value={searchFilter}\n matchCount={searchFilter ? selectedColumns.length : undefined}\n onChange={this.handleSearchInputChange}\n />\n </div>\n <DragDropContext\n onDragStart={this.handleOrderDraggingStart}\n onDragEnd={this.handleOrderDraggingEnd}\n >\n <Droppable droppableId=\"droppable-visibility-order-list\">\n {(provided, snapshot) => (\n // eslint-disable-next-line jsx-a11y/interactive-supports-focus\n <div\n role=\"menu\"\n className={classNames('visibility-ordering-list', {\n isDragging: snapshot.draggingFromThisWith,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n <div\n className=\"column-list\"\n ref={list => {\n this.list = list;\n }}\n >\n {columnItems}\n {provided.placeholder}\n </div>\n </div>\n )}\n </Droppable>\n </DragDropContext>\n </div>\n );\n }\n}\n\nexport default VisibilityOrderingBuilder;\n"],"file":"VisibilityOrderingBuilder.js"}
|
|
1
|
+
{"version":3,"file":"VisibilityOrderingBuilder.js","names":["React","Component","classNames","GridUtils","TextUtils","assertNotNull","FontAwesomeIcon","dhEye","dhEyeSlash","dhSortAlphaDown","dhSortAlphaUp","dhArrowToTop","dhArrowToBottom","vsChevronUp","vsChevronDown","vsGripper","DragDropContext","Draggable","Droppable","memoize","debounce","SearchInput","Tooltip","Log","log","module","DEBOUNCE_SEARCH_COLUMN","VisibilityOrderingBuilder","constructor","props","searchColumns","model","columns","i","length","isColumnMovable","columnName","modelIndex","visibleIndex","isHidden","isSelected","isDragging","isDragged","columnsDragged","provided","innerRef","draggableProps","event","handleVisibilityDraggingStart","VISIBILITY_OPTIONS","SHOW","HIDE","handleMouseEnter","handleVisibilityDraggingEnd","handleItemClick","key","handleVisibilityKeyDown","stopPropagation","preventDefault","dragHandleProps","handleSearchInputChange","bind","handleOrderDraggingStart","handleOrderDraggingEnd","state","selectedColumns","lastSelectedColumns","isDraggingVisibility","visibilityDraggingOption","undefined","visibilityDraggingStartColumn","isDraggingOrder","orderDraggingColumn","searchFilter","list","componentWillUnmount","debouncedSearchColumns","cancel","resetVisibilityOrdering","onColumnVisibilityChanged","onMovedColumnsChanged","map","column","index","getColumnIndexByName","name","setState","resetSelection","target","value","movedColumns","columnsMatch","visibleIndexToFocus","forEach","toLowerCase","includes","push","Math","min","getVisibleIndex","addColumnToSelected","columnItemToFocus","querySelectorAll","scrollIntoView","block","visibilityOption","isModifierKeyDown","isShiftKeyDown","shiftKey","focus","start","document","documentElement","classList","add","draggableId","source","startIndex","parseInt","result","remove","destination","destinationIndex","selectedColumnsSortByVisibleIndex","sort","columnA","columnB","newMoves","draggingVisibleIndex","upper","lower","moveItem","columnVisibleIndex","bottomDestinationIndex","reverse","debug","targetModelIndex","userColumnWidths","draggingStartVisibleIndex","targetVisibleIndex","columnsToChangeVisibility","checkDownward","visibleIndexToCheck","modelIndexToCheck","getModelIndex","checkColumnHidden","handleMoveColumns","option","firstMovableIndex","getFirstMovableIndex","lastMovableIndex","getLastMovableIndex","sortedSelectedColumns","MOVE_OPTIONS","TOP","UP","scrollListAfterMove","columnModelIndex","scrollTop","BOTTOM","scrollHeight","DOWN","concat","handleSortColumns","movableColumns","immovableColumns","movableColumnsSorted","a","b","isAscending","SORTING_OPTIONS","ASC","aName","toUpperCase","bName","modelIndexAlphaSorted","insertIndex","modelIndexClicked","removeSelectionOnClick","currentTarget","columnsToBeAdded","removeColumnFromSelected","lastSelectedColumn","lastSelectedColumnVisibleIndex","visibleIndexToBeSelected","columnsInBetween","addToExisting","newSelectedColumns","newLastSelectedColumns","splice","findIndex","selected","pop","makeVisibilityOrderingList","elements","wasMovable","isMovable","get","renderVisibilityOrderingItem","renderImmovableItem","render","noSelection","columnsToToggle","c","filter","toggleToShow","checkAllColumnsHidden","selectedToggleText","columnItems","DSC","snapshot","draggingFromThisWith","droppableProps","placeholder","ALL","SELECTION"],"sources":["../../src/sidebar/VisibilityOrderingBuilder.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { ChangeEvent, Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport {\n GridUtils,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n VisibleIndex,\n} from '@deephaven/grid';\nimport { TextUtils, assertNotNull } from '@deephaven/utils';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhEye,\n dhEyeSlash,\n dhSortAlphaDown,\n dhSortAlphaUp,\n dhArrowToTop,\n dhArrowToBottom,\n vsChevronUp,\n vsChevronDown,\n vsGripper,\n} from '@deephaven/icons';\nimport {\n DragDropContext,\n Draggable,\n DragStart,\n Droppable,\n DropResult,\n} from 'react-beautiful-dnd';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport { SearchInput, Tooltip } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport './VisibilityOrderingBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\nimport { ColumnName } from '../CommonTypes';\n\nconst log = Log.module('VisibilityOrderingBuilder');\nconst DEBOUNCE_SEARCH_COLUMN = 150;\n\ninterface VisibilityOrderingBuilderProps {\n model: IrisGridModel;\n movedColumns: MoveOperation[];\n userColumnWidths: ModelSizeMap;\n onColumnVisibilityChanged: (\n columns: VisibleIndex[],\n options?: VisibilityOptionType\n ) => void;\n onMovedColumnsChanged: (operations: MoveOperation[], cb?: () => void) => void;\n}\n\ninterface VisibilityOrderingBuilderState {\n selectedColumns: ModelIndex[]; // model index of selected column(s)\n lastSelectedColumns: ModelIndex[];\n isDraggingVisibility: boolean;\n visibilityDraggingOption?: VisibilityOptionType;\n visibilityDraggingStartColumn: number | null;\n isDraggingOrder: boolean;\n orderDraggingColumn: number | null;\n searchFilter: string;\n}\n\ntype Values<T> = T[keyof T];\n\nexport type VisibilityOptionType = Values<\n typeof VisibilityOrderingBuilder.VISIBILITY_OPTIONS\n>;\n\nclass VisibilityOrderingBuilder extends Component<\n VisibilityOrderingBuilderProps,\n VisibilityOrderingBuilderState\n> {\n static VISIBILITY_OPTIONS = { SHOW: 'SHOW', HIDE: 'HIDE' } as const;\n\n static SORTING_OPTIONS = { DSC: 'DSC', ASC: 'ASC' };\n\n static MOVE_OPTIONS = {\n TOP: 'TOP',\n BOTTOM: 'BOTTOM',\n UP: 'UP',\n DOWN: 'DOWN',\n };\n\n static COLUMN_CHANGE_OPTIONS = { ALL: 'ALL', SELECTION: 'SELECTION' };\n\n static defaultProps = {\n movedColumns: [],\n onColumnVisibilityChanged: (): void => undefined,\n onMovedColumnsChanged: (): void => undefined,\n };\n\n constructor(props: VisibilityOrderingBuilderProps) {\n super(props);\n\n this.handleSearchInputChange = this.handleSearchInputChange.bind(this);\n this.searchColumns = this.searchColumns.bind(this);\n this.handleOrderDraggingStart = this.handleOrderDraggingStart.bind(this);\n this.handleOrderDraggingEnd = this.handleOrderDraggingEnd.bind(this);\n\n this.state = {\n selectedColumns: [], // model index of selected column(s)\n lastSelectedColumns: [],\n isDraggingVisibility: false,\n visibilityDraggingOption: undefined,\n visibilityDraggingStartColumn: null,\n isDraggingOrder: false,\n orderDraggingColumn: null,\n searchFilter: '',\n };\n\n this.list = null;\n }\n\n componentWillUnmount(): void {\n this.debouncedSearchColumns.cancel();\n }\n\n list: HTMLDivElement | null;\n\n debouncedSearchColumns = debounce(this.searchColumns, DEBOUNCE_SEARCH_COLUMN);\n\n resetVisibilityOrdering(): void {\n const {\n model,\n onColumnVisibilityChanged,\n onMovedColumnsChanged,\n } = this.props;\n const { columns } = model;\n\n onColumnVisibilityChanged(\n columns.map(column => {\n const index = model.getColumnIndexByName(column.name);\n assertNotNull(index);\n return index;\n }),\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n );\n this.setState({\n selectedColumns: [],\n lastSelectedColumns: [],\n searchFilter: '',\n });\n onMovedColumnsChanged([]);\n }\n\n resetSelection(): void {\n const { isDraggingOrder } = this.state;\n // don't reset selection if user is dragging column(s)\n if (isDraggingOrder) {\n return;\n }\n this.setState({ selectedColumns: [], lastSelectedColumns: [] });\n }\n\n handleSearchInputChange(event: ChangeEvent<HTMLInputElement>): void {\n const searchFilter = event.target.value;\n this.setState({ searchFilter });\n if (!searchFilter) {\n this.debouncedSearchColumns.cancel();\n this.resetSelection();\n return;\n }\n this.debouncedSearchColumns(searchFilter);\n }\n\n searchColumns(searchFilter: string): void {\n const { model, movedColumns } = this.props;\n const { columns } = model;\n\n const columnsMatch = [] as number[];\n let visibleIndexToFocus = columns.length;\n columns.forEach((column, index) => {\n const columnName = column.name.toLowerCase();\n if (\n model.isColumnMovable(index) &&\n columnName.includes(searchFilter.toLowerCase())\n ) {\n columnsMatch.push(index);\n visibleIndexToFocus = Math.min(\n visibleIndexToFocus,\n GridUtils.getVisibleIndex(index, movedColumns)\n );\n }\n });\n this.addColumnToSelected(columnsMatch, false);\n if (columnsMatch.length > 0) {\n const columnItemToFocus = this.list?.querySelectorAll('.column-item')[\n visibleIndexToFocus\n ];\n columnItemToFocus?.scrollIntoView({ block: 'center' });\n }\n }\n\n handleVisibilityKeyDown(\n modelIndex: ModelIndex,\n visibilityOption: VisibilityOptionType\n ): void {\n const { onColumnVisibilityChanged } = this.props;\n onColumnVisibilityChanged([modelIndex], visibilityOption);\n }\n\n handleVisibilityDraggingStart(\n modelIndex: ModelIndex,\n visibilityOption: VisibilityOptionType,\n event: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ): void {\n const { onColumnVisibilityChanged, movedColumns } = this.props;\n\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n\n if (isModifierKeyDown || isShiftKeyDown) return;\n\n onColumnVisibilityChanged([modelIndex], visibilityOption);\n\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n\n this.setState({\n isDraggingVisibility: true,\n visibilityDraggingOption: visibilityOption,\n visibilityDraggingStartColumn: visibleIndex,\n });\n\n this.addColumnToSelected([modelIndex]);\n }\n\n handleVisibilityDraggingEnd(\n event: React.MouseEvent<HTMLButtonElement, MouseEvent> | null = null\n ): void {\n if (event) (event.target as HTMLButtonElement).focus();\n\n const { isDraggingVisibility } = this.state;\n if (isDraggingVisibility) {\n this.setState({\n isDraggingVisibility: false,\n visibilityDraggingOption: undefined,\n visibilityDraggingStartColumn: null,\n });\n }\n }\n\n handleOrderDraggingStart(start: DragStart): void {\n document.documentElement.classList.add('drag-pointer-events-none');\n\n const { selectedColumns } = this.state;\n const {\n draggableId,\n source: { index: startIndex },\n } = start;\n const orderDraggingColumn = parseInt(draggableId, 10);\n\n // we want to clear focus from any eye toggles\n // however to maintain react-beautiful-dnd keyboard functionality the only valid\n // focus target is the drag target itself, so we set it there instead of blurring\n (this.list?.querySelectorAll('.column-item')[\n startIndex\n ] as HTMLDivElement).focus();\n\n if (!selectedColumns.includes(orderDraggingColumn)) {\n this.setState({\n isDraggingOrder: true,\n orderDraggingColumn,\n selectedColumns: [orderDraggingColumn],\n });\n return;\n }\n this.setState({ isDraggingOrder: true, orderDraggingColumn });\n }\n\n handleOrderDraggingEnd(result: DropResult): void {\n document.documentElement.classList.remove('drag-pointer-events-none');\n\n const { movedColumns, onMovedColumnsChanged } = this.props;\n const { selectedColumns, orderDraggingColumn } = this.state;\n\n // reset dragging state\n this.setState({ isDraggingOrder: false, orderDraggingColumn: null });\n\n // if dropped outside the list, re-focus on the dragged item if necessary\n if (!result.destination) {\n return;\n }\n\n const { index: destinationIndex } = result.destination;\n\n const selectedColumnsSortByVisibleIndex = [...selectedColumns].sort(\n (columnA, columnB) =>\n GridUtils.getVisibleIndex(columnA, movedColumns) -\n GridUtils.getVisibleIndex(columnB, movedColumns)\n );\n\n let newMoves = [...movedColumns];\n assertNotNull(orderDraggingColumn);\n const draggingVisibleIndex = GridUtils.getVisibleIndex(\n orderDraggingColumn,\n newMoves\n );\n const upper: number[] = [];\n const lower: number[] = [];\n\n // move the dragged column to destination first,\n newMoves = GridUtils.moveItem(\n draggingVisibleIndex,\n destinationIndex,\n newMoves\n );\n\n // split selected columns into two parts on drop destination index: top & bottom\n selectedColumnsSortByVisibleIndex.forEach(column => {\n const columnVisibleIndex = GridUtils.getVisibleIndex(column, newMoves);\n if (column === orderDraggingColumn) {\n return;\n }\n if (columnVisibleIndex < destinationIndex) {\n upper.push(column);\n } else {\n lower.push(column);\n }\n });\n\n // for the top part, move column(s) to the destination index\n upper.forEach(column => {\n const visibleIndex = GridUtils.getVisibleIndex(column, newMoves);\n newMoves = GridUtils.moveItem(visibleIndex, destinationIndex, newMoves);\n });\n\n // for the bottom part, in reverse order, move column(s) to the drop destination index if there's no top column(s) or the dragged column is not dropped upside\n // otherwise, move column(s) under the dropping destination index\n const bottomDestinationIndex =\n upper.length > 0 || draggingVisibleIndex > destinationIndex\n ? destinationIndex + 1\n : destinationIndex;\n\n lower.reverse().forEach(column => {\n const visibleIndex = GridUtils.getVisibleIndex(column, newMoves);\n newMoves = GridUtils.moveItem(\n visibleIndex,\n bottomDestinationIndex,\n newMoves\n );\n });\n\n onMovedColumnsChanged(newMoves);\n log.debug('move column order by drag & drop', newMoves);\n }\n\n handleMouseEnter(\n targetModelIndex: ModelIndex,\n event: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ): void {\n const {\n onColumnVisibilityChanged,\n movedColumns,\n userColumnWidths,\n } = this.props;\n const {\n isDraggingVisibility,\n visibilityDraggingOption,\n visibilityDraggingStartColumn: draggingStartVisibleIndex,\n } = this.state;\n const targetVisibleIndex = GridUtils.getVisibleIndex(\n targetModelIndex,\n movedColumns\n );\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n\n if (!isDraggingVisibility || isModifierKeyDown || isShiftKeyDown) {\n return;\n }\n\n (event.target as HTMLButtonElement).focus();\n\n // browser can skip mouseEnter / mouseMove event if user moves the mouse too fast\n // try to check columns between dragging start index to current index to compensate missing event,\n const columnsToChangeVisibility = [targetModelIndex];\n assertNotNull(draggingStartVisibleIndex);\n const checkDownward = targetVisibleIndex > draggingStartVisibleIndex;\n\n for (\n let visibleIndexToCheck = draggingStartVisibleIndex;\n checkDownward\n ? visibleIndexToCheck < targetVisibleIndex\n : visibleIndexToCheck > targetVisibleIndex;\n checkDownward ? (visibleIndexToCheck += 1) : (visibleIndexToCheck -= 1)\n ) {\n const modelIndexToCheck = GridUtils.getModelIndex(\n visibleIndexToCheck,\n movedColumns\n );\n const isHidden = GridUtils.checkColumnHidden(\n modelIndexToCheck,\n userColumnWidths\n );\n if (\n isHidden &&\n visibilityDraggingOption ===\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n ) {\n columnsToChangeVisibility.push(modelIndexToCheck);\n } else if (\n !isHidden &&\n visibilityDraggingOption ===\n VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n ) {\n columnsToChangeVisibility.push(modelIndexToCheck);\n }\n }\n\n this.addColumnToSelected(columnsToChangeVisibility, true);\n\n onColumnVisibilityChanged(\n columnsToChangeVisibility,\n visibilityDraggingOption\n );\n }\n\n handleMoveColumns(option: string): void {\n const { movedColumns, onMovedColumnsChanged, model } = this.props;\n const { columns } = model;\n const { selectedColumns } = this.state;\n if (selectedColumns.length === 0) {\n return;\n }\n\n const firstMovableIndex = this.getFirstMovableIndex(model, columns);\n const lastMovableIndex = this.getLastMovableIndex(model, columns);\n if (firstMovableIndex == null || lastMovableIndex == null) {\n return;\n }\n\n // for moving up and to the top, move column(s) in visibility index order\n // for moving down and to the bottom, move column(s) in reverse visibility index order\n const sortedSelectedColumns = [\n ...selectedColumns,\n ].sort((columnA, columnB) =>\n option === VisibilityOrderingBuilder.MOVE_OPTIONS.TOP ||\n option === VisibilityOrderingBuilder.MOVE_OPTIONS.UP\n ? GridUtils.getVisibleIndex(columnA, movedColumns) -\n GridUtils.getVisibleIndex(columnB, movedColumns)\n : GridUtils.getVisibleIndex(columnB, movedColumns) -\n GridUtils.getVisibleIndex(columnA, movedColumns)\n );\n\n let newMoves = [] as MoveOperation[];\n let scrollListAfterMove: () => void = () => undefined;\n\n switch (option) {\n case VisibilityOrderingBuilder.MOVE_OPTIONS.TOP:\n sortedSelectedColumns.forEach((columnModelIndex, index) => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n firstMovableIndex + index,\n newMoves\n );\n });\n scrollListAfterMove = () => {\n assertNotNull(this.list);\n this.list.scrollTop = 0;\n };\n break;\n case VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM:\n sortedSelectedColumns.forEach((columnModelIndex, index) => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n lastMovableIndex - index,\n newMoves\n );\n });\n scrollListAfterMove = () => {\n assertNotNull(this.list);\n this.list.scrollTop = this.list.scrollHeight;\n };\n\n break;\n case VisibilityOrderingBuilder.MOVE_OPTIONS.UP:\n if (\n GridUtils.getVisibleIndex(sortedSelectedColumns[0], movedColumns) !==\n firstMovableIndex // check if the first visible column has reached top\n ) {\n sortedSelectedColumns.forEach(columnModelIndex => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n visibleIndex - 1,\n newMoves\n );\n });\n }\n break;\n case VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN:\n if (\n GridUtils.getVisibleIndex(sortedSelectedColumns[0], movedColumns) !==\n lastMovableIndex // check if the last visible column has reached bottom\n ) {\n sortedSelectedColumns.forEach(columnModelIndex => {\n const visibleIndex = GridUtils.getVisibleIndex(\n columnModelIndex,\n movedColumns\n );\n newMoves = GridUtils.moveItem(\n visibleIndex,\n visibleIndex + 1,\n newMoves\n );\n });\n }\n break;\n default:\n break;\n }\n if (newMoves.length > 0) {\n onMovedColumnsChanged(movedColumns.concat(newMoves), scrollListAfterMove);\n }\n }\n\n handleSortColumns(option: string): void {\n const { model, onMovedColumnsChanged } = this.props;\n const { columns } = model;\n\n // We can't move the immovable columns when sorting, so separate them out first\n const movableColumns = [];\n const immovableColumns = [];\n for (let modelIndex = 0; modelIndex < columns.length; modelIndex += 1) {\n if (model.isColumnMovable(modelIndex)) {\n movableColumns.push(modelIndex);\n } else {\n immovableColumns.push(modelIndex);\n }\n }\n\n // Sort all the movable columns\n const movableColumnsSorted = movableColumns.sort((a, b) => {\n const isAscending =\n option === VisibilityOrderingBuilder.SORTING_OPTIONS.ASC;\n const aName = columns[a].name.toUpperCase();\n const bName = columns[b].name.toUpperCase();\n return TextUtils.sort(aName, bName, isAscending);\n });\n\n // Place all the immovable columns where they need to be\n const modelIndexAlphaSorted = [];\n for (let i = 0; i < immovableColumns.length; i += 1) {\n const modelIndex = immovableColumns[i];\n modelIndexAlphaSorted[modelIndex] = modelIndex;\n }\n\n // Then the rest of the sorted columns can be put in the empty spaces\n let insertIndex = 0;\n for (let i = 0; i < movableColumnsSorted.length; i += 1) {\n while (modelIndexAlphaSorted[insertIndex] != null) {\n insertIndex += 1;\n }\n\n modelIndexAlphaSorted[insertIndex] = movableColumnsSorted[i];\n }\n\n let newMoves = [] as MoveOperation[];\n modelIndexAlphaSorted.forEach((modelIndex, index) => {\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, newMoves);\n newMoves = GridUtils.moveItem(visibleIndex, index, newMoves);\n });\n onMovedColumnsChanged(newMoves);\n }\n\n handleItemClick(\n modelIndexClicked: ModelIndex,\n event: React.MouseEvent<HTMLDivElement | HTMLButtonElement, MouseEvent>,\n removeSelectionOnClick = true\n ): void {\n event.stopPropagation();\n event.currentTarget.focus();\n\n const { selectedColumns, lastSelectedColumns } = this.state;\n const isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n const isShiftKeyDown = event.shiftKey;\n const isSelected = selectedColumns.includes(modelIndexClicked);\n const columnsToBeAdded = [modelIndexClicked];\n\n if (isSelected && isModifierKeyDown) {\n this.removeColumnFromSelected(modelIndexClicked);\n return;\n }\n\n if (isSelected && selectedColumns.length === 1 && removeSelectionOnClick) {\n this.removeColumnFromSelected(modelIndexClicked);\n return;\n }\n\n if (isShiftKeyDown) {\n const { movedColumns } = this.props;\n const lastSelectedColumn =\n lastSelectedColumns[lastSelectedColumns.length - 1];\n const lastSelectedColumnVisibleIndex = GridUtils.getVisibleIndex(\n lastSelectedColumn,\n movedColumns\n );\n const visibleIndexToBeSelected = GridUtils.getVisibleIndex(\n modelIndexClicked,\n movedColumns\n );\n const checkDownward =\n visibleIndexToBeSelected > lastSelectedColumnVisibleIndex;\n const columnsInBetween = [];\n for (\n let i = lastSelectedColumnVisibleIndex;\n checkDownward\n ? i < visibleIndexToBeSelected\n : i > visibleIndexToBeSelected;\n checkDownward ? (i += 1) : (i -= 1)\n ) {\n columnsInBetween.push(GridUtils.getModelIndex(i, movedColumns));\n }\n columnsInBetween.forEach(column => {\n if (!selectedColumns.includes(column)) {\n columnsToBeAdded.push(column);\n }\n });\n }\n\n this.addColumnToSelected(\n columnsToBeAdded,\n isModifierKeyDown || isShiftKeyDown\n );\n }\n\n addColumnToSelected(\n columnsToBeAdded: ModelIndex[],\n addToExisting = false\n ): void {\n const { selectedColumns, lastSelectedColumns } = this.state;\n const newSelectedColumns = addToExisting\n ? selectedColumns.concat(columnsToBeAdded)\n : columnsToBeAdded;\n const newLastSelectedColumns = addToExisting\n ? lastSelectedColumns.concat(columnsToBeAdded)\n : columnsToBeAdded;\n\n this.setState({\n selectedColumns: newSelectedColumns,\n lastSelectedColumns: newLastSelectedColumns,\n });\n }\n\n removeColumnFromSelected(modelIndex: ModelIndex): void {\n const { selectedColumns, lastSelectedColumns } = this.state;\n const newSelectedColumns = [...selectedColumns];\n\n newSelectedColumns.splice(\n newSelectedColumns.findIndex(selected => selected === modelIndex),\n 1\n );\n const lastSelectedColumn =\n lastSelectedColumns[lastSelectedColumns.length - 1];\n const newLastSelectedColumns = [...lastSelectedColumns];\n if (lastSelectedColumn === modelIndex) {\n newLastSelectedColumns.pop();\n }\n this.setState({\n selectedColumns: newSelectedColumns,\n lastSelectedColumns: newLastSelectedColumns,\n });\n }\n\n makeVisibilityOrderingList(): ReactElement[] {\n const { model, userColumnWidths, movedColumns } = this.props;\n const { columns } = model;\n const {\n selectedColumns,\n isDraggingOrder,\n orderDraggingColumn,\n } = this.state;\n\n const elements = [];\n let wasMovable = false;\n for (\n let visibleIndex = 0;\n visibleIndex < columns.length;\n visibleIndex += 1\n ) {\n const modelIndex = GridUtils.getModelIndex(visibleIndex, movedColumns);\n const column = columns[modelIndex];\n const isMovable = model.isColumnMovable(modelIndex);\n if (visibleIndex > 0 && isMovable !== wasMovable) {\n elements.push(<hr />);\n }\n if (isMovable) {\n const isHidden = userColumnWidths.get(modelIndex) === 0;\n const isSelected = selectedColumns.includes(modelIndex);\n const isDragged = orderDraggingColumn === modelIndex;\n const columnsDragged =\n isDraggingOrder && isDragged && selectedColumns.length > 1\n ? selectedColumns.length\n : null;\n elements.push(\n this.renderVisibilityOrderingItem(\n column.name,\n modelIndex,\n visibleIndex,\n isHidden,\n isSelected,\n isDraggingOrder,\n isDragged,\n columnsDragged\n )\n );\n } else {\n elements.push(this.renderImmovableItem(column.name));\n }\n\n wasMovable = isMovable;\n }\n\n return elements;\n }\n\n getFirstMovableIndex = memoize((model, columns) => {\n for (let i = 0; i < columns.length; i += 1) {\n if (model.isColumnMovable(i)) {\n return i;\n }\n }\n\n return null;\n });\n\n getLastMovableIndex = memoize((model, columns) => {\n for (let i = columns.length - 1; i >= 0; i -= 1) {\n if (model.isColumnMovable(i)) {\n return i;\n }\n }\n\n return null;\n });\n\n renderImmovableItem = memoize(\n (columnName: ColumnName): ReactElement => (\n <div className=\"visibility-ordering-list-item immovable\" key={columnName}>\n <div className=\"column-item\">\n <span className=\"column-name\">{columnName}</span>\n </div>\n </div>\n )\n );\n\n renderVisibilityOrderingItem = memoize(\n (\n columnName: ColumnName,\n modelIndex: ModelIndex,\n visibleIndex: VisibleIndex,\n isHidden: boolean,\n isSelected: boolean,\n isDragging: boolean,\n isDragged: boolean,\n columnsDragged\n ) => (\n <Draggable\n draggableId={`${modelIndex}`} // draggableId requires string input\n index={visibleIndex}\n key={columnName}\n disableInteractiveElementBlocking\n >\n {provided => (\n <div\n className=\"visibility-ordering-list-item\"\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n >\n <button\n type=\"button\"\n className=\"visibility btn btn-link btn-link-icon\"\n onMouseDown={event => {\n this.handleVisibilityDraggingStart(\n modelIndex,\n isHidden\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE,\n event\n );\n }}\n onMouseEnter={event => {\n this.handleMouseEnter(modelIndex, event);\n }}\n onMouseUp={event => {\n this.handleVisibilityDraggingEnd(event);\n }}\n onClick={event => {\n this.handleItemClick(modelIndex, event, false);\n }}\n onKeyDown={event => {\n // trigger on keyboard enter or space keys\n if (event.key === 'Enter' || event.key === ' ') {\n this.handleVisibilityKeyDown(\n modelIndex,\n isHidden\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n );\n event.stopPropagation();\n event.preventDefault();\n }\n }}\n >\n <FontAwesomeIcon icon={isHidden ? dhEyeSlash : dhEye} />\n </button>\n <div\n role=\"menuitem\"\n tabIndex={0}\n className={classNames(\n 'ordering column-item',\n {\n isSelected,\n },\n { isDragging },\n { isDragged },\n { 'two-dragged': columnsDragged === 2 },\n { 'multiple-dragged': columnsDragged > 2 }\n )}\n onClick={event => {\n this.handleItemClick(modelIndex, event);\n }}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n <span className=\"column-name\">{columnName}</span>\n <div>\n {columnsDragged && (\n <span className=\"number-badge\">{columnsDragged}</span>\n )}\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </div>\n </div>\n </div>\n )}\n </Draggable>\n )\n );\n\n render(): ReactElement {\n const { model, userColumnWidths, onColumnVisibilityChanged } = this.props;\n const { selectedColumns, searchFilter } = this.state;\n const { columns } = model;\n const noSelection = selectedColumns.length === 0;\n const columnsToToggle = noSelection\n ? columns.map((c, i) => i).filter(i => model.isColumnMovable(i))\n : [...selectedColumns];\n const toggleToShow = GridUtils.checkAllColumnsHidden(\n columnsToToggle,\n userColumnWidths\n );\n const selectedToggleText = toggleToShow ? 'Show Selected' : 'Hide Selected';\n\n const columnItems = this.makeVisibilityOrderingList();\n\n return (\n <div\n role=\"menu\"\n className=\"visibility-ordering-builder\"\n tabIndex={0}\n onMouseUp={() => {\n this.handleVisibilityDraggingEnd();\n }}\n onMouseLeave={() => {\n this.handleVisibilityDraggingEnd();\n }}\n >\n <div className=\"top-menu\">\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={() => {\n onColumnVisibilityChanged(\n columnsToToggle,\n toggleToShow\n ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE\n );\n }}\n >\n <FontAwesomeIcon icon={toggleToShow ? dhEyeSlash : dhEye} />\n <Tooltip>Toggle column visibility</Tooltip>\n {noSelection ? 'Toggle All' : selectedToggleText}\n </button>\n\n <div>\n <button\n type=\"button\"\n className=\"btn btn-link text-muted\"\n onClick={() => {\n this.resetVisibilityOrdering();\n }}\n >\n Reset\n <Tooltip>Reset to default</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilder.SORTING_OPTIONS.ASC\n );\n }}\n >\n <FontAwesomeIcon icon={dhSortAlphaDown} />\n <Tooltip>Sort ascending</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleSortColumns(\n VisibilityOrderingBuilder.SORTING_OPTIONS.DSC\n );\n }}\n >\n <FontAwesomeIcon icon={dhSortAlphaUp} />\n <Tooltip>Sort descending</Tooltip>\n </button>\n <span className=\"vertical-divider\" />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.UP\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={vsChevronUp} />\n <Tooltip>Move selection up</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={vsChevronDown} />\n <Tooltip>Move selection down</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.TOP\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={dhArrowToTop} />\n <Tooltip>Move selection to top</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n onClick={() => {\n this.handleMoveColumns(\n VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM\n );\n }}\n disabled={noSelection}\n >\n <FontAwesomeIcon icon={dhArrowToBottom} />\n <Tooltip>Move selection to bottom</Tooltip>\n </button>\n </div>\n </div>\n <div className=\"top-menu\">\n <SearchInput\n className=\"w-100\"\n value={searchFilter}\n matchCount={searchFilter ? selectedColumns.length : undefined}\n onChange={this.handleSearchInputChange}\n />\n </div>\n <DragDropContext\n onDragStart={this.handleOrderDraggingStart}\n onDragEnd={this.handleOrderDraggingEnd}\n >\n <Droppable droppableId=\"droppable-visibility-order-list\">\n {(provided, snapshot) => (\n // eslint-disable-next-line jsx-a11y/interactive-supports-focus\n <div\n role=\"menu\"\n className={classNames('visibility-ordering-list', {\n isDragging: snapshot.draggingFromThisWith,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n <div\n className=\"column-list\"\n ref={list => {\n this.list = list;\n }}\n >\n {columnItems}\n {provided.placeholder}\n </div>\n </div>\n )}\n </Droppable>\n </DragDropContext>\n </div>\n );\n }\n}\n\nexport default VisibilityOrderingBuilder;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/sidebar/aggregations/AggregationEdit.tsx"],"names":["React","useCallback","useMemo","useRef","useState","classNames","CSSTransition","Button","Checkbox","ItemList","ThemeExport","dhSortAlphaDown","dhSortAlphaUp","TableUtils","filterValidColumns","SortType","DEFAULT_ROW_HEIGHT","AggregationEdit","aggregation","columns","onChange","top","setTop","bottom","setBottom","sort","setSort","NONE","invert","selected","list","isSelected","name","includes","validColumns","filteredColumns","operation","sortColumns","ASCENDING","items","slice","map","c","value","displayValue","handleSelect","itemIndex","selectedIndex","indexOf","newSelected","newInvert","splice","push","length","handleReset","handleViewportChange","newTop","newBottom","toggleAll","checked","isModified","transitionSlowMs","active","DESCENDING","item"],"mappings":"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","sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { Button, Checkbox, ItemList, ThemeExport } from '@deephaven/components';\nimport { dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport type { Column } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { Aggregation } from './Aggregations';\nimport { filterValidColumns } from './AggregationUtils';\nimport './AggregationEdit.scss';\n\ninterface AggregationEditItem {\n value: string;\n displayValue: string;\n}\n\nexport type AggregationEditProps = {\n aggregation: Aggregation;\n columns: Column[];\n onChange: (aggregation: Aggregation) => void;\n};\n\nenum SortType {\n NONE,\n ASCENDING,\n DESCENDING,\n}\n\nconst DEFAULT_ROW_HEIGHT = 30;\n\nconst AggregationEdit = ({\n aggregation,\n columns,\n onChange,\n}: AggregationEditProps): JSX.Element => {\n const [top, setTop] = useState(-1);\n const [bottom, setBottom] = useState(-1);\n const [sort, setSort] = useState(SortType.NONE);\n const { invert, selected } = aggregation;\n const list = useRef<ItemList<AggregationEditItem>>(null);\n\n const isSelected = useCallback(\n name => (selected.includes(name) ? !invert : invert),\n [invert, selected]\n );\n\n const validColumns = useMemo(() => {\n let filteredColumns = filterValidColumns(columns, aggregation.operation);\n if (sort !== SortType.NONE) {\n filteredColumns = TableUtils.sortColumns(\n filteredColumns,\n sort === SortType.ASCENDING\n );\n }\n return filteredColumns;\n }, [columns, aggregation.operation, sort]);\n\n const items = useMemo(\n () =>\n top >= 0\n ? validColumns.slice(top, bottom + 1).map(c => ({\n value: c.name,\n displayValue: c.name,\n isSelected: isSelected(c.name),\n }))\n : [],\n [validColumns, isSelected, bottom, top]\n );\n\n const handleSelect = useCallback(\n itemIndex => {\n const { name } = validColumns[itemIndex];\n const selectedIndex = selected.indexOf(name);\n let newSelected = [...selected];\n let newInvert = invert;\n if (selectedIndex >= 0) {\n newSelected.splice(selectedIndex, 1);\n } else {\n newSelected.push(name);\n if (newSelected.length === validColumns.length) {\n // Every item is either selected or deselected, flip the inversion bit\n newSelected = [];\n newInvert = !invert;\n }\n }\n\n onChange({ ...aggregation, selected: newSelected, invert: newInvert });\n },\n [aggregation, invert, validColumns, selected, onChange]\n );\n\n const handleReset = useCallback(() => {\n setSort(SortType.NONE);\n onChange({ ...aggregation, selected: [], invert: true });\n }, [aggregation, onChange]);\n\n const handleViewportChange = useCallback(\n (newTop, newBottom) => {\n setTop(newTop);\n setBottom(newBottom);\n },\n [setTop, setBottom]\n );\n\n const toggleAll = useCallback(() => {\n if (selected.length === 0) {\n onChange({ ...aggregation, invert: !invert });\n } else {\n onChange({ ...aggregation, selected: [], invert: true });\n }\n }, [aggregation, invert, onChange, selected]);\n\n const checked = selected.length === 0 ? invert : null;\n const isModified = selected.length !== 0 || !invert || sort !== SortType.NONE;\n\n return (\n <div role=\"menu\" className=\"aggregation-edit\">\n <div className=\"top-menu\">\n <div className=\"form-inline\">\n <Checkbox checked={checked} onChange={toggleAll}>\n Toggle All\n </Checkbox>\n <div className=\"spacer\" />\n <CSSTransition\n in={isModified}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <Button kind=\"ghost\" className=\"btn-reset\" onClick={handleReset}>\n Reset\n </Button>\n </CSSTransition>\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.ASCENDING,\n })}\n icon={dhSortAlphaDown}\n tooltip=\"Sort ascending\"\n onClick={() => setSort(SortType.ASCENDING)}\n />\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.DESCENDING,\n })}\n icon={dhSortAlphaUp}\n tooltip=\"Sort descending\"\n onClick={() => setSort(SortType.DESCENDING)}\n />\n </div>\n </div>\n <div className=\"aggregation-edit-item-list\">\n <ItemList\n itemCount={validColumns.length}\n items={items}\n offset={top}\n renderItem={({ item }) => (\n <Checkbox checked={isSelected(item.value)}>\n {item.displayValue}\n </Checkbox>\n )}\n onSelect={handleSelect}\n onViewportChange={handleViewportChange}\n rowHeight={DEFAULT_ROW_HEIGHT}\n focusSelector=\"input\"\n ref={list}\n />\n </div>\n </div>\n );\n};\n\nexport default AggregationEdit;\n"],"file":"AggregationEdit.js"}
|
|
1
|
+
{"version":3,"file":"AggregationEdit.js","names":["React","useCallback","useMemo","useRef","useState","classNames","CSSTransition","Button","Checkbox","ItemList","ThemeExport","dhSortAlphaDown","dhSortAlphaUp","TableUtils","filterValidColumns","SortType","DEFAULT_ROW_HEIGHT","AggregationEdit","aggregation","columns","onChange","top","setTop","bottom","setBottom","sort","setSort","NONE","invert","selected","list","isSelected","name","includes","validColumns","filteredColumns","operation","sortColumns","ASCENDING","items","slice","map","c","value","displayValue","handleSelect","itemIndex","selectedIndex","indexOf","newSelected","newInvert","splice","push","length","handleReset","handleViewportChange","newTop","newBottom","toggleAll","checked","isModified","transitionSlowMs","active","DESCENDING","item"],"sources":["../../../src/sidebar/aggregations/AggregationEdit.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { Button, Checkbox, ItemList, ThemeExport } from '@deephaven/components';\nimport { dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport type { Column } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { Aggregation } from './Aggregations';\nimport { filterValidColumns } from './AggregationUtils';\nimport './AggregationEdit.scss';\n\ninterface AggregationEditItem {\n value: string;\n displayValue: string;\n}\n\nexport type AggregationEditProps = {\n aggregation: Aggregation;\n columns: Column[];\n onChange: (aggregation: Aggregation) => void;\n};\n\nenum SortType {\n NONE,\n ASCENDING,\n DESCENDING,\n}\n\nconst DEFAULT_ROW_HEIGHT = 30;\n\nconst AggregationEdit = ({\n aggregation,\n columns,\n onChange,\n}: AggregationEditProps): JSX.Element => {\n const [top, setTop] = useState(-1);\n const [bottom, setBottom] = useState(-1);\n const [sort, setSort] = useState(SortType.NONE);\n const { invert, selected } = aggregation;\n const list = useRef<ItemList<AggregationEditItem>>(null);\n\n const isSelected = useCallback(\n name => (selected.includes(name) ? !invert : invert),\n [invert, selected]\n );\n\n const validColumns = useMemo(() => {\n let filteredColumns = filterValidColumns(columns, aggregation.operation);\n if (sort !== SortType.NONE) {\n filteredColumns = TableUtils.sortColumns(\n filteredColumns,\n sort === SortType.ASCENDING\n );\n }\n return filteredColumns;\n }, [columns, aggregation.operation, sort]);\n\n const items = useMemo(\n () =>\n top >= 0\n ? validColumns.slice(top, bottom + 1).map(c => ({\n value: c.name,\n displayValue: c.name,\n isSelected: isSelected(c.name),\n }))\n : [],\n [validColumns, isSelected, bottom, top]\n );\n\n const handleSelect = useCallback(\n itemIndex => {\n const { name } = validColumns[itemIndex];\n const selectedIndex = selected.indexOf(name);\n let newSelected = [...selected];\n let newInvert = invert;\n if (selectedIndex >= 0) {\n newSelected.splice(selectedIndex, 1);\n } else {\n newSelected.push(name);\n if (newSelected.length === validColumns.length) {\n // Every item is either selected or deselected, flip the inversion bit\n newSelected = [];\n newInvert = !invert;\n }\n }\n\n onChange({ ...aggregation, selected: newSelected, invert: newInvert });\n },\n [aggregation, invert, validColumns, selected, onChange]\n );\n\n const handleReset = useCallback(() => {\n setSort(SortType.NONE);\n onChange({ ...aggregation, selected: [], invert: true });\n }, [aggregation, onChange]);\n\n const handleViewportChange = useCallback(\n (newTop, newBottom) => {\n setTop(newTop);\n setBottom(newBottom);\n },\n [setTop, setBottom]\n );\n\n const toggleAll = useCallback(() => {\n if (selected.length === 0) {\n onChange({ ...aggregation, invert: !invert });\n } else {\n onChange({ ...aggregation, selected: [], invert: true });\n }\n }, [aggregation, invert, onChange, selected]);\n\n const checked = selected.length === 0 ? invert : null;\n const isModified = selected.length !== 0 || !invert || sort !== SortType.NONE;\n\n return (\n <div role=\"menu\" className=\"aggregation-edit\">\n <div className=\"top-menu\">\n <div className=\"form-inline\">\n <Checkbox checked={checked} onChange={toggleAll}>\n Toggle All\n </Checkbox>\n <div className=\"spacer\" />\n <CSSTransition\n in={isModified}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <Button kind=\"ghost\" className=\"btn-reset\" onClick={handleReset}>\n Reset\n </Button>\n </CSSTransition>\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.ASCENDING,\n })}\n icon={dhSortAlphaDown}\n tooltip=\"Sort ascending\"\n onClick={() => setSort(SortType.ASCENDING)}\n />\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.DESCENDING,\n })}\n icon={dhSortAlphaUp}\n tooltip=\"Sort descending\"\n onClick={() => setSort(SortType.DESCENDING)}\n />\n </div>\n </div>\n <div className=\"aggregation-edit-item-list\">\n <ItemList\n itemCount={validColumns.length}\n items={items}\n offset={top}\n renderItem={({ item }) => (\n <Checkbox checked={isSelected(item.value)}>\n {item.displayValue}\n </Checkbox>\n )}\n onSelect={handleSelect}\n onViewportChange={handleViewportChange}\n rowHeight={DEFAULT_ROW_HEIGHT}\n focusSelector=\"input\"\n ref={list}\n />\n </div>\n </div>\n );\n};\n\nexport default AggregationEdit;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"AggregationOperation.js","names":["AggregationOperation"],"sources":["../../../src/sidebar/aggregations/AggregationOperation.ts"],"sourcesContent":["enum AggregationOperation {\n COUNT = 'Count',\n MIN = 'Min',\n MAX = 'Max',\n SUM = 'Sum',\n ABS_SUM = 'AbsSum',\n VAR = 'Var',\n AVG = 'Avg',\n STD = 'Std',\n FIRST = 'First',\n LAST = 'Last',\n SKIP = 'Skip',\n COUNT_DISTINCT = 'CountDistinct',\n DISTINCT = 'Distinct',\n UNIQUE = 'Unique',\n}\n\nexport default AggregationOperation;\n"],"mappings":"IAAKA,oB;;WAAAA,oB;EAAAA,oB;EAAAA,oB;EAAAA,oB;EAAAA,oB;EAAAA,oB;EAAAA,oB;EAAAA,oB;EAAAA,oB;EAAAA,oB;EAAAA,oB;EAAAA,oB;EAAAA,oB;EAAAA,oB;EAAAA,oB;GAAAA,oB,KAAAA,oB;;AAiBL,eAAeA,oBAAf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"AggregationUtils.js","names":["TableUtils","AggregationOperation","isRollupOperation","type","isValidOperation","operationType","columnType","COUNT","FIRST","LAST","COUNT_DISTINCT","DISTINCT","UNIQUE","MIN","MAX","isNumberType","isDateType","isTextType","SUM","ABS_SUM","VAR","AVG","STD","SKIP","filterValidColumns","columns","filter","c","getOperationColumnNames","selected","invert","map","name","includes"],"sources":["../../../src/sidebar/aggregations/AggregationUtils.ts"],"sourcesContent":["import type { Column } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport AggregationOperation from './AggregationOperation';\n\n/**\n * Check if an operation requires a rollup/table grouping\n * @param type The operation to check\n * @returns True if this operation applies to the whole table, false if applies to columns\n */\nexport const isRollupOperation = (type: AggregationOperation): boolean => {\n switch (type) {\n // currently no rollup only operations, but there has been in the past\n default:\n return false;\n }\n};\n\n/**\n * Check if an operation is valid against the given column type\n * @param operationType The operation to check\n * @param columnType The column type to check against\n */\nexport const isValidOperation = (\n operationType: AggregationOperation,\n columnType: string\n): boolean => {\n switch (operationType) {\n case AggregationOperation.COUNT:\n case AggregationOperation.FIRST:\n case AggregationOperation.LAST:\n case AggregationOperation.COUNT_DISTINCT:\n case AggregationOperation.DISTINCT:\n case AggregationOperation.UNIQUE:\n return true;\n case AggregationOperation.MIN:\n case AggregationOperation.MAX:\n return (\n TableUtils.isNumberType(columnType) ||\n TableUtils.isDateType(columnType) ||\n TableUtils.isTextType(columnType)\n );\n case AggregationOperation.SUM:\n case AggregationOperation.ABS_SUM:\n case AggregationOperation.VAR:\n case AggregationOperation.AVG:\n case AggregationOperation.STD:\n return TableUtils.isNumberType(columnType);\n case AggregationOperation.SKIP:\n return false;\n // No default case - if AggregationOperation is added, we'll get a compile time error\n }\n};\n\nexport const filterValidColumns = (\n columns: Column[],\n operationType: AggregationOperation\n): Column[] => columns.filter(c => isValidOperation(operationType, c.type));\n\nexport const getOperationColumnNames = (\n columns: Column[],\n operationType: AggregationOperation,\n selected: string[],\n invert: boolean\n): string[] =>\n filterValidColumns(columns, operationType)\n .map(({ name }) => name)\n .filter(name => (selected.includes(name) ? !invert : invert));\n\nexport default {\n isRollupOperation,\n filterValidColumns,\n getOperationColumnNames,\n};\n"],"mappings":"AACA,SAASA,UAAT,QAA2B,wBAA3B;OACOC,oB;AAEP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,iBAAiB,GAAIC,IAAD,IAAyC;EACxE,QAAQA,IAAR;IACE;IACA;MACE,OAAO,KAAP;EAHJ;AAKD,CANM;AAQP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,gBAAgB,GAAG,CAC9BC,aAD8B,EAE9BC,UAF8B,KAGlB;EACZ,QAAQD,aAAR;IACE,KAAKJ,oBAAoB,CAACM,KAA1B;IACA,KAAKN,oBAAoB,CAACO,KAA1B;IACA,KAAKP,oBAAoB,CAACQ,IAA1B;IACA,KAAKR,oBAAoB,CAACS,cAA1B;IACA,KAAKT,oBAAoB,CAACU,QAA1B;IACA,KAAKV,oBAAoB,CAACW,MAA1B;MACE,OAAO,IAAP;;IACF,KAAKX,oBAAoB,CAACY,GAA1B;IACA,KAAKZ,oBAAoB,CAACa,GAA1B;MACE,OACEd,UAAU,CAACe,YAAX,CAAwBT,UAAxB,KACAN,UAAU,CAACgB,UAAX,CAAsBV,UAAtB,CADA,IAEAN,UAAU,CAACiB,UAAX,CAAsBX,UAAtB,CAHF;;IAKF,KAAKL,oBAAoB,CAACiB,GAA1B;IACA,KAAKjB,oBAAoB,CAACkB,OAA1B;IACA,KAAKlB,oBAAoB,CAACmB,GAA1B;IACA,KAAKnB,oBAAoB,CAACoB,GAA1B;IACA,KAAKpB,oBAAoB,CAACqB,GAA1B;MACE,OAAOtB,UAAU,CAACe,YAAX,CAAwBT,UAAxB,CAAP;;IACF,KAAKL,oBAAoB,CAACsB,IAA1B;MACE,OAAO,KAAP;IACF;EAvBF;AAyBD,CA7BM;AA+BP,OAAO,IAAMC,kBAAkB,GAAG,CAChCC,OADgC,EAEhCpB,aAFgC,KAGnBoB,OAAO,CAACC,MAAR,CAAeC,CAAC,IAAIvB,gBAAgB,CAACC,aAAD,EAAgBsB,CAAC,CAACxB,IAAlB,CAApC,CAHR;AAKP,OAAO,IAAMyB,uBAAuB,GAAG,CACrCH,OADqC,EAErCpB,aAFqC,EAGrCwB,QAHqC,EAIrCC,MAJqC,KAMrCN,kBAAkB,CAACC,OAAD,EAAUpB,aAAV,CAAlB,CACG0B,GADH,CACO;EAAA,IAAC;IAAEC;EAAF,CAAD;EAAA,OAAcA,IAAd;AAAA,CADP,EAEGN,MAFH,CAEUM,IAAI,IAAKH,QAAQ,CAACI,QAAT,CAAkBD,IAAlB,IAA0B,CAACF,MAA3B,GAAoCA,MAFvD,CANK;AAUP,eAAe;EACb5B,iBADa;EAEbsB,kBAFa;EAGbI;AAHa,CAAf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"names":["React","useCallback","useEffect","useMemo","useState","DragDropContext","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","vsEdit","dhWarningFilled","Log","DraggableItemList","DragUtils","Option","Select","RadioItem","RadioGroup","Button","AggregationOperation","AggregationUtils","log","module","SELECTABLE_OPTIONS","SUM","ABS_SUM","MIN","MAX","VAR","AVG","STD","FIRST","LAST","COUNT_DISTINCT","DISTINCT","COUNT","UNIQUE","Aggregations","isRollup","settings","onChange","onEdit","aggregations","showOnTop","options","filter","option","some","aggregation","operation","selectedOperation","setSelectedOperation","selectedRanges","setSelectedRanges","changeSettings","changedSettings","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","debug","startDragging","handleDragEnd","destination","source","stopDragging","destinationIndex","index","draggedItems","reorder","insertIndex","adjustDestinationIndex","newSelectedRanges","length","handleOperationChange","handleAdd","selected","invert","handleDeleteClicked","itemIndex","handleAggregationSelectionChange","handleAggregationSelect","isRollupOperation","handleShowOnTopChange","event","target","value","setDefaultOperation","includes","renderAggregation","item","isClone","selectedCount","text","badgeText","undefined","className","isEditable","renderBadge","renderHandle","isOptionsShown","isAggregationsShown","map"],"mappings":";;;;;;AAAA,OAAOA,KAAP,IAEEC,WAFF,EAGEC,SAHF,EAIEC,OAJF,EAKEC,QALF,QAMO,OANP;AAOA,SAASC,eAAT,QAAgC,qBAAhC;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SACEC,sBADF,EAEEC,OAFF,EAGEC,MAHF,EAIEC,eAJF,QAKO,kBALP;AAMA,OAAOC,GAAP,MAAgB,gBAAhB;AACA,SACEC,iBADF,EAEEC,SAFF,EAGEC,MAHF,EAIEC,MAJF,EAKEC,SALF,EAMEC,UANF,EAOEC,MAPF,QAQO,uBARP;OAWOC,oB;OACAC,gB;;AAGP,IAAMC,GAAG,GAAGV,GAAG,CAACW,MAAJ,CAAW,cAAX,CAAZ;AAoBA,OAAO,IAAMC,kBAAkB,GAAG,CAChCJ,oBAAoB,CAACK,GADW,EAEhCL,oBAAoB,CAACM,OAFW,EAGhCN,oBAAoB,CAACO,GAHW,EAIhCP,oBAAoB,CAACQ,GAJW,EAKhCR,oBAAoB,CAACS,GALW,EAMhCT,oBAAoB,CAACU,GANW,EAOhCV,oBAAoB,CAACW,GAPW,EAQhCX,oBAAoB,CAACY,KARW,EAShCZ,oBAAoB,CAACa,IATW,EAUhCb,oBAAoB,CAACc,cAVW,EAWhCd,oBAAoB,CAACe,QAXW,EAYhCf,oBAAoB,CAACgB,KAZW,EAahChB,oBAAoB,CAACiB,MAbW,CAA3B;;AAgBP,IAAMC,YAAY,GAAG,QAKiB;AAAA,MALhB;AACpBC,IAAAA,QADoB;AAEpBC,IAAAA,QAFoB;AAGpBC,IAAAA,QAHoB;AAIpBC,IAAAA;AAJoB,GAKgB;AACpC,MAAM;AAAEC,IAAAA,YAAF;AAAgBC,IAAAA;AAAhB,MAA8BJ,QAApC;AACA,MAAMK,OAAO,GAAG1C,OAAO,CACrB,MACEqB,kBAAkB,CAACsB,MAAnB,CACEC,MAAM,IACJ,CAACJ,YAAY,CAACK,IAAb,CAAkBC,WAAW,IAAIA,WAAW,CAACC,SAAZ,KAA0BH,MAA3D,CAFL,CAFmB,EAMrB,CAACJ,YAAD,CANqB,CAAvB;AAQA,MAAM,CAACQ,iBAAD,EAAoBC,oBAApB,IAA4ChD,QAAQ,CAACyC,OAAO,CAAC,CAAD,CAAR,CAA1D;AACA,MAAM,CAACQ,cAAD,EAAiBC,iBAAjB,IAAsClD,QAAQ,CAAU,EAAV,CAApD;AACA,MAAMmD,cAAc,GAAGtD,WAAW,CAChCuD,eAAe,IAAI;AACjBf,IAAAA,QAAQ,iCAAMD,QAAN,GAAmBgB,eAAnB,EAAR;AACD,GAH+B,EAIhC,CAACf,QAAD,EAAWD,QAAX,CAJgC,CAAlC;AAMA,MAAMiB,kBAAkB,GAAGxD,WAAW,CACpCyD,eAAe,IAAI;AACjBH,IAAAA,cAAc,CAAC;AAAEZ,MAAAA,YAAY,EAAEe;AAAhB,KAAD,CAAd;AACD,GAHmC,EAIpC,CAACH,cAAD,CAJoC,CAAtC;AAOA,MAAMI,eAAe,GAAG1D,WAAW,CACjC2D,YAAY,IAAI;AACdL,IAAAA,cAAc,CAAC;AAAEX,MAAAA,SAAS,EAAEgB;AAAb,KAAD,CAAd;AACD,GAHgC,EAIjC,CAACL,cAAD,CAJiC,CAAnC;AAOA,MAAMM,eAAe,GAAG5D,WAAW,CAAC,MAAM;AACxCqB,IAAAA,GAAG,CAACwC,KAAJ,CAAU,iBAAV;AAEAhD,IAAAA,SAAS,CAACiD,aAAV;AACD,GAJkC,EAIhC,EAJgC,CAAnC;AAMA,MAAMC,aAAa,GAAG/D,WAAW,CAC/B,SAA6B;AAAA,QAA5B;AAAEgE,MAAAA,WAAF;AAAeC,MAAAA;AAAf,KAA4B;AAC3B5C,IAAAA,GAAG,CAACwC,KAAJ,CAAU,eAAV,EAA2BG,WAA3B,EAAwCC,MAAxC;AAEApD,IAAAA,SAAS,CAACqD,YAAV;;AAEA,QAAIF,WAAW,KAAK,IAApB,EAA0B;AACxB;AACD;;AAED,QAAIG,gBAAgB,GAAGH,WAAW,CAACI,KAAnC;;AACA,QAAIH,MAAM,CAACG,KAAP,GAAeJ,WAAW,CAACI,KAA/B,EAAsC;AACpCD,MAAAA,gBAAgB,IAAI,CAApB;AACD;;AAED,QAAMV,eAAe,GAAG,CAAC,GAAGf,YAAJ,CAAxB;AACA,QAAM2B,YAAY,GAAGxD,SAAS,CAACyD,OAAV,CACnBb,eADmB,EAEnBL,cAFmB,EAGnBK,eAHmB,EAInBU,gBAJmB,CAArB;AAMA,QAAMI,WAAW,GAAG1D,SAAS,CAAC2D,sBAAV,CAClBL,gBADkB,EAElBf,cAFkB,CAApB;AAIA,QAAMqB,iBAA0B,GAAG,CACjC,CAACF,WAAD,EAAcA,WAAW,GAAGF,YAAY,CAACK,MAA3B,GAAoC,CAAlD,CADiC,CAAnC;AAGAlB,IAAAA,kBAAkB,CAACC,eAAD,CAAlB;AACAJ,IAAAA,iBAAiB,CAACoB,iBAAD,CAAjB;AACD,GA/B8B,EAgC/B,CAACjB,kBAAD,EAAqBd,YAArB,EAAmCU,cAAnC,EAAmDC,iBAAnD,CAhC+B,CAAjC;AAmCA,MAAMsB,qBAAqB,GAAG3E,WAAW,CACvCiD,SAAS,IAAI;AACXE,IAAAA,oBAAoB,CAACF,SAAD,CAApB;AACD,GAHsC,EAIvC,CAACE,oBAAD,CAJuC,CAAzC;AAOA,MAAMyB,SAAS,GAAG5E,WAAW,CAAC,MAAM;AAClCwD,IAAAA,kBAAkB,CAAC,CACjB,GAAGd,YADc,EAEjB;AAAEO,MAAAA,SAAS,EAAEC,iBAAb;AAAgC2B,MAAAA,QAAQ,EAAE,EAA1C;AAA8CC,MAAAA,MAAM,EAAE;AAAtD,KAFiB,CAAD,CAAlB;AAID,GAL4B,EAK1B,CAACpC,YAAD,EAAeQ,iBAAf,EAAkCM,kBAAlC,CAL0B,CAA7B;AAOA,MAAMuB,mBAAmB,GAAG/E,WAAW,CACpCgF,SAAD,IAA2B;AACzBxB,IAAAA,kBAAkB,CAChBd,YAAY,CAACG,MAAb,CAAoB,CAACG,WAAD,EAAcoB,KAAd,KAAwBA,KAAK,KAAKY,SAAtD,CADgB,CAAlB;AAGD,GALoC,EAMrC,CAACtC,YAAD,EAAec,kBAAf,CANqC,CAAvC;AASA,MAAMyB,gCAAgC,GAAGjF,WAAW,CAClDyE,iBAAiB,IAAI;AACnBpB,IAAAA,iBAAiB,CAACoB,iBAAD,CAAjB;AACD,GAHiD,EAIlD,CAACpB,iBAAD,CAJkD,CAApD;AAOA,MAAM6B,uBAAuB,GAAGlF,WAAW,CACzCgF,SAAS,IAAI;AACX,QAAMhC,WAAW,GAAGN,YAAY,CAACsC,SAAD,CAAhC;;AACA,QAAI,CAAC5D,gBAAgB,CAAC+D,iBAAjB,CAAmCnC,WAAW,CAACC,SAA/C,CAAL,EAAgE;AAC9DR,MAAAA,MAAM,CAACO,WAAD,CAAN;AACD;AACF,GANwC,EAOzC,CAACN,YAAD,EAAeD,MAAf,CAPyC,CAA3C;AAUA,MAAM2C,qBAAqB,GAAGpF,WAAW,CACtCqF,KAAD,IAA0C;AACxC3B,IAAAA,eAAe,CAAC2B,KAAK,CAACC,MAAN,CAAaC,KAAb,KAAuB,MAAxB,CAAf;AACD,GAHsC,EAIvC,CAAC7B,eAAD,CAJuC,CAAzC;AAOAzD,EAAAA,SAAS,CACP,SAASuF,mBAAT,GAA+B;AAC7B,QAAI5C,OAAO,CAAC8B,MAAR,GAAiB,CAAjB,IAAsB,CAAC9B,OAAO,CAAC6C,QAAR,CAAiBvC,iBAAjB,CAA3B,EAAgE;AAC9DC,MAAAA,oBAAoB,CAACP,OAAO,CAAC,CAAD,CAAR,CAApB;AACD;AACF,GALM,EAMP,CAACA,OAAD,EAAUM,iBAAV,CANO,CAAT;AASA,MAAMwC,iBAAiB,GAAG1F,WAAW,CACnC,SAK6C;AAAA,QAL5C;AACC2F,MAAAA,IADD;AAECX,MAAAA,SAFD;AAGCY,MAAAA,OAHD;AAICC,MAAAA;AAJD,KAK4C;AAC3C,QAAMC,IAAI,GAAGH,IAAI,CAAC1C,SAAlB;AACA,QAAM8C,SAAS,GAAGH,OAAO,aAAMC,aAAN,IAAwBG,SAAjD;AACA,QAAMC,SAAS,GAAGL,OAAO,GAAG,sBAAH,GAA4BI,SAArD;AACA,QAAMb,iBAAiB,GAAG/D,gBAAgB,CAAC+D,iBAAjB,CACxBQ,IAAI,CAAC1C,SADmB,CAA1B;AAGA,QAAMiD,UAAU,GAAG,CAACN,OAAD,IAAY,CAACT,iBAAhC;AACA,wBACE,uDACE;AACE,MAAA,SAAS,EAAE9E,UAAU,CACnB,wBADmB,EAEnB,kCAFmB,EAGnB4F,SAHmB;AADvB,oBAOE;AAAM,MAAA,SAAS,EAAC;AAAhB,OACGH,IADH,EAEG,CAACxD,QAAD,IAAa6C,iBAAb,iBACC;AAAM,MAAA,SAAS,EAAC;AAAhB,oBACE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAEzE;AAAvB,MADF,qBAHJ,CAPF,EAeGE,iBAAiB,CAACuF,WAAlB,CAA8B;AAAEL,MAAAA,IAAI,EAAEC;AAAR,KAA9B,CAfH,EAgBGnF,iBAAiB,CAACwF,YAAlB,EAhBH,CADF,EAmBG,CAACR,OAAD,iBACC,uDACE,oBAAC,MAAD;AACE,MAAA,IAAI,EAAC,OADP;AAEE,MAAA,SAAS,EAAC,UAFZ;AAGE,MAAA,IAAI,EAAEnF,MAHR;AAIE,MAAA,OAAO,EAAC,cAJV;AAKE,MAAA,OAAO,EAAE,MAAMgC,MAAM,CAACkD,IAAD,CALvB;AAME,MAAA,QAAQ,EAAE,CAACO;AANb,MADF,eASE,oBAAC,MAAD;AACE,MAAA,IAAI,EAAC,OADP;AAEE,MAAA,SAAS,EAAC,YAFZ;AAGE,MAAA,IAAI,EAAE1F,OAHR;AAIE,MAAA,OAAO,EAAC,oBAJV;AAKE,MAAA,OAAO,EAAE,MAAMuE,mBAAmB,CAACC,SAAD;AALpC,MATF,CApBJ,CADF;AAyCD,GAvDkC,EAwDnC,CAACD,mBAAD,EAAsBtC,MAAtB,EAA8BH,QAA9B,CAxDmC,CAArC;AA2DA,MAAM+D,cAAc,GAAGzD,OAAO,CAAC8B,MAAR,GAAiB,CAAxC;AACA,MAAM4B,mBAAmB,GAAG5D,YAAY,CAACgC,MAAb,GAAsB,CAAlD;AAEA,sBACE;AAAK,IAAA,SAAS,EAAC;AAAf,KACG2B,cAAc,iBACb;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE,oBAAC,MAAD;AAAQ,IAAA,QAAQ,EAAE1B,qBAAlB;AAAyC,IAAA,KAAK,EAAEzB;AAAhD,KACGN,OAAO,CAAC2D,GAAR,CAAYzD,MAAM,iBACjB,oBAAC,MAAD;AAAQ,IAAA,KAAK,EAAEA,MAAf;AAAuB,IAAA,GAAG,EAAEA;AAA5B,KACGA,MADH,CADD,CADH,CADF,eAQE;AACE,IAAA,IAAI,EAAC,QADP;AAEE,IAAA,SAAS,EAAC,sBAFZ;AAGE,IAAA,OAAO,EAAE8B;AAHX,kBAKE,oBAAC,eAAD;AAAiB,IAAA,IAAI,EAAErE;AAAvB,IALF,oBARF,CAFJ,EAoBG8F,cAAc,IAAIC,mBAAlB,iBAAyC,+BApB5C,EAqBGA,mBAAmB,iBAClB,0CACG,CAAChE,QAAD,iBACC;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE,oDADF,eAEE,oBAAC,UAAD;AACE,IAAA,QAAQ,EAAE8C,qBADZ;AAEE,IAAA,KAAK,YAAKzC,SAAL;AAFP,kBAIE,oBAAC,SAAD;AAAW,IAAA,KAAK,EAAC;AAAjB,WAJF,eAKE,oBAAC,SAAD;AAAW,IAAA,KAAK,EAAC;AAAjB,cALF,CAFF,CAFJ,eAaE,oBAAC,eAAD;AACE,IAAA,WAAW,EAAEiB,eADf;AAEE,IAAA,SAAS,EAAEG;AAFb,kBAIE,oBAAC,iBAAD;AACE,IAAA,SAAS,EAAC,uBADZ;AAEE,IAAA,SAAS,EAAErB,YAAY,CAACgC,MAF1B;AAGE,IAAA,KAAK,EAAEhC,YAHT;AAIE,IAAA,UAAU,EAAEgD,iBAJd;AAKE,IAAA,MAAM,EAAE,CALV;AAME,IAAA,iBAAiB,EAAET,gCANrB;AAOE,IAAA,QAAQ,EAAEC,uBAPZ;AAQE,IAAA,cAAc,EAAE9B,cARlB;AASE,IAAA,aAAa;AATf,IAJF,CAbF,CAtBJ,CADF;AAwDD,CA5PD;;AA8PA,eAAef,YAAf","sourcesContent":["import React, {\n ChangeEvent,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { DragDropContext } from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhNewCircleLargeFilled,\n vsTrash,\n vsEdit,\n dhWarningFilled,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n DraggableItemList,\n DragUtils,\n Option,\n Select,\n RadioItem,\n RadioGroup,\n Button,\n} from '@deephaven/components';\nimport type { DraggableRenderItemProps, Range } from '@deephaven/components';\nimport { ModelIndex } from '@deephaven/grid';\nimport AggregationOperation from './AggregationOperation';\nimport AggregationUtils from './AggregationUtils';\nimport './Aggregations.scss';\n\nconst log = Log.module('Aggregations');\n\nexport type Aggregation = {\n operation: AggregationOperation;\n selected: string[];\n invert: boolean;\n};\n\nexport type AggregationSettings = {\n aggregations: Aggregation[];\n showOnTop: boolean;\n};\n\nexport type AggregationsProps = {\n isRollup: boolean;\n settings: AggregationSettings;\n onChange: (settings: AggregationSettings) => void;\n onEdit: (aggregation: Aggregation) => void;\n};\n\nexport const SELECTABLE_OPTIONS = [\n AggregationOperation.SUM,\n AggregationOperation.ABS_SUM,\n AggregationOperation.MIN,\n AggregationOperation.MAX,\n AggregationOperation.VAR,\n AggregationOperation.AVG,\n AggregationOperation.STD,\n AggregationOperation.FIRST,\n AggregationOperation.LAST,\n AggregationOperation.COUNT_DISTINCT,\n AggregationOperation.DISTINCT,\n AggregationOperation.COUNT,\n AggregationOperation.UNIQUE,\n];\n\nconst Aggregations = ({\n isRollup,\n settings,\n onChange,\n onEdit,\n}: AggregationsProps): JSX.Element => {\n const { aggregations, showOnTop } = settings;\n const options = useMemo(\n () =>\n SELECTABLE_OPTIONS.filter(\n option =>\n !aggregations.some(aggregation => aggregation.operation === option)\n ),\n [aggregations]\n );\n const [selectedOperation, setSelectedOperation] = useState(options[0]);\n const [selectedRanges, setSelectedRanges] = useState<Range[]>([]);\n const changeSettings = useCallback(\n changedSettings => {\n onChange({ ...settings, ...changedSettings });\n },\n [onChange, settings]\n );\n const changeAggregations = useCallback(\n newAggregations => {\n changeSettings({ aggregations: newAggregations });\n },\n [changeSettings]\n );\n\n const changeShowOnTop = useCallback(\n newShowOnTop => {\n changeSettings({ showOnTop: newShowOnTop });\n },\n [changeSettings]\n );\n\n const handleDragStart = useCallback(() => {\n log.debug('handleDragStart');\n\n DragUtils.startDragging();\n }, []);\n\n const handleDragEnd = useCallback(\n ({ destination, source }) => {\n log.debug('handleDragEnd', destination, source);\n\n DragUtils.stopDragging();\n\n if (destination === null) {\n return;\n }\n\n let destinationIndex = destination.index;\n if (source.index < destination.index) {\n destinationIndex += 1;\n }\n\n const newAggregations = [...aggregations];\n const draggedItems = DragUtils.reorder(\n newAggregations,\n selectedRanges,\n newAggregations,\n destinationIndex\n );\n const insertIndex = DragUtils.adjustDestinationIndex(\n destinationIndex,\n selectedRanges\n );\n const newSelectedRanges: Range[] = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n changeAggregations(newAggregations);\n setSelectedRanges(newSelectedRanges);\n },\n [changeAggregations, aggregations, selectedRanges, setSelectedRanges]\n );\n\n const handleOperationChange = useCallback(\n operation => {\n setSelectedOperation(operation);\n },\n [setSelectedOperation]\n );\n\n const handleAdd = useCallback(() => {\n changeAggregations([\n ...aggregations,\n { operation: selectedOperation, selected: [], invert: true },\n ]);\n }, [aggregations, selectedOperation, changeAggregations]);\n\n const handleDeleteClicked = useCallback(\n (itemIndex: ModelIndex) => {\n changeAggregations(\n aggregations.filter((aggregation, index) => index !== itemIndex)\n );\n },\n [aggregations, changeAggregations]\n );\n\n const handleAggregationSelectionChange = useCallback(\n newSelectedRanges => {\n setSelectedRanges(newSelectedRanges);\n },\n [setSelectedRanges]\n );\n\n const handleAggregationSelect = useCallback(\n itemIndex => {\n const aggregation = aggregations[itemIndex];\n if (!AggregationUtils.isRollupOperation(aggregation.operation)) {\n onEdit(aggregation);\n }\n },\n [aggregations, onEdit]\n );\n\n const handleShowOnTopChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n changeShowOnTop(event.target.value === 'true');\n },\n [changeShowOnTop]\n );\n\n useEffect(\n function setDefaultOperation() {\n if (options.length > 0 && !options.includes(selectedOperation)) {\n setSelectedOperation(options[0]);\n }\n },\n [options, selectedOperation]\n );\n\n const renderAggregation = useCallback(\n ({\n item,\n itemIndex,\n isClone,\n selectedCount,\n }: DraggableRenderItemProps<Aggregation>) => {\n const text = item.operation;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : undefined;\n const isRollupOperation = AggregationUtils.isRollupOperation(\n item.operation\n );\n const isEditable = !isClone && !isRollupOperation;\n return (\n <>\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">\n {text}\n {!isRollup && isRollupOperation && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Requires rollup\n </span>\n )}\n </span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n {!isClone && (\n <>\n <Button\n kind=\"ghost\"\n className=\"btn-edit\"\n icon={vsEdit}\n tooltip=\"Edit Columns\"\n onClick={() => onEdit(item)}\n disabled={!isEditable}\n />\n <Button\n kind=\"ghost\"\n className=\"btn-delete\"\n icon={vsTrash}\n tooltip=\"Delete Aggregation\"\n onClick={() => handleDeleteClicked(itemIndex)}\n />\n </>\n )}\n </>\n );\n },\n [handleDeleteClicked, onEdit, isRollup]\n );\n\n const isOptionsShown = options.length > 0;\n const isAggregationsShown = aggregations.length > 0;\n\n return (\n <div className=\"aggregations\">\n {isOptionsShown && (\n <div className=\"form-inline\">\n <Select onChange={handleOperationChange} value={selectedOperation}>\n {options.map(option => (\n <Option value={option} key={option}>\n {option}\n </Option>\n ))}\n </Select>\n <button\n type=\"button\"\n className=\"btn btn-link btn-add\"\n onClick={handleAdd}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Aggregation\n </button>\n </div>\n )}\n {isOptionsShown && isAggregationsShown && <hr />}\n {isAggregationsShown && (\n <>\n {!isRollup && (\n <div className=\"form-inline\">\n <label>Placement: </label>\n <RadioGroup\n onChange={handleShowOnTopChange}\n value={`${showOnTop}`}\n >\n <RadioItem value=\"true\">Top</RadioItem>\n <RadioItem value=\"false\">Bottom</RadioItem>\n </RadioGroup>\n </div>\n )}\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <DraggableItemList<Aggregation>\n className=\"selected-aggregations\"\n itemCount={aggregations.length}\n items={aggregations}\n renderItem={renderAggregation}\n offset={0}\n onSelectionChange={handleAggregationSelectionChange}\n onSelect={handleAggregationSelect}\n selectedRanges={selectedRanges}\n isMultiSelect\n />\n </DragDropContext>\n </>\n )}\n </div>\n );\n};\n\nexport default Aggregations;\n"],"file":"Aggregations.js"}
|
|
1
|
+
{"version":3,"file":"Aggregations.js","names":["React","useCallback","useEffect","useMemo","useState","DragDropContext","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","vsEdit","dhWarningFilled","Log","DraggableItemList","DragUtils","Option","Select","RadioItem","RadioGroup","Button","AggregationOperation","AggregationUtils","log","module","SELECTABLE_OPTIONS","SUM","ABS_SUM","MIN","MAX","VAR","AVG","STD","FIRST","LAST","COUNT_DISTINCT","DISTINCT","COUNT","UNIQUE","Aggregations","isRollup","settings","onChange","onEdit","aggregations","showOnTop","options","filter","option","some","aggregation","operation","selectedOperation","setSelectedOperation","selectedRanges","setSelectedRanges","changeSettings","changedSettings","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","debug","startDragging","handleDragEnd","destination","source","stopDragging","destinationIndex","index","draggedItems","reorder","insertIndex","adjustDestinationIndex","newSelectedRanges","length","handleOperationChange","handleAdd","selected","invert","handleDeleteClicked","itemIndex","handleAggregationSelectionChange","handleAggregationSelect","isRollupOperation","handleShowOnTopChange","event","target","value","setDefaultOperation","includes","renderAggregation","item","isClone","selectedCount","text","badgeText","undefined","className","isEditable","renderBadge","renderHandle","isOptionsShown","isAggregationsShown","map"],"sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { DragDropContext } from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhNewCircleLargeFilled,\n vsTrash,\n vsEdit,\n dhWarningFilled,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n DraggableItemList,\n DragUtils,\n Option,\n Select,\n RadioItem,\n RadioGroup,\n Button,\n} from '@deephaven/components';\nimport type { DraggableRenderItemProps, Range } from '@deephaven/components';\nimport { ModelIndex } from '@deephaven/grid';\nimport AggregationOperation from './AggregationOperation';\nimport AggregationUtils from './AggregationUtils';\nimport './Aggregations.scss';\n\nconst log = Log.module('Aggregations');\n\nexport type Aggregation = {\n operation: AggregationOperation;\n selected: string[];\n invert: boolean;\n};\n\nexport type AggregationSettings = {\n aggregations: Aggregation[];\n showOnTop: boolean;\n};\n\nexport type AggregationsProps = {\n isRollup: boolean;\n settings: AggregationSettings;\n onChange: (settings: AggregationSettings) => void;\n onEdit: (aggregation: Aggregation) => void;\n};\n\nexport const SELECTABLE_OPTIONS = [\n AggregationOperation.SUM,\n AggregationOperation.ABS_SUM,\n AggregationOperation.MIN,\n AggregationOperation.MAX,\n AggregationOperation.VAR,\n AggregationOperation.AVG,\n AggregationOperation.STD,\n AggregationOperation.FIRST,\n AggregationOperation.LAST,\n AggregationOperation.COUNT_DISTINCT,\n AggregationOperation.DISTINCT,\n AggregationOperation.COUNT,\n AggregationOperation.UNIQUE,\n];\n\nconst Aggregations = ({\n isRollup,\n settings,\n onChange,\n onEdit,\n}: AggregationsProps): JSX.Element => {\n const { aggregations, showOnTop } = settings;\n const options = useMemo(\n () =>\n SELECTABLE_OPTIONS.filter(\n option =>\n !aggregations.some(aggregation => aggregation.operation === option)\n ),\n [aggregations]\n );\n const [selectedOperation, setSelectedOperation] = useState(options[0]);\n const [selectedRanges, setSelectedRanges] = useState<Range[]>([]);\n const changeSettings = useCallback(\n changedSettings => {\n onChange({ ...settings, ...changedSettings });\n },\n [onChange, settings]\n );\n const changeAggregations = useCallback(\n newAggregations => {\n changeSettings({ aggregations: newAggregations });\n },\n [changeSettings]\n );\n\n const changeShowOnTop = useCallback(\n newShowOnTop => {\n changeSettings({ showOnTop: newShowOnTop });\n },\n [changeSettings]\n );\n\n const handleDragStart = useCallback(() => {\n log.debug('handleDragStart');\n\n DragUtils.startDragging();\n }, []);\n\n const handleDragEnd = useCallback(\n ({ destination, source }) => {\n log.debug('handleDragEnd', destination, source);\n\n DragUtils.stopDragging();\n\n if (destination === null) {\n return;\n }\n\n let destinationIndex = destination.index;\n if (source.index < destination.index) {\n destinationIndex += 1;\n }\n\n const newAggregations = [...aggregations];\n const draggedItems = DragUtils.reorder(\n newAggregations,\n selectedRanges,\n newAggregations,\n destinationIndex\n );\n const insertIndex = DragUtils.adjustDestinationIndex(\n destinationIndex,\n selectedRanges\n );\n const newSelectedRanges: Range[] = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n changeAggregations(newAggregations);\n setSelectedRanges(newSelectedRanges);\n },\n [changeAggregations, aggregations, selectedRanges, setSelectedRanges]\n );\n\n const handleOperationChange = useCallback(\n operation => {\n setSelectedOperation(operation);\n },\n [setSelectedOperation]\n );\n\n const handleAdd = useCallback(() => {\n changeAggregations([\n ...aggregations,\n { operation: selectedOperation, selected: [], invert: true },\n ]);\n }, [aggregations, selectedOperation, changeAggregations]);\n\n const handleDeleteClicked = useCallback(\n (itemIndex: ModelIndex) => {\n changeAggregations(\n aggregations.filter((aggregation, index) => index !== itemIndex)\n );\n },\n [aggregations, changeAggregations]\n );\n\n const handleAggregationSelectionChange = useCallback(\n newSelectedRanges => {\n setSelectedRanges(newSelectedRanges);\n },\n [setSelectedRanges]\n );\n\n const handleAggregationSelect = useCallback(\n itemIndex => {\n const aggregation = aggregations[itemIndex];\n if (!AggregationUtils.isRollupOperation(aggregation.operation)) {\n onEdit(aggregation);\n }\n },\n [aggregations, onEdit]\n );\n\n const handleShowOnTopChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n changeShowOnTop(event.target.value === 'true');\n },\n [changeShowOnTop]\n );\n\n useEffect(\n function setDefaultOperation() {\n if (options.length > 0 && !options.includes(selectedOperation)) {\n setSelectedOperation(options[0]);\n }\n },\n [options, selectedOperation]\n );\n\n const renderAggregation = useCallback(\n ({\n item,\n itemIndex,\n isClone,\n selectedCount,\n }: DraggableRenderItemProps<Aggregation>) => {\n const text = item.operation;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : undefined;\n const isRollupOperation = AggregationUtils.isRollupOperation(\n item.operation\n );\n const isEditable = !isClone && !isRollupOperation;\n return (\n <>\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">\n {text}\n {!isRollup && isRollupOperation && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Requires rollup\n </span>\n )}\n </span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n {!isClone && (\n <>\n <Button\n kind=\"ghost\"\n className=\"btn-edit\"\n icon={vsEdit}\n tooltip=\"Edit Columns\"\n onClick={() => onEdit(item)}\n disabled={!isEditable}\n />\n <Button\n kind=\"ghost\"\n className=\"btn-delete\"\n icon={vsTrash}\n tooltip=\"Delete Aggregation\"\n onClick={() => handleDeleteClicked(itemIndex)}\n />\n </>\n )}\n </>\n );\n },\n [handleDeleteClicked, onEdit, isRollup]\n );\n\n const isOptionsShown = options.length > 0;\n const isAggregationsShown = aggregations.length > 0;\n\n return (\n <div className=\"aggregations\">\n {isOptionsShown && (\n <div className=\"form-inline\">\n <Select onChange={handleOperationChange} value={selectedOperation}>\n {options.map(option => (\n <Option value={option} key={option}>\n {option}\n </Option>\n ))}\n </Select>\n <button\n type=\"button\"\n className=\"btn btn-link btn-add\"\n onClick={handleAdd}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Aggregation\n </button>\n </div>\n )}\n {isOptionsShown && isAggregationsShown && <hr />}\n {isAggregationsShown && (\n <>\n {!isRollup && (\n <div className=\"form-inline\">\n <label>Placement: </label>\n <RadioGroup\n onChange={handleShowOnTopChange}\n value={`${showOnTop}`}\n >\n <RadioItem value=\"true\">Top</RadioItem>\n <RadioItem value=\"false\">Bottom</RadioItem>\n </RadioGroup>\n </div>\n )}\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <DraggableItemList<Aggregation>\n className=\"selected-aggregations\"\n itemCount={aggregations.length}\n items={aggregations}\n renderItem={renderAggregation}\n offset={0}\n onSelectionChange={handleAggregationSelectionChange}\n onSelect={handleAggregationSelect}\n selectedRanges={selectedRanges}\n isMultiSelect\n />\n </DragDropContext>\n </>\n )}\n </div>\n );\n};\n\nexport default Aggregations;\n"],"mappings":";;;;;;AAAA,OAAOA,KAAP,IAEEC,WAFF,EAGEC,SAHF,EAIEC,OAJF,EAKEC,QALF,QAMO,OANP;AAOA,SAASC,eAAT,QAAgC,qBAAhC;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SACEC,sBADF,EAEEC,OAFF,EAGEC,MAHF,EAIEC,eAJF,QAKO,kBALP;AAMA,OAAOC,GAAP,MAAgB,gBAAhB;AACA,SACEC,iBADF,EAEEC,SAFF,EAGEC,MAHF,EAIEC,MAJF,EAKEC,SALF,EAMEC,UANF,EAOEC,MAPF,QAQO,uBARP;OAWOC,oB;OACAC,gB;;AAGP,IAAMC,GAAG,GAAGV,GAAG,CAACW,MAAJ,CAAW,cAAX,CAAZ;AAoBA,OAAO,IAAMC,kBAAkB,GAAG,CAChCJ,oBAAoB,CAACK,GADW,EAEhCL,oBAAoB,CAACM,OAFW,EAGhCN,oBAAoB,CAACO,GAHW,EAIhCP,oBAAoB,CAACQ,GAJW,EAKhCR,oBAAoB,CAACS,GALW,EAMhCT,oBAAoB,CAACU,GANW,EAOhCV,oBAAoB,CAACW,GAPW,EAQhCX,oBAAoB,CAACY,KARW,EAShCZ,oBAAoB,CAACa,IATW,EAUhCb,oBAAoB,CAACc,cAVW,EAWhCd,oBAAoB,CAACe,QAXW,EAYhCf,oBAAoB,CAACgB,KAZW,EAahChB,oBAAoB,CAACiB,MAbW,CAA3B;;AAgBP,IAAMC,YAAY,GAAG,QAKiB;EAAA,IALhB;IACpBC,QADoB;IAEpBC,QAFoB;IAGpBC,QAHoB;IAIpBC;EAJoB,CAKgB;EACpC,IAAM;IAAEC,YAAF;IAAgBC;EAAhB,IAA8BJ,QAApC;EACA,IAAMK,OAAO,GAAG1C,OAAO,CACrB,MACEqB,kBAAkB,CAACsB,MAAnB,CACEC,MAAM,IACJ,CAACJ,YAAY,CAACK,IAAb,CAAkBC,WAAW,IAAIA,WAAW,CAACC,SAAZ,KAA0BH,MAA3D,CAFL,CAFmB,EAMrB,CAACJ,YAAD,CANqB,CAAvB;EAQA,IAAM,CAACQ,iBAAD,EAAoBC,oBAApB,IAA4ChD,QAAQ,CAACyC,OAAO,CAAC,CAAD,CAAR,CAA1D;EACA,IAAM,CAACQ,cAAD,EAAiBC,iBAAjB,IAAsClD,QAAQ,CAAU,EAAV,CAApD;EACA,IAAMmD,cAAc,GAAGtD,WAAW,CAChCuD,eAAe,IAAI;IACjBf,QAAQ,iCAAMD,QAAN,GAAmBgB,eAAnB,EAAR;EACD,CAH+B,EAIhC,CAACf,QAAD,EAAWD,QAAX,CAJgC,CAAlC;EAMA,IAAMiB,kBAAkB,GAAGxD,WAAW,CACpCyD,eAAe,IAAI;IACjBH,cAAc,CAAC;MAAEZ,YAAY,EAAEe;IAAhB,CAAD,CAAd;EACD,CAHmC,EAIpC,CAACH,cAAD,CAJoC,CAAtC;EAOA,IAAMI,eAAe,GAAG1D,WAAW,CACjC2D,YAAY,IAAI;IACdL,cAAc,CAAC;MAAEX,SAAS,EAAEgB;IAAb,CAAD,CAAd;EACD,CAHgC,EAIjC,CAACL,cAAD,CAJiC,CAAnC;EAOA,IAAMM,eAAe,GAAG5D,WAAW,CAAC,MAAM;IACxCqB,GAAG,CAACwC,KAAJ,CAAU,iBAAV;IAEAhD,SAAS,CAACiD,aAAV;EACD,CAJkC,EAIhC,EAJgC,CAAnC;EAMA,IAAMC,aAAa,GAAG/D,WAAW,CAC/B,SAA6B;IAAA,IAA5B;MAAEgE,WAAF;MAAeC;IAAf,CAA4B;IAC3B5C,GAAG,CAACwC,KAAJ,CAAU,eAAV,EAA2BG,WAA3B,EAAwCC,MAAxC;IAEApD,SAAS,CAACqD,YAAV;;IAEA,IAAIF,WAAW,KAAK,IAApB,EAA0B;MACxB;IACD;;IAED,IAAIG,gBAAgB,GAAGH,WAAW,CAACI,KAAnC;;IACA,IAAIH,MAAM,CAACG,KAAP,GAAeJ,WAAW,CAACI,KAA/B,EAAsC;MACpCD,gBAAgB,IAAI,CAApB;IACD;;IAED,IAAMV,eAAe,GAAG,CAAC,GAAGf,YAAJ,CAAxB;IACA,IAAM2B,YAAY,GAAGxD,SAAS,CAACyD,OAAV,CACnBb,eADmB,EAEnBL,cAFmB,EAGnBK,eAHmB,EAInBU,gBAJmB,CAArB;IAMA,IAAMI,WAAW,GAAG1D,SAAS,CAAC2D,sBAAV,CAClBL,gBADkB,EAElBf,cAFkB,CAApB;IAIA,IAAMqB,iBAA0B,GAAG,CACjC,CAACF,WAAD,EAAcA,WAAW,GAAGF,YAAY,CAACK,MAA3B,GAAoC,CAAlD,CADiC,CAAnC;IAGAlB,kBAAkB,CAACC,eAAD,CAAlB;IACAJ,iBAAiB,CAACoB,iBAAD,CAAjB;EACD,CA/B8B,EAgC/B,CAACjB,kBAAD,EAAqBd,YAArB,EAAmCU,cAAnC,EAAmDC,iBAAnD,CAhC+B,CAAjC;EAmCA,IAAMsB,qBAAqB,GAAG3E,WAAW,CACvCiD,SAAS,IAAI;IACXE,oBAAoB,CAACF,SAAD,CAApB;EACD,CAHsC,EAIvC,CAACE,oBAAD,CAJuC,CAAzC;EAOA,IAAMyB,SAAS,GAAG5E,WAAW,CAAC,MAAM;IAClCwD,kBAAkB,CAAC,CACjB,GAAGd,YADc,EAEjB;MAAEO,SAAS,EAAEC,iBAAb;MAAgC2B,QAAQ,EAAE,EAA1C;MAA8CC,MAAM,EAAE;IAAtD,CAFiB,CAAD,CAAlB;EAID,CAL4B,EAK1B,CAACpC,YAAD,EAAeQ,iBAAf,EAAkCM,kBAAlC,CAL0B,CAA7B;EAOA,IAAMuB,mBAAmB,GAAG/E,WAAW,CACpCgF,SAAD,IAA2B;IACzBxB,kBAAkB,CAChBd,YAAY,CAACG,MAAb,CAAoB,CAACG,WAAD,EAAcoB,KAAd,KAAwBA,KAAK,KAAKY,SAAtD,CADgB,CAAlB;EAGD,CALoC,EAMrC,CAACtC,YAAD,EAAec,kBAAf,CANqC,CAAvC;EASA,IAAMyB,gCAAgC,GAAGjF,WAAW,CAClDyE,iBAAiB,IAAI;IACnBpB,iBAAiB,CAACoB,iBAAD,CAAjB;EACD,CAHiD,EAIlD,CAACpB,iBAAD,CAJkD,CAApD;EAOA,IAAM6B,uBAAuB,GAAGlF,WAAW,CACzCgF,SAAS,IAAI;IACX,IAAMhC,WAAW,GAAGN,YAAY,CAACsC,SAAD,CAAhC;;IACA,IAAI,CAAC5D,gBAAgB,CAAC+D,iBAAjB,CAAmCnC,WAAW,CAACC,SAA/C,CAAL,EAAgE;MAC9DR,MAAM,CAACO,WAAD,CAAN;IACD;EACF,CANwC,EAOzC,CAACN,YAAD,EAAeD,MAAf,CAPyC,CAA3C;EAUA,IAAM2C,qBAAqB,GAAGpF,WAAW,CACtCqF,KAAD,IAA0C;IACxC3B,eAAe,CAAC2B,KAAK,CAACC,MAAN,CAAaC,KAAb,KAAuB,MAAxB,CAAf;EACD,CAHsC,EAIvC,CAAC7B,eAAD,CAJuC,CAAzC;EAOAzD,SAAS,CACP,SAASuF,mBAAT,GAA+B;IAC7B,IAAI5C,OAAO,CAAC8B,MAAR,GAAiB,CAAjB,IAAsB,CAAC9B,OAAO,CAAC6C,QAAR,CAAiBvC,iBAAjB,CAA3B,EAAgE;MAC9DC,oBAAoB,CAACP,OAAO,CAAC,CAAD,CAAR,CAApB;IACD;EACF,CALM,EAMP,CAACA,OAAD,EAAUM,iBAAV,CANO,CAAT;EASA,IAAMwC,iBAAiB,GAAG1F,WAAW,CACnC,SAK6C;IAAA,IAL5C;MACC2F,IADD;MAECX,SAFD;MAGCY,OAHD;MAICC;IAJD,CAK4C;IAC3C,IAAMC,IAAI,GAAGH,IAAI,CAAC1C,SAAlB;IACA,IAAM8C,SAAS,GAAGH,OAAO,aAAMC,aAAN,IAAwBG,SAAjD;IACA,IAAMC,SAAS,GAAGL,OAAO,GAAG,sBAAH,GAA4BI,SAArD;IACA,IAAMb,iBAAiB,GAAG/D,gBAAgB,CAAC+D,iBAAjB,CACxBQ,IAAI,CAAC1C,SADmB,CAA1B;IAGA,IAAMiD,UAAU,GAAG,CAACN,OAAD,IAAY,CAACT,iBAAhC;IACA,oBACE,uDACE;MACE,SAAS,EAAE9E,UAAU,CACnB,wBADmB,EAEnB,kCAFmB,EAGnB4F,SAHmB;IADvB,gBAOE;MAAM,SAAS,EAAC;IAAhB,GACGH,IADH,EAEG,CAACxD,QAAD,IAAa6C,iBAAb,iBACC;MAAM,SAAS,EAAC;IAAhB,gBACE,oBAAC,eAAD;MAAiB,IAAI,EAAEzE;IAAvB,EADF,qBAHJ,CAPF,EAeGE,iBAAiB,CAACuF,WAAlB,CAA8B;MAAEL,IAAI,EAAEC;IAAR,CAA9B,CAfH,EAgBGnF,iBAAiB,CAACwF,YAAlB,EAhBH,CADF,EAmBG,CAACR,OAAD,iBACC,uDACE,oBAAC,MAAD;MACE,IAAI,EAAC,OADP;MAEE,SAAS,EAAC,UAFZ;MAGE,IAAI,EAAEnF,MAHR;MAIE,OAAO,EAAC,cAJV;MAKE,OAAO,EAAE,MAAMgC,MAAM,CAACkD,IAAD,CALvB;MAME,QAAQ,EAAE,CAACO;IANb,EADF,eASE,oBAAC,MAAD;MACE,IAAI,EAAC,OADP;MAEE,SAAS,EAAC,YAFZ;MAGE,IAAI,EAAE1F,OAHR;MAIE,OAAO,EAAC,oBAJV;MAKE,OAAO,EAAE,MAAMuE,mBAAmB,CAACC,SAAD;IALpC,EATF,CApBJ,CADF;EAyCD,CAvDkC,EAwDnC,CAACD,mBAAD,EAAsBtC,MAAtB,EAA8BH,QAA9B,CAxDmC,CAArC;EA2DA,IAAM+D,cAAc,GAAGzD,OAAO,CAAC8B,MAAR,GAAiB,CAAxC;EACA,IAAM4B,mBAAmB,GAAG5D,YAAY,CAACgC,MAAb,GAAsB,CAAlD;EAEA,oBACE;IAAK,SAAS,EAAC;EAAf,GACG2B,cAAc,iBACb;IAAK,SAAS,EAAC;EAAf,gBACE,oBAAC,MAAD;IAAQ,QAAQ,EAAE1B,qBAAlB;IAAyC,KAAK,EAAEzB;EAAhD,GACGN,OAAO,CAAC2D,GAAR,CAAYzD,MAAM,iBACjB,oBAAC,MAAD;IAAQ,KAAK,EAAEA,MAAf;IAAuB,GAAG,EAAEA;EAA5B,GACGA,MADH,CADD,CADH,CADF,eAQE;IACE,IAAI,EAAC,QADP;IAEE,SAAS,EAAC,sBAFZ;IAGE,OAAO,EAAE8B;EAHX,gBAKE,oBAAC,eAAD;IAAiB,IAAI,EAAErE;EAAvB,EALF,oBARF,CAFJ,EAoBG8F,cAAc,IAAIC,mBAAlB,iBAAyC,+BApB5C,EAqBGA,mBAAmB,iBAClB,0CACG,CAAChE,QAAD,iBACC;IAAK,SAAS,EAAC;EAAf,gBACE,oDADF,eAEE,oBAAC,UAAD;IACE,QAAQ,EAAE8C,qBADZ;IAEE,KAAK,YAAKzC,SAAL;EAFP,gBAIE,oBAAC,SAAD;IAAW,KAAK,EAAC;EAAjB,SAJF,eAKE,oBAAC,SAAD;IAAW,KAAK,EAAC;EAAjB,YALF,CAFF,CAFJ,eAaE,oBAAC,eAAD;IACE,WAAW,EAAEiB,eADf;IAEE,SAAS,EAAEG;EAFb,gBAIE,oBAAC,iBAAD;IACE,SAAS,EAAC,uBADZ;IAEE,SAAS,EAAErB,YAAY,CAACgC,MAF1B;IAGE,KAAK,EAAEhC,YAHT;IAIE,UAAU,EAAEgD,iBAJd;IAKE,MAAM,EAAE,CALV;IAME,iBAAiB,EAAET,gCANrB;IAOE,QAAQ,EAAEC,uBAPZ;IAQE,cAAc,EAAE9B,cARlB;IASE,aAAa;EATf,EAJF,CAbF,CAtBJ,CADF;AAwDD,CA5PD;;AA8PA,eAAef,YAAf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/sidebar/aggregations/index.ts"],"sourcesContent":["export * from './Aggregations';\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"ColumnFormatEditor.js","names":["React","useCallback","useEffect","useState","Log","ComboBox","getDefaultConditionConfigForType","getConditionConfig","getDefaultStyleConfig","ConditionEditor","StyleEditor","log","module","DEFAULT_CALLBACK","undefined","makeDefaultConfig","columns","type","name","column","config","style","ColumnFormatEditor","props","onChange","selectedColumn","setColumn","find","c","conditionConfig","setConditionConfig","conditionValid","setConditionValid","selectedStyle","setStyle","handleColumnChange","value","newColumn","error","handleConditionChange","updatedConditionConfig","isValid","debug","handleStyleChange","updatedStyleConfig","updateColumnFormat","columnInputOptions","map","title"],"sources":["../../../src/sidebar/conditional-formatting/ColumnFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { ComboBox } from '@deephaven/components';\nimport {\n BaseFormatConfig,\n ChangeCallback,\n getDefaultConditionConfigForType,\n getConditionConfig,\n getDefaultStyleConfig,\n ModelColumn,\n} from './ConditionalFormattingUtils';\nimport ConditionEditor from './ConditionEditor';\nimport StyleEditor from './StyleEditor';\n\nconst log = Log.module('ColumnFormatEditor');\n\nexport interface ColumnFormatEditorProps {\n columns: ModelColumn[];\n config?: BaseFormatConfig;\n onChange?: ChangeCallback;\n}\n\nconst DEFAULT_CALLBACK = () => undefined;\n\nfunction makeDefaultConfig(columns: ModelColumn[]): BaseFormatConfig {\n const { type, name } = columns[0];\n const column = { type, name };\n const config = {\n column,\n style: getDefaultStyleConfig(),\n ...getDefaultConditionConfigForType(type),\n };\n return config;\n}\n\nconst ColumnFormatEditor = (props: ColumnFormatEditorProps): JSX.Element => {\n const {\n columns,\n config = makeDefaultConfig(columns),\n onChange = DEFAULT_CALLBACK,\n } = props;\n\n const [selectedColumn, setColumn] = useState(\n columns.find(\n c => c.name === config.column.name && c.type === config.column.type\n ) ?? columns[0]\n );\n const [conditionConfig, setConditionConfig] = useState(\n getConditionConfig(config)\n );\n const [conditionValid, setConditionValid] = useState(false);\n const [selectedStyle, setStyle] = useState(config.style);\n\n const handleColumnChange = useCallback(\n value => {\n const newColumn = columns.find(({ name }) => name === value);\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(`Column ${value} not found.`);\n }\n },\n [columns, selectedColumn]\n );\n\n const handleConditionChange = useCallback(\n (updatedConditionConfig, isValid) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n },\n []\n );\n\n const handleStyleChange = useCallback(updatedStyleConfig => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n }, []);\n\n useEffect(\n function updateColumnFormat() {\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, skip update.');\n return;\n }\n if (selectedStyle === undefined) {\n log.debug('Style is not selected, skip update.');\n return;\n }\n const { type, name } = selectedColumn;\n const column = { type, name };\n onChange(\n {\n column,\n style: selectedStyle,\n ...conditionConfig,\n },\n conditionValid\n );\n },\n [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]\n );\n\n const columnInputOptions = columns.map(({ name }) => ({\n title: name,\n value: name,\n }));\n\n return (\n <div className=\"conditional-rule-editor form\">\n <div className=\"mb-2\">\n <label className=\"mb-0\">Format Cell If</label>\n <ComboBox\n defaultValue={selectedColumn?.name}\n options={columnInputOptions}\n inputPlaceholder=\"Select a column\"\n spellCheck={false}\n onChange={handleColumnChange}\n searchPlaceholder=\"Filter columns\"\n />\n </div>\n\n {selectedColumn !== undefined && (\n <>\n <ConditionEditor\n column={selectedColumn}\n config={conditionConfig}\n onChange={handleConditionChange}\n />\n <StyleEditor config={selectedStyle} onChange={handleStyleChange} />\n </>\n )}\n </div>\n );\n};\n\nexport default ColumnFormatEditor;\n"],"mappings":"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"}
|