@deephaven/iris-grid 0.27.1-beta.3 → 0.28.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.
Files changed (32) hide show
  1. package/dist/IrisGrid.d.ts +2 -1
  2. package/dist/IrisGrid.d.ts.map +1 -1
  3. package/dist/IrisGrid.js +75 -48
  4. package/dist/IrisGrid.js.map +1 -1
  5. package/dist/IrisGridMetricCalculator.d.ts +1 -2
  6. package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
  7. package/dist/IrisGridMetricCalculator.js +0 -18
  8. package/dist/IrisGridMetricCalculator.js.map +1 -1
  9. package/dist/IrisGridProxyModel.d.ts +3 -0
  10. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  11. package/dist/IrisGridProxyModel.js +19 -0
  12. package/dist/IrisGridProxyModel.js.map +1 -1
  13. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  14. package/dist/IrisGridTableModelTemplate.js +9 -4
  15. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  16. package/dist/IrisGridTreeTableModel.d.ts +4 -1
  17. package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
  18. package/dist/IrisGridTreeTableModel.js +19 -1
  19. package/dist/IrisGridTreeTableModel.js.map +1 -1
  20. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +2 -0
  21. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
  22. package/dist/mousehandlers/IrisGridContextMenuHandler.js +53 -3
  23. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  24. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts +4 -3
  25. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts.map +1 -1
  26. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +8 -10
  27. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  28. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts +2 -2
  29. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts.map +1 -1
  30. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +7 -13
  31. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  32. package/package.json +15 -15
