@deephaven/iris-grid 0.22.3-deep-bot-test.14 → 0.23.0
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.d.ts +1 -1
- package/dist/AdvancedFilterCreator.d.ts.map +1 -1
- package/dist/AdvancedFilterCreator.js +7 -65
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.d.ts +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js +0 -23
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js +0 -52
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts +1 -5
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +2 -42
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnHeaderGroup.js +0 -11
- package/dist/ColumnHeaderGroup.js.map +1 -1
- package/dist/ColumnStatistics.js +1 -20
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CommonTypes.d.ts +14 -14
- package/dist/CommonTypes.d.ts.map +1 -1
- package/dist/CrossColumnSearch.js +2 -23
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.js +2 -36
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.d.ts +1 -1
- package/dist/GotoRow.d.ts.map +1 -1
- package/dist/GotoRow.js +2 -7
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.d.ts +45 -39
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +77 -519
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.d.ts +2 -2
- package/dist/IrisGridBottomBar.d.ts.map +1 -1
- package/dist/IrisGridBottomBar.js +2 -2
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js +6 -21
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCopyHandler.d.ts +3 -3
- package/dist/IrisGridCopyHandler.d.ts.map +1 -1
- package/dist/IrisGridCopyHandler.js +3 -50
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridMetricCalculator.js +2 -12
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.d.ts +3 -3
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js +32 -58
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelFactory.js +0 -7
- package/dist/IrisGridModelFactory.js.map +1 -1
- package/dist/IrisGridModelUpdater.js +0 -4
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.js +0 -23
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.js +9 -153
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.d.ts +1 -1
- package/dist/IrisGridRenderer.d.ts.map +1 -1
- package/dist/IrisGridRenderer.js +41 -183
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridShortcuts.js.map +1 -1
- package/dist/IrisGridTableModel.d.ts +3 -3
- package/dist/IrisGridTableModel.d.ts.map +1 -1
- package/dist/IrisGridTableModel.js +10 -90
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.d.ts +3 -3
- package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +70 -461
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.js +0 -23
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTheme.d.ts +1 -1
- package/dist/IrisGridTheme.d.ts.map +1 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridTreeTableModel.js +3 -42
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.d.ts +13 -7
- package/dist/IrisGridUtils.d.ts.map +1 -1
- package/dist/IrisGridUtils.js +98 -196
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/MissingKeyError.js +0 -7
- package/dist/MissingKeyError.js.map +1 -1
- package/dist/PartitionSelectorSearch.d.ts +2 -2
- package/dist/PartitionSelectorSearch.js +2 -48
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/PendingDataBottomBar.d.ts +2 -2
- package/dist/PendingDataBottomBar.d.ts.map +1 -1
- package/dist/PendingDataBottomBar.js +2 -7
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/TableViewportUpdater.d.ts +2 -2
- package/dist/TableViewportUpdater.d.ts.map +1 -1
- package/dist/TableViewportUpdater.js +3 -29
- package/dist/TableViewportUpdater.js.map +1 -1
- package/dist/ToastBottomBar.d.ts +2 -2
- package/dist/ToastBottomBar.d.ts.map +1 -1
- package/dist/ToastBottomBar.js +2 -4
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/TreeTableViewportUpdater.js +0 -21
- package/dist/TreeTableViewportUpdater.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.d.ts +1 -1
- package/dist/format-context-menus/CustomFormatAction.d.ts.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js +4 -25
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/format-context-menus/DateTimeFormatContextMenu.js +0 -7
- package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/DecimalFormatContextMenu.js +0 -9
- package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/FormatContextMenuUtils.js +3 -9
- package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
- package/dist/format-context-menus/IntegerFormatContextMenu.js +0 -8
- package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/index.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/key-handlers/ClearFilterKeyHandler.js +0 -8
- package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js +1 -10
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js +0 -11
- package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
- package/dist/key-handlers/index.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +2 -32
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +4 -34
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +0 -20
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +15 -105
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +0 -9
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js +0 -17
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js +2 -15
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js +0 -6
- 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.d.ts +6 -6
- package/dist/sidebar/AdvancedSettingsMenu.d.ts.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js +2 -6
- package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsType.js +0 -2
- package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
- package/dist/sidebar/ChartBuilder.d.ts +2 -2
- package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
- package/dist/sidebar/ChartBuilder.js +2 -46
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.d.ts +2 -2
- package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +6 -58
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js +4 -15
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.js +5 -36
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/OptionType.js +0 -2
- package/dist/sidebar/OptionType.js.map +1 -1
- package/dist/sidebar/RollupRows.d.ts +3 -3
- package/dist/sidebar/RollupRows.d.ts.map +1 -1
- package/dist/sidebar/RollupRows.js +9 -65
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js +0 -13
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +0 -52
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.d.ts +1 -1
- package/dist/sidebar/TableSaver.d.ts.map +1 -1
- package/dist/sidebar/TableSaver.js +10 -123
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.d.ts +5 -4
- package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.js +37 -116
- package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.d.ts +2 -2
- package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js +2 -14
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationOperation.js +0 -2
- package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js +2 -5
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.d.ts +4 -4
- package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js +2 -12
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +2 -16
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js +2 -35
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts +4 -4
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +2 -12
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +0 -3
- package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +5 -5
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +16 -26
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +3 -3
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +9 -172
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js +2 -16
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.d.ts +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js +2 -12
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/icons/BarIcon.js +0 -3
- package/dist/sidebar/icons/BarIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatColumnWhereIcon.js +2 -5
- package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatRowWhereIcon.js +2 -5
- package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/HistogramIcon.js +0 -3
- package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
- package/dist/sidebar/icons/LineIcon.js +0 -3
- package/dist/sidebar/icons/LineIcon.js.map +1 -1
- package/dist/sidebar/icons/PieIcon.js +0 -3
- package/dist/sidebar/icons/PieIcon.js.map +1 -1
- package/dist/sidebar/icons/ScatterIcon.js +0 -3
- 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 +15 -15
package/dist/IrisGrid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGrid.js","names":["React","Component","memoize","classNames","CSSTransition","PropTypes","deepEqual","Log","FontAwesomeIcon","ContextActions","Stack","Menu","Page","Popper","ThemeExport","Tooltip","Button","Grid","GridRange","GridUtils","isEditableGridModel","isExpandableGridModel","dhEye","dhFilterFilled","dhGraphLineUp","dhTriangleDownSquare","vsClose","vsCloudDownload","vsEdit","vsFilter","vsMenu","vsReply","vsRuby","vsSearch","vsSplitHorizontal","vsSymbolOperator","vsTools","dh","DateUtils","Formatter","FormatterUtils","TableUtils","assertNotNull","copyToClipboard","Pending","PromiseUtils","ValidationError","throttle","debounce","clamp","getFormatColumns","PendingDataBottomBar","IrisGridCopyHandler","FilterInputField","ClearFilterKeyHandler","CopyKeyHandler","ReverseKeyHandler","IrisGridCellOverflowMouseHandler","IrisGridColumnSelectMouseHandler","IrisGridColumnTooltipMouseHandler","IrisGridContextMenuHandler","IrisGridDataSelectMouseHandler","IrisGridFilterMouseHandler","IrisGridSortMouseHandler","PendingMouseHandler","ToastBottomBar","IrisGridMetricCalculator","IrisGridModelUpdater","IrisGridRenderer","IrisGridTheme","ColumnStatistics","AdvancedFilterCreator","Aggregations","AggregationEdit","AggregationUtils","ChartBuilder","CustomColumnBuilder","OptionType","RollupRows","TableCsvExporter","TableSaver","VisibilityOrderingBuilder","IrisGridUtils","CrossColumnSearch","IrisGridModel","IrisGridPartitionSelector","SelectDistinctBuilder","AdvancedSettingsType","AdvancedSettingsMenu","SHORTCUTS","ConditionalFormattingMenu","ConditionalFormatEditor","IrisGridCellOverflowModal","GotoRow","log","module","UPDATE_DOWNLOAD_THROTTLE","SET_FILTER_DEBOUNCE","SET_CONDITIONAL_FORMAT_DEBOUNCE","DEFAULT_AGGREGATION_SETTINGS","Object","freeze","aggregations","showOnTop","UNFORMATTED_DATE_PATTERN","isEmptyConfig","advancedFilters","aggregationSettings","customColumns","quickFilters","reverseType","rollupConfig","searchFilter","selectDistinctColumns","sorts","size","length","REVERSE_TYPE","NONE","IrisGrid","makeQuickFilter","column","text","timeZone","err","error","constructor","props","handleAdvancedMenuOpened","bind","max","model","advancedFilterOptions","sortDirection","formatter","handleAdvancedFilterChange","handleAdvancedFilterSortChange","handleAdvancedFilterDone","isChartBuilderAvailable","isCustomColumnsAvailable","isFormatColumnsAvailable","isRollupAvailable","isTotalsAvailable","isSelectDistinctAvailable","isExportAvailable","toggleFilterBarAction","toggleSearchBarAction","toggleGotoRowAction","isFilterBarShown","showSearchBar","canDownloadCsv","canToggleSearch","showGotoRow","hasAdvancedSettings","optionItems","push","type","CHART_BUILDER","title","icon","VISIBILITY_ORDERING_BUILDER","CONDITIONAL_FORMATTING","CUSTOM_COLUMN_BUILDER","ROLLUP_ROWS","AGGREGATIONS","SELECT_DISTINCT","TABLE_EXPORTER","ADVANCED_SETTINGS","QUICK_FILTERS","subtitle","shortcut","getDisplayText","isOn","onChange","action","SEARCH_BAR","GOTO","hiddenColumns","normalizer","join","columns","aggregationMap","forEach","operation","selected","invert","getOperationColumnNames","operationMap","filter","a","isRollupOperation","name","newOperations","map","o","rules","rulesParam","preview","editIndex","debug","undefined","getCachedFormatColumns","originalColumns","config","getModelRollupConfig","getOperationMap","operationOrder","getOperationOrder","hoverSelectColumn","isSelectingColumn","loadingScrimProgress","isMenuShown","customFilters","partitionFilters","getFiltersFromFilterMap","theme","isEditable","floatingRowCount","autoSelectRow","rowFooterWidth","alwaysFetchColumns","movedColumns","floatingLeftColumnCount","floatingRightColumnCount","draggingRange","floatingColumns","i","getModelIndex","columnSet","Set","searchValue","selectedSearchColumns","invertSearchColumns","createSearchFilter","setState","conditionalFormatPreview","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","state","DOWNLOAD_STATUS","DOWNLOADING","overflowButtonTooltipProps","wrapperStyle","position","pointerEvents","popperOptions","placement","modifiers","flip","behavior","Date","now","handleTooltipRef","handleGotoRowOpened","handleGotoRowClosed","handleAdvancedMenuClosed","handleAggregationChange","handleAggregationsChange","handleAggregationEdit","handleAnimationLoop","handleAnimationStart","handleAnimationEnd","handleChartChange","handleChartCreate","handleGridError","handleFilterBarChange","handleFilterBarDone","handleFilterBarTab","handleCancel","handleMenu","handleMenuClose","handleMenuSelect","handleMenuBack","handleRequestFailed","handleSelectionChanged","handleMovedColumnsChanged","handleUpdate","handleViewChanged","handleFormatSelection","handleConditionalFormatCreate","handleConditionalFormatEdit","handleConditionalFormatsChange","handleConditionalFormatEditorSave","handleConditionalFormatEditorCancel","handleUpdateCustomColumns","handleCustomColumnsChanged","handleSelectDistinctChanged","handlePendingDataUpdated","handlePendingCommitClicked","handlePendingDiscardClicked","handleGotoRowSelectedRowNumberSubmit","focusRowInGrid","handleDownloadTable","handleDownloadTableStart","handleCancelDownloadTable","handleDownloadCanceled","handleDownloadCompleted","handlePartitionAppend","handlePartitionChange","handlePartitionFetchAll","handlePartitionDone","handleColumnVisibilityChanged","handleCrossColumnSearch","handleRollupChange","handleOverflowClose","getColumnBoundingRect","handleGotoRowSelectedRowNumberChanged","grid","gridWrapper","lastLoadedConfig","pending","globalColumnFormats","decimalFormatOptions","integerFormatOptions","truncateNumbersWithPound","renderer","tableSaver","crossColumnRef","createRef","isAnimating","filterInputRef","toggleFilterBar","TABLE","TOGGLE_QUICK_FILTER","toggleSearchBar","TOGGLE_SEARCH","toggleGotoRow","GOTO_ROW","discardAction","pendingDataMap","discardPending","catch","INPUT_TABLE","DISCARD","commitAction","pendingDataErrors","commitPending","COMMIT","contextActions","conditionalFormats","customColumnFormatMap","isSelectingPartition","movedColumnsProp","movedRows","movedRowsProp","partition","partitionColumn","userColumnWidths","userRowHeights","canCopy","frozenColumns","keyHandlers","mouseHandlers","metricCalculator","Map","searchColumns","focusedFilterBarColumn","metrics","partitionTable","shownAdvancedFilter","hoverAdvancedFilter","selectedRanges","copyOperation","loadingText","loadingSpinnerShown","shownColumnTooltip","conditionalFormatEditIndex","isTableDownloading","isReady","rollupSelectedColumns","selectedAggregation","openOptions","pendingRowCount","pendingSavePromise","pendingSaveError","toastMessage","showOverflowModal","overflowText","isGotoRowShown","gotoRow","gotoRowError","componentDidMount","find","c","isPartitionColumn","isFilterRequired","isValuesTableAvailable","loadPartitionsTable","initState","startListening","componentDidUpdate","prevProps","inputFilters","settings","stopListening","changedInputFilters","inputFilter","includes","advancedSettings","replaceExistingFilters","get","FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS","clearGridInputField","clearCrossColumSearch","startLoading","applyInputFilters","resetColumnSelection","updateFormatterSettings","updateSorts","loadingScrimStartTime","loadingScrimFinishTime","window","requestAnimationFrame","currentTime","totalTime","Math","min","debug2","sendStateChange","componentWillUnmount","cancel","updateSearchFilter","loadingTimer","clearTimeout","handleDownloadProgressUpdate","animationFrame","cancelAnimationFrame","getValueForCell","columnIndex","rowIndex","rawValue","modelColumn","getModelColumn","modelRow","getModelRow","value","valueForCell","isDateType","i18n","DateTimeFormat","format","TimeZone","getTimeZone","textForCell","modelColumns","modelRows","getTheme","getCachedTheme","floatingTopRowCount","floatingBottomRowCount","getVisibleColumn","modelIndex","getVisibleIndex","replaceExisting","newAdvancedFilters","newQuickFilters","isChanged","findIndex","columnName","columnType","delete","applyQuickFilter","trim","quickFilter","set","setAdvancedFilterMap","setAdvancedFilter","options","setQuickFilter","setFilterMap","filterMap","clearFiltersOnLinkerFilterUpdate","LINK_CHANGE_CLEARS_ALL_FILTERS","clearAllFilters","getColumnIndexByName","removeQuickFilter","isNull","filterValue","isTextType","FilterValue","ofString","ofNumber","eq","removeColumnFilter","current","setValue","rebuildFilters","key","makeAdvancedFilter","setFilters","forceUpdate","getColumnFormats","dateTimeFormatterOptions","getDateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","isColumnFormatChanged","isDateFormattingChanged","isDecimalFormattingChanged","isIntegerFormattingChanged","isTruncateNumbersChanged","updateFormatter","updatedFormats","update","mergedColumnFormats","values","initFormatter","applyInputFiltersOnInit","inputFiltersWithValues","add","valuesTable","resolved","close","sort","desc","applySort","setViewport","data","getViewportData","rows","row","updatePartition","info","handleTableLoadError","partitionFilter","copyCell","String","e","copyRanges","ranges","includeHeaders","formatValues","getUserColumnWidths","boundedRanges","columnCount","rowCount","resetRanges","clearSelectedRanges","setViewState","top","minScrimTransitionTime","maxScrimTransitionTime","height","getBoundingClientRect","scrimTransitionTime","setTimeout","loadingSpinnerDelay","stopLoading","rollback","canRollback","addEventListener","EVENT","UPDATED","REQUEST_FAILED","COLUMNS_CHANGED","PENDING_DATA_UPDATED","removeEventListener","focus","focusFilterBar","isFilterable","left","rightVisible","lastLeft","metricState","getMetricState","newLeft","getLastLeft","getVisibleWidth","leftOffset","lastFocusedFilterBarColumn","hideColumnByVisibleIndex","columnVisibleIndex","setColumnWidth","freezeColumnByColumnName","allFrozenColumns","visibleIndex","newMovedColumns","moveItem","unFreezeColumnByColumnName","frontColumns","modelIndexes","visibilityOption","VISIBILITY_OPTIONS","SHOW","resetColumnWidth","updateCanvasScale","updateCanvas","onPartitionAppend","isCanceled","onError","showAllColumns","entries","columnWidth","toggleSort","addToExisting","currentSorts","toggleSortForColumn","sortColumn","direction","none","isAbs","reverse","isReversible","focusIndex","isTableSearchAvailable","searchDisplayMode","layoutHints","SearchDisplayMode","SEARCH_DISPLAY_HIDE","SEARCH_DISPLAY_SHOW","Error","containsGridCellInputField","document","activeElement","classList","contains","newPendingSavePromise","then","selectColumn","onColumnSelected","selectData","groupedColumns","dataMap","isExpandable","isRowExpandable","isGrouped","onDataSelected","index","oldSort","getSortForColumn","newSort","descending","asc","setSortForColumn","onCreateChart","warn","setGridFocus","defocusInput","backward","selectedFormat","prevCustomColumnFormatMap","normalizedType","getNormalizedType","columnFormattingRule","makeColumnFormattingRule","stopPropagation","newOptions","pop","option","event","customEvent","detail","selectionEndRow","bottomViewport","bottomNonFloating","onSelectionChanged","onChangeApplied","tooltip","startTimer","CONDITIONAL_FORMATTING_EDIT","oldCustomColumns","customColumn","removedColumnNames","getRemovedCustomColumnNames","newSorts","removeSortsInColumns","removeFiltersInColumns","removeColumnFromMovedColumns","newSelectDistinctColumns","removeColumnsFromSelectDistinctColumns","aggregation","AGGREGATION_EDIT","resetGridViewState","columnNames","INITIATING","fileName","frozenTable","tableSubscription","snapshotRanges","modelRanges","includeColumnHeaders","useUnformattedValues","startDownload","cancelDownload","FINISHED","CANCELED","deleteRanges","columnAllowedCursor","cursor","topOffset","irisGridState","gridState","onStateChange","gridRect","popperMargin","columnHeaderHeight","visibleColumnXs","visibleColumnWidths","width","columnHeaderMaxDepth","columnX","bottom","right","x","y","toJSON","rowNumber","rowInt","parseInt","setFocusRow","target","getColumnTooltip","boundedLeft","boundedWidth","abs","virtualReference","clientWidth","clientHeight","render","children","getDownloadWorker","isStuckToBottom","isStuckToRight","onlyFetchVisibleColumns","onAdvancedSettingsChange","getCachedFilter","stateOverride","getCachedStateOverride","isVisible","isRollup","focusField","debounceMs","minDebounce","round","maxDebounce","gridX","gridY","filterBarHeight","fieldWidth","fieldHeight","style","minWidth","isValid","advancedFilter","isBarFiltered","active","handleContextMenu","loadingElement","loadingStatus","show","columnTooltip","filterBar","visibleColumns","isFilterSet","isFilterVisible","element","hidden","advancedFilterMenus","xColumnHeader","xFilterBar","getAdvancedMenuOpenedHandler","positionFixed","getCachedAdvancedFilterMenuActions","getCachedOptionItems","openOptionsStack","handleConditionalFormatEditorUpdate","getCachedHiddenColumns","getHiddenColumns","transitionSlowMs","stringName","displayString","getAlwaysFetchColumns","draggingColumn","range","getCachedPreviewFormatColumns","getCachedModelColumns","getModelTotalsConfig","getOverflowButtonTooltip","transitionMidMs","columnSelectionValidator","columnNotAllowedCursor","onContextMenu","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator","shape","defaultFormatString","string"],"sources":["../src/IrisGrid.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n Component,\n CSSProperties,\n ReactElement,\n ReactNode,\n} from 'react';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport deepEqual from 'deep-equal';\nimport Log from '@deephaven/log';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n ContextActions,\n Stack,\n Menu,\n Page,\n Popper,\n ThemeExport,\n Tooltip,\n ContextAction,\n PopperOptions,\n ReferenceObject,\n Button,\n} from '@deephaven/components';\nimport {\n Grid,\n GridMetrics,\n GridMouseHandler,\n GridRange,\n GridRangeIndex,\n GridThemeType,\n GridUtils,\n KeyHandler,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n VisibleIndex,\n GridState,\n isEditableGridModel,\n BoundedAxisRange,\n isExpandableGridModel,\n} from '@deephaven/grid';\nimport {\n dhEye,\n dhFilterFilled,\n dhGraphLineUp,\n dhTriangleDownSquare,\n vsClose,\n vsCloudDownload,\n vsEdit,\n vsFilter,\n vsMenu,\n vsReply,\n vsRuby,\n vsSearch,\n vsSplitHorizontal,\n vsSymbolOperator,\n vsTools,\n} from '@deephaven/icons';\nimport dh, {\n Column,\n CustomColumn,\n DateWrapper,\n FilterCondition,\n Sort,\n Table,\n TableViewportSubscription,\n} from '@deephaven/jsapi-shim';\nimport {\n DateUtils,\n Formatter,\n FormatterUtils,\n TableUtils,\n FormattingRule,\n ReverseType,\n RowDataMap,\n SortDirection,\n DateTimeColumnFormatterOptions,\n TableColumnFormat,\n Settings,\n} from '@deephaven/jsapi-utils';\nimport {\n assertNotNull,\n copyToClipboard,\n Pending,\n PromiseUtils,\n ValidationError,\n} from '@deephaven/utils';\nimport throttle from 'lodash.throttle';\nimport debounce from 'lodash.debounce';\nimport clamp from 'lodash.clamp';\nimport {\n FormattingRule as SidebarFormattingRule,\n getFormatColumns,\n} from './sidebar/conditional-formatting/ConditionalFormattingUtils';\nimport PendingDataBottomBar from './PendingDataBottomBar';\nimport IrisGridCopyHandler, { CopyOperation } from './IrisGridCopyHandler';\nimport FilterInputField from './FilterInputField';\nimport {\n ClearFilterKeyHandler,\n CopyKeyHandler,\n ReverseKeyHandler,\n} from './key-handlers';\nimport {\n IrisGridCellOverflowMouseHandler,\n IrisGridColumnSelectMouseHandler,\n IrisGridColumnTooltipMouseHandler,\n IrisGridContextMenuHandler,\n IrisGridDataSelectMouseHandler,\n IrisGridFilterMouseHandler,\n IrisGridSortMouseHandler,\n PendingMouseHandler,\n} from './mousehandlers';\nimport ToastBottomBar from './ToastBottomBar';\nimport IrisGridMetricCalculator from './IrisGridMetricCalculator';\nimport IrisGridModelUpdater from './IrisGridModelUpdater';\nimport IrisGridRenderer from './IrisGridRenderer';\nimport IrisGridTheme, { IrisGridThemeType } from './IrisGridTheme';\nimport ColumnStatistics from './ColumnStatistics';\nimport './IrisGrid.scss';\nimport AdvancedFilterCreator from './AdvancedFilterCreator';\nimport {\n Aggregations,\n AggregationEdit,\n AggregationUtils,\n ChartBuilder,\n CustomColumnBuilder,\n OptionType,\n RollupRows,\n TableCsvExporter,\n TableSaver,\n VisibilityOrderingBuilder,\n} from './sidebar';\nimport IrisGridUtils from './IrisGridUtils';\nimport CrossColumnSearch from './CrossColumnSearch';\nimport IrisGridModel from './IrisGridModel';\nimport IrisGridPartitionSelector from './IrisGridPartitionSelector';\nimport SelectDistinctBuilder from './sidebar/SelectDistinctBuilder';\nimport AdvancedSettingsType from './sidebar/AdvancedSettingsType';\nimport AdvancedSettingsMenu, {\n AdvancedSettingsMenuCallback,\n} from './sidebar/AdvancedSettingsMenu';\nimport SHORTCUTS from './IrisGridShortcuts';\nimport ConditionalFormattingMenu from './sidebar/conditional-formatting/ConditionalFormattingMenu';\n\nimport ConditionalFormatEditor from './sidebar/conditional-formatting/ConditionalFormatEditor';\nimport IrisGridCellOverflowModal from './IrisGridCellOverflowModal';\nimport GotoRow from './GotoRow';\nimport {\n Aggregation,\n AggregationSettings,\n} from './sidebar/aggregations/Aggregations';\nimport { ChartBuilderSettings } from './sidebar/ChartBuilder';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport { UIRollupConfig } from './sidebar/RollupRows';\nimport { VisibilityOptionType } from './sidebar/VisibilityOrderingBuilder';\nimport {\n AdvancedFilterMap,\n ColumnName,\n QuickFilterMap,\n AggregationMap,\n OperationMap,\n Action,\n OptionItem,\n UITotalsTableConfig,\n InputFilter,\n PendingDataMap,\n AdvancedFilterOptions,\n} from './CommonTypes';\n\nconst log = Log.module('IrisGrid');\n\nconst UPDATE_DOWNLOAD_THROTTLE = 500;\n\nconst SET_FILTER_DEBOUNCE = 250;\n\nconst SET_CONDITIONAL_FORMAT_DEBOUNCE = 250;\n\nconst DEFAULT_AGGREGATION_SETTINGS = Object.freeze({\n aggregations: [],\n showOnTop: false,\n});\n\nconst UNFORMATTED_DATE_PATTERN = `yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z`;\n\nfunction isEmptyConfig({\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n}: {\n advancedFilters: AdvancedFilterMap;\n aggregationSettings: AggregationSettings;\n customColumns: ColumnName[];\n quickFilters: QuickFilterMap;\n reverseType: ReverseType;\n rollupConfig?: UIRollupConfig;\n searchFilter?: FilterCondition;\n selectDistinctColumns: ColumnName[];\n sorts: Sort[];\n}) {\n return (\n advancedFilters.size === 0 &&\n aggregationSettings.aggregations.length === 0 &&\n customColumns.length === 0 &&\n quickFilters.size === 0 &&\n reverseType === TableUtils.REVERSE_TYPE.NONE &&\n rollupConfig == null &&\n searchFilter == null &&\n selectDistinctColumns.length === 0 &&\n sorts.length === 0\n );\n}\n\nexport type FilterMap = Map<\n ColumnName,\n { columnType: string; text: string; value: unknown }\n>;\nexport interface IrisGridProps {\n children: React.ReactNode;\n advancedFilters: AdvancedFilterMap;\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n alwaysFetchColumns: ColumnName[];\n isFilterBarShown: boolean;\n applyInputFiltersOnInit: boolean;\n conditionalFormats: SidebarFormattingRule[];\n customColumnFormatMap: Map<ColumnName, FormattingRule>;\n movedColumns: MoveOperation[];\n movedRows: MoveOperation[];\n inputFilters: InputFilter[];\n customFilters: FilterCondition[];\n model: IrisGridModel;\n onCreateChart: (settings: ChartBuilderSettings, model: IrisGridModel) => void;\n onColumnSelected: (column: Column) => void;\n onError: (error: unknown) => void;\n onDataSelected: (index: ModelIndex, map: Record<ColumnName, unknown>) => void;\n onStateChange: (irisGridState: IrisGridState, gridState: GridState) => void;\n onPartitionAppend: (partitionColumn: Column, value: string) => void;\n onAdvancedSettingsChange: AdvancedSettingsMenuCallback;\n partition: string;\n partitionColumn: Column;\n sorts: Sort[];\n reverseType: ReverseType;\n quickFilters: QuickFilterMap | null;\n customColumns: ColumnName[];\n selectDistinctColumns: ColumnName[];\n settings?: Settings;\n userColumnWidths: ModelSizeMap;\n userRowHeights: ModelSizeMap;\n onSelectionChanged: (gridRanges: GridRange[]) => void;\n rollupConfig?: UIRollupConfig;\n aggregationSettings: AggregationSettings;\n\n isSelectingColumn: boolean;\n isSelectingPartition: boolean;\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n\n // eslint-disable-next-line react/no-unused-prop-types\n columnSelectionValidator: (value: Column | null) => boolean;\n columnAllowedCursor: string;\n\n // eslint-disable-next-line react/no-unused-prop-types\n columnNotAllowedCursor: string;\n name: string;\n onlyFetchVisibleColumns: boolean;\n\n showSearchBar: boolean;\n searchValue: string;\n selectedSearchColumns: ColumnName[];\n invertSearchColumns: boolean;\n\n onContextMenu: (obj: {\n model: IrisGridModel;\n value: unknown;\n valueText: string | null;\n column: Column;\n rowIndex: GridRangeIndex;\n columnIndex: GridRangeIndex;\n modelRow: GridRangeIndex;\n modelColumn: GridRangeIndex;\n }) => ContextAction;\n\n pendingDataMap?: PendingDataMap;\n getDownloadWorker: () => Promise<ServiceWorker>;\n\n canCopy: boolean;\n canDownloadCsv: boolean;\n frozenColumns: ColumnName[];\n\n // Theme override for IrisGridTheme\n theme: GridThemeType;\n\n canToggleSearch: boolean;\n}\n\nexport interface IrisGridState {\n isFilterBarShown: boolean;\n isSelectingPartition: boolean;\n focusedFilterBarColumn: number | null;\n metricCalculator: IrisGridMetricCalculator;\n metrics?: GridMetrics;\n keyHandlers: KeyHandler[];\n mouseHandlers: GridMouseHandler[];\n\n partition: string;\n partitionColumn: Column;\n partitionTable: Table | null;\n partitionFilters: FilterCondition[];\n // setAdvancedFilter and setQuickFilter mutate the arguments\n // so we want to always use map copies from the state instead of props\n quickFilters: QuickFilterMap;\n advancedFilters: AdvancedFilterMap;\n shownAdvancedFilter: number | null;\n hoverAdvancedFilter: number | null;\n\n sorts: Sort[];\n reverseType: ReverseType;\n customColumns: ColumnName[];\n selectDistinctColumns: ColumnName[];\n\n // selected range in table\n selectedRanges: GridRange[];\n\n // Current ongoing copy operation\n copyOperation: CopyOperation | null;\n\n // The filter that is currently being applied. Reset after update is received\n loadingText: string | null;\n loadingScrimProgress: number | null;\n loadingSpinnerShown: boolean;\n\n movedColumns: MoveOperation[];\n movedRows: MoveOperation[];\n\n shownColumnTooltip: number | null;\n\n formatter: Formatter;\n isMenuShown: boolean;\n customColumnFormatMap: Map<ColumnName, FormattingRule>;\n\n conditionalFormats: SidebarFormattingRule[];\n conditionalFormatEditIndex: number | null;\n conditionalFormatPreview?: SidebarFormattingRule;\n\n // Column user is hovering over for selection\n hoverSelectColumn: GridRangeIndex;\n\n isTableDownloading: boolean;\n isReady: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number | null;\n\n showSearchBar: boolean;\n searchFilter?: FilterCondition;\n searchValue: string;\n selectedSearchColumns: ColumnName[];\n invertSearchColumns: boolean;\n\n rollupConfig?: UIRollupConfig;\n rollupSelectedColumns: [];\n aggregationSettings: AggregationSettings;\n selectedAggregation: Aggregation | null;\n\n openOptions: OptionItem[];\n\n pendingRowCount: number;\n pendingDataMap: PendingDataMap;\n pendingDataErrors: Map<number, Error[]>;\n pendingSavePromise: Promise<void> | null;\n pendingSaveError: string | null;\n\n toastMessage: JSX.Element | null;\n frozenColumns: ColumnName[];\n showOverflowModal: boolean;\n overflowText: string;\n overflowButtonTooltipProps: CSSProperties | null;\n\n gotoRow: string;\n gotoRowError: string;\n isGotoRowShown: boolean;\n}\n\nexport class IrisGrid extends Component<IrisGridProps, IrisGridState> {\n static minDebounce = 150;\n\n static maxDebounce = 500;\n\n static loadingSpinnerDelay = 800;\n\n static defaultProps = {\n children: null,\n advancedFilters: new Map(),\n advancedSettings: new Map(),\n alwaysFetchColumns: [],\n conditionalFormats: [],\n customColumnFormatMap: new Map(),\n isFilterBarShown: false,\n applyInputFiltersOnInit: false,\n movedColumns: [],\n movedRows: [],\n inputFilters: [],\n customFilters: [],\n onCreateChart: undefined,\n onColumnSelected: (): void => undefined,\n onDataSelected: (): void => undefined,\n onError: (): void => undefined,\n onStateChange: (): void => undefined,\n onPartitionAppend: (): void => undefined,\n onAdvancedSettingsChange: (): void => undefined,\n partition: null,\n partitionColumn: null,\n quickFilters: new Map(),\n selectDistinctColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n customColumns: [],\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n rollupConfig: undefined,\n userColumnWidths: new Map(),\n userRowHeights: new Map(),\n onSelectionChanged: (): void => undefined,\n isSelectingColumn: false,\n isSelectingPartition: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n columnSelectionValidator: null,\n columnAllowedCursor: null,\n columnNotAllowedCursor: null,\n name: 'table',\n onlyFetchVisibleColumns: true,\n showSearchBar: false,\n searchValue: '',\n selectedSearchColumns: null,\n invertSearchColumns: true,\n onContextMenu: (): void => undefined,\n pendingDataMap: new Map(),\n getDownloadWorker: undefined,\n settings: {\n timeZone: 'America/New_York',\n defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,\n showTimeZone: false,\n showTSeparator: true,\n truncateNumbersWithPound: false,\n formatter: [],\n decimalFormatOptions: PropTypes.shape({\n defaultFormatString: PropTypes.string,\n }),\n integerFormatOptions: PropTypes.shape({\n defaultFormatString: PropTypes.string,\n }),\n },\n canCopy: true,\n canDownloadCsv: true,\n frozenColumns: null,\n theme: IrisGridTheme,\n canToggleSearch: true,\n };\n\n static makeQuickFilter(\n column: Column,\n text: string,\n timeZone: string\n ): FilterCondition | null {\n try {\n return TableUtils.makeQuickFilter(column, text, timeZone);\n } catch (err) {\n log.error('Error creating quick filter', err);\n }\n return null;\n }\n\n constructor(props: IrisGridProps) {\n super(props);\n\n this.handleAdvancedFilterChange = this.handleAdvancedFilterChange.bind(\n this\n );\n this.handleAdvancedFilterSortChange = this.handleAdvancedFilterSortChange.bind(\n this\n );\n this.handleAdvancedFilterDone = this.handleAdvancedFilterDone.bind(this);\n this.handleAdvancedMenuOpened = this.handleAdvancedMenuOpened.bind(this);\n this.handleGotoRowOpened = this.handleGotoRowOpened.bind(this);\n this.handleGotoRowClosed = this.handleGotoRowClosed.bind(this);\n this.handleAdvancedMenuClosed = this.handleAdvancedMenuClosed.bind(this);\n this.handleAggregationChange = this.handleAggregationChange.bind(this);\n this.handleAggregationsChange = this.handleAggregationsChange.bind(this);\n this.handleAggregationEdit = this.handleAggregationEdit.bind(this);\n this.handleAnimationLoop = this.handleAnimationLoop.bind(this);\n this.handleAnimationStart = this.handleAnimationStart.bind(this);\n this.handleAnimationEnd = this.handleAnimationEnd.bind(this);\n this.handleChartChange = this.handleChartChange.bind(this);\n this.handleChartCreate = this.handleChartCreate.bind(this);\n this.handleGridError = this.handleGridError.bind(this);\n this.handleFilterBarChange = this.handleFilterBarChange.bind(this);\n this.handleFilterBarDone = this.handleFilterBarDone.bind(this);\n this.handleFilterBarTab = this.handleFilterBarTab.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleMenu = this.handleMenu.bind(this);\n this.handleMenuClose = this.handleMenuClose.bind(this);\n this.handleMenuSelect = this.handleMenuSelect.bind(this);\n this.handleMenuBack = this.handleMenuBack.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleSelectionChanged = this.handleSelectionChanged.bind(this);\n this.handleMovedColumnsChanged = this.handleMovedColumnsChanged.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.handleTooltipRef = this.handleTooltipRef.bind(this);\n this.handleViewChanged = this.handleViewChanged.bind(this);\n this.handleFormatSelection = this.handleFormatSelection.bind(this);\n this.handleConditionalFormatCreate = this.handleConditionalFormatCreate.bind(\n this\n );\n this.handleConditionalFormatEdit = this.handleConditionalFormatEdit.bind(\n this\n );\n this.handleConditionalFormatsChange = this.handleConditionalFormatsChange.bind(\n this\n );\n this.handleConditionalFormatEditorSave = this.handleConditionalFormatEditorSave.bind(\n this\n );\n this.handleConditionalFormatEditorCancel = this.handleConditionalFormatEditorCancel.bind(\n this\n );\n this.handleUpdateCustomColumns = this.handleUpdateCustomColumns.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(\n this\n );\n this.handleSelectDistinctChanged = this.handleSelectDistinctChanged.bind(\n this\n );\n this.handlePendingDataUpdated = this.handlePendingDataUpdated.bind(this);\n this.handlePendingCommitClicked = this.handlePendingCommitClicked.bind(\n this\n );\n this.handlePendingDiscardClicked = this.handlePendingDiscardClicked.bind(\n this\n );\n this.handleGotoRowSelectedRowNumberSubmit = this.handleGotoRowSelectedRowNumberSubmit.bind(\n this\n );\n this.focusRowInGrid = this.focusRowInGrid.bind(this);\n this.handleDownloadTable = this.handleDownloadTable.bind(this);\n this.handleDownloadTableStart = this.handleDownloadTableStart.bind(this);\n this.handleCancelDownloadTable = this.handleCancelDownloadTable.bind(this);\n this.handleDownloadCanceled = this.handleDownloadCanceled.bind(this);\n this.handleDownloadCompleted = this.handleDownloadCompleted.bind(this);\n this.handlePartitionAppend = this.handlePartitionAppend.bind(this);\n this.handlePartitionChange = this.handlePartitionChange.bind(this);\n this.handlePartitionFetchAll = this.handlePartitionFetchAll.bind(this);\n this.handlePartitionDone = this.handlePartitionDone.bind(this);\n this.handleColumnVisibilityChanged = this.handleColumnVisibilityChanged.bind(\n this\n );\n this.handleCrossColumnSearch = this.handleCrossColumnSearch.bind(this);\n this.handleRollupChange = this.handleRollupChange.bind(this);\n this.handleOverflowClose = this.handleOverflowClose.bind(this);\n this.getColumnBoundingRect = this.getColumnBoundingRect.bind(this);\n this.handleGotoRowSelectedRowNumberChanged = this.handleGotoRowSelectedRowNumberChanged.bind(\n this\n );\n\n this.grid = null;\n this.gridWrapper = null;\n this.lastLoadedConfig = null;\n this.pending = new Pending();\n this.globalColumnFormats = [];\n this.decimalFormatOptions = {};\n this.integerFormatOptions = {};\n this.truncateNumbersWithPound = false;\n\n // When the loading scrim started/when it should extend to the end of the screen.\n this.renderer = new IrisGridRenderer();\n this.tableSaver = null;\n this.crossColumnRef = React.createRef();\n this.isAnimating = false;\n this.filterInputRef = React.createRef();\n\n this.toggleFilterBarAction = {\n action: () => this.toggleFilterBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_QUICK_FILTER,\n };\n\n this.toggleSearchBarAction = {\n action: () => this.toggleSearchBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_SEARCH,\n };\n\n this.toggleGotoRowAction = {\n action: () => this.toggleGotoRow(),\n shortcut: SHORTCUTS.TABLE.GOTO_ROW,\n };\n\n this.discardAction = {\n action: () => {\n const { model } = this.props;\n if (\n isEditableGridModel(model) &&\n model.isEditable &&\n model.pendingDataMap.size > 0\n ) {\n this.discardPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.DISCARD,\n };\n this.commitAction = {\n action: () => {\n const { model } = this.props;\n if (\n isEditableGridModel(model) &&\n model.isEditable &&\n model.pendingDataMap.size > 0 &&\n model.pendingDataErrors.size === 0\n ) {\n this.commitPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.COMMIT,\n };\n this.contextActions = [\n this.toggleFilterBarAction,\n this.toggleSearchBarAction,\n this.toggleGotoRowAction,\n this.discardAction,\n this.commitAction,\n ];\n\n const {\n aggregationSettings,\n conditionalFormats,\n customColumnFormatMap,\n isFilterBarShown,\n isSelectingPartition,\n model,\n movedColumns: movedColumnsProp,\n movedRows: movedRowsProp,\n partition,\n partitionColumn,\n rollupConfig,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n advancedFilters,\n quickFilters,\n selectDistinctColumns,\n pendingDataMap,\n canCopy,\n frozenColumns,\n } = props;\n\n const keyHandlers: KeyHandler[] = [\n new ReverseKeyHandler(this),\n new ClearFilterKeyHandler(this),\n ];\n if (canCopy) {\n keyHandlers.push(new CopyKeyHandler(this));\n }\n const mouseHandlers = [\n new IrisGridCellOverflowMouseHandler(this),\n new IrisGridColumnSelectMouseHandler(this),\n new IrisGridColumnTooltipMouseHandler(this),\n new IrisGridSortMouseHandler(this),\n new IrisGridFilterMouseHandler(this),\n new IrisGridContextMenuHandler(this),\n new IrisGridDataSelectMouseHandler(this),\n new PendingMouseHandler(this),\n ];\n\n const movedColumns =\n movedColumnsProp.length > 0 ? movedColumnsProp : model.movedColumns;\n const movedRows =\n movedRowsProp.length > 0 ? movedRowsProp : model.movedRows;\n\n const metricCalculator = new IrisGridMetricCalculator({\n userColumnWidths: new Map(userColumnWidths),\n userRowHeights: new Map(userRowHeights),\n movedColumns,\n });\n const searchColumns = selectedSearchColumns ?? [];\n const searchFilter = CrossColumnSearch.createSearchFilter(\n searchValue,\n searchColumns,\n model.columns,\n invertSearchColumns\n );\n\n this.state = {\n isFilterBarShown,\n isSelectingPartition,\n focusedFilterBarColumn: null,\n metricCalculator,\n metrics: undefined,\n keyHandlers,\n mouseHandlers,\n\n partition,\n partitionColumn,\n partitionTable: null,\n partitionFilters: [],\n // setAdvancedFilter and setQuickFilter mutate the arguments\n // so we want to always use map copies from the state instead of props\n quickFilters: quickFilters ? new Map(quickFilters) : new Map(),\n advancedFilters: new Map(advancedFilters),\n shownAdvancedFilter: null,\n hoverAdvancedFilter: null,\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n customColumns: [],\n selectDistinctColumns,\n\n // selected range in table\n selectedRanges: [],\n\n // Current ongoing copy operation\n copyOperation: null,\n\n // The filter that is currently being applied. Reset after update is received\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n\n movedColumns,\n movedRows,\n\n shownColumnTooltip: null,\n\n formatter: new Formatter(),\n isMenuShown: false,\n customColumnFormatMap: new Map(customColumnFormatMap),\n\n conditionalFormats,\n conditionalFormatEditIndex: null,\n conditionalFormatPreview: undefined,\n\n // Column user is hovering over for selection\n hoverSelectColumn: null,\n\n isTableDownloading: false,\n isReady: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: 0,\n\n showSearchBar,\n searchFilter,\n searchValue,\n selectedSearchColumns: searchColumns,\n invertSearchColumns,\n\n rollupConfig,\n rollupSelectedColumns: [],\n aggregationSettings,\n selectedAggregation: null,\n\n openOptions: [],\n\n pendingRowCount: 0,\n pendingDataMap: pendingDataMap ?? new Map(),\n pendingDataErrors: new Map(),\n pendingSavePromise: null,\n pendingSaveError: null,\n\n toastMessage: null,\n frozenColumns,\n showOverflowModal: false,\n overflowText: '',\n overflowButtonTooltipProps: null,\n isGotoRowShown: false,\n gotoRow: '',\n gotoRowError: '',\n };\n }\n\n componentDidMount(): void {\n const { partitionColumn, model } = this.props;\n const column =\n partitionColumn ?? model.columns.find(c => c.isPartitionColumn);\n if (\n model.isFilterRequired &&\n model.isValuesTableAvailable &&\n column != null\n ) {\n this.loadPartitionsTable(column);\n } else {\n this.initState();\n }\n this.startListening(model);\n }\n\n componentDidUpdate(prevProps: IrisGridProps): void {\n const {\n inputFilters,\n isSelectingColumn,\n settings,\n model,\n customFilters,\n sorts,\n } = this.props;\n\n if (model !== prevProps.model) {\n this.stopListening(prevProps.model);\n this.startListening(model);\n }\n\n const changedInputFilters =\n inputFilters !== prevProps.inputFilters\n ? inputFilters.filter(\n inputFilter => !prevProps.inputFilters.includes(inputFilter)\n )\n : [];\n if (changedInputFilters.length > 0) {\n const { advancedSettings } = this.props;\n const replaceExistingFilters =\n advancedSettings.get(\n AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS\n ) ?? false;\n if (replaceExistingFilters) {\n this.clearGridInputField();\n this.clearCrossColumSearch();\n }\n this.startLoading('Filtering...', true);\n this.applyInputFilters(changedInputFilters, replaceExistingFilters);\n }\n\n if (isSelectingColumn !== prevProps.isSelectingColumn) {\n this.resetColumnSelection();\n }\n if (settings !== prevProps.settings) {\n this.updateFormatterSettings(settings);\n }\n if (customFilters !== prevProps.customFilters) {\n this.startLoading('Filtering...', true);\n }\n if (sorts !== prevProps.sorts) {\n this.updateSorts(sorts);\n }\n const { loadingScrimStartTime, loadingScrimFinishTime } = this;\n if (loadingScrimStartTime != null && loadingScrimFinishTime != null) {\n window.requestAnimationFrame(() => {\n const now = Date.now();\n const currentTime = now - loadingScrimStartTime;\n const totalTime = loadingScrimFinishTime - loadingScrimStartTime;\n const loadingScrimProgress = Math.min(currentTime / totalTime, 1);\n if (loadingScrimFinishTime < now) {\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n }\n\n this.setState(state => {\n if (state.loadingScrimProgress == null) {\n log.debug2('Ignoring scrim update because loading cancelled.');\n return null;\n }\n\n return { loadingScrimProgress };\n });\n });\n }\n\n this.sendStateChange();\n }\n\n componentWillUnmount(): void {\n const { model } = this.props;\n this.stopListening(model);\n this.pending.cancel();\n this.updateSearchFilter.cancel();\n\n if (this.loadingTimer) {\n clearTimeout(this.loadingTimer);\n }\n this.handleDownloadProgressUpdate.cancel();\n if (this.animationFrame !== undefined) {\n cancelAnimationFrame(this.animationFrame);\n }\n }\n\n grid: Grid | null;\n\n gridWrapper: HTMLDivElement | null;\n\n lastFocusedFilterBarColumn?: number;\n\n lastLoadedConfig: Pick<\n IrisGridState,\n | 'advancedFilters'\n | 'aggregationSettings'\n | 'customColumns'\n | 'quickFilters'\n | 'reverseType'\n | 'rollupConfig'\n | 'searchFilter'\n | 'selectDistinctColumns'\n | 'sorts'\n > | null;\n\n tooltip?: Tooltip;\n\n pending: Pending;\n\n globalColumnFormats?: FormattingRule[];\n\n dateTimeFormatterOptions?: DateTimeColumnFormatterOptions;\n\n decimalFormatOptions: { defaultFormatString?: string };\n\n integerFormatOptions: { defaultFormatString?: string };\n\n truncateNumbersWithPound: boolean;\n\n // When the loading scrim started/when it should extend to the end of the screen.\n loadingScrimStartTime?: number;\n\n loadingScrimFinishTime?: number;\n\n animationFrame?: number;\n\n loadingTimer?: ReturnType<typeof setTimeout>;\n\n renderer: IrisGridRenderer;\n\n tableSaver: TableSaver | null;\n\n crossColumnRef: React.RefObject<CrossColumnSearch>;\n\n isAnimating: boolean;\n\n filterInputRef: React.RefObject<FilterInputField>;\n\n toggleFilterBarAction: Action;\n\n toggleSearchBarAction: Action;\n\n toggleGotoRowAction: Action;\n\n discardAction: Action;\n\n commitAction: Action;\n\n contextActions: ContextAction[];\n\n getAdvancedMenuOpenedHandler = memoize(\n column => this.handleAdvancedMenuOpened.bind(this, column),\n { max: 100 }\n );\n\n getCachedAdvancedFilterMenuActions = memoize(\n (\n model,\n column,\n advancedFilterOptions,\n sortDirection?: SortDirection,\n formatter?\n ) => (\n <AdvancedFilterCreator\n model={model}\n column={column}\n onFilterChange={this.handleAdvancedFilterChange}\n onSortChange={this.handleAdvancedFilterSortChange}\n onDone={this.handleAdvancedFilterDone}\n options={advancedFilterOptions}\n sortDirection={sortDirection}\n formatter={formatter}\n />\n ),\n { max: 50 }\n );\n\n getCachedOptionItems = memoize(\n (\n isChartBuilderAvailable: boolean,\n isCustomColumnsAvailable: boolean,\n isFormatColumnsAvailable: boolean,\n isRollupAvailable: boolean,\n isTotalsAvailable: boolean,\n isSelectDistinctAvailable: boolean,\n isExportAvailable: boolean,\n toggleFilterBarAction,\n toggleSearchBarAction,\n toggleGotoRowAction,\n isFilterBarShown: boolean,\n showSearchBar: boolean,\n canDownloadCsv: boolean,\n canToggleSearch: boolean,\n showGotoRow: boolean,\n hasAdvancedSettings: boolean\n ) => {\n const optionItems: OptionItem[] = [];\n if (isChartBuilderAvailable) {\n optionItems.push({\n type: OptionType.CHART_BUILDER,\n title: 'Chart Builder',\n icon: dhGraphLineUp,\n });\n }\n optionItems.push({\n type: OptionType.VISIBILITY_ORDERING_BUILDER,\n title: 'Column Visibility & Ordering',\n icon: dhEye,\n });\n if (isFormatColumnsAvailable) {\n optionItems.push({\n type: OptionType.CONDITIONAL_FORMATTING,\n title: 'Conditional Formatting',\n icon: vsEdit,\n });\n }\n if (isCustomColumnsAvailable) {\n optionItems.push({\n type: OptionType.CUSTOM_COLUMN_BUILDER,\n title: 'Manage Custom Columns',\n icon: vsSplitHorizontal,\n });\n }\n if (isRollupAvailable) {\n optionItems.push({\n type: OptionType.ROLLUP_ROWS,\n title: 'Rollup Rows',\n icon: dhTriangleDownSquare,\n });\n }\n if (isTotalsAvailable) {\n optionItems.push({\n type: OptionType.AGGREGATIONS,\n title: 'Aggregate Columns',\n icon: vsSymbolOperator,\n });\n }\n if (isSelectDistinctAvailable) {\n optionItems.push({\n type: OptionType.SELECT_DISTINCT,\n title: 'Select Distinct Values',\n icon: vsRuby,\n });\n }\n if (isExportAvailable && canDownloadCsv) {\n optionItems.push({\n type: OptionType.TABLE_EXPORTER,\n title: 'Download CSV',\n icon: vsCloudDownload,\n });\n }\n if (hasAdvancedSettings) {\n optionItems.push({\n type: OptionType.ADVANCED_SETTINGS,\n title: 'Advanced Settings',\n icon: vsTools,\n });\n }\n optionItems.push({\n type: OptionType.QUICK_FILTERS,\n title: 'Quick Filters',\n subtitle: toggleFilterBarAction.shortcut.getDisplayText(),\n icon: vsFilter,\n isOn: isFilterBarShown,\n onChange: toggleFilterBarAction.action,\n });\n if (canToggleSearch) {\n optionItems.push({\n type: OptionType.SEARCH_BAR,\n title: 'Search Bar',\n subtitle: toggleSearchBarAction.shortcut.getDisplayText(),\n icon: vsSearch,\n isOn: showSearchBar,\n onChange: toggleSearchBarAction.action,\n });\n }\n optionItems.push({\n type: OptionType.GOTO,\n title: 'Go to',\n subtitle: toggleGotoRowAction.shortcut.getDisplayText(),\n icon: vsReply,\n isOn: showGotoRow,\n onChange: toggleGotoRowAction.action,\n });\n\n return optionItems;\n },\n { max: 1 }\n );\n\n getCachedHiddenColumns = memoize(hiddenColumns => hiddenColumns, {\n max: 1,\n normalizer: ([hiddenColumns]) => hiddenColumns.join(),\n });\n\n getAggregationMap = memoize(\n (columns: Column[], aggregations: Aggregation[]): AggregationMap => {\n const aggregationMap = {} as Record<AggregationOperation, string[]>;\n aggregations.forEach(({ operation, selected, invert }) => {\n aggregationMap[operation] = AggregationUtils.getOperationColumnNames(\n columns,\n operation,\n selected,\n invert\n );\n });\n return aggregationMap;\n }\n );\n\n getOperationMap = memoize(\n (columns: Column[], aggregations: Aggregation[]): OperationMap => {\n const operationMap: Record<string, AggregationOperation[]> = {};\n aggregations\n .filter(\n (a: Aggregation) => !AggregationUtils.isRollupOperation(a.operation)\n )\n .forEach(({ operation, selected, invert }) => {\n AggregationUtils.getOperationColumnNames(\n columns,\n operation,\n selected,\n invert\n ).forEach(name => {\n const newOperations = [...(operationMap[name] ?? []), operation];\n operationMap[name] = newOperations;\n });\n });\n return operationMap;\n }\n );\n\n getOperationOrder = memoize(\n (aggregations: Aggregation[]): AggregationOperation[] =>\n aggregations\n .map((a: Aggregation) => a.operation)\n .filter(\n (o: AggregationOperation) => !AggregationUtils.isRollupOperation(o)\n )\n );\n\n getCachedFormatColumns = memoize((columns, rules) =>\n getFormatColumns(columns, rules)\n );\n\n // customColumns arg is needed to invalidate the cache\n // eslint-disable-next-line no-unused-vars\n getCachedModelColumns = memoize((model, customColumns) => model.columns);\n\n /**\n * Builds formatColumns array based on the provided formatting rules with optional preview\n * @param columns Array of columns\n * @param rulesParam Array of formatting rules\n * @param preview Optional temporary formatting rule for previewing live changes\n * @param editIndex Index in the rulesParam array to replace with the preview, null if preview not applicable\n * @returns Format columns array\n */\n getCachedPreviewFormatColumns = memoize(\n (\n columns: Column[],\n rulesParam: SidebarFormattingRule[],\n preview?: SidebarFormattingRule,\n editIndex?: number\n ): CustomColumn[] => {\n log.debug(\n 'getCachedPreviewFormatColumns',\n rulesParam,\n preview,\n editIndex\n );\n if (preview !== undefined && editIndex !== undefined) {\n const rules = [...rulesParam];\n rules[editIndex] = preview;\n return this.getCachedFormatColumns(columns, rules);\n }\n\n return this.getCachedFormatColumns(columns, rulesParam);\n }\n );\n\n getModelRollupConfig = memoize(\n (originalColumns, config, aggregationSettings) =>\n IrisGridUtils.getModelRollupConfig(\n originalColumns,\n config,\n aggregationSettings\n )\n );\n\n getModelTotalsConfig = memoize(\n (columns, config, aggregationSettings): UITotalsTableConfig | null => {\n const { aggregations, showOnTop } = aggregationSettings;\n // If we've got rollups, then aggregations are applied as part of that...\n if (\n (config?.columns?.length ?? 0) > 0 ||\n (aggregations?.length ?? 0) === 0\n ) {\n return null;\n }\n\n const operationMap = this.getOperationMap(columns, aggregations);\n const operationOrder = this.getOperationOrder(aggregations);\n\n return { operationMap, operationOrder, showOnTop };\n }\n );\n\n getCachedStateOverride = memoize(\n (\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverseType,\n rollupConfig,\n isMenuShown\n ) => ({\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverseType,\n rollupConfig,\n isMenuShown,\n }),\n { max: 1 }\n );\n\n getCachedFilter = memoize(\n (\n customFilters: FilterCondition[],\n quickFilters: QuickFilterMap,\n advancedFilters: AdvancedFilterMap,\n partitionFilters: FilterCondition[],\n searchFilter: FilterCondition | undefined\n ) => [\n ...(customFilters ?? []),\n ...(partitionFilters ?? []),\n ...IrisGridUtils.getFiltersFromFilterMap(quickFilters),\n ...IrisGridUtils.getFiltersFromFilterMap(advancedFilters),\n ...(searchFilter !== undefined ? [searchFilter] : []),\n ],\n { max: 1 }\n );\n\n getCachedTheme = memoize(\n (\n theme: GridThemeType,\n isEditable: boolean,\n floatingRowCount: number\n ): Partial<IrisGridThemeType> => ({\n ...IrisGridTheme,\n ...theme,\n autoSelectRow: !isEditable,\n // We only show the row footers when we have floating rows for aggregations\n rowFooterWidth: floatingRowCount > 0 ? theme.rowFooterWidth : 0,\n }),\n { max: 1 }\n );\n\n getValueForCell(\n columnIndex: GridRangeIndex,\n rowIndex: GridRangeIndex,\n rawValue = false\n ): string | unknown {\n const { model } = this.props;\n const modelColumn = this.getModelColumn(columnIndex);\n const modelRow = this.getModelRow(rowIndex);\n if (rawValue && modelColumn != null && modelRow != null) {\n const value = model.valueForCell(modelColumn, modelRow);\n if (TableUtils.isDateType(model.columns[modelColumn].type)) {\n // The returned value is just a long value, we should return the value formatted as a full date string\n const { formatter } = model;\n return dh.i18n.DateTimeFormat.format(\n UNFORMATTED_DATE_PATTERN,\n value as number | Date | DateWrapper,\n dh.i18n.TimeZone.getTimeZone(formatter.timeZone)\n );\n }\n return value;\n }\n if (rawValue) {\n return null;\n }\n if (modelColumn != null && modelRow != null) {\n return model.textForCell(modelColumn, modelRow);\n }\n return '';\n }\n\n getModelColumn(columnIndex: GridRangeIndex): ModelIndex | null | undefined {\n const { metrics } = this.state;\n assertNotNull(metrics);\n const { modelColumns } = metrics;\n if (modelColumns == null) {\n return null;\n }\n\n return columnIndex != null ? modelColumns.get(columnIndex) : null;\n }\n\n getModelRow(rowIndex: GridRangeIndex): ModelIndex | null | undefined {\n const { metrics } = this.state;\n assertNotNull(metrics);\n const { modelRows } = metrics;\n if (modelRows == null) {\n return null;\n }\n\n return rowIndex != null ? modelRows.get(rowIndex) : null;\n }\n\n getTheme(): Partial<IrisGridThemeType> {\n const { model, theme } = this.props;\n return this.getCachedTheme(\n theme,\n (isEditableGridModel(model) && model.isEditable) ?? false,\n model.floatingTopRowCount + model.floatingBottomRowCount\n );\n }\n\n getVisibleColumn(modelIndex: ModelIndex): VisibleIndex {\n const { movedColumns } = this.state;\n return GridUtils.getVisibleIndex(modelIndex, movedColumns);\n }\n\n /**\n * Applies the provided input filters as quick filters,\n * and clears any existing quickFilters or advancedFilters on that column\n * @param inputFilters Array of input filters to apply\n * @param replaceExisting If true, new filters will replace the existing ones, instead of merging\n */\n applyInputFilters(\n inputFilters: InputFilter[],\n replaceExisting = false\n ): void {\n const { model } = this.props;\n const { advancedFilters, quickFilters } = this.state;\n const newAdvancedFilters = replaceExisting\n ? new Map()\n : new Map(advancedFilters);\n const newQuickFilters = replaceExisting ? new Map() : new Map(quickFilters);\n\n let isChanged = replaceExisting && advancedFilters.size > 0;\n inputFilters.forEach(({ name, type, value }) => {\n const modelIndex = model.columns.findIndex(\n ({ name: columnName, type: columnType }) =>\n columnName === name && columnType === type\n );\n if (modelIndex >= 0) {\n isChanged = newAdvancedFilters.delete(modelIndex) || isChanged;\n isChanged =\n this.applyQuickFilter(modelIndex, value, newQuickFilters) ||\n isChanged;\n } else {\n log.error('Unable to find column for inputFilter', name, type, value);\n }\n });\n if (isChanged) {\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n }\n\n /**\n * Applies a quick filter\n * @param modelIndex The index in the model of the column to set\n * @param value The string value to set to the quick filter\n * @param quickFilters The quick filters map\n * @returns True if the filters have changed because this quick filter was applied\n */\n applyQuickFilter(\n modelIndex: ModelIndex,\n value: string | null,\n quickFilters: QuickFilterMap\n ): boolean {\n const { model } = this.props;\n const { formatter } = model;\n const column = model.columns[modelIndex];\n\n if (value != null && `${value}`.trim().length > 0) {\n const quickFilter = quickFilters.get(modelIndex);\n if (quickFilter != null) {\n const { text } = quickFilter;\n if (text === value) {\n log.debug2('Ignoring change to existing filter');\n return false;\n }\n }\n quickFilters.set(modelIndex, {\n text: value,\n filter: IrisGrid.makeQuickFilter(column, value, formatter.timeZone),\n });\n return true;\n }\n return quickFilters.delete(modelIndex);\n }\n\n setAdvancedFilterMap(advancedFilters: AdvancedFilterMap): void {\n this.setState({ advancedFilters });\n }\n\n setAdvancedFilter(\n modelIndex: ModelIndex,\n filter: FilterCondition | null,\n options: AdvancedFilterOptions\n ): void {\n log.debug('Setting advanced filter', modelIndex, filter);\n\n this.startLoading('Filtering...', true);\n\n this.setState(({ advancedFilters }) => {\n const newAdvancedFilters = new Map(advancedFilters);\n if (filter == null) {\n newAdvancedFilters.delete(modelIndex);\n } else {\n newAdvancedFilters.set(modelIndex, {\n filter,\n options,\n });\n }\n return { advancedFilters: newAdvancedFilters };\n });\n }\n\n /**\n * Sets a quick filter against the provided column\n * @param modelIndex The index in the model for the column this filter is applied to\n * @param filter A filter to apply to the column, or null if there was an error\n * @param text The original text the filter was created with\n */\n setQuickFilter(\n modelIndex: ModelIndex,\n filter: FilterCondition,\n text: string\n ): void {\n log.debug('Setting quick filter', modelIndex, filter, text);\n\n this.startLoading('Filtering...', true);\n\n this.setState(({ quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n newQuickFilters.set(modelIndex, { filter, text });\n return { quickFilters: newQuickFilters };\n });\n }\n\n /**\n * Set grid filters based on the filter map\n * @param filterMap Filter map\n */\n setFilterMap(filterMap: FilterMap): void {\n log.debug('setFilterMap', filterMap);\n\n const { advancedSettings } = this.props;\n const clearFiltersOnLinkerFilterUpdate =\n advancedSettings.get(\n AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS\n ) ?? false;\n if (clearFiltersOnLinkerFilterUpdate) {\n this.clearAllFilters();\n }\n\n const { model } = this.props;\n filterMap.forEach(({ columnType, text, value }, columnName) => {\n const column = model.columns.find(\n c => c.name === columnName && c.type === columnType\n );\n if (column == null) {\n return;\n }\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n if (value === undefined) {\n this.removeQuickFilter(columnIndex);\n } else if (value === null) {\n this.setQuickFilter(columnIndex, column.filter().isNull(), '=null');\n } else {\n const filterValue = TableUtils.isTextType(columnType)\n ? dh.FilterValue.ofString(value)\n : dh.FilterValue.ofNumber(value);\n this.setQuickFilter(\n columnIndex,\n column.filter().eq(filterValue),\n `${text}`\n );\n }\n });\n }\n\n removeColumnFilter(modelColumn: ModelIndex): void {\n this.startLoading('Filtering...', true);\n\n this.setState(\n ({ advancedFilters, quickFilters }: Partial<IrisGridState>) => {\n const newAdvancedFilters = advancedFilters\n ? new Map(advancedFilters)\n : new Map();\n const newQuickFilters = quickFilters\n ? new Map(quickFilters)\n : new Map();\n newQuickFilters.delete(modelColumn);\n newAdvancedFilters.delete(modelColumn);\n\n return {\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n };\n }\n );\n }\n\n removeQuickFilter(modelColumn: ModelIndex): void {\n this.startLoading('Clearing Filter...', true);\n\n this.setState(({ quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n newQuickFilters.delete(modelColumn);\n\n return { quickFilters: newQuickFilters };\n });\n }\n\n clearAllFilters(): void {\n log.debug('Clearing all filters');\n\n const { advancedFilters, quickFilters, searchFilter } = this.state;\n if (\n quickFilters.size === 0 &&\n advancedFilters.size === 0 &&\n searchFilter === null\n ) {\n return;\n }\n\n // if there is an active quick filter input field, reset it as well\n this.clearGridInputField();\n\n this.startLoading('Clearing Filters...', true);\n this.setState({\n quickFilters: new Map(),\n advancedFilters: new Map(),\n searchValue: '',\n searchFilter: undefined,\n });\n }\n\n clearCrossColumSearch(): void {\n log.debug('Clearing cross-column search');\n\n this.setState({\n searchValue: '',\n searchFilter: undefined,\n });\n }\n\n clearGridInputField(): void {\n if (this.filterInputRef.current != null) {\n this.filterInputRef.current.setValue('');\n }\n }\n\n /**\n * Rebuilds all the current filters. Necessary if something like the time zone has changed.\n */\n rebuildFilters(): void {\n log.debug('Rebuilding filters');\n\n const { model } = this.props;\n const { advancedFilters, quickFilters } = this.state;\n const { columns, formatter } = model;\n\n const newAdvancedFilters = new Map();\n const newQuickFilters = new Map();\n\n advancedFilters.forEach((value, key) => {\n const { options } = value;\n const column = columns[key];\n const filter = TableUtils.makeAdvancedFilter(\n column,\n options,\n formatter.timeZone\n );\n newAdvancedFilters.set(key, {\n options,\n filter,\n });\n });\n\n quickFilters.forEach((value, key) => {\n const { text } = value;\n const column = columns[key];\n newQuickFilters.set(key, {\n text,\n filter: IrisGrid.makeQuickFilter(column, text, formatter.timeZone),\n });\n });\n\n this.startLoading('Rebuilding filters...', true);\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n\n setFilters({\n quickFilters,\n advancedFilters,\n }: Pick<IrisGridState, 'quickFilters' | 'advancedFilters'>): void {\n this.setState({\n quickFilters,\n advancedFilters,\n });\n }\n\n updateFormatterSettings(settings?: Settings, forceUpdate = true): void {\n const globalColumnFormats = FormatterUtils.getColumnFormats(settings);\n const dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(\n settings\n );\n\n const defaultDecimalFormatOptions =\n settings?.defaultDecimalFormatOptions ?? {};\n const defaultIntegerFormatOptions =\n settings?.defaultIntegerFormatOptions ?? {};\n const truncateNumbersWithPound =\n settings?.truncateNumbersWithPound ?? false;\n\n const isColumnFormatChanged = !deepEqual(\n this.globalColumnFormats,\n globalColumnFormats\n );\n const isDateFormattingChanged = !deepEqual(\n this.dateTimeFormatterOptions,\n dateTimeFormatterOptions\n );\n const isDecimalFormattingChanged = !deepEqual(\n this.decimalFormatOptions,\n settings?.defaultDecimalFormatOptions\n );\n const isIntegerFormattingChanged = !deepEqual(\n this.integerFormatOptions,\n defaultIntegerFormatOptions\n );\n const isTruncateNumbersChanged =\n this.truncateNumbersWithPound !== truncateNumbersWithPound;\n if (\n isColumnFormatChanged ||\n isDateFormattingChanged ||\n isDecimalFormattingChanged ||\n isIntegerFormattingChanged ||\n isTruncateNumbersChanged\n ) {\n this.globalColumnFormats = globalColumnFormats;\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = defaultDecimalFormatOptions;\n this.integerFormatOptions = defaultIntegerFormatOptions;\n this.truncateNumbersWithPound = truncateNumbersWithPound;\n this.updateFormatter({}, forceUpdate);\n\n if (isDateFormattingChanged && forceUpdate) {\n this.rebuildFilters();\n }\n }\n }\n\n getAlwaysFetchColumns = memoize(\n (\n alwaysFetchColumns: ColumnName[],\n columns: Column[],\n movedColumns: MoveOperation[],\n floatingLeftColumnCount: number,\n floatingRightColumnCount: number,\n draggingRange?: BoundedAxisRange\n ) => {\n const floatingColumns: ColumnName[] = [];\n\n for (let i = 0; i < floatingLeftColumnCount; i += 1) {\n floatingColumns.push(\n columns[GridUtils.getModelIndex(i, movedColumns)].name\n );\n }\n\n for (let i = 0; i < floatingRightColumnCount; i += 1) {\n floatingColumns.push(\n columns[GridUtils.getModelIndex(columns.length - 1 - i, movedColumns)]\n .name\n );\n }\n\n if (draggingRange) {\n for (let i = draggingRange[0]; i <= draggingRange[1]; i += 1) {\n floatingColumns.push(\n columns[GridUtils.getModelIndex(i, movedColumns)].name\n );\n }\n }\n\n const columnSet = new Set([...alwaysFetchColumns, ...floatingColumns]);\n\n return [...columnSet];\n }\n );\n\n updateFormatter(\n updatedFormats: { customColumnFormatMap?: Map<ColumnName, FormattingRule> },\n forceUpdate = true\n ): void {\n const { customColumnFormatMap } = this.state;\n const update = {\n customColumnFormatMap,\n ...updatedFormats,\n };\n const mergedColumnFormats = [\n ...(this.globalColumnFormats ?? []),\n ...update.customColumnFormatMap.values(),\n ];\n const formatter = new Formatter(\n mergedColumnFormats,\n this.dateTimeFormatterOptions,\n this.decimalFormatOptions,\n this.integerFormatOptions,\n this.truncateNumbersWithPound\n );\n\n log.debug('updateFormatter', this.globalColumnFormats, mergedColumnFormats);\n\n this.setState({ ...update, formatter }, () => {\n if (forceUpdate && this.grid) {\n this.grid.forceUpdate();\n }\n });\n }\n\n initFormatter(): void {\n const { settings } = this.props;\n this.updateFormatterSettings(settings);\n }\n\n initState(): void {\n const {\n applyInputFiltersOnInit,\n inputFilters,\n sorts,\n model,\n reverseType,\n customColumns,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n } = this.props;\n\n const searchColumns = selectedSearchColumns ?? [];\n const searchFilter = CrossColumnSearch.createSearchFilter(\n searchValue,\n searchColumns,\n model.columns,\n invertSearchColumns\n );\n\n if (applyInputFiltersOnInit) {\n // There may be more than one input filter on the same column with value === '' applied last\n // We don't want to skip it here, so only excluding the ones that were never applied (null)\n const inputFiltersWithValues = inputFilters.filter(\n inputFilter => inputFilter.value != null\n );\n this.applyInputFilters(inputFiltersWithValues);\n }\n\n this.setState({\n sorts,\n reverseType,\n customColumns,\n isReady: true,\n searchFilter,\n });\n this.initFormatter();\n }\n\n async loadPartitionsTable(partitionColumn: Column): Promise<void> {\n const { model } = this.props;\n this.setState({ isSelectingPartition: true });\n\n try {\n const partitionTable = await this.pending.add(\n model.valuesTable(partitionColumn),\n resolved => resolved.close()\n );\n\n const column = partitionTable.columns[0];\n const sort = column.sort().desc();\n partitionTable.applySort([sort]);\n partitionTable.setViewport(0, 0, [column]);\n\n const data = await this.pending.add(partitionTable.getViewportData());\n if (data.rows.length > 0) {\n const row = data.rows[0];\n const value = row.get(column);\n\n this.updatePartition(value, partitionColumn);\n\n this.setState({ isSelectingPartition: true });\n } else {\n log.info('Table does not have any data, just fetching all');\n this.setState({ isSelectingPartition: false });\n this.handlePartitionFetchAll();\n }\n this.setState({ partitionTable, partitionColumn }, () => {\n this.initState();\n });\n } catch (error) {\n this.handleTableLoadError(error);\n }\n }\n\n updatePartition(partition: string, partitionColumn: Column): void {\n const partitionFilter = partitionColumn\n .filter()\n .eq(dh.FilterValue.ofString(partition));\n const partitionFilters = [partitionFilter];\n this.setState({\n partition,\n partitionFilters,\n });\n }\n\n copyCell(\n columnIndex: GridRangeIndex,\n rowIndex: GridRangeIndex,\n rawValue = false\n ): void {\n const { canCopy } = this.props;\n if (canCopy) {\n const value = String(\n this.getValueForCell(columnIndex, rowIndex, rawValue)\n );\n copyToClipboard(value).catch(e => log.error('Unable to copy cell', e));\n } else {\n log.error('Attempted to copyCell for user without copy permission.');\n }\n }\n\n /**\n * Copy the provided ranges to the clipboard\n * @paramranges The ranges to copy\n * @param includeHeaders Include the headers or not\n * @param formatValues Whether to format values or not\n * @param error Error message if one occurred\n */\n copyRanges(\n ranges: GridRange[],\n includeHeaders = false,\n formatValues = true,\n error?: string\n ): void {\n const { model, canCopy } = this.props;\n const { metricCalculator, movedColumns } = this.state;\n const userColumnWidths = metricCalculator.getUserColumnWidths();\n\n if (canCopy) {\n const copyOperation = {\n ranges: GridRange.boundedRanges(\n ranges,\n model.columnCount,\n model.rowCount\n ),\n includeHeaders,\n formatValues,\n movedColumns,\n userColumnWidths,\n error,\n };\n\n this.setState({ copyOperation });\n } else {\n log.error('Attempted copyRanges for user without copy permission.');\n }\n }\n\n startLoading(loadingText: string, resetRanges = false): void {\n this.setState({ loadingText });\n\n const theme = this.getTheme();\n\n if (resetRanges && this.grid) {\n this.grid.clearSelectedRanges();\n this.grid.setViewState({ top: 0 }, true);\n }\n\n if (this.loadingScrimStartTime == null) {\n const { minScrimTransitionTime, maxScrimTransitionTime } = theme;\n assertNotNull(minScrimTransitionTime);\n assertNotNull(maxScrimTransitionTime);\n const height = this.gridWrapper?.getBoundingClientRect().height ?? 0;\n const scrimTransitionTime = Math.max(\n minScrimTransitionTime,\n Math.min(height / 2, maxScrimTransitionTime)\n );\n this.loadingScrimStartTime = Date.now();\n this.loadingScrimFinishTime =\n this.loadingScrimStartTime + scrimTransitionTime;\n this.setState({\n loadingScrimProgress: 0,\n });\n this.loadingTimer = setTimeout(() => {\n this.setState({\n loadingSpinnerShown: true,\n });\n }, IrisGrid.loadingSpinnerDelay);\n }\n }\n\n stopLoading(): void {\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n this.setState({\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n });\n\n if (this.loadingTimer != null) {\n clearTimeout(this.loadingTimer);\n this.loadingTimer = undefined;\n }\n }\n\n /**\n * Rolls back the table state to the last known safe state, or if that's not available then clears all sorts/filters/custom columns.\n */\n rollback(): void {\n if (this.lastLoadedConfig) {\n log.debug('loading last loading config', this.lastLoadedConfig);\n const {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n } = this.lastLoadedConfig;\n\n this.lastLoadedConfig = null;\n this.setState({\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n });\n } else {\n log.debug('remove all sorts, filters, and custom columns');\n this.setState({\n advancedFilters: new Map(),\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n customColumns: [],\n quickFilters: new Map(),\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n rollupConfig: undefined,\n selectDistinctColumns: [],\n sorts: [],\n });\n }\n }\n\n /**\n * Check if we can rollback the current state to a safe state.\n * @returns true if there's a previously known safe state or if some of the current state isn't empty.\n */\n canRollback(): boolean {\n return this.lastLoadedConfig != null || !isEmptyConfig(this.state);\n }\n\n startListening(model: IrisGridModel): void {\n model.addEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnsChanged\n );\n model.addEventListener(\n IrisGridModel.EVENT.PENDING_DATA_UPDATED,\n this.handlePendingDataUpdated\n );\n }\n\n stopListening(model: IrisGridModel): void {\n model.removeEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnsChanged\n );\n model.removeEventListener(\n IrisGridModel.EVENT.PENDING_DATA_UPDATED,\n this.handlePendingDataUpdated\n );\n }\n\n focus(): void {\n this.grid?.focus();\n }\n\n focusFilterBar(column: VisibleIndex): void {\n const { movedColumns } = this.state;\n const { model } = this.props;\n const { columnCount } = model;\n const modelColumn = GridUtils.getModelIndex(column, movedColumns);\n\n if (\n column == null ||\n column < 0 ||\n columnCount <= column ||\n !model.isFilterable(modelColumn)\n ) {\n this.setState({ focusedFilterBarColumn: null });\n return;\n }\n\n const { metricCalculator, metrics } = this.state;\n assertNotNull(metrics);\n const { left, rightVisible, lastLeft } = metrics;\n if (column < left) {\n this.grid?.setViewState({ left: column }, true);\n } else if (rightVisible < column) {\n const metricState = this.grid?.getMetricState();\n assertNotNull(metricState);\n const newLeft = metricCalculator.getLastLeft(\n metricState,\n column,\n metricCalculator.getVisibleWidth(metricState)\n );\n this.grid?.setViewState(\n { left: Math.min(newLeft, lastLeft), leftOffset: 0 },\n true\n );\n }\n this.lastFocusedFilterBarColumn = column;\n this.setState({ focusedFilterBarColumn: column, isFilterBarShown: true });\n }\n\n hideColumnByVisibleIndex(columnVisibleIndex: VisibleIndex): void {\n const { metricCalculator, movedColumns } = this.state;\n metricCalculator.setColumnWidth(\n GridUtils.getModelIndex(columnVisibleIndex, movedColumns),\n 0\n );\n\n this.grid?.forceUpdate();\n }\n\n freezeColumnByColumnName(columnName: ColumnName): void {\n const { frozenColumns, movedColumns } = this.state;\n const { model } = this.props;\n log.debug2('freezing column', columnName);\n\n const allFrozenColumns =\n frozenColumns == null\n ? new Set(model.frozenColumns)\n : new Set(frozenColumns);\n\n allFrozenColumns.add(columnName);\n\n const modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n const newMovedColumns = GridUtils.moveItem(\n visibleIndex,\n allFrozenColumns.size - 1,\n movedColumns\n );\n\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns,\n });\n }\n\n unFreezeColumnByColumnName(columnName: ColumnName): void {\n const { frozenColumns, movedColumns } = this.state;\n const { model } = this.props;\n log.debug2('unfreezing column', columnName);\n\n const allFrozenColumns =\n frozenColumns == null\n ? new Set(model.frozenColumns)\n : new Set(frozenColumns);\n\n allFrozenColumns.delete(columnName);\n\n const modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n\n // Move to after remaining frozen columns and front columns\n const newMovedColumns = GridUtils.moveItem(\n visibleIndex,\n allFrozenColumns.size + model.frontColumns.length,\n movedColumns\n );\n\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns,\n });\n }\n\n handleColumnVisibilityChanged(\n modelIndexes: ModelIndex[],\n visibilityOption?: VisibilityOptionType\n ): void {\n const { metricCalculator } = this.state;\n if (\n visibilityOption === VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n ) {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.resetColumnWidth(modelIndex);\n });\n } else {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.setColumnWidth(modelIndex, 0);\n });\n }\n this.grid?.forceUpdate();\n }\n\n handleCrossColumnSearch(\n searchValue: string,\n selectedSearchColumns: ColumnName[],\n invertSearchColumns: boolean\n ): void {\n const { model } = this.props;\n\n this.updateSearchFilter(\n searchValue,\n selectedSearchColumns,\n model.columns,\n invertSearchColumns\n );\n\n this.setState({\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n });\n }\n\n updateSearchFilter = debounce(\n (\n searchValue: string,\n selectedSearchColumns: ColumnName[],\n columns: Column[],\n invertSearchColumns: boolean\n ): void => {\n const searchFilter = CrossColumnSearch.createSearchFilter(\n searchValue,\n selectedSearchColumns,\n columns,\n invertSearchColumns\n );\n this.setState({ searchFilter });\n },\n SET_FILTER_DEBOUNCE\n );\n\n handleAnimationLoop(): void {\n this.grid?.updateCanvasScale();\n this.grid?.updateCanvas();\n\n if (this.isAnimating) {\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n }\n\n handleAnimationStart(): void {\n log.debug2('handleAnimationStart');\n\n this.isAnimating = true;\n\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n\n handleAnimationEnd(): void {\n log.debug2('handleAnimationEnd');\n\n this.isAnimating = false;\n }\n\n handlePartitionAppend(value: string): void {\n const { onPartitionAppend } = this.props;\n const { partitionColumn } = this.state;\n onPartitionAppend(partitionColumn, value);\n }\n\n handlePartitionChange(partition: string): void {\n const { partitionColumn } = this.state;\n this.updatePartition(partition, partitionColumn);\n }\n\n handlePartitionFetchAll(): void {\n this.setState({\n partitionFilters: [],\n isSelectingPartition: false,\n });\n }\n\n handlePartitionDone(): void {\n this.setState({ isSelectingPartition: false });\n }\n\n handleTableLoadError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error(error);\n\n const { onError } = this.props;\n onError(error);\n }\n\n showAllColumns(): void {\n const { metricCalculator } = this.state;\n const userColumnWidths = metricCalculator.getUserColumnWidths();\n const entries = [...userColumnWidths.entries()];\n for (let i = 0; i < entries.length; i += 1) {\n const [modelIndex, columnWidth] = entries[i];\n if (columnWidth === 0) {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n }\n this.grid?.forceUpdate();\n }\n\n toggleSort(columnIndex: VisibleIndex, addToExisting: boolean): void {\n log.info('Toggling sort for column', columnIndex);\n\n const { model } = this.props;\n const { sorts: currentSorts } = this.state;\n const modelColumn = this.getModelColumn(columnIndex);\n assertNotNull(modelColumn);\n const sorts = TableUtils.toggleSortForColumn(\n currentSorts,\n model.columns,\n modelColumn,\n addToExisting\n );\n this.updateSorts(sorts);\n }\n\n updateSorts(sorts: Sort[]): void {\n this.startLoading('Sorting...');\n this.setState({ sorts });\n this.grid?.forceUpdate();\n }\n\n sortColumn(\n modelColumn: ModelIndex,\n direction: SortDirection = TableUtils.sortDirection.none,\n isAbs = false,\n addToExisting = false\n ): void {\n assertNotNull(modelColumn);\n const { model } = this.props;\n const sorts = TableUtils.sortColumn(\n model.sort,\n model.columns,\n modelColumn,\n direction,\n isAbs,\n addToExisting\n );\n this.startLoading('Sorting...');\n this.setState({ sorts });\n this.grid?.forceUpdate();\n }\n\n reverse(reverseType: ReverseType): void {\n this.startLoading('Reversing...');\n this.setState({ reverseType });\n this.grid?.forceUpdate();\n }\n\n isReversible(): boolean {\n const { model } = this.props;\n return model.isReversible;\n }\n\n toggleFilterBar(focusIndex = this.lastFocusedFilterBarColumn): void {\n let { isFilterBarShown } = this.state;\n isFilterBarShown = !isFilterBarShown;\n this.setState({ isFilterBarShown });\n\n if (isFilterBarShown) {\n if (focusIndex != null) {\n this.focusFilterBar(focusIndex);\n } else {\n let columnIndex = 0;\n const { model } = this.props;\n const { columnCount } = model;\n for (let i = 0; i < columnCount; i += 1) {\n const modelColumn = this.getModelColumn(i);\n if (modelColumn != null) {\n const column = model.columns[modelColumn];\n if (column != null && TableUtils.isTextType(column.type)) {\n columnIndex = i;\n break;\n }\n }\n }\n this.focusFilterBar(columnIndex);\n }\n } else {\n this.grid?.focus();\n }\n }\n\n isTableSearchAvailable(): boolean {\n const { model, canToggleSearch } = this.props;\n const searchDisplayMode = model?.layoutHints?.searchDisplayMode;\n\n if (searchDisplayMode === dh.SearchDisplayMode?.SEARCH_DISPLAY_HIDE) {\n return false;\n }\n if (searchDisplayMode === dh.SearchDisplayMode?.SEARCH_DISPLAY_SHOW) {\n return true;\n }\n\n return canToggleSearch;\n }\n\n toggleSearchBar(): void {\n const { showSearchBar } = this.state;\n if (!this.isTableSearchAvailable()) {\n return;\n }\n\n const update = !showSearchBar;\n this.setState(\n {\n showSearchBar: update,\n },\n () => {\n if (update && this.crossColumnRef?.current) {\n this.crossColumnRef?.current.focus();\n } else {\n this.grid?.focus();\n }\n }\n );\n }\n\n toggleGotoRow(row = ''): void {\n const { isGotoRowShown } = this.state;\n if (row) {\n // if invoked with a row, keep open instead of toggle\n this.setState({\n isGotoRowShown: true,\n gotoRow: row,\n gotoRowError: '',\n });\n return;\n }\n this.setState({\n isGotoRowShown: !isGotoRowShown,\n gotoRow: '',\n gotoRowError: '',\n });\n }\n\n async commitPending(): Promise<void> {\n const { model } = this.props;\n if (!isEditableGridModel(model) || !model.isEditable) {\n throw new Error('Cannot save, table is not editable');\n }\n\n const { pendingSavePromise } = this.state;\n if (pendingSavePromise != null) {\n throw new Error('Save already in progress');\n }\n\n const containsGridCellInputField = document?.activeElement?.classList.contains(\n 'grid-cell-input-field'\n );\n if (containsGridCellInputField != null && containsGridCellInputField) {\n if (\n document.activeElement != null &&\n document.activeElement.classList.contains('error')\n ) {\n throw new ValidationError('Current input is invalid');\n }\n\n // Focus the grid again to commit any pending input changes\n this.grid?.focus();\n }\n\n const newPendingSavePromise = this.pending\n .add(model.commitPending())\n .then(() => {\n this.setState({ pendingSaveError: null, pendingSavePromise: null });\n })\n .catch(err => {\n if (!PromiseUtils.isCanceled(err)) {\n this.setState({ pendingSaveError: err, pendingSavePromise: null });\n }\n });\n this.setState({ pendingSavePromise: newPendingSavePromise });\n return newPendingSavePromise;\n }\n\n async discardPending(): Promise<void> {\n const { pendingSavePromise } = this.state;\n if (pendingSavePromise != null) {\n throw new Error('Cannot cancel a save in progress');\n }\n\n this.setState({\n pendingSavePromise: null,\n pendingSaveError: null,\n pendingDataMap: new Map(),\n pendingDataErrors: new Map(),\n });\n }\n\n /**\n * Select the passed in column and notify listener\n * @param column The column in this table to link\n */\n selectColumn(column: Column): void {\n const { onColumnSelected } = this.props;\n onColumnSelected(column);\n }\n\n /**\n * Select all the data for a given row and notify listener\n */\n selectData(columnIndex: ModelIndex, rowIndex: ModelIndex): void {\n const { model } = this.props;\n const { columns, groupedColumns } = model;\n const dataMap: RowDataMap = {};\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n const { name, type } = column;\n const value = model.valueForCell(i, rowIndex);\n const text = model.textForCell(i, rowIndex);\n const isExpandable =\n isExpandableGridModel(model) && model.isRowExpandable(rowIndex);\n const isGrouped = groupedColumns.find(c => c.name === name) != null;\n dataMap[name] = { value, text, type, isGrouped, isExpandable };\n }\n const { onDataSelected } = this.props;\n onDataSelected(rowIndex, dataMap);\n }\n\n handleAdvancedFilterChange(\n column: Column,\n filter: FilterCondition | null,\n options: AdvancedFilterOptions\n ): void {\n const { model } = this.props;\n const index = model.getColumnIndexByName(column.name);\n assertNotNull(index);\n this.setAdvancedFilter(index, filter, options);\n }\n\n handleAdvancedFilterSortChange(\n column: Column,\n direction: SortDirection,\n addToExisting = false\n ): void {\n const { model } = this.props;\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n const oldSort = TableUtils.getSortForColumn(model.sort, columnIndex);\n let newSort = null;\n\n if (oldSort == null || oldSort.direction !== direction) {\n if (direction === TableUtils.sortDirection.descending) {\n newSort = column.sort().desc();\n } else {\n newSort = column.sort().asc();\n }\n }\n\n const sorts = TableUtils.setSortForColumn(\n model.sort,\n columnIndex,\n newSort,\n addToExisting\n );\n log.info('Setting table sorts', sorts);\n\n this.startLoading('Sorting...');\n this.setState({ sorts });\n\n this.grid?.forceUpdate();\n }\n\n handleAdvancedFilterDone(): void {\n this.grid?.focus();\n }\n\n handleAdvancedMenuOpened(column: GridRangeIndex): void {\n this.setState({ shownAdvancedFilter: column });\n }\n\n handleGotoRowOpened(): void {\n this.setState({ isGotoRowShown: true });\n }\n\n handleGotoRowClosed(): void {\n this.setState({ isGotoRowShown: false });\n }\n\n handleAdvancedMenuClosed(columnIndex: number): void {\n const { focusedFilterBarColumn, isFilterBarShown } = this.state;\n if (\n isFilterBarShown &&\n focusedFilterBarColumn === columnIndex &&\n this.filterInputRef?.current !== null\n ) {\n this.filterInputRef?.current.focus();\n this.setState({ shownAdvancedFilter: null });\n } else {\n this.setState({\n focusedFilterBarColumn: null,\n shownAdvancedFilter: null,\n });\n }\n }\n\n handleCancel(): void {\n this.rollback();\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleChartChange(): void {\n // TODO: IDS-4242 Update Chart Preview\n }\n\n handleChartCreate(settings: ChartBuilderSettings): void {\n const { model, onCreateChart } = this.props;\n onCreateChart(settings, model);\n }\n\n handleGridError(error?: Error): void {\n log.warn('Grid Error', error);\n this.setState({\n toastMessage: <div className=\"error-message\">{`${error}`}</div>,\n });\n }\n\n handleFilterBarChange(value: string): void {\n this.startLoading('Filtering...', true);\n\n this.setState(({ focusedFilterBarColumn, quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n if (focusedFilterBarColumn != null) {\n const modelIndex = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelIndex);\n this.applyQuickFilter(modelIndex, value, newQuickFilters);\n }\n return { quickFilters: newQuickFilters };\n });\n }\n\n handleFilterBarDone(setGridFocus = true, defocusInput = true): void {\n if (setGridFocus) {\n this.grid?.focus();\n }\n if (defocusInput) {\n this.setState({ focusedFilterBarColumn: null });\n }\n }\n\n handleFilterBarTab(backward: boolean): void {\n const { focusedFilterBarColumn } = this.state;\n assertNotNull(focusedFilterBarColumn);\n if (backward) {\n this.focusFilterBar(focusedFilterBarColumn - 1);\n } else {\n this.focusFilterBar(focusedFilterBarColumn + 1);\n }\n }\n\n handleFormatSelection(\n modelIndex: ModelIndex,\n selectedFormat: TableColumnFormat | null\n ): void {\n const { model } = this.props;\n const column = model.columns[modelIndex];\n const { customColumnFormatMap: prevCustomColumnFormatMap } = this.state;\n const customColumnFormatMap = new Map(prevCustomColumnFormatMap);\n\n if (selectedFormat != null) {\n const normalizedType = TableUtils.getNormalizedType(column.type);\n assertNotNull(normalizedType);\n const columnFormattingRule = Formatter.makeColumnFormattingRule(\n normalizedType,\n column.name,\n selectedFormat\n );\n\n customColumnFormatMap.set(column.name, columnFormattingRule);\n } else {\n customColumnFormatMap.delete(column.name);\n }\n\n this.updateFormatter({ customColumnFormatMap });\n }\n\n handleMenu(e: React.MouseEvent<HTMLButtonElement>): void {\n e.stopPropagation();\n this.setState({ isMenuShown: true });\n }\n\n handleMenuClose(): void {\n this.setState({ isMenuShown: false, openOptions: [] });\n }\n\n handleMenuBack(): void {\n this.setState(({ openOptions }) => {\n const newOptions = [...openOptions];\n newOptions.pop();\n return { openOptions: newOptions };\n });\n }\n\n handleMenuSelect(option: OptionItem): void {\n this.setState(({ openOptions }) => ({\n openOptions: [...openOptions, option],\n }));\n }\n\n handleRequestFailed(event: Event): void {\n const customEvent = event as CustomEvent;\n log.error('request failed:', customEvent.detail);\n this.stopLoading();\n if (this.canRollback()) {\n this.startLoading('Rolling back changes...', true);\n this.rollback();\n } else {\n log.error('Table failed and unable to rollback');\n const { onError } = this.props;\n onError(new Error(`Error displaying table: ${customEvent.detail}`));\n }\n }\n\n handleUpdate(): void {\n this.stopLoading();\n log.debug2('Received model update');\n\n const {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n } = this.state;\n\n const config = {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n };\n\n if (!isEmptyConfig(config)) {\n this.lastLoadedConfig = config;\n } else {\n this.lastLoadedConfig = null;\n }\n\n this.grid?.forceUpdate();\n }\n\n handleViewChanged(metrics?: GridMetrics): void {\n const { model } = this.props;\n const { selectionEndRow = 0 } = this.grid?.state ?? {};\n let pendingRowCount = 0;\n if (isEditableGridModel(model) && model.isEditable) {\n assertNotNull(metrics);\n const { bottomViewport } = metrics;\n\n // We have an editable table that we can add new rows to\n // Display empty rows beneath the table rows that user can fill in\n const bottomNonFloating = model.rowCount - model.floatingBottomRowCount;\n if (selectionEndRow === bottomNonFloating - 1) {\n // Selection is in the last row, add another blank row\n pendingRowCount = model.pendingRowCount + 1;\n } else if (selectionEndRow === bottomNonFloating - 2) {\n // We may have just added a row based on selection moving, so just leave it as is\n pendingRowCount = model.pendingRowCount;\n } else {\n // Otherwise fill up the viewport with empty cells\n pendingRowCount = Math.max(\n 0,\n bottomViewport -\n (model.rowCount - model.pendingRowCount) -\n model.floatingTopRowCount -\n model.floatingBottomRowCount -\n 1\n );\n }\n }\n\n this.setState({ metrics, pendingRowCount });\n }\n\n handleSelectionChanged(selectedRanges?: GridRange[]): void {\n assertNotNull(selectedRanges);\n const { onSelectionChanged } = this.props;\n const { copyOperation } = this.state;\n this.setState({ selectedRanges });\n if (copyOperation != null) {\n this.setState({ copyOperation: null });\n }\n onSelectionChanged(selectedRanges);\n }\n\n handleMovedColumnsChanged(\n movedColumns: MoveOperation[],\n onChangeApplied: (() => void) | undefined = () => null\n ): void {\n this.setState({ movedColumns }, onChangeApplied);\n }\n\n handleTooltipRef(tooltip: Tooltip): void {\n // Need to start the timer right away, since we're creating the tooltip when we want the timer to start\n if (tooltip != null) {\n tooltip.startTimer();\n }\n\n this.tooltip = tooltip;\n }\n\n handleConditionalFormatsChange(\n conditionalFormats: SidebarFormattingRule[]\n ): void {\n log.debug('Updated conditional formats', conditionalFormats);\n this.setState({ conditionalFormats });\n }\n\n handleConditionalFormatCreate(): void {\n log.debug('Create new conditional format');\n const { openOptions, conditionalFormats } = this.state;\n this.setState({\n openOptions: [\n ...openOptions,\n {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: `Create Formatting Rule`,\n },\n ],\n conditionalFormatEditIndex: conditionalFormats.length,\n // Start with a blank rule\n conditionalFormatPreview: undefined,\n });\n }\n\n handleConditionalFormatEdit(index: number): void {\n log.debug('Edit conditional format', index);\n const { openOptions, conditionalFormats } = this.state;\n this.setState({\n openOptions: [\n ...openOptions,\n {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: `Edit Formatting Rule`,\n },\n ],\n conditionalFormatEditIndex: index,\n // Clone rule to preview temporary changes\n conditionalFormatPreview: { ...conditionalFormats[index] },\n });\n }\n\n // Apply live changes\n handleConditionalFormatEditorUpdate = debounce(\n (conditionalFormatPreview?: SidebarFormattingRule): void => {\n this.setState({ conditionalFormatPreview });\n },\n SET_CONDITIONAL_FORMAT_DEBOUNCE\n );\n\n handleConditionalFormatEditorSave(config: SidebarFormattingRule): void {\n log.debug('Save conditional format changes', config);\n this.setState(\n state => {\n if (state.conditionalFormatEditIndex === null) {\n log.debug('Invalid format index');\n return null;\n }\n const conditionalFormats = [...state.conditionalFormats];\n conditionalFormats[state.conditionalFormatEditIndex] = config;\n return { conditionalFormats };\n },\n () => {\n this.handleMenuBack();\n }\n );\n }\n\n handleConditionalFormatEditorCancel(): void {\n this.handleMenuBack();\n // Not resetting conditionalFormatPreview here\n // to prevent editor fields change during the menu transition\n this.setState({ conditionalFormatEditIndex: null });\n }\n\n handleUpdateCustomColumns(customColumns: string[]): void {\n log.info(`handleUpdateCustomColumns:`, customColumns);\n\n const { model } = this.props;\n const {\n movedColumns,\n sorts,\n quickFilters,\n advancedFilters,\n selectDistinctColumns,\n } = this.state;\n\n const { columns } = model;\n const oldCustomColumns = model.customColumns.map(\n customColumn => `${customColumn}`\n );\n\n const removedColumnNames = IrisGridUtils.getRemovedCustomColumnNames(\n oldCustomColumns,\n customColumns\n );\n if (removedColumnNames.length > 0) {\n const newSorts = IrisGridUtils.removeSortsInColumns(\n sorts,\n removedColumnNames\n );\n const newQuickFilters = IrisGridUtils.removeFiltersInColumns(\n columns,\n quickFilters,\n removedColumnNames\n );\n const newAdvancedFilters = IrisGridUtils.removeFiltersInColumns(\n columns,\n advancedFilters,\n removedColumnNames\n );\n const newMovedColumns = IrisGridUtils.removeColumnFromMovedColumns(\n columns,\n movedColumns,\n removedColumnNames\n );\n const newSelectDistinctColumns = IrisGridUtils.removeColumnsFromSelectDistinctColumns(\n selectDistinctColumns,\n removedColumnNames\n );\n if (newSorts.length !== sorts.length) {\n log.debug('removing sorts from removed custom columns...');\n this.setState({ sorts: newSorts });\n }\n if (\n newQuickFilters.size !== quickFilters.size ||\n newAdvancedFilters.size !== advancedFilters.size\n ) {\n log.debug(`removing filters from removed custom columns...`);\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n if (!deepEqual(movedColumns, newMovedColumns)) {\n log.debug(\n `change moved columns for removed custom columns`,\n newMovedColumns\n );\n this.setState({ movedColumns: newMovedColumns });\n }\n if (!deepEqual(selectDistinctColumns, newSelectDistinctColumns)) {\n log.debug(\n `change selectDistinct columns for removed custom columns`,\n newMovedColumns\n );\n this.setState({ selectDistinctColumns: newSelectDistinctColumns });\n }\n }\n\n this.setState({ customColumns });\n this.startLoading('Applying custom columns...');\n }\n\n handleCustomColumnsChanged(): void {\n log.debug('custom columns changed');\n const { isReady } = this.state;\n if (isReady) {\n this.stopLoading();\n this.grid?.forceUpdate();\n } else {\n this.initState();\n }\n }\n\n handlePendingCommitClicked(): Promise<void> {\n return this.commitPending();\n }\n\n handlePendingDiscardClicked(): Promise<void> {\n return this.discardPending();\n }\n\n handlePendingDataUpdated(): void {\n log.debug('pending data updated');\n const { model } = this.props;\n const { pendingDataMap, pendingDataErrors } = model;\n this.setState({\n pendingDataMap,\n pendingDataErrors,\n pendingSaveError: null,\n });\n this.grid?.forceUpdate();\n }\n\n /**\n * User added, removed, or changed the order of aggregations, or position\n * @param aggregationSettings The new aggregation settings\n */\n handleAggregationsChange(aggregationSettings: AggregationSettings): void {\n log.debug('handleAggregationsChange', aggregationSettings);\n\n this.startLoading(\n `Aggregating ${aggregationSettings.aggregations\n .map(a => a.operation)\n .join(', ')}...`\n );\n this.setState({ aggregationSettings });\n }\n\n /**\n * A specific aggregation has been modified\n * @param aggregation The new aggregation\n */\n handleAggregationChange(aggregation: Aggregation): void {\n log.debug('handleAggregationChange', aggregation);\n\n this.startLoading(`Aggregating ${aggregation.operation}...`);\n this.setState(({ aggregationSettings }) => ({\n selectedAggregation: aggregation,\n aggregationSettings: {\n ...aggregationSettings,\n aggregations: aggregationSettings.aggregations.map(a =>\n a.operation === aggregation.operation ? aggregation : a\n ),\n },\n }));\n }\n\n /**\n * An aggregations has been selected for editing\n * @param aggregation The aggregation to edit\n */\n handleAggregationEdit(aggregation: Aggregation): void {\n log.debug('handleAggregationEdit', aggregation);\n\n const { openOptions } = this.state;\n\n this.setState({\n openOptions: [\n ...openOptions,\n {\n type: OptionType.AGGREGATION_EDIT,\n title: `Edit Columns to ${aggregation.operation}`,\n },\n ],\n selectedAggregation: aggregation,\n });\n }\n\n handleRollupChange(rollupConfig: UIRollupConfig): void {\n log.info('Rollup change', rollupConfig);\n\n this.resetGridViewState();\n this.showAllColumns();\n this.clearAllFilters();\n\n this.startLoading(\n `Grouping by columns ${rollupConfig?.columns?.join(', ') ?? ''}...`\n );\n\n // Have to clear select distinct since rollup uses the original columns, not the current ones.\n // IrisGridProxyModel has a check to prevent model update\n // when selectDistinctModel is cleared and the rollupConfig is set on the model.\n this.setState({\n rollupConfig,\n movedColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n selectDistinctColumns: [],\n });\n }\n\n handleSelectDistinctChanged(columnNames: ColumnName[]): void {\n log.debug('SelectDistinct change', columnNames);\n\n this.resetGridViewState();\n\n this.showAllColumns();\n this.clearAllFilters();\n\n this.startLoading(\n `Selecting distinct values in ${\n columnNames.length > 0 ? columnNames.join(', ') : ''\n }...`\n );\n\n this.setState({\n selectDistinctColumns: columnNames,\n movedColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n });\n }\n\n handleDownloadTableStart(): void {\n const { canDownloadCsv } = this.props;\n if (canDownloadCsv) {\n this.setState({\n isTableDownloading: true,\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.INITIATING,\n });\n } else {\n log.error(\n 'Attempted to handleDownloadTableStart for user without download CSV permission.'\n );\n }\n }\n\n handleDownloadTable(\n fileName: string,\n frozenTable: Table,\n tableSubscription: TableViewportSubscription,\n snapshotRanges: GridRange[],\n modelRanges: GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ): void {\n const { canDownloadCsv } = this.props;\n if (canDownloadCsv) {\n log.info(\n 'start table downloading',\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n this.setState(() => {\n if (this.tableSaver) {\n this.tableSaver.startDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n }\n return {\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING,\n };\n });\n } else {\n log.error(\n 'Attempted to handleDownloadTable for user without download CSV permission.'\n );\n }\n }\n\n handleCancelDownloadTable(): void {\n this.tableSaver?.cancelDownload();\n this.setState({ isTableDownloading: false });\n }\n\n handleDownloadProgressUpdate = throttle(\n (\n tableDownloadProgress: number,\n tableDownloadEstimatedTime: number | null\n ) => {\n const { tableDownloadStatus } = this.state;\n if (\n tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING\n ) {\n this.setState({\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n });\n }\n },\n UPDATE_DOWNLOAD_THROTTLE\n );\n\n handleDownloadCompleted(): void {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 100,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.FINISHED,\n });\n }\n\n handleDownloadCanceled(): void {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 0,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.CANCELED,\n });\n }\n\n /**\n * Delete the specified ranges from the table.\n * @param ranges The ranges to delete\n */\n deleteRanges(ranges: GridRange[]): void {\n const { model } = this.props;\n this.pending.add(model.delete(ranges)).catch(e => {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to delete ranges', ranges, e);\n }\n });\n }\n\n resetColumnSelection(): void {\n if (this.grid == null) {\n return;\n }\n const { isSelectingColumn } = this.props;\n if (isSelectingColumn) {\n const { columnAllowedCursor } = this.props;\n this.grid.setState({ cursor: columnAllowedCursor });\n } else {\n this.grid.setState({ cursor: null });\n this.setState({ hoverSelectColumn: null });\n }\n }\n\n resetGridViewState(forceUpdate = true): void {\n if (!this.grid) {\n return;\n }\n\n this.grid.clearSelectedRanges();\n this.grid.setViewState(\n { left: 0, top: 0, topOffset: 0, leftOffset: 0 },\n forceUpdate\n );\n }\n\n sendStateChange(): void {\n if (!this.grid) {\n return;\n }\n const { state: irisGridState } = this;\n const { state: gridState } = this.grid;\n const { onStateChange } = this.props;\n\n onStateChange(irisGridState, gridState);\n }\n\n handleOverflowClose(): void {\n this.setState({\n showOverflowModal: false,\n });\n }\n\n getColumnBoundingRect(): DOMRect {\n const { metrics, shownColumnTooltip } = this.state;\n assertNotNull(metrics);\n assertNotNull(shownColumnTooltip);\n const gridRect = this.gridWrapper?.getBoundingClientRect();\n const popperMargin = 20;\n assertNotNull(gridRect);\n const {\n columnHeaderHeight,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n columnHeaderMaxDepth,\n } = metrics;\n const columnX = visibleColumnXs.get(shownColumnTooltip);\n const columnWidth = visibleColumnWidths.get(shownColumnTooltip);\n\n assertNotNull(columnX);\n assertNotNull(columnWidth);\n\n const left =\n gridRect.left +\n clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin);\n\n return {\n top: gridRect.top + (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left:\n gridRect.left +\n clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin),\n bottom: gridRect.top + columnHeaderMaxDepth * columnHeaderHeight,\n right:\n gridRect.left +\n clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin) +\n 1,\n width: 1,\n height: columnHeaderHeight,\n x: left,\n y: gridRect.top,\n toJSON: () => {\n throw new Error('not implemented');\n },\n };\n }\n\n getOverflowButtonTooltip = memoize(\n (overflowButtonTooltipProps: CSSProperties): ReactNode => {\n if (overflowButtonTooltipProps == null) {\n return null;\n }\n\n const wrapperStyle: CSSProperties = {\n position: 'absolute',\n ...overflowButtonTooltipProps,\n pointerEvents: 'none',\n };\n\n const popperOptions: PopperOptions = {\n placement: 'left',\n modifiers: {\n flip: {\n behavior: ['left', 'right'],\n },\n },\n };\n\n return (\n <div style={wrapperStyle}>\n <Tooltip\n key={Date.now()}\n options={popperOptions}\n ref={this.handleTooltipRef}\n >\n View full contents\n </Tooltip>\n </div>\n );\n }\n );\n\n handleGotoRowSelectedRowNumberSubmit(): void {\n const { gotoRow: rowNumber } = this.state;\n this.focusRowInGrid(rowNumber);\n }\n\n focusRowInGrid(rowNumber: string): void {\n const { model } = this.props;\n const { rowCount } = model;\n this.setState({ gotoRow: rowNumber });\n if (rowNumber === '') {\n this.setState({ gotoRowError: '' });\n return;\n }\n const rowInt = parseInt(rowNumber, 10);\n if (rowInt > rowCount || rowInt < -rowCount) {\n this.setState({ gotoRowError: 'Invalid row index' });\n } else if (rowInt === 0) {\n this.setState({ gotoRowError: '' });\n this.grid?.setFocusRow(0);\n } else if (rowInt < 0) {\n this.setState({ gotoRowError: '' });\n this.grid?.setFocusRow(rowInt + rowCount);\n } else {\n this.grid?.setFocusRow(rowInt - 1);\n this.setState({ gotoRowError: '' });\n }\n }\n\n handleGotoRowSelectedRowNumberChanged(\n event: ChangeEvent<HTMLInputElement>\n ): void {\n const rowNumber = event.target.value;\n this.focusRowInGrid(rowNumber);\n }\n\n getColumnTooltip(\n visibleIndex: VisibleIndex,\n metrics: GridMetrics,\n model: IrisGridModel\n ): ReactNode {\n const {\n columnHeaderHeight,\n columnHeaderMaxDepth,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n } = metrics;\n const columnX = visibleColumnXs.get(visibleIndex);\n const columnWidth = visibleColumnWidths.get(visibleIndex);\n\n if (columnX == null || columnWidth == null) {\n return null;\n }\n\n /**\n * Create a wrapper dom element, the size of the column header.\n * The wrapper acts as tooltip parent, the tooltip component\n * will trigger hide on mouseleave of wrapper or tooltip.\n * The wrapper should be bound to within the grid dimensions,\n * so popper only remains triggered while mouse is inside the panel.\n */\n const boundedLeft = Math.max(0, columnX);\n let boundedWidth = columnWidth;\n if (columnX + columnWidth > width) {\n // column is extending past right edge\n boundedWidth = width - columnX;\n } else if (columnX < 0) {\n // column is extending past left edge\n boundedWidth = columnWidth - Math.abs(columnX);\n }\n\n const wrapperStyle: CSSProperties = {\n position: 'absolute',\n top: (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left: boundedLeft,\n width: boundedWidth,\n height: columnHeaderHeight,\n pointerEvents: 'none',\n };\n\n /**\n * Because the popper parent wrapper center is no longer the same as\n * the column label center, we create a popper virtual ref, to handle\n * positioning and keep the popper centered on the label. Creates a\n * 1px x headerHeight virtual object, placed centered on the column\n * label, clamped to 0 + margin to width - margin. We add a margin,\n * otherwise the arrow wants to escape the boundary.\n */\n const virtualReference: ReferenceObject = {\n clientWidth: 1,\n clientHeight: columnHeaderHeight,\n getBoundingClientRect: this.getColumnBoundingRect,\n };\n\n const popperOptions: PopperOptions = {\n placement: 'bottom',\n modifiers: {\n flip: {\n behavior: ['bottom', 'top'],\n },\n },\n };\n\n const modelColumn = this.getModelColumn(visibleIndex);\n if (modelColumn == null) return null;\n\n const column = model.columns[modelColumn];\n if (column == null) return null;\n\n return (\n <div style={wrapperStyle}>\n <Tooltip\n key={column.name}\n timeout={400}\n interactive\n options={popperOptions}\n ref={this.handleTooltipRef}\n referenceObject={virtualReference}\n onExited={() => {\n this.setState({ shownColumnTooltip: null });\n }}\n >\n <ColumnStatistics\n model={model}\n column={column}\n onStatistics={() => {\n this.tooltip?.update();\n }}\n />\n </Tooltip>\n </div>\n );\n }\n\n render(): ReactElement | null {\n const {\n children,\n customFilters,\n getDownloadWorker,\n isSelectingColumn,\n isStuckToBottom,\n isStuckToRight,\n model,\n name,\n onlyFetchVisibleColumns,\n alwaysFetchColumns,\n advancedSettings,\n onAdvancedSettingsChange,\n canDownloadCsv,\n onCreateChart,\n } = this.props;\n const {\n metricCalculator,\n metrics,\n isFilterBarShown,\n isSelectingPartition,\n isMenuShown,\n isReady,\n copyOperation,\n focusedFilterBarColumn,\n loadingText,\n loadingScrimProgress,\n loadingSpinnerShown,\n keyHandlers,\n mouseHandlers,\n shownColumnTooltip,\n hoverAdvancedFilter,\n shownAdvancedFilter,\n hoverSelectColumn,\n quickFilters,\n advancedFilters,\n partition,\n partitionFilters,\n partitionTable,\n partitionColumn,\n searchFilter,\n selectDistinctColumns,\n\n movedColumns,\n movedRows,\n\n formatter,\n conditionalFormats,\n conditionalFormatPreview,\n conditionalFormatEditIndex,\n\n sorts,\n reverseType,\n customColumns,\n\n selectedRanges,\n isTableDownloading,\n tableDownloadStatus,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n\n showSearchBar,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n\n aggregationSettings,\n selectedAggregation,\n rollupConfig,\n openOptions,\n pendingSavePromise,\n pendingSaveError,\n pendingRowCount,\n pendingDataErrors,\n pendingDataMap,\n toastMessage,\n frozenColumns,\n showOverflowModal,\n overflowText,\n overflowButtonTooltipProps,\n isGotoRowShown,\n gotoRow,\n gotoRowError,\n } = this.state;\n if (!isReady) {\n return null;\n }\n\n const theme = this.getTheme();\n\n const filter = this.getCachedFilter(\n customFilters,\n quickFilters,\n advancedFilters,\n partitionFilters,\n searchFilter\n );\n\n const userColumnWidths = metricCalculator.getUserColumnWidths();\n const stateOverride = this.getCachedStateOverride(\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverseType,\n rollupConfig,\n isMenuShown\n );\n const top = metrics ? metrics.top : 0;\n const bottom = metrics ? metrics.bottomViewport : 0;\n let left = null;\n let right = null;\n if (onlyFetchVisibleColumns) {\n left = metrics ? metrics.left : 0;\n right = metrics ? metrics.right : 0;\n }\n const isVisible =\n metrics != null && metrics.width > 0 && metrics.height > 0;\n const isRollup = (rollupConfig?.columns?.length ?? 0) > 0;\n\n let focusField = null;\n\n const debounceMs = metrics\n ? Math.min(\n Math.max(IrisGrid.minDebounce, Math.round(metrics.rowCount / 200)),\n IrisGrid.maxDebounce\n )\n : IrisGrid.maxDebounce;\n\n if (isFilterBarShown && focusedFilterBarColumn != null && metrics != null) {\n const {\n gridX,\n gridY,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n } = metrics;\n const columnX = visibleColumnXs.get(focusedFilterBarColumn);\n const columnWidth = visibleColumnWidths.get(focusedFilterBarColumn);\n if (columnX != null && columnWidth != null) {\n const x = gridX + columnX;\n const y = gridY - (theme.filterBarHeight ?? 0);\n const fieldWidth = columnWidth + 1; // cover right border\n const fieldHeight = (theme.filterBarHeight ?? 0) - 1; // remove bottom border\n const style = {\n top: y,\n left: x,\n minWidth: Math.min(fieldWidth, width - x), // Don't cause overflow\n height: fieldHeight,\n };\n let value = '';\n let isValid = true;\n const modelColumn = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelColumn);\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter != null) {\n value = quickFilter.text;\n isValid = quickFilter.filter != null;\n }\n const isBarFiltered =\n quickFilters.size !== 0 || advancedFilters.size !== 0;\n focusField = (\n <FilterInputField\n ref={this.filterInputRef}\n style={style}\n className={classNames({\n error: !isValid,\n active: value !== '' || advancedFilter != null,\n 'iris-grid-has-filter': isBarFiltered,\n })}\n isAdvancedFilterSet={advancedFilter != null}\n onAdvancedFiltersTriggered={() => {\n this.setState({ shownAdvancedFilter: focusedFilterBarColumn });\n }}\n key={focusedFilterBarColumn}\n onChange={this.handleFilterBarChange}\n onDone={this.handleFilterBarDone}\n onTab={this.handleFilterBarTab}\n onContextMenu={this.grid?.handleContextMenu}\n debounceMs={debounceMs}\n value={value}\n />\n );\n }\n }\n\n let loadingElement = null;\n if (loadingText != null) {\n const loadingStatus = (\n <div className=\"iris-grid-loading-status\">\n <div\n className={classNames('iris-grid-loading-status-bar', {\n show: loadingSpinnerShown,\n })}\n >\n {loadingText}\n </div>\n <button\n type=\"button\"\n onClick={this.handleCancel}\n className={classNames('iris-grid-btn-cancel', {\n show: loadingSpinnerShown,\n })}\n >\n <FontAwesomeIcon icon={vsClose} transform=\"down-1\" />\n Cancel\n </button>\n </div>\n );\n const gridY = metrics ? metrics.gridY : 0;\n loadingElement = (\n <div className=\"iris-grid-loading\" style={{ top: gridY }}>\n {loadingStatus}\n </div>\n );\n }\n\n let columnTooltip: React.ReactNode = null;\n if (shownColumnTooltip != null && metrics) {\n columnTooltip = this.getColumnTooltip(shownColumnTooltip, metrics, model);\n // #510 We may need to update the position of the tooltip if it's already opened and columns are resized\n this.tooltip?.update();\n }\n\n const filterBar = [];\n if (metrics && isFilterBarShown) {\n const {\n gridX,\n gridY,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n } = metrics;\n const { filterBarHeight } = theme;\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n\n const columnX = visibleColumnXs.get(columnIndex);\n const columnWidth = visibleColumnWidths.get(columnIndex);\n const modelColumn = this.getModelColumn(columnIndex);\n if (modelColumn != null) {\n const isFilterable = model.isFilterable(modelColumn);\n if (\n isFilterable &&\n columnX != null &&\n columnWidth != null &&\n columnWidth > 0\n ) {\n const x = gridX + columnX + columnWidth - 24;\n const y = gridY - (filterBarHeight ?? 0) + 2; // 2 acts as top margin for the button\n const style: CSSProperties = {\n position: 'absolute',\n top: y,\n left: x,\n };\n const advancedFilter = advancedFilters.get(modelColumn);\n const isFilterSet = advancedFilter != null;\n const isFilterVisible =\n columnIndex === hoverAdvancedFilter ||\n columnIndex === focusedFilterBarColumn ||\n isFilterSet;\n const element = (\n <div\n className={classNames('advanced-filter-button-container', {\n hidden: !isFilterVisible,\n })}\n key={columnIndex}\n style={style}\n >\n {isFilterVisible && (\n <Button\n kind=\"ghost\"\n className={classNames(\n 'btn-link-icon advanced-filter-button',\n {\n 'filter-set': isFilterSet,\n }\n )}\n onClick={() => {\n this.setState({ shownAdvancedFilter: columnIndex });\n }}\n onContextMenu={event => {\n this.grid?.handleContextMenu(event);\n }}\n onMouseEnter={() => {\n this.setState({ hoverAdvancedFilter: columnIndex });\n }}\n onMouseLeave={() => {\n this.setState({ hoverAdvancedFilter: null });\n }}\n >\n <div className=\"fa-layers\">\n <FontAwesomeIcon\n icon={dhFilterFilled}\n className=\"filter-solid\"\n />\n <FontAwesomeIcon\n icon={vsFilter}\n className=\"filter-light\"\n />\n </div>\n </Button>\n )}\n </div>\n );\n filterBar.push(element);\n }\n }\n }\n }\n const advancedFilterMenus = [];\n if (metrics) {\n const {\n gridX,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n columnHeaderHeight,\n } = metrics;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n const columnX = visibleColumnXs.get(columnIndex);\n const columnWidth = visibleColumnWidths.get(columnIndex);\n if (columnX != null && columnWidth != null && columnWidth > 0) {\n const xColumnHeader = gridX + columnX;\n const xFilterBar = gridX + columnX + columnWidth - 20;\n const style: CSSProperties = isFilterBarShown\n ? {\n position: 'absolute',\n top: columnHeaderHeight,\n left: xFilterBar,\n width: 20,\n height: theme.filterBarHeight,\n }\n : {\n position: 'absolute',\n top: 0,\n left: xColumnHeader,\n width: columnWidth,\n height: columnHeaderHeight,\n };\n const modelColumn = this.getModelColumn(columnIndex);\n if (modelColumn != null) {\n const column = model.columns[modelColumn];\n const advancedFilter = advancedFilters.get(modelColumn);\n const { options: advancedFilterOptions } = advancedFilter || {};\n const sort = TableUtils.getSortForColumn(model.sort, modelColumn);\n const sortDirection = sort ? sort.direction : null;\n const element = (\n <div\n key={columnIndex}\n className=\"advanced-filter-menu-container\"\n style={style}\n >\n <Popper\n className=\"advanced-filter-menu-popper\"\n onEntered={this.getAdvancedMenuOpenedHandler(columnIndex)}\n onExited={() => {\n this.handleAdvancedMenuClosed(columnIndex);\n }}\n isShown={shownAdvancedFilter === columnIndex}\n interactive\n closeOnBlur\n options={{\n positionFixed: true,\n }}\n >\n {this.getCachedAdvancedFilterMenuActions(\n model,\n column,\n advancedFilterOptions,\n sortDirection,\n formatter\n )}\n </Popper>\n </div>\n );\n advancedFilterMenus.push(element);\n }\n }\n }\n }\n\n const optionItems = this.getCachedOptionItems(\n onCreateChart !== undefined && model.isChartBuilderAvailable,\n model.isCustomColumnsAvailable,\n model.isFormatColumnsAvailable,\n model.isRollupAvailable,\n model.isTotalsAvailable,\n model.isSelectDistinctAvailable,\n model.isExportAvailable,\n this.toggleFilterBarAction,\n this.toggleSearchBarAction,\n this.toggleGotoRowAction,\n isFilterBarShown,\n showSearchBar,\n canDownloadCsv,\n this.isTableSearchAvailable(),\n isGotoRowShown,\n advancedSettings.size > 0\n );\n\n const openOptionsStack = openOptions.map(option => {\n switch (option.type) {\n case OptionType.CHART_BUILDER:\n return (\n <ChartBuilder\n model={model}\n onChange={this.handleChartChange}\n onSubmit={this.handleChartCreate}\n key={OptionType.CHART_BUILDER}\n />\n );\n case OptionType.VISIBILITY_ORDERING_BUILDER:\n return (\n <VisibilityOrderingBuilder\n model={model}\n movedColumns={movedColumns}\n userColumnWidths={userColumnWidths}\n onColumnVisibilityChanged={this.handleColumnVisibilityChanged}\n onMovedColumnsChanged={this.handleMovedColumnsChanged}\n key={OptionType.VISIBILITY_ORDERING_BUILDER}\n />\n );\n case OptionType.CONDITIONAL_FORMATTING:\n return (\n <ConditionalFormattingMenu\n rules={conditionalFormats}\n onChange={this.handleConditionalFormatsChange}\n onCreate={this.handleConditionalFormatCreate}\n onSelect={this.handleConditionalFormatEdit}\n />\n );\n case OptionType.CONDITIONAL_FORMATTING_EDIT:\n assertNotNull(model.columns);\n assertNotNull(this.handleConditionalFormatEditorUpdate);\n return (\n <ConditionalFormatEditor\n columns={model.columns}\n rule={conditionalFormatPreview}\n onUpdate={this.handleConditionalFormatEditorUpdate}\n onSave={this.handleConditionalFormatEditorSave}\n onCancel={this.handleConditionalFormatEditorCancel}\n />\n );\n case OptionType.CUSTOM_COLUMN_BUILDER:\n return (\n <CustomColumnBuilder\n model={model}\n customColumns={customColumns}\n onSave={this.handleUpdateCustomColumns}\n onCancel={this.handleMenuBack}\n key={OptionType.CUSTOM_COLUMN_BUILDER}\n />\n );\n case OptionType.ROLLUP_ROWS:\n return (\n <RollupRows\n model={model}\n onChange={this.handleRollupChange}\n config={rollupConfig}\n key={OptionType.ROLLUP_ROWS}\n />\n );\n case OptionType.AGGREGATIONS:\n return (\n <Aggregations\n settings={aggregationSettings}\n isRollup={isRollup}\n onChange={this.handleAggregationsChange}\n onEdit={this.handleAggregationEdit}\n />\n );\n case OptionType.AGGREGATION_EDIT:\n return (\n selectedAggregation && (\n <AggregationEdit\n aggregation={selectedAggregation}\n columns={model.originalColumns}\n onChange={this.handleAggregationChange}\n />\n )\n );\n case OptionType.TABLE_EXPORTER:\n return (\n <TableCsvExporter\n model={model}\n name={name}\n userColumnWidths={userColumnWidths}\n movedColumns={movedColumns}\n isDownloading={isTableDownloading}\n tableDownloadStatus={tableDownloadStatus}\n tableDownloadProgress={tableDownloadProgress}\n tableDownloadEstimatedTime={\n tableDownloadEstimatedTime ?? undefined\n }\n onDownload={this.handleDownloadTable}\n onDownloadStart={this.handleDownloadTableStart}\n onCancel={this.handleCancelDownloadTable}\n selectedRanges={selectedRanges}\n key={OptionType.TABLE_EXPORTER}\n />\n );\n case OptionType.SELECT_DISTINCT:\n return (\n <SelectDistinctBuilder\n model={model}\n selectDistinctColumns={selectDistinctColumns}\n onChange={this.handleSelectDistinctChanged}\n />\n );\n case OptionType.ADVANCED_SETTINGS:\n return (\n <AdvancedSettingsMenu\n items={advancedSettings}\n onChange={onAdvancedSettingsChange}\n />\n );\n\n default:\n throw Error(`Unexpected option type ${option.type}`);\n }\n });\n\n const hiddenColumns = this.getCachedHiddenColumns(\n IrisGridUtils.getHiddenColumns(userColumnWidths)\n );\n\n return (\n <div className=\"iris-grid\" role=\"presentation\">\n <div className=\"iris-grid-column\">\n {children != null && <div className=\"iris-grid-bar\">{children}</div>}\n <CSSTransition\n in={isSelectingPartition}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"iris-grid-bar-horizontal\"\n onEnter={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExit={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"iris-grid-partition-selector-wrapper iris-grid-bar iris-grid-bar-primary\">\n {partitionTable && partitionColumn && (\n <IrisGridPartitionSelector\n table={partitionTable}\n getFormattedString={(\n value: unknown,\n type: string,\n stringName: string\n ) => model.displayString(value, type, stringName)}\n columnName={partitionColumn.name}\n partition={partition}\n onChange={this.handlePartitionChange}\n onFetchAll={this.handlePartitionFetchAll}\n onAppend={this.handlePartitionAppend}\n onDone={this.handlePartitionDone}\n />\n )}\n </div>\n </CSSTransition>\n <CSSTransition\n in={showSearchBar}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"iris-grid-bar-horizontal\"\n onEnter={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExit={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"iris-grid-bar\">\n <CrossColumnSearch\n value={searchValue}\n selectedColumns={selectedSearchColumns}\n invertSelection={invertSearchColumns}\n onChange={this.handleCrossColumnSearch}\n columns={model.columns}\n ref={this.crossColumnRef}\n />\n </div>\n </CSSTransition>\n <div\n className=\"grid-wrapper\"\n ref={gridWrapper => {\n this.gridWrapper = gridWrapper;\n }}\n >\n <Grid\n ref={grid => {\n this.grid = grid;\n }}\n isStickyBottom={!isEditableGridModel(model) || !model.isEditable}\n isStuckToBottom={isStuckToBottom}\n isStuckToRight={isStuckToRight}\n metricCalculator={metricCalculator}\n model={model}\n keyHandlers={keyHandlers}\n mouseHandlers={mouseHandlers}\n movedColumns={movedColumns}\n movedRows={movedRows}\n onError={this.handleGridError}\n onViewChanged={this.handleViewChanged}\n onSelectionChanged={this.handleSelectionChanged}\n onMovedColumnsChanged={this.handleMovedColumnsChanged}\n renderer={this.renderer}\n stateOverride={stateOverride}\n theme={theme}\n />\n <IrisGridCellOverflowModal\n isOpen={showOverflowModal}\n text={overflowText}\n onClose={this.handleOverflowClose}\n />\n {isVisible && (\n <IrisGridModelUpdater\n model={model}\n modelColumns={model.columns}\n top={top}\n bottom={bottom}\n left={left}\n right={right}\n filter={filter}\n formatter={formatter}\n sorts={sorts}\n reverseType={reverseType}\n movedColumns={movedColumns}\n customColumns={customColumns}\n hiddenColumns={hiddenColumns}\n alwaysFetchColumns={this.getAlwaysFetchColumns(\n alwaysFetchColumns,\n model.columns,\n movedColumns,\n model.floatingLeftColumnCount,\n model.floatingRightColumnCount,\n this.grid?.state.draggingColumn?.range\n )}\n formatColumns={this.getCachedPreviewFormatColumns(\n this.getCachedModelColumns(model, customColumns),\n conditionalFormats,\n conditionalFormatPreview,\n // Disable the preview format when we press Back on the format edit page\n openOptions[openOptions.length - 1]?.type ===\n OptionType.CONDITIONAL_FORMATTING_EDIT\n ? conditionalFormatEditIndex ?? undefined\n : undefined\n )}\n rollupConfig={this.getModelRollupConfig(\n model.originalColumns,\n rollupConfig,\n aggregationSettings\n )}\n totalsConfig={this.getModelTotalsConfig(\n model.columns,\n rollupConfig,\n aggregationSettings\n )}\n selectDistinctColumns={selectDistinctColumns}\n pendingRowCount={pendingRowCount}\n pendingDataMap={pendingDataMap}\n frozenColumns={frozenColumns}\n />\n )}\n {!isMenuShown && (\n <div className=\"grid-settings-button\">\n <Button\n kind=\"ghost\"\n data-testid={`btn-iris-grid-settings-button-${name}`}\n onClick={this.handleMenu}\n icon={<FontAwesomeIcon icon={vsMenu} transform=\"up-1\" />}\n tooltip=\"Table Options\"\n />\n </div>\n )}\n {focusField}\n {loadingElement}\n {filterBar}\n {columnTooltip}\n {advancedFilterMenus}\n {overflowButtonTooltipProps &&\n this.getOverflowButtonTooltip(overflowButtonTooltipProps)}\n </div>\n <GotoRow\n model={model}\n isShown={isGotoRowShown}\n gotoRow={gotoRow}\n gotoRowError={gotoRowError}\n onSubmit={this.handleGotoRowSelectedRowNumberSubmit}\n onGotoRowNumberChanged={this.handleGotoRowSelectedRowNumberChanged}\n onClose={this.handleGotoRowClosed}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={() => {\n this.handleAnimationStart();\n this.focus();\n }}\n onExited={this.handleAnimationEnd}\n />\n\n <PendingDataBottomBar\n error={pendingSaveError}\n isSaving={pendingSavePromise != null}\n saveTooltip={`Commit (${this.commitAction.shortcut.getDisplayText()})`}\n discardTooltip={`Discard (${this.discardAction.shortcut.getDisplayText()})`}\n pendingDataErrors={pendingDataErrors}\n pendingDataMap={pendingDataMap}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n onSave={this.handlePendingCommitClicked}\n onDiscard={this.handlePendingDiscardClicked}\n />\n <ToastBottomBar>{toastMessage}</ToastBottomBar>\n <IrisGridCopyHandler\n model={model}\n copyOperation={copyOperation ?? undefined}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n />\n <TableSaver\n ref={tableSaver => {\n this.tableSaver = tableSaver;\n }}\n getDownloadWorker={getDownloadWorker}\n onDownloadCompleted={this.handleDownloadCompleted}\n onDownloadCanceled={this.handleDownloadCanceled}\n onDownloadProgressUpdate={this.handleDownloadProgressUpdate}\n isDownloading={\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING\n }\n formatter={formatter}\n />\n </div>\n <CSSTransition\n in={isMenuShown}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-left\"\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"table-sidebar\">\n <Stack>\n <Page title=\"Table Options\" onClose={this.handleMenuClose}>\n <Menu\n onSelect={i => this.handleMenuSelect(optionItems[i])}\n items={optionItems}\n />\n </Page>\n {openOptionsStack.map((option, i) => (\n <Page\n title={openOptions[i].title}\n onBack={this.handleMenuBack}\n onClose={this.handleMenuClose}\n key={openOptions[i].type}\n >\n {option}\n </Page>\n ))}\n </Stack>\n </div>\n </CSSTransition>\n <ContextActions actions={this.contextActions} />\n </div>\n );\n }\n}\n\nexport default IrisGrid;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IrisGrid.js","names":["React","Component","memoize","classNames","CSSTransition","PropTypes","deepEqual","Log","FontAwesomeIcon","ContextActions","Stack","Menu","Page","Popper","ThemeExport","Tooltip","Button","Grid","GridRange","GridUtils","isEditableGridModel","isExpandableGridModel","dhEye","dhFilterFilled","dhGraphLineUp","dhTriangleDownSquare","vsClose","vsCloudDownload","vsEdit","vsFilter","vsMenu","vsReply","vsRuby","vsSearch","vsSplitHorizontal","vsSymbolOperator","vsTools","dh","DateUtils","Formatter","FormatterUtils","TableUtils","assertNotNull","copyToClipboard","Pending","PromiseUtils","ValidationError","throttle","debounce","clamp","getFormatColumns","PendingDataBottomBar","IrisGridCopyHandler","FilterInputField","ClearFilterKeyHandler","CopyKeyHandler","ReverseKeyHandler","IrisGridCellOverflowMouseHandler","IrisGridColumnSelectMouseHandler","IrisGridColumnTooltipMouseHandler","IrisGridContextMenuHandler","IrisGridDataSelectMouseHandler","IrisGridFilterMouseHandler","IrisGridSortMouseHandler","PendingMouseHandler","ToastBottomBar","IrisGridMetricCalculator","IrisGridModelUpdater","IrisGridRenderer","IrisGridTheme","ColumnStatistics","AdvancedFilterCreator","Aggregations","AggregationEdit","AggregationUtils","ChartBuilder","CustomColumnBuilder","OptionType","RollupRows","TableCsvExporter","TableSaver","VisibilityOrderingBuilder","IrisGridUtils","CrossColumnSearch","IrisGridModel","IrisGridPartitionSelector","SelectDistinctBuilder","AdvancedSettingsType","AdvancedSettingsMenu","SHORTCUTS","ConditionalFormattingMenu","ConditionalFormatEditor","IrisGridCellOverflowModal","GotoRow","log","module","UPDATE_DOWNLOAD_THROTTLE","SET_FILTER_DEBOUNCE","SET_CONDITIONAL_FORMAT_DEBOUNCE","DEFAULT_AGGREGATION_SETTINGS","Object","freeze","aggregations","showOnTop","UNFORMATTED_DATE_PATTERN","isEmptyConfig","advancedFilters","aggregationSettings","customColumns","quickFilters","reverseType","rollupConfig","searchFilter","selectDistinctColumns","sorts","size","length","REVERSE_TYPE","NONE","IrisGrid","makeQuickFilter","column","text","timeZone","err","error","constructor","props","handleAdvancedMenuOpened","bind","max","model","advancedFilterOptions","sortDirection","formatter","handleAdvancedFilterChange","handleAdvancedFilterSortChange","handleAdvancedFilterDone","isChartBuilderAvailable","isCustomColumnsAvailable","isFormatColumnsAvailable","isRollupAvailable","isTotalsAvailable","isSelectDistinctAvailable","isExportAvailable","toggleFilterBarAction","toggleSearchBarAction","toggleGotoRowAction","isFilterBarShown","showSearchBar","canDownloadCsv","canToggleSearch","showGotoRow","hasAdvancedSettings","optionItems","push","type","CHART_BUILDER","title","icon","VISIBILITY_ORDERING_BUILDER","CONDITIONAL_FORMATTING","CUSTOM_COLUMN_BUILDER","ROLLUP_ROWS","AGGREGATIONS","SELECT_DISTINCT","TABLE_EXPORTER","ADVANCED_SETTINGS","QUICK_FILTERS","subtitle","shortcut","getDisplayText","isOn","onChange","action","SEARCH_BAR","GOTO","hiddenColumns","normalizer","join","columns","aggregationMap","forEach","operation","selected","invert","getOperationColumnNames","operationMap","filter","a","isRollupOperation","name","newOperations","map","o","rules","rulesParam","preview","editIndex","debug","undefined","getCachedFormatColumns","originalColumns","config","getModelRollupConfig","getOperationMap","operationOrder","getOperationOrder","hoverSelectColumn","isSelectingColumn","loadingScrimProgress","isMenuShown","customFilters","partitionFilters","getFiltersFromFilterMap","theme","isEditable","floatingRowCount","autoSelectRow","rowFooterWidth","alwaysFetchColumns","movedColumns","floatingLeftColumnCount","floatingRightColumnCount","draggingRange","floatingColumns","i","getModelIndex","columnSet","Set","searchValue","selectedSearchColumns","invertSearchColumns","createSearchFilter","setState","conditionalFormatPreview","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","state","DOWNLOAD_STATUS","DOWNLOADING","overflowButtonTooltipProps","wrapperStyle","position","pointerEvents","popperOptions","placement","modifiers","flip","behavior","Date","now","handleTooltipRef","handleGotoRowOpened","handleGotoRowClosed","handleAdvancedMenuClosed","handleAggregationChange","handleAggregationsChange","handleAggregationEdit","handleAnimationLoop","handleAnimationStart","handleAnimationEnd","handleChartChange","handleChartCreate","handleGridError","handleFilterBarChange","handleFilterBarDone","handleFilterBarTab","handleCancel","handleMenu","handleMenuClose","handleMenuSelect","handleMenuBack","handleRequestFailed","handleSelectionChanged","handleMovedColumnsChanged","handleUpdate","handleViewChanged","handleFormatSelection","handleConditionalFormatCreate","handleConditionalFormatEdit","handleConditionalFormatsChange","handleConditionalFormatEditorSave","handleConditionalFormatEditorCancel","handleUpdateCustomColumns","handleCustomColumnsChanged","handleSelectDistinctChanged","handlePendingDataUpdated","handlePendingCommitClicked","handlePendingDiscardClicked","handleGotoRowSelectedRowNumberSubmit","focusRowInGrid","handleDownloadTable","handleDownloadTableStart","handleCancelDownloadTable","handleDownloadCanceled","handleDownloadCompleted","handlePartitionAppend","handlePartitionChange","handlePartitionFetchAll","handlePartitionDone","handleColumnVisibilityChanged","handleCrossColumnSearch","handleRollupChange","handleOverflowClose","getColumnBoundingRect","handleGotoRowSelectedRowNumberChanged","grid","gridWrapper","lastLoadedConfig","pending","globalColumnFormats","decimalFormatOptions","integerFormatOptions","truncateNumbersWithPound","renderer","tableSaver","crossColumnRef","createRef","isAnimating","filterInputRef","toggleFilterBar","TABLE","TOGGLE_QUICK_FILTER","toggleSearchBar","TOGGLE_SEARCH","toggleGotoRow","GOTO_ROW","discardAction","pendingDataMap","discardPending","catch","INPUT_TABLE","DISCARD","commitAction","pendingDataErrors","commitPending","COMMIT","contextActions","conditionalFormats","customColumnFormatMap","isSelectingPartition","movedColumnsProp","movedRows","movedRowsProp","partition","partitionColumn","userColumnWidths","userRowHeights","canCopy","frozenColumns","keyHandlers","mouseHandlers","metricCalculator","Map","searchColumns","focusedFilterBarColumn","metrics","partitionTable","shownAdvancedFilter","hoverAdvancedFilter","selectedRanges","copyOperation","loadingText","loadingSpinnerShown","shownColumnTooltip","conditionalFormatEditIndex","isTableDownloading","isReady","rollupSelectedColumns","selectedAggregation","openOptions","pendingRowCount","pendingSavePromise","pendingSaveError","toastMessage","showOverflowModal","overflowText","isGotoRowShown","gotoRow","gotoRowError","componentDidMount","find","c","isPartitionColumn","isFilterRequired","isValuesTableAvailable","loadPartitionsTable","initState","startListening","componentDidUpdate","prevProps","inputFilters","settings","stopListening","changedInputFilters","inputFilter","includes","advancedSettings","replaceExistingFilters","get","FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS","clearGridInputField","clearCrossColumSearch","startLoading","applyInputFilters","resetColumnSelection","updateFormatterSettings","updateSorts","loadingScrimStartTime","loadingScrimFinishTime","window","requestAnimationFrame","currentTime","totalTime","Math","min","debug2","sendStateChange","componentWillUnmount","cancel","updateSearchFilter","loadingTimer","clearTimeout","handleDownloadProgressUpdate","animationFrame","cancelAnimationFrame","getValueForCell","columnIndex","rowIndex","rawValue","modelColumn","getModelColumn","modelRow","getModelRow","value","valueForCell","isDateType","i18n","DateTimeFormat","format","TimeZone","getTimeZone","textForCell","modelColumns","modelRows","getTheme","getCachedTheme","floatingTopRowCount","floatingBottomRowCount","getVisibleColumn","modelIndex","getVisibleIndex","replaceExisting","newAdvancedFilters","newQuickFilters","isChanged","findIndex","columnName","columnType","delete","applyQuickFilter","trim","quickFilter","set","setAdvancedFilterMap","setAdvancedFilter","options","setQuickFilter","setFilterMap","filterMap","clearFiltersOnLinkerFilterUpdate","LINK_CHANGE_CLEARS_ALL_FILTERS","clearAllFilters","filterList","getColumnIndexByName","combinedText","combineFiltersFromList","removeQuickFilter","removeColumnFilter","current","setValue","rebuildFilters","key","makeAdvancedFilter","setFilters","forceUpdate","getColumnFormats","dateTimeFormatterOptions","getDateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","isColumnFormatChanged","isDateFormattingChanged","isDecimalFormattingChanged","isIntegerFormattingChanged","isTruncateNumbersChanged","updateFormatter","updatedFormats","update","mergedColumnFormats","values","initFormatter","applyInputFiltersOnInit","inputFiltersWithValues","add","valuesTable","resolved","close","sort","desc","applySort","setViewport","data","getViewportData","rows","row","updatePartition","info","handleTableLoadError","partitionFilter","eq","FilterValue","ofString","copyCell","String","e","copyRanges","ranges","includeHeaders","formatValues","getUserColumnWidths","boundedRanges","columnCount","rowCount","resetRanges","clearSelectedRanges","setViewState","top","minScrimTransitionTime","maxScrimTransitionTime","height","getBoundingClientRect","scrimTransitionTime","setTimeout","loadingSpinnerDelay","stopLoading","rollback","canRollback","addEventListener","EVENT","UPDATED","REQUEST_FAILED","COLUMNS_CHANGED","PENDING_DATA_UPDATED","removeEventListener","focus","focusFilterBar","isFilterable","left","rightVisible","lastLeft","metricState","getMetricState","newLeft","getLastLeft","getVisibleWidth","leftOffset","lastFocusedFilterBarColumn","hideColumnByVisibleIndex","columnVisibleIndex","setColumnWidth","freezeColumnByColumnName","allFrozenColumns","visibleIndex","newMovedColumns","moveItem","unFreezeColumnByColumnName","frontColumns","modelIndexes","visibilityOption","VISIBILITY_OPTIONS","SHOW","resetColumnWidth","updateCanvasScale","updateCanvas","onPartitionAppend","isCanceled","onError","showAllColumns","entries","columnWidth","toggleSort","addToExisting","currentSorts","toggleSortForColumn","sortColumn","direction","none","isAbs","reverse","isReversible","focusIndex","isTextType","isTableSearchAvailable","searchDisplayMode","layoutHints","SearchDisplayMode","SEARCH_DISPLAY_HIDE","SEARCH_DISPLAY_SHOW","Error","containsGridCellInputField","document","activeElement","classList","contains","newPendingSavePromise","then","selectColumn","onColumnSelected","selectData","groupedColumns","dataMap","isExpandable","isRowExpandable","isGrouped","onDataSelected","index","oldSort","getSortForColumn","newSort","descending","asc","setSortForColumn","onCreateChart","warn","setGridFocus","defocusInput","backward","selectedFormat","prevCustomColumnFormatMap","normalizedType","getNormalizedType","columnFormattingRule","makeColumnFormattingRule","stopPropagation","newOptions","pop","option","event","customEvent","detail","selectionEndRow","bottomViewport","bottomNonFloating","onSelectionChanged","onChangeApplied","tooltip","startTimer","CONDITIONAL_FORMATTING_EDIT","oldCustomColumns","customColumn","removedColumnNames","getRemovedCustomColumnNames","newSorts","removeSortsInColumns","removeFiltersInColumns","removeColumnFromMovedColumns","newSelectDistinctColumns","removeColumnsFromSelectDistinctColumns","aggregation","AGGREGATION_EDIT","resetGridViewState","columnNames","INITIATING","fileName","frozenTable","tableSubscription","snapshotRanges","modelRanges","includeColumnHeaders","useUnformattedValues","startDownload","cancelDownload","FINISHED","CANCELED","deleteRanges","columnAllowedCursor","cursor","topOffset","irisGridState","gridState","onStateChange","gridRect","popperMargin","columnHeaderHeight","visibleColumnXs","visibleColumnWidths","width","columnHeaderMaxDepth","columnX","bottom","right","x","y","toJSON","rowNumber","rowInt","parseInt","setFocusRow","target","getColumnTooltip","boundedLeft","boundedWidth","abs","virtualReference","clientWidth","clientHeight","render","children","getDownloadWorker","isStuckToBottom","isStuckToRight","onlyFetchVisibleColumns","onAdvancedSettingsChange","getCachedFilter","stateOverride","getCachedStateOverride","isVisible","isRollup","focusField","debounceMs","minDebounce","round","maxDebounce","gridX","gridY","filterBarHeight","fieldWidth","fieldHeight","style","minWidth","isValid","advancedFilter","isBarFiltered","active","handleContextMenu","loadingElement","loadingStatus","show","columnTooltip","filterBar","visibleColumns","isFilterSet","isFilterVisible","element","hidden","advancedFilterMenus","xColumnHeader","xFilterBar","getAdvancedMenuOpenedHandler","positionFixed","getCachedAdvancedFilterMenuActions","getCachedOptionItems","openOptionsStack","handleConditionalFormatEditorUpdate","getCachedHiddenColumns","getHiddenColumns","transitionSlowMs","stringName","displayString","getAlwaysFetchColumns","draggingColumn","range","getCachedPreviewFormatColumns","getCachedModelColumns","getModelTotalsConfig","getOverflowButtonTooltip","transitionMidMs","columnSelectionValidator","columnNotAllowedCursor","onContextMenu","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator","shape","defaultFormatString","string"],"sources":["../src/IrisGrid.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n Component,\n CSSProperties,\n ReactElement,\n ReactNode,\n} from 'react';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport deepEqual from 'deep-equal';\nimport Log from '@deephaven/log';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n ContextActions,\n Stack,\n Menu,\n Page,\n Popper,\n ThemeExport,\n Tooltip,\n ContextAction,\n PopperOptions,\n ReferenceObject,\n Button,\n} from '@deephaven/components';\nimport {\n Grid,\n GridMetrics,\n GridMouseHandler,\n GridRange,\n GridRangeIndex,\n GridThemeType,\n GridUtils,\n KeyHandler,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n VisibleIndex,\n GridState,\n isEditableGridModel,\n BoundedAxisRange,\n isExpandableGridModel,\n} from '@deephaven/grid';\nimport {\n dhEye,\n dhFilterFilled,\n dhGraphLineUp,\n dhTriangleDownSquare,\n vsClose,\n vsCloudDownload,\n vsEdit,\n vsFilter,\n vsMenu,\n vsReply,\n vsRuby,\n vsSearch,\n vsSplitHorizontal,\n vsSymbolOperator,\n vsTools,\n} from '@deephaven/icons';\nimport dh, {\n Column,\n CustomColumn,\n DateWrapper,\n FilterCondition,\n Sort,\n Table,\n TableViewportSubscription,\n} from '@deephaven/jsapi-shim';\nimport {\n DateUtils,\n Formatter,\n FormatterUtils,\n TableUtils,\n FormattingRule,\n ReverseType,\n RowDataMap,\n SortDirection,\n DateTimeColumnFormatterOptions,\n TableColumnFormat,\n Settings,\n} from '@deephaven/jsapi-utils';\nimport {\n assertNotNull,\n copyToClipboard,\n Pending,\n PromiseUtils,\n ValidationError,\n} from '@deephaven/utils';\nimport { TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport throttle from 'lodash.throttle';\nimport debounce from 'lodash.debounce';\nimport clamp from 'lodash.clamp';\nimport {\n FormattingRule as SidebarFormattingRule,\n getFormatColumns,\n} from './sidebar/conditional-formatting/ConditionalFormattingUtils';\nimport PendingDataBottomBar from './PendingDataBottomBar';\nimport IrisGridCopyHandler, { CopyOperation } from './IrisGridCopyHandler';\nimport FilterInputField from './FilterInputField';\nimport {\n ClearFilterKeyHandler,\n CopyKeyHandler,\n ReverseKeyHandler,\n} from './key-handlers';\nimport {\n IrisGridCellOverflowMouseHandler,\n IrisGridColumnSelectMouseHandler,\n IrisGridColumnTooltipMouseHandler,\n IrisGridContextMenuHandler,\n IrisGridDataSelectMouseHandler,\n IrisGridFilterMouseHandler,\n IrisGridSortMouseHandler,\n PendingMouseHandler,\n} from './mousehandlers';\nimport ToastBottomBar from './ToastBottomBar';\nimport IrisGridMetricCalculator from './IrisGridMetricCalculator';\nimport IrisGridModelUpdater from './IrisGridModelUpdater';\nimport IrisGridRenderer from './IrisGridRenderer';\nimport IrisGridTheme, { IrisGridThemeType } from './IrisGridTheme';\nimport ColumnStatistics from './ColumnStatistics';\nimport './IrisGrid.scss';\nimport AdvancedFilterCreator from './AdvancedFilterCreator';\nimport {\n Aggregations,\n AggregationEdit,\n AggregationUtils,\n ChartBuilder,\n CustomColumnBuilder,\n OptionType,\n RollupRows,\n TableCsvExporter,\n TableSaver,\n VisibilityOrderingBuilder,\n} from './sidebar';\nimport IrisGridUtils from './IrisGridUtils';\nimport CrossColumnSearch from './CrossColumnSearch';\nimport IrisGridModel from './IrisGridModel';\nimport IrisGridPartitionSelector from './IrisGridPartitionSelector';\nimport SelectDistinctBuilder from './sidebar/SelectDistinctBuilder';\nimport AdvancedSettingsType from './sidebar/AdvancedSettingsType';\nimport AdvancedSettingsMenu, {\n AdvancedSettingsMenuCallback,\n} from './sidebar/AdvancedSettingsMenu';\nimport SHORTCUTS from './IrisGridShortcuts';\nimport ConditionalFormattingMenu from './sidebar/conditional-formatting/ConditionalFormattingMenu';\n\nimport ConditionalFormatEditor from './sidebar/conditional-formatting/ConditionalFormatEditor';\nimport IrisGridCellOverflowModal from './IrisGridCellOverflowModal';\nimport GotoRow from './GotoRow';\nimport {\n Aggregation,\n AggregationSettings,\n} from './sidebar/aggregations/Aggregations';\nimport { ChartBuilderSettings } from './sidebar/ChartBuilder';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport { UIRollupConfig } from './sidebar/RollupRows';\nimport { VisibilityOptionType } from './sidebar/VisibilityOrderingBuilder';\nimport {\n AdvancedFilterMap,\n ColumnName,\n QuickFilterMap,\n AggregationMap,\n OperationMap,\n Action,\n OptionItem,\n UITotalsTableConfig,\n InputFilter,\n PendingDataMap,\n AdvancedFilterOptions,\n} from './CommonTypes';\n\nconst log = Log.module('IrisGrid');\n\nconst UPDATE_DOWNLOAD_THROTTLE = 500;\n\nconst SET_FILTER_DEBOUNCE = 250;\n\nconst SET_CONDITIONAL_FORMAT_DEBOUNCE = 250;\n\nconst DEFAULT_AGGREGATION_SETTINGS = Object.freeze({\n aggregations: [],\n showOnTop: false,\n});\n\nconst UNFORMATTED_DATE_PATTERN = `yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z`;\n\nfunction isEmptyConfig({\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n}: {\n advancedFilters: AdvancedFilterMap;\n aggregationSettings: AggregationSettings;\n customColumns: ColumnName[];\n quickFilters: QuickFilterMap;\n reverseType: ReverseType;\n rollupConfig?: UIRollupConfig;\n searchFilter?: FilterCondition;\n selectDistinctColumns: ColumnName[];\n sorts: Sort[];\n}) {\n return (\n advancedFilters.size === 0 &&\n aggregationSettings.aggregations.length === 0 &&\n customColumns.length === 0 &&\n quickFilters.size === 0 &&\n reverseType === TableUtils.REVERSE_TYPE.NONE &&\n rollupConfig == null &&\n searchFilter == null &&\n selectDistinctColumns.length === 0 &&\n sorts.length === 0\n );\n}\nexport type FilterData = {\n operator: FilterTypeValue;\n text: string;\n value: unknown;\n startColumnIndex: number;\n};\n\nexport type FilterMap = Map<\n ColumnName,\n {\n columnType: string;\n filterList: FilterData[];\n }\n>;\nexport interface IrisGridProps {\n children: React.ReactNode;\n advancedFilters: AdvancedFilterMap;\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n alwaysFetchColumns: ColumnName[];\n isFilterBarShown: boolean;\n applyInputFiltersOnInit: boolean;\n conditionalFormats: SidebarFormattingRule[];\n customColumnFormatMap: Map<ColumnName, FormattingRule>;\n movedColumns: MoveOperation[];\n movedRows: MoveOperation[];\n inputFilters: InputFilter[];\n customFilters: FilterCondition[];\n model: IrisGridModel;\n onCreateChart: (settings: ChartBuilderSettings, model: IrisGridModel) => void;\n onColumnSelected: (column: Column) => void;\n onError: (error: unknown) => void;\n onDataSelected: (index: ModelIndex, map: Record<ColumnName, unknown>) => void;\n onStateChange: (irisGridState: IrisGridState, gridState: GridState) => void;\n onPartitionAppend: (partitionColumn: Column, value: string) => void;\n onAdvancedSettingsChange: AdvancedSettingsMenuCallback;\n partition: string;\n partitionColumn: Column;\n sorts: Sort[];\n reverseType: ReverseType;\n quickFilters: QuickFilterMap | null;\n customColumns: ColumnName[];\n selectDistinctColumns: ColumnName[];\n settings?: Settings;\n userColumnWidths: ModelSizeMap;\n userRowHeights: ModelSizeMap;\n onSelectionChanged: (gridRanges: GridRange[]) => void;\n rollupConfig?: UIRollupConfig;\n aggregationSettings: AggregationSettings;\n\n isSelectingColumn: boolean;\n isSelectingPartition: boolean;\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n\n // eslint-disable-next-line react/no-unused-prop-types\n columnSelectionValidator: (value: Column | null) => boolean;\n columnAllowedCursor: string;\n\n // eslint-disable-next-line react/no-unused-prop-types\n columnNotAllowedCursor: string;\n name: string;\n onlyFetchVisibleColumns: boolean;\n\n showSearchBar: boolean;\n searchValue: string;\n selectedSearchColumns: ColumnName[];\n invertSearchColumns: boolean;\n\n // eslint-disable-next-line react/no-unused-prop-types\n onContextMenu: (obj: {\n model: IrisGridModel;\n value: unknown;\n valueText: string | null;\n column: Column;\n rowIndex: GridRangeIndex;\n columnIndex: GridRangeIndex;\n modelRow: GridRangeIndex;\n modelColumn: GridRangeIndex;\n }) => ContextAction;\n\n pendingDataMap?: PendingDataMap;\n getDownloadWorker: () => Promise<ServiceWorker>;\n\n canCopy: boolean;\n canDownloadCsv: boolean;\n frozenColumns: ColumnName[];\n\n // Theme override for IrisGridTheme\n theme: GridThemeType;\n\n canToggleSearch: boolean;\n}\n\nexport interface IrisGridState {\n isFilterBarShown: boolean;\n isSelectingPartition: boolean;\n focusedFilterBarColumn: number | null;\n metricCalculator: IrisGridMetricCalculator;\n metrics?: GridMetrics;\n keyHandlers: KeyHandler[];\n mouseHandlers: GridMouseHandler[];\n\n partition: string | null;\n partitionColumn: Column | null;\n partitionTable: Table | null;\n partitionFilters: FilterCondition[];\n // setAdvancedFilter and setQuickFilter mutate the arguments\n // so we want to always use map copies from the state instead of props\n quickFilters: QuickFilterMap;\n advancedFilters: AdvancedFilterMap;\n shownAdvancedFilter: number | null;\n hoverAdvancedFilter: number | null;\n\n sorts: Sort[];\n reverseType: ReverseType;\n customColumns: ColumnName[];\n selectDistinctColumns: ColumnName[];\n\n // selected range in table\n selectedRanges: GridRange[];\n\n // Current ongoing copy operation\n copyOperation: CopyOperation | null;\n\n // The filter that is currently being applied. Reset after update is received\n loadingText: string | null;\n loadingScrimProgress: number | null;\n loadingSpinnerShown: boolean;\n\n movedColumns: MoveOperation[];\n movedRows: MoveOperation[];\n\n shownColumnTooltip: number | null;\n\n formatter: Formatter;\n isMenuShown: boolean;\n customColumnFormatMap: Map<ColumnName, FormattingRule>;\n\n conditionalFormats: SidebarFormattingRule[];\n conditionalFormatEditIndex: number | null;\n conditionalFormatPreview?: SidebarFormattingRule;\n\n // Column user is hovering over for selection\n hoverSelectColumn: GridRangeIndex;\n\n isTableDownloading: boolean;\n isReady: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number | null;\n\n showSearchBar: boolean;\n searchFilter?: FilterCondition;\n searchValue: string;\n selectedSearchColumns: ColumnName[];\n invertSearchColumns: boolean;\n\n rollupConfig?: UIRollupConfig;\n rollupSelectedColumns: [];\n aggregationSettings: AggregationSettings;\n selectedAggregation: Aggregation | null;\n\n openOptions: OptionItem[];\n\n pendingRowCount: number;\n pendingDataMap: PendingDataMap;\n pendingDataErrors: Map<number, Error[]>;\n pendingSavePromise: Promise<void> | null;\n pendingSaveError: string | null;\n\n toastMessage: JSX.Element | null;\n frozenColumns: ColumnName[];\n showOverflowModal: boolean;\n overflowText: string;\n overflowButtonTooltipProps: CSSProperties | null;\n\n gotoRow: string;\n gotoRowError: string;\n isGotoRowShown: boolean;\n}\n\nexport class IrisGrid extends Component<IrisGridProps, IrisGridState> {\n static minDebounce = 150;\n\n static maxDebounce = 500;\n\n static loadingSpinnerDelay = 800;\n\n static defaultProps = {\n children: null,\n advancedFilters: new Map(),\n advancedSettings: new Map(),\n alwaysFetchColumns: [],\n conditionalFormats: [],\n customColumnFormatMap: new Map(),\n isFilterBarShown: false,\n applyInputFiltersOnInit: false,\n movedColumns: [],\n movedRows: [],\n inputFilters: [],\n customFilters: [],\n onCreateChart: undefined,\n onColumnSelected: (): void => undefined,\n onDataSelected: (): void => undefined,\n onError: (): void => undefined,\n onStateChange: (): void => undefined,\n onPartitionAppend: (): void => undefined,\n onAdvancedSettingsChange: (): void => undefined,\n partition: null,\n partitionColumn: null,\n quickFilters: new Map(),\n selectDistinctColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n customColumns: [],\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n rollupConfig: undefined,\n userColumnWidths: new Map(),\n userRowHeights: new Map(),\n onSelectionChanged: (): void => undefined,\n isSelectingColumn: false,\n isSelectingPartition: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n columnSelectionValidator: null,\n columnAllowedCursor: null,\n columnNotAllowedCursor: null,\n name: 'table',\n onlyFetchVisibleColumns: true,\n showSearchBar: false,\n searchValue: '',\n selectedSearchColumns: null,\n invertSearchColumns: true,\n onContextMenu: (): void => undefined,\n pendingDataMap: new Map(),\n getDownloadWorker: undefined,\n settings: {\n timeZone: 'America/New_York',\n defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,\n showTimeZone: false,\n showTSeparator: true,\n truncateNumbersWithPound: false,\n formatter: [],\n decimalFormatOptions: PropTypes.shape({\n defaultFormatString: PropTypes.string,\n }),\n integerFormatOptions: PropTypes.shape({\n defaultFormatString: PropTypes.string,\n }),\n },\n canCopy: true,\n canDownloadCsv: true,\n frozenColumns: null,\n theme: IrisGridTheme,\n canToggleSearch: true,\n };\n\n static makeQuickFilter(\n column: Column,\n text: string,\n timeZone: string\n ): FilterCondition | null {\n try {\n return TableUtils.makeQuickFilter(column, text, timeZone);\n } catch (err) {\n log.error('Error creating quick filter', err);\n }\n return null;\n }\n\n constructor(props: IrisGridProps) {\n super(props);\n\n this.handleAdvancedFilterChange = this.handleAdvancedFilterChange.bind(\n this\n );\n this.handleAdvancedFilterSortChange = this.handleAdvancedFilterSortChange.bind(\n this\n );\n this.handleAdvancedFilterDone = this.handleAdvancedFilterDone.bind(this);\n this.handleAdvancedMenuOpened = this.handleAdvancedMenuOpened.bind(this);\n this.handleGotoRowOpened = this.handleGotoRowOpened.bind(this);\n this.handleGotoRowClosed = this.handleGotoRowClosed.bind(this);\n this.handleAdvancedMenuClosed = this.handleAdvancedMenuClosed.bind(this);\n this.handleAggregationChange = this.handleAggregationChange.bind(this);\n this.handleAggregationsChange = this.handleAggregationsChange.bind(this);\n this.handleAggregationEdit = this.handleAggregationEdit.bind(this);\n this.handleAnimationLoop = this.handleAnimationLoop.bind(this);\n this.handleAnimationStart = this.handleAnimationStart.bind(this);\n this.handleAnimationEnd = this.handleAnimationEnd.bind(this);\n this.handleChartChange = this.handleChartChange.bind(this);\n this.handleChartCreate = this.handleChartCreate.bind(this);\n this.handleGridError = this.handleGridError.bind(this);\n this.handleFilterBarChange = this.handleFilterBarChange.bind(this);\n this.handleFilterBarDone = this.handleFilterBarDone.bind(this);\n this.handleFilterBarTab = this.handleFilterBarTab.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleMenu = this.handleMenu.bind(this);\n this.handleMenuClose = this.handleMenuClose.bind(this);\n this.handleMenuSelect = this.handleMenuSelect.bind(this);\n this.handleMenuBack = this.handleMenuBack.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleSelectionChanged = this.handleSelectionChanged.bind(this);\n this.handleMovedColumnsChanged = this.handleMovedColumnsChanged.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.handleTooltipRef = this.handleTooltipRef.bind(this);\n this.handleViewChanged = this.handleViewChanged.bind(this);\n this.handleFormatSelection = this.handleFormatSelection.bind(this);\n this.handleConditionalFormatCreate = this.handleConditionalFormatCreate.bind(\n this\n );\n this.handleConditionalFormatEdit = this.handleConditionalFormatEdit.bind(\n this\n );\n this.handleConditionalFormatsChange = this.handleConditionalFormatsChange.bind(\n this\n );\n this.handleConditionalFormatEditorSave = this.handleConditionalFormatEditorSave.bind(\n this\n );\n this.handleConditionalFormatEditorCancel = this.handleConditionalFormatEditorCancel.bind(\n this\n );\n this.handleUpdateCustomColumns = this.handleUpdateCustomColumns.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(\n this\n );\n this.handleSelectDistinctChanged = this.handleSelectDistinctChanged.bind(\n this\n );\n this.handlePendingDataUpdated = this.handlePendingDataUpdated.bind(this);\n this.handlePendingCommitClicked = this.handlePendingCommitClicked.bind(\n this\n );\n this.handlePendingDiscardClicked = this.handlePendingDiscardClicked.bind(\n this\n );\n this.handleGotoRowSelectedRowNumberSubmit = this.handleGotoRowSelectedRowNumberSubmit.bind(\n this\n );\n this.focusRowInGrid = this.focusRowInGrid.bind(this);\n this.handleDownloadTable = this.handleDownloadTable.bind(this);\n this.handleDownloadTableStart = this.handleDownloadTableStart.bind(this);\n this.handleCancelDownloadTable = this.handleCancelDownloadTable.bind(this);\n this.handleDownloadCanceled = this.handleDownloadCanceled.bind(this);\n this.handleDownloadCompleted = this.handleDownloadCompleted.bind(this);\n this.handlePartitionAppend = this.handlePartitionAppend.bind(this);\n this.handlePartitionChange = this.handlePartitionChange.bind(this);\n this.handlePartitionFetchAll = this.handlePartitionFetchAll.bind(this);\n this.handlePartitionDone = this.handlePartitionDone.bind(this);\n this.handleColumnVisibilityChanged = this.handleColumnVisibilityChanged.bind(\n this\n );\n this.handleCrossColumnSearch = this.handleCrossColumnSearch.bind(this);\n this.handleRollupChange = this.handleRollupChange.bind(this);\n this.handleOverflowClose = this.handleOverflowClose.bind(this);\n this.getColumnBoundingRect = this.getColumnBoundingRect.bind(this);\n this.handleGotoRowSelectedRowNumberChanged = this.handleGotoRowSelectedRowNumberChanged.bind(\n this\n );\n\n this.grid = null;\n this.gridWrapper = null;\n this.lastLoadedConfig = null;\n this.pending = new Pending();\n this.globalColumnFormats = [];\n this.decimalFormatOptions = {};\n this.integerFormatOptions = {};\n this.truncateNumbersWithPound = false;\n\n // When the loading scrim started/when it should extend to the end of the screen.\n this.renderer = new IrisGridRenderer();\n this.tableSaver = null;\n this.crossColumnRef = React.createRef();\n this.isAnimating = false;\n this.filterInputRef = React.createRef();\n\n this.toggleFilterBarAction = {\n action: () => this.toggleFilterBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_QUICK_FILTER,\n };\n\n this.toggleSearchBarAction = {\n action: () => this.toggleSearchBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_SEARCH,\n };\n\n this.toggleGotoRowAction = {\n action: () => this.toggleGotoRow(),\n shortcut: SHORTCUTS.TABLE.GOTO_ROW,\n };\n\n this.discardAction = {\n action: () => {\n const { model } = this.props;\n if (\n isEditableGridModel(model) &&\n model.isEditable &&\n model.pendingDataMap.size > 0\n ) {\n this.discardPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.DISCARD,\n };\n this.commitAction = {\n action: () => {\n const { model } = this.props;\n if (\n isEditableGridModel(model) &&\n model.isEditable &&\n model.pendingDataMap.size > 0 &&\n model.pendingDataErrors.size === 0\n ) {\n this.commitPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.COMMIT,\n };\n this.contextActions = [\n this.toggleFilterBarAction,\n this.toggleSearchBarAction,\n this.toggleGotoRowAction,\n this.discardAction,\n this.commitAction,\n ];\n\n const {\n aggregationSettings,\n conditionalFormats,\n customColumnFormatMap,\n isFilterBarShown,\n isSelectingPartition,\n model,\n movedColumns: movedColumnsProp,\n movedRows: movedRowsProp,\n partition,\n partitionColumn,\n rollupConfig,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n advancedFilters,\n quickFilters,\n selectDistinctColumns,\n pendingDataMap,\n canCopy,\n frozenColumns,\n } = props;\n\n const keyHandlers: KeyHandler[] = [\n new ReverseKeyHandler(this),\n new ClearFilterKeyHandler(this),\n ];\n if (canCopy) {\n keyHandlers.push(new CopyKeyHandler(this));\n }\n const mouseHandlers = [\n new IrisGridCellOverflowMouseHandler(this),\n new IrisGridColumnSelectMouseHandler(this),\n new IrisGridColumnTooltipMouseHandler(this),\n new IrisGridSortMouseHandler(this),\n new IrisGridFilterMouseHandler(this),\n new IrisGridContextMenuHandler(this),\n new IrisGridDataSelectMouseHandler(this),\n new PendingMouseHandler(this),\n ];\n\n const movedColumns =\n movedColumnsProp.length > 0 ? movedColumnsProp : model.movedColumns;\n const movedRows =\n movedRowsProp.length > 0 ? movedRowsProp : model.movedRows;\n\n const metricCalculator = new IrisGridMetricCalculator({\n userColumnWidths: new Map(userColumnWidths),\n userRowHeights: new Map(userRowHeights),\n movedColumns,\n });\n const searchColumns = selectedSearchColumns ?? [];\n const searchFilter = CrossColumnSearch.createSearchFilter(\n searchValue,\n searchColumns,\n model.columns,\n invertSearchColumns\n );\n\n this.state = {\n isFilterBarShown,\n isSelectingPartition,\n focusedFilterBarColumn: null,\n metricCalculator,\n metrics: undefined,\n keyHandlers,\n mouseHandlers,\n\n partition,\n partitionColumn,\n partitionTable: null,\n partitionFilters: [],\n // setAdvancedFilter and setQuickFilter mutate the arguments\n // so we want to always use map copies from the state instead of props\n quickFilters: quickFilters ? new Map(quickFilters) : new Map(),\n advancedFilters: new Map(advancedFilters),\n shownAdvancedFilter: null,\n hoverAdvancedFilter: null,\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n customColumns: [],\n selectDistinctColumns,\n\n // selected range in table\n selectedRanges: [],\n\n // Current ongoing copy operation\n copyOperation: null,\n\n // The filter that is currently being applied. Reset after update is received\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n\n movedColumns,\n movedRows,\n\n shownColumnTooltip: null,\n\n formatter: new Formatter(),\n isMenuShown: false,\n customColumnFormatMap: new Map(customColumnFormatMap),\n\n conditionalFormats,\n conditionalFormatEditIndex: null,\n conditionalFormatPreview: undefined,\n\n // Column user is hovering over for selection\n hoverSelectColumn: null,\n\n isTableDownloading: false,\n isReady: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: 0,\n\n showSearchBar,\n searchFilter,\n searchValue,\n selectedSearchColumns: searchColumns,\n invertSearchColumns,\n\n rollupConfig,\n rollupSelectedColumns: [],\n aggregationSettings,\n selectedAggregation: null,\n\n openOptions: [],\n\n pendingRowCount: 0,\n pendingDataMap: pendingDataMap ?? new Map(),\n pendingDataErrors: new Map(),\n pendingSavePromise: null,\n pendingSaveError: null,\n\n toastMessage: null,\n frozenColumns,\n showOverflowModal: false,\n overflowText: '',\n overflowButtonTooltipProps: null,\n isGotoRowShown: false,\n gotoRow: '',\n gotoRowError: '',\n };\n }\n\n componentDidMount(): void {\n const { partitionColumn, model } = this.props;\n const column =\n partitionColumn ?? model.columns.find(c => c.isPartitionColumn);\n if (\n model.isFilterRequired &&\n model.isValuesTableAvailable &&\n column != null\n ) {\n this.loadPartitionsTable(column);\n } else {\n this.initState();\n }\n this.startListening(model);\n }\n\n componentDidUpdate(prevProps: IrisGridProps): void {\n const {\n inputFilters,\n isSelectingColumn,\n settings,\n model,\n customFilters,\n sorts,\n } = this.props;\n\n if (model !== prevProps.model) {\n this.stopListening(prevProps.model);\n this.startListening(model);\n }\n\n const changedInputFilters =\n inputFilters !== prevProps.inputFilters\n ? inputFilters.filter(\n inputFilter => !prevProps.inputFilters.includes(inputFilter)\n )\n : [];\n if (changedInputFilters.length > 0) {\n const { advancedSettings } = this.props;\n const replaceExistingFilters =\n advancedSettings.get(\n AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS\n ) ?? false;\n if (replaceExistingFilters) {\n this.clearGridInputField();\n this.clearCrossColumSearch();\n }\n this.startLoading('Filtering...', true);\n this.applyInputFilters(changedInputFilters, replaceExistingFilters);\n }\n\n if (isSelectingColumn !== prevProps.isSelectingColumn) {\n this.resetColumnSelection();\n }\n if (settings !== prevProps.settings) {\n this.updateFormatterSettings(settings);\n }\n if (customFilters !== prevProps.customFilters) {\n this.startLoading('Filtering...', true);\n }\n if (sorts !== prevProps.sorts) {\n this.updateSorts(sorts);\n }\n const { loadingScrimStartTime, loadingScrimFinishTime } = this;\n if (loadingScrimStartTime != null && loadingScrimFinishTime != null) {\n window.requestAnimationFrame(() => {\n const now = Date.now();\n const currentTime = now - loadingScrimStartTime;\n const totalTime = loadingScrimFinishTime - loadingScrimStartTime;\n const loadingScrimProgress = Math.min(currentTime / totalTime, 1);\n if (loadingScrimFinishTime < now) {\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n }\n\n this.setState(state => {\n if (state.loadingScrimProgress == null) {\n log.debug2('Ignoring scrim update because loading cancelled.');\n return null;\n }\n\n return { loadingScrimProgress };\n });\n });\n }\n\n this.sendStateChange();\n }\n\n componentWillUnmount(): void {\n const { model } = this.props;\n this.stopListening(model);\n this.pending.cancel();\n this.updateSearchFilter.cancel();\n\n if (this.loadingTimer) {\n clearTimeout(this.loadingTimer);\n }\n this.handleDownloadProgressUpdate.cancel();\n if (this.animationFrame !== undefined) {\n cancelAnimationFrame(this.animationFrame);\n }\n }\n\n grid: Grid | null;\n\n gridWrapper: HTMLDivElement | null;\n\n lastFocusedFilterBarColumn?: number;\n\n lastLoadedConfig: Pick<\n IrisGridState,\n | 'advancedFilters'\n | 'aggregationSettings'\n | 'customColumns'\n | 'quickFilters'\n | 'reverseType'\n | 'rollupConfig'\n | 'searchFilter'\n | 'selectDistinctColumns'\n | 'sorts'\n > | null;\n\n tooltip?: Tooltip;\n\n pending: Pending;\n\n globalColumnFormats?: FormattingRule[];\n\n dateTimeFormatterOptions?: DateTimeColumnFormatterOptions;\n\n decimalFormatOptions: { defaultFormatString?: string };\n\n integerFormatOptions: { defaultFormatString?: string };\n\n truncateNumbersWithPound: boolean;\n\n // When the loading scrim started/when it should extend to the end of the screen.\n loadingScrimStartTime?: number;\n\n loadingScrimFinishTime?: number;\n\n animationFrame?: number;\n\n loadingTimer?: ReturnType<typeof setTimeout>;\n\n renderer: IrisGridRenderer;\n\n tableSaver: TableSaver | null;\n\n crossColumnRef: React.RefObject<CrossColumnSearch>;\n\n isAnimating: boolean;\n\n filterInputRef: React.RefObject<FilterInputField>;\n\n toggleFilterBarAction: Action;\n\n toggleSearchBarAction: Action;\n\n toggleGotoRowAction: Action;\n\n discardAction: Action;\n\n commitAction: Action;\n\n contextActions: ContextAction[];\n\n getAdvancedMenuOpenedHandler = memoize(\n (column: ModelIndex) => this.handleAdvancedMenuOpened.bind(this, column),\n { max: 100 }\n );\n\n getCachedAdvancedFilterMenuActions = memoize(\n (\n model: IrisGridModel,\n column: Column,\n advancedFilterOptions: AdvancedFilterOptions | undefined,\n sortDirection: SortDirection | undefined,\n formatter: Formatter\n ) => (\n <AdvancedFilterCreator\n model={model}\n column={column}\n onFilterChange={this.handleAdvancedFilterChange}\n onSortChange={this.handleAdvancedFilterSortChange}\n onDone={this.handleAdvancedFilterDone}\n options={advancedFilterOptions}\n sortDirection={sortDirection}\n formatter={formatter}\n />\n ),\n { max: 50 }\n );\n\n getCachedOptionItems = memoize(\n (\n isChartBuilderAvailable: boolean,\n isCustomColumnsAvailable: boolean,\n isFormatColumnsAvailable: boolean,\n isRollupAvailable: boolean,\n isTotalsAvailable: boolean,\n isSelectDistinctAvailable: boolean,\n isExportAvailable: boolean,\n toggleFilterBarAction: Action,\n toggleSearchBarAction: Action,\n toggleGotoRowAction: Action,\n isFilterBarShown: boolean,\n showSearchBar: boolean,\n canDownloadCsv: boolean,\n canToggleSearch: boolean,\n showGotoRow: boolean,\n hasAdvancedSettings: boolean\n ) => {\n const optionItems: OptionItem[] = [];\n if (isChartBuilderAvailable) {\n optionItems.push({\n type: OptionType.CHART_BUILDER,\n title: 'Chart Builder',\n icon: dhGraphLineUp,\n });\n }\n optionItems.push({\n type: OptionType.VISIBILITY_ORDERING_BUILDER,\n title: 'Column Visibility & Ordering',\n icon: dhEye,\n });\n if (isFormatColumnsAvailable) {\n optionItems.push({\n type: OptionType.CONDITIONAL_FORMATTING,\n title: 'Conditional Formatting',\n icon: vsEdit,\n });\n }\n if (isCustomColumnsAvailable) {\n optionItems.push({\n type: OptionType.CUSTOM_COLUMN_BUILDER,\n title: 'Manage Custom Columns',\n icon: vsSplitHorizontal,\n });\n }\n if (isRollupAvailable) {\n optionItems.push({\n type: OptionType.ROLLUP_ROWS,\n title: 'Rollup Rows',\n icon: dhTriangleDownSquare,\n });\n }\n if (isTotalsAvailable) {\n optionItems.push({\n type: OptionType.AGGREGATIONS,\n title: 'Aggregate Columns',\n icon: vsSymbolOperator,\n });\n }\n if (isSelectDistinctAvailable) {\n optionItems.push({\n type: OptionType.SELECT_DISTINCT,\n title: 'Select Distinct Values',\n icon: vsRuby,\n });\n }\n if (isExportAvailable && canDownloadCsv) {\n optionItems.push({\n type: OptionType.TABLE_EXPORTER,\n title: 'Download CSV',\n icon: vsCloudDownload,\n });\n }\n if (hasAdvancedSettings) {\n optionItems.push({\n type: OptionType.ADVANCED_SETTINGS,\n title: 'Advanced Settings',\n icon: vsTools,\n });\n }\n optionItems.push({\n type: OptionType.QUICK_FILTERS,\n title: 'Quick Filters',\n subtitle: toggleFilterBarAction.shortcut.getDisplayText(),\n icon: vsFilter,\n isOn: isFilterBarShown,\n onChange: toggleFilterBarAction.action,\n });\n if (canToggleSearch) {\n optionItems.push({\n type: OptionType.SEARCH_BAR,\n title: 'Search Bar',\n subtitle: toggleSearchBarAction.shortcut.getDisplayText(),\n icon: vsSearch,\n isOn: showSearchBar,\n onChange: toggleSearchBarAction.action,\n });\n }\n optionItems.push({\n type: OptionType.GOTO,\n title: 'Go to',\n subtitle: toggleGotoRowAction.shortcut.getDisplayText(),\n icon: vsReply,\n isOn: showGotoRow,\n onChange: toggleGotoRowAction.action,\n });\n\n return optionItems;\n },\n { max: 1 }\n );\n\n getCachedHiddenColumns = memoize(\n (hiddenColumns: ModelIndex[]) => hiddenColumns,\n {\n max: 1,\n normalizer: ([hiddenColumns]) => hiddenColumns.join(),\n }\n );\n\n getAggregationMap = memoize(\n (columns: Column[], aggregations: Aggregation[]): AggregationMap => {\n const aggregationMap = {} as Record<AggregationOperation, string[]>;\n aggregations.forEach(({ operation, selected, invert }) => {\n aggregationMap[operation] = AggregationUtils.getOperationColumnNames(\n columns,\n operation,\n selected,\n invert\n );\n });\n return aggregationMap;\n }\n );\n\n getOperationMap = memoize(\n (columns: Column[], aggregations: Aggregation[]): OperationMap => {\n const operationMap: Record<string, AggregationOperation[]> = {};\n aggregations\n .filter(\n (a: Aggregation) => !AggregationUtils.isRollupOperation(a.operation)\n )\n .forEach(({ operation, selected, invert }) => {\n AggregationUtils.getOperationColumnNames(\n columns,\n operation,\n selected,\n invert\n ).forEach(name => {\n const newOperations = [...(operationMap[name] ?? []), operation];\n operationMap[name] = newOperations;\n });\n });\n return operationMap;\n }\n );\n\n getOperationOrder = memoize(\n (aggregations: Aggregation[]): AggregationOperation[] =>\n aggregations\n .map((a: Aggregation) => a.operation)\n .filter(\n (o: AggregationOperation) => !AggregationUtils.isRollupOperation(o)\n )\n );\n\n getCachedFormatColumns = memoize(\n (columns: Column[], rules: SidebarFormattingRule[]) =>\n getFormatColumns(columns, rules)\n );\n\n // customColumns arg is needed to invalidate the cache\n // eslint-disable-next-line no-unused-vars\n getCachedModelColumns = memoize(\n (model: IrisGridModel, customColumns: ColumnName[]) => model.columns\n );\n\n /**\n * Builds formatColumns array based on the provided formatting rules with optional preview\n * @param columns Array of columns\n * @param rulesParam Array of formatting rules\n * @param preview Optional temporary formatting rule for previewing live changes\n * @param editIndex Index in the rulesParam array to replace with the preview, null if preview not applicable\n * @returns Format columns array\n */\n getCachedPreviewFormatColumns = memoize(\n (\n columns: Column[],\n rulesParam: SidebarFormattingRule[],\n preview?: SidebarFormattingRule,\n editIndex?: number\n ): CustomColumn[] => {\n log.debug(\n 'getCachedPreviewFormatColumns',\n rulesParam,\n preview,\n editIndex\n );\n if (preview !== undefined && editIndex !== undefined) {\n const rules = [...rulesParam];\n rules[editIndex] = preview;\n return this.getCachedFormatColumns(columns, rules);\n }\n\n return this.getCachedFormatColumns(columns, rulesParam);\n }\n );\n\n getModelRollupConfig = memoize(\n (\n originalColumns: Column[],\n config: UIRollupConfig | undefined,\n aggregationSettings: AggregationSettings\n ) =>\n IrisGridUtils.getModelRollupConfig(\n originalColumns,\n config,\n aggregationSettings\n )\n );\n\n getModelTotalsConfig = memoize(\n (\n columns: Column[],\n config: UIRollupConfig | undefined,\n aggregationSettings: AggregationSettings\n ): UITotalsTableConfig | null => {\n const { aggregations, showOnTop } = aggregationSettings;\n // If we've got rollups, then aggregations are applied as part of that...\n if (\n (config?.columns?.length ?? 0) > 0 ||\n (aggregations?.length ?? 0) === 0\n ) {\n return null;\n }\n\n const operationMap = this.getOperationMap(columns, aggregations);\n const operationOrder = this.getOperationOrder(aggregations);\n\n return { operationMap, operationOrder, showOnTop };\n }\n );\n\n getCachedStateOverride = memoize(\n (\n hoverSelectColumn: GridRangeIndex,\n isFilterBarShown: boolean,\n isSelectingColumn: boolean,\n loadingScrimProgress: number | null,\n quickFilters: QuickFilterMap,\n advancedFilters: AdvancedFilterMap,\n sorts: Sort[],\n reverseType: ReverseType,\n rollupConfig: UIRollupConfig | undefined,\n isMenuShown: boolean\n ) => ({\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverseType,\n rollupConfig,\n isMenuShown,\n }),\n { max: 1 }\n );\n\n getCachedFilter = memoize(\n (\n customFilters: FilterCondition[],\n quickFilters: QuickFilterMap,\n advancedFilters: AdvancedFilterMap,\n partitionFilters: FilterCondition[],\n searchFilter: FilterCondition | undefined\n ) => [\n ...(customFilters ?? []),\n ...(partitionFilters ?? []),\n ...IrisGridUtils.getFiltersFromFilterMap(quickFilters),\n ...IrisGridUtils.getFiltersFromFilterMap(advancedFilters),\n ...(searchFilter !== undefined ? [searchFilter] : []),\n ],\n { max: 1 }\n );\n\n getCachedTheme = memoize(\n (\n theme: GridThemeType,\n isEditable: boolean,\n floatingRowCount: number\n ): Partial<IrisGridThemeType> => ({\n ...IrisGridTheme,\n ...theme,\n autoSelectRow: !isEditable,\n // We only show the row footers when we have floating rows for aggregations\n rowFooterWidth: floatingRowCount > 0 ? theme.rowFooterWidth : 0,\n }),\n { max: 1 }\n );\n\n getValueForCell(\n columnIndex: GridRangeIndex,\n rowIndex: GridRangeIndex,\n rawValue = false\n ): string | unknown {\n const { model } = this.props;\n const modelColumn = this.getModelColumn(columnIndex);\n const modelRow = this.getModelRow(rowIndex);\n if (rawValue && modelColumn != null && modelRow != null) {\n const value = model.valueForCell(modelColumn, modelRow);\n if (TableUtils.isDateType(model.columns[modelColumn].type)) {\n // The returned value is just a long value, we should return the value formatted as a full date string\n const { formatter } = model;\n return dh.i18n.DateTimeFormat.format(\n UNFORMATTED_DATE_PATTERN,\n value as number | Date | DateWrapper,\n dh.i18n.TimeZone.getTimeZone(formatter.timeZone)\n );\n }\n return value;\n }\n if (rawValue) {\n return null;\n }\n if (modelColumn != null && modelRow != null) {\n return model.textForCell(modelColumn, modelRow);\n }\n return '';\n }\n\n getModelColumn(columnIndex: GridRangeIndex): ModelIndex | null | undefined {\n const { metrics } = this.state;\n assertNotNull(metrics);\n const { modelColumns } = metrics;\n if (modelColumns == null) {\n return null;\n }\n\n return columnIndex != null ? modelColumns.get(columnIndex) : null;\n }\n\n getModelRow(rowIndex: GridRangeIndex): ModelIndex | null | undefined {\n const { metrics } = this.state;\n assertNotNull(metrics);\n const { modelRows } = metrics;\n if (modelRows == null) {\n return null;\n }\n\n return rowIndex != null ? modelRows.get(rowIndex) : null;\n }\n\n getTheme(): Partial<IrisGridThemeType> {\n const { model, theme } = this.props;\n return this.getCachedTheme(\n theme,\n (isEditableGridModel(model) && model.isEditable) ?? false,\n model.floatingTopRowCount + model.floatingBottomRowCount\n );\n }\n\n getVisibleColumn(modelIndex: ModelIndex): VisibleIndex {\n const { movedColumns } = this.state;\n return GridUtils.getVisibleIndex(modelIndex, movedColumns);\n }\n\n /**\n * Applies the provided input filters as quick filters,\n * and clears any existing quickFilters or advancedFilters on that column\n * @param inputFilters Array of input filters to apply\n * @param replaceExisting If true, new filters will replace the existing ones, instead of merging\n */\n applyInputFilters(\n inputFilters: InputFilter[],\n replaceExisting = false\n ): void {\n const { model } = this.props;\n const { advancedFilters, quickFilters } = this.state;\n const newAdvancedFilters = replaceExisting\n ? new Map()\n : new Map(advancedFilters);\n const newQuickFilters = replaceExisting ? new Map() : new Map(quickFilters);\n\n let isChanged = replaceExisting && advancedFilters.size > 0;\n inputFilters.forEach(({ name, type, value }) => {\n const modelIndex = model.columns.findIndex(\n ({ name: columnName, type: columnType }) =>\n columnName === name && columnType === type\n );\n if (modelIndex >= 0) {\n isChanged = newAdvancedFilters.delete(modelIndex) || isChanged;\n isChanged =\n this.applyQuickFilter(modelIndex, value, newQuickFilters) ||\n isChanged;\n } else {\n log.error('Unable to find column for inputFilter', name, type, value);\n }\n });\n if (isChanged) {\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n }\n\n /**\n * Applies a quick filter\n * @param modelIndex The index in the model of the column to set\n * @param value The string value to set to the quick filter\n * @param quickFilters The quick filters map\n * @returns True if the filters have changed because this quick filter was applied\n */\n applyQuickFilter(\n modelIndex: ModelIndex,\n value: string | null,\n quickFilters: QuickFilterMap\n ): boolean {\n const { model } = this.props;\n const { formatter } = model;\n const column = model.columns[modelIndex];\n\n if (value != null && `${value}`.trim().length > 0) {\n const quickFilter = quickFilters.get(modelIndex);\n if (quickFilter != null) {\n const { text } = quickFilter;\n if (text === value) {\n log.debug2('Ignoring change to existing filter');\n return false;\n }\n }\n quickFilters.set(modelIndex, {\n text: value,\n filter: IrisGrid.makeQuickFilter(column, value, formatter.timeZone),\n });\n return true;\n }\n return quickFilters.delete(modelIndex);\n }\n\n setAdvancedFilterMap(advancedFilters: AdvancedFilterMap): void {\n this.setState({ advancedFilters });\n }\n\n setAdvancedFilter(\n modelIndex: ModelIndex,\n filter: FilterCondition | null,\n options: AdvancedFilterOptions\n ): void {\n log.debug('Setting advanced filter', modelIndex, filter);\n\n this.startLoading('Filtering...', true);\n\n this.setState(({ advancedFilters }) => {\n const newAdvancedFilters = new Map(advancedFilters);\n if (filter == null) {\n newAdvancedFilters.delete(modelIndex);\n } else {\n newAdvancedFilters.set(modelIndex, {\n filter,\n options,\n });\n }\n return { advancedFilters: newAdvancedFilters };\n });\n }\n\n /**\n * Sets a quick filter against the provided column\n * @param modelIndex The index in the model for the column this filter is applied to\n * @param filter A filter to apply to the column, or null if there was an error\n * @param text The original text the filter was created with\n */\n setQuickFilter(\n modelIndex: ModelIndex,\n filter: FilterCondition | null,\n text: string\n ): void {\n log.debug('Setting quick filter', modelIndex, filter, text);\n\n this.startLoading('Filtering...', true);\n\n this.setState(({ quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n newQuickFilters.set(modelIndex, { filter, text });\n return { quickFilters: newQuickFilters };\n });\n }\n\n /**\n * Set grid filters based on the filter map\n * @param filterMap Filter map\n */\n setFilterMap(filterMap: FilterMap): void {\n log.debug('setFilterMap', filterMap);\n\n const { advancedSettings } = this.props;\n const clearFiltersOnLinkerFilterUpdate =\n advancedSettings.get(\n AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS\n ) ?? false;\n if (clearFiltersOnLinkerFilterUpdate) {\n this.clearAllFilters();\n }\n\n const { model } = this.props;\n filterMap.forEach(({ columnType, filterList }, columnName) => {\n const column = model.columns.find(\n c => c.name === columnName && c.type === columnType\n );\n if (column == null) {\n return;\n }\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n const combinedText = IrisGridUtils.combineFiltersFromList(\n columnType,\n filterList\n );\n if (combinedText.length === 0) {\n this.removeQuickFilter(columnIndex);\n } else {\n const { formatter } = model;\n this.setQuickFilter(\n columnIndex,\n IrisGrid.makeQuickFilter(column, combinedText, formatter.timeZone),\n `${combinedText}`\n );\n }\n });\n }\n\n removeColumnFilter(modelColumn: ModelIndex): void {\n this.startLoading('Filtering...', true);\n\n this.setState(\n ({ advancedFilters, quickFilters }: Partial<IrisGridState>) => {\n const newAdvancedFilters = advancedFilters\n ? new Map(advancedFilters)\n : new Map();\n const newQuickFilters = quickFilters\n ? new Map(quickFilters)\n : new Map();\n newQuickFilters.delete(modelColumn);\n newAdvancedFilters.delete(modelColumn);\n\n return {\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n };\n }\n );\n }\n\n removeQuickFilter(modelColumn: ModelIndex): void {\n this.startLoading('Clearing Filter...', true);\n\n this.setState(({ quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n newQuickFilters.delete(modelColumn);\n\n return { quickFilters: newQuickFilters };\n });\n }\n\n clearAllFilters(): void {\n log.debug('Clearing all filters');\n\n const { advancedFilters, quickFilters, searchFilter } = this.state;\n if (\n quickFilters.size === 0 &&\n advancedFilters.size === 0 &&\n searchFilter === null\n ) {\n return;\n }\n\n // if there is an active quick filter input field, reset it as well\n this.clearGridInputField();\n\n this.startLoading('Clearing Filters...', true);\n this.setState({\n quickFilters: new Map(),\n advancedFilters: new Map(),\n searchValue: '',\n searchFilter: undefined,\n });\n }\n\n clearCrossColumSearch(): void {\n log.debug('Clearing cross-column search');\n\n this.setState({\n searchValue: '',\n searchFilter: undefined,\n });\n }\n\n clearGridInputField(): void {\n if (this.filterInputRef.current != null) {\n this.filterInputRef.current.setValue('');\n }\n }\n\n /**\n * Rebuilds all the current filters. Necessary if something like the time zone has changed.\n */\n rebuildFilters(): void {\n log.debug('Rebuilding filters');\n\n const { model } = this.props;\n const { advancedFilters, quickFilters } = this.state;\n const { columns, formatter } = model;\n\n const newAdvancedFilters = new Map();\n const newQuickFilters = new Map();\n\n advancedFilters.forEach((value, key) => {\n const { options } = value;\n const column = columns[key];\n const filter = TableUtils.makeAdvancedFilter(\n column,\n options,\n formatter.timeZone\n );\n newAdvancedFilters.set(key, {\n options,\n filter,\n });\n });\n\n quickFilters.forEach((value, key) => {\n const { text } = value;\n const column = columns[key];\n newQuickFilters.set(key, {\n text,\n filter: IrisGrid.makeQuickFilter(column, text, formatter.timeZone),\n });\n });\n\n this.startLoading('Rebuilding filters...', true);\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n\n setFilters({\n quickFilters,\n advancedFilters,\n }: Pick<IrisGridState, 'quickFilters' | 'advancedFilters'>): void {\n this.setState({\n quickFilters,\n advancedFilters,\n });\n }\n\n updateFormatterSettings(settings?: Settings, forceUpdate = true): void {\n const globalColumnFormats = FormatterUtils.getColumnFormats(settings);\n const dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(\n settings\n );\n\n const defaultDecimalFormatOptions =\n settings?.defaultDecimalFormatOptions ?? {};\n const defaultIntegerFormatOptions =\n settings?.defaultIntegerFormatOptions ?? {};\n const truncateNumbersWithPound =\n settings?.truncateNumbersWithPound ?? false;\n\n const isColumnFormatChanged = !deepEqual(\n this.globalColumnFormats,\n globalColumnFormats\n );\n const isDateFormattingChanged = !deepEqual(\n this.dateTimeFormatterOptions,\n dateTimeFormatterOptions\n );\n const isDecimalFormattingChanged = !deepEqual(\n this.decimalFormatOptions,\n settings?.defaultDecimalFormatOptions\n );\n const isIntegerFormattingChanged = !deepEqual(\n this.integerFormatOptions,\n defaultIntegerFormatOptions\n );\n const isTruncateNumbersChanged =\n this.truncateNumbersWithPound !== truncateNumbersWithPound;\n if (\n isColumnFormatChanged ||\n isDateFormattingChanged ||\n isDecimalFormattingChanged ||\n isIntegerFormattingChanged ||\n isTruncateNumbersChanged\n ) {\n this.globalColumnFormats = globalColumnFormats;\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = defaultDecimalFormatOptions;\n this.integerFormatOptions = defaultIntegerFormatOptions;\n this.truncateNumbersWithPound = truncateNumbersWithPound;\n this.updateFormatter({}, forceUpdate);\n\n if (isDateFormattingChanged && forceUpdate) {\n this.rebuildFilters();\n }\n }\n }\n\n getAlwaysFetchColumns = memoize(\n (\n alwaysFetchColumns: ColumnName[],\n columns: Column[],\n movedColumns: MoveOperation[],\n floatingLeftColumnCount: number,\n floatingRightColumnCount: number,\n draggingRange?: BoundedAxisRange\n ) => {\n const floatingColumns: ColumnName[] = [];\n\n for (let i = 0; i < floatingLeftColumnCount; i += 1) {\n floatingColumns.push(\n columns[GridUtils.getModelIndex(i, movedColumns)].name\n );\n }\n\n for (let i = 0; i < floatingRightColumnCount; i += 1) {\n floatingColumns.push(\n columns[GridUtils.getModelIndex(columns.length - 1 - i, movedColumns)]\n .name\n );\n }\n\n if (draggingRange) {\n for (let i = draggingRange[0]; i <= draggingRange[1]; i += 1) {\n floatingColumns.push(\n columns[GridUtils.getModelIndex(i, movedColumns)].name\n );\n }\n }\n\n const columnSet = new Set([...alwaysFetchColumns, ...floatingColumns]);\n\n return [...columnSet];\n }\n );\n\n updateFormatter(\n updatedFormats: { customColumnFormatMap?: Map<ColumnName, FormattingRule> },\n forceUpdate = true\n ): void {\n const { customColumnFormatMap } = this.state;\n const update = {\n customColumnFormatMap,\n ...updatedFormats,\n };\n const mergedColumnFormats = [\n ...(this.globalColumnFormats ?? []),\n ...update.customColumnFormatMap.values(),\n ];\n const formatter = new Formatter(\n mergedColumnFormats,\n this.dateTimeFormatterOptions,\n this.decimalFormatOptions,\n this.integerFormatOptions,\n this.truncateNumbersWithPound\n );\n\n log.debug('updateFormatter', this.globalColumnFormats, mergedColumnFormats);\n\n this.setState({ ...update, formatter }, () => {\n if (forceUpdate && this.grid) {\n this.grid.forceUpdate();\n }\n });\n }\n\n initFormatter(): void {\n const { settings } = this.props;\n this.updateFormatterSettings(settings);\n }\n\n initState(): void {\n const {\n applyInputFiltersOnInit,\n inputFilters,\n sorts,\n model,\n reverseType,\n customColumns,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n } = this.props;\n\n const searchColumns = selectedSearchColumns ?? [];\n const searchFilter = CrossColumnSearch.createSearchFilter(\n searchValue,\n searchColumns,\n model.columns,\n invertSearchColumns\n );\n\n if (applyInputFiltersOnInit) {\n // There may be more than one input filter on the same column with value === '' applied last\n // We don't want to skip it here, so only excluding the ones that were never applied (null)\n const inputFiltersWithValues = inputFilters.filter(\n inputFilter => inputFilter.value != null\n );\n this.applyInputFilters(inputFiltersWithValues);\n }\n\n this.setState({\n sorts,\n reverseType,\n customColumns,\n isReady: true,\n searchFilter,\n });\n this.initFormatter();\n }\n\n async loadPartitionsTable(partitionColumn: Column): Promise<void> {\n const { model } = this.props;\n this.setState({ isSelectingPartition: true });\n\n try {\n const partitionTable = await this.pending.add(\n model.valuesTable(partitionColumn),\n resolved => resolved.close()\n );\n\n const column = partitionTable.columns[0];\n const sort = column.sort().desc();\n partitionTable.applySort([sort]);\n partitionTable.setViewport(0, 0, [column]);\n\n const data = await this.pending.add(partitionTable.getViewportData());\n if (data.rows.length > 0) {\n const row = data.rows[0];\n const value = row.get(column);\n\n this.updatePartition(value, partitionColumn);\n\n this.setState({ isSelectingPartition: true });\n } else {\n log.info('Table does not have any data, just fetching all');\n this.setState({ isSelectingPartition: false });\n this.handlePartitionFetchAll();\n }\n this.setState({ partitionTable, partitionColumn }, () => {\n this.initState();\n });\n } catch (error) {\n this.handleTableLoadError(error);\n }\n }\n\n updatePartition(partition: string, partitionColumn: Column): void {\n const partitionFilter = partitionColumn\n .filter()\n .eq(dh.FilterValue.ofString(partition));\n const partitionFilters = [partitionFilter];\n this.setState({\n partition,\n partitionFilters,\n });\n }\n\n copyCell(\n columnIndex: GridRangeIndex,\n rowIndex: GridRangeIndex,\n rawValue = false\n ): void {\n const { canCopy } = this.props;\n if (canCopy) {\n const value = String(\n this.getValueForCell(columnIndex, rowIndex, rawValue)\n );\n copyToClipboard(value).catch(e => log.error('Unable to copy cell', e));\n } else {\n log.error('Attempted to copyCell for user without copy permission.');\n }\n }\n\n /**\n * Copy the provided ranges to the clipboard\n * @paramranges The ranges to copy\n * @param includeHeaders Include the headers or not\n * @param formatValues Whether to format values or not\n * @param error Error message if one occurred\n */\n copyRanges(\n ranges: GridRange[],\n includeHeaders = false,\n formatValues = true,\n error?: string\n ): void {\n const { model, canCopy } = this.props;\n const { metricCalculator, movedColumns } = this.state;\n const userColumnWidths = metricCalculator.getUserColumnWidths();\n\n if (canCopy) {\n const copyOperation = {\n ranges: GridRange.boundedRanges(\n ranges,\n model.columnCount,\n model.rowCount\n ),\n includeHeaders,\n formatValues,\n movedColumns,\n userColumnWidths,\n error,\n };\n\n this.setState({ copyOperation });\n } else {\n log.error('Attempted copyRanges for user without copy permission.');\n }\n }\n\n startLoading(loadingText: string, resetRanges = false): void {\n this.setState({ loadingText });\n\n const theme = this.getTheme();\n\n if (resetRanges && this.grid) {\n this.grid.clearSelectedRanges();\n this.grid.setViewState({ top: 0 }, true);\n }\n\n if (this.loadingScrimStartTime == null) {\n const { minScrimTransitionTime, maxScrimTransitionTime } = theme;\n assertNotNull(minScrimTransitionTime);\n assertNotNull(maxScrimTransitionTime);\n const height = this.gridWrapper?.getBoundingClientRect().height ?? 0;\n const scrimTransitionTime = Math.max(\n minScrimTransitionTime,\n Math.min(height / 2, maxScrimTransitionTime)\n );\n this.loadingScrimStartTime = Date.now();\n this.loadingScrimFinishTime =\n this.loadingScrimStartTime + scrimTransitionTime;\n this.setState({\n loadingScrimProgress: 0,\n });\n this.loadingTimer = setTimeout(() => {\n this.setState({\n loadingSpinnerShown: true,\n });\n }, IrisGrid.loadingSpinnerDelay);\n }\n }\n\n stopLoading(): void {\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n this.setState({\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n });\n\n if (this.loadingTimer != null) {\n clearTimeout(this.loadingTimer);\n this.loadingTimer = undefined;\n }\n }\n\n /**\n * Rolls back the table state to the last known safe state, or if that's not available then clears all sorts/filters/custom columns.\n */\n rollback(): void {\n if (this.lastLoadedConfig) {\n log.debug('loading last loading config', this.lastLoadedConfig);\n const {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n } = this.lastLoadedConfig;\n\n this.lastLoadedConfig = null;\n this.setState({\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n });\n } else {\n log.debug('remove all sorts, filters, and custom columns');\n this.setState({\n advancedFilters: new Map(),\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n customColumns: [],\n quickFilters: new Map(),\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n rollupConfig: undefined,\n selectDistinctColumns: [],\n sorts: [],\n });\n }\n }\n\n /**\n * Check if we can rollback the current state to a safe state.\n * @returns true if there's a previously known safe state or if some of the current state isn't empty.\n */\n canRollback(): boolean {\n return this.lastLoadedConfig != null || !isEmptyConfig(this.state);\n }\n\n startListening(model: IrisGridModel): void {\n model.addEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnsChanged\n );\n model.addEventListener(\n IrisGridModel.EVENT.PENDING_DATA_UPDATED,\n this.handlePendingDataUpdated\n );\n }\n\n stopListening(model: IrisGridModel): void {\n model.removeEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnsChanged\n );\n model.removeEventListener(\n IrisGridModel.EVENT.PENDING_DATA_UPDATED,\n this.handlePendingDataUpdated\n );\n }\n\n focus(): void {\n this.grid?.focus();\n }\n\n focusFilterBar(column: VisibleIndex): void {\n const { movedColumns } = this.state;\n const { model } = this.props;\n const { columnCount } = model;\n const modelColumn = GridUtils.getModelIndex(column, movedColumns);\n\n if (\n column == null ||\n column < 0 ||\n columnCount <= column ||\n !model.isFilterable(modelColumn)\n ) {\n this.setState({ focusedFilterBarColumn: null });\n return;\n }\n\n const { metricCalculator, metrics } = this.state;\n assertNotNull(metrics);\n const { left, rightVisible, lastLeft } = metrics;\n if (column < left) {\n this.grid?.setViewState({ left: column }, true);\n } else if (rightVisible < column) {\n const metricState = this.grid?.getMetricState();\n assertNotNull(metricState);\n const newLeft = metricCalculator.getLastLeft(\n metricState,\n column,\n metricCalculator.getVisibleWidth(metricState)\n );\n this.grid?.setViewState(\n { left: Math.min(newLeft, lastLeft), leftOffset: 0 },\n true\n );\n }\n this.lastFocusedFilterBarColumn = column;\n this.setState({ focusedFilterBarColumn: column, isFilterBarShown: true });\n }\n\n hideColumnByVisibleIndex(columnVisibleIndex: VisibleIndex): void {\n const { metricCalculator, movedColumns } = this.state;\n metricCalculator.setColumnWidth(\n GridUtils.getModelIndex(columnVisibleIndex, movedColumns),\n 0\n );\n\n this.grid?.forceUpdate();\n }\n\n freezeColumnByColumnName(columnName: ColumnName): void {\n const { frozenColumns, movedColumns } = this.state;\n const { model } = this.props;\n log.debug2('freezing column', columnName);\n\n const allFrozenColumns =\n frozenColumns == null\n ? new Set(model.frozenColumns)\n : new Set(frozenColumns);\n\n allFrozenColumns.add(columnName);\n\n const modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n const newMovedColumns = GridUtils.moveItem(\n visibleIndex,\n allFrozenColumns.size - 1,\n movedColumns\n );\n\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns,\n });\n }\n\n unFreezeColumnByColumnName(columnName: ColumnName): void {\n const { frozenColumns, movedColumns } = this.state;\n const { model } = this.props;\n log.debug2('unfreezing column', columnName);\n\n const allFrozenColumns =\n frozenColumns == null\n ? new Set(model.frozenColumns)\n : new Set(frozenColumns);\n\n allFrozenColumns.delete(columnName);\n\n const modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n\n // Move to after remaining frozen columns and front columns\n const newMovedColumns = GridUtils.moveItem(\n visibleIndex,\n allFrozenColumns.size + model.frontColumns.length,\n movedColumns\n );\n\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns,\n });\n }\n\n handleColumnVisibilityChanged(\n modelIndexes: ModelIndex[],\n visibilityOption?: VisibilityOptionType\n ): void {\n const { metricCalculator } = this.state;\n if (\n visibilityOption === VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n ) {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.resetColumnWidth(modelIndex);\n });\n } else {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.setColumnWidth(modelIndex, 0);\n });\n }\n this.grid?.forceUpdate();\n }\n\n handleCrossColumnSearch(\n searchValue: string,\n selectedSearchColumns: ColumnName[],\n invertSearchColumns: boolean\n ): void {\n const { model } = this.props;\n\n this.updateSearchFilter(\n searchValue,\n selectedSearchColumns,\n model.columns,\n invertSearchColumns\n );\n\n this.setState({\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n });\n }\n\n updateSearchFilter = debounce(\n (\n searchValue: string,\n selectedSearchColumns: ColumnName[],\n columns: Column[],\n invertSearchColumns: boolean\n ): void => {\n const searchFilter = CrossColumnSearch.createSearchFilter(\n searchValue,\n selectedSearchColumns,\n columns,\n invertSearchColumns\n );\n this.setState({ searchFilter });\n },\n SET_FILTER_DEBOUNCE\n );\n\n handleAnimationLoop(): void {\n this.grid?.updateCanvasScale();\n this.grid?.updateCanvas();\n\n if (this.isAnimating) {\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n }\n\n handleAnimationStart(): void {\n log.debug2('handleAnimationStart');\n\n this.isAnimating = true;\n\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n\n handleAnimationEnd(): void {\n log.debug2('handleAnimationEnd');\n\n this.isAnimating = false;\n }\n\n handlePartitionAppend(value: string): void {\n const { onPartitionAppend } = this.props;\n const { partitionColumn } = this.state;\n if (!partitionColumn) {\n return;\n }\n onPartitionAppend(partitionColumn, value);\n }\n\n handlePartitionChange(partition: string): void {\n const { partitionColumn } = this.state;\n if (!partitionColumn) {\n return;\n }\n this.updatePartition(partition, partitionColumn);\n }\n\n handlePartitionFetchAll(): void {\n this.setState({\n partitionFilters: [],\n isSelectingPartition: false,\n });\n }\n\n handlePartitionDone(): void {\n this.setState({ isSelectingPartition: false });\n }\n\n handleTableLoadError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error(error);\n\n const { onError } = this.props;\n onError(error);\n }\n\n showAllColumns(): void {\n const { metricCalculator } = this.state;\n const userColumnWidths = metricCalculator.getUserColumnWidths();\n const entries = [...userColumnWidths.entries()];\n for (let i = 0; i < entries.length; i += 1) {\n const [modelIndex, columnWidth] = entries[i];\n if (columnWidth === 0) {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n }\n this.grid?.forceUpdate();\n }\n\n toggleSort(columnIndex: VisibleIndex, addToExisting: boolean): void {\n log.info('Toggling sort for column', columnIndex);\n\n const { model } = this.props;\n const { sorts: currentSorts } = this.state;\n const modelColumn = this.getModelColumn(columnIndex);\n assertNotNull(modelColumn);\n const sorts = TableUtils.toggleSortForColumn(\n currentSorts,\n model.columns,\n modelColumn,\n addToExisting\n );\n this.updateSorts(sorts);\n }\n\n updateSorts(sorts: Sort[]): void {\n this.startLoading('Sorting...');\n this.setState({ sorts });\n this.grid?.forceUpdate();\n }\n\n sortColumn(\n modelColumn: ModelIndex,\n direction: SortDirection = TableUtils.sortDirection.none,\n isAbs = false,\n addToExisting = false\n ): void {\n assertNotNull(modelColumn);\n const { model } = this.props;\n const sorts = TableUtils.sortColumn(\n model.sort,\n model.columns,\n modelColumn,\n direction,\n isAbs,\n addToExisting\n );\n this.startLoading('Sorting...');\n this.setState({ sorts });\n this.grid?.forceUpdate();\n }\n\n reverse(reverseType: ReverseType): void {\n this.startLoading('Reversing...');\n this.setState({ reverseType });\n this.grid?.forceUpdate();\n }\n\n isReversible(): boolean {\n const { model } = this.props;\n return model.isReversible;\n }\n\n toggleFilterBar(focusIndex = this.lastFocusedFilterBarColumn): void {\n let { isFilterBarShown } = this.state;\n isFilterBarShown = !isFilterBarShown;\n this.setState({ isFilterBarShown });\n\n if (isFilterBarShown) {\n if (focusIndex != null) {\n this.focusFilterBar(focusIndex);\n } else {\n let columnIndex = 0;\n const { model } = this.props;\n const { columnCount } = model;\n for (let i = 0; i < columnCount; i += 1) {\n const modelColumn = this.getModelColumn(i);\n if (modelColumn != null) {\n const column = model.columns[modelColumn];\n if (column != null && TableUtils.isTextType(column.type)) {\n columnIndex = i;\n break;\n }\n }\n }\n this.focusFilterBar(columnIndex);\n }\n } else {\n this.grid?.focus();\n }\n }\n\n isTableSearchAvailable(): boolean {\n const { model, canToggleSearch } = this.props;\n const searchDisplayMode = model?.layoutHints?.searchDisplayMode;\n\n if (searchDisplayMode === dh.SearchDisplayMode?.SEARCH_DISPLAY_HIDE) {\n return false;\n }\n if (searchDisplayMode === dh.SearchDisplayMode?.SEARCH_DISPLAY_SHOW) {\n return true;\n }\n\n return canToggleSearch;\n }\n\n toggleSearchBar(): void {\n const { showSearchBar } = this.state;\n if (!this.isTableSearchAvailable()) {\n return;\n }\n\n const update = !showSearchBar;\n this.setState(\n {\n showSearchBar: update,\n },\n () => {\n if (update && this.crossColumnRef?.current) {\n this.crossColumnRef?.current.focus();\n } else {\n this.grid?.focus();\n }\n }\n );\n }\n\n toggleGotoRow(row = ''): void {\n const { isGotoRowShown } = this.state;\n if (row) {\n // if invoked with a row, keep open instead of toggle\n this.setState({\n isGotoRowShown: true,\n gotoRow: row,\n gotoRowError: '',\n });\n return;\n }\n this.setState({\n isGotoRowShown: !isGotoRowShown,\n gotoRow: '',\n gotoRowError: '',\n });\n }\n\n async commitPending(): Promise<void> {\n const { model } = this.props;\n if (!isEditableGridModel(model) || !model.isEditable) {\n throw new Error('Cannot save, table is not editable');\n }\n\n const { pendingSavePromise } = this.state;\n if (pendingSavePromise != null) {\n throw new Error('Save already in progress');\n }\n\n const containsGridCellInputField = document?.activeElement?.classList.contains(\n 'grid-cell-input-field'\n );\n if (containsGridCellInputField != null && containsGridCellInputField) {\n if (\n document.activeElement != null &&\n document.activeElement.classList.contains('error')\n ) {\n throw new ValidationError('Current input is invalid');\n }\n\n // Focus the grid again to commit any pending input changes\n this.grid?.focus();\n }\n\n const newPendingSavePromise = this.pending\n .add(model.commitPending())\n .then(() => {\n this.setState({ pendingSaveError: null, pendingSavePromise: null });\n })\n .catch(err => {\n if (!PromiseUtils.isCanceled(err)) {\n this.setState({ pendingSaveError: err, pendingSavePromise: null });\n }\n });\n this.setState({ pendingSavePromise: newPendingSavePromise });\n return newPendingSavePromise;\n }\n\n async discardPending(): Promise<void> {\n const { pendingSavePromise } = this.state;\n if (pendingSavePromise != null) {\n throw new Error('Cannot cancel a save in progress');\n }\n\n this.setState({\n pendingSavePromise: null,\n pendingSaveError: null,\n pendingDataMap: new Map(),\n pendingDataErrors: new Map(),\n });\n }\n\n /**\n * Select the passed in column and notify listener\n * @param column The column in this table to link\n */\n selectColumn(column: Column): void {\n const { onColumnSelected } = this.props;\n onColumnSelected(column);\n }\n\n /**\n * Select all the data for a given row and notify listener\n */\n selectData(columnIndex: ModelIndex, rowIndex: ModelIndex): void {\n const { model } = this.props;\n const { columns, groupedColumns } = model;\n const dataMap: RowDataMap = {};\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n const { name, type } = column;\n const value = model.valueForCell(i, rowIndex);\n const text = model.textForCell(i, rowIndex);\n const visibleIndex = this.getVisibleColumn(i);\n const isExpandable =\n isExpandableGridModel(model) && model.isRowExpandable(rowIndex);\n const isGrouped = groupedColumns.find(c => c.name === name) != null;\n dataMap[name] = {\n value,\n text,\n type,\n isGrouped,\n isExpandable,\n visibleIndex,\n };\n }\n const { onDataSelected } = this.props;\n onDataSelected(rowIndex, dataMap);\n }\n\n handleAdvancedFilterChange(\n column: Column,\n filter: FilterCondition | null,\n options: AdvancedFilterOptions\n ): void {\n const { model } = this.props;\n const index = model.getColumnIndexByName(column.name);\n assertNotNull(index);\n this.setAdvancedFilter(index, filter, options);\n }\n\n handleAdvancedFilterSortChange(\n column: Column,\n direction: SortDirection,\n addToExisting = false\n ): void {\n const { model } = this.props;\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n const oldSort = TableUtils.getSortForColumn(model.sort, columnIndex);\n let newSort = null;\n\n if (oldSort == null || oldSort.direction !== direction) {\n if (direction === TableUtils.sortDirection.descending) {\n newSort = column.sort().desc();\n } else {\n newSort = column.sort().asc();\n }\n }\n\n const sorts = TableUtils.setSortForColumn(\n model.sort,\n columnIndex,\n newSort,\n addToExisting\n );\n log.info('Setting table sorts', sorts);\n\n this.startLoading('Sorting...');\n this.setState({ sorts });\n\n this.grid?.forceUpdate();\n }\n\n handleAdvancedFilterDone(): void {\n this.grid?.focus();\n }\n\n handleAdvancedMenuOpened(column: GridRangeIndex): void {\n this.setState({ shownAdvancedFilter: column });\n }\n\n handleGotoRowOpened(): void {\n this.setState({ isGotoRowShown: true });\n }\n\n handleGotoRowClosed(): void {\n this.setState({ isGotoRowShown: false });\n }\n\n handleAdvancedMenuClosed(columnIndex: number): void {\n const { focusedFilterBarColumn, isFilterBarShown } = this.state;\n if (\n isFilterBarShown &&\n focusedFilterBarColumn === columnIndex &&\n this.filterInputRef?.current !== null\n ) {\n this.filterInputRef?.current.focus();\n this.setState({ shownAdvancedFilter: null });\n } else {\n this.setState({\n focusedFilterBarColumn: null,\n shownAdvancedFilter: null,\n });\n }\n }\n\n handleCancel(): void {\n this.rollback();\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleChartChange(): void {\n // TODO: IDS-4242 Update Chart Preview\n }\n\n handleChartCreate(settings: ChartBuilderSettings): void {\n const { model, onCreateChart } = this.props;\n onCreateChart(settings, model);\n }\n\n handleGridError(error?: Error): void {\n log.warn('Grid Error', error);\n this.setState({\n toastMessage: <div className=\"error-message\">{`${error}`}</div>,\n });\n }\n\n handleFilterBarChange(value: string): void {\n this.startLoading('Filtering...', true);\n\n this.setState(({ focusedFilterBarColumn, quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n if (focusedFilterBarColumn != null) {\n const modelIndex = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelIndex);\n this.applyQuickFilter(modelIndex, value, newQuickFilters);\n }\n return { quickFilters: newQuickFilters };\n });\n }\n\n handleFilterBarDone(setGridFocus = true, defocusInput = true): void {\n if (setGridFocus) {\n this.grid?.focus();\n }\n if (defocusInput) {\n this.setState({ focusedFilterBarColumn: null });\n }\n }\n\n handleFilterBarTab(backward: boolean): void {\n const { focusedFilterBarColumn } = this.state;\n assertNotNull(focusedFilterBarColumn);\n if (backward) {\n this.focusFilterBar(focusedFilterBarColumn - 1);\n } else {\n this.focusFilterBar(focusedFilterBarColumn + 1);\n }\n }\n\n handleFormatSelection(\n modelIndex: ModelIndex,\n selectedFormat: TableColumnFormat | null\n ): void {\n const { model } = this.props;\n const column = model.columns[modelIndex];\n const { customColumnFormatMap: prevCustomColumnFormatMap } = this.state;\n const customColumnFormatMap = new Map(prevCustomColumnFormatMap);\n\n if (selectedFormat != null) {\n const normalizedType = TableUtils.getNormalizedType(column.type);\n assertNotNull(normalizedType);\n const columnFormattingRule = Formatter.makeColumnFormattingRule(\n normalizedType,\n column.name,\n selectedFormat\n );\n\n customColumnFormatMap.set(column.name, columnFormattingRule);\n } else {\n customColumnFormatMap.delete(column.name);\n }\n\n this.updateFormatter({ customColumnFormatMap });\n }\n\n handleMenu(e: React.MouseEvent<HTMLButtonElement>): void {\n e.stopPropagation();\n this.setState({ isMenuShown: true });\n }\n\n handleMenuClose(): void {\n this.setState({ isMenuShown: false, openOptions: [] });\n }\n\n handleMenuBack(): void {\n this.setState(({ openOptions }) => {\n const newOptions = [...openOptions];\n newOptions.pop();\n return { openOptions: newOptions };\n });\n }\n\n handleMenuSelect(option: OptionItem): void {\n this.setState(({ openOptions }) => ({\n openOptions: [...openOptions, option],\n }));\n }\n\n handleRequestFailed(event: Event): void {\n const customEvent = event as CustomEvent;\n log.error('request failed:', customEvent.detail);\n this.stopLoading();\n if (this.canRollback()) {\n this.startLoading('Rolling back changes...', true);\n this.rollback();\n } else {\n log.error('Table failed and unable to rollback');\n const { onError } = this.props;\n onError(new Error(`Error displaying table: ${customEvent.detail}`));\n }\n }\n\n handleUpdate(): void {\n this.stopLoading();\n log.debug2('Received model update');\n\n const {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n } = this.state;\n\n const config = {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n };\n\n if (!isEmptyConfig(config)) {\n this.lastLoadedConfig = config;\n } else {\n this.lastLoadedConfig = null;\n }\n\n this.grid?.forceUpdate();\n }\n\n handleViewChanged(metrics?: GridMetrics): void {\n const { model } = this.props;\n const { selectionEndRow = 0 } = this.grid?.state ?? {};\n let pendingRowCount = 0;\n if (isEditableGridModel(model) && model.isEditable) {\n assertNotNull(metrics);\n const { bottomViewport } = metrics;\n\n // We have an editable table that we can add new rows to\n // Display empty rows beneath the table rows that user can fill in\n const bottomNonFloating = model.rowCount - model.floatingBottomRowCount;\n if (selectionEndRow === bottomNonFloating - 1) {\n // Selection is in the last row, add another blank row\n pendingRowCount = model.pendingRowCount + 1;\n } else if (selectionEndRow === bottomNonFloating - 2) {\n // We may have just added a row based on selection moving, so just leave it as is\n pendingRowCount = model.pendingRowCount;\n } else {\n // Otherwise fill up the viewport with empty cells\n pendingRowCount = Math.max(\n 0,\n bottomViewport -\n (model.rowCount - model.pendingRowCount) -\n model.floatingTopRowCount -\n model.floatingBottomRowCount -\n 1\n );\n }\n }\n\n this.setState({ metrics, pendingRowCount });\n }\n\n handleSelectionChanged(selectedRanges?: GridRange[]): void {\n assertNotNull(selectedRanges);\n const { onSelectionChanged } = this.props;\n const { copyOperation } = this.state;\n this.setState({ selectedRanges });\n if (copyOperation != null) {\n this.setState({ copyOperation: null });\n }\n onSelectionChanged(selectedRanges);\n }\n\n handleMovedColumnsChanged(\n movedColumns: MoveOperation[],\n onChangeApplied: (() => void) | undefined = () => null\n ): void {\n this.setState({ movedColumns }, onChangeApplied);\n }\n\n handleTooltipRef(tooltip: Tooltip): void {\n // Need to start the timer right away, since we're creating the tooltip when we want the timer to start\n if (tooltip != null) {\n tooltip.startTimer();\n }\n\n this.tooltip = tooltip;\n }\n\n handleConditionalFormatsChange(\n conditionalFormats: SidebarFormattingRule[]\n ): void {\n log.debug('Updated conditional formats', conditionalFormats);\n this.setState({ conditionalFormats });\n }\n\n handleConditionalFormatCreate(): void {\n log.debug('Create new conditional format');\n const { openOptions, conditionalFormats } = this.state;\n this.setState({\n openOptions: [\n ...openOptions,\n {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: `Create Formatting Rule`,\n },\n ],\n conditionalFormatEditIndex: conditionalFormats.length,\n // Start with a blank rule\n conditionalFormatPreview: undefined,\n });\n }\n\n handleConditionalFormatEdit(index: number): void {\n log.debug('Edit conditional format', index);\n const { openOptions, conditionalFormats } = this.state;\n this.setState({\n openOptions: [\n ...openOptions,\n {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: `Edit Formatting Rule`,\n },\n ],\n conditionalFormatEditIndex: index,\n // Clone rule to preview temporary changes\n conditionalFormatPreview: { ...conditionalFormats[index] },\n });\n }\n\n // Apply live changes\n handleConditionalFormatEditorUpdate = debounce(\n (conditionalFormatPreview?: SidebarFormattingRule): void => {\n this.setState({ conditionalFormatPreview });\n },\n SET_CONDITIONAL_FORMAT_DEBOUNCE\n );\n\n handleConditionalFormatEditorSave(config: SidebarFormattingRule): void {\n log.debug('Save conditional format changes', config);\n this.setState(\n state => {\n if (state.conditionalFormatEditIndex === null) {\n log.debug('Invalid format index');\n return null;\n }\n const conditionalFormats = [...state.conditionalFormats];\n conditionalFormats[state.conditionalFormatEditIndex] = config;\n return { conditionalFormats };\n },\n () => {\n this.handleMenuBack();\n }\n );\n }\n\n handleConditionalFormatEditorCancel(): void {\n this.handleMenuBack();\n // Not resetting conditionalFormatPreview here\n // to prevent editor fields change during the menu transition\n this.setState({ conditionalFormatEditIndex: null });\n }\n\n handleUpdateCustomColumns(customColumns: string[]): void {\n log.info(`handleUpdateCustomColumns:`, customColumns);\n\n const { model } = this.props;\n const {\n movedColumns,\n sorts,\n quickFilters,\n advancedFilters,\n selectDistinctColumns,\n } = this.state;\n\n const { columns } = model;\n const oldCustomColumns = model.customColumns.map(\n customColumn => `${customColumn}`\n );\n\n const removedColumnNames = IrisGridUtils.getRemovedCustomColumnNames(\n oldCustomColumns,\n customColumns\n );\n if (removedColumnNames.length > 0) {\n const newSorts = IrisGridUtils.removeSortsInColumns(\n sorts,\n removedColumnNames\n );\n const newQuickFilters = IrisGridUtils.removeFiltersInColumns(\n columns,\n quickFilters,\n removedColumnNames\n );\n const newAdvancedFilters = IrisGridUtils.removeFiltersInColumns(\n columns,\n advancedFilters,\n removedColumnNames\n );\n const newMovedColumns = IrisGridUtils.removeColumnFromMovedColumns(\n columns,\n movedColumns,\n removedColumnNames\n );\n const newSelectDistinctColumns = IrisGridUtils.removeColumnsFromSelectDistinctColumns(\n selectDistinctColumns,\n removedColumnNames\n );\n if (newSorts.length !== sorts.length) {\n log.debug('removing sorts from removed custom columns...');\n this.setState({ sorts: newSorts });\n }\n if (\n newQuickFilters.size !== quickFilters.size ||\n newAdvancedFilters.size !== advancedFilters.size\n ) {\n log.debug(`removing filters from removed custom columns...`);\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n if (!deepEqual(movedColumns, newMovedColumns)) {\n log.debug(\n `change moved columns for removed custom columns`,\n newMovedColumns\n );\n this.setState({ movedColumns: newMovedColumns });\n }\n if (!deepEqual(selectDistinctColumns, newSelectDistinctColumns)) {\n log.debug(\n `change selectDistinct columns for removed custom columns`,\n newMovedColumns\n );\n this.setState({ selectDistinctColumns: newSelectDistinctColumns });\n }\n }\n\n this.setState({ customColumns });\n this.startLoading('Applying custom columns...');\n }\n\n handleCustomColumnsChanged(): void {\n log.debug('custom columns changed');\n const { isReady } = this.state;\n if (isReady) {\n this.stopLoading();\n this.grid?.forceUpdate();\n } else {\n this.initState();\n }\n }\n\n handlePendingCommitClicked(): Promise<void> {\n return this.commitPending();\n }\n\n handlePendingDiscardClicked(): Promise<void> {\n return this.discardPending();\n }\n\n handlePendingDataUpdated(): void {\n log.debug('pending data updated');\n const { model } = this.props;\n const { pendingDataMap, pendingDataErrors } = model;\n this.setState({\n pendingDataMap,\n pendingDataErrors,\n pendingSaveError: null,\n });\n this.grid?.forceUpdate();\n }\n\n /**\n * User added, removed, or changed the order of aggregations, or position\n * @param aggregationSettings The new aggregation settings\n */\n handleAggregationsChange(aggregationSettings: AggregationSettings): void {\n log.debug('handleAggregationsChange', aggregationSettings);\n\n this.startLoading(\n `Aggregating ${aggregationSettings.aggregations\n .map(a => a.operation)\n .join(', ')}...`\n );\n this.setState({ aggregationSettings });\n }\n\n /**\n * A specific aggregation has been modified\n * @param aggregation The new aggregation\n */\n handleAggregationChange(aggregation: Aggregation): void {\n log.debug('handleAggregationChange', aggregation);\n\n this.startLoading(`Aggregating ${aggregation.operation}...`);\n this.setState(({ aggregationSettings }) => ({\n selectedAggregation: aggregation,\n aggregationSettings: {\n ...aggregationSettings,\n aggregations: aggregationSettings.aggregations.map(a =>\n a.operation === aggregation.operation ? aggregation : a\n ),\n },\n }));\n }\n\n /**\n * An aggregations has been selected for editing\n * @param aggregation The aggregation to edit\n */\n handleAggregationEdit(aggregation: Aggregation): void {\n log.debug('handleAggregationEdit', aggregation);\n\n const { openOptions } = this.state;\n\n this.setState({\n openOptions: [\n ...openOptions,\n {\n type: OptionType.AGGREGATION_EDIT,\n title: `Edit Columns to ${aggregation.operation}`,\n },\n ],\n selectedAggregation: aggregation,\n });\n }\n\n handleRollupChange(rollupConfig: UIRollupConfig): void {\n log.info('Rollup change', rollupConfig);\n\n this.resetGridViewState();\n this.showAllColumns();\n this.clearAllFilters();\n\n this.startLoading(\n `Grouping by columns ${rollupConfig?.columns?.join(', ') ?? ''}...`\n );\n\n // Have to clear select distinct since rollup uses the original columns, not the current ones.\n // IrisGridProxyModel has a check to prevent model update\n // when selectDistinctModel is cleared and the rollupConfig is set on the model.\n this.setState({\n rollupConfig,\n movedColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n selectDistinctColumns: [],\n });\n }\n\n handleSelectDistinctChanged(columnNames: ColumnName[]): void {\n log.debug('SelectDistinct change', columnNames);\n\n this.resetGridViewState();\n\n this.showAllColumns();\n this.clearAllFilters();\n\n this.startLoading(\n `Selecting distinct values in ${\n columnNames.length > 0 ? columnNames.join(', ') : ''\n }...`\n );\n\n this.setState({\n selectDistinctColumns: columnNames,\n movedColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n });\n }\n\n handleDownloadTableStart(): void {\n const { canDownloadCsv } = this.props;\n if (canDownloadCsv) {\n this.setState({\n isTableDownloading: true,\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.INITIATING,\n });\n } else {\n log.error(\n 'Attempted to handleDownloadTableStart for user without download CSV permission.'\n );\n }\n }\n\n handleDownloadTable(\n fileName: string,\n frozenTable: Table,\n tableSubscription: TableViewportSubscription,\n snapshotRanges: GridRange[],\n modelRanges: GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ): void {\n const { canDownloadCsv } = this.props;\n if (canDownloadCsv) {\n log.info(\n 'start table downloading',\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n this.setState(() => {\n if (this.tableSaver) {\n this.tableSaver.startDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n }\n return {\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING,\n };\n });\n } else {\n log.error(\n 'Attempted to handleDownloadTable for user without download CSV permission.'\n );\n }\n }\n\n handleCancelDownloadTable(): void {\n this.tableSaver?.cancelDownload();\n this.setState({ isTableDownloading: false });\n }\n\n handleDownloadProgressUpdate = throttle(\n (\n tableDownloadProgress: number,\n tableDownloadEstimatedTime: number | null\n ) => {\n const { tableDownloadStatus } = this.state;\n if (\n tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING\n ) {\n this.setState({\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n });\n }\n },\n UPDATE_DOWNLOAD_THROTTLE\n );\n\n handleDownloadCompleted(): void {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 100,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.FINISHED,\n });\n }\n\n handleDownloadCanceled(): void {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 0,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.CANCELED,\n });\n }\n\n /**\n * Delete the specified ranges from the table.\n * @param ranges The ranges to delete\n */\n deleteRanges(ranges: GridRange[]): void {\n const { model } = this.props;\n this.pending.add(model.delete(ranges)).catch(e => {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to delete ranges', ranges, e);\n }\n });\n }\n\n resetColumnSelection(): void {\n if (this.grid == null) {\n return;\n }\n const { isSelectingColumn } = this.props;\n if (isSelectingColumn) {\n const { columnAllowedCursor } = this.props;\n this.grid.setState({ cursor: columnAllowedCursor });\n } else {\n this.grid.setState({ cursor: null });\n this.setState({ hoverSelectColumn: null });\n }\n }\n\n resetGridViewState(forceUpdate = true): void {\n if (!this.grid) {\n return;\n }\n\n this.grid.clearSelectedRanges();\n this.grid.setViewState(\n { left: 0, top: 0, topOffset: 0, leftOffset: 0 },\n forceUpdate\n );\n }\n\n sendStateChange(): void {\n if (!this.grid) {\n return;\n }\n const { state: irisGridState } = this;\n const { state: gridState } = this.grid;\n const { onStateChange } = this.props;\n\n onStateChange(irisGridState, gridState);\n }\n\n handleOverflowClose(): void {\n this.setState({\n showOverflowModal: false,\n });\n }\n\n getColumnBoundingRect(): DOMRect {\n const { metrics, shownColumnTooltip } = this.state;\n assertNotNull(metrics);\n assertNotNull(shownColumnTooltip);\n const gridRect = this.gridWrapper?.getBoundingClientRect();\n const popperMargin = 20;\n assertNotNull(gridRect);\n const {\n columnHeaderHeight,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n columnHeaderMaxDepth,\n } = metrics;\n const columnX = visibleColumnXs.get(shownColumnTooltip);\n const columnWidth = visibleColumnWidths.get(shownColumnTooltip);\n\n assertNotNull(columnX);\n assertNotNull(columnWidth);\n\n const left =\n gridRect.left +\n clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin);\n\n return {\n top: gridRect.top + (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left:\n gridRect.left +\n clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin),\n bottom: gridRect.top + columnHeaderMaxDepth * columnHeaderHeight,\n right:\n gridRect.left +\n clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin) +\n 1,\n width: 1,\n height: columnHeaderHeight,\n x: left,\n y: gridRect.top,\n toJSON: () => {\n throw new Error('not implemented');\n },\n };\n }\n\n getOverflowButtonTooltip = memoize(\n (overflowButtonTooltipProps: CSSProperties): ReactNode => {\n if (overflowButtonTooltipProps == null) {\n return null;\n }\n\n const wrapperStyle: CSSProperties = {\n position: 'absolute',\n ...overflowButtonTooltipProps,\n pointerEvents: 'none',\n };\n\n const popperOptions: PopperOptions = {\n placement: 'left',\n modifiers: {\n flip: {\n behavior: ['left', 'right'],\n },\n },\n };\n\n return (\n <div style={wrapperStyle}>\n <Tooltip\n key={Date.now()}\n options={popperOptions}\n ref={this.handleTooltipRef}\n >\n View full contents\n </Tooltip>\n </div>\n );\n }\n );\n\n handleGotoRowSelectedRowNumberSubmit(): void {\n const { gotoRow: rowNumber } = this.state;\n this.focusRowInGrid(rowNumber);\n }\n\n focusRowInGrid(rowNumber: string): void {\n const { model } = this.props;\n const { rowCount } = model;\n this.setState({ gotoRow: rowNumber });\n if (rowNumber === '') {\n this.setState({ gotoRowError: '' });\n return;\n }\n const rowInt = parseInt(rowNumber, 10);\n if (rowInt > rowCount || rowInt < -rowCount) {\n this.setState({ gotoRowError: 'Invalid row index' });\n } else if (rowInt === 0) {\n this.setState({ gotoRowError: '' });\n this.grid?.setFocusRow(0);\n } else if (rowInt < 0) {\n this.setState({ gotoRowError: '' });\n this.grid?.setFocusRow(rowInt + rowCount);\n } else {\n this.grid?.setFocusRow(rowInt - 1);\n this.setState({ gotoRowError: '' });\n }\n }\n\n handleGotoRowSelectedRowNumberChanged(\n event: ChangeEvent<HTMLInputElement>\n ): void {\n const rowNumber = event.target.value;\n this.focusRowInGrid(rowNumber);\n }\n\n getColumnTooltip(\n visibleIndex: VisibleIndex,\n metrics: GridMetrics,\n model: IrisGridModel\n ): ReactNode {\n const {\n columnHeaderHeight,\n columnHeaderMaxDepth,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n } = metrics;\n const columnX = visibleColumnXs.get(visibleIndex);\n const columnWidth = visibleColumnWidths.get(visibleIndex);\n\n if (columnX == null || columnWidth == null) {\n return null;\n }\n\n /**\n * Create a wrapper dom element, the size of the column header.\n * The wrapper acts as tooltip parent, the tooltip component\n * will trigger hide on mouseleave of wrapper or tooltip.\n * The wrapper should be bound to within the grid dimensions,\n * so popper only remains triggered while mouse is inside the panel.\n */\n const boundedLeft = Math.max(0, columnX);\n let boundedWidth = columnWidth;\n if (columnX + columnWidth > width) {\n // column is extending past right edge\n boundedWidth = width - columnX;\n } else if (columnX < 0) {\n // column is extending past left edge\n boundedWidth = columnWidth - Math.abs(columnX);\n }\n\n const wrapperStyle: CSSProperties = {\n position: 'absolute',\n top: (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left: boundedLeft,\n width: boundedWidth,\n height: columnHeaderHeight,\n pointerEvents: 'none',\n };\n\n /**\n * Because the popper parent wrapper center is no longer the same as\n * the column label center, we create a popper virtual ref, to handle\n * positioning and keep the popper centered on the label. Creates a\n * 1px x headerHeight virtual object, placed centered on the column\n * label, clamped to 0 + margin to width - margin. We add a margin,\n * otherwise the arrow wants to escape the boundary.\n */\n const virtualReference: ReferenceObject = {\n clientWidth: 1,\n clientHeight: columnHeaderHeight,\n getBoundingClientRect: this.getColumnBoundingRect,\n };\n\n const popperOptions: PopperOptions = {\n placement: 'bottom',\n modifiers: {\n flip: {\n behavior: ['bottom', 'top'],\n },\n },\n };\n\n const modelColumn = this.getModelColumn(visibleIndex);\n if (modelColumn == null) return null;\n\n const column = model.columns[modelColumn];\n if (column == null) return null;\n\n return (\n <div style={wrapperStyle}>\n <Tooltip\n key={column.name}\n timeout={400}\n interactive\n options={popperOptions}\n ref={this.handleTooltipRef}\n referenceObject={virtualReference}\n onExited={() => {\n this.setState({ shownColumnTooltip: null });\n }}\n >\n <ColumnStatistics\n model={model}\n column={column}\n onStatistics={() => {\n this.tooltip?.update();\n }}\n />\n </Tooltip>\n </div>\n );\n }\n\n render(): ReactElement | null {\n const {\n children,\n customFilters,\n getDownloadWorker,\n isSelectingColumn,\n isStuckToBottom,\n isStuckToRight,\n model,\n name,\n onlyFetchVisibleColumns,\n alwaysFetchColumns,\n advancedSettings,\n onAdvancedSettingsChange,\n canDownloadCsv,\n onCreateChart,\n } = this.props;\n const {\n metricCalculator,\n metrics,\n isFilterBarShown,\n isSelectingPartition,\n isMenuShown,\n isReady,\n copyOperation,\n focusedFilterBarColumn,\n loadingText,\n loadingScrimProgress,\n loadingSpinnerShown,\n keyHandlers,\n mouseHandlers,\n shownColumnTooltip,\n hoverAdvancedFilter,\n shownAdvancedFilter,\n hoverSelectColumn,\n quickFilters,\n advancedFilters,\n partition,\n partitionFilters,\n partitionTable,\n partitionColumn,\n searchFilter,\n selectDistinctColumns,\n\n movedColumns,\n movedRows,\n\n formatter,\n conditionalFormats,\n conditionalFormatPreview,\n conditionalFormatEditIndex,\n\n sorts,\n reverseType,\n customColumns,\n\n selectedRanges,\n isTableDownloading,\n tableDownloadStatus,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n\n showSearchBar,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n\n aggregationSettings,\n selectedAggregation,\n rollupConfig,\n openOptions,\n pendingSavePromise,\n pendingSaveError,\n pendingRowCount,\n pendingDataErrors,\n pendingDataMap,\n toastMessage,\n frozenColumns,\n showOverflowModal,\n overflowText,\n overflowButtonTooltipProps,\n isGotoRowShown,\n gotoRow,\n gotoRowError,\n } = this.state;\n if (!isReady) {\n return null;\n }\n\n const theme = this.getTheme();\n\n const filter = this.getCachedFilter(\n customFilters,\n quickFilters,\n advancedFilters,\n partitionFilters,\n searchFilter\n );\n\n const userColumnWidths = metricCalculator.getUserColumnWidths();\n const stateOverride = this.getCachedStateOverride(\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverseType,\n rollupConfig,\n isMenuShown\n );\n const top = metrics ? metrics.top : 0;\n const bottom = metrics ? metrics.bottomViewport : 0;\n let left = null;\n let right = null;\n if (onlyFetchVisibleColumns) {\n left = metrics ? metrics.left : 0;\n right = metrics ? metrics.right : 0;\n }\n const isVisible =\n metrics != null && metrics.width > 0 && metrics.height > 0;\n const isRollup = (rollupConfig?.columns?.length ?? 0) > 0;\n\n let focusField = null;\n\n const debounceMs = metrics\n ? Math.min(\n Math.max(IrisGrid.minDebounce, Math.round(metrics.rowCount / 200)),\n IrisGrid.maxDebounce\n )\n : IrisGrid.maxDebounce;\n\n if (isFilterBarShown && focusedFilterBarColumn != null && metrics != null) {\n const {\n gridX,\n gridY,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n } = metrics;\n const columnX = visibleColumnXs.get(focusedFilterBarColumn);\n const columnWidth = visibleColumnWidths.get(focusedFilterBarColumn);\n if (columnX != null && columnWidth != null) {\n const x = gridX + columnX;\n const y = gridY - (theme.filterBarHeight ?? 0);\n const fieldWidth = columnWidth + 1; // cover right border\n const fieldHeight = (theme.filterBarHeight ?? 0) - 1; // remove bottom border\n const style = {\n top: y,\n left: x,\n minWidth: Math.min(fieldWidth, width - x), // Don't cause overflow\n height: fieldHeight,\n };\n let value = '';\n let isValid = true;\n const modelColumn = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelColumn);\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter != null) {\n value = quickFilter.text;\n isValid = quickFilter.filter != null;\n }\n const isBarFiltered =\n quickFilters.size !== 0 || advancedFilters.size !== 0;\n focusField = (\n <FilterInputField\n ref={this.filterInputRef}\n style={style}\n className={classNames({\n error: !isValid,\n active: value !== '' || advancedFilter != null,\n 'iris-grid-has-filter': isBarFiltered,\n })}\n isAdvancedFilterSet={advancedFilter != null}\n onAdvancedFiltersTriggered={() => {\n this.setState({ shownAdvancedFilter: focusedFilterBarColumn });\n }}\n key={focusedFilterBarColumn}\n onChange={this.handleFilterBarChange}\n onDone={this.handleFilterBarDone}\n onTab={this.handleFilterBarTab}\n onContextMenu={this.grid?.handleContextMenu}\n debounceMs={debounceMs}\n value={value}\n />\n );\n }\n }\n\n let loadingElement = null;\n if (loadingText != null) {\n const loadingStatus = (\n <div className=\"iris-grid-loading-status\">\n <div\n className={classNames('iris-grid-loading-status-bar', {\n show: loadingSpinnerShown,\n })}\n >\n {loadingText}\n </div>\n <button\n type=\"button\"\n onClick={this.handleCancel}\n className={classNames('iris-grid-btn-cancel', {\n show: loadingSpinnerShown,\n })}\n >\n <FontAwesomeIcon icon={vsClose} transform=\"down-1\" />\n Cancel\n </button>\n </div>\n );\n const gridY = metrics ? metrics.gridY : 0;\n loadingElement = (\n <div className=\"iris-grid-loading\" style={{ top: gridY }}>\n {loadingStatus}\n </div>\n );\n }\n\n let columnTooltip: React.ReactNode = null;\n if (shownColumnTooltip != null && metrics) {\n columnTooltip = this.getColumnTooltip(shownColumnTooltip, metrics, model);\n // #510 We may need to update the position of the tooltip if it's already opened and columns are resized\n this.tooltip?.update();\n }\n\n const filterBar = [];\n if (metrics && isFilterBarShown) {\n const {\n gridX,\n gridY,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n } = metrics;\n const { filterBarHeight } = theme;\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n\n const columnX = visibleColumnXs.get(columnIndex);\n const columnWidth = visibleColumnWidths.get(columnIndex);\n const modelColumn = this.getModelColumn(columnIndex);\n if (modelColumn != null) {\n const isFilterable = model.isFilterable(modelColumn);\n if (\n isFilterable &&\n columnX != null &&\n columnWidth != null &&\n columnWidth > 0\n ) {\n const x = gridX + columnX + columnWidth - 24;\n const y = gridY - (filterBarHeight ?? 0) + 2; // 2 acts as top margin for the button\n const style: CSSProperties = {\n position: 'absolute',\n top: y,\n left: x,\n };\n const advancedFilter = advancedFilters.get(modelColumn);\n const isFilterSet = advancedFilter != null;\n const isFilterVisible =\n columnIndex === hoverAdvancedFilter ||\n columnIndex === focusedFilterBarColumn ||\n isFilterSet;\n const element = (\n <div\n className={classNames('advanced-filter-button-container', {\n hidden: !isFilterVisible,\n })}\n key={columnIndex}\n style={style}\n >\n {isFilterVisible && (\n <Button\n kind=\"ghost\"\n className={classNames(\n 'btn-link-icon advanced-filter-button',\n {\n 'filter-set': isFilterSet,\n }\n )}\n onClick={() => {\n this.setState({ shownAdvancedFilter: columnIndex });\n }}\n onContextMenu={event => {\n this.grid?.handleContextMenu(event);\n }}\n onMouseEnter={() => {\n this.setState({ hoverAdvancedFilter: columnIndex });\n }}\n onMouseLeave={() => {\n this.setState({ hoverAdvancedFilter: null });\n }}\n >\n <div className=\"fa-layers\">\n <FontAwesomeIcon\n icon={dhFilterFilled}\n className=\"filter-solid\"\n />\n <FontAwesomeIcon\n icon={vsFilter}\n className=\"filter-light\"\n />\n </div>\n </Button>\n )}\n </div>\n );\n filterBar.push(element);\n }\n }\n }\n }\n const advancedFilterMenus = [];\n if (metrics) {\n const {\n gridX,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n columnHeaderHeight,\n } = metrics;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n const columnX = visibleColumnXs.get(columnIndex);\n const columnWidth = visibleColumnWidths.get(columnIndex);\n if (columnX != null && columnWidth != null && columnWidth > 0) {\n const xColumnHeader = gridX + columnX;\n const xFilterBar = gridX + columnX + columnWidth - 20;\n const style: CSSProperties = isFilterBarShown\n ? {\n position: 'absolute',\n top: columnHeaderHeight,\n left: xFilterBar,\n width: 20,\n height: theme.filterBarHeight,\n }\n : {\n position: 'absolute',\n top: 0,\n left: xColumnHeader,\n width: columnWidth,\n height: columnHeaderHeight,\n };\n const modelColumn = this.getModelColumn(columnIndex);\n if (modelColumn != null) {\n const column = model.columns[modelColumn];\n const advancedFilter = advancedFilters.get(modelColumn);\n const { options: advancedFilterOptions } = advancedFilter || {};\n const sort = TableUtils.getSortForColumn(model.sort, modelColumn);\n const sortDirection = sort ? sort.direction : null;\n const element = (\n <div\n key={columnIndex}\n className=\"advanced-filter-menu-container\"\n style={style}\n >\n <Popper\n className=\"advanced-filter-menu-popper\"\n onEntered={this.getAdvancedMenuOpenedHandler(columnIndex)}\n onExited={() => {\n this.handleAdvancedMenuClosed(columnIndex);\n }}\n isShown={shownAdvancedFilter === columnIndex}\n interactive\n closeOnBlur\n options={{\n positionFixed: true,\n }}\n >\n {this.getCachedAdvancedFilterMenuActions(\n model,\n column,\n advancedFilterOptions,\n sortDirection,\n formatter\n )}\n </Popper>\n </div>\n );\n advancedFilterMenus.push(element);\n }\n }\n }\n }\n\n const optionItems = this.getCachedOptionItems(\n onCreateChart !== undefined && model.isChartBuilderAvailable,\n model.isCustomColumnsAvailable,\n model.isFormatColumnsAvailable,\n model.isRollupAvailable,\n model.isTotalsAvailable,\n model.isSelectDistinctAvailable,\n model.isExportAvailable,\n this.toggleFilterBarAction,\n this.toggleSearchBarAction,\n this.toggleGotoRowAction,\n isFilterBarShown,\n showSearchBar,\n canDownloadCsv,\n this.isTableSearchAvailable(),\n isGotoRowShown,\n advancedSettings.size > 0\n );\n\n const openOptionsStack = openOptions.map(option => {\n switch (option.type) {\n case OptionType.CHART_BUILDER:\n return (\n <ChartBuilder\n model={model}\n onChange={this.handleChartChange}\n onSubmit={this.handleChartCreate}\n key={OptionType.CHART_BUILDER}\n />\n );\n case OptionType.VISIBILITY_ORDERING_BUILDER:\n return (\n <VisibilityOrderingBuilder\n model={model}\n movedColumns={movedColumns}\n userColumnWidths={userColumnWidths}\n onColumnVisibilityChanged={this.handleColumnVisibilityChanged}\n onMovedColumnsChanged={this.handleMovedColumnsChanged}\n key={OptionType.VISIBILITY_ORDERING_BUILDER}\n />\n );\n case OptionType.CONDITIONAL_FORMATTING:\n return (\n <ConditionalFormattingMenu\n rules={conditionalFormats}\n onChange={this.handleConditionalFormatsChange}\n onCreate={this.handleConditionalFormatCreate}\n onSelect={this.handleConditionalFormatEdit}\n />\n );\n case OptionType.CONDITIONAL_FORMATTING_EDIT:\n assertNotNull(model.columns);\n assertNotNull(this.handleConditionalFormatEditorUpdate);\n return (\n <ConditionalFormatEditor\n columns={model.columns}\n rule={conditionalFormatPreview}\n onUpdate={this.handleConditionalFormatEditorUpdate}\n onSave={this.handleConditionalFormatEditorSave}\n onCancel={this.handleConditionalFormatEditorCancel}\n />\n );\n case OptionType.CUSTOM_COLUMN_BUILDER:\n return (\n <CustomColumnBuilder\n model={model}\n customColumns={customColumns}\n onSave={this.handleUpdateCustomColumns}\n onCancel={this.handleMenuBack}\n key={OptionType.CUSTOM_COLUMN_BUILDER}\n />\n );\n case OptionType.ROLLUP_ROWS:\n return (\n <RollupRows\n model={model}\n onChange={this.handleRollupChange}\n config={rollupConfig}\n key={OptionType.ROLLUP_ROWS}\n />\n );\n case OptionType.AGGREGATIONS:\n return (\n <Aggregations\n settings={aggregationSettings}\n isRollup={isRollup}\n onChange={this.handleAggregationsChange}\n onEdit={this.handleAggregationEdit}\n />\n );\n case OptionType.AGGREGATION_EDIT:\n return (\n selectedAggregation && (\n <AggregationEdit\n aggregation={selectedAggregation}\n columns={model.originalColumns}\n onChange={this.handleAggregationChange}\n />\n )\n );\n case OptionType.TABLE_EXPORTER:\n return (\n <TableCsvExporter\n model={model}\n name={name}\n userColumnWidths={userColumnWidths}\n movedColumns={movedColumns}\n isDownloading={isTableDownloading}\n tableDownloadStatus={tableDownloadStatus}\n tableDownloadProgress={tableDownloadProgress}\n tableDownloadEstimatedTime={\n tableDownloadEstimatedTime ?? undefined\n }\n onDownload={this.handleDownloadTable}\n onDownloadStart={this.handleDownloadTableStart}\n onCancel={this.handleCancelDownloadTable}\n selectedRanges={selectedRanges}\n key={OptionType.TABLE_EXPORTER}\n />\n );\n case OptionType.SELECT_DISTINCT:\n return (\n <SelectDistinctBuilder\n model={model}\n selectDistinctColumns={selectDistinctColumns}\n onChange={this.handleSelectDistinctChanged}\n />\n );\n case OptionType.ADVANCED_SETTINGS:\n return (\n <AdvancedSettingsMenu\n items={advancedSettings}\n onChange={onAdvancedSettingsChange}\n />\n );\n\n default:\n throw Error(`Unexpected option type ${option.type}`);\n }\n });\n\n const hiddenColumns = this.getCachedHiddenColumns(\n IrisGridUtils.getHiddenColumns(userColumnWidths)\n );\n\n return (\n <div className=\"iris-grid\" role=\"presentation\">\n <div className=\"iris-grid-column\">\n {children != null && <div className=\"iris-grid-bar\">{children}</div>}\n <CSSTransition\n in={isSelectingPartition}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"iris-grid-bar-horizontal\"\n onEnter={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExit={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"iris-grid-partition-selector-wrapper iris-grid-bar iris-grid-bar-primary\">\n {partitionTable && partitionColumn && partition != null && (\n <IrisGridPartitionSelector\n table={partitionTable}\n getFormattedString={(\n value: unknown,\n type: string,\n stringName: string\n ) => model.displayString(value, type, stringName)}\n columnName={partitionColumn.name}\n partition={partition}\n onChange={this.handlePartitionChange}\n onFetchAll={this.handlePartitionFetchAll}\n onAppend={this.handlePartitionAppend}\n onDone={this.handlePartitionDone}\n />\n )}\n </div>\n </CSSTransition>\n <CSSTransition\n in={showSearchBar}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"iris-grid-bar-horizontal\"\n onEnter={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExit={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"iris-grid-bar\">\n <CrossColumnSearch\n value={searchValue}\n selectedColumns={selectedSearchColumns}\n invertSelection={invertSearchColumns}\n onChange={this.handleCrossColumnSearch}\n columns={model.columns}\n ref={this.crossColumnRef}\n />\n </div>\n </CSSTransition>\n <div\n className=\"grid-wrapper\"\n ref={gridWrapper => {\n this.gridWrapper = gridWrapper;\n }}\n >\n <Grid\n ref={grid => {\n this.grid = grid;\n }}\n isStickyBottom={!isEditableGridModel(model) || !model.isEditable}\n isStuckToBottom={isStuckToBottom}\n isStuckToRight={isStuckToRight}\n metricCalculator={metricCalculator}\n model={model}\n keyHandlers={keyHandlers}\n mouseHandlers={mouseHandlers}\n movedColumns={movedColumns}\n movedRows={movedRows}\n onError={this.handleGridError}\n onViewChanged={this.handleViewChanged}\n onSelectionChanged={this.handleSelectionChanged}\n onMovedColumnsChanged={this.handleMovedColumnsChanged}\n renderer={this.renderer}\n stateOverride={stateOverride}\n theme={theme}\n />\n <IrisGridCellOverflowModal\n isOpen={showOverflowModal}\n text={overflowText}\n onClose={this.handleOverflowClose}\n />\n {isVisible && (\n <IrisGridModelUpdater\n model={model}\n modelColumns={model.columns}\n top={top}\n bottom={bottom}\n left={left}\n right={right}\n filter={filter}\n formatter={formatter}\n sorts={sorts}\n reverseType={reverseType}\n movedColumns={movedColumns}\n customColumns={customColumns}\n hiddenColumns={hiddenColumns}\n alwaysFetchColumns={this.getAlwaysFetchColumns(\n alwaysFetchColumns,\n model.columns,\n movedColumns,\n model.floatingLeftColumnCount,\n model.floatingRightColumnCount,\n this.grid?.state.draggingColumn?.range\n )}\n formatColumns={this.getCachedPreviewFormatColumns(\n this.getCachedModelColumns(model, customColumns),\n conditionalFormats,\n conditionalFormatPreview,\n // Disable the preview format when we press Back on the format edit page\n openOptions[openOptions.length - 1]?.type ===\n OptionType.CONDITIONAL_FORMATTING_EDIT\n ? conditionalFormatEditIndex ?? undefined\n : undefined\n )}\n rollupConfig={this.getModelRollupConfig(\n model.originalColumns,\n rollupConfig,\n aggregationSettings\n )}\n totalsConfig={this.getModelTotalsConfig(\n model.columns,\n rollupConfig,\n aggregationSettings\n )}\n selectDistinctColumns={selectDistinctColumns}\n pendingRowCount={pendingRowCount}\n pendingDataMap={pendingDataMap}\n frozenColumns={frozenColumns}\n />\n )}\n {!isMenuShown && (\n <div className=\"grid-settings-button\">\n <Button\n kind=\"ghost\"\n data-testid={`btn-iris-grid-settings-button-${name}`}\n onClick={this.handleMenu}\n icon={<FontAwesomeIcon icon={vsMenu} transform=\"up-1\" />}\n tooltip=\"Table Options\"\n />\n </div>\n )}\n {focusField}\n {loadingElement}\n {filterBar}\n {columnTooltip}\n {advancedFilterMenus}\n {overflowButtonTooltipProps &&\n this.getOverflowButtonTooltip(overflowButtonTooltipProps)}\n </div>\n <GotoRow\n model={model}\n isShown={isGotoRowShown}\n gotoRow={gotoRow}\n gotoRowError={gotoRowError}\n onSubmit={this.handleGotoRowSelectedRowNumberSubmit}\n onGotoRowNumberChanged={this.handleGotoRowSelectedRowNumberChanged}\n onClose={this.handleGotoRowClosed}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={() => {\n this.handleAnimationStart();\n this.focus();\n }}\n onExited={this.handleAnimationEnd}\n />\n\n <PendingDataBottomBar\n error={pendingSaveError}\n isSaving={pendingSavePromise != null}\n saveTooltip={`Commit (${this.commitAction.shortcut.getDisplayText()})`}\n discardTooltip={`Discard (${this.discardAction.shortcut.getDisplayText()})`}\n pendingDataErrors={pendingDataErrors}\n pendingDataMap={pendingDataMap}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n onSave={this.handlePendingCommitClicked}\n onDiscard={this.handlePendingDiscardClicked}\n />\n <ToastBottomBar>{toastMessage}</ToastBottomBar>\n <IrisGridCopyHandler\n model={model}\n copyOperation={copyOperation ?? undefined}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n />\n <TableSaver\n ref={tableSaver => {\n this.tableSaver = tableSaver;\n }}\n getDownloadWorker={getDownloadWorker}\n onDownloadCompleted={this.handleDownloadCompleted}\n onDownloadCanceled={this.handleDownloadCanceled}\n onDownloadProgressUpdate={this.handleDownloadProgressUpdate}\n isDownloading={\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING\n }\n formatter={formatter}\n />\n </div>\n <CSSTransition\n in={isMenuShown}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-left\"\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"table-sidebar\">\n <Stack>\n <Page title=\"Table Options\" onClose={this.handleMenuClose}>\n <Menu\n onSelect={i => this.handleMenuSelect(optionItems[i])}\n items={optionItems}\n />\n </Page>\n {openOptionsStack.map((option, i) => (\n <Page\n title={openOptions[i].title}\n onBack={this.handleMenuBack}\n onClose={this.handleMenuClose}\n key={openOptions[i].type}\n >\n {option}\n </Page>\n ))}\n </Stack>\n </div>\n </CSSTransition>\n <ContextActions actions={this.contextActions} />\n </div>\n );\n }\n}\n\nexport default IrisGrid;\n"],"mappings":"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"}
|