@deephaven/iris-grid 0.22.1-beta.0 → 0.22.1-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/IrisGrid.d.ts +1 -0
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +54 -31
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridUtils.d.ts +14 -9
- package/dist/IrisGridUtils.d.ts.map +1 -1
- package/dist/IrisGridUtils.js +9 -4
- package/dist/IrisGridUtils.js.map +1 -1
- package/package.json +15 -15
package/dist/IrisGrid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGrid.js","names":["React","Component","memoize","classNames","CSSTransition","PropTypes","deepEqual","Log","FontAwesomeIcon","ContextActionUtils","ContextActions","Stack","Menu","Page","Popper","ThemeExport","Tooltip","Button","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","floatingRowCount","autoSelectRow","rowFooterWidth","alwaysFetchColumns","movedColumns","floatingLeftColumnCount","floatingRightColumnCount","draggingRange","floatingColumns","i","getModelIndex","columnSet","Set","searchValue","selectedSearchColumns","invertSearchColumns","createSearchFilter","setState","conditionalFormatPreview","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","state","DOWNLOAD_STATUS","DOWNLOADING","overflowButtonTooltipProps","wrapperStyle","position","pointerEvents","popperOptions","placement","modifiers","flip","behavior","Date","now","handleTooltipRef","handleGotoRowOpened","handleGotoRowClosed","handleAdvancedMenuClosed","handleAggregationChange","handleAggregationsChange","handleAggregationEdit","handleAnimationLoop","handleAnimationStart","handleAnimationEnd","handleChartChange","handleChartCreate","handleGridError","handleFilterBarChange","handleFilterBarDone","handleFilterBarTab","handleCancel","handleMenu","handleMenuClose","handleMenuSelect","handleMenuBack","handleRequestFailed","handleSelectionChanged","handleMovedColumnsChanged","handleUpdate","handleViewChanged","handleFormatSelection","handleConditionalFormatCreate","handleConditionalFormatEdit","handleConditionalFormatsChange","handleConditionalFormatEditorSave","handleConditionalFormatEditorCancel","handleUpdateCustomColumns","handleCustomColumnsChanged","handleSelectDistinctChanged","handlePendingDataUpdated","handlePendingCommitClicked","handlePendingDiscardClicked","handleGotoRowSelectedRowNumberSubmit","focusRowInGrid","handleDownloadTable","handleDownloadTableStart","handleCancelDownloadTable","handleDownloadCanceled","handleDownloadCompleted","handlePartitionAppend","handlePartitionChange","handlePartitionFetchAll","handlePartitionDone","handleColumnVisibilityChanged","handleCrossColumnSearch","handleRollupChange","handleOverflowClose","getColumnBoundingRect","handleGotoRowSelectedRowNumberChanged","grid","gridWrapper","lastLoadedConfig","pending","globalColumnFormats","decimalFormatOptions","integerFormatOptions","truncateNumbersWithPound","renderer","tableSaver","crossColumnRef","createRef","isAnimating","filterInputRef","toggleFilterBar","TABLE","TOGGLE_QUICK_FILTER","toggleSearchBar","TOGGLE_SEARCH","toggleGotoRow","GOTO_ROW","discardAction","pendingDataMap","discardPending","catch","INPUT_TABLE","DISCARD","commitAction","pendingDataErrors","commitPending","COMMIT","contextActions","conditionalFormats","customColumnFormatMap","isSelectingPartition","movedColumnsProp","movedRows","movedRowsProp","partition","partitionColumn","userColumnWidths","userRowHeights","canCopy","frozenColumns","keyHandlers","mouseHandlers","metricCalculator","Map","searchColumns","focusedFilterBarColumn","metrics","partitionTable","shownAdvancedFilter","hoverAdvancedFilter","selectedRanges","copyOperation","loadingText","loadingSpinnerShown","shownColumnTooltip","conditionalFormatEditIndex","isTableDownloading","isReady","rollupSelectedColumns","selectedAggregation","openOptions","pendingRowCount","pendingSavePromise","pendingSaveError","toastMessage","showOverflowModal","overflowText","isGotoRowShown","gotoRow","gotoRowError","componentDidMount","find","c","isPartitionColumn","isFilterRequired","isValuesTableAvailable","loadPartitionsTable","initState","startListening","componentDidUpdate","prevProps","inputFilters","settings","stopListening","changedInputFilters","inputFilter","includes","advancedSettings","replaceExistingFilters","get","FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS","clearGridInputField","clearCrossColumSearch","startLoading","applyInputFilters","resetColumnSelection","updateFormatterSettings","updateSorts","loadingScrimStartTime","loadingScrimFinishTime","window","requestAnimationFrame","currentTime","totalTime","Math","min","debug2","sendStateChange","componentWillUnmount","cancel","updateSearchFilter","loadingTimer","clearTimeout","handleDownloadProgressUpdate","animationFrame","cancelAnimationFrame","getValueForCell","columnIndex","rowIndex","rawValue","modelColumn","getModelColumn","modelRow","getModelRow","valueForCell","textForCell","modelColumns","modelRows","getTheme","getCachedTheme","floatingTopRowCount","floatingBottomRowCount","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","left","rightVisible","lastLeft","metricState","getMetricState","newLeft","getLastLeft","leftOffset","lastFocusedFilterBarColumn","hideColumnByVisibleIndex","columnVisibleIndex","setColumnWidth","freezeColumnByColumnName","allFrozenColumns","visibleIndex","newMovedColumns","moveItem","unFreezeColumnByColumnName","frontColumns","modelIndexes","visibilityOption","VISIBILITY_OPTIONS","SHOW","resetColumnWidth","updateCanvasScale","updateCanvas","onPartitionAppend","isCanceled","onError","showAllColumns","entries","columnWidth","toggleSort","addToExisting","currentSorts","toggleSortForColumn","sortColumn","direction","none","isAbs","reverse","isReversible","focusIndex","isTableSearchAvailable","searchDisplayMode","layoutHints","SearchDisplayMode","SEARCH_DISPLAY_HIDE","SEARCH_DISPLAY_SHOW","Error","containsGridCellInputField","document","activeElement","classList","contains","newPendingSavePromise","then","selectColumn","onColumnSelected","selectData","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","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","irisGridState","gridState","onStateChange","gridRect","popperMargin","columnHeaderHeight","visibleColumnXs","visibleColumnWidths","width","columnHeaderMaxDepth","columnX","bottom","right","x","y","toJSON","rowNumber","rowInt","parseInt","setFocusRow","target","getColumnTooltip","boundedLeft","boundedWidth","abs","virtualReference","clientWidth","clientHeight","render","children","getDownloadWorker","isStuckToBottom","isStuckToRight","onlyFetchVisibleColumns","onAdvancedSettingsChange","getCachedFilter","stateOverride","getCachedStateOverride","isVisible","isRollup","focusField","debounceMs","minDebounce","round","maxDebounce","gridX","gridY","filterBarHeight","fieldWidth","fieldHeight","style","minWidth","isValid","advancedFilter","isBarFiltered","active","handleContextMenu","loadingElement","loadingStatus","show","columnTooltip","filterBar","visibleColumns","isFilterSet","isFilterVisible","element","hidden","advancedFilterMenus","xColumnHeader","xFilterBar","getAdvancedMenuOpenedHandler","positionFixed","getCachedAdvancedFilterMenuActions","getCachedOptionItems","openOptionsStack","handleConditionalFormatEditorUpdate","getCachedHiddenColumns","getHiddenColumns","transitionSlowMs","stringName","displayString","getAlwaysFetchColumns","draggingColumn","range","getCachedPreviewFormatColumns","getCachedModelColumns","getModelTotalsConfig","getOverflowButtonTooltip","transitionMidMs","columnSelectionValidator","columnNotAllowedCursor","onContextMenu","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator","shape","defaultFormatString","string"],"sources":["../src/IrisGrid.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n Component,\n CSSProperties,\n ReactElement,\n ReactNode,\n} from 'react';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport deepEqual from 'deep-equal';\nimport Log from '@deephaven/log';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n ContextActionUtils,\n ContextActions,\n Stack,\n Menu,\n Page,\n Popper,\n ThemeExport,\n Tooltip,\n ContextAction,\n PopperOptions,\n ReferenceObject,\n Button,\n} from '@deephaven/components';\nimport {\n Grid,\n GridMetrics,\n GridMouseHandler,\n GridRange,\n GridRangeIndex,\n GridThemeType,\n GridUtils,\n KeyHandler,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n VisibleIndex,\n GridState,\n isEditableGridModel,\n BoundedAxisRange,\n} 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 floatingRowCount: number\n ): Partial<IrisGridThemeType> => ({\n ...IrisGridTheme,\n ...theme,\n autoSelectRow: !isEditable,\n // We only show the row footers when we have floating rows for aggregations\n rowFooterWidth: floatingRowCount > 0 ? theme.rowFooterWidth : 0,\n }),\n { max: 1 }\n );\n\n getValueForCell(\n columnIndex: GridRangeIndex,\n rowIndex: GridRangeIndex,\n rawValue = false\n ): string | unknown {\n const { model } = this.props;\n const modelColumn = this.getModelColumn(columnIndex);\n const modelRow = this.getModelRow(rowIndex);\n if (rawValue && modelColumn != null && modelRow != null) {\n 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 model.floatingTopRowCount + model.floatingBottomRowCount\n );\n }\n\n getVisibleColumn(modelIndex: ModelIndex): VisibleIndex {\n const { movedColumns } = this.state;\n return GridUtils.getVisibleIndex(modelIndex, movedColumns);\n }\n\n /**\n * Applies the provided input filters as quick filters,\n * and clears any existing quickFilters or advancedFilters on that column\n * @param inputFilters Array of input filters to apply\n * @param replaceExisting If true, new filters will replace the existing ones, instead of merging\n */\n applyInputFilters(\n inputFilters: InputFilter[],\n replaceExisting = false\n ): void {\n const { model } = this.props;\n const { advancedFilters, quickFilters } = this.state;\n const newAdvancedFilters = replaceExisting\n ? new Map()\n : new Map(advancedFilters);\n const newQuickFilters = replaceExisting ? new Map() : new Map(quickFilters);\n\n let isChanged = replaceExisting && advancedFilters.size > 0;\n inputFilters.forEach(({ name, type, value }) => {\n const modelIndex = model.columns.findIndex(\n ({ name: columnName, type: columnType }) =>\n columnName === name && columnType === type\n );\n if (modelIndex >= 0) {\n isChanged = newAdvancedFilters.delete(modelIndex) || isChanged;\n isChanged =\n this.applyQuickFilter(modelIndex, value, newQuickFilters) ||\n isChanged;\n } else {\n log.error('Unable to find column for inputFilter', name, type, value);\n }\n });\n if (isChanged) {\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n }\n\n /**\n * Applies a quick filter\n * @param modelIndex The index in the model of the column to set\n * @param value The string value to set to the quick filter\n * @param quickFilters The quick filters map\n * @returns True if the filters have changed because this quick filter was applied\n */\n applyQuickFilter(\n modelIndex: ModelIndex,\n value: string | null,\n quickFilters: QuickFilterMap\n ): boolean {\n const { model } = this.props;\n const { formatter } = model;\n const column = model.columns[modelIndex];\n\n if (value != null && `${value}`.trim().length > 0) {\n const quickFilter = quickFilters.get(modelIndex);\n if (quickFilter != null) {\n const { text } = quickFilter;\n if (text === value) {\n log.debug2('Ignoring change to existing filter');\n return false;\n }\n }\n quickFilters.set(modelIndex, {\n text: value,\n filter: IrisGrid.makeQuickFilter(column, value, formatter.timeZone),\n });\n return true;\n }\n return quickFilters.delete(modelIndex);\n }\n\n setAdvancedFilterMap(advancedFilters: AdvancedFilterMap): void {\n this.setState({ advancedFilters });\n }\n\n setAdvancedFilter(\n modelIndex: ModelIndex,\n filter: FilterCondition | null,\n options: AdvancedFilterOptions\n ): void {\n log.debug('Setting advanced filter', modelIndex, filter);\n\n this.startLoading('Filtering...', true);\n\n this.setState(({ advancedFilters }) => {\n const newAdvancedFilters = new Map(advancedFilters);\n if (filter == null) {\n newAdvancedFilters.delete(modelIndex);\n } else {\n newAdvancedFilters.set(modelIndex, {\n filter,\n options,\n });\n }\n return { advancedFilters: newAdvancedFilters };\n });\n }\n\n /**\n * Sets a quick filter against the provided column\n * @param modelIndex The index in the model for the column this filter is applied to\n * @param filter A filter to apply to the column, or null if there was an error\n * @param text The original text the filter was created with\n */\n setQuickFilter(\n modelIndex: ModelIndex,\n filter: FilterCondition,\n text: string\n ): void {\n log.debug('Setting quick filter', modelIndex, filter, text);\n\n this.startLoading('Filtering...', true);\n\n this.setState(({ quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n newQuickFilters.set(modelIndex, { filter, text });\n return { quickFilters: newQuickFilters };\n });\n }\n\n /**\n * Set grid filters based on the filter map\n * @param filterMap Filter map\n */\n setFilterMap(filterMap: FilterMap): void {\n log.debug('setFilterMap', filterMap);\n\n const { advancedSettings } = this.props;\n const clearFiltersOnLinkerFilterUpdate =\n advancedSettings.get(\n AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS\n ) ?? false;\n if (clearFiltersOnLinkerFilterUpdate) {\n this.clearAllFilters();\n }\n\n const { model } = this.props;\n filterMap.forEach(({ columnType, text, value }, columnName) => {\n const column = model.columns.find(\n c => c.name === columnName && c.type === columnType\n );\n if (column == null) {\n return;\n }\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n if (value === 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 { movedColumns } = this.state;\n const { model } = this.props;\n const { columnCount } = model;\n const modelColumn = GridUtils.getModelIndex(column, movedColumns);\n\n if (\n column == null ||\n column < 0 ||\n columnCount <= column ||\n !model.isFilterable(modelColumn)\n ) {\n this.setState({ focusedFilterBarColumn: null });\n return;\n }\n\n const { metricCalculator, metrics } = this.state;\n assertNotNull(metrics);\n const { left, rightVisible, lastLeft } = metrics;\n if (column < left) {\n this.grid?.setViewState({ left: column }, true);\n } else if (rightVisible < column) {\n const metricState = this.grid?.getMetricState();\n assertNotNull(metricState);\n const newLeft = metricCalculator.getLastLeft(metricState, column);\n this.grid?.setViewState(\n { left: Math.min(newLeft, lastLeft), leftOffset: 0 },\n true\n );\n }\n this.lastFocusedFilterBarColumn = column;\n this.setState({ focusedFilterBarColumn: column, isFilterBarShown: true });\n }\n\n hideColumnByVisibleIndex(columnVisibleIndex: VisibleIndex): void {\n const { metricCalculator, movedColumns } = this.state;\n metricCalculator.setColumnWidth(\n GridUtils.getModelIndex(columnVisibleIndex, movedColumns),\n 0\n );\n\n this.grid?.forceUpdate();\n }\n\n freezeColumnByColumnName(columnName: ColumnName): void {\n const { frozenColumns, movedColumns } = this.state;\n const { model } = this.props;\n log.debug2('freezing column', columnName);\n\n const allFrozenColumns =\n frozenColumns == null\n ? new Set(model.frozenColumns)\n : new Set(frozenColumns);\n\n allFrozenColumns.add(columnName);\n\n const modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n const newMovedColumns = GridUtils.moveItem(\n visibleIndex,\n allFrozenColumns.size - 1,\n movedColumns\n );\n\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns,\n });\n }\n\n unFreezeColumnByColumnName(columnName: ColumnName): void {\n const { frozenColumns, movedColumns } = this.state;\n const { model } = this.props;\n log.debug2('unfreezing column', columnName);\n\n const allFrozenColumns =\n frozenColumns == null\n ? new Set(model.frozenColumns)\n : new Set(frozenColumns);\n\n allFrozenColumns.delete(columnName);\n\n const modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n\n // Move to after remaining frozen columns and front columns\n const newMovedColumns = GridUtils.moveItem(\n visibleIndex,\n allFrozenColumns.size + model.frontColumns.length,\n movedColumns\n );\n\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns,\n });\n }\n\n handleColumnVisibilityChanged(\n modelIndexes: ModelIndex[],\n visibilityOption?: VisibilityOptionType\n ): void {\n const { metricCalculator } = this.state;\n if (\n visibilityOption === VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n ) {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.resetColumnWidth(modelIndex);\n });\n } else {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.setColumnWidth(modelIndex, 0);\n });\n }\n this.grid?.forceUpdate();\n }\n\n handleCrossColumnSearch(\n searchValue: string,\n selectedSearchColumns: ColumnName[],\n invertSearchColumns: boolean\n ): void {\n const { model } = this.props;\n\n this.updateSearchFilter(\n searchValue,\n selectedSearchColumns,\n model.columns,\n invertSearchColumns\n );\n\n this.setState({\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n });\n }\n\n updateSearchFilter = debounce(\n (\n searchValue: string,\n selectedSearchColumns: ColumnName[],\n columns: Column[],\n invertSearchColumns: boolean\n ): void => {\n const searchFilter = CrossColumnSearch.createSearchFilter(\n searchValue,\n selectedSearchColumns,\n columns,\n invertSearchColumns\n );\n this.setState({ searchFilter });\n },\n SET_FILTER_DEBOUNCE\n );\n\n handleAnimationLoop(): void {\n this.grid?.updateCanvasScale();\n this.grid?.updateCanvas();\n\n if (this.isAnimating) {\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n }\n\n handleAnimationStart(): void {\n log.debug2('handleAnimationStart');\n\n this.isAnimating = true;\n\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n\n handleAnimationEnd(): void {\n log.debug2('handleAnimationEnd');\n\n this.isAnimating = false;\n }\n\n handlePartitionAppend(value: string): void {\n const { onPartitionAppend } = this.props;\n const { partitionColumn } = this.state;\n onPartitionAppend(partitionColumn, value);\n }\n\n handlePartitionChange(partition: string): void {\n const { partitionColumn } = this.state;\n this.updatePartition(partition, partitionColumn);\n }\n\n handlePartitionFetchAll(): void {\n this.setState({\n partitionFilters: [],\n isSelectingPartition: false,\n });\n }\n\n handlePartitionDone(): void {\n this.setState({ isSelectingPartition: false });\n }\n\n handleTableLoadError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error(error);\n\n const { onError } = this.props;\n onError(error);\n }\n\n showAllColumns(): void {\n const { metricCalculator } = this.state;\n const userColumnWidths = metricCalculator.getUserColumnWidths();\n const entries = [...userColumnWidths.entries()];\n for (let i = 0; i < entries.length; i += 1) {\n const [modelIndex, columnWidth] = entries[i];\n if (columnWidth === 0) {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n }\n this.grid?.forceUpdate();\n }\n\n toggleSort(columnIndex: VisibleIndex, addToExisting: boolean): void {\n log.info('Toggling sort for column', columnIndex);\n\n const { model } = this.props;\n const { sorts: currentSorts } = this.state;\n const modelColumn = this.getModelColumn(columnIndex);\n assertNotNull(modelColumn);\n const sorts = TableUtils.toggleSortForColumn(\n currentSorts,\n model.columns,\n modelColumn,\n addToExisting\n );\n this.updateSorts(sorts);\n }\n\n updateSorts(sorts: Sort[]): void {\n this.startLoading('Sorting...');\n this.setState({ sorts });\n this.grid?.forceUpdate();\n }\n\n sortColumn(\n modelColumn: ModelIndex,\n direction: SortDirection = TableUtils.sortDirection.none,\n isAbs = false,\n addToExisting = false\n ): void {\n assertNotNull(modelColumn);\n const { model } = this.props;\n const sorts = TableUtils.sortColumn(\n model.sort,\n model.columns,\n modelColumn,\n direction,\n isAbs,\n addToExisting\n );\n this.startLoading('Sorting...');\n this.setState({ sorts });\n this.grid?.forceUpdate();\n }\n\n reverse(reverseType: ReverseType): void {\n this.startLoading('Reversing...');\n this.setState({ reverseType });\n this.grid?.forceUpdate();\n }\n\n isReversible(): boolean {\n const { model } = this.props;\n return model.isReversible;\n }\n\n toggleFilterBar(focusIndex = this.lastFocusedFilterBarColumn): void {\n let { isFilterBarShown } = this.state;\n isFilterBarShown = !isFilterBarShown;\n this.setState({ isFilterBarShown });\n\n if (isFilterBarShown) {\n if (focusIndex != null) {\n this.focusFilterBar(focusIndex);\n } else {\n let columnIndex = 0;\n const { model } = this.props;\n const { columnCount } = model;\n for (let i = 0; i < columnCount; i += 1) {\n const modelColumn = this.getModelColumn(i);\n if (modelColumn != null) {\n const column = model.columns[modelColumn];\n if (column != null && TableUtils.isTextType(column.type)) {\n columnIndex = i;\n break;\n }\n }\n }\n this.focusFilterBar(columnIndex);\n }\n } else {\n this.grid?.focus();\n }\n }\n\n isTableSearchAvailable(): boolean {\n const { model, canToggleSearch } = this.props;\n const searchDisplayMode = model?.layoutHints?.searchDisplayMode;\n\n if (searchDisplayMode === dh.SearchDisplayMode?.SEARCH_DISPLAY_HIDE) {\n return false;\n }\n if (searchDisplayMode === dh.SearchDisplayMode?.SEARCH_DISPLAY_SHOW) {\n return true;\n }\n\n return canToggleSearch;\n }\n\n toggleSearchBar(): void {\n const { showSearchBar } = this.state;\n if (!this.isTableSearchAvailable()) {\n return;\n }\n\n const update = !showSearchBar;\n this.setState(\n {\n showSearchBar: update,\n },\n () => {\n if (update && this.crossColumnRef?.current) {\n this.crossColumnRef?.current.focus();\n } else {\n this.grid?.focus();\n }\n }\n );\n }\n\n toggleGotoRow(row = ''): void {\n const { isGotoRowShown } = this.state;\n if (row) {\n // if invoked with a row, keep open instead of toggle\n this.setState({\n isGotoRowShown: true,\n gotoRow: row,\n gotoRowError: '',\n });\n return;\n }\n this.setState({\n isGotoRowShown: !isGotoRowShown,\n gotoRow: '',\n gotoRowError: '',\n });\n }\n\n async commitPending(): Promise<void> {\n const { model } = this.props;\n if (!isEditableGridModel(model) || !model.isEditable) {\n throw new Error('Cannot save, table is not editable');\n }\n\n const { pendingSavePromise } = this.state;\n if (pendingSavePromise != null) {\n throw new Error('Save already in progress');\n }\n\n const containsGridCellInputField = document?.activeElement?.classList.contains(\n 'grid-cell-input-field'\n );\n if (containsGridCellInputField != null && containsGridCellInputField) {\n if (\n document.activeElement != null &&\n document.activeElement.classList.contains('error')\n ) {\n throw new ValidationError('Current input is invalid');\n }\n\n // Focus the grid again to commit any pending input changes\n this.grid?.focus();\n }\n\n const newPendingSavePromise = this.pending\n .add(model.commitPending())\n .then(() => {\n this.setState({ pendingSaveError: null, pendingSavePromise: null });\n })\n .catch(err => {\n if (!PromiseUtils.isCanceled(err)) {\n this.setState({ pendingSaveError: err, pendingSavePromise: null });\n }\n });\n this.setState({ pendingSavePromise: newPendingSavePromise });\n return newPendingSavePromise;\n }\n\n async discardPending(): Promise<void> {\n const { pendingSavePromise } = this.state;\n if (pendingSavePromise != null) {\n throw new Error('Cannot cancel a save in progress');\n }\n\n this.setState({\n pendingSavePromise: null,\n pendingSaveError: null,\n pendingDataMap: new Map(),\n pendingDataErrors: new Map(),\n });\n }\n\n /**\n * Select the passed in column and notify listener\n * @param column The column in this table to link\n */\n selectColumn(column: Column): void {\n const { onColumnSelected } = this.props;\n onColumnSelected(column);\n }\n\n /**\n * Select all the data for a given row and notify listener\n */\n selectData(columnIndex: ModelIndex, rowIndex: ModelIndex): void {\n const { model } = this.props;\n const { columns } = 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 {\n gridX,\n gridY,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n } = metrics;\n const columnX = visibleColumnXs.get(focusedFilterBarColumn);\n const columnWidth = visibleColumnWidths.get(focusedFilterBarColumn);\n if (columnX != null && columnWidth != null) {\n const x = gridX + columnX;\n const y = gridY - (theme.filterBarHeight ?? 0);\n const fieldWidth = columnWidth + 1; // cover right border\n const fieldHeight = (theme.filterBarHeight ?? 0) - 1; // remove bottom border\n const style = {\n top: y,\n left: x,\n minWidth: Math.min(fieldWidth, width - x), // Don't cause overflow\n height: fieldHeight,\n };\n let value = '';\n let isValid = true;\n const modelColumn = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelColumn);\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter != null) {\n value = quickFilter.text;\n isValid = quickFilter.filter != null;\n }\n const isBarFiltered =\n quickFilters.size !== 0 || advancedFilters.size !== 0;\n focusField = (\n <FilterInputField\n ref={this.filterInputRef}\n style={style}\n className={classNames({\n error: !isValid,\n active: value !== '' || advancedFilter != null,\n 'iris-grid-has-filter': isBarFiltered,\n })}\n isAdvancedFilterSet={advancedFilter != null}\n onAdvancedFiltersTriggered={() => {\n this.setState({ shownAdvancedFilter: focusedFilterBarColumn });\n }}\n key={focusedFilterBarColumn}\n onChange={this.handleFilterBarChange}\n onDone={this.handleFilterBarDone}\n onTab={this.handleFilterBarTab}\n onContextMenu={this.grid?.handleContextMenu}\n debounceMs={debounceMs}\n value={value}\n />\n );\n }\n }\n\n let loadingElement = null;\n if (loadingText != null) {\n const loadingStatus = (\n <div className=\"iris-grid-loading-status\">\n <div\n className={classNames('iris-grid-loading-status-bar', {\n show: loadingSpinnerShown,\n })}\n >\n {loadingText}\n </div>\n <button\n type=\"button\"\n onClick={this.handleCancel}\n className={classNames('iris-grid-btn-cancel', {\n show: loadingSpinnerShown,\n })}\n >\n <FontAwesomeIcon icon={vsClose} transform=\"down-1\" />\n Cancel\n </button>\n </div>\n );\n const gridY = metrics ? metrics.gridY : 0;\n loadingElement = (\n <div className=\"iris-grid-loading\" style={{ top: gridY }}>\n {loadingStatus}\n </div>\n );\n }\n\n let columnTooltip: React.ReactNode = null;\n if (shownColumnTooltip != null && metrics) {\n columnTooltip = this.getColumnTooltip(shownColumnTooltip, metrics, model);\n // #510 We may need to update the position of the tooltip if it's already opened and columns are resized\n this.tooltip?.update();\n }\n\n const filterBar = [];\n if (metrics && isFilterBarShown) {\n const {\n gridX,\n gridY,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n } = metrics;\n const { filterBarHeight } = theme;\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n\n const columnX = visibleColumnXs.get(columnIndex);\n const columnWidth = visibleColumnWidths.get(columnIndex);\n const modelColumn = this.getModelColumn(columnIndex);\n if (modelColumn != null) {\n const isFilterable = model.isFilterable(modelColumn);\n if (\n isFilterable &&\n columnX != null &&\n columnWidth != null &&\n columnWidth > 0\n ) {\n const x = gridX + columnX + columnWidth - 24;\n const y = gridY - (filterBarHeight ?? 0) + 2; // 2 acts as top margin for the button\n const style: CSSProperties = {\n position: 'absolute',\n top: y,\n left: x,\n };\n const advancedFilter = advancedFilters.get(modelColumn);\n const isFilterSet = advancedFilter != null;\n const isFilterVisible =\n columnIndex === hoverAdvancedFilter ||\n columnIndex === focusedFilterBarColumn ||\n isFilterSet;\n const element = (\n <div\n className={classNames('advanced-filter-button-container', {\n hidden: !isFilterVisible,\n })}\n key={columnIndex}\n style={style}\n >\n {isFilterVisible && (\n <Button\n kind=\"ghost\"\n className={classNames(\n 'btn-link-icon advanced-filter-button',\n {\n 'filter-set': isFilterSet,\n }\n )}\n onClick={() => {\n this.setState({ shownAdvancedFilter: columnIndex });\n }}\n onContextMenu={event => {\n this.grid?.handleContextMenu(event);\n }}\n onMouseEnter={() => {\n this.setState({ hoverAdvancedFilter: columnIndex });\n }}\n onMouseLeave={() => {\n this.setState({ hoverAdvancedFilter: null });\n }}\n >\n <div className=\"fa-layers\">\n <FontAwesomeIcon\n icon={dhFilterFilled}\n className=\"filter-solid\"\n />\n <FontAwesomeIcon\n icon={vsFilter}\n className=\"filter-light\"\n />\n </div>\n </Button>\n )}\n </div>\n );\n filterBar.push(element);\n }\n }\n }\n }\n const advancedFilterMenus = [];\n if (metrics) {\n const {\n gridX,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n columnHeaderHeight,\n } = metrics;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n const columnX = visibleColumnXs.get(columnIndex);\n const columnWidth = visibleColumnWidths.get(columnIndex);\n if (columnX != null && columnWidth != null && columnWidth > 0) {\n const xColumnHeader = gridX + columnX;\n const xFilterBar = gridX + columnX + columnWidth - 20;\n const style: CSSProperties = isFilterBarShown\n ? {\n position: 'absolute',\n top: columnHeaderHeight,\n left: xFilterBar,\n width: 20,\n height: theme.filterBarHeight,\n }\n : {\n position: 'absolute',\n top: 0,\n left: xColumnHeader,\n width: columnWidth,\n height: columnHeaderHeight,\n };\n const modelColumn = this.getModelColumn(columnIndex);\n if (modelColumn != null) {\n const column = model.columns[modelColumn];\n const advancedFilter = advancedFilters.get(modelColumn);\n const { options: advancedFilterOptions } = advancedFilter || {};\n const sort = TableUtils.getSortForColumn(model.sort, modelColumn);\n const sortDirection = sort ? sort.direction : null;\n const element = (\n <div\n key={columnIndex}\n className=\"advanced-filter-menu-container\"\n style={style}\n >\n <Popper\n className=\"advanced-filter-menu-popper\"\n onEntered={this.getAdvancedMenuOpenedHandler(columnIndex)}\n onExited={() => {\n this.handleAdvancedMenuClosed(columnIndex);\n }}\n isShown={shownAdvancedFilter === columnIndex}\n interactive\n closeOnBlur\n options={{\n positionFixed: true,\n }}\n >\n {this.getCachedAdvancedFilterMenuActions(\n model,\n column,\n advancedFilterOptions,\n sortDirection,\n formatter\n )}\n </Popper>\n </div>\n );\n advancedFilterMenus.push(element);\n }\n }\n }\n }\n\n const optionItems = this.getCachedOptionItems(\n onCreateChart !== undefined && model.isChartBuilderAvailable,\n model.isCustomColumnsAvailable,\n model.isFormatColumnsAvailable,\n model.isRollupAvailable,\n model.isTotalsAvailable,\n model.isSelectDistinctAvailable,\n model.isExportAvailable,\n this.toggleFilterBarAction,\n this.toggleSearchBarAction,\n this.toggleGotoRowAction,\n isFilterBarShown,\n showSearchBar,\n canDownloadCsv,\n this.isTableSearchAvailable(),\n isGotoRowShown\n );\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 kind=\"ghost\"\n data-testid={`btn-iris-grid-settings-button-${name}`}\n onClick={this.handleMenu}\n icon={<FontAwesomeIcon icon={vsMenu} transform=\"up-1\" />}\n tooltip=\"Table Options\"\n />\n </div>\n )}\n {focusField}\n {loadingElement}\n {filterBar}\n {columnTooltip}\n {advancedFilterMenus}\n {overflowButtonTooltipProps &&\n this.getOverflowButtonTooltip(overflowButtonTooltipProps)}\n </div>\n <GotoRow\n model={model}\n isShown={isGotoRowShown}\n gotoRow={gotoRow}\n gotoRowError={gotoRowError}\n onSubmit={this.handleGotoRowSelectedRowNumberSubmit}\n onGotoRowNumberChanged={this.handleGotoRowSelectedRowNumberChanged}\n onClose={this.handleGotoRowClosed}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={() => {\n this.handleAnimationStart();\n this.focus();\n }}\n onExited={this.handleAnimationEnd}\n />\n\n <PendingDataBottomBar\n error={pendingSaveError}\n isSaving={pendingSavePromise != null}\n saveTooltip={`Commit (${this.commitAction.shortcut.getDisplayText()})`}\n discardTooltip={`Discard (${this.discardAction.shortcut.getDisplayText()})`}\n pendingDataErrors={pendingDataErrors}\n pendingDataMap={pendingDataMap}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n onSave={this.handlePendingCommitClicked}\n onDiscard={this.handlePendingDiscardClicked}\n />\n <ToastBottomBar>{toastMessage}</ToastBottomBar>\n <IrisGridCopyHandler\n model={model}\n copyOperation={copyOperation ?? undefined}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n />\n <TableSaver\n ref={tableSaver => {\n this.tableSaver = tableSaver;\n }}\n getDownloadWorker={getDownloadWorker}\n onDownloadCompleted={this.handleDownloadCompleted}\n onDownloadCanceled={this.handleDownloadCanceled}\n onDownloadProgressUpdate={this.handleDownloadProgressUpdate}\n isDownloading={\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING\n }\n formatter={formatter}\n />\n </div>\n <CSSTransition\n in={isMenuShown}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-left\"\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"table-sidebar\">\n <Stack>\n <Page title=\"Table Options\" onClose={this.handleMenuClose}>\n <Menu\n onSelect={i => this.handleMenuSelect(optionItems[i])}\n items={optionItems}\n />\n </Page>\n {openOptionsStack.map((option, i) => (\n <Page\n title={openOptions[i].title}\n onBack={this.handleMenuBack}\n onClose={this.handleMenuClose}\n key={openOptions[i].type}\n >\n {option}\n </Page>\n ))}\n </Stack>\n </div>\n </CSSTransition>\n <ContextActions actions={this.contextActions} />\n </div>\n );\n }\n}\n\nexport default IrisGrid;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IrisGrid.js","names":["React","Component","memoize","classNames","CSSTransition","PropTypes","deepEqual","Log","FontAwesomeIcon","ContextActionUtils","ContextActions","Stack","Menu","Page","Popper","ThemeExport","Tooltip","Button","Grid","GridRange","GridUtils","isEditableGridModel","isExpandableGridModel","dhEye","dhFilterFilled","dhGraphLineUp","dhTriangleDownSquare","vsClose","vsCloudDownload","vsEdit","vsFilter","vsMenu","vsReply","vsRuby","vsSearch","vsSplitHorizontal","vsSymbolOperator","vsTools","dh","DateUtils","Formatter","FormatterUtils","TableUtils","assertNotNull","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","floatingRowCount","autoSelectRow","rowFooterWidth","alwaysFetchColumns","movedColumns","floatingLeftColumnCount","floatingRightColumnCount","draggingRange","floatingColumns","i","getModelIndex","columnSet","Set","searchValue","selectedSearchColumns","invertSearchColumns","createSearchFilter","setState","conditionalFormatPreview","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","state","DOWNLOAD_STATUS","DOWNLOADING","overflowButtonTooltipProps","wrapperStyle","position","pointerEvents","popperOptions","placement","modifiers","flip","behavior","Date","now","handleTooltipRef","handleGotoRowOpened","handleGotoRowClosed","handleAdvancedMenuClosed","handleAggregationChange","handleAggregationsChange","handleAggregationEdit","handleAnimationLoop","handleAnimationStart","handleAnimationEnd","handleChartChange","handleChartCreate","handleGridError","handleFilterBarChange","handleFilterBarDone","handleFilterBarTab","handleCancel","handleMenu","handleMenuClose","handleMenuSelect","handleMenuBack","handleRequestFailed","handleSelectionChanged","handleMovedColumnsChanged","handleUpdate","handleViewChanged","handleFormatSelection","handleConditionalFormatCreate","handleConditionalFormatEdit","handleConditionalFormatsChange","handleConditionalFormatEditorSave","handleConditionalFormatEditorCancel","handleUpdateCustomColumns","handleCustomColumnsChanged","handleSelectDistinctChanged","handlePendingDataUpdated","handlePendingCommitClicked","handlePendingDiscardClicked","handleGotoRowSelectedRowNumberSubmit","focusRowInGrid","handleDownloadTable","handleDownloadTableStart","handleCancelDownloadTable","handleDownloadCanceled","handleDownloadCompleted","handlePartitionAppend","handlePartitionChange","handlePartitionFetchAll","handlePartitionDone","handleColumnVisibilityChanged","handleCrossColumnSearch","handleRollupChange","handleOverflowClose","getColumnBoundingRect","handleGotoRowSelectedRowNumberChanged","grid","gridWrapper","lastLoadedConfig","pending","globalColumnFormats","decimalFormatOptions","integerFormatOptions","truncateNumbersWithPound","renderer","tableSaver","crossColumnRef","createRef","isAnimating","filterInputRef","toggleFilterBar","TABLE","TOGGLE_QUICK_FILTER","toggleSearchBar","TOGGLE_SEARCH","toggleGotoRow","GOTO_ROW","discardAction","pendingDataMap","discardPending","catch","INPUT_TABLE","DISCARD","commitAction","pendingDataErrors","commitPending","COMMIT","contextActions","conditionalFormats","customColumnFormatMap","isSelectingPartition","movedColumnsProp","movedRows","movedRowsProp","partition","partitionColumn","userColumnWidths","userRowHeights","canCopy","frozenColumns","keyHandlers","mouseHandlers","metricCalculator","Map","searchColumns","focusedFilterBarColumn","metrics","partitionTable","shownAdvancedFilter","hoverAdvancedFilter","selectedRanges","copyOperation","loadingText","loadingSpinnerShown","shownColumnTooltip","conditionalFormatEditIndex","isTableDownloading","isReady","rollupSelectedColumns","selectedAggregation","openOptions","pendingRowCount","pendingSavePromise","pendingSaveError","toastMessage","showOverflowModal","overflowText","isGotoRowShown","gotoRow","gotoRowError","componentDidMount","find","c","isPartitionColumn","isFilterRequired","isValuesTableAvailable","loadPartitionsTable","initState","startListening","componentDidUpdate","prevProps","inputFilters","settings","stopListening","changedInputFilters","inputFilter","includes","advancedSettings","replaceExistingFilters","get","FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS","clearGridInputField","clearCrossColumSearch","startLoading","applyInputFilters","resetColumnSelection","updateFormatterSettings","updateSorts","loadingScrimStartTime","loadingScrimFinishTime","window","requestAnimationFrame","currentTime","totalTime","Math","min","debug2","sendStateChange","componentWillUnmount","cancel","updateSearchFilter","loadingTimer","clearTimeout","handleDownloadProgressUpdate","animationFrame","cancelAnimationFrame","getValueForCell","columnIndex","rowIndex","rawValue","modelColumn","getModelColumn","modelRow","getModelRow","valueForCell","textForCell","modelColumns","modelRows","getTheme","getCachedTheme","floatingTopRowCount","floatingBottomRowCount","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","removeQuickFilter","isNull","filterValue","isTextType","FilterValue","ofString","ofNumber","eq","removeColumnFilter","current","setValue","rebuildFilters","key","makeAdvancedFilter","setFilters","forceUpdate","getColumnFormats","dateTimeFormatterOptions","getDateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","isColumnFormatChanged","isDateFormattingChanged","isDecimalFormattingChanged","isIntegerFormattingChanged","isTruncateNumbersChanged","updateFormatter","updatedFormats","update","mergedColumnFormats","values","initFormatter","applyInputFiltersOnInit","inputFiltersWithValues","add","valuesTable","resolved","close","sort","desc","applySort","setViewport","data","getViewportData","rows","row","updatePartition","info","handleTableLoadError","partitionFilter","copyCell","String","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","left","rightVisible","lastLeft","metricState","getMetricState","newLeft","getLastLeft","leftOffset","lastFocusedFilterBarColumn","hideColumnByVisibleIndex","columnVisibleIndex","setColumnWidth","freezeColumnByColumnName","allFrozenColumns","visibleIndex","newMovedColumns","moveItem","unFreezeColumnByColumnName","frontColumns","modelIndexes","visibilityOption","VISIBILITY_OPTIONS","SHOW","resetColumnWidth","updateCanvasScale","updateCanvas","onPartitionAppend","isCanceled","onError","showAllColumns","entries","columnWidth","toggleSort","addToExisting","currentSorts","toggleSortForColumn","sortColumn","direction","none","isAbs","reverse","isReversible","focusIndex","isTableSearchAvailable","searchDisplayMode","layoutHints","SearchDisplayMode","SEARCH_DISPLAY_HIDE","SEARCH_DISPLAY_SHOW","Error","containsGridCellInputField","document","activeElement","classList","contains","newPendingSavePromise","then","selectColumn","onColumnSelected","selectData","groupedColumns","dataMap","isExpandable","isRowExpandable","isGrouped","onDataSelected","index","oldSort","getSortForColumn","newSort","descending","asc","setSortForColumn","onCreateChart","warn","setGridFocus","defocusInput","backward","selectedFormat","prevCustomColumnFormatMap","normalizedType","getNormalizedType","columnFormattingRule","makeColumnFormattingRule","stopPropagation","newOptions","pop","option","event","customEvent","detail","selectionEndRow","bottomViewport","bottomNonFloating","onSelectionChanged","onChangeApplied","tooltip","startTimer","CONDITIONAL_FORMATTING_EDIT","oldCustomColumns","customColumn","removedColumnNames","getRemovedCustomColumnNames","newSorts","removeSortsInColumns","removeFiltersInColumns","removeColumnFromMovedColumns","newSelectDistinctColumns","removeColumnsFromSelectDistinctColumns","aggregation","AGGREGATION_EDIT","resetGridViewState","columnNames","INITIATING","fileName","frozenTable","tableSubscription","gridRanges","startDownload","cancelDownload","FINISHED","CANCELED","deleteRanges","columnAllowedCursor","cursor","topOffset","irisGridState","gridState","onStateChange","gridRect","popperMargin","columnHeaderHeight","visibleColumnXs","visibleColumnWidths","width","columnHeaderMaxDepth","columnX","bottom","right","x","y","toJSON","rowNumber","rowInt","parseInt","setFocusRow","target","getColumnTooltip","boundedLeft","boundedWidth","abs","virtualReference","clientWidth","clientHeight","render","children","getDownloadWorker","isStuckToBottom","isStuckToRight","onlyFetchVisibleColumns","onAdvancedSettingsChange","getCachedFilter","stateOverride","getCachedStateOverride","isVisible","isRollup","focusField","debounceMs","minDebounce","round","maxDebounce","gridX","gridY","filterBarHeight","fieldWidth","fieldHeight","style","minWidth","isValid","advancedFilter","isBarFiltered","active","handleContextMenu","loadingElement","loadingStatus","show","columnTooltip","filterBar","visibleColumns","isFilterSet","isFilterVisible","element","hidden","advancedFilterMenus","xColumnHeader","xFilterBar","getAdvancedMenuOpenedHandler","positionFixed","getCachedAdvancedFilterMenuActions","getCachedOptionItems","openOptionsStack","handleConditionalFormatEditorUpdate","getCachedHiddenColumns","getHiddenColumns","transitionSlowMs","stringName","displayString","getAlwaysFetchColumns","draggingColumn","range","getCachedPreviewFormatColumns","getCachedModelColumns","getModelTotalsConfig","getOverflowButtonTooltip","transitionMidMs","columnSelectionValidator","columnNotAllowedCursor","onContextMenu","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator","shape","defaultFormatString","string"],"sources":["../src/IrisGrid.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n Component,\n CSSProperties,\n ReactElement,\n ReactNode,\n} from 'react';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport deepEqual from 'deep-equal';\nimport Log from '@deephaven/log';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n ContextActionUtils,\n ContextActions,\n Stack,\n Menu,\n Page,\n Popper,\n ThemeExport,\n Tooltip,\n ContextAction,\n PopperOptions,\n ReferenceObject,\n Button,\n} from '@deephaven/components';\nimport {\n Grid,\n GridMetrics,\n GridMouseHandler,\n GridRange,\n GridRangeIndex,\n GridThemeType,\n GridUtils,\n KeyHandler,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n VisibleIndex,\n GridState,\n isEditableGridModel,\n BoundedAxisRange,\n isExpandableGridModel,\n} from '@deephaven/grid';\nimport {\n dhEye,\n dhFilterFilled,\n dhGraphLineUp,\n dhTriangleDownSquare,\n vsClose,\n vsCloudDownload,\n vsEdit,\n vsFilter,\n vsMenu,\n vsReply,\n vsRuby,\n vsSearch,\n vsSplitHorizontal,\n vsSymbolOperator,\n vsTools,\n} from '@deephaven/icons';\nimport dh, {\n Column,\n CustomColumn,\n FilterCondition,\n Sort,\n Table,\n TableViewportSubscription,\n} from '@deephaven/jsapi-shim';\nimport {\n DateUtils,\n Formatter,\n FormatterUtils,\n TableUtils,\n FormattingRule,\n ReverseType,\n RowDataMap,\n SortDirection,\n DateTimeColumnFormatterOptions,\n TableColumnFormat,\n Settings,\n} from '@deephaven/jsapi-utils';\nimport {\n assertNotNull,\n 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 floatingRowCount: number\n ): Partial<IrisGridThemeType> => ({\n ...IrisGridTheme,\n ...theme,\n autoSelectRow: !isEditable,\n // We only show the row footers when we have floating rows for aggregations\n rowFooterWidth: floatingRowCount > 0 ? theme.rowFooterWidth : 0,\n }),\n { max: 1 }\n );\n\n getValueForCell(\n columnIndex: GridRangeIndex,\n rowIndex: GridRangeIndex,\n rawValue = false\n ): string | unknown {\n const { model } = this.props;\n const modelColumn = this.getModelColumn(columnIndex);\n const modelRow = this.getModelRow(rowIndex);\n if (rawValue && modelColumn != null && modelRow != null) {\n 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 model.floatingTopRowCount + model.floatingBottomRowCount\n );\n }\n\n getVisibleColumn(modelIndex: ModelIndex): VisibleIndex {\n const { movedColumns } = this.state;\n return GridUtils.getVisibleIndex(modelIndex, movedColumns);\n }\n\n /**\n * Applies the provided input filters as quick filters,\n * and clears any existing quickFilters or advancedFilters on that column\n * @param inputFilters Array of input filters to apply\n * @param replaceExisting If true, new filters will replace the existing ones, instead of merging\n */\n applyInputFilters(\n inputFilters: InputFilter[],\n replaceExisting = false\n ): void {\n const { model } = this.props;\n const { advancedFilters, quickFilters } = this.state;\n const newAdvancedFilters = replaceExisting\n ? new Map()\n : new Map(advancedFilters);\n const newQuickFilters = replaceExisting ? new Map() : new Map(quickFilters);\n\n let isChanged = replaceExisting && advancedFilters.size > 0;\n inputFilters.forEach(({ name, type, value }) => {\n const modelIndex = model.columns.findIndex(\n ({ name: columnName, type: columnType }) =>\n columnName === name && columnType === type\n );\n if (modelIndex >= 0) {\n isChanged = newAdvancedFilters.delete(modelIndex) || isChanged;\n isChanged =\n this.applyQuickFilter(modelIndex, value, newQuickFilters) ||\n isChanged;\n } else {\n log.error('Unable to find column for inputFilter', name, type, value);\n }\n });\n if (isChanged) {\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n }\n\n /**\n * Applies a quick filter\n * @param modelIndex The index in the model of the column to set\n * @param value The string value to set to the quick filter\n * @param quickFilters The quick filters map\n * @returns True if the filters have changed because this quick filter was applied\n */\n applyQuickFilter(\n modelIndex: ModelIndex,\n value: string | null,\n quickFilters: QuickFilterMap\n ): boolean {\n const { model } = this.props;\n const { formatter } = model;\n const column = model.columns[modelIndex];\n\n if (value != null && `${value}`.trim().length > 0) {\n const quickFilter = quickFilters.get(modelIndex);\n if (quickFilter != null) {\n const { text } = quickFilter;\n if (text === value) {\n log.debug2('Ignoring change to existing filter');\n return false;\n }\n }\n quickFilters.set(modelIndex, {\n text: value,\n filter: IrisGrid.makeQuickFilter(column, value, formatter.timeZone),\n });\n return true;\n }\n return quickFilters.delete(modelIndex);\n }\n\n setAdvancedFilterMap(advancedFilters: AdvancedFilterMap): void {\n this.setState({ advancedFilters });\n }\n\n setAdvancedFilter(\n modelIndex: ModelIndex,\n filter: FilterCondition | null,\n options: AdvancedFilterOptions\n ): void {\n log.debug('Setting advanced filter', modelIndex, filter);\n\n this.startLoading('Filtering...', true);\n\n this.setState(({ advancedFilters }) => {\n const newAdvancedFilters = new Map(advancedFilters);\n if (filter == null) {\n newAdvancedFilters.delete(modelIndex);\n } else {\n newAdvancedFilters.set(modelIndex, {\n filter,\n options,\n });\n }\n return { advancedFilters: newAdvancedFilters };\n });\n }\n\n /**\n * Sets a quick filter against the provided column\n * @param modelIndex The index in the model for the column this filter is applied to\n * @param filter A filter to apply to the column, or null if there was an error\n * @param text The original text the filter was created with\n */\n setQuickFilter(\n modelIndex: ModelIndex,\n filter: FilterCondition,\n text: string\n ): void {\n log.debug('Setting quick filter', modelIndex, filter, text);\n\n this.startLoading('Filtering...', true);\n\n this.setState(({ quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n newQuickFilters.set(modelIndex, { filter, text });\n return { quickFilters: newQuickFilters };\n });\n }\n\n /**\n * Set grid filters based on the filter map\n * @param filterMap Filter map\n */\n setFilterMap(filterMap: FilterMap): void {\n log.debug('setFilterMap', filterMap);\n\n const { advancedSettings } = this.props;\n const clearFiltersOnLinkerFilterUpdate =\n advancedSettings.get(\n AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS\n ) ?? false;\n if (clearFiltersOnLinkerFilterUpdate) {\n this.clearAllFilters();\n }\n\n const { model } = this.props;\n filterMap.forEach(({ columnType, text, value }, columnName) => {\n const column = model.columns.find(\n c => c.name === columnName && c.type === columnType\n );\n if (column == null) {\n return;\n }\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n if (value === undefined) {\n this.removeQuickFilter(columnIndex);\n } else if (value === null) {\n this.setQuickFilter(columnIndex, column.filter().isNull(), '=null');\n } else {\n const filterValue = TableUtils.isTextType(columnType)\n ? dh.FilterValue.ofString(value)\n : dh.FilterValue.ofNumber(value);\n this.setQuickFilter(\n columnIndex,\n column.filter().eq(filterValue),\n `${text}`\n );\n }\n });\n }\n\n removeColumnFilter(modelColumn: ModelIndex): void {\n this.startLoading('Filtering...', true);\n\n this.setState(\n ({ advancedFilters, quickFilters }: Partial<IrisGridState>) => {\n const newAdvancedFilters = advancedFilters\n ? new Map(advancedFilters)\n : new Map();\n const newQuickFilters = quickFilters\n ? new Map(quickFilters)\n : new Map();\n newQuickFilters.delete(modelColumn);\n newAdvancedFilters.delete(modelColumn);\n\n return {\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n };\n }\n );\n }\n\n removeQuickFilter(modelColumn: ModelIndex): void {\n this.startLoading('Clearing Filter...', true);\n\n this.setState(({ quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n newQuickFilters.delete(modelColumn);\n\n return { quickFilters: newQuickFilters };\n });\n }\n\n clearAllFilters(): void {\n log.debug('Clearing all filters');\n\n const { advancedFilters, quickFilters, searchFilter } = this.state;\n if (\n quickFilters.size === 0 &&\n advancedFilters.size === 0 &&\n searchFilter === null\n ) {\n return;\n }\n\n // if there is an active quick filter input field, reset it as well\n this.clearGridInputField();\n\n this.startLoading('Clearing Filters...', true);\n this.setState({\n quickFilters: new Map(),\n advancedFilters: new Map(),\n searchValue: '',\n searchFilter: undefined,\n });\n }\n\n clearCrossColumSearch(): void {\n log.debug('Clearing cross-column search');\n\n this.setState({\n searchValue: '',\n searchFilter: undefined,\n });\n }\n\n clearGridInputField(): void {\n if (this.filterInputRef.current != null) {\n this.filterInputRef.current.setValue('');\n }\n }\n\n /**\n * Rebuilds all the current filters. Necessary if something like the time zone has changed.\n */\n rebuildFilters(): void {\n log.debug('Rebuilding filters');\n\n const { model } = this.props;\n const { advancedFilters, quickFilters } = this.state;\n const { columns, formatter } = model;\n\n const newAdvancedFilters = new Map();\n const newQuickFilters = new Map();\n\n advancedFilters.forEach((value, key) => {\n const { options } = value;\n const column = columns[key];\n const filter = TableUtils.makeAdvancedFilter(\n column,\n options,\n formatter.timeZone\n );\n newAdvancedFilters.set(key, {\n options,\n filter,\n });\n });\n\n quickFilters.forEach((value, key) => {\n const { text } = value;\n const column = columns[key];\n newQuickFilters.set(key, {\n text,\n filter: IrisGrid.makeQuickFilter(column, text, formatter.timeZone),\n });\n });\n\n this.startLoading('Rebuilding filters...', true);\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n\n setFilters({\n quickFilters,\n advancedFilters,\n }: Pick<IrisGridState, 'quickFilters' | 'advancedFilters'>): void {\n this.setState({\n quickFilters,\n advancedFilters,\n });\n }\n\n updateFormatterSettings(settings?: Settings, forceUpdate = true): void {\n const globalColumnFormats = FormatterUtils.getColumnFormats(settings);\n const dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(\n settings\n );\n\n const defaultDecimalFormatOptions =\n settings?.defaultDecimalFormatOptions ?? {};\n const defaultIntegerFormatOptions =\n settings?.defaultIntegerFormatOptions ?? {};\n const truncateNumbersWithPound =\n settings?.truncateNumbersWithPound ?? false;\n\n const isColumnFormatChanged = !deepEqual(\n this.globalColumnFormats,\n globalColumnFormats\n );\n const isDateFormattingChanged = !deepEqual(\n this.dateTimeFormatterOptions,\n dateTimeFormatterOptions\n );\n const isDecimalFormattingChanged = !deepEqual(\n this.decimalFormatOptions,\n settings?.defaultDecimalFormatOptions\n );\n const isIntegerFormattingChanged = !deepEqual(\n this.integerFormatOptions,\n defaultIntegerFormatOptions\n );\n const isTruncateNumbersChanged =\n this.truncateNumbersWithPound !== truncateNumbersWithPound;\n if (\n isColumnFormatChanged ||\n isDateFormattingChanged ||\n isDecimalFormattingChanged ||\n isIntegerFormattingChanged ||\n isTruncateNumbersChanged\n ) {\n this.globalColumnFormats = globalColumnFormats;\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = defaultDecimalFormatOptions;\n this.integerFormatOptions = defaultIntegerFormatOptions;\n this.truncateNumbersWithPound = truncateNumbersWithPound;\n this.updateFormatter({}, forceUpdate);\n\n if (isDateFormattingChanged && forceUpdate) {\n this.rebuildFilters();\n }\n }\n }\n\n getAlwaysFetchColumns = memoize(\n (\n alwaysFetchColumns: ColumnName[],\n columns: Column[],\n movedColumns: MoveOperation[],\n floatingLeftColumnCount: number,\n floatingRightColumnCount: number,\n draggingRange?: BoundedAxisRange\n ) => {\n const floatingColumns: ColumnName[] = [];\n\n for (let i = 0; i < floatingLeftColumnCount; i += 1) {\n floatingColumns.push(\n columns[GridUtils.getModelIndex(i, movedColumns)].name\n );\n }\n\n for (let i = 0; i < floatingRightColumnCount; i += 1) {\n floatingColumns.push(\n columns[GridUtils.getModelIndex(columns.length - 1 - i, movedColumns)]\n .name\n );\n }\n\n if (draggingRange) {\n for (let i = draggingRange[0]; i <= draggingRange[1]; i += 1) {\n floatingColumns.push(\n columns[GridUtils.getModelIndex(i, movedColumns)].name\n );\n }\n }\n\n const columnSet = new Set([...alwaysFetchColumns, ...floatingColumns]);\n\n return [...columnSet];\n }\n );\n\n updateFormatter(\n updatedFormats: { customColumnFormatMap?: Map<ColumnName, FormattingRule> },\n forceUpdate = true\n ): void {\n const { customColumnFormatMap } = this.state;\n const update = {\n customColumnFormatMap,\n ...updatedFormats,\n };\n const mergedColumnFormats = [\n ...(this.globalColumnFormats ?? []),\n ...update.customColumnFormatMap.values(),\n ];\n const formatter = new Formatter(\n mergedColumnFormats,\n this.dateTimeFormatterOptions,\n this.decimalFormatOptions,\n this.integerFormatOptions,\n this.truncateNumbersWithPound\n );\n\n log.debug('updateFormatter', this.globalColumnFormats, mergedColumnFormats);\n\n this.setState({ ...update, formatter }, () => {\n if (forceUpdate && this.grid) {\n this.grid.forceUpdate();\n }\n });\n }\n\n initFormatter(): void {\n const { settings } = this.props;\n this.updateFormatterSettings(settings);\n }\n\n initState(): void {\n const {\n applyInputFiltersOnInit,\n inputFilters,\n sorts,\n model,\n reverseType,\n customColumns,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n } = this.props;\n\n const searchColumns = selectedSearchColumns ?? [];\n const searchFilter = CrossColumnSearch.createSearchFilter(\n searchValue,\n searchColumns,\n model.columns,\n invertSearchColumns\n );\n\n if (applyInputFiltersOnInit) {\n // There may be more than one input filter on the same column with value === '' applied last\n // We don't want to skip it here, so only excluding the ones that were never applied (null)\n const inputFiltersWithValues = inputFilters.filter(\n inputFilter => inputFilter.value != null\n );\n this.applyInputFilters(inputFiltersWithValues);\n }\n\n this.setState({\n sorts,\n reverseType,\n customColumns,\n isReady: true,\n searchFilter,\n });\n this.initFormatter();\n }\n\n async loadPartitionsTable(partitionColumn: Column): Promise<void> {\n const { model } = this.props;\n this.setState({ isSelectingPartition: true });\n\n try {\n const partitionTable = await this.pending.add(\n model.valuesTable(partitionColumn),\n resolved => resolved.close()\n );\n\n const column = partitionTable.columns[0];\n const sort = column.sort().desc();\n partitionTable.applySort([sort]);\n partitionTable.setViewport(0, 0, [column]);\n\n const data = await this.pending.add(partitionTable.getViewportData());\n if (data.rows.length > 0) {\n const row = data.rows[0];\n const value = row.get(column);\n\n this.updatePartition(value, partitionColumn);\n\n this.setState({ isSelectingPartition: true });\n } else {\n log.info('Table does not have any data, just fetching all');\n this.setState({ isSelectingPartition: false });\n this.handlePartitionFetchAll();\n }\n this.setState({ partitionTable, partitionColumn }, () => {\n this.initState();\n });\n } catch (error) {\n this.handleTableLoadError(error);\n }\n }\n\n updatePartition(partition: string, partitionColumn: Column): void {\n const partitionFilter = partitionColumn\n .filter()\n .eq(dh.FilterValue.ofString(partition));\n const partitionFilters = [partitionFilter];\n this.setState({\n partition,\n partitionFilters,\n });\n }\n\n copyCell(\n columnIndex: GridRangeIndex,\n rowIndex: GridRangeIndex,\n rawValue = false\n ): void {\n const { canCopy } = this.props;\n if (canCopy) {\n const value = String(\n this.getValueForCell(columnIndex, rowIndex, rawValue)\n );\n 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 { movedColumns } = this.state;\n const { model } = this.props;\n const { columnCount } = model;\n const modelColumn = GridUtils.getModelIndex(column, movedColumns);\n\n if (\n column == null ||\n column < 0 ||\n columnCount <= column ||\n !model.isFilterable(modelColumn)\n ) {\n this.setState({ focusedFilterBarColumn: null });\n return;\n }\n\n const { metricCalculator, metrics } = this.state;\n assertNotNull(metrics);\n const { left, rightVisible, lastLeft } = metrics;\n if (column < left) {\n this.grid?.setViewState({ left: column }, true);\n } else if (rightVisible < column) {\n const metricState = this.grid?.getMetricState();\n assertNotNull(metricState);\n const newLeft = metricCalculator.getLastLeft(metricState, column);\n this.grid?.setViewState(\n { left: Math.min(newLeft, lastLeft), leftOffset: 0 },\n true\n );\n }\n this.lastFocusedFilterBarColumn = column;\n this.setState({ focusedFilterBarColumn: column, isFilterBarShown: true });\n }\n\n hideColumnByVisibleIndex(columnVisibleIndex: VisibleIndex): void {\n const { metricCalculator, movedColumns } = this.state;\n metricCalculator.setColumnWidth(\n GridUtils.getModelIndex(columnVisibleIndex, movedColumns),\n 0\n );\n\n this.grid?.forceUpdate();\n }\n\n freezeColumnByColumnName(columnName: ColumnName): void {\n const { frozenColumns, movedColumns } = this.state;\n const { model } = this.props;\n log.debug2('freezing column', columnName);\n\n const allFrozenColumns =\n frozenColumns == null\n ? new Set(model.frozenColumns)\n : new Set(frozenColumns);\n\n allFrozenColumns.add(columnName);\n\n const modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n const newMovedColumns = GridUtils.moveItem(\n visibleIndex,\n allFrozenColumns.size - 1,\n movedColumns\n );\n\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns,\n });\n }\n\n unFreezeColumnByColumnName(columnName: ColumnName): void {\n const { frozenColumns, movedColumns } = this.state;\n const { model } = this.props;\n log.debug2('unfreezing column', columnName);\n\n const allFrozenColumns =\n frozenColumns == null\n ? new Set(model.frozenColumns)\n : new Set(frozenColumns);\n\n allFrozenColumns.delete(columnName);\n\n const modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n\n // Move to after remaining frozen columns and front columns\n const newMovedColumns = GridUtils.moveItem(\n visibleIndex,\n allFrozenColumns.size + model.frontColumns.length,\n movedColumns\n );\n\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns,\n });\n }\n\n handleColumnVisibilityChanged(\n modelIndexes: ModelIndex[],\n visibilityOption?: VisibilityOptionType\n ): void {\n const { metricCalculator } = this.state;\n if (\n visibilityOption === VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n ) {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.resetColumnWidth(modelIndex);\n });\n } else {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.setColumnWidth(modelIndex, 0);\n });\n }\n this.grid?.forceUpdate();\n }\n\n handleCrossColumnSearch(\n searchValue: string,\n selectedSearchColumns: ColumnName[],\n invertSearchColumns: boolean\n ): void {\n const { model } = this.props;\n\n this.updateSearchFilter(\n searchValue,\n selectedSearchColumns,\n model.columns,\n invertSearchColumns\n );\n\n this.setState({\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n });\n }\n\n updateSearchFilter = debounce(\n (\n searchValue: string,\n selectedSearchColumns: ColumnName[],\n columns: Column[],\n invertSearchColumns: boolean\n ): void => {\n const searchFilter = CrossColumnSearch.createSearchFilter(\n searchValue,\n selectedSearchColumns,\n columns,\n invertSearchColumns\n );\n this.setState({ searchFilter });\n },\n SET_FILTER_DEBOUNCE\n );\n\n handleAnimationLoop(): void {\n this.grid?.updateCanvasScale();\n this.grid?.updateCanvas();\n\n if (this.isAnimating) {\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n }\n\n handleAnimationStart(): void {\n log.debug2('handleAnimationStart');\n\n this.isAnimating = true;\n\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n\n handleAnimationEnd(): void {\n log.debug2('handleAnimationEnd');\n\n this.isAnimating = false;\n }\n\n handlePartitionAppend(value: string): void {\n const { onPartitionAppend } = this.props;\n const { partitionColumn } = this.state;\n onPartitionAppend(partitionColumn, value);\n }\n\n handlePartitionChange(partition: string): void {\n const { partitionColumn } = this.state;\n this.updatePartition(partition, partitionColumn);\n }\n\n handlePartitionFetchAll(): void {\n this.setState({\n partitionFilters: [],\n isSelectingPartition: false,\n });\n }\n\n handlePartitionDone(): void {\n this.setState({ isSelectingPartition: false });\n }\n\n handleTableLoadError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error(error);\n\n const { onError } = this.props;\n onError(error);\n }\n\n showAllColumns(): void {\n const { metricCalculator } = this.state;\n const userColumnWidths = metricCalculator.getUserColumnWidths();\n const entries = [...userColumnWidths.entries()];\n for (let i = 0; i < entries.length; i += 1) {\n const [modelIndex, columnWidth] = entries[i];\n if (columnWidth === 0) {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n }\n this.grid?.forceUpdate();\n }\n\n toggleSort(columnIndex: VisibleIndex, addToExisting: boolean): void {\n log.info('Toggling sort for column', columnIndex);\n\n const { model } = this.props;\n const { sorts: currentSorts } = this.state;\n const modelColumn = this.getModelColumn(columnIndex);\n assertNotNull(modelColumn);\n const sorts = TableUtils.toggleSortForColumn(\n currentSorts,\n model.columns,\n modelColumn,\n addToExisting\n );\n this.updateSorts(sorts);\n }\n\n updateSorts(sorts: Sort[]): void {\n this.startLoading('Sorting...');\n this.setState({ sorts });\n this.grid?.forceUpdate();\n }\n\n sortColumn(\n modelColumn: ModelIndex,\n direction: SortDirection = TableUtils.sortDirection.none,\n isAbs = false,\n addToExisting = false\n ): void {\n assertNotNull(modelColumn);\n const { model } = this.props;\n const sorts = TableUtils.sortColumn(\n model.sort,\n model.columns,\n modelColumn,\n direction,\n isAbs,\n addToExisting\n );\n this.startLoading('Sorting...');\n this.setState({ sorts });\n this.grid?.forceUpdate();\n }\n\n reverse(reverseType: ReverseType): void {\n this.startLoading('Reversing...');\n this.setState({ reverseType });\n this.grid?.forceUpdate();\n }\n\n isReversible(): boolean {\n const { model } = this.props;\n return model.isReversible;\n }\n\n toggleFilterBar(focusIndex = this.lastFocusedFilterBarColumn): void {\n let { isFilterBarShown } = this.state;\n isFilterBarShown = !isFilterBarShown;\n this.setState({ isFilterBarShown });\n\n if (isFilterBarShown) {\n if (focusIndex != null) {\n this.focusFilterBar(focusIndex);\n } else {\n let columnIndex = 0;\n const { model } = this.props;\n const { columnCount } = model;\n for (let i = 0; i < columnCount; i += 1) {\n const modelColumn = this.getModelColumn(i);\n if (modelColumn != null) {\n const column = model.columns[modelColumn];\n if (column != null && TableUtils.isTextType(column.type)) {\n columnIndex = i;\n break;\n }\n }\n }\n this.focusFilterBar(columnIndex);\n }\n } else {\n this.grid?.focus();\n }\n }\n\n isTableSearchAvailable(): boolean {\n const { model, canToggleSearch } = this.props;\n const searchDisplayMode = model?.layoutHints?.searchDisplayMode;\n\n if (searchDisplayMode === dh.SearchDisplayMode?.SEARCH_DISPLAY_HIDE) {\n return false;\n }\n if (searchDisplayMode === dh.SearchDisplayMode?.SEARCH_DISPLAY_SHOW) {\n return true;\n }\n\n return canToggleSearch;\n }\n\n toggleSearchBar(): void {\n const { showSearchBar } = this.state;\n if (!this.isTableSearchAvailable()) {\n return;\n }\n\n const update = !showSearchBar;\n this.setState(\n {\n showSearchBar: update,\n },\n () => {\n if (update && this.crossColumnRef?.current) {\n this.crossColumnRef?.current.focus();\n } else {\n this.grid?.focus();\n }\n }\n );\n }\n\n toggleGotoRow(row = ''): void {\n const { isGotoRowShown } = this.state;\n if (row) {\n // if invoked with a row, keep open instead of toggle\n this.setState({\n isGotoRowShown: true,\n gotoRow: row,\n gotoRowError: '',\n });\n return;\n }\n this.setState({\n isGotoRowShown: !isGotoRowShown,\n gotoRow: '',\n gotoRowError: '',\n });\n }\n\n async commitPending(): Promise<void> {\n const { model } = this.props;\n if (!isEditableGridModel(model) || !model.isEditable) {\n throw new Error('Cannot save, table is not editable');\n }\n\n const { pendingSavePromise } = this.state;\n if (pendingSavePromise != null) {\n throw new Error('Save already in progress');\n }\n\n const containsGridCellInputField = document?.activeElement?.classList.contains(\n 'grid-cell-input-field'\n );\n if (containsGridCellInputField != null && containsGridCellInputField) {\n if (\n document.activeElement != null &&\n document.activeElement.classList.contains('error')\n ) {\n throw new ValidationError('Current input is invalid');\n }\n\n // Focus the grid again to commit any pending input changes\n this.grid?.focus();\n }\n\n const newPendingSavePromise = this.pending\n .add(model.commitPending())\n .then(() => {\n this.setState({ pendingSaveError: null, pendingSavePromise: null });\n })\n .catch(err => {\n if (!PromiseUtils.isCanceled(err)) {\n this.setState({ pendingSaveError: err, pendingSavePromise: null });\n }\n });\n this.setState({ pendingSavePromise: newPendingSavePromise });\n return newPendingSavePromise;\n }\n\n async discardPending(): Promise<void> {\n const { pendingSavePromise } = this.state;\n if (pendingSavePromise != null) {\n throw new Error('Cannot cancel a save in progress');\n }\n\n this.setState({\n pendingSavePromise: null,\n pendingSaveError: null,\n pendingDataMap: new Map(),\n pendingDataErrors: new Map(),\n });\n }\n\n /**\n * Select the passed in column and notify listener\n * @param column The column in this table to link\n */\n selectColumn(column: Column): void {\n const { onColumnSelected } = this.props;\n onColumnSelected(column);\n }\n\n /**\n * Select all the data for a given row and notify listener\n */\n selectData(columnIndex: ModelIndex, rowIndex: ModelIndex): void {\n const { model } = this.props;\n const { columns, groupedColumns } = model;\n const dataMap: RowDataMap = {};\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n const { name, type } = column;\n const value = model.valueForCell(i, rowIndex);\n const text = model.textForCell(i, rowIndex);\n const isExpandable =\n isExpandableGridModel(model) && model.isRowExpandable(rowIndex);\n const isGrouped = groupedColumns.find(c => c.name === name) != null;\n dataMap[name] = { value, text, type, isGrouped, isExpandable };\n }\n const { onDataSelected } = this.props;\n onDataSelected(rowIndex, dataMap);\n }\n\n handleAdvancedFilterChange(\n column: Column,\n filter: FilterCondition | null,\n options: AdvancedFilterOptions\n ): void {\n const { model } = this.props;\n const index = model.getColumnIndexByName(column.name);\n assertNotNull(index);\n this.setAdvancedFilter(index, filter, options);\n }\n\n handleAdvancedFilterSortChange(\n column: Column,\n direction: SortDirection,\n addToExisting = false\n ): void {\n const { model } = this.props;\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n const oldSort = TableUtils.getSortForColumn(model.sort, columnIndex);\n let newSort = null;\n\n if (oldSort == null || oldSort.direction !== direction) {\n if (direction === TableUtils.sortDirection.descending) {\n newSort = column.sort().desc();\n } else {\n newSort = column.sort().asc();\n }\n }\n\n const sorts = TableUtils.setSortForColumn(\n model.sort,\n columnIndex,\n newSort,\n addToExisting\n );\n log.info('Setting table sorts', sorts);\n\n this.startLoading('Sorting...');\n this.setState({ sorts });\n\n this.grid?.forceUpdate();\n }\n\n handleAdvancedFilterDone(): void {\n this.grid?.focus();\n }\n\n handleAdvancedMenuOpened(column: GridRangeIndex): void {\n this.setState({ shownAdvancedFilter: column });\n }\n\n handleGotoRowOpened(): void {\n this.setState({ isGotoRowShown: true });\n }\n\n handleGotoRowClosed(): void {\n this.setState({ isGotoRowShown: false });\n }\n\n handleAdvancedMenuClosed(columnIndex: number): void {\n const { focusedFilterBarColumn, isFilterBarShown } = this.state;\n if (\n isFilterBarShown &&\n focusedFilterBarColumn === columnIndex &&\n this.filterInputRef?.current !== null\n ) {\n this.filterInputRef?.current.focus();\n this.setState({ shownAdvancedFilter: null });\n } else {\n this.setState({\n focusedFilterBarColumn: null,\n shownAdvancedFilter: null,\n });\n }\n }\n\n handleCancel(): void {\n this.rollback();\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleChartChange(): void {\n // TODO: IDS-4242 Update Chart Preview\n }\n\n handleChartCreate(settings: ChartBuilderSettings): void {\n const { model, onCreateChart } = this.props;\n onCreateChart(settings, model);\n }\n\n handleGridError(error?: Error): void {\n log.warn('Grid Error', error);\n this.setState({\n toastMessage: <div className=\"error-message\">{`${error}`}</div>,\n });\n }\n\n handleFilterBarChange(value: string): void {\n this.startLoading('Filtering...', true);\n\n this.setState(({ focusedFilterBarColumn, quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n if (focusedFilterBarColumn != null) {\n const modelIndex = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelIndex);\n this.applyQuickFilter(modelIndex, value, newQuickFilters);\n }\n return { quickFilters: newQuickFilters };\n });\n }\n\n handleFilterBarDone(setGridFocus = true, defocusInput = true): void {\n if (setGridFocus) {\n this.grid?.focus();\n }\n if (defocusInput) {\n this.setState({ focusedFilterBarColumn: null });\n }\n }\n\n handleFilterBarTab(backward: boolean): void {\n const { focusedFilterBarColumn } = this.state;\n assertNotNull(focusedFilterBarColumn);\n if (backward) {\n this.focusFilterBar(focusedFilterBarColumn - 1);\n } else {\n this.focusFilterBar(focusedFilterBarColumn + 1);\n }\n }\n\n handleFormatSelection(\n modelIndex: ModelIndex,\n selectedFormat: TableColumnFormat | null\n ): void {\n const { model } = this.props;\n const column = model.columns[modelIndex];\n const { customColumnFormatMap: prevCustomColumnFormatMap } = this.state;\n const customColumnFormatMap = new Map(prevCustomColumnFormatMap);\n\n if (selectedFormat != null) {\n const normalizedType = TableUtils.getNormalizedType(column.type);\n assertNotNull(normalizedType);\n const columnFormattingRule = Formatter.makeColumnFormattingRule(\n normalizedType,\n column.name,\n selectedFormat\n );\n\n customColumnFormatMap.set(column.name, columnFormattingRule);\n } else {\n customColumnFormatMap.delete(column.name);\n }\n\n this.updateFormatter({ customColumnFormatMap });\n }\n\n handleMenu(e: React.MouseEvent<HTMLButtonElement>): void {\n e.stopPropagation();\n this.setState({ isMenuShown: true });\n }\n\n handleMenuClose(): void {\n this.setState({ isMenuShown: false, openOptions: [] });\n }\n\n handleMenuBack(): void {\n this.setState(({ openOptions }) => {\n const newOptions = [...openOptions];\n newOptions.pop();\n return { openOptions: newOptions };\n });\n }\n\n handleMenuSelect(option: OptionItem): void {\n this.setState(({ openOptions }) => ({\n openOptions: [...openOptions, option],\n }));\n }\n\n handleRequestFailed(event: Event): void {\n const customEvent = event as CustomEvent;\n log.error('request failed:', customEvent.detail);\n this.stopLoading();\n if (this.canRollback()) {\n this.startLoading('Rolling back changes...', true);\n this.rollback();\n } else {\n log.error('Table failed and unable to rollback');\n const { onError } = this.props;\n onError(new Error(`Error displaying table: ${customEvent.detail}`));\n }\n }\n\n handleUpdate(): void {\n this.stopLoading();\n log.debug2('Received model update');\n\n const {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n } = this.state;\n\n const config = {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n };\n\n if (!isEmptyConfig(config)) {\n this.lastLoadedConfig = config;\n } else {\n this.lastLoadedConfig = null;\n }\n\n this.grid?.forceUpdate();\n }\n\n handleViewChanged(metrics?: GridMetrics): void {\n const { model } = this.props;\n const { selectionEndRow = 0 } = this.grid?.state ?? {};\n let pendingRowCount = 0;\n if (isEditableGridModel(model) && model.isEditable) {\n assertNotNull(metrics);\n const { bottomViewport } = metrics;\n\n // We have an editable table that we can add new rows to\n // Display empty rows beneath the table rows that user can fill in\n const bottomNonFloating = model.rowCount - model.floatingBottomRowCount;\n if (selectionEndRow === bottomNonFloating - 1) {\n // Selection is in the last row, add another blank row\n pendingRowCount = model.pendingRowCount + 1;\n } else if (selectionEndRow === bottomNonFloating - 2) {\n // We may have just added a row based on selection moving, so just leave it as is\n pendingRowCount = model.pendingRowCount;\n } else {\n // Otherwise fill up the viewport with empty cells\n pendingRowCount = Math.max(\n 0,\n bottomViewport -\n (model.rowCount - model.pendingRowCount) -\n model.floatingTopRowCount -\n model.floatingBottomRowCount -\n 1\n );\n }\n }\n\n this.setState({ metrics, pendingRowCount });\n }\n\n handleSelectionChanged(selectedRanges?: GridRange[]): void {\n assertNotNull(selectedRanges);\n const { onSelectionChanged } = this.props;\n const { copyOperation } = this.state;\n this.setState({ selectedRanges });\n if (copyOperation != null) {\n this.setState({ copyOperation: null });\n }\n onSelectionChanged(selectedRanges);\n }\n\n handleMovedColumnsChanged(\n movedColumns: MoveOperation[],\n onChangeApplied: (() => void) | undefined = () => null\n ): void {\n this.setState({ movedColumns }, onChangeApplied);\n }\n\n handleTooltipRef(tooltip: Tooltip): void {\n // Need to start the timer right away, since we're creating the tooltip when we want the timer to start\n if (tooltip != null) {\n tooltip.startTimer();\n }\n\n this.tooltip = tooltip;\n }\n\n handleConditionalFormatsChange(\n conditionalFormats: SidebarFormattingRule[]\n ): void {\n log.debug('Updated conditional formats', conditionalFormats);\n this.setState({ conditionalFormats });\n }\n\n handleConditionalFormatCreate(): void {\n log.debug('Create new conditional format');\n const { openOptions, conditionalFormats } = this.state;\n this.setState({\n openOptions: [\n ...openOptions,\n {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: `Create Formatting Rule`,\n },\n ],\n conditionalFormatEditIndex: conditionalFormats.length,\n // Start with a blank rule\n conditionalFormatPreview: undefined,\n });\n }\n\n handleConditionalFormatEdit(index: number): void {\n log.debug('Edit conditional format', index);\n const { openOptions, conditionalFormats } = this.state;\n this.setState({\n openOptions: [\n ...openOptions,\n {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: `Edit Formatting Rule`,\n },\n ],\n conditionalFormatEditIndex: index,\n // Clone rule to preview temporary changes\n conditionalFormatPreview: { ...conditionalFormats[index] },\n });\n }\n\n // Apply live changes\n handleConditionalFormatEditorUpdate = debounce(\n (conditionalFormatPreview?: SidebarFormattingRule): void => {\n this.setState({ conditionalFormatPreview });\n },\n SET_CONDITIONAL_FORMAT_DEBOUNCE\n );\n\n handleConditionalFormatEditorSave(config: SidebarFormattingRule): void {\n log.debug('Save conditional format changes', config);\n this.setState(\n state => {\n if (state.conditionalFormatEditIndex === null) {\n log.debug('Invalid format index');\n return null;\n }\n const conditionalFormats = [...state.conditionalFormats];\n conditionalFormats[state.conditionalFormatEditIndex] = config;\n return { conditionalFormats };\n },\n () => {\n this.handleMenuBack();\n }\n );\n }\n\n handleConditionalFormatEditorCancel(): void {\n this.handleMenuBack();\n // Not resetting conditionalFormatPreview here\n // to prevent editor fields change during the menu transition\n this.setState({ conditionalFormatEditIndex: null });\n }\n\n handleUpdateCustomColumns(customColumns: string[]): void {\n log.info(`handleUpdateCustomColumns:`, customColumns);\n\n const { model } = this.props;\n const {\n movedColumns,\n sorts,\n quickFilters,\n advancedFilters,\n selectDistinctColumns,\n } = this.state;\n\n const { columns } = model;\n const oldCustomColumns = model.customColumns.map(\n customColumn => `${customColumn}`\n );\n\n const removedColumnNames = IrisGridUtils.getRemovedCustomColumnNames(\n oldCustomColumns,\n customColumns\n );\n if (removedColumnNames.length > 0) {\n const newSorts = IrisGridUtils.removeSortsInColumns(\n sorts,\n removedColumnNames\n );\n const newQuickFilters = IrisGridUtils.removeFiltersInColumns(\n columns,\n quickFilters,\n removedColumnNames\n );\n const newAdvancedFilters = IrisGridUtils.removeFiltersInColumns(\n columns,\n advancedFilters,\n removedColumnNames\n );\n const newMovedColumns = IrisGridUtils.removeColumnFromMovedColumns(\n columns,\n movedColumns,\n removedColumnNames\n );\n const newSelectDistinctColumns = IrisGridUtils.removeColumnsFromSelectDistinctColumns(\n selectDistinctColumns,\n removedColumnNames\n );\n if (newSorts.length !== sorts.length) {\n log.debug('removing sorts from removed custom columns...');\n this.setState({ sorts: newSorts });\n }\n if (\n newQuickFilters.size !== quickFilters.size ||\n newAdvancedFilters.size !== advancedFilters.size\n ) {\n log.debug(`removing filters from removed custom columns...`);\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n if (!deepEqual(movedColumns, newMovedColumns)) {\n log.debug(\n `change moved columns for removed custom columns`,\n newMovedColumns\n );\n this.setState({ movedColumns: newMovedColumns });\n }\n if (!deepEqual(selectDistinctColumns, newSelectDistinctColumns)) {\n log.debug(\n `change selectDistinct columns for removed custom columns`,\n newMovedColumns\n );\n this.setState({ selectDistinctColumns: newSelectDistinctColumns });\n }\n }\n\n this.setState({ customColumns });\n this.startLoading('Applying custom columns...');\n }\n\n handleCustomColumnsChanged(): void {\n log.debug('custom columns changed');\n const { isReady } = this.state;\n if (isReady) {\n this.stopLoading();\n this.grid?.forceUpdate();\n } else {\n this.initState();\n }\n }\n\n handlePendingCommitClicked(): Promise<void> {\n return this.commitPending();\n }\n\n handlePendingDiscardClicked(): Promise<void> {\n return this.discardPending();\n }\n\n handlePendingDataUpdated(): void {\n log.debug('pending data updated');\n const { model } = this.props;\n const { pendingDataMap, pendingDataErrors } = model;\n this.setState({\n pendingDataMap,\n pendingDataErrors,\n pendingSaveError: null,\n });\n this.grid?.forceUpdate();\n }\n\n /**\n * User added, removed, or changed the order of aggregations, or position\n * @param aggregationSettings The new aggregation settings\n */\n handleAggregationsChange(aggregationSettings: AggregationSettings): void {\n log.debug('handleAggregationsChange', aggregationSettings);\n\n this.startLoading(\n `Aggregating ${aggregationSettings.aggregations\n .map(a => a.operation)\n .join(', ')}...`\n );\n this.setState({ aggregationSettings });\n }\n\n /**\n * A specific aggregation has been modified\n * @param aggregation The new aggregation\n */\n handleAggregationChange(aggregation: Aggregation): void {\n log.debug('handleAggregationChange', aggregation);\n\n this.startLoading(`Aggregating ${aggregation.operation}...`);\n this.setState(({ aggregationSettings }) => ({\n selectedAggregation: aggregation,\n aggregationSettings: {\n ...aggregationSettings,\n aggregations: aggregationSettings.aggregations.map(a =>\n a.operation === aggregation.operation ? aggregation : a\n ),\n },\n }));\n }\n\n /**\n * An aggregations has been selected for editing\n * @param aggregation The aggregation to edit\n */\n handleAggregationEdit(aggregation: Aggregation): void {\n log.debug('handleAggregationEdit', aggregation);\n\n const { openOptions } = this.state;\n\n this.setState({\n openOptions: [\n ...openOptions,\n {\n type: OptionType.AGGREGATION_EDIT,\n title: `Edit Columns to ${aggregation.operation}`,\n },\n ],\n selectedAggregation: aggregation,\n });\n }\n\n handleRollupChange(rollupConfig: UIRollupConfig): void {\n log.info('Rollup change', rollupConfig);\n\n this.resetGridViewState();\n this.showAllColumns();\n this.clearAllFilters();\n\n this.startLoading(\n `Grouping by columns ${rollupConfig?.columns?.join(', ') ?? ''}...`\n );\n\n // Have to clear select distinct since rollup uses the original columns, not the current ones.\n // IrisGridProxyModel has a check to prevent model update\n // when selectDistinctModel is cleared and the rollupConfig is set on the model.\n this.setState({\n rollupConfig,\n movedColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n selectDistinctColumns: [],\n });\n }\n\n handleSelectDistinctChanged(columnNames: ColumnName[]): void {\n log.debug('SelectDistinct change', columnNames);\n\n this.resetGridViewState();\n\n this.showAllColumns();\n this.clearAllFilters();\n\n this.startLoading(\n `Selecting distinct values in ${\n columnNames.length > 0 ? columnNames.join(', ') : ''\n }...`\n );\n\n this.setState({\n selectDistinctColumns: columnNames,\n movedColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n });\n }\n\n handleDownloadTableStart(): void {\n const { canDownloadCsv } = this.props;\n if (canDownloadCsv) {\n this.setState({\n isTableDownloading: true,\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.INITIATING,\n });\n } else {\n log.error(\n 'Attempted to handleDownloadTableStart for user without download CSV permission.'\n );\n }\n }\n\n handleDownloadTable(\n fileName: string,\n frozenTable: Table,\n tableSubscription: TableViewportSubscription,\n 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 {\n gridX,\n gridY,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n } = metrics;\n const columnX = visibleColumnXs.get(focusedFilterBarColumn);\n const columnWidth = visibleColumnWidths.get(focusedFilterBarColumn);\n if (columnX != null && columnWidth != null) {\n const x = gridX + columnX;\n const y = gridY - (theme.filterBarHeight ?? 0);\n const fieldWidth = columnWidth + 1; // cover right border\n const fieldHeight = (theme.filterBarHeight ?? 0) - 1; // remove bottom border\n const style = {\n top: y,\n left: x,\n minWidth: Math.min(fieldWidth, width - x), // Don't cause overflow\n height: fieldHeight,\n };\n let value = '';\n let isValid = true;\n const modelColumn = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelColumn);\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter != null) {\n value = quickFilter.text;\n isValid = quickFilter.filter != null;\n }\n const isBarFiltered =\n quickFilters.size !== 0 || advancedFilters.size !== 0;\n focusField = (\n <FilterInputField\n ref={this.filterInputRef}\n style={style}\n className={classNames({\n error: !isValid,\n active: value !== '' || advancedFilter != null,\n 'iris-grid-has-filter': isBarFiltered,\n })}\n isAdvancedFilterSet={advancedFilter != null}\n onAdvancedFiltersTriggered={() => {\n this.setState({ shownAdvancedFilter: focusedFilterBarColumn });\n }}\n key={focusedFilterBarColumn}\n onChange={this.handleFilterBarChange}\n onDone={this.handleFilterBarDone}\n onTab={this.handleFilterBarTab}\n onContextMenu={this.grid?.handleContextMenu}\n debounceMs={debounceMs}\n value={value}\n />\n );\n }\n }\n\n let loadingElement = null;\n if (loadingText != null) {\n const loadingStatus = (\n <div className=\"iris-grid-loading-status\">\n <div\n className={classNames('iris-grid-loading-status-bar', {\n show: loadingSpinnerShown,\n })}\n >\n {loadingText}\n </div>\n <button\n type=\"button\"\n onClick={this.handleCancel}\n className={classNames('iris-grid-btn-cancel', {\n show: loadingSpinnerShown,\n })}\n >\n <FontAwesomeIcon icon={vsClose} transform=\"down-1\" />\n Cancel\n </button>\n </div>\n );\n const gridY = metrics ? metrics.gridY : 0;\n loadingElement = (\n <div className=\"iris-grid-loading\" style={{ top: gridY }}>\n {loadingStatus}\n </div>\n );\n }\n\n let columnTooltip: React.ReactNode = null;\n if (shownColumnTooltip != null && metrics) {\n columnTooltip = this.getColumnTooltip(shownColumnTooltip, metrics, model);\n // #510 We may need to update the position of the tooltip if it's already opened and columns are resized\n this.tooltip?.update();\n }\n\n const filterBar = [];\n if (metrics && isFilterBarShown) {\n const {\n gridX,\n gridY,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n } = metrics;\n const { filterBarHeight } = theme;\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n\n const columnX = visibleColumnXs.get(columnIndex);\n const columnWidth = visibleColumnWidths.get(columnIndex);\n const modelColumn = this.getModelColumn(columnIndex);\n if (modelColumn != null) {\n const isFilterable = model.isFilterable(modelColumn);\n if (\n isFilterable &&\n columnX != null &&\n columnWidth != null &&\n columnWidth > 0\n ) {\n const x = gridX + columnX + columnWidth - 24;\n const y = gridY - (filterBarHeight ?? 0) + 2; // 2 acts as top margin for the button\n const style: CSSProperties = {\n position: 'absolute',\n top: y,\n left: x,\n };\n const advancedFilter = advancedFilters.get(modelColumn);\n const isFilterSet = advancedFilter != null;\n const isFilterVisible =\n columnIndex === hoverAdvancedFilter ||\n columnIndex === focusedFilterBarColumn ||\n isFilterSet;\n const element = (\n <div\n className={classNames('advanced-filter-button-container', {\n hidden: !isFilterVisible,\n })}\n key={columnIndex}\n style={style}\n >\n {isFilterVisible && (\n <Button\n kind=\"ghost\"\n className={classNames(\n 'btn-link-icon advanced-filter-button',\n {\n 'filter-set': isFilterSet,\n }\n )}\n onClick={() => {\n this.setState({ shownAdvancedFilter: columnIndex });\n }}\n onContextMenu={event => {\n this.grid?.handleContextMenu(event);\n }}\n onMouseEnter={() => {\n this.setState({ hoverAdvancedFilter: columnIndex });\n }}\n onMouseLeave={() => {\n this.setState({ hoverAdvancedFilter: null });\n }}\n >\n <div className=\"fa-layers\">\n <FontAwesomeIcon\n icon={dhFilterFilled}\n className=\"filter-solid\"\n />\n <FontAwesomeIcon\n icon={vsFilter}\n className=\"filter-light\"\n />\n </div>\n </Button>\n )}\n </div>\n );\n filterBar.push(element);\n }\n }\n }\n }\n const advancedFilterMenus = [];\n if (metrics) {\n const {\n gridX,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n columnHeaderHeight,\n } = metrics;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n const columnX = visibleColumnXs.get(columnIndex);\n const columnWidth = visibleColumnWidths.get(columnIndex);\n if (columnX != null && columnWidth != null && columnWidth > 0) {\n const xColumnHeader = gridX + columnX;\n const xFilterBar = gridX + columnX + columnWidth - 20;\n const style: CSSProperties = isFilterBarShown\n ? {\n position: 'absolute',\n top: columnHeaderHeight,\n left: xFilterBar,\n width: 20,\n height: theme.filterBarHeight,\n }\n : {\n position: 'absolute',\n top: 0,\n left: xColumnHeader,\n width: columnWidth,\n height: columnHeaderHeight,\n };\n const modelColumn = this.getModelColumn(columnIndex);\n if (modelColumn != null) {\n const column = model.columns[modelColumn];\n const advancedFilter = advancedFilters.get(modelColumn);\n const { options: advancedFilterOptions } = advancedFilter || {};\n const sort = TableUtils.getSortForColumn(model.sort, modelColumn);\n const sortDirection = sort ? sort.direction : null;\n const element = (\n <div\n key={columnIndex}\n className=\"advanced-filter-menu-container\"\n style={style}\n >\n <Popper\n className=\"advanced-filter-menu-popper\"\n onEntered={this.getAdvancedMenuOpenedHandler(columnIndex)}\n onExited={() => {\n this.handleAdvancedMenuClosed(columnIndex);\n }}\n isShown={shownAdvancedFilter === columnIndex}\n interactive\n closeOnBlur\n options={{\n positionFixed: true,\n }}\n >\n {this.getCachedAdvancedFilterMenuActions(\n model,\n column,\n advancedFilterOptions,\n sortDirection,\n formatter\n )}\n </Popper>\n </div>\n );\n advancedFilterMenus.push(element);\n }\n }\n }\n }\n\n const optionItems = this.getCachedOptionItems(\n onCreateChart !== undefined && model.isChartBuilderAvailable,\n model.isCustomColumnsAvailable,\n model.isFormatColumnsAvailable,\n model.isRollupAvailable,\n model.isTotalsAvailable,\n model.isSelectDistinctAvailable,\n model.isExportAvailable,\n this.toggleFilterBarAction,\n this.toggleSearchBarAction,\n this.toggleGotoRowAction,\n isFilterBarShown,\n showSearchBar,\n canDownloadCsv,\n this.isTableSearchAvailable(),\n isGotoRowShown\n );\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 kind=\"ghost\"\n data-testid={`btn-iris-grid-settings-button-${name}`}\n onClick={this.handleMenu}\n icon={<FontAwesomeIcon icon={vsMenu} transform=\"up-1\" />}\n tooltip=\"Table Options\"\n />\n </div>\n )}\n {focusField}\n {loadingElement}\n {filterBar}\n {columnTooltip}\n {advancedFilterMenus}\n {overflowButtonTooltipProps &&\n this.getOverflowButtonTooltip(overflowButtonTooltipProps)}\n </div>\n <GotoRow\n model={model}\n isShown={isGotoRowShown}\n gotoRow={gotoRow}\n gotoRowError={gotoRowError}\n onSubmit={this.handleGotoRowSelectedRowNumberSubmit}\n onGotoRowNumberChanged={this.handleGotoRowSelectedRowNumberChanged}\n onClose={this.handleGotoRowClosed}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={() => {\n this.handleAnimationStart();\n this.focus();\n }}\n onExited={this.handleAnimationEnd}\n />\n\n <PendingDataBottomBar\n error={pendingSaveError}\n isSaving={pendingSavePromise != null}\n saveTooltip={`Commit (${this.commitAction.shortcut.getDisplayText()})`}\n discardTooltip={`Discard (${this.discardAction.shortcut.getDisplayText()})`}\n pendingDataErrors={pendingDataErrors}\n pendingDataMap={pendingDataMap}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n onSave={this.handlePendingCommitClicked}\n onDiscard={this.handlePendingDiscardClicked}\n />\n <ToastBottomBar>{toastMessage}</ToastBottomBar>\n <IrisGridCopyHandler\n model={model}\n copyOperation={copyOperation ?? undefined}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n />\n <TableSaver\n ref={tableSaver => {\n this.tableSaver = tableSaver;\n }}\n getDownloadWorker={getDownloadWorker}\n onDownloadCompleted={this.handleDownloadCompleted}\n onDownloadCanceled={this.handleDownloadCanceled}\n onDownloadProgressUpdate={this.handleDownloadProgressUpdate}\n isDownloading={\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING\n }\n formatter={formatter}\n />\n </div>\n <CSSTransition\n in={isMenuShown}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-left\"\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"table-sidebar\">\n <Stack>\n <Page title=\"Table Options\" onClose={this.handleMenuClose}>\n <Menu\n onSelect={i => this.handleMenuSelect(optionItems[i])}\n items={optionItems}\n />\n </Page>\n {openOptionsStack.map((option, i) => (\n <Page\n title={openOptions[i].title}\n onBack={this.handleMenuBack}\n onClose={this.handleMenuClose}\n key={openOptions[i].type}\n >\n {option}\n </Page>\n ))}\n </Stack>\n </div>\n </CSSTransition>\n <ContextActions actions={this.contextActions} />\n </div>\n );\n }\n}\n\nexport default IrisGrid;\n"],"mappings":"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"}
|