@@ -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","Type","FilterType","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","SEEK_ROW_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","input","gotoValue","debouncedSeekRow","seekRow","handleGotoRowOpened","handleGotoRowClosed","handleAdvancedMenuClosed","handleAggregationChange","handleAggregationsChange","handleAggregationEdit","handleAnimationLoop","handleAnimationStart","handleAnimationEnd","handleChartChange","handleChartCreate","handleGridError","handleFilterBarChange","handleFilterBarDone","handleFilterBarTab","handleCancel","handleMenu","handleMenuClose","handleMenuSelect","handleMenuBack","handleRequestFailed","handleSelectionChanged","handleMovedColumnsChanged","handleHeaderGroupsChanged","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","handleGotoValueSelectedColumnNameChanged","handleGotoValueSelectedFilterChanged","handleGotoValueChanged","handleGotoValueSubmitted","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","columnHeaderGroups","keyHandlers","mouseHandlers","initialMovedColumns","initialMovedRows","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","isGotoShown","gotoRow","gotoRowError","gotoValueError","gotoValueSelectedColumnName","gotoValueSelectedFilter","eq","initialColumnHeaderGroups","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","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","isVisible","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","parseColumnHeaderGroups","groups","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","inputString","isBackwards","selectedColumnName","isSeekRowAvailable","selectedColumn","searchFromRow","isContains","isEquals","eqIgnoreCase","columnDataType","dataType","STRING","ValueType","DATETIME","startDate","parseDateRange","DECIMAL","INT","isBigDecimalType","isBigIntegerType","inputValue","parseInt","NUMBER","setFocusRow","cancelDownload","FINISHED","CANCELED","deleteRanges","columnAllowedCursor","cursor","topOffset","irisGridState","gridState","onStateChange","gridRect","popperMargin","columnHeaderHeight","allColumnXs","allColumnWidths","width","columnHeaderMaxDepth","columnX","bottom","right","x","y","toJSON","rowNumber","rowInt","target","getColumnTooltip","boundedLeft","boundedWidth","abs","virtualReference","clientWidth","clientHeight","render","children","getDownloadWorker","isStuckToBottom","isStuckToRight","onlyFetchVisibleColumns","onAdvancedSettingsChange","getCachedFilter","stateOverride","getCachedStateOverride","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 ColumnGroup,\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 {\n Type as FilterType,\n TypeValue as FilterTypeValue,\n} 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 {\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';\nimport ColumnHeaderGroup from './ColumnHeaderGroup';\n\nconst log = Log.module('IrisGrid');\n\nconst UPDATE_DOWNLOAD_THROTTLE = 500;\n\nconst SET_FILTER_DEBOUNCE = 250;\n\nconst SEEK_ROW_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 columnHeaderGroups?: ColumnHeaderGroup[];\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 gotoValueError: string;\n isGotoShown: boolean;\n\n gotoValueSelectedColumnName: ColumnName;\n gotoValueSelectedFilter: FilterTypeValue;\n gotoValue: string;\n\n columnHeaderGroups: ColumnHeaderGroup[];\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.handleHeaderGroupsChanged = this.handleHeaderGroupsChanged.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 this.handleGotoValueSelectedColumnNameChanged = this.handleGotoValueSelectedColumnNameChanged.bind(\n this\n );\n this.handleGotoValueSelectedFilterChanged = this.handleGotoValueSelectedFilterChanged.bind(\n this\n );\n this.handleGotoValueChanged = this.handleGotoValueChanged.bind(this);\n this.handleGotoValueSubmitted = this.handleGotoValueSubmitted.bind(this);\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 columnHeaderGroups,\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\n ? movedColumnsProp\n : model.initialMovedColumns;\n const movedRows =\n movedRowsProp.length > 0 ? movedRowsProp : model.initialMovedRows;\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 isGotoShown: false,\n gotoRow: '',\n gotoRowError: '',\n gotoValueError: '',\n\n gotoValueSelectedColumnName: model.columns[0].name,\n gotoValueSelectedFilter: FilterType.eq,\n gotoValue: '',\n columnHeaderGroups: columnHeaderGroups ?? model.initialColumnHeaderGroups,\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: 'Hide, Group, and Order Columns',\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: '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 isVisible: boolean\n ): void {\n const { metricCalculator } = this.state;\n if (isVisible) {\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 = '', value = '', columnName = ''): void {\n const { isGotoShown } = this.state;\n if (row || value) {\n // if invoked with a row, keep open instead of toggle\n this.setState({\n isGotoShown: true,\n gotoRow: row,\n gotoValue: value,\n gotoValueSelectedColumnName: columnName,\n gotoRowError: '',\n gotoValueError: '',\n });\n this.focusRowInGrid(row);\n return;\n }\n this.setState({\n isGotoShown: !isGotoShown,\n gotoRow: '',\n gotoValue: '',\n gotoRowError: '',\n gotoValueError: '',\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({ isGotoShown: true });\n }\n\n handleGotoRowClosed(): void {\n this.setState({ isGotoShown: 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\n ): void {\n this.setState({ movedColumns }, onChangeApplied);\n }\n\n handleHeaderGroupsChanged(columnHeaderGroups: ColumnGroup[]): void {\n const { model } = this.props;\n this.setState(\n {\n columnHeaderGroups: IrisGridUtils.parseColumnHeaderGroups(\n model,\n columnHeaderGroups\n ).groups,\n },\n () => this.grid?.forceUpdate()\n );\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 if (customColumns.length > 0) {\n // If there are no custom columns, the change handler never fires\n // This causes the loader to stay until canceled by the user\n this.startLoading('Applying custom columns...');\n }\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 async seekRow(inputString: string, isBackwards = false): Promise<void> {\n const {\n gotoValueSelectedColumnName: selectedColumnName,\n gotoValueSelectedFilter,\n } = this.state;\n const { model } = this.props;\n if (!model.isSeekRowAvailable) {\n return;\n }\n\n if (inputString === '') {\n return;\n }\n\n const columnIndex = model.getColumnIndexByName(selectedColumnName);\n if (columnIndex === undefined) {\n return;\n }\n\n const selectedColumn = model.columns[columnIndex];\n\n let searchFromRow;\n\n if (this.grid) {\n ({ selectionEndRow: searchFromRow } = this.grid.state);\n }\n\n if (searchFromRow == null) {\n searchFromRow = 0;\n }\n\n const isContains = gotoValueSelectedFilter === FilterType.contains;\n const isEquals =\n gotoValueSelectedFilter === FilterType.eq ||\n gotoValueSelectedFilter === FilterType.eqIgnoreCase;\n\n try {\n const columnDataType = TableUtils.getNormalizedType(selectedColumn.type);\n\n let rowIndex;\n\n switch (columnDataType) {\n case TableUtils.dataType.STRING: {\n rowIndex = await model.seekRow(\n isBackwards === true ? searchFromRow - 1 : searchFromRow + 1,\n selectedColumn,\n dh.ValueType.STRING,\n inputString,\n isEquals,\n isContains,\n isBackwards ?? false\n );\n break;\n }\n case TableUtils.dataType.DATETIME: {\n const { formatter } = model;\n const [startDate] = DateUtils.parseDateRange(\n inputString,\n formatter.timeZone\n );\n rowIndex = await model.seekRow(\n isBackwards === true ? searchFromRow - 1 : searchFromRow + 1,\n selectedColumn,\n dh.ValueType.DATETIME,\n startDate,\n undefined,\n undefined,\n isBackwards ?? false\n );\n break;\n }\n case TableUtils.dataType.DECIMAL:\n case TableUtils.dataType.INT: {\n if (\n !TableUtils.isBigDecimalType(selectedColumn.type) &&\n !TableUtils.isBigIntegerType(selectedColumn.type)\n ) {\n const inputValue = parseInt(inputString, 10);\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.NUMBER,\n inputValue,\n undefined,\n undefined,\n isBackwards ?? false\n );\n } else {\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.STRING,\n inputString,\n undefined,\n undefined,\n isBackwards ?? false\n );\n }\n break;\n }\n default: {\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.STRING,\n inputString,\n undefined,\n undefined,\n isBackwards ?? false\n );\n }\n }\n\n this.grid?.setFocusRow(rowIndex);\n this.setState({ gotoValueError: '' });\n } catch (e: unknown) {\n this.setState({ gotoValueError: 'invalid input' });\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 allColumnXs,\n allColumnWidths,\n width,\n columnHeaderMaxDepth,\n } = metrics;\n const columnX = allColumnXs.get(shownColumnTooltip);\n const columnWidth = allColumnWidths.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: '', gotoValueError: '' });\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: '', gotoValueError: '' });\n this.grid?.setFocusRow(0);\n } else if (rowInt < 0) {\n this.setState({ gotoRowError: '', gotoValueError: '' });\n this.grid?.setFocusRow(rowInt + rowCount);\n } else {\n this.grid?.setFocusRow(rowInt - 1);\n this.setState({ gotoRowError: '', gotoValueError: '' });\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 allColumnXs,\n allColumnWidths,\n width,\n } = metrics;\n const columnX = allColumnXs.get(visibleIndex);\n const columnWidth = allColumnWidths.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 handleGotoValueSelectedColumnNameChanged(columnName: ColumnName): void {\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValueError: '',\n });\n }\n\n handleGotoValueSelectedFilterChanged(value: FilterTypeValue): void {\n this.setState({ gotoValueSelectedFilter: value, gotoValueError: '' });\n }\n\n handleGotoValueChanged = (input: string): void => {\n this.setState({ gotoValue: input });\n this.debouncedSeekRow(input);\n };\n\n debouncedSeekRow = debounce((input: string): void => {\n this.seekRow(input);\n }, SEEK_ROW_DEBOUNCE);\n\n handleGotoValueSubmitted(isBackwards?: boolean): void {\n const { gotoValue } = this.state;\n this.seekRow(gotoValue, isBackwards);\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 columnHeaderGroups,\n showOverflowModal,\n overflowText,\n overflowButtonTooltipProps,\n isGotoShown,\n gotoRow,\n gotoRowError,\n gotoValueError,\n gotoValueSelectedColumnName,\n gotoValue,\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 { gridX, gridY, allColumnXs, allColumnWidths, width } = metrics;\n const columnX = allColumnXs.get(focusedFilterBarColumn);\n const columnWidth = allColumnWidths.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 allColumnXs,\n allColumnWidths,\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 = allColumnXs.get(columnIndex);\n const columnWidth = allColumnWidths.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 allColumnXs,\n allColumnWidths,\n columnHeaderHeight,\n } = metrics;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n const columnX = allColumnXs.get(columnIndex);\n const columnWidth = allColumnWidths.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 isGotoShown,\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 columnHeaderGroups={columnHeaderGroups}\n onColumnVisibilityChanged={this.handleColumnVisibilityChanged}\n onMovedColumnsChanged={this.handleMovedColumnsChanged}\n onColumnHeaderGroupChanged={this.handleHeaderGroupsChanged}\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 columnHeaderGroups={columnHeaderGroups}\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={isGotoShown}\n gotoRow={gotoRow}\n gotoRowError={gotoRowError}\n gotoValueError={gotoValueError}\n onGotoRowSubmit={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 gotoValueSelectedColumnName={gotoValueSelectedColumnName}\n gotoValue={gotoValue}\n onGotoValueSelectedColumnNameChanged={\n this.handleGotoValueSelectedColumnNameChanged\n }\n onGotoValueSelectedFilterChanged={\n this.handleGotoValueSelectedFilterChanged\n }\n onGotoValueChanged={this.handleGotoValueChanged}\n onGotoValueSubmit={this.handleGotoValueSubmitted}\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","getOrThrow","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","Type","FilterType","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","SEEK_ROW_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","metricCalculator","userColumnWidths","getHiddenColumns","Map","initialColumnWidths","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","input","gotoValue","debouncedSeekRow","seekRow","handleGotoRowOpened","handleGotoRowClosed","handleAdvancedMenuClosed","handleAggregationChange","handleAggregationsChange","handleAggregationEdit","handleAnimationLoop","handleAnimationStart","handleAnimationEnd","handleChartChange","handleChartCreate","handleGridError","handleFilterBarChange","handleFilterBarDone","handleFilterBarTab","handleCancel","handleMenu","handleMenuClose","handleMenuSelect","handleMenuBack","handleRequestFailed","handleSelectionChanged","handleMovedColumnsChanged","handleHeaderGroupsChanged","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","handleColumnVisibilityReset","handleCrossColumnSearch","handleRollupChange","handleOverflowClose","getColumnBoundingRect","handleGotoRowSelectedRowNumberChanged","handleGotoValueSelectedColumnNameChanged","handleGotoValueSelectedFilterChanged","handleGotoValueChanged","handleGotoValueSubmitted","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","userRowHeights","canCopy","frozenColumns","columnHeaderGroups","keyHandlers","mouseHandlers","initialMovedColumns","initialMovedRows","layoutHints","hiddenColumns","getColumnIndexByName","searchColumns","focusedFilterBarColumn","metrics","partitionTable","shownAdvancedFilter","hoverAdvancedFilter","selectedRanges","copyOperation","loadingText","loadingSpinnerShown","shownColumnTooltip","conditionalFormatEditIndex","isTableDownloading","isReady","rollupSelectedColumns","selectedAggregation","openOptions","pendingRowCount","pendingSavePromise","pendingSaveError","toastMessage","showOverflowModal","overflowText","isGotoShown","gotoRow","gotoRowError","gotoValueError","gotoValueSelectedColumnName","gotoValueSelectedFilter","eq","initialColumnHeaderGroups","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","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","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","isVisible","defaultWidth","calculatedWidth","calculatedColumnWidths","resetColumnWidth","updateCanvasScale","updateCanvas","onPartitionAppend","isCanceled","onError","showAllColumns","entries","columnWidth","toggleSort","addToExisting","currentSorts","toggleSortForColumn","sortColumn","direction","none","isAbs","reverse","isReversible","focusIndex","isTextType","isTableSearchAvailable","searchDisplayMode","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","parseColumnHeaderGroups","groups","tooltip","startTimer","CONDITIONAL_FORMATTING_EDIT","oldCustomColumns","customColumn","removedColumnNames","getRemovedCustomColumnNames","newSorts","removeSortsInColumns","removeFiltersInColumns","removeColumnFromMovedColumns","newSelectDistinctColumns","removeColumnsFromSelectDistinctColumns","join","aggregation","AGGREGATION_EDIT","resetGridViewState","columnNames","INITIATING","fileName","frozenTable","tableSubscription","snapshotRanges","modelRanges","includeColumnHeaders","useUnformattedValues","startDownload","inputString","isBackwards","selectedColumnName","isSeekRowAvailable","selectedColumn","searchFromRow","isContains","isEquals","eqIgnoreCase","columnDataType","dataType","STRING","ValueType","DATETIME","startDate","parseDateRange","DECIMAL","INT","isBigDecimalType","isBigIntegerType","inputValue","parseInt","NUMBER","setFocusRow","cancelDownload","FINISHED","CANCELED","deleteRanges","columnAllowedCursor","cursor","topOffset","irisGridState","gridState","onStateChange","gridRect","popperMargin","columnHeaderHeight","allColumnXs","allColumnWidths","width","columnHeaderMaxDepth","columnX","bottom","right","x","y","toJSON","rowNumber","rowInt","target","getColumnTooltip","boundedLeft","boundedWidth","abs","virtualReference","clientWidth","clientHeight","render","children","getDownloadWorker","isStuckToBottom","isStuckToRight","onlyFetchVisibleColumns","onAdvancedSettingsChange","getCachedFilter","stateOverride","getCachedStateOverride","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","getCachedHiddenColumns","openOptionsStack","handleConditionalFormatEditorUpdate","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 getOrThrow,\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 ColumnGroup,\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 {\n Type as FilterType,\n TypeValue as FilterTypeValue,\n} 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 {\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';\nimport ColumnHeaderGroup from './ColumnHeaderGroup';\n\nconst log = Log.module('IrisGrid');\n\nconst UPDATE_DOWNLOAD_THROTTLE = 500;\n\nconst SET_FILTER_DEBOUNCE = 250;\n\nconst SEEK_ROW_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 columnHeaderGroups?: ColumnHeaderGroup[];\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 gotoValueError: string;\n isGotoShown: boolean;\n\n gotoValueSelectedColumnName: ColumnName;\n gotoValueSelectedFilter: FilterTypeValue;\n gotoValue: string;\n\n columnHeaderGroups: ColumnHeaderGroup[];\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.handleHeaderGroupsChanged = this.handleHeaderGroupsChanged.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.handleColumnVisibilityReset = this.handleColumnVisibilityReset.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 this.handleGotoValueSelectedColumnNameChanged = this.handleGotoValueSelectedColumnNameChanged.bind(\n this\n );\n this.handleGotoValueSelectedFilterChanged = this.handleGotoValueSelectedFilterChanged.bind(\n this\n );\n this.handleGotoValueChanged = this.handleGotoValueChanged.bind(this);\n this.handleGotoValueSubmitted = this.handleGotoValueSubmitted.bind(this);\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 columnHeaderGroups,\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\n ? movedColumnsProp\n : model.initialMovedColumns;\n const movedRows =\n movedRowsProp.length > 0 ? movedRowsProp : model.initialMovedRows;\n\n const metricCalculator = new IrisGridMetricCalculator({\n userColumnWidths: new Map(userColumnWidths),\n userRowHeights: new Map(userRowHeights),\n movedColumns,\n initialColumnWidths: new Map(\n model?.layoutHints?.hiddenColumns?.map(name => [\n model.getColumnIndexByName(name),\n 0,\n ])\n ),\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 isGotoShown: false,\n gotoRow: '',\n gotoRowError: '',\n gotoValueError: '',\n\n gotoValueSelectedColumnName: model.columns[0].name,\n gotoValueSelectedFilter: FilterType.eq,\n gotoValue: '',\n columnHeaderGroups: columnHeaderGroups ?? model.initialColumnHeaderGroups,\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: 'Hide, Group, and Order Columns',\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: '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 (\n metricCalculator: IrisGridMetricCalculator,\n userColumnWidths: ModelSizeMap\n ) =>\n IrisGridUtils.getHiddenColumns(\n new Map([...metricCalculator.initialColumnWidths, ...userColumnWidths])\n ),\n {\n max: 1,\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 isVisible: boolean\n ): void {\n const { metricCalculator, metrics } = this.state;\n assertNotNull(metrics);\n if (isVisible) {\n modelIndexes.forEach(modelIndex => {\n const defaultWidth = metricCalculator.initialColumnWidths.get(\n modelIndex\n );\n const calculatedWidth = getOrThrow(\n metrics.calculatedColumnWidths,\n modelIndex\n );\n\n if (defaultWidth !== calculatedWidth) {\n metricCalculator.setColumnWidth(modelIndex, calculatedWidth);\n } else {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n });\n } else {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.setColumnWidth(modelIndex, 0);\n });\n }\n this.grid?.forceUpdate();\n }\n\n handleColumnVisibilityReset(): void {\n const { metricCalculator, metrics } = this.state;\n const { model } = this.props;\n assertNotNull(metrics);\n for (let i = 0; i < metrics.columnCount; i += 1) {\n metricCalculator.resetColumnWidth(i);\n }\n this.handleMovedColumnsChanged(model.initialMovedColumns);\n this.handleHeaderGroupsChanged(model.initialColumnHeaderGroups);\n this.setState({\n frozenColumns: model.layoutHints?.frozenColumns ?? [],\n });\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 = '', value = '', columnName = ''): void {\n const { isGotoShown } = this.state;\n if (row || value) {\n // if invoked with a row, keep open instead of toggle\n this.setState({\n isGotoShown: true,\n gotoRow: row,\n gotoValue: value,\n gotoValueSelectedColumnName: columnName,\n gotoRowError: '',\n gotoValueError: '',\n });\n this.focusRowInGrid(row);\n return;\n }\n this.setState({\n isGotoShown: !isGotoShown,\n gotoRow: '',\n gotoValue: '',\n gotoRowError: '',\n gotoValueError: '',\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({ isGotoShown: true });\n }\n\n handleGotoRowClosed(): void {\n this.setState({ isGotoShown: 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\n ): void {\n this.setState({ movedColumns }, onChangeApplied);\n }\n\n handleHeaderGroupsChanged(columnHeaderGroups: ColumnGroup[]): void {\n const { model } = this.props;\n this.setState(\n {\n columnHeaderGroups: IrisGridUtils.parseColumnHeaderGroups(\n model,\n columnHeaderGroups\n ).groups,\n },\n () => this.grid?.forceUpdate()\n );\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 if (customColumns.length > 0) {\n // If there are no custom columns, the change handler never fires\n // This causes the loader to stay until canceled by the user\n this.startLoading('Applying custom columns...');\n }\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 async seekRow(inputString: string, isBackwards = false): Promise<void> {\n const {\n gotoValueSelectedColumnName: selectedColumnName,\n gotoValueSelectedFilter,\n } = this.state;\n const { model } = this.props;\n if (!model.isSeekRowAvailable) {\n return;\n }\n\n if (inputString === '') {\n return;\n }\n\n const columnIndex = model.getColumnIndexByName(selectedColumnName);\n if (columnIndex === undefined) {\n return;\n }\n\n const selectedColumn = model.columns[columnIndex];\n\n let searchFromRow;\n\n if (this.grid) {\n ({ selectionEndRow: searchFromRow } = this.grid.state);\n }\n\n if (searchFromRow == null) {\n searchFromRow = 0;\n }\n\n const isContains = gotoValueSelectedFilter === FilterType.contains;\n const isEquals =\n gotoValueSelectedFilter === FilterType.eq ||\n gotoValueSelectedFilter === FilterType.eqIgnoreCase;\n\n try {\n const columnDataType = TableUtils.getNormalizedType(selectedColumn.type);\n\n let rowIndex;\n\n switch (columnDataType) {\n case TableUtils.dataType.STRING: {\n rowIndex = await model.seekRow(\n isBackwards === true ? searchFromRow - 1 : searchFromRow + 1,\n selectedColumn,\n dh.ValueType.STRING,\n inputString,\n isEquals,\n isContains,\n isBackwards ?? false\n );\n break;\n }\n case TableUtils.dataType.DATETIME: {\n const { formatter } = model;\n const [startDate] = DateUtils.parseDateRange(\n inputString,\n formatter.timeZone\n );\n rowIndex = await model.seekRow(\n isBackwards === true ? searchFromRow - 1 : searchFromRow + 1,\n selectedColumn,\n dh.ValueType.DATETIME,\n startDate,\n undefined,\n undefined,\n isBackwards ?? false\n );\n break;\n }\n case TableUtils.dataType.DECIMAL:\n case TableUtils.dataType.INT: {\n if (\n !TableUtils.isBigDecimalType(selectedColumn.type) &&\n !TableUtils.isBigIntegerType(selectedColumn.type)\n ) {\n const inputValue = parseInt(inputString, 10);\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.NUMBER,\n inputValue,\n undefined,\n undefined,\n isBackwards ?? false\n );\n } else {\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.STRING,\n inputString,\n undefined,\n undefined,\n isBackwards ?? false\n );\n }\n break;\n }\n default: {\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.STRING,\n inputString,\n undefined,\n undefined,\n isBackwards ?? false\n );\n }\n }\n\n this.grid?.setFocusRow(rowIndex);\n this.setState({ gotoValueError: '' });\n } catch (e: unknown) {\n this.setState({ gotoValueError: 'invalid input' });\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 allColumnXs,\n allColumnWidths,\n width,\n columnHeaderMaxDepth,\n } = metrics;\n const columnX = allColumnXs.get(shownColumnTooltip);\n const columnWidth = allColumnWidths.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: '', gotoValueError: '' });\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: '', gotoValueError: '' });\n this.grid?.setFocusRow(0);\n } else if (rowInt < 0) {\n this.setState({ gotoRowError: '', gotoValueError: '' });\n this.grid?.setFocusRow(rowInt + rowCount);\n } else {\n this.grid?.setFocusRow(rowInt - 1);\n this.setState({ gotoRowError: '', gotoValueError: '' });\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 allColumnXs,\n allColumnWidths,\n width,\n } = metrics;\n const columnX = allColumnXs.get(visibleIndex);\n const columnWidth = allColumnWidths.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 handleGotoValueSelectedColumnNameChanged(columnName: ColumnName): void {\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValueError: '',\n });\n }\n\n handleGotoValueSelectedFilterChanged(value: FilterTypeValue): void {\n this.setState({ gotoValueSelectedFilter: value, gotoValueError: '' });\n }\n\n handleGotoValueChanged = (input: string): void => {\n this.setState({ gotoValue: input });\n this.debouncedSeekRow(input);\n };\n\n debouncedSeekRow = debounce((input: string): void => {\n this.seekRow(input);\n }, SEEK_ROW_DEBOUNCE);\n\n handleGotoValueSubmitted(isBackwards?: boolean): void {\n const { gotoValue } = this.state;\n this.seekRow(gotoValue, isBackwards);\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 columnHeaderGroups,\n showOverflowModal,\n overflowText,\n overflowButtonTooltipProps,\n isGotoShown,\n gotoRow,\n gotoRowError,\n gotoValueError,\n gotoValueSelectedColumnName,\n gotoValue,\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 { gridX, gridY, allColumnXs, allColumnWidths, width } = metrics;\n const columnX = allColumnXs.get(focusedFilterBarColumn);\n const columnWidth = allColumnWidths.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 allColumnXs,\n allColumnWidths,\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 = allColumnXs.get(columnIndex);\n const columnWidth = allColumnWidths.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 allColumnXs,\n allColumnWidths,\n columnHeaderHeight,\n } = metrics;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n const columnX = allColumnXs.get(columnIndex);\n const columnWidth = allColumnWidths.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 isGotoShown,\n advancedSettings.size > 0\n );\n\n const hiddenColumns = this.getCachedHiddenColumns(\n metricCalculator,\n userColumnWidths\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 hiddenColumns={hiddenColumns}\n columnHeaderGroups={columnHeaderGroups}\n onColumnVisibilityChanged={this.handleColumnVisibilityChanged}\n onReset={this.handleColumnVisibilityReset}\n onMovedColumnsChanged={this.handleMovedColumnsChanged}\n onColumnHeaderGroupChanged={this.handleHeaderGroupsChanged}\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 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 columnHeaderGroups={columnHeaderGroups}\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={isGotoShown}\n gotoRow={gotoRow}\n gotoRowError={gotoRowError}\n gotoValueError={gotoValueError}\n onGotoRowSubmit={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 gotoValueSelectedColumnName={gotoValueSelectedColumnName}\n gotoValue={gotoValue}\n onGotoValueSelectedColumnNameChanged={\n this.handleGotoValueSelectedColumnNameChanged\n }\n onGotoValueSelectedFilterChanged={\n this.handleGotoValueSelectedFilterChanged\n }\n onGotoValueChanged={this.handleGotoValueChanged}\n onGotoValueSubmit={this.handleGotoValueSubmitted}\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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"}