@deephaven/iris-grid 0.22.3-beta.18 → 0.22.3-beta.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/dist/AdvancedFilterCreator.js +7 -65
  2. package/dist/AdvancedFilterCreator.js.map +1 -1
  3. package/dist/AdvancedFilterCreatorFilterItem.js +0 -23
  4. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.js +0 -52
  6. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValueList.js +2 -42
  8. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  9. package/dist/ColumnHeaderGroup.js +0 -11
  10. package/dist/ColumnHeaderGroup.js.map +1 -1
  11. package/dist/ColumnStatistics.js +1 -20
  12. package/dist/ColumnStatistics.js.map +1 -1
  13. package/dist/CrossColumnSearch.js +2 -23
  14. package/dist/CrossColumnSearch.js.map +1 -1
  15. package/dist/FilterInputField.js +2 -36
  16. package/dist/FilterInputField.js.map +1 -1
  17. package/dist/GotoRow.d.ts +1 -1
  18. package/dist/GotoRow.d.ts.map +1 -1
  19. package/dist/GotoRow.js +2 -7
  20. package/dist/GotoRow.js.map +1 -1
  21. package/dist/IrisGrid.d.ts +11 -5
  22. package/dist/IrisGrid.d.ts.map +1 -1
  23. package/dist/IrisGrid.js +77 -519
  24. package/dist/IrisGrid.js.map +1 -1
  25. package/dist/IrisGridBottomBar.d.ts +1 -1
  26. package/dist/IrisGridBottomBar.d.ts.map +1 -1
  27. package/dist/IrisGridBottomBar.js +2 -2
  28. package/dist/IrisGridBottomBar.js.map +1 -1
  29. package/dist/IrisGridCellOverflowModal.js +6 -21
  30. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  31. package/dist/IrisGridCopyHandler.js +3 -50
  32. package/dist/IrisGridCopyHandler.js.map +1 -1
  33. package/dist/IrisGridMetricCalculator.js +2 -12
  34. package/dist/IrisGridMetricCalculator.js.map +1 -1
  35. package/dist/IrisGridModel.js +32 -58
  36. package/dist/IrisGridModel.js.map +1 -1
  37. package/dist/IrisGridModelFactory.js +0 -7
  38. package/dist/IrisGridModelFactory.js.map +1 -1
  39. package/dist/IrisGridModelUpdater.js +0 -4
  40. package/dist/IrisGridModelUpdater.js.map +1 -1
  41. package/dist/IrisGridPartitionSelector.js +0 -23
  42. package/dist/IrisGridPartitionSelector.js.map +1 -1
  43. package/dist/IrisGridProxyModel.js +9 -153
  44. package/dist/IrisGridProxyModel.js.map +1 -1
  45. package/dist/IrisGridRenderer.js +41 -183
  46. package/dist/IrisGridRenderer.js.map +1 -1
  47. package/dist/IrisGridShortcuts.js.map +1 -1
  48. package/dist/IrisGridTableModel.js +7 -86
  49. package/dist/IrisGridTableModel.js.map +1 -1
  50. package/dist/IrisGridTableModelTemplate.js +70 -461
  51. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  52. package/dist/IrisGridTestUtils.js +0 -23
  53. package/dist/IrisGridTestUtils.js.map +1 -1
  54. package/dist/IrisGridTheme.js.map +1 -1
  55. package/dist/IrisGridTreeTableModel.js +3 -42
  56. package/dist/IrisGridTreeTableModel.js.map +1 -1
  57. package/dist/IrisGridUtils.d.ts +8 -2
  58. package/dist/IrisGridUtils.d.ts.map +1 -1
  59. package/dist/IrisGridUtils.js +97 -195
  60. package/dist/IrisGridUtils.js.map +1 -1
  61. package/dist/MissingKeyError.js +0 -7
  62. package/dist/MissingKeyError.js.map +1 -1
  63. package/dist/PartitionSelectorSearch.js +2 -48
  64. package/dist/PartitionSelectorSearch.js.map +1 -1
  65. package/dist/PendingDataBottomBar.d.ts +1 -1
  66. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  67. package/dist/PendingDataBottomBar.js +2 -7
  68. package/dist/PendingDataBottomBar.js.map +1 -1
  69. package/dist/TableViewportUpdater.js +3 -29
  70. package/dist/TableViewportUpdater.js.map +1 -1
  71. package/dist/ToastBottomBar.d.ts +1 -1
  72. package/dist/ToastBottomBar.d.ts.map +1 -1
  73. package/dist/ToastBottomBar.js +2 -4
  74. package/dist/ToastBottomBar.js.map +1 -1
  75. package/dist/TreeTableViewportUpdater.js +0 -21
  76. package/dist/TreeTableViewportUpdater.js.map +1 -1
  77. package/dist/format-context-menus/CustomFormatAction.js +4 -25
  78. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  79. package/dist/format-context-menus/DateTimeFormatContextMenu.js +0 -7
  80. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
  81. package/dist/format-context-menus/DecimalFormatContextMenu.js +0 -9
  82. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
  83. package/dist/format-context-menus/FormatContextMenuUtils.js +3 -9
  84. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
  85. package/dist/format-context-menus/IntegerFormatContextMenu.js +0 -8
  86. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
  87. package/dist/format-context-menus/index.js.map +1 -1
  88. package/dist/index.d.ts +3 -3
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +3 -3
  91. package/dist/index.js.map +1 -1
  92. package/dist/key-handlers/ClearFilterKeyHandler.js +0 -8
  93. package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
  94. package/dist/key-handlers/CopyKeyHandler.js +1 -10
  95. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  96. package/dist/key-handlers/ReverseKeyHandler.js +0 -11
  97. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  98. package/dist/key-handlers/index.js.map +1 -1
  99. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +2 -32
  100. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  101. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +4 -34
  102. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  103. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +0 -20
  104. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  105. package/dist/mousehandlers/IrisGridContextMenuHandler.js +15 -105
  106. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  107. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +0 -9
  108. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  109. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +0 -17
  110. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  111. package/dist/mousehandlers/IrisGridSortMouseHandler.js +2 -15
  112. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  113. package/dist/mousehandlers/PendingMouseHandler.js +0 -6
  114. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  115. package/dist/mousehandlers/index.js.map +1 -1
  116. package/dist/sidebar/AdvancedSettings.js.map +1 -1
  117. package/dist/sidebar/AdvancedSettingsMenu.d.ts +4 -4
  118. package/dist/sidebar/AdvancedSettingsMenu.d.ts.map +1 -1
  119. package/dist/sidebar/AdvancedSettingsMenu.js +2 -6
  120. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  121. package/dist/sidebar/AdvancedSettingsType.js +0 -2
  122. package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
  123. package/dist/sidebar/ChartBuilder.js +2 -46
  124. package/dist/sidebar/ChartBuilder.js.map +1 -1
  125. package/dist/sidebar/CustomColumnBuilder.js +6 -58
  126. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  127. package/dist/sidebar/CustomColumnInput.js +4 -15
  128. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  129. package/dist/sidebar/InputEditor.js +5 -36
  130. package/dist/sidebar/InputEditor.js.map +1 -1
  131. package/dist/sidebar/OptionType.js +0 -2
  132. package/dist/sidebar/OptionType.js.map +1 -1
  133. package/dist/sidebar/RollupRows.js +9 -65
  134. package/dist/sidebar/RollupRows.js.map +1 -1
  135. package/dist/sidebar/SelectDistinctBuilder.js +0 -13
  136. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  137. package/dist/sidebar/TableCsvExporter.js +0 -52
  138. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  139. package/dist/sidebar/TableSaver.js +10 -123
  140. package/dist/sidebar/TableSaver.js.map +1 -1
  141. package/dist/sidebar/VisibilityOrderingBuilder.js +37 -116
  142. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  143. package/dist/sidebar/aggregations/AggregationEdit.d.ts +1 -1
  144. package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
  145. package/dist/sidebar/aggregations/AggregationEdit.js +2 -14
  146. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  147. package/dist/sidebar/aggregations/AggregationOperation.js +0 -2
  148. package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
  149. package/dist/sidebar/aggregations/AggregationUtils.js +2 -5
  150. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  151. package/dist/sidebar/aggregations/Aggregations.d.ts +1 -1
  152. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  153. package/dist/sidebar/aggregations/Aggregations.js +2 -12
  154. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  155. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +1 -1
  156. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
  157. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +2 -16
  158. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  159. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +1 -1
  160. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  161. package/dist/sidebar/conditional-formatting/ConditionEditor.js +2 -35
  162. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  163. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts +1 -1
  164. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
  165. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +2 -12
  166. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  167. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +0 -3
  168. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
  169. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +1 -1
  170. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  171. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +16 -26
  172. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  173. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +9 -172
  174. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  175. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts +1 -1
  176. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  177. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +2 -16
  178. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  179. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts +1 -1
  180. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts.map +1 -1
  181. package/dist/sidebar/conditional-formatting/StyleEditor.js +2 -12
  182. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  183. package/dist/sidebar/icons/BarIcon.js +0 -3
  184. package/dist/sidebar/icons/BarIcon.js.map +1 -1
  185. package/dist/sidebar/icons/FormatColumnWhereIcon.js +2 -5
  186. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
  187. package/dist/sidebar/icons/FormatRowWhereIcon.js +2 -5
  188. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
  189. package/dist/sidebar/icons/HistogramIcon.js +0 -3
  190. package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
  191. package/dist/sidebar/icons/LineIcon.js +0 -3
  192. package/dist/sidebar/icons/LineIcon.js.map +1 -1
  193. package/dist/sidebar/icons/PieIcon.js +0 -3
  194. package/dist/sidebar/icons/PieIcon.js.map +1 -1
  195. package/dist/sidebar/icons/ScatterIcon.js +0 -3
  196. package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
  197. package/dist/sidebar/icons/index.js.map +1 -1
  198. package/dist/sidebar/index.js.map +1 -1
  199. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridUtils.js","names":["GridUtils","dh","DateUtils","TableUtils","Log","assertNotNull","AggregationUtils","AggregationOperation","AdvancedSettings","log","module","isValidIndex","x","array","length","IrisGridUtils","dehydrateGridState","model","gridState","isStuckToBottom","isStuckToRight","movedColumns","movedRows","columns","filter","to","from","Array","isArray","map","name","hydrateGridState","customColumns","customColumnNames","parseCustomColumnNames","columnNames","concat","getIndex","findIndex","dehydrateIrisGridState","irisGridState","aggregationSettings","aggregations","showOnTop","advancedFilters","customColumnFormatMap","isFilterBarShown","metrics","quickFilters","conditionalFormats","reverseType","rollupConfig","undefined","showSearchBar","searchValue","selectDistinctColumns","selectedSearchColumns","sorts","invertSearchColumns","pendingDataMap","Map","frozenColumns","userColumnWidths","userRowHeights","dehydrateAdvancedFilters","dehydrateQuickFilters","dehydrateSort","columnIndex","width","dehydratePendingDataMap","hydrateIrisGridState","formatter","hydrateAdvancedFilters","timeZone","hydrateQuickFilters","hydrateSort","column","String","hydratePendingDataMap","dehydrateIrisGridPanelState","irisGridPanelState","isSelectingPartition","partition","partitionColumn","advancedSettings","hydrateIrisGridPanelState","getColumnByName","DEFAULTS","quickFilter","text","savedQuickFilters","importedFilters","getColumn","makeQuickFilter","error","advancedFilter","options","dehydrateAdvancedFilterOptions","savedAdvancedFilters","hydrateAdvancedFilterOptions","columnRetrieved","makeAdvancedFilter","selectedValues","otherOptions","value","dehydrateValue","type","hydrateValue","rowIndex","data","c","columnMap","getColumnIndex","columnName","has","set","get","index","columnType","isDateType","dehydrateDateTime","isLongType","dehydrateLong","hydrateDateTime","hydrateLong","i18n","DateTimeFormat","format","FULL_DATE_FORMAT","parse","LongWrapper","ofString","sort","isAbs","direction","sortDirection","reverse","Table","columnSort","abs","descending","desc","asc","item","extractTableSettings","panelState","inputFilters","applyTableSettings","table","tableSettings","getFiltersFromFilterMap","getFiltersFromInputFilters","filters","partitionColumnName","partitionFilter","eq","FilterValue","applyFilter","applySort","getInputFiltersForColumns","find","e","debug","filterMap","keys","i","key","push","getHiddenColumns","entries","customColumn","split","getRemovedCustomColumnNames","oldCustomColumns","oldCustomColumnsNames","oldCustomColumnName","includes","removeSortsInColumns","removeFiltersInColumns","removedColumnNames","newFilter","forEach","delete","indexOf","removeColumnFromMovedColumns","newMoves","removedColumnName","removedColumnIndex","moves","j","move","newMove","fromStart","fromEnd","applyItemMoves","splice","removeColumnsFromSelectDistinctColumns","getVisibleColumnsInRange","tableColumns","left","right","hiddenColumns","modelIndex","getModelIndex","getPrevVisibleColumns","startIndex","count","unshift","getNextVisibleColumns","getColumnsToFetch","viewportColumns","alwaysFetchColumnNames","columnsToFetch","getModelViewportColumns","bufferPages","columnsCenter","bufferWidth","columnsLeft","columnsRight","bufferedColumns","rangeSetFromRanges","ranges","rangeSets","slice","a","b","startRow","range","endRow","RangeSet","ofRange","ofRanges","isValidSnapshotRanges","rangeMap","rowMapIndex","columnMapIndex","startColumn","endColumn","matchColumnRanges","join","Number","isInteger","columnsFromRanges","allColumns","columnSet","Set","add","snapshotDataToMatrix","rows","result","r","row","rowData","getModelRollupConfig","originalColumns","config","groupingColumns","showConstituents","includeConstituents","showNonAggregatedColumns","includeDescriptions","aggregationColumns","operation","selected","invert","isRollupOperation","getOperationColumnNames","aggregationMap","nonAggregatedColumnSet","size","existingColumns","FIRST","getPendingErrors","Error","changeFilterColumnNamesToIndexes","filterConfig"],"sources":["../src/IrisGridUtils.ts"],"sourcesContent":["import {\n GridMetrics,\n GridRange,\n GridUtils,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n VisibleIndex,\n} from '@deephaven/grid';\nimport dh, {\n Column,\n DateWrapper,\n FilterCondition,\n LongWrapper,\n RangeSet,\n RollupConfig,\n Sort,\n Table,\n TableData,\n} from '@deephaven/jsapi-shim';\nimport {\n DateUtils,\n TableUtils,\n ReverseType,\n SortDirection,\n FormattingRule,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { assertNotNull } from '@deephaven/utils';\nimport AggregationUtils from './sidebar/aggregations/AggregationUtils';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport { IrisGridProps, IrisGridState } from './IrisGrid';\nimport {\n ColumnName,\n AdvancedFilterMap,\n QuickFilterMap,\n AdvancedFilter,\n InputFilter,\n QuickFilter,\n CellData,\n PendingDataMap,\n UIRow,\n AdvancedFilterOptions,\n} from './CommonTypes';\nimport { UIRollupConfig } from './sidebar/RollupRows';\nimport { AggregationSettings } from './sidebar/aggregations/Aggregations';\nimport { FormattingRule as SidebarFormattingRule } from './sidebar/conditional-formatting/ConditionalFormattingUtils';\nimport IrisGridModel from './IrisGridModel';\nimport type AdvancedSettingsType from './sidebar/AdvancedSettingsType';\nimport AdvancedSettings from './sidebar/AdvancedSettings';\n\nconst log = Log.module('IrisGridUtils');\n\ntype HydratedIrisGridState = Pick<\n IrisGridState,\n | 'advancedFilters'\n | 'aggregationSettings'\n | 'customColumnFormatMap'\n | 'isFilterBarShown'\n | 'quickFilters'\n | 'customColumns'\n | 'reverseType'\n | 'rollupConfig'\n | 'showSearchBar'\n | 'searchValue'\n | 'selectDistinctColumns'\n | 'selectedSearchColumns'\n | 'sorts'\n | 'invertSearchColumns'\n | 'pendingDataMap'\n | 'frozenColumns'\n | 'conditionalFormats'\n> & {\n metrics: Pick<GridMetrics, 'userColumnWidths' | 'userRowHeights'>;\n};\n\nexport interface DehydratedIrisGridState {\n advancedFilters: [\n number,\n {\n options: AdvancedFilterOptions;\n }\n ][];\n aggregationSettings: AggregationSettings;\n customColumnFormatMap: [string, FormattingRule][];\n isFilterBarShown: boolean;\n quickFilters: [\n number,\n {\n text: string;\n }\n ][];\n sorts: {\n column: ModelIndex;\n isAbs: boolean;\n direction: SortDirection;\n }[];\n userColumnWidths: [ColumnName, number][];\n userRowHeights: [number, number][];\n customColumns: ColumnName[];\n conditionalFormats: SidebarFormattingRule[];\n reverseType: ReverseType;\n rollupConfig?: UIRollupConfig;\n showSearchBar: boolean;\n searchValue: string;\n selectDistinctColumns: ColumnName[];\n selectedSearchColumns: ColumnName[];\n invertSearchColumns: boolean;\n pendingDataMap: DehydratedPendingDataMap<string | CellData | null>;\n frozenColumns: ColumnName[];\n}\n\ntype DehydratedPendingDataMap<T> = [number, { data: [string, T][] }][];\n\n/**\n * Checks if an index is valid for the given array\n * @param x The index to check\n * @param array The array\n * @returns True if the index if valid within the array\n */\nfunction isValidIndex(x: number, array: unknown[]): boolean {\n return x >= 0 && x < array.length;\n}\n\nclass IrisGridUtils {\n /**\n * Exports the state from Grid component to a JSON stringifiable object\n * @param model The table model to export the Grid state for\n * @param gridState The state of the Grid to export\n * @returns An object that can be stringified and imported with {{@link hydrateGridState}}\n */\n static dehydrateGridState(\n model: IrisGridModel,\n gridState: Pick<\n IrisGridProps,\n 'isStuckToBottom' | 'isStuckToRight' | 'movedColumns' | 'movedRows'\n >\n ): {\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n movedColumns: { from: string | [string, string]; to: string }[];\n movedRows: MoveOperation[];\n } {\n const {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows,\n } = gridState;\n\n const { columns } = model;\n\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns]\n .filter(\n ({ to, from }) =>\n isValidIndex(to, columns) &&\n ((typeof from === 'number' && isValidIndex(from, columns)) ||\n (Array.isArray(from) &&\n isValidIndex(from[0], columns) &&\n isValidIndex(from[1], columns)))\n )\n .map(({ to, from }) => ({\n to: columns[to].name,\n from: Array.isArray(from)\n ? [columns[from[0]].name, columns[from[1]].name]\n : columns[from].name,\n })),\n movedRows: [...movedRows],\n };\n }\n\n /**\n * Import a state for Grid that was exported with {{@link dehydrateGridState}}\n * @param model The table model to import the state for\n * @param gridState The state of the panel that was saved\n * @returns The gridState props to set on the Grid\n */\n static hydrateGridState(\n model: IrisGridModel,\n gridState: {\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n movedColumns: {\n from: string | [string, string] | ModelIndex | [ModelIndex, ModelIndex];\n to: string | ModelIndex;\n }[];\n movedRows: MoveOperation[];\n },\n customColumns: string[] = []\n ): Pick<\n IrisGridProps,\n 'isStuckToBottom' | 'isStuckToRight' | 'movedColumns' | 'movedRows'\n > {\n const {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows,\n } = gridState;\n\n const { columns } = model;\n const customColumnNames = IrisGridUtils.parseCustomColumnNames(\n customColumns\n );\n const columnNames = columns\n .map(({ name }) => name)\n .concat(customColumnNames);\n\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns]\n .map(({ to, from }) => {\n const getIndex = (x: string | number) =>\n typeof x === 'string'\n ? columnNames.findIndex(name => name === x)\n : x;\n\n return {\n to: getIndex(to),\n from: Array.isArray(from)\n ? ([getIndex(from[0]), getIndex(from[1])] as [number, number])\n : getIndex(from),\n };\n })\n .filter(\n ({ to, from }) =>\n isValidIndex(to, columnNames) &&\n ((typeof from === 'number' && isValidIndex(from, columnNames)) ||\n (Array.isArray(from) &&\n isValidIndex(from[0], columnNames) &&\n isValidIndex(from[1], columnNames)))\n ),\n movedRows: [...movedRows],\n };\n }\n\n /**\n * Exports the state from IrisGrid to a JSON stringifiable object\n * @param model The table model to export the state for\n * @param irisGridState The current state of the IrisGrid\n */\n static dehydrateIrisGridState(\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState\n ): DehydratedIrisGridState {\n const {\n aggregationSettings = { aggregations: [], showOnTop: false },\n advancedFilters,\n customColumnFormatMap,\n isFilterBarShown,\n metrics,\n quickFilters,\n customColumns,\n conditionalFormats = [],\n reverseType,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns = [],\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n pendingDataMap = new Map(),\n frozenColumns,\n } = irisGridState;\n assertNotNull(metrics);\n const { userColumnWidths, userRowHeights } = metrics;\n const { columns } = model;\n return {\n advancedFilters: IrisGridUtils.dehydrateAdvancedFilters(\n columns,\n advancedFilters\n ),\n aggregationSettings,\n customColumnFormatMap: [...customColumnFormatMap],\n isFilterBarShown,\n quickFilters: IrisGridUtils.dehydrateQuickFilters(quickFilters),\n sorts: IrisGridUtils.dehydrateSort(sorts),\n userColumnWidths: [...userColumnWidths]\n .filter(\n ([columnIndex]) =>\n columnIndex != null &&\n columnIndex >= 0 &&\n columnIndex < columns.length\n )\n .map(([columnIndex, width]) => [columns[columnIndex].name, width]),\n userRowHeights: [...userRowHeights],\n customColumns: [...customColumns],\n conditionalFormats: [...conditionalFormats],\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns: [...selectDistinctColumns],\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: IrisGridUtils.dehydratePendingDataMap(\n columns,\n pendingDataMap\n ),\n frozenColumns,\n };\n }\n\n /**\n * Import a state for IrisGrid that was exported with {{@link dehydrateIrisGridState}}\n * @param model The table model to import the state with\n * @param irisGridState The saved IrisGrid state\n */\n static hydrateIrisGridState(\n model: IrisGridModel,\n irisGridState: DehydratedIrisGridState\n ): Omit<HydratedIrisGridState, 'metrics'> & {\n userColumnWidths: ModelSizeMap;\n userRowHeights: ModelSizeMap;\n } {\n const {\n advancedFilters,\n aggregationSettings = { aggregations: [], showOnTop: false },\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n sorts,\n customColumns,\n conditionalFormats,\n userColumnWidths,\n userRowHeights,\n reverseType,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns = true,\n pendingDataMap = [],\n frozenColumns,\n } = irisGridState;\n const { columns, formatter } = model;\n return {\n advancedFilters: IrisGridUtils.hydrateAdvancedFilters(\n columns,\n advancedFilters,\n formatter.timeZone\n ),\n aggregationSettings,\n customColumnFormatMap: new Map(customColumnFormatMap),\n isFilterBarShown,\n quickFilters: IrisGridUtils.hydrateQuickFilters(\n columns,\n quickFilters,\n formatter.timeZone\n ),\n sorts: IrisGridUtils.hydrateSort(columns, sorts),\n userColumnWidths: new Map(\n userColumnWidths\n .map(([column, width]: [string | number, number]): [\n number,\n number\n ] => {\n if (\n typeof column === 'string' ||\n (column as unknown) instanceof String\n ) {\n return [columns.findIndex(({ name }) => name === column), width];\n }\n return [column, width];\n })\n .filter(\n ([column]) =>\n column != null && column >= 0 && column < columns.length\n )\n ),\n customColumns,\n conditionalFormats,\n userRowHeights: new Map(userRowHeights),\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: IrisGridUtils.hydratePendingDataMap(\n columns,\n pendingDataMap\n ) as PendingDataMap<UIRow>,\n frozenColumns,\n };\n }\n\n /**\n * Export the IrisGridPanel state.\n * @param model The table model the state is being dehydrated with\n * @param irisGridPanelState The current IrisGridPanel state\n * @returns The dehydrated IrisGridPanel state\n */\n static dehydrateIrisGridPanelState(\n model: IrisGridModel,\n irisGridPanelState: {\n // This needs to be changed after IrisGridPanel is done\n isSelectingPartition: boolean;\n partition: string | undefined;\n partitionColumn: Column | undefined;\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n }\n ): {\n isSelectingPartition: boolean;\n partition: string | undefined;\n partitionColumn: ColumnName | undefined;\n advancedSettings: [AdvancedSettingsType, boolean][];\n } {\n const {\n isSelectingPartition,\n partition,\n partitionColumn,\n advancedSettings,\n } = irisGridPanelState;\n\n return {\n isSelectingPartition,\n partition,\n partitionColumn:\n partitionColumn != null ? partitionColumn.name : undefined,\n advancedSettings: [...advancedSettings],\n };\n }\n\n /**\n * Import the saved IrisGridPanel state.\n * @param model The model the state is being hydrated with\n * @param irisGridPanelState Exported IrisGridPanel state\n * @returns The state to apply to the IrisGridPanel\n */\n static hydrateIrisGridPanelState(\n model: IrisGridModel,\n irisGridPanelState: {\n // This needs to be changed after IrisGridPanel is done\n isSelectingPartition: boolean;\n partition: string | undefined;\n partitionColumn: ColumnName | undefined;\n advancedSettings: [AdvancedSettingsType, boolean][];\n }\n ): {\n isSelectingPartition: boolean;\n partition?: string;\n partitionColumn?: Column;\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n } {\n const {\n isSelectingPartition,\n partition,\n partitionColumn,\n advancedSettings,\n } = irisGridPanelState;\n\n const { columns } = model;\n return {\n isSelectingPartition,\n partition,\n partitionColumn:\n partitionColumn != null\n ? IrisGridUtils.getColumnByName(columns, partitionColumn)\n : undefined,\n advancedSettings: new Map([\n ...AdvancedSettings.DEFAULTS,\n ...advancedSettings,\n ]),\n };\n }\n\n /**\n * Export the quick filters to JSON striginfiable object\n * @param quickFilters The quick filters to dehydrate\n * @returns The dehydrated quick filters\n */\n static dehydrateQuickFilters(\n quickFilters: QuickFilterMap\n ): [number, { text: string }][] {\n return [...quickFilters].map(([columnIndex, quickFilter]) => {\n const { text } = quickFilter;\n return [columnIndex, { text }];\n });\n }\n\n /**\n * Import the saved quick filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedQuickFilters Exported quick filters definitions\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n * @returns The quick filters to apply to the columns\n */\n static hydrateQuickFilters(\n columns: Column[],\n savedQuickFilters: [number, { text: string }][],\n timeZone?: string\n ): QuickFilterMap {\n const importedFilters = savedQuickFilters.map(\n ([columnIndex, quickFilter]: [number, { text: string }]): [\n number,\n { text: string; filter: FilterCondition | null }\n ] => {\n const { text } = quickFilter;\n\n let filter = null;\n try {\n const column = IrisGridUtils.getColumn(columns, columnIndex);\n if (column != null) {\n filter = TableUtils.makeQuickFilter(column, text, timeZone);\n }\n } catch (error) {\n log.error('hydrateQuickFilters error with', text, error);\n }\n\n return [columnIndex, { text, filter }];\n }\n );\n\n return new Map(importedFilters);\n }\n\n /**\n * Export the advanced filters from the provided columns to JSON striginfiable object\n * @param columns The columns for the filters\n * @param advancedFilters The advanced filters to dehydrate\n * @returns The dehydrated advanced filters\n */\n static dehydrateAdvancedFilters(\n columns: Column[],\n advancedFilters: AdvancedFilterMap\n ): [number, { options: AdvancedFilterOptions }][] {\n return [...advancedFilters].map(([columnIndex, advancedFilter]) => {\n const column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n const options = IrisGridUtils.dehydrateAdvancedFilterOptions(\n column,\n advancedFilter.options\n );\n return [columnIndex, { options }];\n });\n }\n\n /**\n * Import the saved advanced filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedAdvancedFilters Exported advanced filters definitions\n * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York\n * @returns The advanced filters to apply to the columns\n */\n static hydrateAdvancedFilters(\n columns: Column[],\n savedAdvancedFilters: [number, { options: AdvancedFilterOptions }][],\n timeZone: string\n ): AdvancedFilterMap {\n const importedFilters = savedAdvancedFilters.map(\n ([columnIndex, advancedFilter]: [\n number,\n { options: AdvancedFilterOptions }\n ]): [\n number,\n { options: AdvancedFilterOptions; filter: FilterCondition | null }\n ] => {\n const column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n const options = IrisGridUtils.hydrateAdvancedFilterOptions(\n column,\n advancedFilter.options\n );\n let filter = null;\n\n try {\n const columnRetrieved = IrisGridUtils.getColumn(columns, columnIndex);\n if (columnRetrieved != null) {\n filter = TableUtils.makeAdvancedFilter(column, options, timeZone);\n }\n } catch (error) {\n log.error('hydrateAdvancedFilters error with', options, error);\n }\n\n return [columnIndex, { options, filter }];\n }\n );\n\n return new Map(importedFilters);\n }\n\n static dehydrateAdvancedFilterOptions(\n column: Column,\n options: AdvancedFilterOptions\n ): AdvancedFilterOptions {\n const { selectedValues, ...otherOptions } = options;\n return {\n selectedValues: selectedValues?.map((value: unknown) =>\n IrisGridUtils.dehydrateValue(value, column?.type)\n ),\n ...otherOptions,\n };\n }\n\n static hydrateAdvancedFilterOptions(\n column: Column,\n options: AdvancedFilterOptions\n ): AdvancedFilterOptions {\n const { selectedValues, ...otherOptions } = options;\n return {\n selectedValues: selectedValues?.map(value =>\n IrisGridUtils.hydrateValue(value, column?.type)\n ),\n ...otherOptions,\n };\n }\n\n static dehydratePendingDataMap(\n columns: Column[],\n pendingDataMap: Map<\n number,\n | UIRow\n | {\n data: Map<ModelIndex, string>;\n }\n >\n ): DehydratedPendingDataMap<CellData | string | null> {\n return [...pendingDataMap].map(\n ([rowIndex, { data }]: [\n number,\n { data: Map<ModelIndex, CellData | string> }\n ]) => [\n rowIndex,\n {\n data: [...data].map(([c, value]) => [\n columns[c].name,\n IrisGridUtils.dehydrateValue(value, columns[c].type),\n ]),\n },\n ]\n );\n }\n\n static hydratePendingDataMap(\n columns: Column[],\n pendingDataMap: DehydratedPendingDataMap<CellData | string | null>\n ): Map<\n number,\n { data: Map<ModelIndex | null, string | CellData | LongWrapper | null> }\n > {\n const columnMap = new Map<ColumnName, number>();\n const getColumnIndex = (columnName: ColumnName) => {\n if (!columnMap.has(columnName)) {\n columnMap.set(\n columnName,\n columns.findIndex(({ name }) => name === columnName)\n );\n }\n return columnMap.get(columnName);\n };\n\n return new Map(\n pendingDataMap.map(\n ([rowIndex, { data }]: [\n number,\n { data: [string, CellData | string | null][] }\n ]) => [\n rowIndex,\n {\n data: new Map(\n data.map(([columnName, value]) => {\n const index = getColumnIndex(columnName);\n assertNotNull(index);\n return [\n getColumnIndex(columnName) ?? null,\n IrisGridUtils.hydrateValue(value, columns[index].type),\n ];\n })\n ),\n },\n ]\n )\n );\n }\n\n /**\n * Dehydrates/serializes a value for storage.\n * @param value The value to dehydrate\n * @param columnType The column type\n */\n static dehydrateValue<T>(value: T, columnType: string): string | T | null {\n if (TableUtils.isDateType(columnType)) {\n return IrisGridUtils.dehydrateDateTime(\n (value as unknown) as number | DateWrapper | Date\n );\n }\n\n if (TableUtils.isLongType(columnType)) {\n return IrisGridUtils.dehydrateLong(value);\n }\n\n return value;\n }\n\n /**\n * Hydrate a value from it's serialized state\n * @param value The dehydrated value that needs to be hydrated\n * @param columnType The type of column\n */\n static hydrateValue<T>(\n value: T,\n columnType: string\n ): DateWrapper | LongWrapper | T | null {\n if (TableUtils.isDateType(columnType)) {\n return IrisGridUtils.hydrateDateTime((value as unknown) as string);\n }\n\n if (TableUtils.isLongType(columnType)) {\n return IrisGridUtils.hydrateLong((value as unknown) as string);\n }\n\n return value;\n }\n\n static dehydrateDateTime(value: number | DateWrapper | Date): string | null {\n return value != null\n ? dh.i18n.DateTimeFormat.format(DateUtils.FULL_DATE_FORMAT, value)\n : null;\n }\n\n static hydrateDateTime(value: string): DateWrapper | null {\n return value != null\n ? dh.i18n.DateTimeFormat.parse(DateUtils.FULL_DATE_FORMAT, value)\n : null;\n }\n\n static dehydrateLong<T>(value: T): string | null {\n return value != null ? `${value}` : null;\n }\n\n static hydrateLong(value: string): LongWrapper | null {\n return value != null ? dh.LongWrapper.ofString(value) : null;\n }\n\n /**\n * Export the sorts from the provided table sorts to JSON stringifiable object\n * @param sorts The table sorts\n * @returns The dehydrated sorts\n */\n static dehydrateSort(\n sorts: Sort[]\n ): {\n column: ModelIndex;\n isAbs: boolean;\n direction: SortDirection;\n }[] {\n return sorts.map(sort => {\n const { column, isAbs, direction } = sort;\n return {\n column: column.index,\n isAbs,\n direction,\n };\n });\n }\n\n /**\n * Import the saved sorts to apply to the table. Does not actually apply the sort.\n * @param columns The columns the sorts will be applied to\n * @param sorts Exported sort definitions\n * @returns The sorts to apply to the table\n */\n static hydrateSort(\n columns: Column[],\n sorts: { column: number; isAbs: boolean; direction: SortDirection }[]\n ): Sort[] {\n return (\n sorts\n .map(sort => {\n const { column: columnIndex, isAbs, direction } = sort;\n if (direction === TableUtils.sortDirection.reverse) {\n return dh.Table.reverse();\n }\n const column = IrisGridUtils.getColumn(columns, columnIndex);\n if (column != null) {\n let columnSort = column.sort();\n if (isAbs) {\n columnSort = columnSort.abs();\n }\n if (direction === TableUtils.sortDirection.descending) {\n columnSort = columnSort.desc();\n } else {\n columnSort = columnSort.asc();\n }\n return columnSort;\n }\n\n return null;\n })\n // If we can't find the column any more, it's null, filter it out\n // If the item is a reverse sort item, filter it out - it will get applied with the `reverseType` property\n // This should only happen when loading a legacy dashboard\n .filter(\n item =>\n item != null && item.direction !== TableUtils.sortDirection.reverse\n ) as Sort[]\n );\n }\n\n /**\n * Pulls just the table settings from the panel state, eg. filters/sorts\n * @param panelState The dehydrated panel state\n * @returns A dehydrated table settings object, { partition, partitionColumn, advancedFilters, quickFilters, sorts }\n */\n static extractTableSettings<AF, QF, S>(\n panelState: {\n irisGridState: { advancedFilters: AF; quickFilters: QF; sorts: S };\n irisGridPanelState: {\n partitionColumn?: ColumnName;\n partition?: unknown;\n };\n },\n inputFilters: InputFilter[] = []\n ): {\n partitionColumn: ColumnName | undefined;\n partition: unknown;\n advancedFilters: AF;\n inputFilters: InputFilter[];\n quickFilters: QF;\n sorts: S;\n } {\n const { irisGridPanelState, irisGridState } = panelState;\n const { partitionColumn, partition } = irisGridPanelState;\n const { advancedFilters, quickFilters, sorts } = irisGridState;\n\n return {\n advancedFilters,\n inputFilters,\n partition,\n partitionColumn,\n quickFilters,\n sorts,\n };\n }\n\n /**\n * Applies the passed in table settings directly to the provided table\n * @param table The table to apply the settings to\n * @param tableSettings Dehydrated table settings extracted with `extractTableSettings`\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n */\n static applyTableSettings(\n table: Table,\n tableSettings: {\n quickFilters?: [\n number,\n {\n text: string;\n }\n ][];\n advancedFilters?: [\n number,\n {\n options: AdvancedFilterOptions;\n }\n ][];\n inputFilters?: InputFilter[];\n sorts?: {\n column: ModelIndex;\n isAbs: boolean;\n direction: SortDirection;\n }[];\n partition?: unknown;\n partitionColumn?: ColumnName;\n },\n timeZone: string\n ): void {\n const { columns } = table;\n\n let quickFilters: FilterCondition[] = [];\n if (tableSettings.quickFilters) {\n quickFilters = IrisGridUtils.getFiltersFromFilterMap(\n IrisGridUtils.hydrateQuickFilters(\n columns,\n tableSettings.quickFilters,\n timeZone\n )\n );\n }\n\n let advancedFilters: FilterCondition[] = [];\n if (tableSettings.advancedFilters) {\n advancedFilters = IrisGridUtils.getFiltersFromFilterMap(\n IrisGridUtils.hydrateAdvancedFilters(\n columns,\n tableSettings.advancedFilters,\n timeZone\n )\n );\n }\n const inputFilters = IrisGridUtils.getFiltersFromInputFilters(\n columns,\n tableSettings.inputFilters,\n timeZone\n );\n\n let sorts: Sort[] = [];\n if (tableSettings.sorts) {\n sorts = IrisGridUtils.hydrateSort(columns, tableSettings.sorts);\n }\n\n let filters = [...quickFilters, ...advancedFilters];\n const { partition, partitionColumn: partitionColumnName } = tableSettings;\n if (partition != null && partitionColumnName != null) {\n const partitionColumn = IrisGridUtils.getColumnByName(\n columns,\n partitionColumnName\n );\n if (partitionColumn) {\n const partitionFilter = partitionColumn\n .filter()\n .eq(dh.FilterValue.ofString(partition));\n filters = [partitionFilter, ...filters];\n }\n }\n filters = [...inputFilters, ...filters];\n\n table.applyFilter(filters);\n table.applySort(sorts);\n }\n\n static getInputFiltersForColumns(\n columns: Column[],\n inputFilters: InputFilter[] = []\n ): InputFilter[] {\n return inputFilters.filter(({ name, type }) =>\n columns.find(\n ({ name: columnName, type: columnType }) =>\n columnName === name && columnType === type\n )\n );\n }\n\n static getFiltersFromInputFilters(\n columns: Column[],\n inputFilters: InputFilter[] = [],\n timeZone: string\n ): FilterCondition[] {\n return inputFilters\n .map(({ name, type, value }) => {\n const column = columns.find(\n ({ name: columnName, type: columnType }) =>\n columnName === name && columnType === type\n );\n if (column) {\n try {\n return TableUtils.makeQuickFilter(column, value, timeZone);\n } catch (e) {\n // It may be unable to create it because user hasn't completed their input\n log.debug('Unable to create input filter', e);\n }\n }\n\n return null;\n })\n .filter(filter => filter != null) as FilterCondition[];\n }\n\n static getFiltersFromFilterMap(\n filterMap: Map<ModelIndex, QuickFilter | AdvancedFilter | null>\n ): FilterCondition[] {\n const filters = [];\n\n const keys = Array.from(filterMap.keys());\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n const item = filterMap.get(key);\n if (item && item.filter != null) {\n filters.push(item.filter);\n }\n }\n\n return filters;\n }\n\n /**\n * Get array of hidden column indexes\n * @param userColumnWidths Map of user column widths\n * @returns Array of hidden column indexes\n */\n static getHiddenColumns(userColumnWidths: ModelSizeMap): ModelIndex[] {\n return [...userColumnWidths.entries()]\n .filter(([, value]) => value === 0)\n .map(([key]) => key);\n }\n\n static parseCustomColumnNames(customColumns: ColumnName[]): ColumnName[] {\n return customColumns.map(customColumn => customColumn.split('=')[0]);\n }\n\n static getRemovedCustomColumnNames(\n oldCustomColumns: ColumnName[],\n customColumns: ColumnName[]\n ): ColumnName[] {\n const oldCustomColumnsNames = IrisGridUtils.parseCustomColumnNames(\n oldCustomColumns\n );\n const customColumnNames = IrisGridUtils.parseCustomColumnNames(\n customColumns\n );\n return oldCustomColumnsNames.filter(\n oldCustomColumnName => !customColumnNames.includes(oldCustomColumnName)\n );\n }\n\n static removeSortsInColumns(sorts: Sort[], columnNames: string[]): Sort[] {\n return sorts.filter(sort => !columnNames.includes(sort.column.name));\n }\n\n static removeFiltersInColumns<T>(\n columns: Column[],\n filters: Map<number, T>,\n removedColumnNames: ColumnName[]\n ): Map<number, T> {\n const columnNames = columns.map(({ name }) => name);\n const newFilter = new Map(filters);\n removedColumnNames.forEach(columnName =>\n newFilter.delete(columnNames.indexOf(columnName))\n );\n return newFilter;\n }\n\n static removeColumnFromMovedColumns(\n columns: Column[],\n movedColumns: MoveOperation[],\n removedColumnNames: ColumnName[]\n ): MoveOperation[] {\n const columnNames = columns.map(({ name }) => name);\n let newMoves = [...movedColumns];\n for (let i = 0; i < removedColumnNames.length; i += 1) {\n const removedColumnName = removedColumnNames[i];\n let removedColumnIndex = columnNames.findIndex(\n name => name === removedColumnName\n );\n const moves: MoveOperation[] = [];\n for (let j = 0; j < newMoves.length; j += 1) {\n const move = newMoves[j];\n const newMove = { ...move };\n let [fromStart, fromEnd] = Array.isArray(move.from)\n ? move.from\n : [move.from, move.from];\n\n if (removedColumnIndex <= move.to) {\n newMove.to -= 1;\n }\n\n // If equal to fromStart, the new fromStart would stay the same\n // It's just the next element in the range which will have the same index after deletion\n if (removedColumnIndex < fromStart) {\n fromStart -= 1;\n }\n\n if (removedColumnIndex <= fromEnd) {\n fromEnd -= 1;\n }\n\n if (fromStart <= fromEnd && fromStart !== newMove.to) {\n if (fromStart === fromEnd) {\n moves.push({ ...newMove, from: fromStart });\n } else {\n moves.push({ ...newMove, from: [fromStart, fromEnd] });\n }\n }\n\n // get the next index of the removed column after the move is applied\n // eslint-disable-next-line prefer-destructuring\n removedColumnIndex = GridUtils.applyItemMoves(\n removedColumnIndex,\n removedColumnIndex,\n [move]\n )[0][0];\n }\n\n newMoves = moves;\n columnNames.splice(\n columnNames.findIndex(name => name === removedColumnName),\n 1\n );\n }\n return newMoves;\n }\n\n static removeColumnsFromSelectDistinctColumns(\n selectDistinctColumns: ColumnName[],\n removedColumnNames: ColumnName[]\n ): ColumnName[] {\n return selectDistinctColumns.filter(\n columnName => !removedColumnNames.includes(columnName)\n );\n }\n\n static getVisibleColumnsInRange(\n tableColumns: Column[],\n left: number,\n right: number,\n movedColumns: MoveOperation[],\n hiddenColumns: number[]\n ): Column[] {\n const columns: Column[] = [];\n for (let i = left; i <= right; i += 1) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (\n modelIndex >= 0 &&\n modelIndex < tableColumns.length &&\n !hiddenColumns.includes(modelIndex)\n ) {\n columns.push(tableColumns[modelIndex]);\n }\n }\n return columns;\n }\n\n static getPrevVisibleColumns(\n tableColumns: Column[],\n startIndex: VisibleIndex,\n count: number,\n movedColumns: MoveOperation[],\n hiddenColumns: VisibleIndex[]\n ): Column[] {\n const columns = [];\n let i = startIndex;\n while (i >= 0 && columns.length < count) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (\n modelIndex >= 0 &&\n modelIndex < tableColumns.length &&\n !hiddenColumns.includes(modelIndex)\n ) {\n columns.unshift(tableColumns[modelIndex]);\n }\n i -= 1;\n }\n return columns;\n }\n\n static getNextVisibleColumns(\n tableColumns: Column[],\n startIndex: VisibleIndex,\n count: number,\n movedColumns: MoveOperation[],\n hiddenColumns: VisibleIndex[]\n ): Column[] {\n const columns = [];\n let i = startIndex;\n while (i < tableColumns.length && columns.length < count) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (\n modelIndex >= 0 &&\n modelIndex < tableColumns.length &&\n !hiddenColumns.includes(modelIndex)\n ) {\n columns.push(tableColumns[modelIndex]);\n }\n i += 1;\n }\n return columns;\n }\n\n static getColumnsToFetch(\n tableColumns: Column[],\n viewportColumns: Column[],\n alwaysFetchColumnNames: ColumnName[]\n ): Column[] {\n const columnsToFetch = [...viewportColumns];\n alwaysFetchColumnNames.forEach(columnName => {\n const column = tableColumns.find(({ name }) => name === columnName);\n if (column != null && !viewportColumns.includes(column)) {\n columnsToFetch.push(column);\n }\n });\n return columnsToFetch;\n }\n\n static getModelViewportColumns(\n columns: Column[],\n left: number | null,\n right: number | null,\n movedColumns: MoveOperation[],\n hiddenColumns: VisibleIndex[] = [],\n alwaysFetchColumnNames: ColumnName[] = [],\n bufferPages = 0\n ): Column[] | null {\n if (left == null || right == null) {\n return null;\n }\n\n const columnsCenter = IrisGridUtils.getVisibleColumnsInRange(\n columns,\n left,\n right,\n movedColumns,\n hiddenColumns\n );\n const bufferWidth = columnsCenter.length * bufferPages;\n const columnsLeft = IrisGridUtils.getPrevVisibleColumns(\n columns,\n left - 1,\n bufferWidth,\n movedColumns,\n hiddenColumns\n );\n const columnsRight = IrisGridUtils.getNextVisibleColumns(\n columns,\n right + 1,\n bufferWidth,\n movedColumns,\n hiddenColumns\n );\n\n const bufferedColumns = [...columnsLeft, ...columnsCenter, ...columnsRight];\n\n return IrisGridUtils.getColumnsToFetch(\n columns,\n bufferedColumns,\n alwaysFetchColumnNames\n );\n }\n\n /**\n * Get the dh.RangeSet representation of the provided ranges.\n * Ranges are sorted prior to creating the RangeSet. Only the rows are taken into account,\n * RangeSet does not have an option for columns.\n * @param ranges The ranges to get the range set for\n * @returns The rangeset for the provided ranges\n */\n static rangeSetFromRanges(ranges: GridRange[]): RangeSet {\n const rangeSets = ranges\n .slice()\n .sort((a, b): number => {\n assertNotNull(a.startRow);\n assertNotNull(b.startRow);\n return a.startRow - b.startRow;\n })\n .map(range => {\n const { startRow, endRow } = range;\n assertNotNull(startRow);\n assertNotNull(endRow);\n return dh.RangeSet.ofRange(startRow, endRow);\n });\n return dh.RangeSet.ofRanges(rangeSets);\n }\n\n /**\n * Validate whether the ranges passed in are valid to take a snapshot from.\n * Multiple selections are valid if all of the selected rows have the same columns selected.\n *\n * @param ranges The ranges to validate\n * @returns True if the ranges are valid, false otherwise\n */\n static isValidSnapshotRanges(ranges: GridRange[]): boolean {\n if (ranges == null || ranges.length === 0) {\n return false;\n }\n\n // To verify all the rows selected have the same set of columns selected, build a map with string representations\n // of each range.\n const rangeMap = new Map();\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n const rowMapIndex = `${range.startRow}:${range.endRow}`;\n const columnMapIndex = `${range.startColumn}:${range.endColumn}`;\n if (!rangeMap.has(rowMapIndex)) {\n rangeMap.set(rowMapIndex, []);\n }\n rangeMap.get(rowMapIndex).push(columnMapIndex);\n }\n\n const keys = [...rangeMap.keys()];\n const matchColumnRanges = rangeMap.get(keys[0]).sort().join(',');\n for (let i = 1; i < keys.length; i += 1) {\n if (rangeMap.get(keys[i]).sort().join(',') !== matchColumnRanges) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Check if the provided value is a valid table index\n * @param value A value to check if it's a valid table index\n */\n static isValidIndex(value: unknown): boolean {\n if (!Number.isInteger(value)) {\n return false;\n }\n if (!(typeof value === 'number')) {\n return false;\n }\n return value >= 0;\n }\n\n /**\n * Returns all columns used in any of the ranges provided\n * @param ranges The model ranges to get columns for\n * @param allColumns All the columns to pull from\n * @returns The columns selected in the range\n */\n static columnsFromRanges(\n ranges: GridRange[],\n allColumns: Column[]\n ): Column[] {\n if (ranges == null || ranges.length === 0) {\n return [];\n }\n if (ranges[0].startColumn === null && ranges[0].endColumn === null) {\n // Snapshot of all the columns\n return allColumns;\n }\n\n const columnSet = new Set<ModelIndex>();\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n assertNotNull(range.startColumn);\n assertNotNull(range.endColumn);\n for (\n let c = range.startColumn ?? 0;\n c <= (range.endColumn ?? allColumns.length - 1);\n c += 1\n ) {\n columnSet.add(c);\n }\n }\n return [...columnSet].map(c => allColumns[c]);\n }\n\n /**\n * Transforms an iris data snapshot into a simple data matrix\n * @param data The Iris formatted table data\n * @returns A matrix of the values of the data\n */\n static snapshotDataToMatrix(data: TableData): unknown[][] {\n const { columns, rows } = data;\n const result = [];\n for (let r = 0; r < rows.length; r += 1) {\n const row = rows[r];\n const rowData = [];\n for (let c = 0; c < columns.length; c += 1) {\n const column = columns[c];\n const value = row.get(column);\n rowData.push(value);\n }\n result.push(rowData);\n }\n return result;\n }\n\n /**\n * Hydrate model rollup config\n * @param originalColumns Original model columns\n * @param config Dehydrated rollup config\n * @param aggregationSettings Aggregation settings\n * @returns Rollup config for the model\n */\n static getModelRollupConfig(\n originalColumns: Column[],\n config: UIRollupConfig | undefined,\n aggregationSettings: AggregationSettings\n ): RollupConfig | null {\n if ((config?.columns?.length ?? 0) === 0) {\n return null;\n }\n\n const {\n columns: groupingColumns = [],\n showConstituents: includeConstituents = true,\n showNonAggregatedColumns = true,\n includeDescriptions = true,\n } = config ?? {};\n const { aggregations = [] } = aggregationSettings ?? {};\n const aggregationColumns = aggregations.map(\n ({ operation, selected, invert }) =>\n AggregationUtils.isRollupOperation(operation)\n ? []\n : AggregationUtils.getOperationColumnNames(\n originalColumns,\n operation,\n selected,\n invert\n )\n );\n\n const aggregationMap = {} as Record<AggregationOperation, string[]>;\n // Aggregation columns should show first, add them first\n for (let i = 0; i < aggregations.length; i += 1) {\n aggregationMap[aggregations[i].operation] = aggregationColumns[i];\n }\n\n if (showNonAggregatedColumns) {\n // Filter out any column that already has an aggregation or grouping\n const nonAggregatedColumnSet = new Set(\n originalColumns\n .map(c => c.name)\n .filter(name => !groupingColumns.includes(name))\n );\n aggregationColumns.forEach(columns => {\n columns.forEach(name => nonAggregatedColumnSet.delete(name));\n });\n\n if (nonAggregatedColumnSet.size > 0) {\n const existingColumns =\n aggregationMap[AggregationOperation.FIRST] ?? [];\n aggregationMap[AggregationOperation.FIRST] = [\n ...existingColumns,\n ...nonAggregatedColumnSet,\n ];\n }\n }\n\n return {\n groupingColumns,\n includeConstituents,\n includeDescriptions,\n aggregations: aggregationMap,\n };\n }\n\n /**\n * @param pendingDataMap Map of pending data\n * @returns A map with the errors in the pending data\n */\n static getPendingErrors(pendingDataMap: Map<number, UIRow>): void {\n pendingDataMap.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(`Invalid rowIndex ${rowIndex}`);\n }\n\n const { data } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(`Invalid columnIndex ${columnIndex}`);\n }\n });\n });\n }\n\n /**\n * Retrieves a column from the provided array at the index, or `null` and logs an error if it's invalid\n *\n * @param columns The columns to get the column from\n * @param columnIndex The column index to get\n */\n static getColumn(columns: Column[], columnIndex: ModelIndex): Column | null {\n if (columnIndex < columns.length) {\n return columns[columnIndex];\n }\n\n log.error('Unable to retrieve column', columnIndex, '>=', columns.length);\n\n return null;\n }\n\n /**\n * Retrieves a column from the provided array matching the name, or `null` and logs an error if not found\n * @param columns The columns to get the column from\n * @param columnName The column name to retrieve\n */\n static getColumnByName(\n columns: Column[],\n columnName: ColumnName\n ): Column | undefined {\n const column = columns.find(({ name }) => name === columnName);\n if (column == null) {\n log.error(\n 'Unable to retrieve column by name',\n columnName,\n columns.map(({ name }) => name)\n );\n }\n\n return column;\n }\n\n /**\n * Get filter configs with column names changed to indexes, exclude missing columns\n * @param columns The columns to get column indexes from\n * @param filters Filter configs\n * @returns Updated filter configs with column names changed to indexes\n */\n static changeFilterColumnNamesToIndexes<T>(\n columns: Column[],\n filters: { name: ColumnName; filter: T }[]\n ): [number, T][] {\n return filters\n .map(({ name, filter }): null | [number, T] => {\n const index = columns.findIndex(column => column.name === name);\n return index < 0 ? null : [index, filter];\n })\n .filter(filterConfig => filterConfig != null) as [number, T][];\n }\n}\n\nexport default IrisGridUtils;\n"],"mappings":"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"}
1
+ {"version":3,"file":"IrisGridUtils.js","names":["GridUtils","dh","DateUtils","TableUtils","Log","assertNotNull","AggregationUtils","AggregationOperation","AdvancedSettings","log","module","isValidIndex","x","array","length","IrisGridUtils","dehydrateGridState","model","gridState","isStuckToBottom","isStuckToRight","movedColumns","movedRows","columns","filter","to","from","Array","isArray","map","name","hydrateGridState","customColumns","customColumnNames","parseCustomColumnNames","columnNames","concat","getIndex","findIndex","dehydrateIrisGridState","irisGridState","aggregationSettings","aggregations","showOnTop","advancedFilters","customColumnFormatMap","isFilterBarShown","metrics","quickFilters","conditionalFormats","reverseType","rollupConfig","undefined","showSearchBar","searchValue","selectDistinctColumns","selectedSearchColumns","sorts","invertSearchColumns","pendingDataMap","Map","frozenColumns","userColumnWidths","userRowHeights","dehydrateAdvancedFilters","dehydrateQuickFilters","dehydrateSort","columnIndex","width","dehydratePendingDataMap","hydrateIrisGridState","formatter","hydrateAdvancedFilters","timeZone","hydrateQuickFilters","hydrateSort","column","String","hydratePendingDataMap","dehydrateIrisGridPanelState","irisGridPanelState","isSelectingPartition","partition","partitionColumn","advancedSettings","hydrateIrisGridPanelState","getColumnByName","DEFAULTS","quickFilter","text","savedQuickFilters","importedFilters","getColumn","makeQuickFilter","error","advancedFilter","options","dehydrateAdvancedFilterOptions","savedAdvancedFilters","hydrateAdvancedFilterOptions","columnRetrieved","makeAdvancedFilter","selectedValues","otherOptions","value","dehydrateValue","type","hydrateValue","rowIndex","data","c","columnMap","getColumnIndex","columnName","has","set","get","index","columnType","isDateType","dehydrateDateTime","isLongType","dehydrateLong","hydrateDateTime","hydrateLong","i18n","DateTimeFormat","format","FULL_DATE_FORMAT","parse","LongWrapper","ofString","sort","isAbs","direction","sortDirection","reverse","Table","columnSort","abs","descending","desc","asc","item","extractTableSettings","panelState","inputFilters","applyTableSettings","table","tableSettings","getFiltersFromFilterMap","getFiltersFromInputFilters","filters","partitionColumnName","partitionFilter","eq","FilterValue","applyFilter","applySort","getInputFiltersForColumns","find","e","debug","filterMap","keys","i","key","push","getHiddenColumns","entries","customColumn","split","getRemovedCustomColumnNames","oldCustomColumns","oldCustomColumnsNames","oldCustomColumnName","includes","removeSortsInColumns","removeFiltersInColumns","removedColumnNames","newFilter","forEach","delete","indexOf","removeColumnFromMovedColumns","newMoves","removedColumnName","removedColumnIndex","moves","j","move","newMove","fromStart","fromEnd","applyItemMoves","splice","removeColumnsFromSelectDistinctColumns","getVisibleColumnsInRange","tableColumns","left","right","hiddenColumns","modelIndex","getModelIndex","getPrevVisibleColumns","startIndex","count","unshift","getNextVisibleColumns","getColumnsToFetch","viewportColumns","alwaysFetchColumnNames","columnsToFetch","getModelViewportColumns","bufferPages","columnsCenter","bufferWidth","columnsLeft","columnsRight","bufferedColumns","rangeSetFromRanges","ranges","rangeSets","slice","a","b","startRow","range","endRow","RangeSet","ofRange","ofRanges","isValidSnapshotRanges","rangeMap","rowMapIndex","columnMapIndex","startColumn","endColumn","matchColumnRanges","join","Number","isInteger","columnsFromRanges","allColumns","columnSet","Set","add","snapshotDataToMatrix","rows","result","r","row","rowData","getModelRollupConfig","originalColumns","config","groupingColumns","showConstituents","includeConstituents","showNonAggregatedColumns","includeDescriptions","aggregationColumns","operation","selected","invert","isRollupOperation","getOperationColumnNames","aggregationMap","nonAggregatedColumnSet","size","existingColumns","FIRST","getPendingErrors","Error","changeFilterColumnNamesToIndexes","filterConfig","combineFiltersFromList","filterList","operator","startColumnIndex","combinedText","symbol","getFilterOperatorString","filterText","isCharType","fromCharCode","parseInt"],"sources":["../src/IrisGridUtils.ts"],"sourcesContent":["import {\n GridMetrics,\n GridRange,\n GridUtils,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n VisibleIndex,\n} from '@deephaven/grid';\nimport dh, {\n Column,\n DateWrapper,\n FilterCondition,\n LongWrapper,\n RangeSet,\n RollupConfig,\n Sort,\n Table,\n TableData,\n} from '@deephaven/jsapi-shim';\nimport {\n DateUtils,\n TableUtils,\n ReverseType,\n SortDirection,\n FormattingRule,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { assertNotNull } from '@deephaven/utils';\nimport AggregationUtils from './sidebar/aggregations/AggregationUtils';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport { FilterData, IrisGridProps, IrisGridState } from './IrisGrid';\nimport {\n ColumnName,\n AdvancedFilterMap,\n QuickFilterMap,\n AdvancedFilter,\n InputFilter,\n QuickFilter,\n CellData,\n PendingDataMap,\n UIRow,\n AdvancedFilterOptions,\n} from './CommonTypes';\nimport { UIRollupConfig } from './sidebar/RollupRows';\nimport { AggregationSettings } from './sidebar/aggregations/Aggregations';\nimport { FormattingRule as SidebarFormattingRule } from './sidebar/conditional-formatting/ConditionalFormattingUtils';\nimport IrisGridModel from './IrisGridModel';\nimport type AdvancedSettingsType from './sidebar/AdvancedSettingsType';\nimport AdvancedSettings from './sidebar/AdvancedSettings';\n\nconst log = Log.module('IrisGridUtils');\n\ntype HydratedIrisGridState = Pick<\n IrisGridState,\n | 'advancedFilters'\n | 'aggregationSettings'\n | 'customColumnFormatMap'\n | 'isFilterBarShown'\n | 'quickFilters'\n | 'customColumns'\n | 'reverseType'\n | 'rollupConfig'\n | 'showSearchBar'\n | 'searchValue'\n | 'selectDistinctColumns'\n | 'selectedSearchColumns'\n | 'sorts'\n | 'invertSearchColumns'\n | 'pendingDataMap'\n | 'frozenColumns'\n | 'conditionalFormats'\n> & {\n metrics: Pick<GridMetrics, 'userColumnWidths' | 'userRowHeights'>;\n};\n\nexport interface DehydratedIrisGridState {\n advancedFilters: [\n number,\n {\n options: AdvancedFilterOptions;\n }\n ][];\n aggregationSettings: AggregationSettings;\n customColumnFormatMap: [string, FormattingRule][];\n isFilterBarShown: boolean;\n quickFilters: [\n number,\n {\n text: string;\n }\n ][];\n sorts: {\n column: ModelIndex;\n isAbs: boolean;\n direction: SortDirection;\n }[];\n userColumnWidths: [ColumnName, number][];\n userRowHeights: [number, number][];\n customColumns: ColumnName[];\n conditionalFormats: SidebarFormattingRule[];\n reverseType: ReverseType;\n rollupConfig?: UIRollupConfig;\n showSearchBar: boolean;\n searchValue: string;\n selectDistinctColumns: ColumnName[];\n selectedSearchColumns: ColumnName[];\n invertSearchColumns: boolean;\n pendingDataMap: DehydratedPendingDataMap<string | CellData | null>;\n frozenColumns: ColumnName[];\n}\n\ntype DehydratedPendingDataMap<T> = [number, { data: [string, T][] }][];\n\n/**\n * Checks if an index is valid for the given array\n * @param x The index to check\n * @param array The array\n * @returns True if the index if valid within the array\n */\nfunction isValidIndex(x: number, array: unknown[]): boolean {\n return x >= 0 && x < array.length;\n}\n\nclass IrisGridUtils {\n /**\n * Exports the state from Grid component to a JSON stringifiable object\n * @param model The table model to export the Grid state for\n * @param gridState The state of the Grid to export\n * @returns An object that can be stringified and imported with {{@link hydrateGridState}}\n */\n static dehydrateGridState(\n model: IrisGridModel,\n gridState: Pick<\n IrisGridProps,\n 'isStuckToBottom' | 'isStuckToRight' | 'movedColumns' | 'movedRows'\n >\n ): {\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n movedColumns: { from: string | [string, string]; to: string }[];\n movedRows: MoveOperation[];\n } {\n const {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows,\n } = gridState;\n\n const { columns } = model;\n\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns]\n .filter(\n ({ to, from }) =>\n isValidIndex(to, columns) &&\n ((typeof from === 'number' && isValidIndex(from, columns)) ||\n (Array.isArray(from) &&\n isValidIndex(from[0], columns) &&\n isValidIndex(from[1], columns)))\n )\n .map(({ to, from }) => ({\n to: columns[to].name,\n from: Array.isArray(from)\n ? [columns[from[0]].name, columns[from[1]].name]\n : columns[from].name,\n })),\n movedRows: [...movedRows],\n };\n }\n\n /**\n * Import a state for Grid that was exported with {{@link dehydrateGridState}}\n * @param model The table model to import the state for\n * @param gridState The state of the panel that was saved\n * @returns The gridState props to set on the Grid\n */\n static hydrateGridState(\n model: IrisGridModel,\n gridState: {\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n movedColumns: {\n from: string | [string, string] | ModelIndex | [ModelIndex, ModelIndex];\n to: string | ModelIndex;\n }[];\n movedRows: MoveOperation[];\n },\n customColumns: string[] = []\n ): Pick<\n IrisGridProps,\n 'isStuckToBottom' | 'isStuckToRight' | 'movedColumns' | 'movedRows'\n > {\n const {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows,\n } = gridState;\n\n const { columns } = model;\n const customColumnNames = IrisGridUtils.parseCustomColumnNames(\n customColumns\n );\n const columnNames = columns\n .map(({ name }) => name)\n .concat(customColumnNames);\n\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns]\n .map(({ to, from }) => {\n const getIndex = (x: string | number) =>\n typeof x === 'string'\n ? columnNames.findIndex(name => name === x)\n : x;\n\n return {\n to: getIndex(to),\n from: Array.isArray(from)\n ? ([getIndex(from[0]), getIndex(from[1])] as [number, number])\n : getIndex(from),\n };\n })\n .filter(\n ({ to, from }) =>\n isValidIndex(to, columnNames) &&\n ((typeof from === 'number' && isValidIndex(from, columnNames)) ||\n (Array.isArray(from) &&\n isValidIndex(from[0], columnNames) &&\n isValidIndex(from[1], columnNames)))\n ),\n movedRows: [...movedRows],\n };\n }\n\n /**\n * Exports the state from IrisGrid to a JSON stringifiable object\n * @param model The table model to export the state for\n * @param irisGridState The current state of the IrisGrid\n */\n static dehydrateIrisGridState(\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState\n ): DehydratedIrisGridState {\n const {\n aggregationSettings = { aggregations: [], showOnTop: false },\n advancedFilters,\n customColumnFormatMap,\n isFilterBarShown,\n metrics,\n quickFilters,\n customColumns,\n conditionalFormats = [],\n reverseType,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns = [],\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n pendingDataMap = new Map(),\n frozenColumns,\n } = irisGridState;\n assertNotNull(metrics);\n const { userColumnWidths, userRowHeights } = metrics;\n const { columns } = model;\n return {\n advancedFilters: IrisGridUtils.dehydrateAdvancedFilters(\n columns,\n advancedFilters\n ),\n aggregationSettings,\n customColumnFormatMap: [...customColumnFormatMap],\n isFilterBarShown,\n quickFilters: IrisGridUtils.dehydrateQuickFilters(quickFilters),\n sorts: IrisGridUtils.dehydrateSort(sorts),\n userColumnWidths: [...userColumnWidths]\n .filter(\n ([columnIndex]) =>\n columnIndex != null &&\n columnIndex >= 0 &&\n columnIndex < columns.length\n )\n .map(([columnIndex, width]) => [columns[columnIndex].name, width]),\n userRowHeights: [...userRowHeights],\n customColumns: [...customColumns],\n conditionalFormats: [...conditionalFormats],\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns: [...selectDistinctColumns],\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: IrisGridUtils.dehydratePendingDataMap(\n columns,\n pendingDataMap\n ),\n frozenColumns,\n };\n }\n\n /**\n * Import a state for IrisGrid that was exported with {{@link dehydrateIrisGridState}}\n * @param model The table model to import the state with\n * @param irisGridState The saved IrisGrid state\n */\n static hydrateIrisGridState(\n model: IrisGridModel,\n irisGridState: DehydratedIrisGridState\n ): Omit<HydratedIrisGridState, 'metrics'> & {\n userColumnWidths: ModelSizeMap;\n userRowHeights: ModelSizeMap;\n } {\n const {\n advancedFilters,\n aggregationSettings = { aggregations: [], showOnTop: false },\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n sorts,\n customColumns,\n conditionalFormats,\n userColumnWidths,\n userRowHeights,\n reverseType,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns = true,\n pendingDataMap = [],\n frozenColumns,\n } = irisGridState;\n const { columns, formatter } = model;\n return {\n advancedFilters: IrisGridUtils.hydrateAdvancedFilters(\n columns,\n advancedFilters,\n formatter.timeZone\n ),\n aggregationSettings,\n customColumnFormatMap: new Map(customColumnFormatMap),\n isFilterBarShown,\n quickFilters: IrisGridUtils.hydrateQuickFilters(\n columns,\n quickFilters,\n formatter.timeZone\n ),\n sorts: IrisGridUtils.hydrateSort(columns, sorts),\n userColumnWidths: new Map(\n userColumnWidths\n .map(([column, width]: [string | number, number]): [\n number,\n number\n ] => {\n if (\n typeof column === 'string' ||\n (column as unknown) instanceof String\n ) {\n return [columns.findIndex(({ name }) => name === column), width];\n }\n return [column, width];\n })\n .filter(\n ([column]) =>\n column != null && column >= 0 && column < columns.length\n )\n ),\n customColumns,\n conditionalFormats,\n userRowHeights: new Map(userRowHeights),\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: IrisGridUtils.hydratePendingDataMap(\n columns,\n pendingDataMap\n ) as PendingDataMap<UIRow>,\n frozenColumns,\n };\n }\n\n /**\n * Export the IrisGridPanel state.\n * @param model The table model the state is being dehydrated with\n * @param irisGridPanelState The current IrisGridPanel state\n * @returns The dehydrated IrisGridPanel state\n */\n static dehydrateIrisGridPanelState(\n model: IrisGridModel,\n irisGridPanelState: {\n // This needs to be changed after IrisGridPanel is done\n isSelectingPartition: boolean;\n partition: string | undefined;\n partitionColumn: Column | undefined;\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n }\n ): {\n isSelectingPartition: boolean;\n partition: string | undefined;\n partitionColumn: ColumnName | undefined;\n advancedSettings: [AdvancedSettingsType, boolean][];\n } {\n const {\n isSelectingPartition,\n partition,\n partitionColumn,\n advancedSettings,\n } = irisGridPanelState;\n\n return {\n isSelectingPartition,\n partition,\n partitionColumn:\n partitionColumn != null ? partitionColumn.name : undefined,\n advancedSettings: [...advancedSettings],\n };\n }\n\n /**\n * Import the saved IrisGridPanel state.\n * @param model The model the state is being hydrated with\n * @param irisGridPanelState Exported IrisGridPanel state\n * @returns The state to apply to the IrisGridPanel\n */\n static hydrateIrisGridPanelState(\n model: IrisGridModel,\n irisGridPanelState: {\n // This needs to be changed after IrisGridPanel is done\n isSelectingPartition: boolean;\n partition: string | undefined;\n partitionColumn: ColumnName | undefined;\n advancedSettings: [AdvancedSettingsType, boolean][];\n }\n ): {\n isSelectingPartition: boolean;\n partition?: string;\n partitionColumn?: Column;\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n } {\n const {\n isSelectingPartition,\n partition,\n partitionColumn,\n advancedSettings,\n } = irisGridPanelState;\n\n const { columns } = model;\n return {\n isSelectingPartition,\n partition,\n partitionColumn:\n partitionColumn != null\n ? IrisGridUtils.getColumnByName(columns, partitionColumn)\n : undefined,\n advancedSettings: new Map([\n ...AdvancedSettings.DEFAULTS,\n ...advancedSettings,\n ]),\n };\n }\n\n /**\n * Export the quick filters to JSON striginfiable object\n * @param quickFilters The quick filters to dehydrate\n * @returns The dehydrated quick filters\n */\n static dehydrateQuickFilters(\n quickFilters: QuickFilterMap\n ): [number, { text: string }][] {\n return [...quickFilters].map(([columnIndex, quickFilter]) => {\n const { text } = quickFilter;\n return [columnIndex, { text }];\n });\n }\n\n /**\n * Import the saved quick filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedQuickFilters Exported quick filters definitions\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n * @returns The quick filters to apply to the columns\n */\n static hydrateQuickFilters(\n columns: Column[],\n savedQuickFilters: [number, { text: string }][],\n timeZone?: string\n ): QuickFilterMap {\n const importedFilters = savedQuickFilters.map(\n ([columnIndex, quickFilter]: [number, { text: string }]): [\n number,\n { text: string; filter: FilterCondition | null }\n ] => {\n const { text } = quickFilter;\n\n let filter = null;\n try {\n const column = IrisGridUtils.getColumn(columns, columnIndex);\n if (column != null) {\n filter = TableUtils.makeQuickFilter(column, text, timeZone);\n }\n } catch (error) {\n log.error('hydrateQuickFilters error with', text, error);\n }\n\n return [columnIndex, { text, filter }];\n }\n );\n\n return new Map(importedFilters);\n }\n\n /**\n * Export the advanced filters from the provided columns to JSON striginfiable object\n * @param columns The columns for the filters\n * @param advancedFilters The advanced filters to dehydrate\n * @returns The dehydrated advanced filters\n */\n static dehydrateAdvancedFilters(\n columns: Column[],\n advancedFilters: AdvancedFilterMap\n ): [number, { options: AdvancedFilterOptions }][] {\n return [...advancedFilters].map(([columnIndex, advancedFilter]) => {\n const column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n const options = IrisGridUtils.dehydrateAdvancedFilterOptions(\n column,\n advancedFilter.options\n );\n return [columnIndex, { options }];\n });\n }\n\n /**\n * Import the saved advanced filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedAdvancedFilters Exported advanced filters definitions\n * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York\n * @returns The advanced filters to apply to the columns\n */\n static hydrateAdvancedFilters(\n columns: Column[],\n savedAdvancedFilters: [number, { options: AdvancedFilterOptions }][],\n timeZone: string\n ): AdvancedFilterMap {\n const importedFilters = savedAdvancedFilters.map(\n ([columnIndex, advancedFilter]: [\n number,\n { options: AdvancedFilterOptions }\n ]): [\n number,\n { options: AdvancedFilterOptions; filter: FilterCondition | null }\n ] => {\n const column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n const options = IrisGridUtils.hydrateAdvancedFilterOptions(\n column,\n advancedFilter.options\n );\n let filter = null;\n\n try {\n const columnRetrieved = IrisGridUtils.getColumn(columns, columnIndex);\n if (columnRetrieved != null) {\n filter = TableUtils.makeAdvancedFilter(column, options, timeZone);\n }\n } catch (error) {\n log.error('hydrateAdvancedFilters error with', options, error);\n }\n\n return [columnIndex, { options, filter }];\n }\n );\n\n return new Map(importedFilters);\n }\n\n static dehydrateAdvancedFilterOptions(\n column: Column,\n options: AdvancedFilterOptions\n ): AdvancedFilterOptions {\n const { selectedValues, ...otherOptions } = options;\n return {\n selectedValues: selectedValues?.map((value: unknown) =>\n IrisGridUtils.dehydrateValue(value, column?.type)\n ),\n ...otherOptions,\n };\n }\n\n static hydrateAdvancedFilterOptions(\n column: Column,\n options: AdvancedFilterOptions\n ): AdvancedFilterOptions {\n const { selectedValues, ...otherOptions } = options;\n return {\n selectedValues: selectedValues?.map(value =>\n IrisGridUtils.hydrateValue(value, column?.type)\n ),\n ...otherOptions,\n };\n }\n\n static dehydratePendingDataMap(\n columns: Column[],\n pendingDataMap: Map<\n number,\n | UIRow\n | {\n data: Map<ModelIndex, string>;\n }\n >\n ): DehydratedPendingDataMap<CellData | string | null> {\n return [...pendingDataMap].map(\n ([rowIndex, { data }]: [\n number,\n { data: Map<ModelIndex, CellData | string> }\n ]) => [\n rowIndex,\n {\n data: [...data].map(([c, value]) => [\n columns[c].name,\n IrisGridUtils.dehydrateValue(value, columns[c].type),\n ]),\n },\n ]\n );\n }\n\n static hydratePendingDataMap(\n columns: Column[],\n pendingDataMap: DehydratedPendingDataMap<CellData | string | null>\n ): Map<\n number,\n { data: Map<ModelIndex | null, string | CellData | LongWrapper | null> }\n > {\n const columnMap = new Map<ColumnName, number>();\n const getColumnIndex = (columnName: ColumnName) => {\n if (!columnMap.has(columnName)) {\n columnMap.set(\n columnName,\n columns.findIndex(({ name }) => name === columnName)\n );\n }\n return columnMap.get(columnName);\n };\n\n return new Map(\n pendingDataMap.map(\n ([rowIndex, { data }]: [\n number,\n { data: [string, CellData | string | null][] }\n ]) => [\n rowIndex,\n {\n data: new Map(\n data.map(([columnName, value]) => {\n const index = getColumnIndex(columnName);\n assertNotNull(index);\n return [\n getColumnIndex(columnName) ?? null,\n IrisGridUtils.hydrateValue(value, columns[index].type),\n ];\n })\n ),\n },\n ]\n )\n );\n }\n\n /**\n * Dehydrates/serializes a value for storage.\n * @param value The value to dehydrate\n * @param columnType The column type\n */\n static dehydrateValue<T>(value: T, columnType: string): string | T | null {\n if (TableUtils.isDateType(columnType)) {\n return IrisGridUtils.dehydrateDateTime(\n (value as unknown) as number | DateWrapper | Date\n );\n }\n\n if (TableUtils.isLongType(columnType)) {\n return IrisGridUtils.dehydrateLong(value);\n }\n\n return value;\n }\n\n /**\n * Hydrate a value from it's serialized state\n * @param value The dehydrated value that needs to be hydrated\n * @param columnType The type of column\n */\n static hydrateValue<T>(\n value: T,\n columnType: string\n ): DateWrapper | LongWrapper | T | null {\n if (TableUtils.isDateType(columnType)) {\n return IrisGridUtils.hydrateDateTime((value as unknown) as string);\n }\n\n if (TableUtils.isLongType(columnType)) {\n return IrisGridUtils.hydrateLong((value as unknown) as string);\n }\n\n return value;\n }\n\n static dehydrateDateTime(value: number | DateWrapper | Date): string | null {\n return value != null\n ? dh.i18n.DateTimeFormat.format(DateUtils.FULL_DATE_FORMAT, value)\n : null;\n }\n\n static hydrateDateTime(value: string): DateWrapper | null {\n return value != null\n ? dh.i18n.DateTimeFormat.parse(DateUtils.FULL_DATE_FORMAT, value)\n : null;\n }\n\n static dehydrateLong<T>(value: T): string | null {\n return value != null ? `${value}` : null;\n }\n\n static hydrateLong(value: string): LongWrapper | null {\n return value != null ? dh.LongWrapper.ofString(value) : null;\n }\n\n /**\n * Export the sorts from the provided table sorts to JSON stringifiable object\n * @param sorts The table sorts\n * @returns The dehydrated sorts\n */\n static dehydrateSort(\n sorts: Sort[]\n ): {\n column: ModelIndex;\n isAbs: boolean;\n direction: SortDirection;\n }[] {\n return sorts.map(sort => {\n const { column, isAbs, direction } = sort;\n return {\n column: column.index,\n isAbs,\n direction,\n };\n });\n }\n\n /**\n * Import the saved sorts to apply to the table. Does not actually apply the sort.\n * @param columns The columns the sorts will be applied to\n * @param sorts Exported sort definitions\n * @returns The sorts to apply to the table\n */\n static hydrateSort(\n columns: Column[],\n sorts: { column: number; isAbs: boolean; direction: SortDirection }[]\n ): Sort[] {\n return (\n sorts\n .map(sort => {\n const { column: columnIndex, isAbs, direction } = sort;\n if (direction === TableUtils.sortDirection.reverse) {\n return dh.Table.reverse();\n }\n const column = IrisGridUtils.getColumn(columns, columnIndex);\n if (column != null) {\n let columnSort = column.sort();\n if (isAbs) {\n columnSort = columnSort.abs();\n }\n if (direction === TableUtils.sortDirection.descending) {\n columnSort = columnSort.desc();\n } else {\n columnSort = columnSort.asc();\n }\n return columnSort;\n }\n\n return null;\n })\n // If we can't find the column any more, it's null, filter it out\n // If the item is a reverse sort item, filter it out - it will get applied with the `reverseType` property\n // This should only happen when loading a legacy dashboard\n .filter(\n item =>\n item != null && item.direction !== TableUtils.sortDirection.reverse\n ) as Sort[]\n );\n }\n\n /**\n * Pulls just the table settings from the panel state, eg. filters/sorts\n * @param panelState The dehydrated panel state\n * @returns A dehydrated table settings object, { partition, partitionColumn, advancedFilters, quickFilters, sorts }\n */\n static extractTableSettings<AF, QF, S>(\n panelState: {\n irisGridState: { advancedFilters: AF; quickFilters: QF; sorts: S };\n irisGridPanelState: {\n partitionColumn?: ColumnName;\n partition?: unknown;\n };\n },\n inputFilters: InputFilter[] = []\n ): {\n partitionColumn: ColumnName | undefined;\n partition: unknown;\n advancedFilters: AF;\n inputFilters: InputFilter[];\n quickFilters: QF;\n sorts: S;\n } {\n const { irisGridPanelState, irisGridState } = panelState;\n const { partitionColumn, partition } = irisGridPanelState;\n const { advancedFilters, quickFilters, sorts } = irisGridState;\n\n return {\n advancedFilters,\n inputFilters,\n partition,\n partitionColumn,\n quickFilters,\n sorts,\n };\n }\n\n /**\n * Applies the passed in table settings directly to the provided table\n * @param table The table to apply the settings to\n * @param tableSettings Dehydrated table settings extracted with `extractTableSettings`\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n */\n static applyTableSettings(\n table: Table,\n tableSettings: {\n quickFilters?: [\n number,\n {\n text: string;\n }\n ][];\n advancedFilters?: [\n number,\n {\n options: AdvancedFilterOptions;\n }\n ][];\n inputFilters?: InputFilter[];\n sorts?: {\n column: ModelIndex;\n isAbs: boolean;\n direction: SortDirection;\n }[];\n partition?: unknown;\n partitionColumn?: ColumnName;\n },\n timeZone: string\n ): void {\n const { columns } = table;\n\n let quickFilters: FilterCondition[] = [];\n if (tableSettings.quickFilters) {\n quickFilters = IrisGridUtils.getFiltersFromFilterMap(\n IrisGridUtils.hydrateQuickFilters(\n columns,\n tableSettings.quickFilters,\n timeZone\n )\n );\n }\n\n let advancedFilters: FilterCondition[] = [];\n if (tableSettings.advancedFilters) {\n advancedFilters = IrisGridUtils.getFiltersFromFilterMap(\n IrisGridUtils.hydrateAdvancedFilters(\n columns,\n tableSettings.advancedFilters,\n timeZone\n )\n );\n }\n const inputFilters = IrisGridUtils.getFiltersFromInputFilters(\n columns,\n tableSettings.inputFilters,\n timeZone\n );\n\n let sorts: Sort[] = [];\n if (tableSettings.sorts) {\n sorts = IrisGridUtils.hydrateSort(columns, tableSettings.sorts);\n }\n\n let filters = [...quickFilters, ...advancedFilters];\n const { partition, partitionColumn: partitionColumnName } = tableSettings;\n if (partition != null && partitionColumnName != null) {\n const partitionColumn = IrisGridUtils.getColumnByName(\n columns,\n partitionColumnName\n );\n if (partitionColumn) {\n const partitionFilter = partitionColumn\n .filter()\n .eq(dh.FilterValue.ofString(partition));\n filters = [partitionFilter, ...filters];\n }\n }\n filters = [...inputFilters, ...filters];\n\n table.applyFilter(filters);\n table.applySort(sorts);\n }\n\n static getInputFiltersForColumns(\n columns: Column[],\n inputFilters: InputFilter[] = []\n ): InputFilter[] {\n return inputFilters.filter(({ name, type }) =>\n columns.find(\n ({ name: columnName, type: columnType }) =>\n columnName === name && columnType === type\n )\n );\n }\n\n static getFiltersFromInputFilters(\n columns: Column[],\n inputFilters: InputFilter[] = [],\n timeZone?: string\n ): FilterCondition[] {\n return inputFilters\n .map(({ name, type, value }) => {\n const column = columns.find(\n ({ name: columnName, type: columnType }) =>\n columnName === name && columnType === type\n );\n if (column) {\n try {\n return TableUtils.makeQuickFilter(column, value, timeZone);\n } catch (e) {\n // It may be unable to create it because user hasn't completed their input\n log.debug('Unable to create input filter', e);\n }\n }\n\n return null;\n })\n .filter(filter => filter != null) as FilterCondition[];\n }\n\n static getFiltersFromFilterMap(\n filterMap: Map<ModelIndex, QuickFilter | AdvancedFilter | null>\n ): FilterCondition[] {\n const filters = [];\n\n const keys = Array.from(filterMap.keys());\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n const item = filterMap.get(key);\n if (item && item.filter != null) {\n filters.push(item.filter);\n }\n }\n\n return filters;\n }\n\n /**\n * Get array of hidden column indexes\n * @param userColumnWidths Map of user column widths\n * @returns Array of hidden column indexes\n */\n static getHiddenColumns(userColumnWidths: ModelSizeMap): ModelIndex[] {\n return [...userColumnWidths.entries()]\n .filter(([, value]) => value === 0)\n .map(([key]) => key);\n }\n\n static parseCustomColumnNames(customColumns: ColumnName[]): ColumnName[] {\n return customColumns.map(customColumn => customColumn.split('=')[0]);\n }\n\n static getRemovedCustomColumnNames(\n oldCustomColumns: ColumnName[],\n customColumns: ColumnName[]\n ): ColumnName[] {\n const oldCustomColumnsNames = IrisGridUtils.parseCustomColumnNames(\n oldCustomColumns\n );\n const customColumnNames = IrisGridUtils.parseCustomColumnNames(\n customColumns\n );\n return oldCustomColumnsNames.filter(\n oldCustomColumnName => !customColumnNames.includes(oldCustomColumnName)\n );\n }\n\n static removeSortsInColumns(sorts: Sort[], columnNames: string[]): Sort[] {\n return sorts.filter(sort => !columnNames.includes(sort.column.name));\n }\n\n static removeFiltersInColumns<T>(\n columns: Column[],\n filters: Map<number, T>,\n removedColumnNames: ColumnName[]\n ): Map<number, T> {\n const columnNames = columns.map(({ name }) => name);\n const newFilter = new Map(filters);\n removedColumnNames.forEach(columnName =>\n newFilter.delete(columnNames.indexOf(columnName))\n );\n return newFilter;\n }\n\n static removeColumnFromMovedColumns(\n columns: Column[],\n movedColumns: MoveOperation[],\n removedColumnNames: ColumnName[]\n ): MoveOperation[] {\n const columnNames = columns.map(({ name }) => name);\n let newMoves = [...movedColumns];\n for (let i = 0; i < removedColumnNames.length; i += 1) {\n const removedColumnName = removedColumnNames[i];\n let removedColumnIndex = columnNames.findIndex(\n name => name === removedColumnName\n );\n const moves: MoveOperation[] = [];\n for (let j = 0; j < newMoves.length; j += 1) {\n const move = newMoves[j];\n const newMove = { ...move };\n let [fromStart, fromEnd] = Array.isArray(move.from)\n ? move.from\n : [move.from, move.from];\n\n if (removedColumnIndex <= move.to) {\n newMove.to -= 1;\n }\n\n // If equal to fromStart, the new fromStart would stay the same\n // It's just the next element in the range which will have the same index after deletion\n if (removedColumnIndex < fromStart) {\n fromStart -= 1;\n }\n\n if (removedColumnIndex <= fromEnd) {\n fromEnd -= 1;\n }\n\n if (fromStart <= fromEnd && fromStart !== newMove.to) {\n if (fromStart === fromEnd) {\n moves.push({ ...newMove, from: fromStart });\n } else {\n moves.push({ ...newMove, from: [fromStart, fromEnd] });\n }\n }\n\n // get the next index of the removed column after the move is applied\n // eslint-disable-next-line prefer-destructuring\n removedColumnIndex = GridUtils.applyItemMoves(\n removedColumnIndex,\n removedColumnIndex,\n [move]\n )[0][0];\n }\n\n newMoves = moves;\n columnNames.splice(\n columnNames.findIndex(name => name === removedColumnName),\n 1\n );\n }\n return newMoves;\n }\n\n static removeColumnsFromSelectDistinctColumns(\n selectDistinctColumns: ColumnName[],\n removedColumnNames: ColumnName[]\n ): ColumnName[] {\n return selectDistinctColumns.filter(\n columnName => !removedColumnNames.includes(columnName)\n );\n }\n\n static getVisibleColumnsInRange(\n tableColumns: Column[],\n left: number,\n right: number,\n movedColumns: MoveOperation[],\n hiddenColumns: number[]\n ): Column[] {\n const columns: Column[] = [];\n for (let i = left; i <= right; i += 1) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (\n modelIndex >= 0 &&\n modelIndex < tableColumns.length &&\n !hiddenColumns.includes(modelIndex)\n ) {\n columns.push(tableColumns[modelIndex]);\n }\n }\n return columns;\n }\n\n static getPrevVisibleColumns(\n tableColumns: Column[],\n startIndex: VisibleIndex,\n count: number,\n movedColumns: MoveOperation[],\n hiddenColumns: VisibleIndex[]\n ): Column[] {\n const columns = [];\n let i = startIndex;\n while (i >= 0 && columns.length < count) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (\n modelIndex >= 0 &&\n modelIndex < tableColumns.length &&\n !hiddenColumns.includes(modelIndex)\n ) {\n columns.unshift(tableColumns[modelIndex]);\n }\n i -= 1;\n }\n return columns;\n }\n\n static getNextVisibleColumns(\n tableColumns: Column[],\n startIndex: VisibleIndex,\n count: number,\n movedColumns: MoveOperation[],\n hiddenColumns: VisibleIndex[]\n ): Column[] {\n const columns = [];\n let i = startIndex;\n while (i < tableColumns.length && columns.length < count) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (\n modelIndex >= 0 &&\n modelIndex < tableColumns.length &&\n !hiddenColumns.includes(modelIndex)\n ) {\n columns.push(tableColumns[modelIndex]);\n }\n i += 1;\n }\n return columns;\n }\n\n static getColumnsToFetch(\n tableColumns: Column[],\n viewportColumns: Column[],\n alwaysFetchColumnNames: ColumnName[]\n ): Column[] {\n const columnsToFetch = [...viewportColumns];\n alwaysFetchColumnNames.forEach(columnName => {\n const column = tableColumns.find(({ name }) => name === columnName);\n if (column != null && !viewportColumns.includes(column)) {\n columnsToFetch.push(column);\n }\n });\n return columnsToFetch;\n }\n\n static getModelViewportColumns(\n columns: Column[],\n left: number | null,\n right: number | null,\n movedColumns: MoveOperation[],\n hiddenColumns: VisibleIndex[] = [],\n alwaysFetchColumnNames: ColumnName[] = [],\n bufferPages = 0\n ): Column[] | null {\n if (left == null || right == null) {\n return null;\n }\n\n const columnsCenter = IrisGridUtils.getVisibleColumnsInRange(\n columns,\n left,\n right,\n movedColumns,\n hiddenColumns\n );\n const bufferWidth = columnsCenter.length * bufferPages;\n const columnsLeft = IrisGridUtils.getPrevVisibleColumns(\n columns,\n left - 1,\n bufferWidth,\n movedColumns,\n hiddenColumns\n );\n const columnsRight = IrisGridUtils.getNextVisibleColumns(\n columns,\n right + 1,\n bufferWidth,\n movedColumns,\n hiddenColumns\n );\n\n const bufferedColumns = [...columnsLeft, ...columnsCenter, ...columnsRight];\n\n return IrisGridUtils.getColumnsToFetch(\n columns,\n bufferedColumns,\n alwaysFetchColumnNames\n );\n }\n\n /**\n * Get the dh.RangeSet representation of the provided ranges.\n * Ranges are sorted prior to creating the RangeSet. Only the rows are taken into account,\n * RangeSet does not have an option for columns.\n * @param ranges The ranges to get the range set for\n * @returns The rangeset for the provided ranges\n */\n static rangeSetFromRanges(ranges: GridRange[]): RangeSet {\n const rangeSets = ranges\n .slice()\n .sort((a, b): number => {\n assertNotNull(a.startRow);\n assertNotNull(b.startRow);\n return a.startRow - b.startRow;\n })\n .map(range => {\n const { startRow, endRow } = range;\n assertNotNull(startRow);\n assertNotNull(endRow);\n return dh.RangeSet.ofRange(startRow, endRow);\n });\n return dh.RangeSet.ofRanges(rangeSets);\n }\n\n /**\n * Validate whether the ranges passed in are valid to take a snapshot from.\n * Multiple selections are valid if all of the selected rows have the same columns selected.\n *\n * @param ranges The ranges to validate\n * @returns True if the ranges are valid, false otherwise\n */\n static isValidSnapshotRanges(ranges: GridRange[]): boolean {\n if (ranges == null || ranges.length === 0) {\n return false;\n }\n\n // To verify all the rows selected have the same set of columns selected, build a map with string representations\n // of each range.\n const rangeMap = new Map();\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n const rowMapIndex = `${range.startRow}:${range.endRow}`;\n const columnMapIndex = `${range.startColumn}:${range.endColumn}`;\n if (!rangeMap.has(rowMapIndex)) {\n rangeMap.set(rowMapIndex, []);\n }\n rangeMap.get(rowMapIndex).push(columnMapIndex);\n }\n\n const keys = [...rangeMap.keys()];\n const matchColumnRanges = rangeMap.get(keys[0]).sort().join(',');\n for (let i = 1; i < keys.length; i += 1) {\n if (rangeMap.get(keys[i]).sort().join(',') !== matchColumnRanges) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Check if the provided value is a valid table index\n * @param value A value to check if it's a valid table index\n */\n static isValidIndex(value: unknown): boolean {\n if (!Number.isInteger(value)) {\n return false;\n }\n if (!(typeof value === 'number')) {\n return false;\n }\n return value >= 0;\n }\n\n /**\n * Returns all columns used in any of the ranges provided\n * @param ranges The model ranges to get columns for\n * @param allColumns All the columns to pull from\n * @returns The columns selected in the range\n */\n static columnsFromRanges(\n ranges: GridRange[],\n allColumns: Column[]\n ): Column[] {\n if (ranges == null || ranges.length === 0) {\n return [];\n }\n if (ranges[0].startColumn === null && ranges[0].endColumn === null) {\n // Snapshot of all the columns\n return allColumns;\n }\n\n const columnSet = new Set<ModelIndex>();\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n assertNotNull(range.startColumn);\n assertNotNull(range.endColumn);\n for (\n let c = range.startColumn ?? 0;\n c <= (range.endColumn ?? allColumns.length - 1);\n c += 1\n ) {\n columnSet.add(c);\n }\n }\n return [...columnSet].map(c => allColumns[c]);\n }\n\n /**\n * Transforms an iris data snapshot into a simple data matrix\n * @param data The Iris formatted table data\n * @returns A matrix of the values of the data\n */\n static snapshotDataToMatrix(data: TableData): unknown[][] {\n const { columns, rows } = data;\n const result = [];\n for (let r = 0; r < rows.length; r += 1) {\n const row = rows[r];\n const rowData = [];\n for (let c = 0; c < columns.length; c += 1) {\n const column = columns[c];\n const value = row.get(column);\n rowData.push(value);\n }\n result.push(rowData);\n }\n return result;\n }\n\n /**\n * Hydrate model rollup config\n * @param originalColumns Original model columns\n * @param config Dehydrated rollup config\n * @param aggregationSettings Aggregation settings\n * @returns Rollup config for the model\n */\n static getModelRollupConfig(\n originalColumns: Column[],\n config: UIRollupConfig | undefined,\n aggregationSettings: AggregationSettings\n ): RollupConfig | null {\n if ((config?.columns?.length ?? 0) === 0) {\n return null;\n }\n\n const {\n columns: groupingColumns = [],\n showConstituents: includeConstituents = true,\n showNonAggregatedColumns = true,\n includeDescriptions = true,\n } = config ?? {};\n const { aggregations = [] } = aggregationSettings ?? {};\n const aggregationColumns = aggregations.map(\n ({ operation, selected, invert }) =>\n AggregationUtils.isRollupOperation(operation)\n ? []\n : AggregationUtils.getOperationColumnNames(\n originalColumns,\n operation,\n selected,\n invert\n )\n );\n\n const aggregationMap = {} as Record<AggregationOperation, string[]>;\n // Aggregation columns should show first, add them first\n for (let i = 0; i < aggregations.length; i += 1) {\n aggregationMap[aggregations[i].operation] = aggregationColumns[i];\n }\n\n if (showNonAggregatedColumns) {\n // Filter out any column that already has an aggregation or grouping\n const nonAggregatedColumnSet = new Set(\n originalColumns\n .map(c => c.name)\n .filter(name => !groupingColumns.includes(name))\n );\n aggregationColumns.forEach(columns => {\n columns.forEach(name => nonAggregatedColumnSet.delete(name));\n });\n\n if (nonAggregatedColumnSet.size > 0) {\n const existingColumns =\n aggregationMap[AggregationOperation.FIRST] ?? [];\n aggregationMap[AggregationOperation.FIRST] = [\n ...existingColumns,\n ...nonAggregatedColumnSet,\n ];\n }\n }\n\n return {\n groupingColumns,\n includeConstituents,\n includeDescriptions,\n aggregations: aggregationMap,\n };\n }\n\n /**\n * @param pendingDataMap Map of pending data\n * @returns A map with the errors in the pending data\n */\n static getPendingErrors(pendingDataMap: Map<number, UIRow>): void {\n pendingDataMap.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(`Invalid rowIndex ${rowIndex}`);\n }\n\n const { data } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(`Invalid columnIndex ${columnIndex}`);\n }\n });\n });\n }\n\n /**\n * Retrieves a column from the provided array at the index, or `null` and logs an error if it's invalid\n *\n * @param columns The columns to get the column from\n * @param columnIndex The column index to get\n */\n static getColumn(columns: Column[], columnIndex: ModelIndex): Column | null {\n if (columnIndex < columns.length) {\n return columns[columnIndex];\n }\n\n log.error('Unable to retrieve column', columnIndex, '>=', columns.length);\n\n return null;\n }\n\n /**\n * Retrieves a column from the provided array matching the name, or `null` and logs an error if not found\n * @param columns The columns to get the column from\n * @param columnName The column name to retrieve\n */\n static getColumnByName(\n columns: Column[],\n columnName: ColumnName\n ): Column | undefined {\n const column = columns.find(({ name }) => name === columnName);\n if (column == null) {\n log.error(\n 'Unable to retrieve column by name',\n columnName,\n columns.map(({ name }) => name)\n );\n }\n\n return column;\n }\n\n /**\n * Get filter configs with column names changed to indexes, exclude missing columns\n * @param columns The columns to get column indexes from\n * @param filters Filter configs\n * @returns Updated filter configs with column names changed to indexes\n */\n static changeFilterColumnNamesToIndexes<T>(\n columns: Column[],\n filters: { name: ColumnName; filter: T }[]\n ): [number, T][] {\n return filters\n .map(({ name, filter }): null | [number, T] => {\n const index = columns.findIndex(column => column.name === name);\n return index < 0 ? null : [index, filter];\n })\n .filter(filterConfig => filterConfig != null) as [number, T][];\n }\n\n /**\n * @param columnType The column type that the filters will be applied to.\n * @param filterList The list of filters to be combined.\n * @returns The combination of the filters in filterList as text.\n */\n static combineFiltersFromList(\n columnType: string,\n filterList: FilterData[]\n ): string {\n filterList.sort((a, b) => {\n // move all 'equals' comparisons to end of list\n if (a.operator === 'eq' && b.operator !== 'eq') {\n return 1;\n }\n if (a.operator !== 'eq' && b.operator === 'eq') {\n return -1;\n }\n return a.startColumnIndex - b.startColumnIndex;\n });\n\n let combinedText = '';\n for (let i = 0; i < filterList.length; i += 1) {\n const { text, value, operator } = filterList[i];\n if (value !== undefined) {\n let symbol = '';\n if (operator !== undefined) {\n if (value == null && operator === 'eq') {\n symbol = '=';\n } else if (operator !== 'eq') {\n if (operator === 'startsWith' || operator === 'endsWith') {\n symbol = '*';\n } else {\n symbol = TableUtils.getFilterOperatorString(operator);\n }\n }\n }\n\n let filterText = `${symbol}${text}`;\n if (operator === 'startsWith') {\n filterText = `${text}${symbol}`;\n }\n if (\n columnType != null &&\n value !== null &&\n TableUtils.isCharType(columnType)\n ) {\n filterText = `${symbol}${String.fromCharCode(parseInt(text, 10))}`;\n }\n if (i !== 0) {\n combinedText += operator === 'eq' ? ' || ' : ' && ';\n }\n combinedText += filterText;\n }\n }\n return combinedText;\n }\n}\n\nexport default IrisGridUtils;\n"],"mappings":"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"}
@@ -1,20 +1,13 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
2
  class MissingKeyError extends Error {
4
3
  constructor(rowIndex, columnName) {
5
4
  super("".concat(columnName, " can't be empty (on pending row ").concat(rowIndex + 1, ")"));
6
-
7
5
  _defineProperty(this, "isMissingKey", true);
8
-
9
6
  _defineProperty(this, "rowIndex", void 0);
10
-
11
7
  _defineProperty(this, "columnName", void 0);
12
-
13
8
  this.rowIndex = rowIndex;
14
9
  this.columnName = columnName;
15
10
  }
16
-
17
11
  }
18
-
19
12
  export default MissingKeyError;
20
13
  //# sourceMappingURL=MissingKeyError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MissingKeyError.js","names":["MissingKeyError","Error","constructor","rowIndex","columnName"],"sources":["../src/MissingKeyError.ts"],"sourcesContent":["import { ModelIndex } from '@deephaven/grid';\nimport { ColumnName } from './CommonTypes';\n\nclass MissingKeyError extends Error {\n isMissingKey = true;\n\n rowIndex: ModelIndex;\n\n columnName: ColumnName;\n\n constructor(rowIndex: ModelIndex, columnName: ColumnName) {\n super(`${columnName} can't be empty (on pending row ${rowIndex + 1})`);\n this.rowIndex = rowIndex;\n this.columnName = columnName;\n }\n}\n\nexport default MissingKeyError;\n"],"mappings":";;AAGA,MAAMA,eAAN,SAA8BC,KAA9B,CAAoC;EAOlCC,WAAW,CAACC,QAAD,EAAuBC,UAAvB,EAA+C;IACxD,gBAASA,UAAT,6CAAsDD,QAAQ,GAAG,CAAjE;;IADwD,sCAN3C,IAM2C;;IAAA;;IAAA;;IAExD,KAAKA,QAAL,GAAgBA,QAAhB;IACA,KAAKC,UAAL,GAAkBA,UAAlB;EACD;;AAXiC;;AAcpC,eAAeJ,eAAf"}
1
+ {"version":3,"file":"MissingKeyError.js","names":["MissingKeyError","Error","constructor","rowIndex","columnName"],"sources":["../src/MissingKeyError.ts"],"sourcesContent":["import { ModelIndex } from '@deephaven/grid';\nimport { ColumnName } from './CommonTypes';\n\nclass MissingKeyError extends Error {\n isMissingKey = true;\n\n rowIndex: ModelIndex;\n\n columnName: ColumnName;\n\n constructor(rowIndex: ModelIndex, columnName: ColumnName) {\n super(`${columnName} can't be empty (on pending row ${rowIndex + 1})`);\n this.rowIndex = rowIndex;\n this.columnName = columnName;\n }\n}\n\nexport default MissingKeyError;\n"],"mappings":";AAGA,MAAMA,eAAe,SAASC,KAAK,CAAC;EAOlCC,WAAW,CAACC,QAAoB,EAAEC,UAAsB,EAAE;IACxD,KAAK,WAAIA,UAAU,6CAAmCD,QAAQ,GAAG,CAAC,OAAI;IAAC,sCAP1D,IAAI;IAAA;IAAA;IAQjB,IAAI,CAACA,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,UAAU,GAAGA,UAAU;EAC9B;AACF;AAEA,eAAeJ,eAAe"}