@deephaven/iris-grid 0.49.1-beta.6 → 0.49.1-deephaven-ui.8

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.
@@ -73,11 +73,10 @@ declare class IrisGridCopyHandler extends Component<IrisGridCopyHandlerProps, Ir
73
73
  stopCopy(): void;
74
74
  handleBackgroundClick(): void;
75
75
  handleCancelClick(): void;
76
- handleCopyClick(): Promise<void>;
76
+ handleCopyClick(): void;
77
77
  handleHideTimeout(): void;
78
- copyText(text: string): Promise<void>;
79
- showCopyDone(): void;
80
- startFetch(): Promise<void>;
78
+ copyText(text: string): void;
79
+ startFetch(): void;
81
80
  stopFetch(): void;
82
81
  startHideTimer(): void;
83
82
  stopHideTimer(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridCopyHandler.d.ts","sourceRoot":"","sources":["../src/IrisGridCopyHandler.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,EACL,SAAS,EAET,YAAY,EACZ,aAAa,EACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EAIlB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,4BAA4B,CAAC;AACpC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAI5C,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5B,KAAK,eAAe,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,aAAa,CAAC,CAAC;AAExE,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;IACvC,gBAAgB,EAAE,YAAY,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,UAAU,wBAAwB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,UAAU,wBAAwB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD;;;;GAIG;AACH,cAAM,mBAAoB,SAAQ,SAAS,CACzC,wBAAwB,EACxB,wBAAwB,CACzB;IACC,MAAM,CAAC,mBAAmB,SAAS;IAEnC,MAAM,CAAC,YAAY,SAAQ;IAE3B;;OAEG;IACH,MAAM,CAAC,WAAW;;;;;;;MAkBhB;IAEF,MAAM,CAAC,aAAa;;;;;MAKlB;IAEF,MAAM,CAAC,YAAY;;0BAED,IAAI;yBACL,IAAI;yBACJ,IAAI;wBACL,IAAI;MAClB;IAEF,MAAM,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAiBxE,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,eAAe,GAAG,MAAM;gBAalD,KAAK,EAAE,wBAAwB;IAiB3C,iBAAiB,IAAI,IAAI;IAOzB,kBAAkB,CAAC,SAAS,EAAE,wBAAwB,GAAG,IAAI;IAO7D,oBAAoB,IAAI,IAAI;IAI5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAE1C,YAAY,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAEzC,SAAS,IAAI,IAAI;IAsCjB,QAAQ,IAAI,IAAI;IAMhB,qBAAqB,IAAI,IAAI;IAS7B,iBAAiB,IAAI,IAAI;IAOnB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBtC,iBAAiB,IAAI,IAAI;IAQnB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3C,YAAY,IAAI,IAAI;IAKd,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiEjC,SAAS,IAAI,IAAI;IAQjB,cAAc,IAAI,IAAI;IAStB,aAAa,IAAI,IAAI;IAOrB,MAAM,IAAI,GAAG,CAAC,OAAO;CAgEtB;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"IrisGridCopyHandler.d.ts","sourceRoot":"","sources":["../src/IrisGridCopyHandler.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,EACL,SAAS,EAET,YAAY,EACZ,aAAa,EACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EAIlB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,4BAA4B,CAAC;AACpC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAI5C,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5B,KAAK,eAAe,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,aAAa,CAAC,CAAC;AAExE,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;IACvC,gBAAgB,EAAE,YAAY,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,UAAU,wBAAwB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,UAAU,wBAAwB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD;;;;GAIG;AACH,cAAM,mBAAoB,SAAQ,SAAS,CACzC,wBAAwB,EACxB,wBAAwB,CACzB;IACC,MAAM,CAAC,mBAAmB,SAAS;IAEnC,MAAM,CAAC,YAAY,SAAQ;IAE3B;;OAEG;IACH,MAAM,CAAC,WAAW;;;;;;;MAkBhB;IAEF,MAAM,CAAC,aAAa;;;;;MAKlB;IAEF,MAAM,CAAC,YAAY;;0BAED,IAAI;yBACL,IAAI;yBACJ,IAAI;wBACL,IAAI;MAClB;IAEF,MAAM,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAiBxE,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,eAAe,GAAG,MAAM;gBAalD,KAAK,EAAE,wBAAwB;IAiB3C,iBAAiB,IAAI,IAAI;IAOzB,kBAAkB,CAAC,SAAS,EAAE,wBAAwB,GAAG,IAAI;IAO7D,oBAAoB,IAAI,IAAI;IAI5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAE1C,YAAY,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAEzC,SAAS,IAAI,IAAI;IAsCjB,QAAQ,IAAI,IAAI;IAMhB,qBAAqB,IAAI,IAAI;IAS7B,iBAAiB,IAAI,IAAI;IAOzB,eAAe,IAAI,IAAI;IAUvB,iBAAiB,IAAI,IAAI;IAQzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAoB5B,UAAU,IAAI,IAAI;IAyDlB,SAAS,IAAI,IAAI;IAQjB,cAAc,IAAI,IAAI;IAStB,aAAa,IAAI,IAAI;IAOrB,MAAM,IAAI,GAAG,CAAC,OAAO;CAgEtB;AAED,eAAe,mBAAmB,CAAC"}
@@ -1,5 +1,3 @@
1
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
3
1
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
2
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
3
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
@@ -156,23 +154,12 @@ class IrisGridCopyHandler extends Component {
156
154
  });
157
155
  }
158
156
  handleCopyClick() {
159
- var _this = this;
160
- return _asyncToGenerator(function* () {
161
- log.debug2('handleCopyClick');
162
- if (_this.textData != null) {
163
- try {
164
- yield _this.copyText(_this.textData);
165
- _this.showCopyDone();
166
- } catch (e) {
167
- log.error('Error copying text', e);
168
- _this.setState({
169
- error: 'Unable to copy. Verify your browser permissions.'
170
- });
171
- }
172
- } else {
173
- _this.startFetch();
174
- }
175
- })();
157
+ log.debug2('handleCopyClick');
158
+ if (this.textData != null) {
159
+ this.copyText(this.textData);
160
+ } else {
161
+ this.startFetch();
162
+ }
176
163
  }
177
164
  handleHideTimeout() {
178
165
  log.debug2('handleHideTimeout');
@@ -182,75 +169,64 @@ class IrisGridCopyHandler extends Component {
182
169
  });
183
170
  }
