@deephaven/iris-grid 0.50.1-beta.5 → 0.51.1-alpha-theme-fix.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.d.ts +2 -2
- package/dist/AdvancedFilterCreatorFilterItem.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.d.ts +4 -4
- package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts +4 -4
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnHeaderGroup.js.map +1 -1
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.js +12 -0
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCellRendererUtils.js.map +1 -1
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridDataBarCellRenderer.js.map +1 -1
- package/dist/IrisGridIcons.js.map +1 -1
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.d.ts +2 -3
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js +138 -0
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelFactory.js.map +1 -1
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +9 -0
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTextCellRenderer.js.map +1 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.js +3 -0
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/MissingKeyError.js.map +1 -1
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/TableViewportUpdater.js +6 -1
- package/dist/TableViewportUpdater.js.map +1 -1
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/TreeTableViewportUpdater.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
- package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
- package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js +5 -0
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/sidebar/AdvancedSettings.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/DownloadServiceWorkerUtils.js.map +1 -1
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/RollupRows.d.ts +4 -4
- package/dist/sidebar/RollupRows.d.ts.map +1 -1
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.js +5 -0
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/icons/BarIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
- package/dist/sidebar/icons/LineIcon.js.map +1 -1
- package/dist/sidebar/icons/PieIcon.js.map +1 -1
- package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.d.ts +4 -4
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts +7 -7
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts +7 -5
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.d.ts +5 -3
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts +5 -5
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
- package/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridModelUpdater.js","names":["React","useEffect","useMemo","TableUtils","EMPTY_ARRAY","EMPTY_MAP","IrisGridUtils","COLUMN_BUFFER_PAGES","IrisGridModelUpdater","memo","model","modelColumns","top","bottom","left","right","filter","formatter","reverseType","REVERSE_TYPE","NONE","sorts","customColumns","movedColumns","hiddenColumns","alwaysFetchColumns","rollupConfig","totalsConfig","selectDistinctColumns","pendingRowCount","pendingDataMap","frozenColumns","formatColumns","columnHeaderGroups","columns","getModelViewportColumns","updateFilter","updateSorts","sortsForModel","push","dh","Table","reverse","sort","updateFormatter","updateCustomColumns","isCustomColumnsAvailable","updateFormatColumns","isFormatColumnsAvailable","updateViewport","setViewport","updateRollupCOnfig","isRollupAvailable","updateSelectDistinctColumns","isSelectDistinctAvailable","updateTotalsConfig","isTotalsAvailable","updatePendingRowCount","updatePendingDataMap","updateFrozenColumns","updateColumnHeaderGroups","displayName"],"sources":["../src/IrisGridModelUpdater.tsx"],"sourcesContent":["/* eslint-disable react/require-default-props */\n/* eslint-disable no-param-reassign */\nimport React, { useEffect, useMemo } from 'react';\nimport type {\n Column,\n CustomColumn,\n FilterCondition,\n RollupConfig,\n Sort,\n} from '@deephaven/jsapi-types';\nimport { ModelIndex, MoveOperation } from '@deephaven/grid';\nimport { Formatter, ReverseType, TableUtils } from '@deephaven/jsapi-utils';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport IrisGridUtils from './IrisGridUtils';\nimport { ColumnName, UITotalsTableConfig, PendingDataMap } from './CommonTypes';\nimport IrisGridModel from './IrisGridModel';\nimport type ColumnHeaderGroup from './ColumnHeaderGroup';\n\nconst COLUMN_BUFFER_PAGES = 1;\n\ninterface IrisGridModelUpdaterProps {\n model: IrisGridModel;\n modelColumns: readonly Column[];\n top: number;\n bottom: number;\n left: number | null;\n right: number | null;\n filter: readonly FilterCondition[];\n sorts: readonly Sort[];\n reverseType?: ReverseType;\n customColumns: readonly ColumnName[];\n movedColumns: readonly MoveOperation[];\n hiddenColumns: readonly ModelIndex[];\n frozenColumns?: readonly ColumnName[];\n columnHeaderGroups: readonly ColumnHeaderGroup[];\n formatColumns: readonly CustomColumn[];\n alwaysFetchColumns: readonly ColumnName[];\n formatter: Formatter;\n rollupConfig?: RollupConfig | null;\n totalsConfig?: UITotalsTableConfig | null;\n selectDistinctColumns?: readonly ColumnName[];\n pendingRowCount?: number;\n pendingDataMap?: PendingDataMap;\n}\n\n/**\n * React component to keep IrisGridModel in sync\n */\nconst IrisGridModelUpdater = React.memo(\n ({\n model,\n modelColumns,\n top,\n bottom,\n left,\n right,\n filter,\n formatter,\n reverseType = TableUtils.REVERSE_TYPE.NONE,\n sorts,\n customColumns,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n rollupConfig = null,\n totalsConfig = null,\n selectDistinctColumns = EMPTY_ARRAY,\n pendingRowCount = 0,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n formatColumns,\n columnHeaderGroups,\n }: IrisGridModelUpdaterProps) => {\n const columns = useMemo(\n () =>\n IrisGridUtils.getModelViewportColumns(\n modelColumns,\n left,\n right,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n COLUMN_BUFFER_PAGES\n ),\n [\n modelColumns,\n left,\n right,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n ]\n );\n\n useEffect(\n function updateFilter() {\n model.filter = filter;\n },\n [model, filter]\n );\n useEffect(\n function updateSorts() {\n const sortsForModel = [...sorts];\n if (reverseType !== TableUtils.REVERSE_TYPE.NONE) {\n sortsForModel.push(model.dh.Table.reverse());\n }\n model.sort = sortsForModel;\n },\n [model, sorts, reverseType]\n );\n useEffect(\n function updateFormatter() {\n model.formatter = formatter;\n },\n [model, formatter]\n );\n useEffect(\n function updateCustomColumns() {\n if (model.isCustomColumnsAvailable) {\n model.customColumns = customColumns;\n }\n },\n [model, customColumns]\n );\n useEffect(\n function updateFormatColumns() {\n if (model.isFormatColumnsAvailable) {\n model.formatColumns = formatColumns;\n }\n },\n [model, formatColumns]\n );\n useEffect(\n function updateViewport() {\n model.setViewport(top, bottom, columns);\n },\n [model, top, bottom, columns]\n );\n useEffect(\n function updateRollupCOnfig() {\n if (model.isRollupAvailable) {\n model.rollupConfig = rollupConfig;\n }\n },\n [model, model.isRollupAvailable, rollupConfig]\n );\n useEffect(\n function updateSelectDistinctColumns() {\n if (model.isSelectDistinctAvailable) {\n model.selectDistinctColumns = selectDistinctColumns;\n }\n },\n [model, selectDistinctColumns]\n );\n useEffect(\n function updateTotalsConfig() {\n if (model.isTotalsAvailable) {\n model.totalsConfig = totalsConfig;\n }\n },\n [model, model.isTotalsAvailable, totalsConfig]\n );\n useEffect(\n function updatePendingRowCount() {\n model.pendingRowCount = pendingRowCount;\n },\n [model, pendingRowCount]\n );\n useEffect(\n function updatePendingDataMap() {\n model.pendingDataMap = pendingDataMap;\n },\n [model, pendingDataMap]\n );\n useEffect(\n function updateFrozenColumns() {\n if (frozenColumns) {\n model.updateFrozenColumns(frozenColumns);\n }\n },\n [model, frozenColumns]\n );\n useEffect(\n function updateColumnHeaderGroups() {\n model.columnHeaderGroups = columnHeaderGroups;\n },\n [model, columnHeaderGroups]\n );\n\n return null;\n }\n);\n\nIrisGridModelUpdater.displayName = 'IrisGridModelUpdater';\n\nexport default IrisGridModelUpdater;\n"],"mappings":"AAAA;AACA;AACA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AASjD,SAAiCC,UAAU,QAAQ,wBAAwB;AAC3E,SAASC,WAAW,EAAEC,SAAS,QAAQ,kBAAkB;AAAC,OACnDC,aAAa;AAKpB,IAAMC,mBAAmB,GAAG,CAAC;AA2B7B;AACA;AACA;AACA,IAAMC,oBAAoB,gBAAGR,KAAK,CAACS,IAAI,
|
|
1
|
+
{"version":3,"file":"IrisGridModelUpdater.js","names":["React","useEffect","useMemo","TableUtils","EMPTY_ARRAY","EMPTY_MAP","IrisGridUtils","COLUMN_BUFFER_PAGES","IrisGridModelUpdater","memo","_ref","model","modelColumns","top","bottom","left","right","filter","formatter","reverseType","REVERSE_TYPE","NONE","sorts","customColumns","movedColumns","hiddenColumns","alwaysFetchColumns","rollupConfig","totalsConfig","selectDistinctColumns","pendingRowCount","pendingDataMap","frozenColumns","formatColumns","columnHeaderGroups","columns","getModelViewportColumns","updateFilter","updateSorts","sortsForModel","push","dh","Table","reverse","sort","updateFormatter","updateCustomColumns","isCustomColumnsAvailable","updateFormatColumns","isFormatColumnsAvailable","updateViewport","setViewport","updateRollupCOnfig","isRollupAvailable","updateSelectDistinctColumns","isSelectDistinctAvailable","updateTotalsConfig","isTotalsAvailable","updatePendingRowCount","updatePendingDataMap","updateFrozenColumns","updateColumnHeaderGroups","displayName"],"sources":["../src/IrisGridModelUpdater.tsx"],"sourcesContent":["/* eslint-disable react/require-default-props */\n/* eslint-disable no-param-reassign */\nimport React, { useEffect, useMemo } from 'react';\nimport type {\n Column,\n CustomColumn,\n FilterCondition,\n RollupConfig,\n Sort,\n} from '@deephaven/jsapi-types';\nimport { ModelIndex, MoveOperation } from '@deephaven/grid';\nimport { Formatter, ReverseType, TableUtils } from '@deephaven/jsapi-utils';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport IrisGridUtils from './IrisGridUtils';\nimport { ColumnName, UITotalsTableConfig, PendingDataMap } from './CommonTypes';\nimport IrisGridModel from './IrisGridModel';\nimport type ColumnHeaderGroup from './ColumnHeaderGroup';\n\nconst COLUMN_BUFFER_PAGES = 1;\n\ninterface IrisGridModelUpdaterProps {\n model: IrisGridModel;\n modelColumns: readonly Column[];\n top: number;\n bottom: number;\n left: number | null;\n right: number | null;\n filter: readonly FilterCondition[];\n sorts: readonly Sort[];\n reverseType?: ReverseType;\n customColumns: readonly ColumnName[];\n movedColumns: readonly MoveOperation[];\n hiddenColumns: readonly ModelIndex[];\n frozenColumns?: readonly ColumnName[];\n columnHeaderGroups: readonly ColumnHeaderGroup[];\n formatColumns: readonly CustomColumn[];\n alwaysFetchColumns: readonly ColumnName[];\n formatter: Formatter;\n rollupConfig?: RollupConfig | null;\n totalsConfig?: UITotalsTableConfig | null;\n selectDistinctColumns?: readonly ColumnName[];\n pendingRowCount?: number;\n pendingDataMap?: PendingDataMap;\n}\n\n/**\n * React component to keep IrisGridModel in sync\n */\nconst IrisGridModelUpdater = React.memo(\n ({\n model,\n modelColumns,\n top,\n bottom,\n left,\n right,\n filter,\n formatter,\n reverseType = TableUtils.REVERSE_TYPE.NONE,\n sorts,\n customColumns,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n rollupConfig = null,\n totalsConfig = null,\n selectDistinctColumns = EMPTY_ARRAY,\n pendingRowCount = 0,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n formatColumns,\n columnHeaderGroups,\n }: IrisGridModelUpdaterProps) => {\n const columns = useMemo(\n () =>\n IrisGridUtils.getModelViewportColumns(\n modelColumns,\n left,\n right,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n COLUMN_BUFFER_PAGES\n ),\n [\n modelColumns,\n left,\n right,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n ]\n );\n\n useEffect(\n function updateFilter() {\n model.filter = filter;\n },\n [model, filter]\n );\n useEffect(\n function updateSorts() {\n const sortsForModel = [...sorts];\n if (reverseType !== TableUtils.REVERSE_TYPE.NONE) {\n sortsForModel.push(model.dh.Table.reverse());\n }\n model.sort = sortsForModel;\n },\n [model, sorts, reverseType]\n );\n useEffect(\n function updateFormatter() {\n model.formatter = formatter;\n },\n [model, formatter]\n );\n useEffect(\n function updateCustomColumns() {\n if (model.isCustomColumnsAvailable) {\n model.customColumns = customColumns;\n }\n },\n [model, customColumns]\n );\n useEffect(\n function updateFormatColumns() {\n if (model.isFormatColumnsAvailable) {\n model.formatColumns = formatColumns;\n }\n },\n [model, formatColumns]\n );\n useEffect(\n function updateViewport() {\n model.setViewport(top, bottom, columns);\n },\n [model, top, bottom, columns]\n );\n useEffect(\n function updateRollupCOnfig() {\n if (model.isRollupAvailable) {\n model.rollupConfig = rollupConfig;\n }\n },\n [model, model.isRollupAvailable, rollupConfig]\n );\n useEffect(\n function updateSelectDistinctColumns() {\n if (model.isSelectDistinctAvailable) {\n model.selectDistinctColumns = selectDistinctColumns;\n }\n },\n [model, selectDistinctColumns]\n );\n useEffect(\n function updateTotalsConfig() {\n if (model.isTotalsAvailable) {\n model.totalsConfig = totalsConfig;\n }\n },\n [model, model.isTotalsAvailable, totalsConfig]\n );\n useEffect(\n function updatePendingRowCount() {\n model.pendingRowCount = pendingRowCount;\n },\n [model, pendingRowCount]\n );\n useEffect(\n function updatePendingDataMap() {\n model.pendingDataMap = pendingDataMap;\n },\n [model, pendingDataMap]\n );\n useEffect(\n function updateFrozenColumns() {\n if (frozenColumns) {\n model.updateFrozenColumns(frozenColumns);\n }\n },\n [model, frozenColumns]\n );\n useEffect(\n function updateColumnHeaderGroups() {\n model.columnHeaderGroups = columnHeaderGroups;\n },\n [model, columnHeaderGroups]\n );\n\n return null;\n }\n);\n\nIrisGridModelUpdater.displayName = 'IrisGridModelUpdater';\n\nexport default IrisGridModelUpdater;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridPartitionSelector.js","names":["React","Component","FontAwesomeIcon","DropdownMenu","Tooltip","vsTriangleDown","vsClose","Log","debounce","TableUtils","PartitionSelectorSearch","IrisGridUtils","log","module","PARTITION_CHANGE_DEBOUNCE_MS","IrisGridPartitionSelector","constructor","props","sendUpdate","handleAppendClick","bind","handleCloseClick","handleIgnoreClick","handlePartitionChange","handlePartitionSelect","handlePartitionListResized","handleSearchOpened","handleSearchClosed","searchMenu","selectorSearch","partition","state","componentWillUnmount","debounceUpdate","cancel","debug2","onAppend","sendDone","sendFetchAll","event","column","value","target","setState","isCharType","type","length","charCodeAt","toString","closeMenu","scheduleUpdate","table","applyFilter","focus","flush","onDone","onChange","onFetchAll","render","dh","getFormattedString","partitionSelectorSearch","name","String","fromCharCode","parseInt","convertValueToText","menuElement","undefined"],"sources":["../src/IrisGridPartitionSelector.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DropdownMenu, Tooltip } from '@deephaven/components';\nimport { vsTriangleDown, vsClose } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport debounce from 'lodash.debounce';\nimport type { Column, dh as DhType, Table } from '@deephaven/jsapi-types';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport PartitionSelectorSearch from './PartitionSelectorSearch';\nimport './IrisGridPartitionSelector.scss';\nimport IrisGridUtils from './IrisGridUtils';\n\nconst log = Log.module('IrisGridPartitionSelector');\n\nconst PARTITION_CHANGE_DEBOUNCE_MS = 250;\ninterface IrisGridPartitionSelectorProps<T> {\n dh: DhType;\n getFormattedString: (value: T, type: string, name: string) => string;\n table: Table;\n column: Column;\n partition: string;\n onAppend?: (partition: string) => void;\n onFetchAll: () => void;\n onDone: (event?: React.MouseEvent<HTMLButtonElement>) => void;\n onChange: (partition: string) => void;\n}\ninterface IrisGridPartitionSelectorState {\n partition: string;\n}\nclass IrisGridPartitionSelector<T> extends Component<\n IrisGridPartitionSelectorProps<T>,\n IrisGridPartitionSelectorState\n> {\n static defaultProps = {\n onChange: (): void => undefined,\n onFetchAll: (): void => undefined,\n onDone: (): void => undefined,\n partition: '',\n };\n\n constructor(props: IrisGridPartitionSelectorProps<T>) {\n super(props);\n\n this.handleAppendClick = this.handleAppendClick.bind(this);\n this.handleCloseClick = this.handleCloseClick.bind(this);\n this.handleIgnoreClick = this.handleIgnoreClick.bind(this);\n this.handlePartitionChange = this.handlePartitionChange.bind(this);\n this.handlePartitionSelect = this.handlePartitionSelect.bind(this);\n this.handlePartitionListResized =\n this.handlePartitionListResized.bind(this);\n this.handleSearchOpened = this.handleSearchOpened.bind(this);\n this.handleSearchClosed = this.handleSearchClosed.bind(this);\n\n this.searchMenu = null;\n this.selectorSearch = null;\n\n const { partition } = props;\n this.state = {\n partition,\n };\n }\n\n componentWillUnmount(): void {\n this.debounceUpdate.cancel();\n }\n\n searchMenu: DropdownMenu | null;\n\n selectorSearch: PartitionSelectorSearch<T> | null;\n\n handleAppendClick(): void {\n log.debug2('handleAppendClick');\n\n const { onAppend } = this.props;\n const { partition } = this.state;\n onAppend?.(partition);\n }\n\n handleCloseClick(): void {\n log.debug2('handleCloseClick');\n\n this.sendDone();\n }\n\n handleIgnoreClick(): void {\n log.debug2('handleIgnoreClick');\n\n this.sendFetchAll();\n }\n\n handlePartitionChange(event: React.ChangeEvent<HTMLInputElement>): void {\n log.debug2('handlePartitionChange');\n\n const { column } = this.props;\n const { value: partition } = event.target;\n\n this.setState({\n partition:\n TableUtils.isCharType(column.type) && partition.length > 0\n ? partition.charCodeAt(0).toString()\n : partition,\n });\n\n this.debounceUpdate();\n }\n\n handlePartitionSelect(partition: string): void {\n if (this.searchMenu) {\n this.searchMenu.closeMenu();\n }\n\n this.setState({ partition }, () => {\n this.sendUpdate();\n });\n }\n\n handlePartitionListResized(): void {\n if (this.searchMenu) {\n this.searchMenu.scheduleUpdate();\n }\n }\n\n handleSearchClosed(): void {\n // Reset the table filter so it's ready next time user opens search\n const { table } = this.props;\n table.applyFilter([]);\n }\n\n handleSearchOpened(): void {\n if (this.selectorSearch) {\n this.selectorSearch.focus();\n }\n }\n\n debounceUpdate = debounce((): void => {\n this.sendUpdate();\n }, PARTITION_CHANGE_DEBOUNCE_MS);\n\n sendDone(): void {\n this.debounceUpdate.flush();\n\n const { onDone } = this.props;\n onDone();\n }\n\n sendUpdate(): void {\n log.debug2('sendUpdate');\n\n const { onChange } = this.props;\n const { partition } = this.state;\n onChange(partition);\n }\n\n sendFetchAll(): void {\n log.debug2('sendFetchAll');\n\n this.debounceUpdate.cancel();\n\n const { onFetchAll } = this.props;\n onFetchAll();\n }\n\n render(): JSX.Element {\n const { column, dh, getFormattedString, onAppend, onDone, table } =\n this.props;\n const { partition } = this.state;\n const partitionSelectorSearch = (\n <PartitionSelectorSearch\n dh={dh}\n key=\"search\"\n getFormattedString={getFormattedString}\n table={table}\n onSelect={this.handlePartitionSelect}\n onListResized={this.handlePartitionListResized}\n ref={selectorSearch => {\n this.selectorSearch = selectorSearch;\n }}\n />\n );\n return (\n <div className=\"iris-grid-partition-selector\">\n <div className=\"status-message\">\n <span>Filtering "{column.name}" partition to</span>\n </div>\n <div className=\"input-group\">\n <input\n type=\"text\"\n value={\n TableUtils.isCharType(column.type) &&\n partition.toString().length > 0\n ? String.fromCharCode(parseInt(partition, 10))\n : IrisGridUtils.convertValueToText(partition, column.type)\n }\n onChange={this.handlePartitionChange}\n className=\"form-control input-partition\"\n />\n <div className=\"input-group-append\">\n <button type=\"button\" className=\"btn btn-outline-primary\">\n <FontAwesomeIcon icon={vsTriangleDown} />\n <Tooltip>Partitions</Tooltip>\n <DropdownMenu\n ref={searchMenu => {\n this.searchMenu = searchMenu;\n }}\n actions={[{ menuElement: partitionSelectorSearch }]}\n onMenuOpened={this.handleSearchOpened}\n onMenuClosed={this.handleSearchClosed}\n />\n </button>\n </div>\n </div>\n <div className=\"iris-grid-partition-selector-spacer\" />\n <button\n type=\"button\"\n className=\"btn btn-outline-primary btn-ignore\"\n onClick={this.handleIgnoreClick}\n >\n Ignore & Fetch All\n </button>\n {onAppend !== undefined && (\n <button\n type=\"button\"\n className=\"btn btn-outline-primary btn-append\"\n onClick={this.handleAppendClick}\n >\n Append Command\n </button>\n )}\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-close\"\n onClick={onDone}\n >\n <FontAwesomeIcon icon={vsClose} />\n </button>\n </div>\n );\n }\n}\n\nexport default IrisGridPartitionSelector;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IrisGridPartitionSelector.js","names":["React","Component","FontAwesomeIcon","DropdownMenu","Tooltip","vsTriangleDown","vsClose","Log","debounce","TableUtils","PartitionSelectorSearch","IrisGridUtils","jsx","_jsx","jsxs","_jsxs","log","module","PARTITION_CHANGE_DEBOUNCE_MS","IrisGridPartitionSelector","constructor","props","_defineProperty","sendUpdate","handleAppendClick","bind","handleCloseClick","handleIgnoreClick","handlePartitionChange","handlePartitionSelect","handlePartitionListResized","handleSearchOpened","handleSearchClosed","searchMenu","selectorSearch","partition","state","componentWillUnmount","debounceUpdate","cancel","debug2","onAppend","sendDone","sendFetchAll","event","column","value","target","setState","isCharType","type","length","charCodeAt","toString","closeMenu","scheduleUpdate","table","applyFilter","focus","flush","onDone","onChange","onFetchAll","render","dh","getFormattedString","partitionSelectorSearch","onSelect","onListResized","ref","className","children","name","String","fromCharCode","parseInt","convertValueToText","icon","actions","menuElement","onMenuOpened","onMenuClosed","onClick","undefined"],"sources":["../src/IrisGridPartitionSelector.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DropdownMenu, Tooltip } from '@deephaven/components';\nimport { vsTriangleDown, vsClose } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport debounce from 'lodash.debounce';\nimport type { Column, dh as DhType, Table } from '@deephaven/jsapi-types';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport PartitionSelectorSearch from './PartitionSelectorSearch';\nimport './IrisGridPartitionSelector.scss';\nimport IrisGridUtils from './IrisGridUtils';\n\nconst log = Log.module('IrisGridPartitionSelector');\n\nconst PARTITION_CHANGE_DEBOUNCE_MS = 250;\ninterface IrisGridPartitionSelectorProps<T> {\n dh: DhType;\n getFormattedString: (value: T, type: string, name: string) => string;\n table: Table;\n column: Column;\n partition: string;\n onAppend?: (partition: string) => void;\n onFetchAll: () => void;\n onDone: (event?: React.MouseEvent<HTMLButtonElement>) => void;\n onChange: (partition: string) => void;\n}\ninterface IrisGridPartitionSelectorState {\n partition: string;\n}\nclass IrisGridPartitionSelector<T> extends Component<\n IrisGridPartitionSelectorProps<T>,\n IrisGridPartitionSelectorState\n> {\n static defaultProps = {\n onChange: (): void => undefined,\n onFetchAll: (): void => undefined,\n onDone: (): void => undefined,\n partition: '',\n };\n\n constructor(props: IrisGridPartitionSelectorProps<T>) {\n super(props);\n\n this.handleAppendClick = this.handleAppendClick.bind(this);\n this.handleCloseClick = this.handleCloseClick.bind(this);\n this.handleIgnoreClick = this.handleIgnoreClick.bind(this);\n this.handlePartitionChange = this.handlePartitionChange.bind(this);\n this.handlePartitionSelect = this.handlePartitionSelect.bind(this);\n this.handlePartitionListResized =\n this.handlePartitionListResized.bind(this);\n this.handleSearchOpened = this.handleSearchOpened.bind(this);\n this.handleSearchClosed = this.handleSearchClosed.bind(this);\n\n this.searchMenu = null;\n this.selectorSearch = null;\n\n const { partition } = props;\n this.state = {\n partition,\n };\n }\n\n componentWillUnmount(): void {\n this.debounceUpdate.cancel();\n }\n\n searchMenu: DropdownMenu | null;\n\n selectorSearch: PartitionSelectorSearch<T> | null;\n\n handleAppendClick(): void {\n log.debug2('handleAppendClick');\n\n const { onAppend } = this.props;\n const { partition } = this.state;\n onAppend?.(partition);\n }\n\n handleCloseClick(): void {\n log.debug2('handleCloseClick');\n\n this.sendDone();\n }\n\n handleIgnoreClick(): void {\n log.debug2('handleIgnoreClick');\n\n this.sendFetchAll();\n }\n\n handlePartitionChange(event: React.ChangeEvent<HTMLInputElement>): void {\n log.debug2('handlePartitionChange');\n\n const { column } = this.props;\n const { value: partition } = event.target;\n\n this.setState({\n partition:\n TableUtils.isCharType(column.type) && partition.length > 0\n ? partition.charCodeAt(0).toString()\n : partition,\n });\n\n this.debounceUpdate();\n }\n\n handlePartitionSelect(partition: string): void {\n if (this.searchMenu) {\n this.searchMenu.closeMenu();\n }\n\n this.setState({ partition }, () => {\n this.sendUpdate();\n });\n }\n\n handlePartitionListResized(): void {\n if (this.searchMenu) {\n this.searchMenu.scheduleUpdate();\n }\n }\n\n handleSearchClosed(): void {\n // Reset the table filter so it's ready next time user opens search\n const { table } = this.props;\n table.applyFilter([]);\n }\n\n handleSearchOpened(): void {\n if (this.selectorSearch) {\n this.selectorSearch.focus();\n }\n }\n\n debounceUpdate = debounce((): void => {\n this.sendUpdate();\n }, PARTITION_CHANGE_DEBOUNCE_MS);\n\n sendDone(): void {\n this.debounceUpdate.flush();\n\n const { onDone } = this.props;\n onDone();\n }\n\n sendUpdate(): void {\n log.debug2('sendUpdate');\n\n const { onChange } = this.props;\n const { partition } = this.state;\n onChange(partition);\n }\n\n sendFetchAll(): void {\n log.debug2('sendFetchAll');\n\n this.debounceUpdate.cancel();\n\n const { onFetchAll } = this.props;\n onFetchAll();\n }\n\n render(): JSX.Element {\n const { column, dh, getFormattedString, onAppend, onDone, table } =\n this.props;\n const { partition } = this.state;\n const partitionSelectorSearch = (\n <PartitionSelectorSearch\n dh={dh}\n key=\"search\"\n getFormattedString={getFormattedString}\n table={table}\n onSelect={this.handlePartitionSelect}\n onListResized={this.handlePartitionListResized}\n ref={selectorSearch => {\n this.selectorSearch = selectorSearch;\n }}\n />\n );\n return (\n <div className=\"iris-grid-partition-selector\">\n <div className=\"status-message\">\n <span>Filtering "{column.name}" partition to</span>\n </div>\n <div className=\"input-group\">\n <input\n type=\"text\"\n value={\n TableUtils.isCharType(column.type) &&\n partition.toString().length > 0\n ? String.fromCharCode(parseInt(partition, 10))\n : IrisGridUtils.convertValueToText(partition, column.type)\n }\n onChange={this.handlePartitionChange}\n className=\"form-control input-partition\"\n />\n <div className=\"input-group-append\">\n <button type=\"button\" className=\"btn btn-outline-primary\">\n <FontAwesomeIcon icon={vsTriangleDown} />\n <Tooltip>Partitions</Tooltip>\n <DropdownMenu\n ref={searchMenu => {\n this.searchMenu = searchMenu;\n }}\n actions={[{ menuElement: partitionSelectorSearch }]}\n onMenuOpened={this.handleSearchOpened}\n onMenuClosed={this.handleSearchClosed}\n />\n </button>\n </div>\n </div>\n <div className=\"iris-grid-partition-selector-spacer\" />\n <button\n type=\"button\"\n className=\"btn btn-outline-primary btn-ignore\"\n onClick={this.handleIgnoreClick}\n >\n Ignore & Fetch All\n </button>\n {onAppend !== undefined && (\n <button\n type=\"button\"\n className=\"btn btn-outline-primary btn-append\"\n onClick={this.handleAppendClick}\n >\n Append Command\n </button>\n )}\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-close\"\n onClick={onDone}\n >\n <FontAwesomeIcon icon={vsClose} />\n </button>\n </div>\n );\n }\n}\n\nexport default IrisGridPartitionSelector;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridProxyModel.js","names":["deepEqual","Formatter","TableUtils","Log","EventShimCustomEvent","PromiseUtils","isEditableGridModel","isExpandableGridModel","IrisGridTableModel","IrisGridTreeTableModel","IrisGridModel","isIrisGridTableModelTemplate","log","module","makeModel","dh","table","formatter","inputTable","isTreeTable","IrisGridProxyModel","constructor","model","textForCell","truncationCharForCell","textAlignForCell","colorForCell","backgroundColorForCell","textForColumnHeader","colorForColumnHeader","textForRowHeader","textForRowFooter","isRowMovable","isColumnMovable","isRowExpandable","isRowExpanded","setRowExpanded","Error","expandAll","collapseAll","depthForRow","getColumnHeaderGroup","getColumnHeaderParentGroup","formatForCell","valueForCell","renderTypeForCell","dataBarOptionsForCell","displayString","isEditableRange","isFilterable","top","bottom","columns","setViewport","snapshot","textSnapshot","valuesTable","editValueForCell","setValueForCell","Promise","reject","setValueForRanges","setValues","resolve","isValidForCell","delete","commitPending","handleModelEvent","bind","originalModel","modelPromise","rollup","selectDistinct","close","cancel","event","debug2","detail","type","dispatchEvent","setModel","debug","oldModel","listenerCount","addListeners","EVENT","COLUMNS_CHANGED","TABLE_CHANGED","setNextModel","removeListeners","makeCancelable","then","catch","err","isCanceled","error","REQUEST_FAILED","startListening","stopListening","events","Object","keys","i","length","addEventListener","removeEventListener","rowCount","columnCount","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","isColumnFrozen","x","isColumnSortable","index","hasExpandableRows","isExpandAllAvailable","isExportAvailable","isColumnStatisticsAvailable","isValuesTableAvailable","isCustomColumnsAvailable","isSelectDistinctAvailable","selectDistinctColumns","isFormatColumnsAvailable","isChartBuilderAvailable","isRollupAvailable","isTotalsAvailable","isReversible","initialMovedColumns","initialMovedRows","layoutHints","frontColumns","backColumns","frozenColumns","columnHeaderGroups","groups","initialColumnHeaderGroups","columnHeaderGroupMap","columnHeaderMaxDepth","updateFrozenColumns","originalColumns","groupedColumns","description","filter","sort","customColumns","formatColumns","rollupConfig","columnNames","map","name","find","column","undefined","totalsConfig","isFilterRequired","isEditable","export","columnStatistics","pendingDataMap","pendingRowCount","count","pendingDataErrors","getColumnIndexByName","seekRow","startRow","valueType","value","insensitive","contains","isBackwards","isSeekRowAvailable"],"sources":["../src/IrisGridProxyModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport deepEqual from 'deep-equal';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n CancelablePromise,\n EventShimCustomEvent,\n PromiseUtils,\n} from '@deephaven/utils';\nimport type {\n Column,\n ColumnStatistics,\n CustomColumn,\n dh as DhType,\n FilterCondition,\n InputTable,\n LayoutHints,\n RollupConfig,\n Sort,\n Table,\n TreeTable,\n ValueTypeUnion,\n} from '@deephaven/jsapi-types';\nimport {\n EditableGridModel,\n isEditableGridModel,\n isExpandableGridModel,\n ModelIndex,\n MoveOperation,\n} from '@deephaven/grid';\nimport IrisGridTableModel from './IrisGridTableModel';\nimport IrisGridTreeTableModel from './IrisGridTreeTableModel';\nimport IrisGridModel from './IrisGridModel';\nimport {\n ColumnName,\n UITotalsTableConfig,\n PendingDataMap,\n UIRow,\n PendingDataErrorMap,\n} from './CommonTypes';\nimport { isIrisGridTableModelTemplate } from './IrisGridTableModelTemplate';\nimport type ColumnHeaderGroup from './ColumnHeaderGroup';\n\nconst log = Log.module('IrisGridProxyModel');\n\nfunction makeModel(\n dh: DhType,\n table: Table | TreeTable,\n formatter?: Formatter,\n inputTable?: InputTable | null\n): IrisGridModel {\n if (TableUtils.isTreeTable(table)) {\n return new IrisGridTreeTableModel(dh, table, formatter);\n }\n return new IrisGridTableModel(dh, table, formatter, inputTable);\n}\n\n/**\n * Model which proxies calls to other IrisGridModels.\n * This allows for operations that generate new tables, like rollups.\n */\nclass IrisGridProxyModel extends IrisGridModel {\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n\n dh: DhType;\n\n originalModel: IrisGridModel;\n\n model: IrisGridModel;\n\n modelPromise: CancelablePromise<IrisGridModel> | null;\n\n rollup: RollupConfig | null;\n\n selectDistinct: ColumnName[];\n\n constructor(\n dh: DhType,\n table: Table | TreeTable,\n formatter = new Formatter(dh),\n inputTable: InputTable | null = null\n ) {\n super(dh);\n\n this.handleModelEvent = this.handleModelEvent.bind(this);\n\n const model = makeModel(dh, table, formatter, inputTable);\n this.dh = dh;\n this.originalModel = model;\n this.model = model;\n this.modelPromise = null;\n this.rollup = null;\n this.selectDistinct = [];\n }\n\n close(): void {\n this.originalModel.close();\n if (this.model !== this.originalModel) {\n this.model.close();\n }\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n }\n }\n\n handleModelEvent(event: CustomEvent): void {\n log.debug2('handleModelEvent', event);\n\n const { detail, type } = event;\n this.dispatchEvent(new EventShimCustomEvent(type, { detail }));\n }\n\n setModel(model: IrisGridModel): void {\n log.debug('setModel', model);\n\n const oldModel = this.model;\n\n if (oldModel !== this.originalModel) {\n oldModel.close();\n }\n\n this.model = model;\n\n if (this.listenerCount > 0) {\n this.addListeners(model);\n }\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: model.columns,\n })\n );\n\n if (isIrisGridTableModelTemplate(model)) {\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: model.table,\n })\n );\n }\n }\n\n setNextModel(modelPromise: Promise<IrisGridModel>): void {\n log.debug2('setNextModel');\n\n if (this.modelPromise) {\n this.modelPromise.cancel();\n }\n\n if (this.listenerCount > 0) {\n this.removeListeners(this.model);\n }\n\n this.modelPromise = PromiseUtils.makeCancelable(\n modelPromise,\n (model: IrisGridModel) => model.close()\n );\n this.modelPromise\n .then(model => {\n this.modelPromise = null;\n this.setModel(model);\n })\n .catch((err: unknown) => {\n if (PromiseUtils.isCanceled(err)) {\n log.debug2('setNextModel cancelled');\n return;\n }\n\n log.error('Unable to set next model', err);\n this.modelPromise = null;\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err,\n })\n );\n });\n }\n\n startListening(): void {\n super.startListening();\n\n this.addListeners(this.model);\n }\n\n stopListening(): void {\n super.stopListening();\n\n this.removeListeners(this.model);\n }\n\n addListeners(model: IrisGridModel): void {\n const events = Object.keys(IrisGridModel.EVENT);\n for (let i = 0; i < events.length; i += 1) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n model.addEventListener(events[i], this.handleModelEvent);\n }\n }\n\n removeListeners(model: IrisGridModel): void {\n const events = Object.keys(IrisGridModel.EVENT);\n for (let i = 0; i < events.length; i += 1) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n model.removeEventListener(events[i], this.handleModelEvent);\n }\n }\n\n get rowCount(): number {\n return this.model.rowCount;\n }\n\n get columnCount(): number {\n return this.model.columnCount;\n }\n\n get floatingTopRowCount(): number {\n return this.model.floatingTopRowCount;\n }\n\n get floatingBottomRowCount(): number {\n return this.model.floatingBottomRowCount;\n }\n\n get floatingLeftColumnCount(): number {\n return this.model.floatingLeftColumnCount;\n }\n\n get floatingRightColumnCount(): number {\n return this.model.floatingRightColumnCount;\n }\n\n textForCell: IrisGridModel['textForCell'] = (...args) =>\n this.model.textForCell(...args);\n\n truncationCharForCell: IrisGridModel['truncationCharForCell'] = (...args) =>\n this.model.truncationCharForCell(...args);\n\n textAlignForCell: IrisGridModel['textAlignForCell'] = (...args) =>\n this.model.textAlignForCell(...args);\n\n colorForCell: IrisGridModel['colorForCell'] = (...args) =>\n this.model.colorForCell(...args);\n\n backgroundColorForCell: IrisGridModel['backgroundColorForCell'] = (...args) =>\n this.model.backgroundColorForCell(...args);\n\n textForColumnHeader: IrisGridModel['textForColumnHeader'] = (...args) =>\n this.model.textForColumnHeader(...args);\n\n colorForColumnHeader: IrisGridModel['colorForColumnHeader'] = (...args) =>\n this.model.colorForColumnHeader(...args);\n\n textForRowHeader: IrisGridModel['textForRowHeader'] = (...args) =>\n this.model.textForRowHeader(...args);\n\n textForRowFooter: IrisGridModel['textForRowFooter'] = (...args) =>\n this.model.textForRowFooter(...args);\n\n isRowMovable: IrisGridModel['isRowMovable'] = (...args) =>\n this.model.isRowMovable(...args);\n\n isColumnMovable: IrisGridModel['isColumnMovable'] = (...args) =>\n this.model.isColumnMovable(...args);\n\n isColumnFrozen(x: ModelIndex): boolean {\n return this.model.isColumnFrozen(x);\n }\n\n isColumnSortable(index: number): boolean {\n return this.model.isColumnSortable(index);\n }\n\n get hasExpandableRows(): boolean {\n if (isExpandableGridModel(this.model)) {\n return this.model.hasExpandableRows;\n }\n return false;\n }\n\n get isExpandAllAvailable(): boolean {\n if (isExpandableGridModel(this.model)) {\n return this.model.isExpandAllAvailable ?? false;\n }\n return false;\n }\n\n isRowExpandable: IrisGridTreeTableModel['isRowExpandable'] = (...args) => {\n if (isExpandableGridModel(this.model)) {\n return this.model.isRowExpandable(...args);\n }\n return false;\n };\n\n isRowExpanded: IrisGridTreeTableModel['isRowExpanded'] = (...args) => {\n if (isExpandableGridModel(this.model)) {\n return this.model.isRowExpanded(...args);\n }\n return false;\n };\n\n setRowExpanded: IrisGridTreeTableModel['setRowExpanded'] = (...args) => {\n if (isExpandableGridModel(this.model)) {\n return this.model.setRowExpanded(...args);\n }\n throw Error('Function setRowExpanded does not exist on IrisGridTableModel');\n };\n\n expandAll: IrisGridTreeTableModel['expandAll'] = () => {\n if (isExpandableGridModel(this.model)) {\n return this.model.expandAll();\n }\n throw Error('Function expandAll does not exist on IrisGridTableModel');\n };\n\n collapseAll: IrisGridTreeTableModel['collapseAll'] = () => {\n if (isExpandableGridModel(this.model)) {\n return this.model.collapseAll();\n }\n throw Error('Function collapseAll does not exist on IrisGridTableModel');\n };\n\n depthForRow: IrisGridTreeTableModel['depthForRow'] = (...args) => {\n if (isExpandableGridModel(this.model)) {\n return this.model.depthForRow(...args);\n }\n return 0;\n // throw Error('Function depthForRow does not exist on IrisGridTableModel');\n };\n\n get isExportAvailable(): boolean {\n return this.model.isExportAvailable;\n }\n\n get isColumnStatisticsAvailable(): boolean {\n return this.model.isColumnStatisticsAvailable;\n }\n\n get isValuesTableAvailable(): boolean {\n return this.model.isValuesTableAvailable;\n }\n\n get isCustomColumnsAvailable(): boolean {\n return (\n this.model.isCustomColumnsAvailable &&\n // Disable for selectDistinct tables\n !(this.isSelectDistinctAvailable && this.selectDistinctColumns.length > 0)\n );\n }\n\n get isFormatColumnsAvailable(): boolean {\n return this.model.isFormatColumnsAvailable;\n }\n\n get isChartBuilderAvailable(): boolean {\n return this.model.isChartBuilderAvailable;\n }\n\n get isRollupAvailable(): boolean {\n return (\n (this.originalModel.isRollupAvailable || this.rollup != null) &&\n this.selectDistinct.length === 0\n );\n }\n\n get isSelectDistinctAvailable(): boolean {\n return (\n (this.originalModel.isSelectDistinctAvailable ||\n this.selectDistinct.length > 0) &&\n this.rollup == null\n );\n }\n\n get isTotalsAvailable(): boolean {\n return this.model.isTotalsAvailable;\n }\n\n get isReversible(): boolean {\n return this.model.isReversible;\n }\n\n get columns(): readonly Column[] {\n return this.model.columns;\n }\n\n get initialMovedColumns(): readonly MoveOperation[] {\n return this.model.initialMovedColumns;\n }\n\n get initialMovedRows(): readonly MoveOperation[] {\n return this.model.initialMovedRows;\n }\n\n get layoutHints(): LayoutHints | null {\n return this.model.layoutHints;\n }\n\n get frontColumns(): readonly ColumnName[] {\n return this.model.frontColumns;\n }\n\n get backColumns(): readonly ColumnName[] {\n return this.model.backColumns;\n }\n\n get frozenColumns(): readonly ColumnName[] {\n return this.model.frozenColumns;\n }\n\n getColumnHeaderGroup: IrisGridModel['getColumnHeaderGroup'] = (...args) =>\n this.model.getColumnHeaderGroup(...args);\n\n get columnHeaderGroups(): readonly ColumnHeaderGroup[] {\n return this.model.columnHeaderGroups;\n }\n\n set columnHeaderGroups(groups: readonly ColumnHeaderGroup[]) {\n this.model.columnHeaderGroups = groups;\n }\n\n get initialColumnHeaderGroups(): readonly ColumnHeaderGroup[] {\n return this.model.initialColumnHeaderGroups;\n }\n\n getColumnHeaderParentGroup: IrisGridModel['getColumnHeaderParentGroup'] = (\n ...args\n ) => this.model.getColumnHeaderParentGroup(...args);\n\n get columnHeaderGroupMap(): ReadonlyMap<string, ColumnHeaderGroup> {\n return this.model.columnHeaderGroupMap;\n }\n\n get columnHeaderMaxDepth(): number {\n return this.model.columnHeaderMaxDepth;\n }\n\n updateFrozenColumns(columns: readonly ColumnName[]): void {\n return this.model.updateFrozenColumns(columns);\n }\n\n get originalColumns(): readonly Column[] {\n return this.originalModel.columns;\n }\n\n get groupedColumns(): readonly Column[] {\n return this.model.groupedColumns;\n }\n\n get description(): string {\n return this.model.description;\n }\n\n formatForCell: IrisGridModel['formatForCell'] = (...args) =>\n this.model.formatForCell(...args);\n\n valueForCell: IrisGridModel['valueForCell'] = (...args) =>\n this.model.valueForCell(...args);\n\n renderTypeForCell: IrisGridModel['renderTypeForCell'] = (...args) =>\n this.model.renderTypeForCell(...args);\n\n dataBarOptionsForCell: IrisGridModel['dataBarOptionsForCell'] = (...args) =>\n this.model.dataBarOptionsForCell(...args);\n\n get filter(): readonly FilterCondition[] {\n return this.model.filter;\n }\n\n set filter(filter: readonly FilterCondition[]) {\n this.model.filter = filter;\n }\n\n get formatter(): Formatter {\n return this.model.formatter;\n }\n\n set formatter(formatter: Formatter) {\n this.model.formatter = formatter;\n }\n\n displayString: IrisGridModel['displayString'] = (...args) =>\n this.model.displayString(...args);\n\n get sort(): readonly Sort[] {\n return this.model.sort;\n }\n\n set sort(sort: readonly Sort[]) {\n this.model.sort = sort;\n }\n\n get customColumns(): readonly ColumnName[] {\n return this.model.customColumns;\n }\n\n set customColumns(customColumns: readonly ColumnName[]) {\n this.model.customColumns = customColumns;\n }\n\n get formatColumns(): readonly CustomColumn[] {\n return this.model.formatColumns;\n }\n\n set formatColumns(formatColumns: readonly CustomColumn[]) {\n this.model.formatColumns = formatColumns;\n }\n\n get rollupConfig(): RollupConfig | null {\n return this.rollup;\n }\n\n set rollupConfig(rollupConfig: RollupConfig | null) {\n log.debug('set rollupConfig', rollupConfig);\n\n if (!this.isRollupAvailable) {\n throw new Error('Rollup Rows are not available');\n }\n\n // Prevent model update when IrisGridModelUpdater is mounted\n // if rollup is already initialized in IrisGridPanel\n if (deepEqual(rollupConfig, this.rollup)) {\n return;\n }\n\n this.rollup = rollupConfig;\n\n let modelPromise = Promise.resolve(this.originalModel);\n\n if (\n isIrisGridTableModelTemplate(this.originalModel) &&\n rollupConfig != null\n ) {\n modelPromise = this.originalModel.table\n .rollup(rollupConfig)\n .then(table => makeModel(this.dh, table, this.formatter));\n }\n this.setNextModel(modelPromise);\n }\n\n get selectDistinctColumns(): ColumnName[] {\n return this.selectDistinct;\n }\n\n set selectDistinctColumns(columnNames: string[]) {\n log.debug('set selectDistinctColumns', columnNames);\n\n if (!this.isSelectDistinctAvailable) {\n throw new Error('Select distinct is not available');\n }\n\n if (\n columnNames === this.selectDistinctColumns ||\n (columnNames.length === 0 && this.selectDistinctColumns.length === 0)\n ) {\n log.debug('Ignore same selectDistinctColumns', columnNames);\n return;\n }\n\n this.selectDistinct = columnNames;\n\n const selectDistinctColumns = columnNames\n .map(name => this.originalColumns.find(column => column.name === name))\n .filter(column => column != null) as Column[];\n\n let modelPromise = Promise.resolve(this.originalModel);\n\n if (\n isIrisGridTableModelTemplate(this.originalModel) &&\n selectDistinctColumns.length > 0\n ) {\n modelPromise = this.originalModel.table\n .selectDistinct(selectDistinctColumns)\n .then(table => makeModel(this.dh, table, this.formatter));\n }\n this.setNextModel(modelPromise);\n }\n\n get table(): Table | TreeTable | undefined {\n if (isIrisGridTableModelTemplate(this.model)) {\n return this.model.table;\n }\n\n return undefined;\n }\n\n get totalsConfig(): UITotalsTableConfig | null {\n return this.model.totalsConfig;\n }\n\n set totalsConfig(totalsConfig: UITotalsTableConfig | null) {\n this.model.totalsConfig = totalsConfig;\n }\n\n get isFilterRequired(): boolean {\n return this.model.isFilterRequired;\n }\n\n get isEditable(): boolean {\n return isEditableGridModel(this.model) && this.model.isEditable;\n }\n\n isEditableRange: IrisGridTableModel['isEditableRange'] = (\n ...args\n ): boolean => {\n if (isEditableGridModel(this.model)) {\n return this.model.isEditableRange(...args);\n }\n return false;\n };\n\n isFilterable: IrisGridTableModel['isFilterable'] = (...args) =>\n this.model.isFilterable(...args);\n\n setViewport = (top: number, bottom: number, columns: Column[]): void =>\n this.model.setViewport(top, bottom, columns);\n\n snapshot: IrisGridModel['snapshot'] = (...args) =>\n this.model.snapshot(...args);\n\n textSnapshot: IrisGridTableModel['textSnapshot'] = (...args) =>\n this.model.textSnapshot(...args);\n\n export(): Promise<Table> {\n if (TableUtils.isTreeTable(this.model)) {\n throw new Error(\"TreeTable has no 'export' property\");\n }\n return (this.model as IrisGridTableModel).export();\n }\n\n valuesTable: IrisGridTableModel['valuesTable'] = (...args) =>\n this.model.valuesTable(...args);\n\n columnStatistics(column: Column): Promise<ColumnStatistics> {\n if (TableUtils.isTreeTable(this.model)) {\n throw new Error(\"TreeTable has no 'columnStatistics' function\");\n }\n return (this.model as IrisGridTableModel).columnStatistics(column);\n }\n\n editValueForCell: IrisGridTableModel['editValueForCell'] = (...args) => {\n if (isEditableGridModel(this.model)) {\n return this.model.editValueForCell(...args);\n }\n return '';\n };\n\n setValueForCell: IrisGridTableModel['setValueForCell'] = (...args) => {\n if (isEditableGridModel(this.model)) {\n return this.model.setValueForCell(...args);\n }\n return Promise.reject(new Error('Model is not editable'));\n };\n\n setValueForRanges: IrisGridTableModel['setValueForRanges'] = (...args) => {\n if (isEditableGridModel(this.model)) {\n return this.model.setValueForRanges(...args);\n }\n return Promise.reject(new Error('Model is not editable'));\n };\n\n setValues: EditableGridModel['setValues'] = (...args) => {\n if (isEditableGridModel(this.model)) {\n return this.model.setValues(...args);\n }\n return Promise.resolve();\n };\n\n isValidForCell: IrisGridTableModel['isValidForCell'] = (...args) => {\n if (isEditableGridModel(this.model)) {\n return this.model.isValidForCell(...args);\n }\n return false;\n };\n\n delete: IrisGridTableModel['delete'] = (...args) =>\n this.model.delete(...args);\n\n get pendingDataMap(): PendingDataMap<UIRow> {\n return this.model.pendingDataMap;\n }\n\n set pendingDataMap(map: PendingDataMap<UIRow>) {\n this.model.pendingDataMap = map;\n }\n\n get pendingRowCount(): number {\n return this.model.pendingRowCount;\n }\n\n set pendingRowCount(count: number) {\n this.model.pendingRowCount = count;\n }\n\n get pendingDataErrors(): PendingDataErrorMap {\n return this.model.pendingDataErrors;\n }\n\n commitPending: IrisGridTableModel['commitPending'] = (...args) =>\n this.model.commitPending(...args);\n\n getColumnIndexByName(name: ColumnName): number | undefined {\n return this.model.getColumnIndexByName(name);\n }\n\n async seekRow(\n startRow: number,\n column: Column,\n valueType: ValueTypeUnion,\n value: unknown,\n insensitive?: boolean,\n contains?: boolean,\n isBackwards?: boolean\n ): Promise<number> {\n return this.model.seekRow(\n startRow,\n column,\n valueType,\n value,\n insensitive,\n contains,\n isBackwards\n );\n }\n\n get isSeekRowAvailable(): boolean {\n return this.model.isSeekRowAvailable;\n }\n}\n\nexport default IrisGridProxyModel;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IrisGridProxyModel.js","names":["deepEqual","Formatter","TableUtils","Log","EventShimCustomEvent","PromiseUtils","isEditableGridModel","isExpandableGridModel","IrisGridTableModel","IrisGridTreeTableModel","IrisGridModel","isIrisGridTableModelTemplate","log","module","makeModel","dh","table","formatter","inputTable","isTreeTable","IrisGridProxyModel","constructor","_this","arguments","length","undefined","this","_defineProperty","model","textForCell","truncationCharForCell","textAlignForCell","colorForCell","backgroundColorForCell","textForColumnHeader","colorForColumnHeader","textForRowHeader","textForRowFooter","isRowMovable","isColumnMovable","isRowExpandable","isRowExpanded","setRowExpanded","Error","expandAll","collapseAll","depthForRow","getColumnHeaderGroup","getColumnHeaderParentGroup","formatForCell","valueForCell","renderTypeForCell","dataBarOptionsForCell","displayString","isEditableRange","isFilterable","top","bottom","columns","setViewport","snapshot","textSnapshot","valuesTable","editValueForCell","setValueForCell","Promise","reject","setValueForRanges","setValues","resolve","isValidForCell","delete","commitPending","handleModelEvent","bind","originalModel","modelPromise","rollup","selectDistinct","close","cancel","event","debug2","detail","type","dispatchEvent","setModel","debug","oldModel","listenerCount","addListeners","EVENT","COLUMNS_CHANGED","TABLE_CHANGED","setNextModel","removeListeners","makeCancelable","then","catch","err","isCanceled","error","REQUEST_FAILED","startListening","stopListening","events","Object","keys","i","addEventListener","removeEventListener","rowCount","columnCount","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","isColumnFrozen","x","isColumnSortable","index","hasExpandableRows","isExpandAllAvailable","_this$model$isExpandA","isExportAvailable","isColumnStatisticsAvailable","isValuesTableAvailable","isCustomColumnsAvailable","isSelectDistinctAvailable","selectDistinctColumns","isFormatColumnsAvailable","isChartBuilderAvailable","isRollupAvailable","isTotalsAvailable","isReversible","initialMovedColumns","initialMovedRows","layoutHints","frontColumns","backColumns","frozenColumns","columnHeaderGroups","groups","initialColumnHeaderGroups","columnHeaderGroupMap","columnHeaderMaxDepth","updateFrozenColumns","originalColumns","groupedColumns","description","filter","sort","customColumns","formatColumns","rollupConfig","columnNames","map","name","find","column","totalsConfig","isFilterRequired","isEditable","export","columnStatistics","pendingDataMap","pendingRowCount","count","pendingDataErrors","getColumnIndexByName","seekRow","startRow","valueType","value","insensitive","contains","isBackwards","_this2","_asyncToGenerator","isSeekRowAvailable"],"sources":["../src/IrisGridProxyModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport deepEqual from 'deep-equal';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n CancelablePromise,\n EventShimCustomEvent,\n PromiseUtils,\n} from '@deephaven/utils';\nimport type {\n Column,\n ColumnStatistics,\n CustomColumn,\n dh as DhType,\n FilterCondition,\n InputTable,\n LayoutHints,\n RollupConfig,\n Sort,\n Table,\n TreeTable,\n ValueTypeUnion,\n} from '@deephaven/jsapi-types';\nimport {\n EditableGridModel,\n isEditableGridModel,\n isExpandableGridModel,\n ModelIndex,\n MoveOperation,\n} from '@deephaven/grid';\nimport IrisGridTableModel from './IrisGridTableModel';\nimport IrisGridTreeTableModel from './IrisGridTreeTableModel';\nimport IrisGridModel from './IrisGridModel';\nimport {\n ColumnName,\n UITotalsTableConfig,\n PendingDataMap,\n UIRow,\n PendingDataErrorMap,\n} from './CommonTypes';\nimport { isIrisGridTableModelTemplate } from './IrisGridTableModelTemplate';\nimport type ColumnHeaderGroup from './ColumnHeaderGroup';\n\nconst log = Log.module('IrisGridProxyModel');\n\nfunction makeModel(\n dh: DhType,\n table: Table | TreeTable,\n formatter?: Formatter,\n inputTable?: InputTable | null\n): IrisGridModel {\n if (TableUtils.isTreeTable(table)) {\n return new IrisGridTreeTableModel(dh, table, formatter);\n }\n return new IrisGridTableModel(dh, table, formatter, inputTable);\n}\n\n/**\n * Model which proxies calls to other IrisGridModels.\n * This allows for operations that generate new tables, like rollups.\n */\nclass IrisGridProxyModel extends IrisGridModel {\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n\n dh: DhType;\n\n originalModel: IrisGridModel;\n\n model: IrisGridModel;\n\n modelPromise: CancelablePromise<IrisGridModel> | null;\n\n rollup: RollupConfig | null;\n\n selectDistinct: ColumnName[];\n\n constructor(\n dh: DhType,\n table: Table | TreeTable,\n formatter = new Formatter(dh),\n inputTable: InputTable | null = null\n ) {\n super(dh);\n\n this.handleModelEvent = this.handleModelEvent.bind(this);\n\n const model = makeModel(dh, table, formatter, inputTable);\n this.dh = dh;\n this.originalModel = model;\n this.model = model;\n this.modelPromise = null;\n this.rollup = null;\n this.selectDistinct = [];\n }\n\n close(): void {\n this.originalModel.close();\n if (this.model !== this.originalModel) {\n this.model.close();\n }\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n }\n }\n\n handleModelEvent(event: CustomEvent): void {\n log.debug2('handleModelEvent', event);\n\n const { detail, type } = event;\n this.dispatchEvent(new EventShimCustomEvent(type, { detail }));\n }\n\n setModel(model: IrisGridModel): void {\n log.debug('setModel', model);\n\n const oldModel = this.model;\n\n if (oldModel !== this.originalModel) {\n oldModel.close();\n }\n\n this.model = model;\n\n if (this.listenerCount > 0) {\n this.addListeners(model);\n }\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: model.columns,\n })\n );\n\n if (isIrisGridTableModelTemplate(model)) {\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: model.table,\n })\n );\n }\n }\n\n setNextModel(modelPromise: Promise<IrisGridModel>): void {\n log.debug2('setNextModel');\n\n if (this.modelPromise) {\n this.modelPromise.cancel();\n }\n\n if (this.listenerCount > 0) {\n this.removeListeners(this.model);\n }\n\n this.modelPromise = PromiseUtils.makeCancelable(\n modelPromise,\n (model: IrisGridModel) => model.close()\n );\n this.modelPromise\n .then(model => {\n this.modelPromise = null;\n this.setModel(model);\n })\n .catch((err: unknown) => {\n if (PromiseUtils.isCanceled(err)) {\n log.debug2('setNextModel cancelled');\n return;\n }\n\n log.error('Unable to set next model', err);\n this.modelPromise = null;\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err,\n })\n );\n });\n }\n\n startListening(): void {\n super.startListening();\n\n this.addListeners(this.model);\n }\n\n stopListening(): void {\n super.stopListening();\n\n this.removeListeners(this.model);\n }\n\n addListeners(model: IrisGridModel): void {\n const events = Object.keys(IrisGridModel.EVENT);\n for (let i = 0; i < events.length; i += 1) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n model.addEventListener(events[i], this.handleModelEvent);\n }\n }\n\n removeListeners(model: IrisGridModel): void {\n const events = Object.keys(IrisGridModel.EVENT);\n for (let i = 0; i < events.length; i += 1) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n model.removeEventListener(events[i], this.handleModelEvent);\n }\n }\n\n get rowCount(): number {\n return this.model.rowCount;\n }\n\n get columnCount(): number {\n return this.model.columnCount;\n }\n\n get floatingTopRowCount(): number {\n return this.model.floatingTopRowCount;\n }\n\n get floatingBottomRowCount(): number {\n return this.model.floatingBottomRowCount;\n }\n\n get floatingLeftColumnCount(): number {\n return this.model.floatingLeftColumnCount;\n }\n\n get floatingRightColumnCount(): number {\n return this.model.floatingRightColumnCount;\n }\n\n textForCell: IrisGridModel['textForCell'] = (...args) =>\n this.model.textForCell(...args);\n\n truncationCharForCell: IrisGridModel['truncationCharForCell'] = (...args) =>\n this.model.truncationCharForCell(...args);\n\n textAlignForCell: IrisGridModel['textAlignForCell'] = (...args) =>\n this.model.textAlignForCell(...args);\n\n colorForCell: IrisGridModel['colorForCell'] = (...args) =>\n this.model.colorForCell(...args);\n\n backgroundColorForCell: IrisGridModel['backgroundColorForCell'] = (...args) =>\n this.model.backgroundColorForCell(...args);\n\n textForColumnHeader: IrisGridModel['textForColumnHeader'] = (...args) =>\n this.model.textForColumnHeader(...args);\n\n colorForColumnHeader: IrisGridModel['colorForColumnHeader'] = (...args) =>\n this.model.colorForColumnHeader(...args);\n\n textForRowHeader: IrisGridModel['textForRowHeader'] = (...args) =>\n this.model.textForRowHeader(...args);\n\n textForRowFooter: IrisGridModel['textForRowFooter'] = (...args) =>\n this.model.textForRowFooter(...args);\n\n isRowMovable: IrisGridModel['isRowMovable'] = (...args) =>\n this.model.isRowMovable(...args);\n\n isColumnMovable: IrisGridModel['isColumnMovable'] = (...args) =>\n this.model.isColumnMovable(...args);\n\n isColumnFrozen(x: ModelIndex): boolean {\n return this.model.isColumnFrozen(x);\n }\n\n isColumnSortable(index: number): boolean {\n return this.model.isColumnSortable(index);\n }\n\n get hasExpandableRows(): boolean {\n if (isExpandableGridModel(this.model)) {\n return this.model.hasExpandableRows;\n }\n return false;\n }\n\n get isExpandAllAvailable(): boolean {\n if (isExpandableGridModel(this.model)) {\n return this.model.isExpandAllAvailable ?? false;\n }\n return false;\n }\n\n isRowExpandable: IrisGridTreeTableModel['isRowExpandable'] = (...args) => {\n if (isExpandableGridModel(this.model)) {\n return this.model.isRowExpandable(...args);\n }\n return false;\n };\n\n isRowExpanded: IrisGridTreeTableModel['isRowExpanded'] = (...args) => {\n if (isExpandableGridModel(this.model)) {\n return this.model.isRowExpanded(...args);\n }\n return false;\n };\n\n setRowExpanded: IrisGridTreeTableModel['setRowExpanded'] = (...args) => {\n if (isExpandableGridModel(this.model)) {\n return this.model.setRowExpanded(...args);\n }\n throw Error('Function setRowExpanded does not exist on IrisGridTableModel');\n };\n\n expandAll: IrisGridTreeTableModel['expandAll'] = () => {\n if (isExpandableGridModel(this.model)) {\n return this.model.expandAll();\n }\n throw Error('Function expandAll does not exist on IrisGridTableModel');\n };\n\n collapseAll: IrisGridTreeTableModel['collapseAll'] = () => {\n if (isExpandableGridModel(this.model)) {\n return this.model.collapseAll();\n }\n throw Error('Function collapseAll does not exist on IrisGridTableModel');\n };\n\n depthForRow: IrisGridTreeTableModel['depthForRow'] = (...args) => {\n if (isExpandableGridModel(this.model)) {\n return this.model.depthForRow(...args);\n }\n return 0;\n // throw Error('Function depthForRow does not exist on IrisGridTableModel');\n };\n\n get isExportAvailable(): boolean {\n return this.model.isExportAvailable;\n }\n\n get isColumnStatisticsAvailable(): boolean {\n return this.model.isColumnStatisticsAvailable;\n }\n\n get isValuesTableAvailable(): boolean {\n return this.model.isValuesTableAvailable;\n }\n\n get isCustomColumnsAvailable(): boolean {\n return (\n this.model.isCustomColumnsAvailable &&\n // Disable for selectDistinct tables\n !(this.isSelectDistinctAvailable && this.selectDistinctColumns.length > 0)\n );\n }\n\n get isFormatColumnsAvailable(): boolean {\n return this.model.isFormatColumnsAvailable;\n }\n\n get isChartBuilderAvailable(): boolean {\n return this.model.isChartBuilderAvailable;\n }\n\n get isRollupAvailable(): boolean {\n return (\n (this.originalModel.isRollupAvailable || this.rollup != null) &&\n this.selectDistinct.length === 0\n );\n }\n\n get isSelectDistinctAvailable(): boolean {\n return (\n (this.originalModel.isSelectDistinctAvailable ||\n this.selectDistinct.length > 0) &&\n this.rollup == null\n );\n }\n\n get isTotalsAvailable(): boolean {\n return this.model.isTotalsAvailable;\n }\n\n get isReversible(): boolean {\n return this.model.isReversible;\n }\n\n get columns(): readonly Column[] {\n return this.model.columns;\n }\n\n get initialMovedColumns(): readonly MoveOperation[] {\n return this.model.initialMovedColumns;\n }\n\n get initialMovedRows(): readonly MoveOperation[] {\n return this.model.initialMovedRows;\n }\n\n get layoutHints(): LayoutHints | null {\n return this.model.layoutHints;\n }\n\n get frontColumns(): readonly ColumnName[] {\n return this.model.frontColumns;\n }\n\n get backColumns(): readonly ColumnName[] {\n return this.model.backColumns;\n }\n\n get frozenColumns(): readonly ColumnName[] {\n return this.model.frozenColumns;\n }\n\n getColumnHeaderGroup: IrisGridModel['getColumnHeaderGroup'] = (...args) =>\n this.model.getColumnHeaderGroup(...args);\n\n get columnHeaderGroups(): readonly ColumnHeaderGroup[] {\n return this.model.columnHeaderGroups;\n }\n\n set columnHeaderGroups(groups: readonly ColumnHeaderGroup[]) {\n this.model.columnHeaderGroups = groups;\n }\n\n get initialColumnHeaderGroups(): readonly ColumnHeaderGroup[] {\n return this.model.initialColumnHeaderGroups;\n }\n\n getColumnHeaderParentGroup: IrisGridModel['getColumnHeaderParentGroup'] = (\n ...args\n ) => this.model.getColumnHeaderParentGroup(...args);\n\n get columnHeaderGroupMap(): ReadonlyMap<string, ColumnHeaderGroup> {\n return this.model.columnHeaderGroupMap;\n }\n\n get columnHeaderMaxDepth(): number {\n return this.model.columnHeaderMaxDepth;\n }\n\n updateFrozenColumns(columns: readonly ColumnName[]): void {\n return this.model.updateFrozenColumns(columns);\n }\n\n get originalColumns(): readonly Column[] {\n return this.originalModel.columns;\n }\n\n get groupedColumns(): readonly Column[] {\n return this.model.groupedColumns;\n }\n\n get description(): string {\n return this.model.description;\n }\n\n formatForCell: IrisGridModel['formatForCell'] = (...args) =>\n this.model.formatForCell(...args);\n\n valueForCell: IrisGridModel['valueForCell'] = (...args) =>\n this.model.valueForCell(...args);\n\n renderTypeForCell: IrisGridModel['renderTypeForCell'] = (...args) =>\n this.model.renderTypeForCell(...args);\n\n dataBarOptionsForCell: IrisGridModel['dataBarOptionsForCell'] = (...args) =>\n this.model.dataBarOptionsForCell(...args);\n\n get filter(): readonly FilterCondition[] {\n return this.model.filter;\n }\n\n set filter(filter: readonly FilterCondition[]) {\n this.model.filter = filter;\n }\n\n get formatter(): Formatter {\n return this.model.formatter;\n }\n\n set formatter(formatter: Formatter) {\n this.model.formatter = formatter;\n }\n\n displayString: IrisGridModel['displayString'] = (...args) =>\n this.model.displayString(...args);\n\n get sort(): readonly Sort[] {\n return this.model.sort;\n }\n\n set sort(sort: readonly Sort[]) {\n this.model.sort = sort;\n }\n\n get customColumns(): readonly ColumnName[] {\n return this.model.customColumns;\n }\n\n set customColumns(customColumns: readonly ColumnName[]) {\n this.model.customColumns = customColumns;\n }\n\n get formatColumns(): readonly CustomColumn[] {\n return this.model.formatColumns;\n }\n\n set formatColumns(formatColumns: readonly CustomColumn[]) {\n this.model.formatColumns = formatColumns;\n }\n\n get rollupConfig(): RollupConfig | null {\n return this.rollup;\n }\n\n set rollupConfig(rollupConfig: RollupConfig | null) {\n log.debug('set rollupConfig', rollupConfig);\n\n if (!this.isRollupAvailable) {\n throw new Error('Rollup Rows are not available');\n }\n\n // Prevent model update when IrisGridModelUpdater is mounted\n // if rollup is already initialized in IrisGridPanel\n if (deepEqual(rollupConfig, this.rollup)) {\n return;\n }\n\n this.rollup = rollupConfig;\n\n let modelPromise = Promise.resolve(this.originalModel);\n\n if (\n isIrisGridTableModelTemplate(this.originalModel) &&\n rollupConfig != null\n ) {\n modelPromise = this.originalModel.table\n .rollup(rollupConfig)\n .then(table => makeModel(this.dh, table, this.formatter));\n }\n this.setNextModel(modelPromise);\n }\n\n get selectDistinctColumns(): ColumnName[] {\n return this.selectDistinct;\n }\n\n set selectDistinctColumns(columnNames: string[]) {\n log.debug('set selectDistinctColumns', columnNames);\n\n if (!this.isSelectDistinctAvailable) {\n throw new Error('Select distinct is not available');\n }\n\n if (\n columnNames === this.selectDistinctColumns ||\n (columnNames.length === 0 && this.selectDistinctColumns.length === 0)\n ) {\n log.debug('Ignore same selectDistinctColumns', columnNames);\n return;\n }\n\n this.selectDistinct = columnNames;\n\n const selectDistinctColumns = columnNames\n .map(name => this.originalColumns.find(column => column.name === name))\n .filter(column => column != null) as Column[];\n\n let modelPromise = Promise.resolve(this.originalModel);\n\n if (\n isIrisGridTableModelTemplate(this.originalModel) &&\n selectDistinctColumns.length > 0\n ) {\n modelPromise = this.originalModel.table\n .selectDistinct(selectDistinctColumns)\n .then(table => makeModel(this.dh, table, this.formatter));\n }\n this.setNextModel(modelPromise);\n }\n\n get table(): Table | TreeTable | undefined {\n if (isIrisGridTableModelTemplate(this.model)) {\n return this.model.table;\n }\n\n return undefined;\n }\n\n get totalsConfig(): UITotalsTableConfig | null {\n return this.model.totalsConfig;\n }\n\n set totalsConfig(totalsConfig: UITotalsTableConfig | null) {\n this.model.totalsConfig = totalsConfig;\n }\n\n get isFilterRequired(): boolean {\n return this.model.isFilterRequired;\n }\n\n get isEditable(): boolean {\n return isEditableGridModel(this.model) && this.model.isEditable;\n }\n\n isEditableRange: IrisGridTableModel['isEditableRange'] = (\n ...args\n ): boolean => {\n if (isEditableGridModel(this.model)) {\n return this.model.isEditableRange(...args);\n }\n return false;\n };\n\n isFilterable: IrisGridTableModel['isFilterable'] = (...args) =>\n this.model.isFilterable(...args);\n\n setViewport = (top: number, bottom: number, columns: Column[]): void =>\n this.model.setViewport(top, bottom, columns);\n\n snapshot: IrisGridModel['snapshot'] = (...args) =>\n this.model.snapshot(...args);\n\n textSnapshot: IrisGridTableModel['textSnapshot'] = (...args) =>\n this.model.textSnapshot(...args);\n\n export(): Promise<Table> {\n if (TableUtils.isTreeTable(this.model)) {\n throw new Error(\"TreeTable has no 'export' property\");\n }\n return (this.model as IrisGridTableModel).export();\n }\n\n valuesTable: IrisGridTableModel['valuesTable'] = (...args) =>\n this.model.valuesTable(...args);\n\n columnStatistics(column: Column): Promise<ColumnStatistics> {\n if (TableUtils.isTreeTable(this.model)) {\n throw new Error(\"TreeTable has no 'columnStatistics' function\");\n }\n return (this.model as IrisGridTableModel).columnStatistics(column);\n }\n\n editValueForCell: IrisGridTableModel['editValueForCell'] = (...args) => {\n if (isEditableGridModel(this.model)) {\n return this.model.editValueForCell(...args);\n }\n return '';\n };\n\n setValueForCell: IrisGridTableModel['setValueForCell'] = (...args) => {\n if (isEditableGridModel(this.model)) {\n return this.model.setValueForCell(...args);\n }\n return Promise.reject(new Error('Model is not editable'));\n };\n\n setValueForRanges: IrisGridTableModel['setValueForRanges'] = (...args) => {\n if (isEditableGridModel(this.model)) {\n return this.model.setValueForRanges(...args);\n }\n return Promise.reject(new Error('Model is not editable'));\n };\n\n setValues: EditableGridModel['setValues'] = (...args) => {\n if (isEditableGridModel(this.model)) {\n return this.model.setValues(...args);\n }\n return Promise.resolve();\n };\n\n isValidForCell: IrisGridTableModel['isValidForCell'] = (...args) => {\n if (isEditableGridModel(this.model)) {\n return this.model.isValidForCell(...args);\n }\n return false;\n };\n\n delete: IrisGridTableModel['delete'] = (...args) =>\n this.model.delete(...args);\n\n get pendingDataMap(): PendingDataMap<UIRow> {\n return this.model.pendingDataMap;\n }\n\n set pendingDataMap(map: PendingDataMap<UIRow>) {\n this.model.pendingDataMap = map;\n }\n\n get pendingRowCount(): number {\n return this.model.pendingRowCount;\n }\n\n set pendingRowCount(count: number) {\n this.model.pendingRowCount = count;\n }\n\n get pendingDataErrors(): PendingDataErrorMap {\n return this.model.pendingDataErrors;\n }\n\n commitPending: IrisGridTableModel['commitPending'] = (...args) =>\n this.model.commitPending(...args);\n\n getColumnIndexByName(name: ColumnName): number | undefined {\n return this.model.getColumnIndexByName(name);\n }\n\n async seekRow(\n startRow: number,\n column: Column,\n valueType: ValueTypeUnion,\n value: unknown,\n insensitive?: boolean,\n contains?: boolean,\n isBackwards?: boolean\n ): Promise<number> {\n return this.model.seekRow(\n startRow,\n column,\n valueType,\n value,\n insensitive,\n contains,\n isBackwards\n );\n }\n\n get isSeekRowAvailable(): boolean {\n return this.model.isSeekRowAvailable;\n }\n}\n\nexport default IrisGridProxyModel;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridRenderer.js","names":["DEFAULT_FONT_WIDTH","GridRenderer","GridUtils","TableUtils","assertNotNull","getOrThrow","IrisGridTextCellRenderer","IrisGridDataBarCellRenderer","getIcon","ICON_NAMES","Object","freeze","SORT_UP","SORT_DOWN","CARET_DOWN","CARET_RIGHT","CELL_OVERFLOW","EXPAND_ICON_SIZE","IrisGridRenderer","isFilterValid","advancedFilter","quickFilter","isAdvancedFilterValid","filter","isQuickFilterValid","getSortIcon","sort","direction","sortDirection","ascending","descending","drawCanvas","state","drawScrim","drawGrid","context","drawCellOverflowButton","drawGridLines","drawGroupedColumnLine","drawPendingRowLine","drawCellContent","column","row","metrics","model","modelColumns","modelRows","modelColumn","get","modelRow","undefined","renderType","renderTypeForCell","cellRenderer","getCellRenderer","getCellOverflowButtonPosition","mouseX","mouseY","theme","textCellRenderer","shouldRenderOverflowButton","left","buttonLeft","top","buttonTop","width","buttonWidth","height","buttonHeight","cellHorizontalPadding","overflowButtonColor","overflowButtonHoverColor","save","fillStyle","icon","translate","fill","restore","groupedColumns","maxY","allColumnWidths","allColumnXs","length","groupedColumnDividerColor","lastVisibleGroupColumnIndex","columnX","columnWidth","x","strokeStyle","lineWidth","beginPath","moveTo","lineTo","stroke","allRowYs","maxX","pendingRowCount","firstPendingRow","rowCount","floatingBottomRowCount","y","setLineDash","pendingTextColor","drawMouseColumnHover","hoverSelectColumn","linkerColumnHoverBackgroundColor","fillRect","drawMouseRowHover","isSelectingColumn","loadingScrimProgress","gridY","scrimBlurSize","scrimColor","globalCompositeOperation","rect","clip","drawColumnHeaders","reverseType","columnHeaderHeight","drawFilterHeaders","hasReverse","REVERSE_TYPE","NONE","color","headerReverseBarColor","headerSortBarColor","drawHeaderBar","reverseHeaderBarHeight","sortHeaderBarHeight","barHeight","interior","offset","headerBarCasingColor","columnHeaderMaxDepth","drawColumnHeadersAtDepth","range","boundsProp","depth","isMenuShown","bounds","drawColumnHeaderAtIndex","index","gridX","fontWidths","headerHorizontalPadding","columnName","columns","name","getSortForColumn","text","textForColumnHeader","fontWidth","font","textWidth","textRight","defaultX","Math","min","yOffset","isFilterBarShown","quickFilters","advancedFilters","drawExpandedFilterHeaders","size","drawCollapsedFilterHeaders","filterBarHeight","visibleColumns","textAlign","filterBarExpandedActiveBackgroundColor","filterBarExpandedBackgroundColor","y1","filterBarSeparatorColor","i","isFilterable","x1","drawExpandedFilterHeader","filterBarExpandedActiveCellBackgroundColor","filterBarErrorColor","filterBarHorizontalPadding","headerColor","filterText","getFilterText","measureText","maxLength","substring","rectLeft","rectTop","rectWidth","rectHeight","strokeRect","textX","textY","fillText","headerSeparatorColor","filterBarCollapsedHeight","drawCollapsedFilterHeader","filterBarActiveColor","filterBarActiveBackgroundColor","drawRowFooters","floatingTopHeight","floatingBottomHeight","floatingRows","rowFooterWidth","horizontalBarHeight","verticalBarWidth","allRowHeights","floatingGridRowColor","floatingRowBackgroundColors","rowHoverBackgroundColor","mouseRow","getRowAtY","includes","rowHeight","rowY","textForRowFooter","getExpandButtonPosition","NULL_POSITION","getCellInfoFromXY","max"],"sources":["../src/IrisGridRenderer.ts"],"sourcesContent":["/* eslint react/destructuring-assignment: \"off\" */\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-param-reassign: \"off\" */\nimport {\n BoundedAxisRange,\n Coordinate,\n DEFAULT_FONT_WIDTH,\n GridMetrics,\n GridRangeIndex,\n GridRenderer,\n GridRenderState,\n GridThemeType,\n GridUtils,\n VisibleIndex,\n} from '@deephaven/grid';\nimport type { Sort } from '@deephaven/jsapi-types';\nimport { TableUtils, ReverseType } from '@deephaven/jsapi-utils';\nimport { assertNotNull, getOrThrow } from '@deephaven/utils';\nimport {\n ReadonlyAdvancedFilterMap,\n ReadonlyQuickFilterMap,\n AdvancedFilter,\n QuickFilter,\n} from './CommonTypes';\nimport { IrisGridThemeType } from './IrisGridTheme';\nimport IrisGridModel from './IrisGridModel';\nimport IrisGridTextCellRenderer from './IrisGridTextCellRenderer';\nimport IrisGridDataBarCellRenderer from './IrisGridDataBarCellRenderer';\nimport { getIcon } from './IrisGridIcons';\n\nconst ICON_NAMES = Object.freeze({\n SORT_UP: 'sortUp',\n SORT_DOWN: 'sortDown',\n CARET_DOWN: 'caretDown',\n CARET_RIGHT: 'caretRight',\n CELL_OVERFLOW: 'cellOverflow',\n});\n\nconst EXPAND_ICON_SIZE = 10;\n\nexport type IrisGridRenderState = GridRenderState & {\n model: IrisGridModel;\n theme: IrisGridThemeType;\n hoverSelectColumn: GridRangeIndex;\n isSelectingColumn: boolean;\n loadingScrimProgress: number;\n reverseType: ReverseType;\n isFilterBarShown: boolean;\n advancedFilters: ReadonlyAdvancedFilterMap;\n quickFilters: ReadonlyQuickFilterMap;\n isMenuShown: boolean;\n};\n/**\n * Handles rendering some of the Iris specific features, such as sorting icons, sort bar display\n * */\nexport class IrisGridRenderer extends GridRenderer {\n static isFilterValid(\n advancedFilter: AdvancedFilter | undefined | null,\n quickFilter: QuickFilter | undefined | null\n ): boolean {\n const isAdvancedFilterValid =\n advancedFilter == null || advancedFilter.filter != null;\n const isQuickFilterValid =\n quickFilter == null || quickFilter.filter != null;\n return isAdvancedFilterValid && isQuickFilterValid;\n }\n\n protected textCellRenderer = new IrisGridTextCellRenderer();\n\n protected dataBarCellRenderer = new IrisGridDataBarCellRenderer();\n\n getSortIcon(sort: Sort | null): Path2D | null {\n if (!sort) {\n return null;\n }\n if (sort.direction === TableUtils.sortDirection.ascending) {\n return getIcon(ICON_NAMES.SORT_UP);\n }\n if (sort.direction === TableUtils.sortDirection.descending) {\n return getIcon(ICON_NAMES.SORT_DOWN);\n }\n return null;\n }\n\n drawCanvas(state: IrisGridRenderState): void {\n super.drawCanvas(state);\n\n this.drawScrim(state);\n }\n\n drawGrid(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGrid(context, state);\n this.drawCellOverflowButton(state);\n }\n\n drawGridLines(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGridLines(context, state);\n\n this.drawGroupedColumnLine(context, state);\n\n this.drawPendingRowLine(context, state);\n }\n\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model } = state;\n const { modelColumns, modelRows } = metrics;\n const modelColumn = modelColumns.get(column);\n const modelRow = getOrThrow(modelRows, row);\n if (modelColumn === undefined) {\n return;\n }\n\n const renderType = model.renderTypeForCell(modelColumn, modelRow);\n const cellRenderer = this.getCellRenderer(renderType);\n cellRenderer.drawCellContent(context, state, column, row);\n }\n\n getCellOverflowButtonPosition({\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n }): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n return this.textCellRenderer.getCellOverflowButtonPosition(\n mouseX,\n mouseY,\n metrics,\n theme\n );\n }\n\n shouldRenderOverflowButton(state: IrisGridRenderState): boolean {\n return this.textCellRenderer.shouldRenderOverflowButton(state);\n }\n\n drawCellOverflowButton(state: IrisGridRenderState): void {\n const { context, mouseX, mouseY, theme } = state;\n if (mouseX == null || mouseY == null) return;\n\n if (!this.shouldRenderOverflowButton(state)) {\n return;\n }\n\n const {\n left: buttonLeft,\n top: buttonTop,\n width: buttonWidth,\n height: buttonHeight,\n } = this.getCellOverflowButtonPosition(state);\n\n const {\n cellHorizontalPadding,\n overflowButtonColor,\n overflowButtonHoverColor,\n } = theme;\n\n context.save();\n if (\n overflowButtonHoverColor != null &&\n buttonLeft != null &&\n buttonWidth != null &&\n buttonTop != null &&\n buttonHeight != null &&\n mouseX >= buttonLeft &&\n mouseX <= buttonLeft + buttonWidth &&\n mouseY >= buttonTop &&\n mouseY <= buttonTop + buttonHeight\n ) {\n context.fillStyle = overflowButtonHoverColor;\n } else if (overflowButtonColor != null) {\n context.fillStyle = overflowButtonColor;\n }\n const icon = getIcon(ICON_NAMES.CELL_OVERFLOW);\n if (buttonLeft != null && buttonTop != null) {\n context.translate(buttonLeft + cellHorizontalPadding, buttonTop + 2);\n }\n context.fill(icon);\n\n context.restore();\n }\n\n drawGroupedColumnLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { groupedColumns } = model;\n const { maxY, allColumnWidths, allColumnXs } = metrics;\n if (\n groupedColumns.length === 0 ||\n theme.groupedColumnDividerColor == null\n ) {\n return;\n }\n\n // This assumes that the engine puts the grouped columns at the start of the\n // model, so model and visible index match for grouped columns. If we ever\n // add freeze support for tree tables or allow moving the grouped columns,\n // this assumption may no longer hold true. If such a change occurs, we'll\n // need to revisit this since a single vertical divider may no longer make\n // sense.\n const lastVisibleGroupColumnIndex = groupedColumns.length - 1;\n\n const columnX = allColumnXs.get(lastVisibleGroupColumnIndex);\n const columnWidth = allColumnWidths.get(lastVisibleGroupColumnIndex);\n if (columnX == null || columnWidth == null) {\n return;\n }\n\n const x = columnX + columnWidth + 0.5;\n\n context.strokeStyle = theme.groupedColumnDividerColor;\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n context.stroke();\n }\n\n drawPendingRowLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { allRowYs, maxX } = metrics;\n const { pendingRowCount } = model;\n if (pendingRowCount <= 0) {\n return;\n }\n\n const firstPendingRow =\n model.rowCount - model.pendingRowCount - model.floatingBottomRowCount;\n let y = allRowYs.get(firstPendingRow);\n if (y == null) {\n return;\n }\n\n y -= 0.5;\n context.save();\n context.setLineDash([4, 2]);\n context.strokeStyle = theme.pendingTextColor;\n\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n context.stroke();\n context.restore();\n }\n\n drawMouseColumnHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { theme, metrics, hoverSelectColumn } = state;\n if (\n hoverSelectColumn == null ||\n theme.linkerColumnHoverBackgroundColor == null\n ) {\n return;\n }\n\n const { allColumnWidths, allColumnXs, maxY } = metrics;\n\n const x = getOrThrow(allColumnXs, hoverSelectColumn);\n const columnWidth = getOrThrow(allColumnWidths, hoverSelectColumn);\n\n context.fillStyle = theme.linkerColumnHoverBackgroundColor;\n context.fillRect(x, 0, columnWidth, maxY);\n }\n\n drawMouseRowHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isSelectingColumn } = state;\n if (!isSelectingColumn) {\n super.drawMouseRowHover(context, state);\n }\n }\n\n drawScrim(state: IrisGridRenderState): void {\n const { context, loadingScrimProgress, metrics, theme } = state;\n if (loadingScrimProgress == null) {\n return;\n }\n\n const { width, height, gridY } = metrics;\n const { scrimBlurSize, scrimColor } = theme;\n\n context.save();\n\n // Use global composite so we can change the underlying layer to grayscale\n context.globalCompositeOperation = 'color';\n context.filter = `blur(${scrimBlurSize}px)`;\n if (scrimColor != null) {\n context.fillStyle = scrimColor;\n }\n\n // Clip the path so the top edge is hard edge, bottom edge is soft/blurry\n context.beginPath();\n context.rect(0, gridY, width, height - gridY);\n context.clip();\n\n // Extend the edges beyond the clip area so they're hard edges\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n // add an overlay of the scrim color to darken things a bit\n context.globalCompositeOperation = 'overlay';\n context.filter = `blur(${scrimBlurSize}px) opacity(15%)`;\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n context.restore();\n }\n\n drawColumnHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawColumnHeaders(context, state);\n\n const { theme, metrics, model, reverseType } = state;\n const { columnHeaderHeight } = metrics;\n\n this.drawFilterHeaders(context, state);\n\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const { sort } = model;\n // if there is only one sort bar, it is interior to the header to save space\n if (sort.length === 1) {\n const hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;\n\n let color;\n if (hasReverse) {\n color = theme.headerReverseBarColor;\n } else {\n color = theme.headerSortBarColor;\n }\n this.drawHeaderBar(\n context,\n state,\n color,\n hasReverse ? theme.reverseHeaderBarHeight : theme.sortHeaderBarHeight\n );\n } else if (sort.length > 1) {\n // if there's multiple bars, the sort is interior to header\n // and the reverse claims space in the table\n if (\n // has table reverse\n reverseType !== TableUtils.REVERSE_TYPE.NONE\n ) {\n this.drawHeaderBar(\n context,\n state,\n theme.headerReverseBarColor,\n theme.reverseHeaderBarHeight,\n false\n );\n }\n this.drawHeaderBar(\n context,\n state,\n theme.headerSortBarColor,\n theme.sortHeaderBarHeight\n );\n }\n }\n\n drawHeaderBar(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n color: string | CanvasGradient | CanvasPattern,\n barHeight: number,\n interior = true\n ): void {\n const { theme, metrics, model } = state;\n const { columnHeaderHeight, width } = metrics;\n // Draw casing with 1 pixel above and below the bar,\n // 1px falls on the existing split between grid/headers\n // so don't need to be accounnted for in math elsewhere\n let offset = 0;\n if (!interior) {\n offset = barHeight;\n }\n context.fillStyle = theme.headerBarCasingColor;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 2 + offset,\n width,\n barHeight + 2\n );\n\n context.fillStyle = color;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 1 + offset,\n width,\n barHeight\n );\n }\n\n drawColumnHeadersAtDepth(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n range: BoundedAxisRange,\n boundsProp: { minX: number; maxX: number },\n depth: number\n ): void {\n const { metrics, model, isMenuShown } = state;\n const { columnHeaderMaxDepth } = model;\n const { width } = metrics;\n const bounds = {\n ...boundsProp,\n maxX:\n depth === columnHeaderMaxDepth - 1 && boundsProp.maxX === width\n ? width - (isMenuShown ? 0 : 30) // Account for the menu button\n : boundsProp.maxX,\n };\n super.drawColumnHeadersAtDepth(context, state, range, bounds, depth);\n }\n\n drawColumnHeaderAtIndex(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n index: VisibleIndex,\n bounds: { minX: number; maxX: number }\n ): void {\n super.drawColumnHeaderAtIndex(context, state, index, bounds);\n const { metrics, model, theme } = state;\n const {\n modelColumns,\n allColumnWidths,\n allColumnXs,\n gridX,\n columnHeaderHeight,\n fontWidths,\n } = metrics;\n\n const { headerHorizontalPadding } = theme;\n const columnWidth = getOrThrow(allColumnWidths, index, 0);\n const columnX = getOrThrow(allColumnXs, index) + gridX;\n const modelColumn = modelColumns.get(index);\n\n if (modelColumn == null) {\n return;\n }\n\n const columnName = model.columns[modelColumn]?.name;\n\n if (columnName == null) {\n return;\n }\n\n const sort = TableUtils.getSortForColumn(model.sort, columnName);\n\n if (!sort) {\n return;\n }\n\n const icon = this.getSortIcon(sort);\n if (!icon) {\n return;\n }\n\n const text = model.textForColumnHeader(modelColumn);\n if (text === undefined) {\n return;\n }\n\n const fontWidth = fontWidths.get(context.font) ?? DEFAULT_FONT_WIDTH;\n assertNotNull(fontWidth);\n const textWidth = text.length * fontWidth;\n const textRight = gridX + columnX + textWidth + headerHorizontalPadding;\n let { maxX } = bounds;\n maxX -= headerHorizontalPadding;\n const defaultX =\n gridX + columnX + columnWidth - headerHorizontalPadding - 1;\n\n const x = textRight > maxX ? textRight + 1 : Math.min(maxX, defaultX);\n const yOffset =\n sort.direction === TableUtils.sortDirection.ascending ? -6 : -12;\n const y = columnHeaderHeight * 0.5 + yOffset;\n\n context.save();\n\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n\n context.fillStyle = theme.headerSortBarColor;\n context.translate(x, y);\n context.fill(icon);\n\n context.restore();\n }\n\n drawFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isFilterBarShown, quickFilters, advancedFilters } = state;\n\n if (isFilterBarShown) {\n this.drawExpandedFilterHeaders(context, state);\n } else if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n this.drawCollapsedFilterHeaders(context, state);\n }\n }\n\n drawExpandedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme, quickFilters, advancedFilters } = state;\n const { filterBarHeight } = theme;\n\n if (filterBarHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n modelColumns,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n\n const columnHeaderHeight = gridY - filterBarHeight;\n\n context.save();\n\n context.font = theme.font;\n context.textAlign = 'left';\n\n if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n // fill style if a fiter is set on any column\n context.fillStyle = theme.filterBarExpandedActiveBackgroundColor;\n } else {\n // fill style with no filters set\n context.fillStyle = theme.filterBarExpandedBackgroundColor;\n }\n\n // Draw the background\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarHeight - 1);\n\n // Draw the bottom border\n context.fillStyle = theme.headerBarCasingColor;\n\n context.fillRect(gridX, columnHeaderHeight + filterBarHeight - 1, maxX, 1);\n\n // Draw the filter input boxes\n const y1 = columnHeaderHeight;\n context.strokeStyle = theme.filterBarSeparatorColor;\n context.beginPath();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const modelColumn = getOrThrow(modelColumns, column);\n const columnX = getOrThrow(allColumnXs, column);\n const columnWidth = getOrThrow(allColumnWidths, column);\n if (model.isFilterable(modelColumn) && columnWidth > 0) {\n const x1 = gridX + (columnX ?? 0);\n context.rect(x1 + 0.5, y1 + 0.5, columnWidth, filterBarHeight - 2); // 1 for the border, 1 for the casing\n }\n }\n context.stroke();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = getOrThrow(allColumnWidths, column);\n const columnX = getOrThrow(allColumnXs, column);\n const x = columnX + gridX;\n this.drawExpandedFilterHeader(context, state, column, x, columnWidth);\n }\n\n context.restore();\n }\n\n drawExpandedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const {\n filterBarHeight,\n filterBarExpandedActiveCellBackgroundColor,\n filterBarErrorColor,\n filterBarHorizontalPadding,\n headerColor,\n } = theme;\n const columnHeaderHeight = gridY - filterBarHeight;\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter == null && advancedFilter == null) {\n return;\n }\n\n let text = null;\n if (quickFilter != null) {\n const { text: filterText } = quickFilter;\n text = filterText;\n if (!text) {\n text = TableUtils.getFilterText(quickFilter.filter);\n }\n\n if (text != null) {\n const { fontWidths } = metrics;\n let fontWidth = fontWidths.get(context.font);\n if (fontWidth == null || fontWidth === 0) {\n fontWidth = context.measureText('8').width;\n if (!fontWidth) {\n fontWidth = 10;\n }\n }\n\n const maxLength =\n (columnWidth - filterBarHorizontalPadding * 2) / fontWidth;\n if (maxLength <= 0) {\n text = '';\n } else if (text.length > maxLength) {\n text = `${text.substring(0, maxLength - 1)}…`;\n }\n }\n }\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n if (isFilterValid && filterBarExpandedActiveCellBackgroundColor != null) {\n // draw active filter background inside cell\n context.fillStyle = filterBarExpandedActiveCellBackgroundColor;\n context.fillRect(\n columnX + 1, // +1 left border\n columnHeaderHeight + 1, // +1 top border\n columnWidth - 1, // -1 right border\n filterBarHeight - 3 // -3 top, bottom border and bottom casing\n );\n } else if (filterBarErrorColor != null) {\n // draw error box inside cell\n context.fillStyle = filterBarErrorColor;\n context.lineWidth = 2;\n context.strokeStyle = filterBarErrorColor;\n // Because this is drawn with a strokeRect, we have to add/subtract half the,\n // linewidth from each side to make interior, in addition to accounting for any borders/casings\n const rectLeft = columnX + 2; // 1 for strokeRect, 1 for border\n const rectTop = columnHeaderHeight + 2; // 1 for strokeRect, 1 for border\n const rectWidth = columnWidth - 3; // for 2 border and 1 for strokeRect\n const rectHeight = filterBarHeight - 5; // -2 for strokeRect, -3 for top, bottom border and bottom casing\n context.strokeRect(rectLeft, rectTop, rectWidth, rectHeight);\n }\n\n if (text != null && text !== '') {\n const textX = columnX + filterBarHorizontalPadding;\n const textY = columnHeaderHeight + filterBarHeight * 0.5 + 1; // + 1 for border\n context.fillStyle = headerColor;\n context.fillText(text, textX, textY);\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, theme } = state;\n const { headerSeparatorColor, filterBarCollapsedHeight } = theme;\n\n if (filterBarCollapsedHeight <= 0) {\n return;\n }\n\n const { gridX, gridY, maxX, visibleColumns, allColumnWidths, allColumnXs } =\n metrics;\n const columnHeaderHeight = gridY - filterBarCollapsedHeight;\n\n context.save();\n\n // Draw the background of the collapsed filter bar\n context.fillStyle = headerSeparatorColor;\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarCollapsedHeight);\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = allColumnWidths.get(column);\n const columnX = allColumnXs.get(column);\n if (columnX != null && columnWidth != null) {\n const x = columnX + gridX;\n // draw the collapsed cells\n this.drawCollapsedFilterHeader(context, state, column, x, columnWidth);\n }\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const modelColumn = modelColumns.get(column);\n\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n\n const {\n filterBarCollapsedHeight,\n filterBarActiveColor,\n filterBarActiveBackgroundColor,\n filterBarErrorColor,\n } = theme;\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n\n if (\n filterBarActiveBackgroundColor != null &&\n quickFilter == null &&\n advancedFilter == null\n ) {\n context.fillStyle = filterBarActiveBackgroundColor;\n } else if (filterBarActiveColor != null && isFilterValid) {\n context.fillStyle = filterBarActiveColor;\n } else if (filterBarErrorColor != null) {\n context.fillStyle = filterBarErrorColor;\n }\n\n const x = columnX + 1; // for gap between columns\n const y = gridY - filterBarCollapsedHeight;\n const rectWidth = columnWidth - 1; // for gap between columns\n const rectHeight = filterBarCollapsedHeight - 1; // for casing bottom\n context.fillRect(x, y, rectWidth, rectHeight);\n\n context.restore();\n }\n\n drawRowFooters(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n floatingTopHeight,\n floatingBottomHeight,\n floatingRows,\n rowFooterWidth,\n height,\n horizontalBarHeight,\n verticalBarWidth,\n allRowHeights,\n allRowYs,\n width,\n } = metrics;\n // Only draw the footers on the floating rows\n if (rowFooterWidth <= 0 || floatingRows.length === 0) {\n return;\n }\n\n const {\n cellHorizontalPadding,\n floatingGridRowColor,\n floatingRowBackgroundColors,\n headerColor,\n rowHoverBackgroundColor,\n } = theme;\n\n context.translate(gridX, gridY);\n\n context.beginPath();\n const x = Math.min(maxX, width - rowFooterWidth - verticalBarWidth - gridX);\n context.fillStyle = floatingRowBackgroundColors;\n if (floatingTopHeight > 0) {\n context.rect(x, 0, rowFooterWidth, floatingTopHeight);\n }\n if (floatingBottomHeight > 0) {\n context.rect(\n x,\n height - gridY - horizontalBarHeight - floatingBottomHeight,\n rowFooterWidth,\n floatingBottomHeight\n );\n }\n context.fill();\n\n const mouseRow =\n mouseX != null &&\n mouseY != null &&\n mouseX >= gridX &&\n mouseX <= maxX + rowFooterWidth\n ? GridUtils.getRowAtY(mouseY, metrics)\n : null;\n if (\n rowHoverBackgroundColor != null &&\n mouseRow !== null &&\n floatingRows.includes(mouseRow)\n ) {\n context.fillStyle = rowHoverBackgroundColor;\n const y = allRowYs.get(mouseRow);\n const rowHeight = allRowHeights.get(mouseRow);\n assertNotNull(y);\n assertNotNull(rowHeight);\n context.fillRect(x, y, rowFooterWidth, rowHeight);\n }\n\n context.beginPath();\n if (floatingGridRowColor != null) {\n context.strokeStyle = floatingGridRowColor;\n }\n if (floatingTopHeight > 0) {\n context.moveTo(x + 0.5, 0.5);\n context.lineTo(x + 0.5, floatingTopHeight - 0.5);\n }\n if (floatingBottomHeight > 0) {\n const y = height - gridY - horizontalBarHeight - floatingBottomHeight;\n context.moveTo(x - 0.5, y + 0.5);\n context.lineTo(x - 0.5, y + floatingBottomHeight - 0.5);\n }\n context.stroke();\n\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n\n const textX = x + cellHorizontalPadding;\n for (let i = 0; i < floatingRows.length; i += 1) {\n const row = floatingRows[i];\n const rowHeight = allRowHeights.get(row);\n const rowY = allRowYs.get(row);\n const modelRow = modelRows.get(row);\n if (rowY != null && rowHeight != null && modelRow != null) {\n const textY = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n\n context.translate(-gridX, -gridY);\n }\n\n getExpandButtonPosition(\n {\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n },\n depth: number | null\n ): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n const NULL_POSITION = { left: null, top: null, width: null, height: null };\n if (mouseX == null || mouseY == null || depth == null || !metrics) {\n return NULL_POSITION;\n }\n const { rowHeight, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n assertNotNull(left);\n assertNotNull(rowHeight);\n assertNotNull(top);\n const { cellHorizontalPadding } = theme;\n\n const width = EXPAND_ICON_SIZE + 2 * cellHorizontalPadding;\n\n const buttonLeft = Math.max(left + EXPAND_ICON_SIZE * depth, metrics.gridX);\n const buttonTop = metrics.gridY + top;\n\n return {\n left: buttonLeft,\n top: buttonTop,\n width,\n height: rowHeight,\n };\n }\n}\n\nexport default IrisGridRenderer;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IrisGridRenderer.js","names":["DEFAULT_FONT_WIDTH","GridRenderer","GridUtils","TableUtils","assertNotNull","getOrThrow","IrisGridTextCellRenderer","IrisGridDataBarCellRenderer","getIcon","ICON_NAMES","Object","freeze","SORT_UP","SORT_DOWN","CARET_DOWN","CARET_RIGHT","CELL_OVERFLOW","EXPAND_ICON_SIZE","IrisGridRenderer","constructor","arguments","_defineProperty","isFilterValid","advancedFilter","quickFilter","isAdvancedFilterValid","filter","isQuickFilterValid","getSortIcon","sort","direction","sortDirection","ascending","descending","drawCanvas","state","drawScrim","drawGrid","context","drawCellOverflowButton","drawGridLines","drawGroupedColumnLine","drawPendingRowLine","drawCellContent","column","row","metrics","model","modelColumns","modelRows","modelColumn","get","modelRow","undefined","renderType","renderTypeForCell","cellRenderer","getCellRenderer","getCellOverflowButtonPosition","_ref","mouseX","mouseY","theme","textCellRenderer","shouldRenderOverflowButton","left","buttonLeft","top","buttonTop","width","buttonWidth","height","buttonHeight","cellHorizontalPadding","overflowButtonColor","overflowButtonHoverColor","save","fillStyle","icon","translate","fill","restore","groupedColumns","maxY","allColumnWidths","allColumnXs","length","groupedColumnDividerColor","lastVisibleGroupColumnIndex","columnX","columnWidth","x","strokeStyle","lineWidth","beginPath","moveTo","lineTo","stroke","allRowYs","maxX","pendingRowCount","firstPendingRow","rowCount","floatingBottomRowCount","y","setLineDash","pendingTextColor","drawMouseColumnHover","hoverSelectColumn","linkerColumnHoverBackgroundColor","fillRect","drawMouseRowHover","isSelectingColumn","loadingScrimProgress","gridY","scrimBlurSize","scrimColor","globalCompositeOperation","concat","rect","clip","drawColumnHeaders","reverseType","columnHeaderHeight","drawFilterHeaders","hasReverse","REVERSE_TYPE","NONE","color","headerReverseBarColor","headerSortBarColor","drawHeaderBar","reverseHeaderBarHeight","sortHeaderBarHeight","barHeight","interior","offset","headerBarCasingColor","columnHeaderMaxDepth","drawColumnHeadersAtDepth","range","boundsProp","depth","isMenuShown","bounds","_objectSpread","drawColumnHeaderAtIndex","index","_model$columns$modelC","_fontWidths$get","gridX","fontWidths","headerHorizontalPadding","columnName","columns","name","getSortForColumn","text","textForColumnHeader","fontWidth","font","textWidth","textRight","defaultX","Math","min","yOffset","isFilterBarShown","quickFilters","advancedFilters","drawExpandedFilterHeaders","size","drawCollapsedFilterHeaders","filterBarHeight","visibleColumns","textAlign","filterBarExpandedActiveBackgroundColor","filterBarExpandedBackgroundColor","y1","filterBarSeparatorColor","i","isFilterable","x1","drawExpandedFilterHeader","filterBarExpandedActiveCellBackgroundColor","filterBarErrorColor","filterBarHorizontalPadding","headerColor","filterText","getFilterText","measureText","maxLength","substring","rectLeft","rectTop","rectWidth","rectHeight","strokeRect","textX","textY","fillText","headerSeparatorColor","filterBarCollapsedHeight","drawCollapsedFilterHeader","filterBarActiveColor","filterBarActiveBackgroundColor","drawRowFooters","floatingTopHeight","floatingBottomHeight","floatingRows","rowFooterWidth","horizontalBarHeight","verticalBarWidth","allRowHeights","floatingGridRowColor","floatingRowBackgroundColors","rowHoverBackgroundColor","mouseRow","getRowAtY","includes","rowHeight","rowY","textForRowFooter","getExpandButtonPosition","_ref2","NULL_POSITION","getCellInfoFromXY","max"],"sources":["../src/IrisGridRenderer.ts"],"sourcesContent":["/* eslint react/destructuring-assignment: \"off\" */\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-param-reassign: \"off\" */\nimport {\n BoundedAxisRange,\n Coordinate,\n DEFAULT_FONT_WIDTH,\n GridMetrics,\n GridRangeIndex,\n GridRenderer,\n GridRenderState,\n GridThemeType,\n GridUtils,\n VisibleIndex,\n} from '@deephaven/grid';\nimport type { Sort } from '@deephaven/jsapi-types';\nimport { TableUtils, ReverseType } from '@deephaven/jsapi-utils';\nimport { assertNotNull, getOrThrow } from '@deephaven/utils';\nimport {\n ReadonlyAdvancedFilterMap,\n ReadonlyQuickFilterMap,\n AdvancedFilter,\n QuickFilter,\n} from './CommonTypes';\nimport { IrisGridThemeType } from './IrisGridTheme';\nimport IrisGridModel from './IrisGridModel';\nimport IrisGridTextCellRenderer from './IrisGridTextCellRenderer';\nimport IrisGridDataBarCellRenderer from './IrisGridDataBarCellRenderer';\nimport { getIcon } from './IrisGridIcons';\n\nconst ICON_NAMES = Object.freeze({\n SORT_UP: 'sortUp',\n SORT_DOWN: 'sortDown',\n CARET_DOWN: 'caretDown',\n CARET_RIGHT: 'caretRight',\n CELL_OVERFLOW: 'cellOverflow',\n});\n\nconst EXPAND_ICON_SIZE = 10;\n\nexport type IrisGridRenderState = GridRenderState & {\n model: IrisGridModel;\n theme: IrisGridThemeType;\n hoverSelectColumn: GridRangeIndex;\n isSelectingColumn: boolean;\n loadingScrimProgress: number;\n reverseType: ReverseType;\n isFilterBarShown: boolean;\n advancedFilters: ReadonlyAdvancedFilterMap;\n quickFilters: ReadonlyQuickFilterMap;\n isMenuShown: boolean;\n};\n/**\n * Handles rendering some of the Iris specific features, such as sorting icons, sort bar display\n * */\nexport class IrisGridRenderer extends GridRenderer {\n static isFilterValid(\n advancedFilter: AdvancedFilter | undefined | null,\n quickFilter: QuickFilter | undefined | null\n ): boolean {\n const isAdvancedFilterValid =\n advancedFilter == null || advancedFilter.filter != null;\n const isQuickFilterValid =\n quickFilter == null || quickFilter.filter != null;\n return isAdvancedFilterValid && isQuickFilterValid;\n }\n\n protected textCellRenderer = new IrisGridTextCellRenderer();\n\n protected dataBarCellRenderer = new IrisGridDataBarCellRenderer();\n\n getSortIcon(sort: Sort | null): Path2D | null {\n if (!sort) {\n return null;\n }\n if (sort.direction === TableUtils.sortDirection.ascending) {\n return getIcon(ICON_NAMES.SORT_UP);\n }\n if (sort.direction === TableUtils.sortDirection.descending) {\n return getIcon(ICON_NAMES.SORT_DOWN);\n }\n return null;\n }\n\n drawCanvas(state: IrisGridRenderState): void {\n super.drawCanvas(state);\n\n this.drawScrim(state);\n }\n\n drawGrid(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGrid(context, state);\n this.drawCellOverflowButton(state);\n }\n\n drawGridLines(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGridLines(context, state);\n\n this.drawGroupedColumnLine(context, state);\n\n this.drawPendingRowLine(context, state);\n }\n\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model } = state;\n const { modelColumns, modelRows } = metrics;\n const modelColumn = modelColumns.get(column);\n const modelRow = getOrThrow(modelRows, row);\n if (modelColumn === undefined) {\n return;\n }\n\n const renderType = model.renderTypeForCell(modelColumn, modelRow);\n const cellRenderer = this.getCellRenderer(renderType);\n cellRenderer.drawCellContent(context, state, column, row);\n }\n\n getCellOverflowButtonPosition({\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n }): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n return this.textCellRenderer.getCellOverflowButtonPosition(\n mouseX,\n mouseY,\n metrics,\n theme\n );\n }\n\n shouldRenderOverflowButton(state: IrisGridRenderState): boolean {\n return this.textCellRenderer.shouldRenderOverflowButton(state);\n }\n\n drawCellOverflowButton(state: IrisGridRenderState): void {\n const { context, mouseX, mouseY, theme } = state;\n if (mouseX == null || mouseY == null) return;\n\n if (!this.shouldRenderOverflowButton(state)) {\n return;\n }\n\n const {\n left: buttonLeft,\n top: buttonTop,\n width: buttonWidth,\n height: buttonHeight,\n } = this.getCellOverflowButtonPosition(state);\n\n const {\n cellHorizontalPadding,\n overflowButtonColor,\n overflowButtonHoverColor,\n } = theme;\n\n context.save();\n if (\n overflowButtonHoverColor != null &&\n buttonLeft != null &&\n buttonWidth != null &&\n buttonTop != null &&\n buttonHeight != null &&\n mouseX >= buttonLeft &&\n mouseX <= buttonLeft + buttonWidth &&\n mouseY >= buttonTop &&\n mouseY <= buttonTop + buttonHeight\n ) {\n context.fillStyle = overflowButtonHoverColor;\n } else if (overflowButtonColor != null) {\n context.fillStyle = overflowButtonColor;\n }\n const icon = getIcon(ICON_NAMES.CELL_OVERFLOW);\n if (buttonLeft != null && buttonTop != null) {\n context.translate(buttonLeft + cellHorizontalPadding, buttonTop + 2);\n }\n context.fill(icon);\n\n context.restore();\n }\n\n drawGroupedColumnLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { groupedColumns } = model;\n const { maxY, allColumnWidths, allColumnXs } = metrics;\n if (\n groupedColumns.length === 0 ||\n theme.groupedColumnDividerColor == null\n ) {\n return;\n }\n\n // This assumes that the engine puts the grouped columns at the start of the\n // model, so model and visible index match for grouped columns. If we ever\n // add freeze support for tree tables or allow moving the grouped columns,\n // this assumption may no longer hold true. If such a change occurs, we'll\n // need to revisit this since a single vertical divider may no longer make\n // sense.\n const lastVisibleGroupColumnIndex = groupedColumns.length - 1;\n\n const columnX = allColumnXs.get(lastVisibleGroupColumnIndex);\n const columnWidth = allColumnWidths.get(lastVisibleGroupColumnIndex);\n if (columnX == null || columnWidth == null) {\n return;\n }\n\n const x = columnX + columnWidth + 0.5;\n\n context.strokeStyle = theme.groupedColumnDividerColor;\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n context.stroke();\n }\n\n drawPendingRowLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { allRowYs, maxX } = metrics;\n const { pendingRowCount } = model;\n if (pendingRowCount <= 0) {\n return;\n }\n\n const firstPendingRow =\n model.rowCount - model.pendingRowCount - model.floatingBottomRowCount;\n let y = allRowYs.get(firstPendingRow);\n if (y == null) {\n return;\n }\n\n y -= 0.5;\n context.save();\n context.setLineDash([4, 2]);\n context.strokeStyle = theme.pendingTextColor;\n\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n context.stroke();\n context.restore();\n }\n\n drawMouseColumnHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { theme, metrics, hoverSelectColumn } = state;\n if (\n hoverSelectColumn == null ||\n theme.linkerColumnHoverBackgroundColor == null\n ) {\n return;\n }\n\n const { allColumnWidths, allColumnXs, maxY } = metrics;\n\n const x = getOrThrow(allColumnXs, hoverSelectColumn);\n const columnWidth = getOrThrow(allColumnWidths, hoverSelectColumn);\n\n context.fillStyle = theme.linkerColumnHoverBackgroundColor;\n context.fillRect(x, 0, columnWidth, maxY);\n }\n\n drawMouseRowHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isSelectingColumn } = state;\n if (!isSelectingColumn) {\n super.drawMouseRowHover(context, state);\n }\n }\n\n drawScrim(state: IrisGridRenderState): void {\n const { context, loadingScrimProgress, metrics, theme } = state;\n if (loadingScrimProgress == null) {\n return;\n }\n\n const { width, height, gridY } = metrics;\n const { scrimBlurSize, scrimColor } = theme;\n\n context.save();\n\n // Use global composite so we can change the underlying layer to grayscale\n context.globalCompositeOperation = 'color';\n context.filter = `blur(${scrimBlurSize}px)`;\n if (scrimColor != null) {\n context.fillStyle = scrimColor;\n }\n\n // Clip the path so the top edge is hard edge, bottom edge is soft/blurry\n context.beginPath();\n context.rect(0, gridY, width, height - gridY);\n context.clip();\n\n // Extend the edges beyond the clip area so they're hard edges\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n // add an overlay of the scrim color to darken things a bit\n context.globalCompositeOperation = 'overlay';\n context.filter = `blur(${scrimBlurSize}px) opacity(15%)`;\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n context.restore();\n }\n\n drawColumnHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawColumnHeaders(context, state);\n\n const { theme, metrics, model, reverseType } = state;\n const { columnHeaderHeight } = metrics;\n\n this.drawFilterHeaders(context, state);\n\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const { sort } = model;\n // if there is only one sort bar, it is interior to the header to save space\n if (sort.length === 1) {\n const hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;\n\n let color;\n if (hasReverse) {\n color = theme.headerReverseBarColor;\n } else {\n color = theme.headerSortBarColor;\n }\n this.drawHeaderBar(\n context,\n state,\n color,\n hasReverse ? theme.reverseHeaderBarHeight : theme.sortHeaderBarHeight\n );\n } else if (sort.length > 1) {\n // if there's multiple bars, the sort is interior to header\n // and the reverse claims space in the table\n if (\n // has table reverse\n reverseType !== TableUtils.REVERSE_TYPE.NONE\n ) {\n this.drawHeaderBar(\n context,\n state,\n theme.headerReverseBarColor,\n theme.reverseHeaderBarHeight,\n false\n );\n }\n this.drawHeaderBar(\n context,\n state,\n theme.headerSortBarColor,\n theme.sortHeaderBarHeight\n );\n }\n }\n\n drawHeaderBar(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n color: string | CanvasGradient | CanvasPattern,\n barHeight: number,\n interior = true\n ): void {\n const { theme, metrics, model } = state;\n const { columnHeaderHeight, width } = metrics;\n // Draw casing with 1 pixel above and below the bar,\n // 1px falls on the existing split between grid/headers\n // so don't need to be accounnted for in math elsewhere\n let offset = 0;\n if (!interior) {\n offset = barHeight;\n }\n context.fillStyle = theme.headerBarCasingColor;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 2 + offset,\n width,\n barHeight + 2\n );\n\n context.fillStyle = color;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 1 + offset,\n width,\n barHeight\n );\n }\n\n drawColumnHeadersAtDepth(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n range: BoundedAxisRange,\n boundsProp: { minX: number; maxX: number },\n depth: number\n ): void {\n const { metrics, model, isMenuShown } = state;\n const { columnHeaderMaxDepth } = model;\n const { width } = metrics;\n const bounds = {\n ...boundsProp,\n maxX:\n depth === columnHeaderMaxDepth - 1 && boundsProp.maxX === width\n ? width - (isMenuShown ? 0 : 30) // Account for the menu button\n : boundsProp.maxX,\n };\n super.drawColumnHeadersAtDepth(context, state, range, bounds, depth);\n }\n\n drawColumnHeaderAtIndex(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n index: VisibleIndex,\n bounds: { minX: number; maxX: number }\n ): void {\n super.drawColumnHeaderAtIndex(context, state, index, bounds);\n const { metrics, model, theme } = state;\n const {\n modelColumns,\n allColumnWidths,\n allColumnXs,\n gridX,\n columnHeaderHeight,\n fontWidths,\n } = metrics;\n\n const { headerHorizontalPadding } = theme;\n const columnWidth = getOrThrow(allColumnWidths, index, 0);\n const columnX = getOrThrow(allColumnXs, index) + gridX;\n const modelColumn = modelColumns.get(index);\n\n if (modelColumn == null) {\n return;\n }\n\n const columnName = model.columns[modelColumn]?.name;\n\n if (columnName == null) {\n return;\n }\n\n const sort = TableUtils.getSortForColumn(model.sort, columnName);\n\n if (!sort) {\n return;\n }\n\n const icon = this.getSortIcon(sort);\n if (!icon) {\n return;\n }\n\n const text = model.textForColumnHeader(modelColumn);\n if (text === undefined) {\n return;\n }\n\n const fontWidth = fontWidths.get(context.font) ?? DEFAULT_FONT_WIDTH;\n assertNotNull(fontWidth);\n const textWidth = text.length * fontWidth;\n const textRight = gridX + columnX + textWidth + headerHorizontalPadding;\n let { maxX } = bounds;\n maxX -= headerHorizontalPadding;\n const defaultX =\n gridX + columnX + columnWidth - headerHorizontalPadding - 1;\n\n const x = textRight > maxX ? textRight + 1 : Math.min(maxX, defaultX);\n const yOffset =\n sort.direction === TableUtils.sortDirection.ascending ? -6 : -12;\n const y = columnHeaderHeight * 0.5 + yOffset;\n\n context.save();\n\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n\n context.fillStyle = theme.headerSortBarColor;\n context.translate(x, y);\n context.fill(icon);\n\n context.restore();\n }\n\n drawFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isFilterBarShown, quickFilters, advancedFilters } = state;\n\n if (isFilterBarShown) {\n this.drawExpandedFilterHeaders(context, state);\n } else if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n this.drawCollapsedFilterHeaders(context, state);\n }\n }\n\n drawExpandedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme, quickFilters, advancedFilters } = state;\n const { filterBarHeight } = theme;\n\n if (filterBarHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n modelColumns,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n\n const columnHeaderHeight = gridY - filterBarHeight;\n\n context.save();\n\n context.font = theme.font;\n context.textAlign = 'left';\n\n if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n // fill style if a fiter is set on any column\n context.fillStyle = theme.filterBarExpandedActiveBackgroundColor;\n } else {\n // fill style with no filters set\n context.fillStyle = theme.filterBarExpandedBackgroundColor;\n }\n\n // Draw the background\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarHeight - 1);\n\n // Draw the bottom border\n context.fillStyle = theme.headerBarCasingColor;\n\n context.fillRect(gridX, columnHeaderHeight + filterBarHeight - 1, maxX, 1);\n\n // Draw the filter input boxes\n const y1 = columnHeaderHeight;\n context.strokeStyle = theme.filterBarSeparatorColor;\n context.beginPath();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const modelColumn = getOrThrow(modelColumns, column);\n const columnX = getOrThrow(allColumnXs, column);\n const columnWidth = getOrThrow(allColumnWidths, column);\n if (model.isFilterable(modelColumn) && columnWidth > 0) {\n const x1 = gridX + (columnX ?? 0);\n context.rect(x1 + 0.5, y1 + 0.5, columnWidth, filterBarHeight - 2); // 1 for the border, 1 for the casing\n }\n }\n context.stroke();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = getOrThrow(allColumnWidths, column);\n const columnX = getOrThrow(allColumnXs, column);\n const x = columnX + gridX;\n this.drawExpandedFilterHeader(context, state, column, x, columnWidth);\n }\n\n context.restore();\n }\n\n drawExpandedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const {\n filterBarHeight,\n filterBarExpandedActiveCellBackgroundColor,\n filterBarErrorColor,\n filterBarHorizontalPadding,\n headerColor,\n } = theme;\n const columnHeaderHeight = gridY - filterBarHeight;\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter == null && advancedFilter == null) {\n return;\n }\n\n let text = null;\n if (quickFilter != null) {\n const { text: filterText } = quickFilter;\n text = filterText;\n if (!text) {\n text = TableUtils.getFilterText(quickFilter.filter);\n }\n\n if (text != null) {\n const { fontWidths } = metrics;\n let fontWidth = fontWidths.get(context.font);\n if (fontWidth == null || fontWidth === 0) {\n fontWidth = context.measureText('8').width;\n if (!fontWidth) {\n fontWidth = 10;\n }\n }\n\n const maxLength =\n (columnWidth - filterBarHorizontalPadding * 2) / fontWidth;\n if (maxLength <= 0) {\n text = '';\n } else if (text.length > maxLength) {\n text = `${text.substring(0, maxLength - 1)}…`;\n }\n }\n }\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n if (isFilterValid && filterBarExpandedActiveCellBackgroundColor != null) {\n // draw active filter background inside cell\n context.fillStyle = filterBarExpandedActiveCellBackgroundColor;\n context.fillRect(\n columnX + 1, // +1 left border\n columnHeaderHeight + 1, // +1 top border\n columnWidth - 1, // -1 right border\n filterBarHeight - 3 // -3 top, bottom border and bottom casing\n );\n } else if (filterBarErrorColor != null) {\n // draw error box inside cell\n context.fillStyle = filterBarErrorColor;\n context.lineWidth = 2;\n context.strokeStyle = filterBarErrorColor;\n // Because this is drawn with a strokeRect, we have to add/subtract half the,\n // linewidth from each side to make interior, in addition to accounting for any borders/casings\n const rectLeft = columnX + 2; // 1 for strokeRect, 1 for border\n const rectTop = columnHeaderHeight + 2; // 1 for strokeRect, 1 for border\n const rectWidth = columnWidth - 3; // for 2 border and 1 for strokeRect\n const rectHeight = filterBarHeight - 5; // -2 for strokeRect, -3 for top, bottom border and bottom casing\n context.strokeRect(rectLeft, rectTop, rectWidth, rectHeight);\n }\n\n if (text != null && text !== '') {\n const textX = columnX + filterBarHorizontalPadding;\n const textY = columnHeaderHeight + filterBarHeight * 0.5 + 1; // + 1 for border\n context.fillStyle = headerColor;\n context.fillText(text, textX, textY);\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, theme } = state;\n const { headerSeparatorColor, filterBarCollapsedHeight } = theme;\n\n if (filterBarCollapsedHeight <= 0) {\n return;\n }\n\n const { gridX, gridY, maxX, visibleColumns, allColumnWidths, allColumnXs } =\n metrics;\n const columnHeaderHeight = gridY - filterBarCollapsedHeight;\n\n context.save();\n\n // Draw the background of the collapsed filter bar\n context.fillStyle = headerSeparatorColor;\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarCollapsedHeight);\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = allColumnWidths.get(column);\n const columnX = allColumnXs.get(column);\n if (columnX != null && columnWidth != null) {\n const x = columnX + gridX;\n // draw the collapsed cells\n this.drawCollapsedFilterHeader(context, state, column, x, columnWidth);\n }\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const modelColumn = modelColumns.get(column);\n\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n\n const {\n filterBarCollapsedHeight,\n filterBarActiveColor,\n filterBarActiveBackgroundColor,\n filterBarErrorColor,\n } = theme;\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n\n if (\n filterBarActiveBackgroundColor != null &&\n quickFilter == null &&\n advancedFilter == null\n ) {\n context.fillStyle = filterBarActiveBackgroundColor;\n } else if (filterBarActiveColor != null && isFilterValid) {\n context.fillStyle = filterBarActiveColor;\n } else if (filterBarErrorColor != null) {\n context.fillStyle = filterBarErrorColor;\n }\n\n const x = columnX + 1; // for gap between columns\n const y = gridY - filterBarCollapsedHeight;\n const rectWidth = columnWidth - 1; // for gap between columns\n const rectHeight = filterBarCollapsedHeight - 1; // for casing bottom\n context.fillRect(x, y, rectWidth, rectHeight);\n\n context.restore();\n }\n\n drawRowFooters(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n floatingTopHeight,\n floatingBottomHeight,\n floatingRows,\n rowFooterWidth,\n height,\n horizontalBarHeight,\n verticalBarWidth,\n allRowHeights,\n allRowYs,\n width,\n } = metrics;\n // Only draw the footers on the floating rows\n if (rowFooterWidth <= 0 || floatingRows.length === 0) {\n return;\n }\n\n const {\n cellHorizontalPadding,\n floatingGridRowColor,\n floatingRowBackgroundColors,\n headerColor,\n rowHoverBackgroundColor,\n } = theme;\n\n context.translate(gridX, gridY);\n\n context.beginPath();\n const x = Math.min(maxX, width - rowFooterWidth - verticalBarWidth - gridX);\n context.fillStyle = floatingRowBackgroundColors;\n if (floatingTopHeight > 0) {\n context.rect(x, 0, rowFooterWidth, floatingTopHeight);\n }\n if (floatingBottomHeight > 0) {\n context.rect(\n x,\n height - gridY - horizontalBarHeight - floatingBottomHeight,\n rowFooterWidth,\n floatingBottomHeight\n );\n }\n context.fill();\n\n const mouseRow =\n mouseX != null &&\n mouseY != null &&\n mouseX >= gridX &&\n mouseX <= maxX + rowFooterWidth\n ? GridUtils.getRowAtY(mouseY, metrics)\n : null;\n if (\n rowHoverBackgroundColor != null &&\n mouseRow !== null &&\n floatingRows.includes(mouseRow)\n ) {\n context.fillStyle = rowHoverBackgroundColor;\n const y = allRowYs.get(mouseRow);\n const rowHeight = allRowHeights.get(mouseRow);\n assertNotNull(y);\n assertNotNull(rowHeight);\n context.fillRect(x, y, rowFooterWidth, rowHeight);\n }\n\n context.beginPath();\n if (floatingGridRowColor != null) {\n context.strokeStyle = floatingGridRowColor;\n }\n if (floatingTopHeight > 0) {\n context.moveTo(x + 0.5, 0.5);\n context.lineTo(x + 0.5, floatingTopHeight - 0.5);\n }\n if (floatingBottomHeight > 0) {\n const y = height - gridY - horizontalBarHeight - floatingBottomHeight;\n context.moveTo(x - 0.5, y + 0.5);\n context.lineTo(x - 0.5, y + floatingBottomHeight - 0.5);\n }\n context.stroke();\n\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n\n const textX = x + cellHorizontalPadding;\n for (let i = 0; i < floatingRows.length; i += 1) {\n const row = floatingRows[i];\n const rowHeight = allRowHeights.get(row);\n const rowY = allRowYs.get(row);\n const modelRow = modelRows.get(row);\n if (rowY != null && rowHeight != null && modelRow != null) {\n const textY = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n\n context.translate(-gridX, -gridY);\n }\n\n getExpandButtonPosition(\n {\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n },\n depth: number | null\n ): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n const NULL_POSITION = { left: null, top: null, width: null, height: null };\n if (mouseX == null || mouseY == null || depth == null || !metrics) {\n return NULL_POSITION;\n }\n const { rowHeight, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n assertNotNull(left);\n assertNotNull(rowHeight);\n assertNotNull(top);\n const { cellHorizontalPadding } = theme;\n\n const width = EXPAND_ICON_SIZE + 2 * cellHorizontalPadding;\n\n const buttonLeft = Math.max(left + EXPAND_ICON_SIZE * depth, metrics.gridX);\n const buttonTop = metrics.gridY + top;\n\n return {\n left: buttonLeft,\n top: buttonTop,\n width,\n height: rowHeight,\n };\n }\n}\n\nexport default IrisGridRenderer;\n"],"mappings":"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"}
|