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