@deephaven/iris-grid 0.22.3-embed-pandas.11 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/dist/AdvancedFilterCreator.d.ts +1 -1
  2. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  3. package/dist/AdvancedFilterCreator.js +7 -65
  4. package/dist/AdvancedFilterCreator.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorFilterItem.d.ts +1 -1
  6. package/dist/AdvancedFilterCreatorFilterItem.d.ts.map +1 -1
  7. package/dist/AdvancedFilterCreatorFilterItem.js +0 -23
  8. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  9. package/dist/AdvancedFilterCreatorSelectValue.js +0 -52
  10. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  11. package/dist/AdvancedFilterCreatorSelectValueList.d.ts +1 -5
  12. package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
  13. package/dist/AdvancedFilterCreatorSelectValueList.js +2 -42
  14. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  15. package/dist/ColumnHeaderGroup.js +0 -11
  16. package/dist/ColumnHeaderGroup.js.map +1 -1
  17. package/dist/ColumnStatistics.d.ts +0 -2
  18. package/dist/ColumnStatistics.d.ts.map +1 -1
  19. package/dist/ColumnStatistics.js +8 -40
  20. package/dist/ColumnStatistics.js.map +1 -1
  21. package/dist/CommonTypes.d.ts +14 -14
  22. package/dist/CommonTypes.d.ts.map +1 -1
  23. package/dist/CrossColumnSearch.js +2 -23
  24. package/dist/CrossColumnSearch.js.map +1 -1
  25. package/dist/FilterInputField.js +2 -36
  26. package/dist/FilterInputField.js.map +1 -1
  27. package/dist/GotoRow.d.ts +1 -1
  28. package/dist/GotoRow.d.ts.map +1 -1
  29. package/dist/GotoRow.js +2 -7
  30. package/dist/GotoRow.js.map +1 -1
  31. package/dist/IrisGrid.d.ts +46 -40
  32. package/dist/IrisGrid.d.ts.map +1 -1
  33. package/dist/IrisGrid.js +84 -526
  34. package/dist/IrisGrid.js.map +1 -1
  35. package/dist/IrisGridBottomBar.d.ts +2 -2
  36. package/dist/IrisGridBottomBar.d.ts.map +1 -1
  37. package/dist/IrisGridBottomBar.js +2 -2
  38. package/dist/IrisGridBottomBar.js.map +1 -1
  39. package/dist/IrisGridCellOverflowModal.d.ts.map +1 -1
  40. package/dist/IrisGridCellOverflowModal.js +13 -46
  41. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  42. package/dist/IrisGridCopyHandler.d.ts +3 -3
  43. package/dist/IrisGridCopyHandler.d.ts.map +1 -1
  44. package/dist/IrisGridCopyHandler.js +6 -53
  45. package/dist/IrisGridCopyHandler.js.map +1 -1
  46. package/dist/IrisGridMetricCalculator.js +2 -12
  47. package/dist/IrisGridMetricCalculator.js.map +1 -1
  48. package/dist/IrisGridModel.d.ts +3 -3
  49. package/dist/IrisGridModel.d.ts.map +1 -1
  50. package/dist/IrisGridModel.js +32 -58
  51. package/dist/IrisGridModel.js.map +1 -1
  52. package/dist/IrisGridModelFactory.js +0 -7
  53. package/dist/IrisGridModelFactory.js.map +1 -1
  54. package/dist/IrisGridModelUpdater.js +0 -4
  55. package/dist/IrisGridModelUpdater.js.map +1 -1
  56. package/dist/IrisGridPartitionSelector.js +0 -23
  57. package/dist/IrisGridPartitionSelector.js.map +1 -1
  58. package/dist/IrisGridProxyModel.js +9 -153
  59. package/dist/IrisGridProxyModel.js.map +1 -1
  60. package/dist/IrisGridRenderer.d.ts +1 -1
  61. package/dist/IrisGridRenderer.d.ts.map +1 -1
  62. package/dist/IrisGridRenderer.js +41 -183
  63. package/dist/IrisGridRenderer.js.map +1 -1
  64. package/dist/IrisGridShortcuts.js.map +1 -1
  65. package/dist/IrisGridTableModel.d.ts +3 -3
  66. package/dist/IrisGridTableModel.d.ts.map +1 -1
  67. package/dist/IrisGridTableModel.js +10 -90
  68. package/dist/IrisGridTableModel.js.map +1 -1
  69. package/dist/IrisGridTableModelTemplate.d.ts +3 -3
  70. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  71. package/dist/IrisGridTableModelTemplate.js +70 -461
  72. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  73. package/dist/IrisGridTestUtils.js +0 -23
  74. package/dist/IrisGridTestUtils.js.map +1 -1
  75. package/dist/IrisGridTheme.d.ts +1 -1
  76. package/dist/IrisGridTheme.d.ts.map +1 -1
  77. package/dist/IrisGridTheme.js.map +1 -1
  78. package/dist/IrisGridTreeTableModel.js +3 -42
  79. package/dist/IrisGridTreeTableModel.js.map +1 -1
  80. package/dist/IrisGridUtils.d.ts +13 -7
  81. package/dist/IrisGridUtils.d.ts.map +1 -1
  82. package/dist/IrisGridUtils.js +98 -196
  83. package/dist/IrisGridUtils.js.map +1 -1
  84. package/dist/MissingKeyError.js +0 -7
  85. package/dist/MissingKeyError.js.map +1 -1
  86. package/dist/PartitionSelectorSearch.d.ts +2 -2
  87. package/dist/PartitionSelectorSearch.js +2 -48
  88. package/dist/PartitionSelectorSearch.js.map +1 -1
  89. package/dist/PendingDataBottomBar.d.ts +2 -2
  90. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  91. package/dist/PendingDataBottomBar.js +2 -7
  92. package/dist/PendingDataBottomBar.js.map +1 -1
  93. package/dist/TableViewportUpdater.d.ts +2 -2
  94. package/dist/TableViewportUpdater.d.ts.map +1 -1
  95. package/dist/TableViewportUpdater.js +3 -29
  96. package/dist/TableViewportUpdater.js.map +1 -1
  97. package/dist/ToastBottomBar.d.ts +2 -2
  98. package/dist/ToastBottomBar.d.ts.map +1 -1
  99. package/dist/ToastBottomBar.js +2 -4
  100. package/dist/ToastBottomBar.js.map +1 -1
  101. package/dist/TreeTableViewportUpdater.js +0 -21
  102. package/dist/TreeTableViewportUpdater.js.map +1 -1
  103. package/dist/format-context-menus/CustomFormatAction.d.ts +1 -1
  104. package/dist/format-context-menus/CustomFormatAction.d.ts.map +1 -1
  105. package/dist/format-context-menus/CustomFormatAction.js +4 -25
  106. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  107. package/dist/format-context-menus/DateTimeFormatContextMenu.js +0 -7
  108. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
  109. package/dist/format-context-menus/DecimalFormatContextMenu.js +0 -9
  110. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
  111. package/dist/format-context-menus/FormatContextMenuUtils.js +3 -9
  112. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
  113. package/dist/format-context-menus/IntegerFormatContextMenu.js +0 -8
  114. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
  115. package/dist/format-context-menus/index.js.map +1 -1
  116. package/dist/index.d.ts +3 -3
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +3 -3
  119. package/dist/index.js.map +1 -1
  120. package/dist/key-handlers/ClearFilterKeyHandler.js +0 -8
  121. package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
  122. package/dist/key-handlers/CopyKeyHandler.js +1 -10
  123. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  124. package/dist/key-handlers/ReverseKeyHandler.js +0 -11
  125. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  126. package/dist/key-handlers/index.js.map +1 -1
  127. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +2 -32
  128. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  129. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +4 -34
  130. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  131. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +0 -20
  132. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  133. package/dist/mousehandlers/IrisGridContextMenuHandler.js +17 -107
  134. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  135. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +0 -9
  136. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  137. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +0 -17
  138. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  139. package/dist/mousehandlers/IrisGridSortMouseHandler.js +2 -15
  140. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  141. package/dist/mousehandlers/PendingMouseHandler.js +0 -6
  142. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  143. package/dist/mousehandlers/index.js.map +1 -1
  144. package/dist/sidebar/AdvancedSettings.js.map +1 -1
  145. package/dist/sidebar/AdvancedSettingsMenu.d.ts +6 -6
  146. package/dist/sidebar/AdvancedSettingsMenu.d.ts.map +1 -1
  147. package/dist/sidebar/AdvancedSettingsMenu.js +2 -6
  148. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  149. package/dist/sidebar/AdvancedSettingsType.js +0 -2
  150. package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
  151. package/dist/sidebar/ChartBuilder.d.ts +2 -2
  152. package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
  153. package/dist/sidebar/ChartBuilder.js +2 -46
  154. package/dist/sidebar/ChartBuilder.js.map +1 -1
  155. package/dist/sidebar/CustomColumnBuilder.d.ts +2 -2
  156. package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
  157. package/dist/sidebar/CustomColumnBuilder.js +6 -58
  158. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  159. package/dist/sidebar/CustomColumnInput.js +4 -15
  160. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  161. package/dist/sidebar/InputEditor.js +5 -36
  162. package/dist/sidebar/InputEditor.js.map +1 -1
  163. package/dist/sidebar/OptionType.js +0 -2
  164. package/dist/sidebar/OptionType.js.map +1 -1
  165. package/dist/sidebar/RollupRows.d.ts +3 -3
  166. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  167. package/dist/sidebar/RollupRows.js +9 -65
  168. package/dist/sidebar/RollupRows.js.map +1 -1
  169. package/dist/sidebar/SelectDistinctBuilder.js +0 -13
  170. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  171. package/dist/sidebar/TableCsvExporter.css +3 -0
  172. package/dist/sidebar/TableCsvExporter.css.map +1 -1
  173. package/dist/sidebar/TableCsvExporter.d.ts +12 -6
  174. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  175. package/dist/sidebar/TableCsvExporter.js +88 -82
  176. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  177. package/dist/sidebar/TableSaver.d.ts +5 -3
  178. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  179. package/dist/sidebar/TableSaver.js +52 -132
  180. package/dist/sidebar/TableSaver.js.map +1 -1
  181. package/dist/sidebar/VisibilityOrderingBuilder.d.ts +5 -4
  182. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
  183. package/dist/sidebar/VisibilityOrderingBuilder.js +37 -116
  184. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  185. package/dist/sidebar/aggregations/AggregationEdit.d.ts +2 -2
  186. package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
  187. package/dist/sidebar/aggregations/AggregationEdit.js +2 -14
  188. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  189. package/dist/sidebar/aggregations/AggregationOperation.js +0 -2
  190. package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
  191. package/dist/sidebar/aggregations/AggregationUtils.js +2 -5
  192. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  193. package/dist/sidebar/aggregations/Aggregations.d.ts +4 -4
  194. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  195. package/dist/sidebar/aggregations/Aggregations.js +2 -12
  196. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  197. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +1 -1
  198. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
  199. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +2 -16
  200. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  201. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +1 -1
  202. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  203. package/dist/sidebar/conditional-formatting/ConditionEditor.js +2 -35
  204. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  205. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts +4 -4
  206. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
  207. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +2 -12
  208. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  209. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +0 -3
  210. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
  211. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +5 -5
  212. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  213. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +16 -26
  214. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  215. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +3 -3
  216. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  217. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +9 -172
  218. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  219. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts +1 -1
  220. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  221. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +2 -16
  222. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  223. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts +1 -1
  224. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts.map +1 -1
  225. package/dist/sidebar/conditional-formatting/StyleEditor.js +2 -12
  226. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  227. package/dist/sidebar/icons/BarIcon.js +0 -3
  228. package/dist/sidebar/icons/BarIcon.js.map +1 -1
  229. package/dist/sidebar/icons/FormatColumnWhereIcon.js +2 -5
  230. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
  231. package/dist/sidebar/icons/FormatRowWhereIcon.js +2 -5
  232. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
  233. package/dist/sidebar/icons/HistogramIcon.js +0 -3
  234. package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
  235. package/dist/sidebar/icons/LineIcon.js +0 -3
  236. package/dist/sidebar/icons/LineIcon.js.map +1 -1
  237. package/dist/sidebar/icons/PieIcon.js +0 -3
  238. package/dist/sidebar/icons/PieIcon.js.map +1 -1
  239. package/dist/sidebar/icons/ScatterIcon.js +0 -3
  240. package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
  241. package/dist/sidebar/icons/index.js.map +1 -1
  242. package/dist/sidebar/index.js.map +1 -1
  243. package/package.json +15 -15
