@deephaven/iris-grid 0.21.1-beta.0 → 0.21.1-beta.1

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