184
171
  copyText(text) {
185
- var _this2 = this;
186
- return _asyncToGenerator(function* () {
187
- log.debug2('copyText', text);
188
- _this2.textData = text;
189
- yield copyToClipboard(text);
190
- })();
191
- }
192
- showCopyDone() {
193
- this.setState({
194
- copyState: IrisGridCopyHandler.COPY_STATES.DONE
172
+ log.debug2('copyText', text);
173
+ this.textData = text;
174
+ copyToClipboard(text).then(() => {
175
+ this.setState({
176
+ copyState: IrisGridCopyHandler.COPY_STATES.DONE
177
+ });
178
+ this.startHideTimer();
179
+ }, error => {
180
+ log.error('copyText error', error);
181
+ this.setState({
182
+ buttonState: IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY,
183
+ copyState: IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED
184
+ });
195
185
  });
196
- this.startHideTimer();
197
186
  }
198
187
  startFetch() {
199
- var _this3 = this;
200
- return _asyncToGenerator(function* () {
201
- _this3.stopFetch();
202
- _this3.setState({
203
- buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,
204
- copyState: IrisGridCopyHandler.COPY_STATES.FETCH_IN_PROGRESS
205
- });
206
- var {
207
- model,
208
- copyOperation
209
- } = _this3.props;
210
- var {
211
- ranges,
212
- includeHeaders,
213
- userColumnWidths,
214
- movedColumns,
215
- formatValues
216
- } = copyOperation;
217
- log.debug('startFetch', ranges);
218
- var hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);
219
- var modelRanges = GridUtils.getModelRanges(ranges, movedColumns);
220
- if (hiddenColumns.length > 0) {
221
- var subtractRanges = hiddenColumns.map(GridRange.makeColumn);
222
- modelRanges = GridRange.subtractRangesFromRanges(modelRanges, subtractRanges);
223
- }
188
+ this.stopFetch();
189
+ this.setState({
190
+ buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,
191
+ copyState: IrisGridCopyHandler.COPY_STATES.FETCH_IN_PROGRESS
192
+ });
193
+ var {
194
+ model,
195
+ copyOperation
196
+ } = this.props;
197
+ var {
198
+ ranges,
199
+ includeHeaders,
200
+ userColumnWidths,
201
+ movedColumns,
202
+ formatValues
203
+ } = copyOperation;
204
+ log.debug('startFetch', ranges);
205
+ var hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);
206
+ var modelRanges = GridUtils.getModelRanges(ranges, movedColumns);
207
+ if (hiddenColumns.length > 0) {
208
+ var subtractRanges = hiddenColumns.map(GridRange.makeColumn);
209
+ modelRanges = GridRange.subtractRangesFromRanges(modelRanges, subtractRanges);
210
+ }
224
211
 
225
- // Remove the hidden columns from the snapshot
226
- var formatValue = formatValues != null && formatValues ? (value, column) => model.displayString(value, column.type, column.name) : value => "".concat(value);
227
- _this3.fetchPromise = PromiseUtils.makeCancelable(model.textSnapshot(modelRanges, includeHeaders, formatValue));
228
- try {
229
- var text = yield _this3.fetchPromise;
230
- _this3.fetchPromise = undefined;
231
- try {
232
- yield _this3.copyText(text);
233
- _this3.showCopyDone();
234
- } catch (e) {
235
- log.error('Error copying text', e);
236
- _this3.setState({
237
- buttonState: IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY,
238
- copyState: IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED
239
- });
240
- }
241
- } catch (e) {
242
- if (e instanceof CanceledPromiseError) {
243
- log.debug('User cancelled copy.');
244
- } else {
245
- log.error('Error fetching contents', e);
246
- _this3.fetchPromise = undefined;
247
- _this3.setState({
248
- buttonState: IrisGridCopyHandler.BUTTON_STATES.RETRY,
249
- copyState: IrisGridCopyHandler.COPY_STATES.FETCH_ERROR
250
- });
251
- }
212
+ // Remove the hidden columns from the snapshot
213
+ var formatValue = formatValues != null && formatValues ? (value, column) => model.displayString(value, column.type, column.name) : value => "".concat(value);
214
+ this.fetchPromise = PromiseUtils.makeCancelable(model.textSnapshot(modelRanges, includeHeaders, formatValue));
215
+ this.fetchPromise.then(text => {
216
+ this.fetchPromise = undefined;
217
+ this.copyText(text);
218
+ }).catch(error => {
219
+ if (error instanceof CanceledPromiseError) {
220
+ log.debug('User cancelled copy.');
221
+ } else {
222
+ log.error('Error fetching contents', error);
223
+ this.fetchPromise = undefined;
224
+ this.setState({
225
+ buttonState: IrisGridCopyHandler.BUTTON_STATES.RETRY,
226
+ copyState: IrisGridCopyHandler.COPY_STATES.FETCH_ERROR
227
+ });
252
228
  }
253
- })();
229
+ });
254
230
  }
255
231
  stopFetch() {
256
232
  if (this.fetchPromise) {
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridCopyHandler.js","names":["React","Component","classNames","CSSTransition","Button","LoadingSpinner","ThemeExport","GridRange","GridUtils","CanceledPromiseError","copyToClipboard","PromiseUtils","Log","IrisGridUtils","IrisGridBottomBar","log","module","IrisGridCopyHandler","getStatusMessageText","copyState","rowCount","COPY_STATES","CONFIRMATION_REQUIRED","toLocaleString","CLICK_REQUIRED","FETCH_ERROR","FETCH_IN_PROGRESS","DONE","getCopyButtonText","buttonState","BUTTON_STATES","CLICK_TO_COPY","RETRY","constructor","props","handleBackgroundClick","bind","handleCancelClick","handleCopyClick","handleHideTimeout","state","error","undefined","IDLE","COPY","isShown","componentDidMount","copyOperation","startCopy","componentDidUpdate","prevProps","componentWillUnmount","stopCopy","debug2","setState","ranges","debug","startHideTimer","NO_PROMPT_THRESHOLD","startFetch","textData","stopFetch","stopHideTimer","copyText","showCopyDone","e","text","model","includeHeaders","userColumnWidths","movedColumns","formatValues","hiddenColumns","getHiddenColumns","modelRanges","getModelRanges","length","subtractRanges","map","makeColumn","subtractRangesFromRanges","formatValue","value","column","displayString","type","name","fetchPromise","makeCancelable","textSnapshot","cancel","hideTimer","setTimeout","HIDE_TIMEOUT","clearTimeout","render","onEntering","onEntered","onExiting","onExited","animation","copyButtonText","statusMessageText","isButtonContainerVisible","isFetching","isDone","transitionMs"],"sources":["../src/IrisGridCopyHandler.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { Button, LoadingSpinner, ThemeExport } from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n ModelSizeMap,\n MoveOperation,\n} from '@deephaven/grid';\nimport {\n CancelablePromise,\n CanceledPromiseError,\n copyToClipboard,\n PromiseUtils,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport type { Column } from '@deephaven/jsapi-types';\nimport IrisGridUtils from './IrisGridUtils';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './IrisGridCopyHandler.scss';\nimport IrisGridModel from './IrisGridModel';\n\nconst log = Log.module('IrisGridCopyHandler');\n\ntype Values<T> = T[keyof T];\n\ntype ButtonStateType = Values<typeof IrisGridCopyHandler.BUTTON_STATES>;\n\nexport type CopyOperation = {\n ranges: readonly GridRange[];\n includeHeaders: boolean;\n formatValues?: boolean;\n movedColumns: readonly MoveOperation[];\n userColumnWidths: ModelSizeMap;\n error?: string;\n};\n\ninterface IrisGridCopyHandlerProps {\n model: IrisGridModel;\n copyOperation: CopyOperation;\n onEntering: () => void;\n onEntered: () => void;\n onExiting: () => void;\n onExited: () => void;\n}\n\ninterface IrisGridCopyHandlerState {\n error?: string;\n copyState: string;\n buttonState: string;\n isShown: boolean;\n rowCount: number;\n}\n/**\n * Component for handling copying of data from the Iris Grid.\n * - Prompts if necessary (large amount of rows copied)\n * - Tries to async copy, falls back to showing a \"Click to Copy\" button if that fails\n */\nclass IrisGridCopyHandler extends Component<\n IrisGridCopyHandlerProps,\n IrisGridCopyHandlerState\n> {\n static NO_PROMPT_THRESHOLD = 10000;\n\n static HIDE_TIMEOUT = 3000;\n\n /**\n * Different states for the current copy operation\n */\n static COPY_STATES = {\n // No copy operation in progress\n IDLE: 'IDLE',\n\n // Large copy operation, confirmation required\n CONFIRMATION_REQUIRED: 'CONFIRMATION_REQUIRED',\n\n // Fetch is currently in progress\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n\n // There was an error fetching the data\n FETCH_ERROR: 'FETCH_ERROR',\n\n // Click is required to copy\n CLICK_REQUIRED: 'CLICK_REQUIRED',\n\n // The copy operation is completed and successfully copied to the clipboard\n DONE: 'DONE',\n };\n\n static BUTTON_STATES = {\n COPY: 'COPY',\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n CLICK_TO_COPY: 'CLICK_TO_COPY',\n RETRY: 'RETRY',\n };\n\n static defaultProps = {\n copyOperation: null,\n onEntering: (): void => undefined,\n onEntered: (): void => undefined,\n onExiting: (): void => undefined,\n onExited: (): void => undefined,\n };\n\n static getStatusMessageText(copyState: string, rowCount: number): string {\n switch (copyState) {\n case IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED:\n return `Are you sure you want to copy ${rowCount.toLocaleString()} rows to your clipboard?`;\n case IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED:\n return `Fetched ${rowCount.toLocaleString()} rows!`;\n case IrisGridCopyHandler.COPY_STATES.FETCH_ERROR:\n return 'Unable to copy data.';\n case IrisGridCopyHandler.COPY_STATES.FETCH_IN_PROGRESS:\n return `Fetching ${rowCount.toLocaleString()} rows for clipboard...`;\n case IrisGridCopyHandler.COPY_STATES.DONE:\n return 'Copied to Clipboard!';\n default:\n return '';\n }\n }\n\n static getCopyButtonText(buttonState: ButtonStateType): string {\n switch (buttonState) {\n case IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS:\n return 'Fetching';\n case IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY:\n return 'Click to Copy';\n case IrisGridCopyHandler.BUTTON_STATES.RETRY:\n return 'Retry';\n default:\n return 'Copy';\n }\n }\n\n constructor(props: IrisGridCopyHandlerProps) {\n super(props);\n\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleCancelClick = this.handleCancelClick.bind(this);\n this.handleCopyClick = this.handleCopyClick.bind(this);\n this.handleHideTimeout = this.handleHideTimeout.bind(this);\n\n this.state = {\n error: undefined,\n copyState: IrisGridCopyHandler.COPY_STATES.IDLE,\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n isShown: false,\n rowCount: 0,\n };\n }\n\n componentDidMount(): void {\n const { copyOperation } = this.props;\n if (copyOperation != null) {\n this.startCopy();\n }\n }\n\n componentDidUpdate(prevProps: IrisGridCopyHandlerProps): void {\n const { copyOperation } = this.props;\n if (prevProps.copyOperation !== copyOperation) {\n this.startCopy();\n }\n }\n\n componentWillUnmount(): void {\n this.stopCopy();\n }\n\n textData?: string;\n\n hideTimer?: ReturnType<typeof setTimeout>;\n\n fetchPromise?: CancelablePromise<string>;\n\n startCopy(): void {\n log.debug2('startCopy');\n\n this.stopCopy();\n\n const { copyOperation } = this.props;\n if (copyOperation == null) {\n log.debug2('No copy operation set, cancelling out');\n this.setState({ isShown: false });\n return;\n }\n\n const { ranges, error } = copyOperation;\n if (error != null) {\n log.debug('Showing copy error', error);\n this.setState({\n isShown: true,\n copyState: IrisGridCopyHandler.COPY_STATES.DONE,\n error,\n });\n this.startHideTimer();\n return;\n }\n\n const rowCount = GridRange.rowCount(ranges);\n\n this.setState({ rowCount, isShown: true, error: undefined });\n\n if (rowCount > IrisGridCopyHandler.NO_PROMPT_THRESHOLD) {\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED,\n });\n } else {\n this.startFetch();\n }\n }\n\n stopCopy(): void {\n this.textData = undefined;\n this.stopFetch();\n this.stopHideTimer();\n }\n\n handleBackgroundClick(): void {\n log.debug2('handleBackgroundClick');\n\n const { copyState } = this.state;\n if (copyState === IrisGridCopyHandler.COPY_STATES.DONE) {\n this.setState({ isShown: false });\n }\n }\n\n handleCancelClick(): void {\n log.debug2('handleCancelClick');\n\n this.stopFetch();\n this.setState({ isShown: false });\n }\n\n async handleCopyClick(): Promise<void> {\n log.debug2('handleCopyClick');\n\n if (this.textData != null) {\n try {\n await this.copyText(this.textData);\n this.showCopyDone();\n } catch (e) {\n log.error('Error copying text', e);\n this.setState({\n error: 'Unable to copy. Verify your browser permissions.',\n });\n }\n } else {\n this.startFetch();\n }\n }\n\n handleHideTimeout(): void {\n log.debug2('handleHideTimeout');\n\n this.stopHideTimer();\n\n this.setState({ isShown: false });\n }\n\n async copyText(text: string): Promise<void> {\n log.debug2('copyText', text);\n\n this.textData = text;\n\n await copyToClipboard(text);\n }\n\n showCopyDone(): void {\n this.setState({ copyState: IrisGridCopyHandler.COPY_STATES.DONE });\n this.startHideTimer();\n }\n\n async startFetch(): Promise<void> {\n this.stopFetch();\n\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_IN_PROGRESS,\n });\n\n const { model, copyOperation } = this.props;\n const {\n ranges,\n includeHeaders,\n userColumnWidths,\n movedColumns,\n formatValues,\n } = copyOperation;\n log.debug('startFetch', ranges);\n\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n\n // Remove the hidden columns from the snapshot\n const formatValue =\n formatValues != null && formatValues\n ? (value: unknown, column: Column) =>\n model.displayString(value, column.type, column.name)\n : (value: unknown) => `${value}`;\n\n this.fetchPromise = PromiseUtils.makeCancelable(\n model.textSnapshot(modelRanges, includeHeaders, formatValue)\n );\n try {\n const text = await this.fetchPromise;\n this.fetchPromise = undefined;\n try {\n await this.copyText(text);\n this.showCopyDone();\n } catch (e) {\n log.error('Error copying text', e);\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED,\n });\n }\n } catch (e) {\n if (e instanceof CanceledPromiseError) {\n log.debug('User cancelled copy.');\n } else {\n log.error('Error fetching contents', e);\n this.fetchPromise = undefined;\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.RETRY,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_ERROR,\n });\n }\n }\n }\n\n stopFetch(): void {\n if (this.fetchPromise) {\n log.debug2('stopFetch');\n this.fetchPromise.cancel();\n this.fetchPromise = undefined;\n }\n }\n\n startHideTimer(): void {\n this.stopHideTimer();\n\n this.hideTimer = setTimeout(\n this.handleHideTimeout,\n IrisGridCopyHandler.HIDE_TIMEOUT\n );\n }\n\n stopHideTimer(): void {\n if (this.hideTimer != null) {\n clearTimeout(this.hideTimer);\n this.hideTimer = undefined;\n }\n }\n\n render(): JSX.Element {\n const { onEntering, onEntered, onExiting, onExited } = this.props;\n const { buttonState, copyState, isShown, rowCount, error } = this.state;\n\n const animation =\n copyState === IrisGridCopyHandler.COPY_STATES.DONE\n ? 'fade'\n : 'copy-slide-up';\n const copyButtonText = IrisGridCopyHandler.getCopyButtonText(buttonState);\n const statusMessageText =\n error ?? IrisGridCopyHandler.getStatusMessageText(copyState, rowCount);\n const isButtonContainerVisible =\n copyState !== IrisGridCopyHandler.COPY_STATES.DONE;\n const isFetching =\n buttonState === IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS;\n const isDone = copyState === IrisGridCopyHandler.COPY_STATES.DONE;\n\n return (\n <IrisGridBottomBar\n animation={animation}\n isShown={isShown}\n className={classNames('iris-grid-copy-handler', {\n 'copy-done': isDone,\n })}\n onClick={this.handleBackgroundClick}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={onExited}\n >\n <div className=\"status-message\">\n <span>{statusMessageText}</span>\n </div>\n <CSSTransition\n in={isButtonContainerVisible}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"buttons-container\">\n <button\n type=\"button\"\n className=\"btn btn-outline-secondary btn-cancel\"\n onClick={this.handleCancelClick}\n >\n Cancel\n </button>\n <Button\n kind={isFetching ? 'tertiary' : 'primary'}\n className={classNames('btn-copy', {\n 'btn-spinner': isFetching,\n })}\n onClick={this.handleCopyClick}\n disabled={isFetching}\n >\n {isFetching && <LoadingSpinner />}\n {copyButtonText}\n </Button>\n </div>\n </CSSTransition>\n </IrisGridBottomBar>\n );\n }\n}\n\nexport default IrisGridCopyHandler;\n"],"mappings":"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"}
1
+ {"version":3,"file":"IrisGridCopyHandler.js","names":["React","Component","classNames","CSSTransition","Button","LoadingSpinner","ThemeExport","GridRange","GridUtils","CanceledPromiseError","copyToClipboard","PromiseUtils","Log","IrisGridUtils","IrisGridBottomBar","log","module","IrisGridCopyHandler","getStatusMessageText","copyState","rowCount","COPY_STATES","CONFIRMATION_REQUIRED","toLocaleString","CLICK_REQUIRED","FETCH_ERROR","FETCH_IN_PROGRESS","DONE","getCopyButtonText","buttonState","BUTTON_STATES","CLICK_TO_COPY","RETRY","constructor","props","handleBackgroundClick","bind","handleCancelClick","handleCopyClick","handleHideTimeout","state","error","undefined","IDLE","COPY","isShown","componentDidMount","copyOperation","startCopy","componentDidUpdate","prevProps","componentWillUnmount","stopCopy","debug2","setState","ranges","debug","startHideTimer","NO_PROMPT_THRESHOLD","startFetch","textData","stopFetch","stopHideTimer","copyText","text","then","model","includeHeaders","userColumnWidths","movedColumns","formatValues","hiddenColumns","getHiddenColumns","modelRanges","getModelRanges","length","subtractRanges","map","makeColumn","subtractRangesFromRanges","formatValue","value","column","displayString","type","name","fetchPromise","makeCancelable","textSnapshot","catch","cancel","hideTimer","setTimeout","HIDE_TIMEOUT","clearTimeout","render","onEntering","onEntered","onExiting","onExited","animation","copyButtonText","statusMessageText","isButtonContainerVisible","isFetching","isDone","transitionMs"],"sources":["../src/IrisGridCopyHandler.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { Button, LoadingSpinner, ThemeExport } from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n ModelSizeMap,\n MoveOperation,\n} from '@deephaven/grid';\nimport {\n CancelablePromise,\n CanceledPromiseError,\n copyToClipboard,\n PromiseUtils,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport type { Column } from '@deephaven/jsapi-types';\nimport IrisGridUtils from './IrisGridUtils';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './IrisGridCopyHandler.scss';\nimport IrisGridModel from './IrisGridModel';\n\nconst log = Log.module('IrisGridCopyHandler');\n\ntype Values<T> = T[keyof T];\n\ntype ButtonStateType = Values<typeof IrisGridCopyHandler.BUTTON_STATES>;\n\nexport type CopyOperation = {\n ranges: readonly GridRange[];\n includeHeaders: boolean;\n formatValues?: boolean;\n movedColumns: readonly MoveOperation[];\n userColumnWidths: ModelSizeMap;\n error?: string;\n};\n\ninterface IrisGridCopyHandlerProps {\n model: IrisGridModel;\n copyOperation: CopyOperation;\n onEntering: () => void;\n onEntered: () => void;\n onExiting: () => void;\n onExited: () => void;\n}\n\ninterface IrisGridCopyHandlerState {\n error?: string;\n copyState: string;\n buttonState: string;\n isShown: boolean;\n rowCount: number;\n}\n/**\n * Component for handling copying of data from the Iris Grid.\n * - Prompts if necessary (large amount of rows copied)\n * - Tries to async copy, falls back to showing a \"Click to Copy\" button if that fails\n */\nclass IrisGridCopyHandler extends Component<\n IrisGridCopyHandlerProps,\n IrisGridCopyHandlerState\n> {\n static NO_PROMPT_THRESHOLD = 10000;\n\n static HIDE_TIMEOUT = 3000;\n\n /**\n * Different states for the current copy operation\n */\n static COPY_STATES = {\n // No copy operation in progress\n IDLE: 'IDLE',\n\n // Large copy operation, confirmation required\n CONFIRMATION_REQUIRED: 'CONFIRMATION_REQUIRED',\n\n // Fetch is currently in progress\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n\n // There was an error fetching the data\n FETCH_ERROR: 'FETCH_ERROR',\n\n // Click is required to copy\n CLICK_REQUIRED: 'CLICK_REQUIRED',\n\n // The copy operation is completed and successfully copied to the clipboard\n DONE: 'DONE',\n };\n\n static BUTTON_STATES = {\n COPY: 'COPY',\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n CLICK_TO_COPY: 'CLICK_TO_COPY',\n RETRY: 'RETRY',\n };\n\n static defaultProps = {\n copyOperation: null,\n onEntering: (): void => undefined,\n onEntered: (): void => undefined,\n onExiting: (): void => undefined,\n onExited: (): void => undefined,\n };\n\n static getStatusMessageText(copyState: string, rowCount: number): string {\n switch (copyState) {\n case IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED:\n return `Are you sure you want to copy ${rowCount.toLocaleString()} rows to your clipboard?`;\n case IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED:\n return `Fetched ${rowCount.toLocaleString()} rows!`;\n case IrisGridCopyHandler.COPY_STATES.FETCH_ERROR:\n return 'Unable to copy data.';\n case IrisGridCopyHandler.COPY_STATES.FETCH_IN_PROGRESS:\n return `Fetching ${rowCount.toLocaleString()} rows for clipboard...`;\n case IrisGridCopyHandler.COPY_STATES.DONE:\n return 'Copied to Clipboard!';\n default:\n return '';\n }\n }\n\n static getCopyButtonText(buttonState: ButtonStateType): string {\n switch (buttonState) {\n case IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS:\n return 'Fetching';\n case IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY:\n return 'Click to Copy';\n case IrisGridCopyHandler.BUTTON_STATES.RETRY:\n return 'Retry';\n default:\n return 'Copy';\n }\n }\n\n constructor(props: IrisGridCopyHandlerProps) {\n super(props);\n\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleCancelClick = this.handleCancelClick.bind(this);\n this.handleCopyClick = this.handleCopyClick.bind(this);\n this.handleHideTimeout = this.handleHideTimeout.bind(this);\n\n this.state = {\n error: undefined,\n copyState: IrisGridCopyHandler.COPY_STATES.IDLE,\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n isShown: false,\n rowCount: 0,\n };\n }\n\n componentDidMount(): void {\n const { copyOperation } = this.props;\n if (copyOperation != null) {\n this.startCopy();\n }\n }\n\n componentDidUpdate(prevProps: IrisGridCopyHandlerProps): void {\n const { copyOperation } = this.props;\n if (prevProps.copyOperation !== copyOperation) {\n this.startCopy();\n }\n }\n\n componentWillUnmount(): void {\n this.stopCopy();\n }\n\n textData?: string;\n\n hideTimer?: ReturnType<typeof setTimeout>;\n\n fetchPromise?: CancelablePromise<string>;\n\n startCopy(): void {\n log.debug2('startCopy');\n\n this.stopCopy();\n\n const { copyOperation } = this.props;\n if (copyOperation == null) {\n log.debug2('No copy operation set, cancelling out');\n this.setState({ isShown: false });\n return;\n }\n\n const { ranges, error } = copyOperation;\n if (error != null) {\n log.debug('Showing copy error', error);\n this.setState({\n isShown: true,\n copyState: IrisGridCopyHandler.COPY_STATES.DONE,\n error,\n });\n this.startHideTimer();\n return;\n }\n\n const rowCount = GridRange.rowCount(ranges);\n\n this.setState({ rowCount, isShown: true, error: undefined });\n\n if (rowCount > IrisGridCopyHandler.NO_PROMPT_THRESHOLD) {\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED,\n });\n } else {\n this.startFetch();\n }\n }\n\n stopCopy(): void {\n this.textData = undefined;\n this.stopFetch();\n this.stopHideTimer();\n }\n\n handleBackgroundClick(): void {\n log.debug2('handleBackgroundClick');\n\n const { copyState } = this.state;\n if (copyState === IrisGridCopyHandler.COPY_STATES.DONE) {\n this.setState({ isShown: false });\n }\n }\n\n handleCancelClick(): void {\n log.debug2('handleCancelClick');\n\n this.stopFetch();\n this.setState({ isShown: false });\n }\n\n handleCopyClick(): void {\n log.debug2('handleCopyClick');\n\n if (this.textData != null) {\n this.copyText(this.textData);\n } else {\n this.startFetch();\n }\n }\n\n handleHideTimeout(): void {\n log.debug2('handleHideTimeout');\n\n this.stopHideTimer();\n\n this.setState({ isShown: false });\n }\n\n copyText(text: string): void {\n log.debug2('copyText', text);\n\n this.textData = text;\n\n copyToClipboard(text).then(\n () => {\n this.setState({ copyState: IrisGridCopyHandler.COPY_STATES.DONE });\n this.startHideTimer();\n },\n error => {\n log.error('copyText error', error);\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED,\n });\n }\n );\n }\n\n startFetch(): void {\n this.stopFetch();\n\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_IN_PROGRESS,\n });\n\n const { model, copyOperation } = this.props;\n const {\n ranges,\n includeHeaders,\n userColumnWidths,\n movedColumns,\n formatValues,\n } = copyOperation;\n log.debug('startFetch', ranges);\n\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n\n // Remove the hidden columns from the snapshot\n const formatValue =\n formatValues != null && formatValues\n ? (value: unknown, column: Column) =>\n model.displayString(value, column.type, column.name)\n : (value: unknown) => `${value}`;\n\n this.fetchPromise = PromiseUtils.makeCancelable(\n model.textSnapshot(modelRanges, includeHeaders, formatValue)\n );\n this.fetchPromise\n .then((text: string) => {\n this.fetchPromise = undefined;\n this.copyText(text);\n })\n .catch((error: unknown) => {\n if (error instanceof CanceledPromiseError) {\n log.debug('User cancelled copy.');\n } else {\n log.error('Error fetching contents', error);\n this.fetchPromise = undefined;\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.RETRY,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_ERROR,\n });\n }\n });\n }\n\n stopFetch(): void {\n if (this.fetchPromise) {\n log.debug2('stopFetch');\n this.fetchPromise.cancel();\n this.fetchPromise = undefined;\n }\n }\n\n startHideTimer(): void {\n this.stopHideTimer();\n\n this.hideTimer = setTimeout(\n this.handleHideTimeout,\n IrisGridCopyHandler.HIDE_TIMEOUT\n );\n }\n\n stopHideTimer(): void {\n if (this.hideTimer != null) {\n clearTimeout(this.hideTimer);\n this.hideTimer = undefined;\n }\n }\n\n render(): JSX.Element {\n const { onEntering, onEntered, onExiting, onExited } = this.props;\n const { buttonState, copyState, isShown, rowCount, error } = this.state;\n\n const animation =\n copyState === IrisGridCopyHandler.COPY_STATES.DONE\n ? 'fade'\n : 'copy-slide-up';\n const copyButtonText = IrisGridCopyHandler.getCopyButtonText(buttonState);\n const statusMessageText =\n error ?? IrisGridCopyHandler.getStatusMessageText(copyState, rowCount);\n const isButtonContainerVisible =\n copyState !== IrisGridCopyHandler.COPY_STATES.DONE;\n const isFetching =\n buttonState === IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS;\n const isDone = copyState === IrisGridCopyHandler.COPY_STATES.DONE;\n\n return (\n <IrisGridBottomBar\n animation={animation}\n isShown={isShown}\n className={classNames('iris-grid-copy-handler', {\n 'copy-done': isDone,\n })}\n onClick={this.handleBackgroundClick}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={onExited}\n >\n <div className=\"status-message\">\n <span>{statusMessageText}</span>\n </div>\n <CSSTransition\n in={isButtonContainerVisible}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"buttons-container\">\n <button\n type=\"button\"\n className=\"btn btn-outline-secondary btn-cancel\"\n onClick={this.handleCancelClick}\n >\n Cancel\n </button>\n <Button\n kind={isFetching ? 'tertiary' : 'primary'}\n className={classNames('btn-copy', {\n 'btn-spinner': isFetching,\n })}\n onClick={this.handleCopyClick}\n disabled={isFetching}\n >\n {isFetching && <LoadingSpinner />}\n {copyButtonText}\n </Button>\n </div>\n </CSSTransition>\n </IrisGridBottomBar>\n );\n }\n}\n\nexport default IrisGridCopyHandler;\n"],"mappings":"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"}
@@ -19,6 +19,7 @@ export default class TableSaver extends PureComponent<TableSaverProps, Record<st
19
19
  static STREAM_TIMEOUT: number;
20
20
  static SNAPSHOT_HANDLER_TIMEOUT: number;
21
21
  static defaultProps: {
22
+ getDownloadWorker: () => Promise<never>;
22
23
  isDownloading: boolean;
23
24
  onDownloadCompleted: () => void;
24
25
  onDownloadCanceled: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"TableSaver.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableSaver.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TableSaver.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableSaver.tsx"],"names":[],"mappings":"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"}
@@ -474,6 +474,7 @@ _defineProperty(TableSaver, "SNAPSHOT_BUFFER_SIZE", 5);
474
474
  _defineProperty(TableSaver, "STREAM_TIMEOUT", 8000);
475
475
  _defineProperty(TableSaver, "SNAPSHOT_HANDLER_TIMEOUT", 5);
476
476
  _defineProperty(TableSaver, "defaultProps", {
477
+ getDownloadWorker: () => Promise.reject(new Error('Download worker not provided')),
477
478
  isDownloading: false,
478
479
  onDownloadCompleted: () => undefined,
479
480
  onDownloadCanceled: () => undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"TableSaver.js","names":["PureComponent","Log","memoizeClear","FormatterUtils","TableUtils","PromiseUtils","assertNotNull","IrisGridUtils","log","module","UNFORMATTED_DATE_PATTERN","isUpdateEventData","data","added","undefined","assertIsUpdateEventData","Error","TableSaver","csvEscapeString","str","replace","constructor","props","isCustomColumnFormatDefined","max","handlePortMessage","bind","handleSnapshotResolved","handleDownloadTimeout","state","gridRanges","gridRangeCounter","rangedSnapshotsTotal","rangedSnapshotCounter","includeColumnHeaders","useUnformattedValues","snapshotsTotal","snapshotCounter","snapshotsBuffer","Map","currentSnapshotIndex","snapshotPending","cancelableSnapshots","useBlobFallback","componentDidMount","getDownloadWorker","then","sw","info","postMessage","catch","error","warn","componentWillUnmount","removeIframe","streamTimeout","clearTimeout","snapshotHandlerTimeout","createWriterStream","port","useBlob","chunks","encode","TextEncoder","prototype","fileName","streamConfig","write","chunk","header","push","rows","close","blob","Blob","type","link","document","createElement","href","URL","createObjectURL","download","click","abort","cancel","end","WritableStream","startDownload","frozenTable","tableSubscription","snapshotRanges","modelRanges","isDownloading","downloadStartTime","Date","now","table","columns","columnsFromRanges","encodedFileName","encodeURIComponent","escape","messageChannel","MessageChannel","port1","fileWriter","getWriter","writeCsvTable","port2","onmessage","finishDownload","onDownloadCompleted","resetTableSaver","cancelDownload","forEach","cancelable","onDownloadCanceled","chunkRows","writeTableHeader","headerString","i","length","name","startWriteTableBody","Math","floor","DOWNLOAD_CELL_CHUNK","map","range","endRow","startRow","ceil","reduce","total","snapshotCount","makeSnapshot","min","SNAPSHOT_BUFFER_SIZE","writeSnapshot","snapshotIndex","snapshotStartRow","snapshotEndRow","has","n","get","convertSnapshotIntoCsv","delete","updateDownloadProgress","debug2","size","onDownloadProgressUpdate","downloadProgress","estimateTime","snapshot","csvString","snapshotIterator","iterator","dh","formatter","hasNext","next","value","rowIdx","j","cellData","getData","isDateType","i18n","DateTimeFormat","format","TimeZone","getTimeZone","timeZone","toString","hasCustomColumnFormat","getCachedCustomColumnFormatFlag","formatOverride","cellFormat","getFormat","formatString","getFormattedString","currentGridRange","makeCancelable","RangeSet","ofRange","err","val","readableStreamPulling","makeIframe","setTimeout","STREAM_TIMEOUT","set","SNAPSHOT_HANDLER_TIMEOUT","src","iframe","hidden","body","appendChild","remove","render"],"sources":["../../src/sidebar/TableSaver.tsx"],"sourcesContent":["import { PureComponent } from 'react';\nimport type {\n Column,\n dh as DhType,\n DateWrapper,\n Table,\n TableData,\n TableViewportSubscription,\n UpdateEventData,\n} from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { GridRange, GridRangeIndex, memoizeClear } from '@deephaven/grid';\nimport { Formatter, FormatterUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport {\n CancelablePromise,\n PromiseUtils,\n assertNotNull,\n} from '@deephaven/utils';\nimport IrisGridUtils from '../IrisGridUtils';\n\nconst log = Log.module('TableSaver');\n\nconst UNFORMATTED_DATE_PATTERN = `yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z`;\n\ninterface TableSaverProps {\n dh: DhType;\n getDownloadWorker: () => Promise<ServiceWorker>;\n isDownloading: boolean;\n onDownloadCompleted: () => void;\n onDownloadCanceled: () => void;\n onDownloadProgressUpdate: (\n progress: number,\n estimatedTime: number | null\n ) => void;\n formatter: Formatter;\n}\n\nfunction isUpdateEventData(data: TableData): data is UpdateEventData {\n return (data as UpdateEventData).added !== undefined;\n}\n\nfunction assertIsUpdateEventData(\n data: TableData\n): asserts data is UpdateEventData {\n if (!isUpdateEventData(data)) {\n throw new Error('event is not UpdateEventData');\n }\n}\n\nexport default class TableSaver extends PureComponent<\n TableSaverProps,\n Record<string, never>\n> {\n static DOWNLOAD_CELL_CHUNK = 6000;\n\n static SNAPSHOT_BUFFER_SIZE = 5;\n\n static STREAM_TIMEOUT = 8000;\n\n static SNAPSHOT_HANDLER_TIMEOUT = 5;\n\n static defaultProps = {\n isDownloading: false,\n onDownloadCompleted: (): void => undefined,\n onDownloadCanceled: (): void => undefined,\n onDownloadProgressUpdate: (): void => undefined,\n };\n\n static csvEscapeString(str: string): string {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n\n constructor(props: TableSaverProps) {\n super(props);\n\n this.handlePortMessage = this.handlePortMessage.bind(this);\n this.handleSnapshotResolved = this.handleSnapshotResolved.bind(this);\n this.handleDownloadTimeout = this.handleDownloadTimeout.bind(this);\n\n this.state = {};\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.includeColumnHeaders = true;\n this.useUnformattedValues = false;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n // 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.\n // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.\n // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.\n // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494\n\n this.useBlobFallback = false;\n }\n\n componentDidMount(): void {\n const { getDownloadWorker } = this.props;\n getDownloadWorker()\n .then(sw => {\n log.info('found active service worker');\n this.sw = sw;\n this.sw.postMessage('ping'); // just to activate the service worker\n })\n .catch(error => {\n // if service worker is not available, use blob as fallback to download table csv\n log.warn('Download csv is not optimized.', error);\n this.useBlobFallback = true;\n });\n }\n\n componentWillUnmount(): void {\n this.removeIframe();\n if (this.streamTimeout) clearTimeout(this.streamTimeout);\n if (this.snapshotHandlerTimeout) clearTimeout(this.snapshotHandlerTimeout);\n }\n\n sw?: ServiceWorker;\n\n port?: MessagePort;\n\n fileWriter?: WritableStreamDefaultWriter<unknown>;\n\n table?: Table;\n\n tableSubscription?: TableViewportSubscription;\n\n columns?: readonly Column[];\n\n fileName?: string;\n\n includeColumnHeaders: boolean;\n\n useUnformattedValues: boolean;\n\n chunkRows?: number;\n\n gridRanges: readonly GridRange[];\n\n gridRangeCounter?: number;\n\n rangedSnapshotsTotal: readonly number[];\n\n rangedSnapshotCounter?: number;\n\n snapshotsTotal: number;\n\n snapshotCounter: number;\n\n snapshotsBuffer: Map<number, UpdateEventData>;\n\n currentSnapshotIndex: number;\n\n snapshotPending: number;\n\n cancelableSnapshots: (CancelablePromise<unknown> | null)[];\n\n // 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.\n // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.\n // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.\n // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494\n streamTimeout?: ReturnType<typeof setTimeout>;\n\n snapshotHandlerTimeout?: ReturnType<typeof setTimeout>;\n\n downloadStartTime?: number;\n\n iframe?: HTMLIFrameElement;\n\n useBlobFallback: boolean;\n\n getCachedCustomColumnFormatFlag = memoizeClear(\n FormatterUtils.isCustomColumnFormatDefined,\n { max: 10000 }\n );\n\n createWriterStream(port: MessagePort): WritableStream<{\n rows?: string | undefined;\n header?: string | undefined;\n }> {\n // use blob fall back if it's safari\n const useBlob = this.useBlobFallback;\n const chunks = [] as BlobPart[];\n let encode: ((input?: string) => Uint8Array) | null = null;\n if (useBlob) {\n encode = TextEncoder.prototype.encode.bind(new TextEncoder());\n }\n const { fileName } = this;\n\n const streamConfig = {} as UnderlyingSink<{\n rows?: string | undefined;\n header?: string | undefined;\n }>;\n if (useBlob) {\n streamConfig.write = (chunk: { rows?: string; header?: string }) => {\n assertNotNull(encode);\n if (chunk.header !== undefined) {\n chunks.push(encode(chunk.header));\n }\n if (chunk.rows !== undefined) {\n chunks.push(encode(chunk.rows));\n }\n };\n streamConfig.close = () => {\n assertNotNull(fileName);\n const blob = new Blob(chunks, {\n type: 'application/octet-stream; charset=utf-8',\n });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = fileName;\n link.click();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n } else {\n streamConfig.write = (chunk: unknown) => {\n port.postMessage(chunk);\n };\n streamConfig.close = () => {\n port.postMessage({ end: true });\n port.close();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n }\n\n return new WritableStream(streamConfig);\n }\n\n startDownload(\n fileName: string,\n frozenTable: Table,\n tableSubscription: TableViewportSubscription,\n snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ): void {\n // don't trigger another download when a download is ongoing\n const { isDownloading } = this.props;\n if (isDownloading) {\n return;\n }\n\n this.downloadStartTime = Date.now();\n log.info(`start downloading ${fileName}`);\n\n this.table = frozenTable;\n this.columns = IrisGridUtils.columnsFromRanges(\n modelRanges,\n frozenTable.columns\n );\n this.tableSubscription = tableSubscription;\n this.gridRanges = snapshotRanges;\n this.includeColumnHeaders = includeColumnHeaders;\n this.useUnformattedValues = useUnformattedValues;\n\n // Make filename RFC5987 compatible\n const encodedFileName = encodeURIComponent(fileName.replace(/\\//g, ':'))\n .replace(/['()]/g, escape)\n .replace(/\\*/g, '%2A');\n\n const messageChannel = new MessageChannel();\n this.port = messageChannel.port1;\n this.fileName = fileName;\n this.fileWriter = this.createWriterStream(this.port).getWriter();\n\n // if the browser doesn't support stream or there's no active service worker, use blobs for table download\n if (this.useBlobFallback) {\n this.writeCsvTable(includeColumnHeaders);\n return;\n }\n\n if (this.sw) {\n // send file name and port to service worker\n this.sw.postMessage({ encodedFileName }, [messageChannel.port2]);\n }\n this.port.onmessage = this.handlePortMessage;\n }\n\n finishDownload(): void {\n if (this.table) {\n this.table.close();\n }\n if (this.tableSubscription) {\n this.tableSubscription.close();\n }\n if (this.fileWriter) {\n this.fileWriter.close();\n }\n\n const { onDownloadCompleted } = this.props;\n onDownloadCompleted();\n this.resetTableSaver();\n\n if (this.downloadStartTime !== undefined) {\n log.info(\n `download finished, total elapsed time ${\n (Date.now() - this.downloadStartTime) / 1000\n } seconds`\n );\n }\n }\n\n cancelDownload(): void {\n this.table?.close();\n this.tableSubscription?.close();\n this.fileWriter?.abort();\n\n this.cancelableSnapshots.forEach(cancelable => {\n if (cancelable) {\n cancelable.catch(() => null);\n cancelable.cancel();\n }\n });\n const { onDownloadCanceled } = this.props;\n onDownloadCanceled();\n this.resetTableSaver();\n }\n\n resetTableSaver(): void {\n this.table = undefined;\n this.tableSubscription = undefined;\n this.columns = undefined;\n this.chunkRows = undefined;\n this.removeIframe();\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.includeColumnHeaders = true;\n this.useUnformattedValues = false;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n if (this.streamTimeout != null) {\n clearTimeout(this.streamTimeout);\n }\n\n if (this.snapshotHandlerTimeout != null) {\n clearTimeout(this.snapshotHandlerTimeout);\n }\n this.streamTimeout = undefined;\n this.snapshotHandlerTimeout = undefined;\n }\n\n handleDownloadTimeout(): void {\n log.info('download canceled');\n this.cancelDownload();\n }\n\n writeTableHeader(): void {\n let headerString = '';\n if (this.columns) {\n for (let i = 0; i < this.columns.length; i += 1) {\n headerString += this.columns[i].name;\n headerString += i === this.columns.length - 1 ? '\\n' : ',';\n }\n }\n this.fileWriter?.write({ header: headerString }).then(() => null);\n }\n\n startWriteTableBody(): void {\n if (this.columns && this.gridRanges != null) {\n this.chunkRows = Math.floor(\n TableSaver.DOWNLOAD_CELL_CHUNK / this.columns.length\n );\n\n this.rangedSnapshotsTotal = this.gridRanges.map((range: GridRange) => {\n assertNotNull(range.endRow);\n assertNotNull(range.startRow);\n assertNotNull(this.chunkRows);\n\n return Math.ceil((range.endRow - range.startRow + 1) / this.chunkRows);\n });\n this.snapshotsTotal = this.rangedSnapshotsTotal.reduce(\n (total: number, snapshotCount: number) => total + snapshotCount\n );\n\n log.info(`start writing table, total snapshots: `, this.snapshotsTotal);\n\n this.makeSnapshot(\n Math.min(TableSaver.SNAPSHOT_BUFFER_SIZE, this.snapshotsTotal)\n );\n }\n }\n\n writeCsvTable(includeColumnHeaders: boolean): void {\n if (includeColumnHeaders) {\n this.writeTableHeader();\n }\n this.startWriteTableBody();\n }\n\n writeSnapshot(\n snapshotIndex: number,\n snapshotStartRow: GridRangeIndex,\n snapshotEndRow: GridRangeIndex\n ): void {\n if (this.currentSnapshotIndex === snapshotIndex && this.fileWriter) {\n while (this.snapshotsBuffer.has(this.currentSnapshotIndex)) {\n const n = this.snapshotsBuffer.get(this.currentSnapshotIndex);\n assertNotNull(n);\n this.fileWriter.write({\n rows: this.convertSnapshotIntoCsv(n),\n });\n this.snapshotsBuffer.delete(this.currentSnapshotIndex);\n this.currentSnapshotIndex += 1;\n\n this.updateDownloadProgress(snapshotIndex);\n }\n if (\n this.snapshotsTotal &&\n this.currentSnapshotIndex >= this.snapshotsTotal\n ) {\n this.finishDownload();\n return;\n }\n }\n\n if (\n this.snapshotCounter &&\n this.snapshotsTotal &&\n this.snapshotCounter < this.snapshotsTotal\n ) {\n log.debug2(\n `\n current range index: ${this.gridRangeCounter}, \n snapshotIndexCounter: ${this.snapshotCounter}, \n currentRangedSnapshotIndex : ${this.rangedSnapshotCounter}, \n snapshotpending: ${this.snapshotPending}, \n buffered ${this.snapshotsBuffer.size}\n making ${Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )} more snapshots\n `\n );\n this.makeSnapshot(\n Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )\n );\n }\n }\n\n updateDownloadProgress(snapshotIndex: GridRangeIndex): void {\n if (\n snapshotIndex != null &&\n this.snapshotsTotal != null &&\n this.downloadStartTime != null\n ) {\n const { onDownloadProgressUpdate } = this.props;\n const downloadProgress = Math.floor(\n (snapshotIndex * 100) / this.snapshotsTotal\n );\n const estimateTime =\n snapshotIndex > 1\n ? Math.floor(\n ((Date.now() - this.downloadStartTime) *\n (this.snapshotsTotal - snapshotIndex)) /\n snapshotIndex /\n 1000\n )\n : null;\n\n onDownloadProgressUpdate(downloadProgress, estimateTime);\n }\n }\n\n convertSnapshotIntoCsv(snapshot: UpdateEventData): string {\n let csvString = '';\n const snapshotIterator = snapshot.added.iterator();\n const { dh, formatter } = this.props;\n\n const rows = [];\n while (snapshotIterator.hasNext()) {\n rows.push(snapshotIterator.next().value);\n }\n\n assertNotNull(this.columns);\n\n const { useUnformattedValues } = this;\n for (let i = 0; i < rows.length; i += 1) {\n const rowIdx = rows[i];\n for (let j = 0; j < this.columns.length; j += 1) {\n const { type, name } = this.columns[j];\n let cellData = null;\n if (useUnformattedValues) {\n let value = snapshot.getData(rowIdx, this.columns[j]) ?? '';\n if (value !== '' && TableUtils.isDateType(type)) {\n // value is just a long value, we should return the value formatted as a full date string\n value = dh.i18n.DateTimeFormat.format(\n UNFORMATTED_DATE_PATTERN,\n value as number | Date | DateWrapper,\n dh.i18n.TimeZone.getTimeZone(formatter.timeZone)\n );\n }\n cellData = value.toString();\n } else {\n const hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(\n formatter,\n name,\n type\n );\n let formatOverride = null;\n if (!hasCustomColumnFormat) {\n const cellFormat = snapshot.getFormat(rowIdx, this.columns[j]);\n formatOverride =\n cellFormat?.formatString != null ? cellFormat : null;\n }\n if (formatOverride) {\n cellData = formatter.getFormattedString(\n snapshot.getData(rowIdx, this.columns[j]),\n type,\n name,\n formatOverride\n );\n } else {\n cellData = formatter.getFormattedString(\n snapshot.getData(rowIdx, this.columns[j]),\n type,\n name\n );\n }\n }\n csvString += TableSaver.csvEscapeString(cellData);\n csvString += j === this.columns.length - 1 ? '\\n' : ',';\n }\n }\n\n return csvString;\n }\n\n makeSnapshot(n: number): void {\n if (n <= 0) {\n return;\n }\n const { dh } = this.props;\n assertNotNull(this.gridRangeCounter);\n let i = 0;\n let currentGridRange = this.gridRanges[this.gridRangeCounter];\n\n assertNotNull(this.tableSubscription);\n assertNotNull(this.columns);\n while (i < n) {\n assertNotNull(currentGridRange);\n assertNotNull(currentGridRange.startRow);\n assertNotNull(currentGridRange.endRow);\n assertNotNull(this.rangedSnapshotCounter);\n assertNotNull(this.chunkRows);\n const snapshotStartRow =\n currentGridRange.startRow + this.rangedSnapshotCounter * this.chunkRows;\n const snapshotEndRow = Math.min(\n snapshotStartRow + this.chunkRows - 1,\n currentGridRange.endRow\n );\n\n const snapshotIndex = this.snapshotCounter;\n this.cancelableSnapshots.push(\n PromiseUtils.makeCancelable(\n this.tableSubscription\n .snapshot(\n dh.RangeSet.ofRange(snapshotStartRow, snapshotEndRow),\n this.columns\n )\n .then(snapshot => {\n assertIsUpdateEventData(snapshot);\n this.handleSnapshotResolved(\n snapshot,\n snapshotIndex,\n snapshotStartRow,\n snapshotEndRow\n );\n\n return snapshotIndex;\n })\n .catch(err => {\n log.error(err);\n }),\n val => {\n log.info(`snapshot ${val} has been canceled`);\n }\n )\n );\n\n this.rangedSnapshotCounter += 1;\n this.snapshotCounter += 1;\n this.snapshotPending += 1;\n\n if (\n this.rangedSnapshotCounter >=\n this.rangedSnapshotsTotal[this.gridRangeCounter]\n ) {\n this.gridRangeCounter += 1;\n this.rangedSnapshotCounter = 0;\n currentGridRange = this.gridRanges[this.gridRangeCounter];\n }\n i += 1;\n }\n }\n\n handlePortMessage({\n data,\n }: MessageEvent<{\n download: unknown;\n readableStreamPulling: unknown;\n }>): void {\n const { download, readableStreamPulling } = data;\n if (this.useBlobFallback) {\n return;\n }\n if (download != null) {\n const { includeColumnHeaders } = this;\n this.makeIframe(`${download}`);\n this.writeCsvTable(includeColumnHeaders);\n }\n if (readableStreamPulling != null) {\n if (!this.useBlobFallback) {\n if (this.streamTimeout != null) {\n clearTimeout(this.streamTimeout);\n }\n this.streamTimeout = setTimeout(\n this.handleDownloadTimeout,\n TableSaver.STREAM_TIMEOUT\n );\n }\n }\n }\n\n handleSnapshotResolved(\n snapshot: UpdateEventData,\n snapshotIndex: number,\n snapshotStartRow: GridRangeIndex,\n snapshotEndRow: GridRangeIndex\n ): void {\n // 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.\n this.snapshotHandlerTimeout = setTimeout(() => {\n this.snapshotsBuffer.set(snapshotIndex, snapshot);\n this.snapshotPending -= 1;\n this.writeSnapshot(snapshotIndex, snapshotStartRow, snapshotEndRow);\n this.cancelableSnapshots[snapshotIndex] = null;\n }, TableSaver.SNAPSHOT_HANDLER_TIMEOUT);\n }\n\n makeIframe(src: string): void {\n // make a return value and make it static method\n const iframe = document.createElement('iframe');\n iframe.hidden = true;\n iframe.src = src;\n iframe.name = 'iframe';\n document.body.appendChild(iframe);\n this.iframe = iframe;\n }\n\n removeIframe(): void {\n this.iframe?.remove();\n this.iframe = undefined;\n }\n\n render(): null {\n return null;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableSaver.js","names":["PureComponent","Log","memoizeClear","FormatterUtils","TableUtils","PromiseUtils","assertNotNull","IrisGridUtils","log","module","UNFORMATTED_DATE_PATTERN","isUpdateEventData","data","added","undefined","assertIsUpdateEventData","Error","TableSaver","csvEscapeString","str","replace","constructor","props","isCustomColumnFormatDefined","max","handlePortMessage","bind","handleSnapshotResolved","handleDownloadTimeout","state","gridRanges","gridRangeCounter","rangedSnapshotsTotal","rangedSnapshotCounter","includeColumnHeaders","useUnformattedValues","snapshotsTotal","snapshotCounter","snapshotsBuffer","Map","currentSnapshotIndex","snapshotPending","cancelableSnapshots","useBlobFallback","componentDidMount","getDownloadWorker","then","sw","info","postMessage","catch","error","warn","componentWillUnmount","removeIframe","streamTimeout","clearTimeout","snapshotHandlerTimeout","createWriterStream","port","useBlob","chunks","encode","TextEncoder","prototype","fileName","streamConfig","write","chunk","header","push","rows","close","blob","Blob","type","link","document","createElement","href","URL","createObjectURL","download","click","abort","cancel","end","WritableStream","startDownload","frozenTable","tableSubscription","snapshotRanges","modelRanges","isDownloading","downloadStartTime","Date","now","table","columns","columnsFromRanges","encodedFileName","encodeURIComponent","escape","messageChannel","MessageChannel","port1","fileWriter","getWriter","writeCsvTable","port2","onmessage","finishDownload","onDownloadCompleted","resetTableSaver","cancelDownload","forEach","cancelable","onDownloadCanceled","chunkRows","writeTableHeader","headerString","i","length","name","startWriteTableBody","Math","floor","DOWNLOAD_CELL_CHUNK","map","range","endRow","startRow","ceil","reduce","total","snapshotCount","makeSnapshot","min","SNAPSHOT_BUFFER_SIZE","writeSnapshot","snapshotIndex","snapshotStartRow","snapshotEndRow","has","n","get","convertSnapshotIntoCsv","delete","updateDownloadProgress","debug2","size","onDownloadProgressUpdate","downloadProgress","estimateTime","snapshot","csvString","snapshotIterator","iterator","dh","formatter","hasNext","next","value","rowIdx","j","cellData","getData","isDateType","i18n","DateTimeFormat","format","TimeZone","getTimeZone","timeZone","toString","hasCustomColumnFormat","getCachedCustomColumnFormatFlag","formatOverride","cellFormat","getFormat","formatString","getFormattedString","currentGridRange","makeCancelable","RangeSet","ofRange","err","val","readableStreamPulling","makeIframe","setTimeout","STREAM_TIMEOUT","set","SNAPSHOT_HANDLER_TIMEOUT","src","iframe","hidden","body","appendChild","remove","render","Promise","reject"],"sources":["../../src/sidebar/TableSaver.tsx"],"sourcesContent":["import { PureComponent } from 'react';\nimport type {\n Column,\n dh as DhType,\n DateWrapper,\n Table,\n TableData,\n TableViewportSubscription,\n UpdateEventData,\n} from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { GridRange, GridRangeIndex, memoizeClear } from '@deephaven/grid';\nimport { Formatter, FormatterUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport {\n CancelablePromise,\n PromiseUtils,\n assertNotNull,\n} from '@deephaven/utils';\nimport IrisGridUtils from '../IrisGridUtils';\n\nconst log = Log.module('TableSaver');\n\nconst UNFORMATTED_DATE_PATTERN = `yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z`;\n\ninterface TableSaverProps {\n dh: DhType;\n getDownloadWorker: () => Promise<ServiceWorker>;\n isDownloading: boolean;\n onDownloadCompleted: () => void;\n onDownloadCanceled: () => void;\n onDownloadProgressUpdate: (\n progress: number,\n estimatedTime: number | null\n ) => void;\n formatter: Formatter;\n}\n\nfunction isUpdateEventData(data: TableData): data is UpdateEventData {\n return (data as UpdateEventData).added !== undefined;\n}\n\nfunction assertIsUpdateEventData(\n data: TableData\n): asserts data is UpdateEventData {\n if (!isUpdateEventData(data)) {\n throw new Error('event is not UpdateEventData');\n }\n}\n\nexport default class TableSaver extends PureComponent<\n TableSaverProps,\n Record<string, never>\n> {\n static DOWNLOAD_CELL_CHUNK = 6000;\n\n static SNAPSHOT_BUFFER_SIZE = 5;\n\n static STREAM_TIMEOUT = 8000;\n\n static SNAPSHOT_HANDLER_TIMEOUT = 5;\n\n static defaultProps = {\n getDownloadWorker: (): Promise<never> =>\n Promise.reject(new Error('Download worker not provided')),\n isDownloading: false,\n onDownloadCompleted: (): void => undefined,\n onDownloadCanceled: (): void => undefined,\n onDownloadProgressUpdate: (): void => undefined,\n };\n\n static csvEscapeString(str: string): string {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n\n constructor(props: TableSaverProps) {\n super(props);\n\n this.handlePortMessage = this.handlePortMessage.bind(this);\n this.handleSnapshotResolved = this.handleSnapshotResolved.bind(this);\n this.handleDownloadTimeout = this.handleDownloadTimeout.bind(this);\n\n this.state = {};\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.includeColumnHeaders = true;\n this.useUnformattedValues = false;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n // 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.\n // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.\n // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.\n // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494\n\n this.useBlobFallback = false;\n }\n\n componentDidMount(): void {\n const { getDownloadWorker } = this.props;\n getDownloadWorker()\n .then(sw => {\n log.info('found active service worker');\n this.sw = sw;\n this.sw.postMessage('ping'); // just to activate the service worker\n })\n .catch(error => {\n // if service worker is not available, use blob as fallback to download table csv\n log.warn('Download csv is not optimized.', error);\n this.useBlobFallback = true;\n });\n }\n\n componentWillUnmount(): void {\n this.removeIframe();\n if (this.streamTimeout) clearTimeout(this.streamTimeout);\n if (this.snapshotHandlerTimeout) clearTimeout(this.snapshotHandlerTimeout);\n }\n\n sw?: ServiceWorker;\n\n port?: MessagePort;\n\n fileWriter?: WritableStreamDefaultWriter<unknown>;\n\n table?: Table;\n\n tableSubscription?: TableViewportSubscription;\n\n columns?: readonly Column[];\n\n fileName?: string;\n\n includeColumnHeaders: boolean;\n\n useUnformattedValues: boolean;\n\n chunkRows?: number;\n\n gridRanges: readonly GridRange[];\n\n gridRangeCounter?: number;\n\n rangedSnapshotsTotal: readonly number[];\n\n rangedSnapshotCounter?: number;\n\n snapshotsTotal: number;\n\n snapshotCounter: number;\n\n snapshotsBuffer: Map<number, UpdateEventData>;\n\n currentSnapshotIndex: number;\n\n snapshotPending: number;\n\n cancelableSnapshots: (CancelablePromise<unknown> | null)[];\n\n // 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.\n // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.\n // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.\n // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494\n streamTimeout?: ReturnType<typeof setTimeout>;\n\n snapshotHandlerTimeout?: ReturnType<typeof setTimeout>;\n\n downloadStartTime?: number;\n\n iframe?: HTMLIFrameElement;\n\n useBlobFallback: boolean;\n\n getCachedCustomColumnFormatFlag = memoizeClear(\n FormatterUtils.isCustomColumnFormatDefined,\n { max: 10000 }\n );\n\n createWriterStream(port: MessagePort): WritableStream<{\n rows?: string | undefined;\n header?: string | undefined;\n }> {\n // use blob fall back if it's safari\n const useBlob = this.useBlobFallback;\n const chunks = [] as BlobPart[];\n let encode: ((input?: string) => Uint8Array) | null = null;\n if (useBlob) {\n encode = TextEncoder.prototype.encode.bind(new TextEncoder());\n }\n const { fileName } = this;\n\n const streamConfig = {} as UnderlyingSink<{\n rows?: string | undefined;\n header?: string | undefined;\n }>;\n if (useBlob) {\n streamConfig.write = (chunk: { rows?: string; header?: string }) => {\n assertNotNull(encode);\n if (chunk.header !== undefined) {\n chunks.push(encode(chunk.header));\n }\n if (chunk.rows !== undefined) {\n chunks.push(encode(chunk.rows));\n }\n };\n streamConfig.close = () => {\n assertNotNull(fileName);\n const blob = new Blob(chunks, {\n type: 'application/octet-stream; charset=utf-8',\n });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = fileName;\n link.click();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n } else {\n streamConfig.write = (chunk: unknown) => {\n port.postMessage(chunk);\n };\n streamConfig.close = () => {\n port.postMessage({ end: true });\n port.close();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n }\n\n return new WritableStream(streamConfig);\n }\n\n startDownload(\n fileName: string,\n frozenTable: Table,\n tableSubscription: TableViewportSubscription,\n snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ): void {\n // don't trigger another download when a download is ongoing\n const { isDownloading } = this.props;\n if (isDownloading) {\n return;\n }\n\n this.downloadStartTime = Date.now();\n log.info(`start downloading ${fileName}`);\n\n this.table = frozenTable;\n this.columns = IrisGridUtils.columnsFromRanges(\n modelRanges,\n frozenTable.columns\n );\n this.tableSubscription = tableSubscription;\n this.gridRanges = snapshotRanges;\n this.includeColumnHeaders = includeColumnHeaders;\n this.useUnformattedValues = useUnformattedValues;\n\n // Make filename RFC5987 compatible\n const encodedFileName = encodeURIComponent(fileName.replace(/\\//g, ':'))\n .replace(/['()]/g, escape)\n .replace(/\\*/g, '%2A');\n\n const messageChannel = new MessageChannel();\n this.port = messageChannel.port1;\n this.fileName = fileName;\n this.fileWriter = this.createWriterStream(this.port).getWriter();\n\n // if the browser doesn't support stream or there's no active service worker, use blobs for table download\n if (this.useBlobFallback) {\n this.writeCsvTable(includeColumnHeaders);\n return;\n }\n\n if (this.sw) {\n // send file name and port to service worker\n this.sw.postMessage({ encodedFileName }, [messageChannel.port2]);\n }\n this.port.onmessage = this.handlePortMessage;\n }\n\n finishDownload(): void {\n if (this.table) {\n this.table.close();\n }\n if (this.tableSubscription) {\n this.tableSubscription.close();\n }\n if (this.fileWriter) {\n this.fileWriter.close();\n }\n\n const { onDownloadCompleted } = this.props;\n onDownloadCompleted();\n this.resetTableSaver();\n\n if (this.downloadStartTime !== undefined) {\n log.info(\n `download finished, total elapsed time ${\n (Date.now() - this.downloadStartTime) / 1000\n } seconds`\n );\n }\n }\n\n cancelDownload(): void {\n this.table?.close();\n this.tableSubscription?.close();\n this.fileWriter?.abort();\n\n this.cancelableSnapshots.forEach(cancelable => {\n if (cancelable) {\n cancelable.catch(() => null);\n cancelable.cancel();\n }\n });\n const { onDownloadCanceled } = this.props;\n onDownloadCanceled();\n this.resetTableSaver();\n }\n\n resetTableSaver(): void {\n this.table = undefined;\n this.tableSubscription = undefined;\n this.columns = undefined;\n this.chunkRows = undefined;\n this.removeIframe();\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.includeColumnHeaders = true;\n this.useUnformattedValues = false;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n if (this.streamTimeout != null) {\n clearTimeout(this.streamTimeout);\n }\n\n if (this.snapshotHandlerTimeout != null) {\n clearTimeout(this.snapshotHandlerTimeout);\n }\n this.streamTimeout = undefined;\n this.snapshotHandlerTimeout = undefined;\n }\n\n handleDownloadTimeout(): void {\n log.info('download canceled');\n this.cancelDownload();\n }\n\n writeTableHeader(): void {\n let headerString = '';\n if (this.columns) {\n for (let i = 0; i < this.columns.length; i += 1) {\n headerString += this.columns[i].name;\n headerString += i === this.columns.length - 1 ? '\\n' : ',';\n }\n }\n this.fileWriter?.write({ header: headerString }).then(() => null);\n }\n\n startWriteTableBody(): void {\n if (this.columns && this.gridRanges != null) {\n this.chunkRows = Math.floor(\n TableSaver.DOWNLOAD_CELL_CHUNK / this.columns.length\n );\n\n this.rangedSnapshotsTotal = this.gridRanges.map((range: GridRange) => {\n assertNotNull(range.endRow);\n assertNotNull(range.startRow);\n assertNotNull(this.chunkRows);\n\n return Math.ceil((range.endRow - range.startRow + 1) / this.chunkRows);\n });\n this.snapshotsTotal = this.rangedSnapshotsTotal.reduce(\n (total: number, snapshotCount: number) => total + snapshotCount\n );\n\n log.info(`start writing table, total snapshots: `, this.snapshotsTotal);\n\n this.makeSnapshot(\n Math.min(TableSaver.SNAPSHOT_BUFFER_SIZE, this.snapshotsTotal)\n );\n }\n }\n\n writeCsvTable(includeColumnHeaders: boolean): void {\n if (includeColumnHeaders) {\n this.writeTableHeader();\n }\n this.startWriteTableBody();\n }\n\n writeSnapshot(\n snapshotIndex: number,\n snapshotStartRow: GridRangeIndex,\n snapshotEndRow: GridRangeIndex\n ): void {\n if (this.currentSnapshotIndex === snapshotIndex && this.fileWriter) {\n while (this.snapshotsBuffer.has(this.currentSnapshotIndex)) {\n const n = this.snapshotsBuffer.get(this.currentSnapshotIndex);\n assertNotNull(n);\n this.fileWriter.write({\n rows: this.convertSnapshotIntoCsv(n),\n });\n this.snapshotsBuffer.delete(this.currentSnapshotIndex);\n this.currentSnapshotIndex += 1;\n\n this.updateDownloadProgress(snapshotIndex);\n }\n if (\n this.snapshotsTotal &&\n this.currentSnapshotIndex >= this.snapshotsTotal\n ) {\n this.finishDownload();\n return;\n }\n }\n\n if (\n this.snapshotCounter &&\n this.snapshotsTotal &&\n this.snapshotCounter < this.snapshotsTotal\n ) {\n log.debug2(\n `\n current range index: ${this.gridRangeCounter}, \n snapshotIndexCounter: ${this.snapshotCounter}, \n currentRangedSnapshotIndex : ${this.rangedSnapshotCounter}, \n snapshotpending: ${this.snapshotPending}, \n buffered ${this.snapshotsBuffer.size}\n making ${Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )} more snapshots\n `\n );\n this.makeSnapshot(\n Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )\n );\n }\n }\n\n updateDownloadProgress(snapshotIndex: GridRangeIndex): void {\n if (\n snapshotIndex != null &&\n this.snapshotsTotal != null &&\n this.downloadStartTime != null\n ) {\n const { onDownloadProgressUpdate } = this.props;\n const downloadProgress = Math.floor(\n (snapshotIndex * 100) / this.snapshotsTotal\n );\n const estimateTime =\n snapshotIndex > 1\n ? Math.floor(\n ((Date.now() - this.downloadStartTime) *\n (this.snapshotsTotal - snapshotIndex)) /\n snapshotIndex /\n 1000\n )\n : null;\n\n onDownloadProgressUpdate(downloadProgress, estimateTime);\n }\n }\n\n convertSnapshotIntoCsv(snapshot: UpdateEventData): string {\n let csvString = '';\n const snapshotIterator = snapshot.added.iterator();\n const { dh, formatter } = this.props;\n\n const rows = [];\n while (snapshotIterator.hasNext()) {\n rows.push(snapshotIterator.next().value);\n }\n\n assertNotNull(this.columns);\n\n const { useUnformattedValues } = this;\n for (let i = 0; i < rows.length; i += 1) {\n const rowIdx = rows[i];\n for (let j = 0; j < this.columns.length; j += 1) {\n const { type, name } = this.columns[j];\n let cellData = null;\n if (useUnformattedValues) {\n let value = snapshot.getData(rowIdx, this.columns[j]) ?? '';\n if (value !== '' && TableUtils.isDateType(type)) {\n // value is just a long value, we should return the value formatted as a full date string\n value = dh.i18n.DateTimeFormat.format(\n UNFORMATTED_DATE_PATTERN,\n value as number | Date | DateWrapper,\n dh.i18n.TimeZone.getTimeZone(formatter.timeZone)\n );\n }\n cellData = value.toString();\n } else {\n const hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(\n formatter,\n name,\n type\n );\n let formatOverride = null;\n if (!hasCustomColumnFormat) {\n const cellFormat = snapshot.getFormat(rowIdx, this.columns[j]);\n formatOverride =\n cellFormat?.formatString != null ? cellFormat : null;\n }\n if (formatOverride) {\n cellData = formatter.getFormattedString(\n snapshot.getData(rowIdx, this.columns[j]),\n type,\n name,\n formatOverride\n );\n } else {\n cellData = formatter.getFormattedString(\n snapshot.getData(rowIdx, this.columns[j]),\n type,\n name\n );\n }\n }\n csvString += TableSaver.csvEscapeString(cellData);\n csvString += j === this.columns.length - 1 ? '\\n' : ',';\n }\n }\n\n return csvString;\n }\n\n makeSnapshot(n: number): void {\n if (n <= 0) {\n return;\n }\n const { dh } = this.props;\n assertNotNull(this.gridRangeCounter);\n let i = 0;\n let currentGridRange = this.gridRanges[this.gridRangeCounter];\n\n assertNotNull(this.tableSubscription);\n assertNotNull(this.columns);\n while (i < n) {\n assertNotNull(currentGridRange);\n assertNotNull(currentGridRange.startRow);\n assertNotNull(currentGridRange.endRow);\n assertNotNull(this.rangedSnapshotCounter);\n assertNotNull(this.chunkRows);\n const snapshotStartRow =\n currentGridRange.startRow + this.rangedSnapshotCounter * this.chunkRows;\n const snapshotEndRow = Math.min(\n snapshotStartRow + this.chunkRows - 1,\n currentGridRange.endRow\n );\n\n const snapshotIndex = this.snapshotCounter;\n this.cancelableSnapshots.push(\n PromiseUtils.makeCancelable(\n this.tableSubscription\n .snapshot(\n dh.RangeSet.ofRange(snapshotStartRow, snapshotEndRow),\n this.columns\n )\n .then(snapshot => {\n assertIsUpdateEventData(snapshot);\n this.handleSnapshotResolved(\n snapshot,\n snapshotIndex,\n snapshotStartRow,\n snapshotEndRow\n );\n\n return snapshotIndex;\n })\n .catch(err => {\n log.error(err);\n }),\n val => {\n log.info(`snapshot ${val} has been canceled`);\n }\n )\n );\n\n this.rangedSnapshotCounter += 1;\n this.snapshotCounter += 1;\n this.snapshotPending += 1;\n\n if (\n this.rangedSnapshotCounter >=\n this.rangedSnapshotsTotal[this.gridRangeCounter]\n ) {\n this.gridRangeCounter += 1;\n this.rangedSnapshotCounter = 0;\n currentGridRange = this.gridRanges[this.gridRangeCounter];\n }\n i += 1;\n }\n }\n\n handlePortMessage({\n data,\n }: MessageEvent<{\n download: unknown;\n readableStreamPulling: unknown;\n }>): void {\n const { download, readableStreamPulling } = data;\n if (this.useBlobFallback) {\n return;\n }\n if (download != null) {\n const { includeColumnHeaders } = this;\n this.makeIframe(`${download}`);\n this.writeCsvTable(includeColumnHeaders);\n }\n if (readableStreamPulling != null) {\n if (!this.useBlobFallback) {\n if (this.streamTimeout != null) {\n clearTimeout(this.streamTimeout);\n }\n this.streamTimeout = setTimeout(\n this.handleDownloadTimeout,\n TableSaver.STREAM_TIMEOUT\n );\n }\n }\n }\n\n handleSnapshotResolved(\n snapshot: UpdateEventData,\n snapshotIndex: number,\n snapshotStartRow: GridRangeIndex,\n snapshotEndRow: GridRangeIndex\n ): void {\n // 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.\n this.snapshotHandlerTimeout = setTimeout(() => {\n this.snapshotsBuffer.set(snapshotIndex, snapshot);\n this.snapshotPending -= 1;\n this.writeSnapshot(snapshotIndex, snapshotStartRow, snapshotEndRow);\n this.cancelableSnapshots[snapshotIndex] = null;\n }, TableSaver.SNAPSHOT_HANDLER_TIMEOUT);\n }\n\n makeIframe(src: string): void {\n // make a return value and make it static method\n const iframe = document.createElement('iframe');\n iframe.hidden = true;\n iframe.src = src;\n iframe.name = 'iframe';\n document.body.appendChild(iframe);\n this.iframe = iframe;\n }\n\n removeIframe(): void {\n this.iframe?.remove();\n this.iframe = undefined;\n }\n\n render(): null {\n return null;\n }\n}\n"],"mappings":"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"}
@@ -11,8 +11,7 @@ import TableSaver from './TableSaver';
11
11
  import VisibilityOrderingBuilder from './visibility-ordering-builder/VisibilityOrderingBuilder';
12
12
  import { FormattingRule } from './conditional-formatting/ConditionalFormattingUtils';
13
13
  import AdvancedSettingsType from './AdvancedSettingsType';
14
- import DownloadServiceWorkerUtils from './DownloadServiceWorkerUtils';
15
- export { AdvancedSettings, Aggregations, AggregationEdit, AggregationUtils, ChartBuilder, CustomColumnBuilder, OptionType, RollupRows, TableCsvExporter, TableSaver, VisibilityOrderingBuilder, AdvancedSettingsType, DownloadServiceWorkerUtils, };
14
+ export { AdvancedSettings, Aggregations, AggregationEdit, AggregationUtils, ChartBuilder, CustomColumnBuilder, OptionType, RollupRows, TableCsvExporter, TableSaver, VisibilityOrderingBuilder, AdvancedSettingsType, };
16
15
  export type { FormattingRule as SidebarFormattingRule };
17
16
  export * from './aggregations';
18
17
  export * from './RollupRows';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sidebar/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,YAAY,MAAM,6BAA6B,CAAC;AACvD,OAAO,eAAe,MAAM,gCAAgC,CAAC;AAC7D,OAAO,gBAAgB,MAAM,iCAAiC,CAAC;AAC/D,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,yBAAyB,MAAM,yDAAyD,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAC;AACrF,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AAEtE,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,GAC3B,CAAC;AAEF,YAAY,EAAE,cAAc,IAAI,qBAAqB,EAAE,CAAC;AACxD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sidebar/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,YAAY,MAAM,6BAA6B,CAAC;AACvD,OAAO,eAAe,MAAM,gCAAgC,CAAC;AAC7D,OAAO,gBAAgB,MAAM,iCAAiC,CAAC;AAC/D,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,yBAAyB,MAAM,yDAAyD,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAC;AACrF,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,yBAAyB,EACzB,oBAAoB,GACrB,CAAC;AAEF,YAAY,EAAE,cAAc,IAAI,qBAAqB,EAAE,CAAC;AACxD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC"}
@@ -10,8 +10,7 @@ import TableCsvExporter from "./TableCsvExporter.js";
10
10
  import TableSaver from "./TableSaver.js";
11
11
  import VisibilityOrderingBuilder from "./visibility-ordering-builder/VisibilityOrderingBuilder.js";
12
12
  import AdvancedSettingsType from "./AdvancedSettingsType.js";
13
- import DownloadServiceWorkerUtils from "./DownloadServiceWorkerUtils.js";
14
- export { AdvancedSettings, Aggregations, AggregationEdit, AggregationUtils, ChartBuilder, CustomColumnBuilder, OptionType, RollupRows, TableCsvExporter, TableSaver, VisibilityOrderingBuilder, AdvancedSettingsType, DownloadServiceWorkerUtils };
13
+ export { AdvancedSettings, Aggregations, AggregationEdit, AggregationUtils, ChartBuilder, CustomColumnBuilder, OptionType, RollupRows, TableCsvExporter, TableSaver, VisibilityOrderingBuilder, AdvancedSettingsType };
15
14
  export * from "./aggregations/index.js";
16
15
  export * from "./RollupRows.js";
17
16
  export * from "./ChartBuilder.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["AdvancedSettings","Aggregations","AggregationEdit","AggregationUtils","ChartBuilder","CustomColumnBuilder","OptionType","RollupRows","TableCsvExporter","TableSaver","VisibilityOrderingBuilder","AdvancedSettingsType","DownloadServiceWorkerUtils"],"sources":["../../src/sidebar/index.ts"],"sourcesContent":["import AdvancedSettings from './AdvancedSettings';\nimport Aggregations from './aggregations/Aggregations';\nimport AggregationEdit from './aggregations/AggregationEdit';\nimport AggregationUtils from './aggregations/AggregationUtils';\nimport ChartBuilder from './ChartBuilder';\nimport CustomColumnBuilder from './CustomColumnBuilder';\nimport OptionType from './OptionType';\nimport RollupRows from './RollupRows';\nimport TableCsvExporter from './TableCsvExporter';\nimport TableSaver from './TableSaver';\nimport VisibilityOrderingBuilder from './visibility-ordering-builder/VisibilityOrderingBuilder';\nimport { FormattingRule } from './conditional-formatting/ConditionalFormattingUtils';\nimport AdvancedSettingsType from './AdvancedSettingsType';\nimport DownloadServiceWorkerUtils from './DownloadServiceWorkerUtils';\n\nexport {\n AdvancedSettings,\n Aggregations,\n AggregationEdit,\n AggregationUtils,\n ChartBuilder,\n CustomColumnBuilder,\n OptionType,\n RollupRows,\n TableCsvExporter,\n TableSaver,\n VisibilityOrderingBuilder,\n AdvancedSettingsType,\n DownloadServiceWorkerUtils,\n};\n\nexport type { FormattingRule as SidebarFormattingRule };\nexport * from './aggregations';\nexport * from './RollupRows';\nexport * from './ChartBuilder';\nexport * from './InputEditor';\nexport * from './icons';\n"],"mappings":"OAAOA,gBAAgB;AAAA,OAChBC,YAAY;AAAA,OACZC,eAAe;AAAA,OACfC,gBAAgB;AAAA,OAChBC,YAAY;AAAA,OACZC,mBAAmB;AAAA,OACnBC,UAAU;AAAA,OACVC,UAAU;AAAA,OACVC,gBAAgB;AAAA,OAChBC,UAAU;AAAA,OACVC,yBAAyB;AAAA,OAEzBC,oBAAoB;AAAA,OACpBC,0BAA0B;AAEjC,SACEZ,gBAAgB,EAChBC,YAAY,EACZC,eAAe,EACfC,gBAAgB,EAChBC,YAAY,EACZC,mBAAmB,EACnBC,UAAU,EACVC,UAAU,EACVC,gBAAgB,EAChBC,UAAU,EACVC,yBAAyB,EACzBC,oBAAoB,EACpBC,0BAA0B;AAC1B;AAAA;AAAA;AAAA;AAAA"}
1
+ {"version":3,"file":"index.js","names":["AdvancedSettings","Aggregations","AggregationEdit","AggregationUtils","ChartBuilder","CustomColumnBuilder","OptionType","RollupRows","TableCsvExporter","TableSaver","VisibilityOrderingBuilder","AdvancedSettingsType"],"sources":["../../src/sidebar/index.ts"],"sourcesContent":["import AdvancedSettings from './AdvancedSettings';\nimport Aggregations from './aggregations/Aggregations';\nimport AggregationEdit from './aggregations/AggregationEdit';\nimport AggregationUtils from './aggregations/AggregationUtils';\nimport ChartBuilder from './ChartBuilder';\nimport CustomColumnBuilder from './CustomColumnBuilder';\nimport OptionType from './OptionType';\nimport RollupRows from './RollupRows';\nimport TableCsvExporter from './TableCsvExporter';\nimport TableSaver from './TableSaver';\nimport VisibilityOrderingBuilder from './visibility-ordering-builder/VisibilityOrderingBuilder';\nimport { FormattingRule } from './conditional-formatting/ConditionalFormattingUtils';\nimport AdvancedSettingsType from './AdvancedSettingsType';\n\nexport {\n AdvancedSettings,\n Aggregations,\n AggregationEdit,\n AggregationUtils,\n ChartBuilder,\n CustomColumnBuilder,\n OptionType,\n RollupRows,\n TableCsvExporter,\n TableSaver,\n VisibilityOrderingBuilder,\n AdvancedSettingsType,\n};\n\nexport type { FormattingRule as SidebarFormattingRule };\nexport * from './aggregations';\nexport * from './RollupRows';\nexport * from './ChartBuilder';\nexport * from './InputEditor';\nexport * from './icons';\n"],"mappings":"OAAOA,gBAAgB;AAAA,OAChBC,YAAY;AAAA,OACZC,eAAe;AAAA,OACfC,gBAAgB;AAAA,OAChBC,YAAY;AAAA,OACZC,mBAAmB;AAAA,OACnBC,UAAU;AAAA,OACVC,UAAU;AAAA,OACVC,gBAAgB;AAAA,OAChBC,UAAU;AAAA,OACVC,yBAAyB;AAAA,OAEzBC,oBAAoB;AAE3B,SACEX,gBAAgB,EAChBC,YAAY,EACZC,eAAe,EACfC,gBAAgB,EAChBC,YAAY,EACZC,mBAAmB,EACnBC,UAAU,EACVC,UAAU,EACVC,gBAAgB,EAChBC,UAAU,EACVC,yBAAyB,EACzBC,oBAAoB;AACpB;AAAA;AAAA;AAAA;AAAA"}