@@ -1,87 +1,58 @@
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
  import { PureComponent } from 'react';
4
3
  import { WritableStream as ponyfillWritableStream } from 'web-streams-polyfill/ponyfill';
5
4
  import dh from '@deephaven/jsapi-shim';
6
5
  import Log from '@deephaven/log';
7
6
  import { memoizeClear } from '@deephaven/grid';
8
- import { FormatterUtils } from '@deephaven/jsapi-utils';
7
+ import { FormatterUtils, TableUtils } from '@deephaven/jsapi-utils';
9
8
  import { PromiseUtils, assertNotNull } from '@deephaven/utils';
10
9
  import IrisGridUtils from "../IrisGridUtils.js";
11
10
  var log = Log.module('TableSaver');
12
-
11
+ var UNFORMATTED_DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z";
13
12
  function isUpdateEventData(data) {
14
13
  return data.added !== undefined;
15
14
  }
16
-
17
15
  function assertIsUpdateEventData(data) {
18
16
  if (!isUpdateEventData(data)) {
19
17
  throw new Error('event is not UpdateEventData');
20
18
  }
21
19
  }
22
-
23
20
  export default class TableSaver extends PureComponent {
24
21
  static csvEscapeString(str) {
25
22
  return "\"".concat(str.replace(/"/g, '""'), "\"");
26
23
  }
27
-
28
24
  constructor(props) {
29
25
  var _window$WritableStrea, _window$WritableStrea2;
30
-
31
26
  super(props);
32
-
33
27
  _defineProperty(this, "sw", void 0);
34
-
35
28
  _defineProperty(this, "port", void 0);
36
-
37
29
  _defineProperty(this, "fileWriter", void 0);
38
-
39
30
  _defineProperty(this, "table", void 0);
40
-
41
31
  _defineProperty(this, "tableSubscription", void 0);
42
-
43
32
  _defineProperty(this, "columns", void 0);
44
-
45
33
  _defineProperty(this, "fileName", void 0);
46
-
34
+ _defineProperty(this, "includeColumnHeaders", void 0);
35
+ _defineProperty(this, "useUnformattedValues", void 0);
47
36
  _defineProperty(this, "chunkRows", void 0);
48
-
49
37
  _defineProperty(this, "gridRanges", void 0);
50
-
51
38
  _defineProperty(this, "gridRangeCounter", void 0);
52
-
53
39
  _defineProperty(this, "rangedSnapshotsTotal", void 0);
54
-
55
40
  _defineProperty(this, "rangedSnapshotCounter", void 0);
56
-
57
41
  _defineProperty(this, "snapshotsTotal", void 0);
58
-
59
42
  _defineProperty(this, "snapshotCounter", void 0);
60
-
61
43
  _defineProperty(this, "snapshotsBuffer", void 0);
62
-
63
44
  _defineProperty(this, "currentSnapshotIndex", void 0);
64
-
65
45
  _defineProperty(this, "snapshotPending", void 0);
66
-
67
46
  _defineProperty(this, "cancelableSnapshots", void 0);
68
-
69
47
  _defineProperty(this, "WritableStream", (_window$WritableStrea = window.WritableStream) !== null && _window$WritableStrea !== void 0 ? _window$WritableStrea : ponyfillWritableStream);
70
-
71
48
  _defineProperty(this, "streamTimeout", void 0);
72
-
73
49
  _defineProperty(this, "snapshotHandlerTimeout", void 0);
74
-
75
50
  _defineProperty(this, "downloadStartTime", void 0);
76
-
77
51
  _defineProperty(this, "iframes", void 0);
78
-
79
52
  _defineProperty(this, "useBlobFallback", void 0);
80
-
81
53
  _defineProperty(this, "getCachedCustomColumnFormatFlag", memoizeClear(FormatterUtils.isCustomColumnFormatDefined, {
82
54
  max: 10000
83
55
  }));
84
-
85
56
  this.handlePortMessage = this.handlePortMessage.bind(this);
86
57
  this.handleSnapshotResolved = this.handleSnapshotResolved.bind(this);
87
58
  this.handleDownloadTimeout = this.handleDownloadTimeout.bind(this);
@@ -90,14 +61,19 @@ export default class TableSaver extends PureComponent {
90
61
  this.gridRangeCounter = 0;
91
62
  this.rangedSnapshotsTotal = [];
92
63
  this.rangedSnapshotCounter = 0;
64
+ this.includeColumnHeaders = true;
65
+ this.useUnformattedValues = false;
93
66
  this.snapshotsTotal = 0;
94
67
  this.snapshotCounter = 0;
95
68
  this.snapshotsBuffer = new Map();
96
69
  this.currentSnapshotIndex = 0;
97
70
  this.snapshotPending = 0;
98
- this.cancelableSnapshots = []; // WritableStream is not supported in Firefox (also IE) yet. use ponyfillWritableStream instead
71
+ this.cancelableSnapshots = [];
72
+
73
+ // WritableStream is not supported in Firefox (also IE) yet. use ponyfillWritableStream instead
74
+ this.WritableStream = (_window$WritableStrea2 = window.WritableStream) !== null && _window$WritableStrea2 !== void 0 ? _window$WritableStrea2 : ponyfillWritableStream;
99
75
 
100
- this.WritableStream = (_window$WritableStrea2 = window.WritableStream) !== null && _window$WritableStrea2 !== void 0 ? _window$WritableStrea2 : ponyfillWritableStream; // Due to an open issue in Chromium, readableStream.cancel() is never called when a user cancel the stream from Chromium's UI and the stream goes on even it's canceled.
76
+ // Due to an open issue in Chromium, readableStream.cancel() is never called when a user cancel the stream from Chromium's UI and the stream goes on even it's canceled.
101
77
  // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.
102
78
  // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.
103
79
  // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494
@@ -105,7 +81,6 @@ export default class TableSaver extends PureComponent {
105
81
  this.iframes = [];
106
82
  this.useBlobFallback = false;
107
83
  }
108
-
109
84
  componentDidMount() {
110
85
  var {
111
86
  getDownloadWorker
@@ -120,46 +95,37 @@ export default class TableSaver extends PureComponent {
120
95
  this.useBlobFallback = true;
121
96
  });
122
97
  }
123
-
124
98
  componentWillUnmount() {
125
99
  if (this.iframes.length > 0) {
126
100
  this.iframes.forEach(iframe => {
127
101
  iframe.remove();
128
102
  });
129
103
  }
130
-
131
104
  if (this.streamTimeout) clearTimeout(this.streamTimeout);
132
105
  if (this.snapshotHandlerTimeout) clearTimeout(this.snapshotHandlerTimeout);
133
106
  }
134
-
135
107
  createWriterStream(port) {
136
108
  // use blob fall back if it's safari
137
109
  var useBlob = this.useBlobFallback;
138
110
  var chunks = [];
139
111
  var encode = null;
140
-
141
112
  if (useBlob) {
142
113
  encode = TextEncoder.prototype.encode.bind(new TextEncoder());
143
114
  }
144
-
145
115
  var {
146
116
  fileName
147
117
  } = this;
148
118
  var streamConfig = {};
149
-
150
119
  if (useBlob) {
151
120
  streamConfig.write = chunk => {
152
121
  assertNotNull(encode);
153
-
154
122
  if (chunk.header !== undefined) {
155
123
  chunks.push(encode(chunk.header));
156
124
  }
157
-
158
125
  if (chunk.rows !== undefined) {
159
126
  chunks.push(encode(chunk.rows));
160
127
  }
161
128
  };
162
-
163
129
  streamConfig.close = () => {
164
130
  assertNotNull(fileName);
165
131
  var blob = new Blob(chunks, {
@@ -170,7 +136,6 @@ export default class TableSaver extends PureComponent {
170
136
  link.download = fileName;
171
137
  link.click();
172
138
  };
173
-
174
139
  streamConfig.abort = () => {
175
140
  port.postMessage({
176
141
  cancel: true
@@ -181,14 +146,12 @@ export default class TableSaver extends PureComponent {
181
146
  streamConfig.write = chunk => {
182
147
  port.postMessage(chunk);
183
148
  };
184
-
185
149
  streamConfig.close = () => {
186
150
  port.postMessage({
187
151
  end: true
188
152
  });
189
153
  port.close();
190
154
  };
191
-
192
155
  streamConfig.abort = () => {
193
156
  port.postMessage({
194
157
  cancel: true
@@ -196,85 +159,74 @@ export default class TableSaver extends PureComponent {
196
159
  port.close();
197
160
  };
198
161
  }
199
-
200
162
  return new this.WritableStream(streamConfig);
201
163
  }
202
-
203
- startDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges) {
164
+ startDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues) {
204
165
  // don't trigger another download when a download is ongoing
205
166
  var {
206
167
  isDownloading
207
168
  } = this.props;
208
-
209
169
  if (isDownloading) {
210
170
  return;
211
171
  }
212
-
213
172
  this.downloadStartTime = Date.now();
214
173
  log.info("start downloading ".concat(fileName));
215
174
  this.table = frozenTable;
216
175
  this.columns = IrisGridUtils.columnsFromRanges(modelRanges, frozenTable.columns);
217
176
  this.tableSubscription = tableSubscription;
218
- this.gridRanges = snapshotRanges; // Make filename RFC5987 compatible
177
+ this.gridRanges = snapshotRanges;
178
+ this.includeColumnHeaders = includeColumnHeaders;
179
+ this.useUnformattedValues = useUnformattedValues;
219
180
 
181
+ // Make filename RFC5987 compatible
220
182
  var encodedFileName = encodeURIComponent(fileName.replace(/\//g, ':')).replace(/['()]/g, escape).replace(/\*/g, '%2A');
221
183
  var messageChannel = new MessageChannel();
222
184
  this.port = messageChannel.port1;
223
185
  this.fileName = fileName;
224
- this.fileWriter = this.createWriterStream(this.port).getWriter(); // if the browser doesn't support stream or there's no active service worker, use blobs for table download
186
+ this.fileWriter = this.createWriterStream(this.port).getWriter();
225
187
 
188
+ // if the browser doesn't support stream or there's no active service worker, use blobs for table download
226
189
  if (this.useBlobFallback) {
227
- this.writeCsvTable();
190
+ this.writeCsvTable(includeColumnHeaders);
228
191
  return;
229
192
  }
230
-
231
193
  if (this.sw) {
232
194
  // send file name and port to service worker
233
195
  this.sw.postMessage({
234
196
  encodedFileName
235
197
  }, [messageChannel.port2]);
236
198
  }
237
-
238
199
  this.port.onmessage = this.handlePortMessage;
239
200
  }
240
-
241
201
  finishDownload() {
242
202
  if (this.table) {
243
203
  this.table.close();
244
204
  }
245
-
246
205
  if (this.tableSubscription) {
247
206
  this.tableSubscription.close();
248
207
  }
249
-
250
208
  if (this.fileWriter) {
251
209
  this.fileWriter.close();
252
210
  }
253
-
254
211
  var {
255
212
  onDownloadCompleted
256
213
  } = this.props;
257
214
  onDownloadCompleted();
258
215
  this.resetTableSaver();
259
-
260
216
  if (this.downloadStartTime !== undefined) {
261
217
  log.info("download finished, total elapsed time ".concat((Date.now() - this.downloadStartTime) / 1000, " seconds"));
262
218
  }
263
219
  }
264
-
265
220
  cancelDownload() {
266
221
  if (this.table) {
267
222
  this.table.close();
268
223
  }
269
-
270
224
  if (this.tableSubscription) {
271
225
  this.tableSubscription.close();
272
226
  }
273
-
274
227
  if (this.fileWriter) {
275
228
  this.fileWriter.abort();
276
229
  }
277
-
278
230
  this.cancelableSnapshots.forEach(cancelable => {
279
231
  if (cancelable) {
280
232
  cancelable.catch(() => null);
@@ -287,7 +239,6 @@ export default class TableSaver extends PureComponent {
287
239
  onDownloadCanceled();
288
240
  this.resetTableSaver();
289
241
  }
290
-
291
242
  resetTableSaver() {
292
243
  this.table = undefined;
293
244
  this.tableSubscription = undefined;
@@ -297,47 +248,40 @@ export default class TableSaver extends PureComponent {
297
248
  this.gridRangeCounter = 0;
298
249
  this.rangedSnapshotsTotal = [];
299
250
  this.rangedSnapshotCounter = 0;
251
+ this.includeColumnHeaders = true;
252
+ this.useUnformattedValues = false;
300
253
  this.snapshotsTotal = 0;
301
254
  this.snapshotCounter = 0;
302
255
  this.snapshotsBuffer = new Map();
303
256
  this.currentSnapshotIndex = 0;
304
257
  this.snapshotPending = 0;
305
258
  this.cancelableSnapshots = [];
306
-
307
259
  if (this.streamTimeout != null) {
308
260
  clearTimeout(this.streamTimeout);
309
261
  }
310
-
311
262
  if (this.snapshotHandlerTimeout != null) {
312
263
  clearTimeout(this.snapshotHandlerTimeout);
313
264
  }
314
-
315
265
  this.streamTimeout = undefined;
316
266
  this.snapshotHandlerTimeout = undefined;
317
267
  }
318
-
319
268
  handleDownloadTimeout() {
320
269
  log.info('download canceled');
321
270
  this.cancelDownload();
322
271
  }
323
-
324
272
  writeTableHeader() {
325
273
  var _this$fileWriter;
326
-
327
274
  var headerString = '';
328
-
329
275
  if (this.columns) {
330
276
  for (var i = 0; i < this.columns.length; i += 1) {
331
277
  headerString += this.columns[i].name;
332
278
  headerString += i === this.columns.length - 1 ? '\n' : ',';
333
279
  }
334
280
  }
335
-
336
281
  (_this$fileWriter = this.fileWriter) === null || _this$fileWriter === void 0 ? void 0 : _this$fileWriter.write({
337
282
  header: headerString
338
283
  }).then(() => null);
339
284
  }
340
-
341
285
  startWriteTableBody() {
342
286
  if (this.columns && this.gridRanges != null) {
343
287
  this.chunkRows = Math.floor(TableSaver.DOWNLOAD_CELL_CHUNK / this.columns.length);
@@ -352,12 +296,12 @@ export default class TableSaver extends PureComponent {
352
296
  this.makeSnapshot(Math.min(TableSaver.SNAPSHOT_BUFFER_SIZE, this.snapshotsTotal));
353
297
  }
354
298
  }
355
-
356
- writeCsvTable() {
357
- this.writeTableHeader();
299
+ writeCsvTable(includeColumnHeaders) {
300
+ if (includeColumnHeaders) {
301
+ this.writeTableHeader();
302
+ }
358
303
  this.startWriteTableBody();
359
304
  }
360
-
361
305
  writeSnapshot(snapshotIndex, snapshotStartRow, snapshotEndRow) {
362
306
  if (this.currentSnapshotIndex === snapshotIndex && this.fileWriter) {
363
307
  while (this.snapshotsBuffer.has(this.currentSnapshotIndex)) {
@@ -370,19 +314,16 @@ export default class TableSaver extends PureComponent {
370
314
  this.currentSnapshotIndex += 1;
371
315
  this.updateDownloadProgress(snapshotIndex);
372
316
  }
373
-
374
317
  if (this.snapshotsTotal && this.currentSnapshotIndex >= this.snapshotsTotal) {
375
318
  this.finishDownload();
376
319
  return;
377
320
  }
378
321
  }
379
-
380
322
  if (this.snapshotCounter && this.snapshotsTotal && this.snapshotCounter < this.snapshotsTotal) {
381
323
  log.debug2("\n current range index: ".concat(this.gridRangeCounter, ", \n snapshotIndexCounter: ").concat(this.snapshotCounter, ", \n currentRangedSnapshotIndex : ").concat(this.rangedSnapshotCounter, ", \n snapshotpending: ").concat(this.snapshotPending, ", \n buffered ").concat(this.snapshotsBuffer.size, "\n making ").concat(Math.min(TableSaver.SNAPSHOT_BUFFER_SIZE - this.snapshotsBuffer.size - this.snapshotPending, this.snapshotsTotal - this.snapshotCounter), " more snapshots\n "));
382
324
  this.makeSnapshot(Math.min(TableSaver.SNAPSHOT_BUFFER_SIZE - this.snapshotsBuffer.size - this.snapshotPending, this.snapshotsTotal - this.snapshotCounter));
383
325
  }
384
326
  }
385
-
386
327
  updateDownloadProgress(snapshotIndex) {
387
328
  if (snapshotIndex != null && this.snapshotsTotal != null && this.downloadStartTime != null) {
388
329
  var {
@@ -393,7 +334,6 @@ export default class TableSaver extends PureComponent {
393
334
  onDownloadProgressUpdate(downloadProgress, estimateTime);
394
335
  }
395
336
  }
396
-
397
337
  convertSnapshotIntoCsv(snapshot) {
398
338
  var csvString = '';
399
339
  var snapshotIterator = snapshot.added.iterator();
@@ -401,60 +341,58 @@ export default class TableSaver extends PureComponent {
401
341
  formatter
402
342
  } = this.props;
403
343
  var rows = [];
404
-
405
344
  while (snapshotIterator.hasNext()) {
406
345
  rows.push(snapshotIterator.next().value);
407
346
  }
408
-
409
347
  assertNotNull(this.columns);
410
-
348
+ var {
349
+ useUnformattedValues
350
+ } = this;
411
351
  for (var i = 0; i < rows.length; i += 1) {
412
352
  var rowIdx = rows[i];
413
-
414
353
  for (var j = 0; j < this.columns.length; j += 1) {
415
- var _this$columns;
416
-
417
354
  var {
418
355
  type,
419
356
  name
420
357
  } = this.columns[j];
421
- var hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(formatter, name, type);
422
- var formatOverride = null;
423
-
424
- if (!hasCustomColumnFormat) {
425
- var cellFormat = snapshot.getFormat(rowIdx, this.columns[j]);
426
- formatOverride = (cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.formatString) != null ? cellFormat : null;
427
- }
428
-
429
358
  var cellData = null;
430
-
431
- if (formatOverride) {
432
- cellData = formatter.getFormattedString(snapshot.getData(rowIdx, this.columns[j]), type, name, formatOverride);
359
+ if (useUnformattedValues) {
360
+ var _snapshot$getData;
361
+ var value = (_snapshot$getData = snapshot.getData(rowIdx, this.columns[j])) !== null && _snapshot$getData !== void 0 ? _snapshot$getData : '';
362
+ if (value !== '' && TableUtils.isDateType(type)) {
363
+ // value is just a long value, we should return the value formatted as a full date string
364
+ value = dh.i18n.DateTimeFormat.format(UNFORMATTED_DATE_PATTERN, value, dh.i18n.TimeZone.getTimeZone(formatter.timeZone));
365
+ }
366
+ cellData = value.toString();
433
367
  } else {
434
- cellData = formatter.getFormattedString(snapshot.getData(rowIdx, this.columns[j]), type, name);
368
+ var hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(formatter, name, type);
369
+ var formatOverride = null;
370
+ if (!hasCustomColumnFormat) {
371
+ var cellFormat = snapshot.getFormat(rowIdx, this.columns[j]);
372
+ formatOverride = (cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.formatString) != null ? cellFormat : null;
373
+ }
374
+ if (formatOverride) {
375
+ cellData = formatter.getFormattedString(snapshot.getData(rowIdx, this.columns[j]), type, name, formatOverride);
376
+ } else {
377
+ cellData = formatter.getFormattedString(snapshot.getData(rowIdx, this.columns[j]), type, name);
378
+ }
435
379
  }
436
-
437
380
  csvString += TableSaver.csvEscapeString(cellData);
438
- csvString += j === ((_this$columns = this.columns) === null || _this$columns === void 0 ? void 0 : _this$columns.length) - 1 ? '\n' : ',';
381
+ csvString += j === this.columns.length - 1 ? '\n' : ',';
439
382
  }
440
383
  }
441
-
442
384
  return csvString;
443
385
  }
444
-
445
386
  makeSnapshot(n) {
446
387
  var _this = this;
447
-
448
388
  if (n <= 0) {
449
389
  return;
450
390
  }
451
-
452
391
  assertNotNull(this.gridRangeCounter);
453
392
  var i = 0;
454
393
  var currentGridRange = this.gridRanges[this.gridRangeCounter];
455
394
  assertNotNull(this.tableSubscription);
456
395
  assertNotNull(this.columns);
457
-
458
396
  var _loop = function _loop() {
459
397
  assertNotNull(currentGridRange);
460
398
  assertNotNull(currentGridRange.startRow);
@@ -464,37 +402,29 @@ export default class TableSaver extends PureComponent {
464
402
  var snapshotStartRow = currentGridRange.startRow + _this.rangedSnapshotCounter * _this.chunkRows;
465
403
  var snapshotEndRow = Math.min(snapshotStartRow + _this.chunkRows - 1, currentGridRange.endRow);
466
404
  var snapshotIndex = _this.snapshotCounter;
467
-
468
405
  _this.cancelableSnapshots.push(PromiseUtils.makeCancelable(_this.tableSubscription.snapshot(dh.RangeSet.ofRange(snapshotStartRow, snapshotEndRow), _this.columns).then(snapshot => {
469
406
  assertIsUpdateEventData(snapshot);
470
-
471
407
  _this.handleSnapshotResolved(snapshot, snapshotIndex, snapshotStartRow, snapshotEndRow);
472
-
473
408
  return snapshotIndex;
474
409
  }).catch(err => {
475
410
  log.error(err);
476
411
  }), val => {
477
412
  log.info("snapshot ".concat(val, " has been canceled"));
478
413
  }));
479
-
480
414
  _this.rangedSnapshotCounter += 1;
481
415
  _this.snapshotCounter += 1;
482
416
  _this.snapshotPending += 1;
483
-
484
417
  if (_this.rangedSnapshotCounter >= _this.rangedSnapshotsTotal[_this.gridRangeCounter]) {
485
418
  _this.gridRangeCounter += 1;
486
419
  _this.rangedSnapshotCounter = 0;
487
420
  currentGridRange = _this.gridRanges[_this.gridRangeCounter];
488
421
  }
489
-
490
422
  i += 1;
491
423
  };
492
-
493
424
  while (i < n) {
494
425
  _loop();
495
426
  }
496
427
  }
497
-
498
428
  handlePortMessage(_ref) {
499
429
  var {
500
430
  data
@@ -503,27 +433,25 @@ export default class TableSaver extends PureComponent {
503
433
  download,
504
434
  readableStreamPulling
505
435
  } = data;
506
-
507
436
  if (this.useBlobFallback) {
508
437
  return;
509
438
  }
510
-
511
439
  if (download != null) {
440
+ var {
441
+ includeColumnHeaders
442
+ } = this;
512
443
  this.makeIframe("".concat(download));
513
- this.writeCsvTable();
444
+ this.writeCsvTable(includeColumnHeaders);
514
445
  }
515
-
516
446
  if (readableStreamPulling != null) {
517
447
  if (!this.useBlobFallback) {
518
448
  if (this.streamTimeout != null) {
519
449
  clearTimeout(this.streamTimeout);
520
450
  }
521
-
522
451
  this.streamTimeout = setTimeout(this.handleDownloadTimeout, TableSaver.STREAM_TIMEOUT);
523
452
  }
524
453
  }
525
454
  }
526
-
527
455
  handleSnapshotResolved(snapshot, snapshotIndex, snapshotStartRow, snapshotEndRow) {
528
456
  // use time out to break writeSnapshot into an individual task in browser with timeout, so there's window for the browser to update table in needed.
529
457
  this.snapshotHandlerTimeout = setTimeout(() => {
@@ -533,7 +461,6 @@ export default class TableSaver extends PureComponent {
533
461
  this.cancelableSnapshots[snapshotIndex] = null;
534
462
  }, TableSaver.SNAPSHOT_HANDLER_TIMEOUT);
535
463
  }
536
-
537
464
  makeIframe(src) {
538
465
  // make a return value and make it static method
539
466
  var iframe = document.createElement('iframe');
@@ -543,21 +470,14 @@ export default class TableSaver extends PureComponent {
543
470
  document.body.appendChild(iframe);
544
471
  this.iframes.push(iframe);
545
472
  }
546
-
547
473
  render() {
548
474
  return null;
549
475
  }
550
-
551
476
  }
552
-
553
477
  _defineProperty(TableSaver, "DOWNLOAD_CELL_CHUNK", 6000);
554
-
555
478
  _defineProperty(TableSaver, "SNAPSHOT_BUFFER_SIZE", 5);
556
-
557
479
  _defineProperty(TableSaver, "STREAM_TIMEOUT", 8000);
558
-
559
480
  _defineProperty(TableSaver, "SNAPSHOT_HANDLER_TIMEOUT", 5);
560
-
561
481
  _defineProperty(TableSaver, "defaultProps", {
562
482
  getDownloadWorker: () => Promise.reject(new Error('Download worker not provided')),
563
483
  isDownloading: false,