@deephaven/iris-grid 1.22.1 → 1.22.2-alpha-pivot-builder.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 (195) hide show
  1. package/README.md +284 -1
  2. package/dist/AdvancedFilterCreator.js +65 -102
  3. package/dist/AdvancedFilterCreator.js.map +1 -1
  4. package/dist/AdvancedFilterCreatorFilterItem.js +22 -37
  5. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  6. package/dist/AdvancedFilterCreatorSelectValue.js +37 -63
  7. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  8. package/dist/AdvancedFilterCreatorSelectValueList.js +29 -59
  9. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  10. package/dist/ColumnHeaderGroup.js +6 -8
  11. package/dist/ColumnHeaderGroup.js.map +1 -1
  12. package/dist/ColumnStatistics.js +22 -28
  13. package/dist/ColumnStatistics.js.map +1 -1
  14. package/dist/CommonTypes.d.ts +62 -2
  15. package/dist/CommonTypes.d.ts.map +1 -1
  16. package/dist/CommonTypes.js.map +1 -1
  17. package/dist/CrossColumnSearch.js +20 -29
  18. package/dist/CrossColumnSearch.js.map +1 -1
  19. package/dist/FilterInputField.js +19 -46
  20. package/dist/FilterInputField.js.map +1 -1
  21. package/dist/GotoRow.js +32 -29
  22. package/dist/GotoRow.js.map +1 -1
  23. package/dist/IrisGrid.d.ts +85 -2
  24. package/dist/IrisGrid.d.ts.map +1 -1
  25. package/dist/IrisGrid.js +709 -861
  26. package/dist/IrisGrid.js.map +1 -1
  27. package/dist/IrisGridBottomBar.js +10 -11
  28. package/dist/IrisGridBottomBar.js.map +1 -1
  29. package/dist/IrisGridCacheUtils.js +28 -8
  30. package/dist/IrisGridCacheUtils.js.map +1 -1
  31. package/dist/IrisGridCellOverflowModal.js +30 -13
  32. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  33. package/dist/IrisGridCellRendererUtils.js +6 -12
  34. package/dist/IrisGridCellRendererUtils.js.map +1 -1
  35. package/dist/IrisGridCopyHandler.js +28 -47
  36. package/dist/IrisGridCopyHandler.js.map +1 -1
  37. package/dist/IrisGridMetricCalculator.js +28 -51
  38. package/dist/IrisGridMetricCalculator.js.map +1 -1
  39. package/dist/IrisGridModel.d.ts +30 -1
  40. package/dist/IrisGridModel.d.ts.map +1 -1
  41. package/dist/IrisGridModel.js +36 -1
  42. package/dist/IrisGridModel.js.map +1 -1
  43. package/dist/IrisGridModelUpdater.js +32 -30
  44. package/dist/IrisGridModelUpdater.js.map +1 -1
  45. package/dist/IrisGridModelWidgetProps.d.ts +26 -0
  46. package/dist/IrisGridModelWidgetProps.d.ts.map +1 -0
  47. package/dist/IrisGridModelWidgetProps.js +2 -0
  48. package/dist/IrisGridModelWidgetProps.js.map +1 -0
  49. package/dist/IrisGridPartitionSelector.js +28 -62
  50. package/dist/IrisGridPartitionSelector.js.map +1 -1
  51. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  52. package/dist/IrisGridProxyModel.js +41 -14
  53. package/dist/IrisGridProxyModel.js.map +1 -1
  54. package/dist/IrisGridRenderer.js +162 -264
  55. package/dist/IrisGridRenderer.js.map +1 -1
  56. package/dist/IrisGridTableModel.js +23 -16
  57. package/dist/IrisGridTableModel.js.map +1 -1
  58. package/dist/IrisGridTableModelTemplate.js +49 -73
  59. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  60. package/dist/IrisGridTestUtils.js +19 -19
  61. package/dist/IrisGridTestUtils.js.map +1 -1
  62. package/dist/IrisGridTextCellRenderer.d.ts.map +1 -1
  63. package/dist/IrisGridTextCellRenderer.js +36 -53
  64. package/dist/IrisGridTextCellRenderer.js.map +1 -1
  65. package/dist/IrisGridTheme.js +9 -1
  66. package/dist/IrisGridTheme.js.map +1 -1
  67. package/dist/IrisGridThemeProvider.js +5 -7
  68. package/dist/IrisGridThemeProvider.js.map +1 -1
  69. package/dist/IrisGridTreeTableModel.js +5 -9
  70. package/dist/IrisGridTreeTableModel.js.map +1 -1
  71. package/dist/IrisGridUtils.d.ts +25 -2
  72. package/dist/IrisGridUtils.d.ts.map +1 -1
  73. package/dist/IrisGridUtils.js +297 -294
  74. package/dist/IrisGridUtils.js.map +1 -1
  75. package/dist/LazyIrisGrid.d.ts +1 -1
  76. package/dist/NoPastePermissionModal.js +3 -5
  77. package/dist/NoPastePermissionModal.js.map +1 -1
  78. package/dist/PendingDataBottomBar.js +27 -16
  79. package/dist/PendingDataBottomBar.js.map +1 -1
  80. package/dist/ToastBottomBar.js +16 -8
  81. package/dist/ToastBottomBar.js.map +1 -1
  82. package/dist/format-context-menus/CustomFormatAction.js +11 -24
  83. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  84. package/dist/index.d.ts +1 -0
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +1 -0
  87. package/dist/index.js.map +1 -1
  88. package/dist/key-handlers/CopyCellKeyHandler.js +3 -4
  89. package/dist/key-handlers/CopyCellKeyHandler.js.map +1 -1
  90. package/dist/key-handlers/CopyKeyHandler.js +1 -3
  91. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  92. package/dist/key-handlers/ReverseKeyHandler.js +1 -3
  93. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  94. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +35 -59
  95. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  96. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +13 -29
  97. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  98. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +8 -17
  99. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  100. package/dist/mousehandlers/IrisGridContextMenuHandler.js +96 -199
  101. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  102. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +2 -4
  103. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  104. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +16 -30
  105. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  106. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js +5 -13
  107. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js.map +1 -1
  108. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +20 -36
  109. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
  110. package/dist/mousehandlers/IrisGridSortMouseHandler.js +3 -5
  111. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  112. package/dist/mousehandlers/IrisGridTokenMouseHandler.js +9 -18
  113. package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
  114. package/dist/mousehandlers/PendingMouseHandler.js +10 -18
  115. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  116. package/dist/sidebar/AdvancedSettingsMenu.js +12 -5
  117. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  118. package/dist/sidebar/ChartBuilder.js +45 -102
  119. package/dist/sidebar/ChartBuilder.js.map +1 -1
  120. package/dist/sidebar/CustomColumnBuilder.js +35 -77
  121. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  122. package/dist/sidebar/CustomColumnInput.js +9 -11
  123. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  124. package/dist/sidebar/InputEditor.js +17 -24
  125. package/dist/sidebar/InputEditor.js.map +1 -1
  126. package/dist/sidebar/IrisGridTableOptionsWidgetProps.d.ts +22 -0
  127. package/dist/sidebar/IrisGridTableOptionsWidgetProps.d.ts.map +1 -0
  128. package/dist/sidebar/IrisGridTableOptionsWidgetProps.js +2 -0
  129. package/dist/sidebar/IrisGridTableOptionsWidgetProps.js.map +1 -0
  130. package/dist/sidebar/OptionType.d.ts +8 -0
  131. package/dist/sidebar/OptionType.d.ts.map +1 -1
  132. package/dist/sidebar/OptionType.js +7 -0
  133. package/dist/sidebar/OptionType.js.map +1 -1
  134. package/dist/sidebar/PluginTableOptionsErrorBoundary.d.ts +30 -0
  135. package/dist/sidebar/PluginTableOptionsErrorBoundary.d.ts.map +1 -0
  136. package/dist/sidebar/PluginTableOptionsErrorBoundary.js +55 -0
  137. package/dist/sidebar/PluginTableOptionsErrorBoundary.js.map +1 -0
  138. package/dist/sidebar/RollupRows.js +72 -113
  139. package/dist/sidebar/RollupRows.js.map +1 -1
  140. package/dist/sidebar/SelectDistinctBuilder.js +16 -33
  141. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  142. package/dist/sidebar/TableCsvExporter.js +50 -74
  143. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  144. package/dist/sidebar/TableSaver.js +18 -42
  145. package/dist/sidebar/TableSaver.js.map +1 -1
  146. package/dist/sidebar/aggregations/AggregationEdit.js +25 -18
  147. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  148. package/dist/sidebar/aggregations/AggregationUtils.js +1 -3
  149. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  150. package/dist/sidebar/aggregations/Aggregations.js +45 -34
  151. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  152. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +35 -24
  153. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  154. package/dist/sidebar/conditional-formatting/ConditionEditor.js +38 -21
  155. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  156. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +27 -11
  157. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  158. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +9 -11
  159. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  160. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +48 -57
  161. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  162. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +35 -24
  163. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  164. package/dist/sidebar/conditional-formatting/StyleEditor.js +26 -11
  165. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  166. package/dist/sidebar/index.d.ts +3 -2
  167. package/dist/sidebar/index.d.ts.map +1 -1
  168. package/dist/sidebar/index.js.map +1 -1
  169. package/dist/sidebar/visibility-ordering-builder/SearchItem.js +5 -7
  170. package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -1
  171. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +24 -18
  172. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -1
  173. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +166 -256
  174. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  175. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +4 -11
  176. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
  177. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +28 -14
  178. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
  179. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +16 -19
  180. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
  181. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +1 -3
  182. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
  183. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +19 -29
  184. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
  185. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +39 -52
  186. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -1
  187. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +18 -23
  188. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
  189. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +19 -15
  190. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
  191. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +16 -30
  192. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
  193. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +30 -39
  194. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  195. package/package.json +16 -16
@@ -5,17 +5,16 @@ import { ThemeExport } from '@deephaven/components';
5
5
  import "./IrisGridBottomBar.css";
6
6
  import { jsx as _jsx } from "react/jsx-runtime";
7
7
  export function IrisGridBottomBar(_ref) {
8
- var {
9
- animation = 'iris-grid-bottom-bar-slide-up',
10
- children,
11
- className,
12
- isShown,
13
- onClick,
14
- onEntering,
15
- onEntered,
16
- onExiting,
17
- onExited
18
- } = _ref;
8
+ var _ref$animation = _ref.animation,
9
+ animation = _ref$animation === void 0 ? 'iris-grid-bottom-bar-slide-up' : _ref$animation,
10
+ children = _ref.children,
11
+ className = _ref.className,
12
+ isShown = _ref.isShown,
13
+ onClick = _ref.onClick,
14
+ onEntering = _ref.onEntering,
15
+ onEntered = _ref.onEntered,
16
+ onExiting = _ref.onExiting,
17
+ onExited = _ref.onExited;
19
18
  var nodeRef = useRef(null);
20
19
  return /*#__PURE__*/_jsx(CSSTransition, {
21
20
  in: isShown,
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridBottomBar.js","names":["React","useRef","classNames","CSSTransition","ThemeExport","jsx","_jsx","IrisGridBottomBar","_ref","animation","children","className","isShown","onClick","onEntering","onEntered","onExiting","onExited","nodeRef","in","timeout","transitionMs","mountOnEnter","unmountOnExit","ref","role","onKeyPress"],"sources":["../src/IrisGridBottomBar.tsx"],"sourcesContent":["import React, { useRef } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport './IrisGridBottomBar.scss';\n\nexport type IrisGridBottomBarProps = {\n animation?: string;\n children: React.ReactNode;\n onClick?: () => void;\n onEntering?: () => void;\n onEntered?: () => void;\n onExiting?: () => void;\n onExited?: () => void;\n isShown: boolean;\n className?: string;\n};\n\nexport function IrisGridBottomBar({\n animation = 'iris-grid-bottom-bar-slide-up',\n children,\n className,\n isShown,\n onClick,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n}: IrisGridBottomBarProps): JSX.Element {\n const nodeRef = useRef<HTMLDivElement>(null);\n return (\n <CSSTransition\n in={isShown}\n timeout={ThemeExport.transitionMs}\n classNames={animation}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={onExited}\n mountOnEnter\n unmountOnExit\n nodeRef={nodeRef}\n >\n <div\n ref={nodeRef}\n className={classNames('iris-grid-bottom-bar', className)}\n role=\"presentation\"\n onClick={onClick}\n onKeyPress={onClick}\n >\n {children}\n </div>\n </CSSTransition>\n );\n}\n\nexport default IrisGridBottomBar;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,MAAM,QAAQ,OAAO;AACrC,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,aAAa,QAAQ,wBAAwB;AACtD,SAASC,WAAW,QAAQ,uBAAuB;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAepD,OAAO,SAASC,iBAAiBA,CAAAC,IAAA,EAUO;EAAA,IAVN;IAChCC,SAAS,GAAG,+BAA+B;IAC3CC,QAAQ;IACRC,SAAS;IACTC,OAAO;IACPC,OAAO;IACPC,UAAU;IACVC,SAAS;IACTC,SAAS;IACTC;EACsB,CAAC,GAAAT,IAAA;EACvB,IAAMU,OAAO,GAAGjB,MAAM,CAAiB,IAAI,CAAC;EAC5C,oBACEK,IAAA,CAACH,aAAa;IACZgB,EAAE,EAAEP,OAAQ;IACZQ,OAAO,EAAEhB,WAAW,CAACiB,YAAa;IAClCnB,UAAU,EAAEO,SAAU;IACtBK,UAAU,EAAEA,UAAW;IACvBC,SAAS,EAAEA,SAAU;IACrBC,SAAS,EAAEA,SAAU;IACrBC,QAAQ,EAAEA,QAAS;IACnBK,YAAY;IACZC,aAAa;IACbL,OAAO,EAAEA,OAAQ;IAAAR,QAAA,eAEjBJ,IAAA;MACEkB,GAAG,EAAEN,OAAQ;MACbP,SAAS,EAAET,UAAU,CAAC,sBAAsB,EAAES,SAAS,CAAE;MACzDc,IAAI,EAAC,cAAc;MACnBZ,OAAO,EAAEA,OAAQ;MACjBa,UAAU,EAAEb,OAAQ;MAAAH,QAAA,EAEnBA;IAAQ,CACN;EAAC,CACO,CAAC;AAEpB;AAEA,eAAeH,iBAAiB","ignoreList":[]}
1
+ {"version":3,"file":"IrisGridBottomBar.js","names":["React","useRef","classNames","CSSTransition","ThemeExport","jsx","_jsx","IrisGridBottomBar","_ref","_ref$animation","animation","children","className","isShown","onClick","onEntering","onEntered","onExiting","onExited","nodeRef","in","timeout","transitionMs","mountOnEnter","unmountOnExit","ref","role","onKeyPress"],"sources":["../src/IrisGridBottomBar.tsx"],"sourcesContent":["import React, { useRef } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport './IrisGridBottomBar.scss';\n\nexport type IrisGridBottomBarProps = {\n animation?: string;\n children: React.ReactNode;\n onClick?: () => void;\n onEntering?: () => void;\n onEntered?: () => void;\n onExiting?: () => void;\n onExited?: () => void;\n isShown: boolean;\n className?: string;\n};\n\nexport function IrisGridBottomBar({\n animation = 'iris-grid-bottom-bar-slide-up',\n children,\n className,\n isShown,\n onClick,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n}: IrisGridBottomBarProps): JSX.Element {\n const nodeRef = useRef<HTMLDivElement>(null);\n return (\n <CSSTransition\n in={isShown}\n timeout={ThemeExport.transitionMs}\n classNames={animation}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={onExited}\n mountOnEnter\n unmountOnExit\n nodeRef={nodeRef}\n >\n <div\n ref={nodeRef}\n className={classNames('iris-grid-bottom-bar', className)}\n role=\"presentation\"\n onClick={onClick}\n onKeyPress={onClick}\n >\n {children}\n </div>\n </CSSTransition>\n );\n}\n\nexport default IrisGridBottomBar;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,MAAM,QAAQ,OAAO;AACrC,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,aAAa,QAAQ,wBAAwB;AACtD,SAASC,WAAW,QAAQ,uBAAuB;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAepD,OAAO,SAASC,iBAAiBA,CAAAC,IAAA,EAUO;EAAA,IAAAC,cAAA,GAAAD,IAAA,CATtCE,SAAS;IAATA,SAAS,GAAAD,cAAA,cAAG,+BAA+B,GAAAA,cAAA;IAC3CE,QAAQ,GAAAH,IAAA,CAARG,QAAQ;IACRC,SAAS,GAAAJ,IAAA,CAATI,SAAS;IACTC,OAAO,GAAAL,IAAA,CAAPK,OAAO;IACPC,OAAO,GAAAN,IAAA,CAAPM,OAAO;IACPC,UAAU,GAAAP,IAAA,CAAVO,UAAU;IACVC,SAAS,GAAAR,IAAA,CAATQ,SAAS;IACTC,SAAS,GAAAT,IAAA,CAATS,SAAS;IACTC,QAAQ,GAAAV,IAAA,CAARU,QAAQ;EAER,IAAMC,OAAO,GAAGlB,MAAM,CAAiB,IAAI,CAAC;EAC5C,oBACEK,IAAA,CAACH,aAAa;IACZiB,EAAE,EAAEP,OAAQ;IACZQ,OAAO,EAAEjB,WAAW,CAACkB,YAAa;IAClCpB,UAAU,EAAEQ,SAAU;IACtBK,UAAU,EAAEA,UAAW;IACvBC,SAAS,EAAEA,SAAU;IACrBC,SAAS,EAAEA,SAAU;IACrBC,QAAQ,EAAEA,QAAS;IACnBK,YAAY;IACZC,aAAa;IACbL,OAAO,EAAEA,OAAQ;IAAAR,QAAA,eAEjBL,IAAA;MACEmB,GAAG,EAAEN,OAAQ;MACbP,SAAS,EAAEV,UAAU,CAAC,sBAAsB,EAAEU,SAAS,CAAE;MACzDc,IAAI,EAAC,cAAc;MACnBZ,OAAO,EAAEA,OAAQ;MACjBa,UAAU,EAAEb,OAAQ;MAAAH,QAAA,EAEnBA;IAAQ,CACN;EAAC,CACO,CAAC;AAEpB;AAEA,eAAeJ,iBAAiB","ignoreList":[]}
@@ -3,6 +3,12 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
3
3
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
5
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
7
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
8
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
9
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
10
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
11
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
6
12
  /* eslint-disable import/prefer-default-export */
7
13
 
8
14
  import memoizeOne from 'memoize-one';
@@ -39,8 +45,12 @@ function areIrisGridStatesEqual(irisGridStateA, irisGridStateB) {
39
45
  */
40
46
  function makeMemoizedGridStateDehydrator() {
41
47
  return memoizeOne((model, gridState) => IrisGridUtils.dehydrateGridState(model, gridState), (_ref, _ref2) => {
42
- var [modelA, gridStateA] = _ref;
43
- var [modelB, gridStateB] = _ref2;
48
+ var _ref3 = _slicedToArray(_ref, 2),
49
+ modelA = _ref3[0],
50
+ gridStateA = _ref3[1];
51
+ var _ref4 = _slicedToArray(_ref2, 2),
52
+ modelB = _ref4[0],
53
+ gridStateB = _ref4[1];
44
54
  return modelA === modelB && areGridStatesEqual(gridStateA, gridStateB);
45
55
  });
46
56
  }
@@ -54,9 +64,13 @@ function makeMemoizedIrisGridStateDehydrator() {
54
64
  return memoizeOne((model, irisGridState) => {
55
65
  var irisGridUtils = new IrisGridUtils(model.dh);
56
66
  return irisGridUtils.dehydrateIrisGridState(model, irisGridState);
57
- }, (_ref3, _ref4) => {
58
- var [modelA, irisGridStateA] = _ref3;
59
- var [modelB, irisGridStateB] = _ref4;
67
+ }, (_ref5, _ref6) => {
68
+ var _ref7 = _slicedToArray(_ref5, 2),
69
+ modelA = _ref7[0],
70
+ irisGridStateA = _ref7[1];
71
+ var _ref8 = _slicedToArray(_ref6, 2),
72
+ modelB = _ref8[0],
73
+ irisGridStateB = _ref8[1];
60
74
  return modelA === modelB && areIrisGridStatesEqual(irisGridStateA, irisGridStateB);
61
75
  });
62
76
  }
@@ -71,9 +85,15 @@ function makeMemoizedCombinedGridStateDehydrator() {
71
85
  return memoizeOne((model, irisGridState, gridState) => {
72
86
  var irisGridUtils = new IrisGridUtils(model.dh);
73
87
  return _objectSpread(_objectSpread({}, irisGridUtils.dehydrateIrisGridState(model, irisGridState)), IrisGridUtils.dehydrateGridState(model, gridState));
74
- }, (_ref5, _ref6) => {
75
- var [modelA, irisGridStateA, gridStateA] = _ref5;
76
- var [modelB, irisGridStateB, gridStateB] = _ref6;
88
+ }, (_ref9, _ref0) => {
89
+ var _ref1 = _slicedToArray(_ref9, 3),
90
+ modelA = _ref1[0],
91
+ irisGridStateA = _ref1[1],
92
+ gridStateA = _ref1[2];
93
+ var _ref10 = _slicedToArray(_ref0, 3),
94
+ modelB = _ref10[0],
95
+ irisGridStateB = _ref10[1],
96
+ gridStateB = _ref10[2];
77
97
  return modelA === modelB && areIrisGridStatesEqual(irisGridStateA, irisGridStateB) && areGridStatesEqual(gridStateA, gridStateB);
78
98
  });
79
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridCacheUtils.js","names":["memoizeOne","IrisGridUtils","areGridStatesEqual","gridStateA","gridStateB","compareKeys","every","key","areIrisGridStatesEqual","irisGridStateA","irisGridStateB","compareStateKeys","metrics","metricCalculator","userColumnWidths","userRowHeights","makeMemoizedGridStateDehydrator","model","gridState","dehydrateGridState","_ref","_ref2","modelA","modelB","makeMemoizedIrisGridStateDehydrator","irisGridState","irisGridUtils","dh","dehydrateIrisGridState","_ref3","_ref4","makeMemoizedCombinedGridStateDehydrator","_objectSpread","_ref5","_ref6","IrisGridCacheUtils"],"sources":["../src/IrisGridCacheUtils.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\nimport { type GridState } from '@deephaven/grid';\nimport memoizeOne from 'memoize-one';\nimport type IrisGridModel from './IrisGridModel';\nimport IrisGridUtils, {\n type DehydratedGridState,\n type DehydratedIrisGridState,\n type HydratedGridState,\n type HydratedIrisGridState,\n} from './IrisGridUtils';\n\n/**\n * Checks if 2 grid states are equivalent.\n * Checks values and does not require referential equality of the entire state, just the values we care about.\n * @param gridStateA First grid state\n * @param gridStateB Second grid state\n * @returns True if the states are equivalent\n */\nfunction areGridStatesEqual(\n gridStateA: HydratedGridState,\n gridStateB: HydratedGridState\n): boolean {\n const compareKeys = [\n 'isStuckToBottom',\n 'isStuckToRight',\n 'movedColumns',\n 'movedRows',\n ] satisfies Array<keyof GridState>;\n return (\n gridStateA === gridStateB ||\n compareKeys.every(key => gridStateA[key] === gridStateB[key])\n );\n}\n\n/**\n * Checks if 2 iris grid states are equivalent.\n * Checks values and does not require referential equality of the entire state, just the values we care about.\n * @param irisGridStateA First iris grid state\n * @param irisGridStateB Second iris grid state\n * @returns True if the states are equivalent\n */\nfunction areIrisGridStatesEqual(\n irisGridStateA: HydratedIrisGridState,\n irisGridStateB: HydratedIrisGridState\n): boolean {\n // Top level keys we want to check for referential equality\n const compareStateKeys = [\n 'advancedFilters',\n 'aggregationSettings',\n 'customColumnFormatMap',\n 'columnAlignmentMap',\n 'isFilterBarShown',\n 'quickFilters',\n 'customColumns',\n 'reverse',\n 'rollupConfig',\n 'showSearchBar',\n 'searchValue',\n 'selectDistinctColumns',\n 'selectedSearchColumns',\n 'sorts',\n 'invertSearchColumns',\n 'pendingDataMap',\n 'frozenColumns',\n 'conditionalFormats',\n 'columnHeaderGroups',\n 'partitionConfig',\n ] satisfies Array<keyof HydratedIrisGridState>;\n\n return (\n irisGridStateA === irisGridStateB ||\n (irisGridStateA.metrics != null &&\n irisGridStateB.metrics != null &&\n irisGridStateA.metricCalculator === irisGridStateB.metricCalculator &&\n irisGridStateA.metrics.userColumnWidths ===\n irisGridStateB.metrics.userColumnWidths &&\n irisGridStateA.metrics.userRowHeights ===\n irisGridStateB.metrics.userRowHeights &&\n compareStateKeys.every(\n key => irisGridStateA[key] === irisGridStateB[key]\n ))\n );\n}\n\n/**\n * Creates a dehydrator function for grid state that is memoized on the last call.\n * Only tracks 1 state at a time. If the model and input states are equal, returns the same dehydrated state object reference.\n * @returns A dehydrator function memoized on the last call\n */\nfunction makeMemoizedGridStateDehydrator(): (\n model: IrisGridModel,\n gridState: HydratedGridState\n) => DehydratedGridState {\n return memoizeOne(\n (model: IrisGridModel, gridState: HydratedGridState) =>\n IrisGridUtils.dehydrateGridState(model, gridState),\n ([modelA, gridStateA], [modelB, gridStateB]) =>\n modelA === modelB && areGridStatesEqual(gridStateA, gridStateB)\n );\n}\n\n/**\n * Creates a dehydrator function for iris grid state that is memoized on the last call.\n * Only tracks 1 state at a time. If the model and input states are equal, returns the same dehydrated state object reference.\n * @returns A dehydrator function memoized on the last call\n */\nfunction makeMemoizedIrisGridStateDehydrator(): (\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState\n) => DehydratedIrisGridState {\n return memoizeOne(\n (model: IrisGridModel, irisGridState: HydratedIrisGridState) => {\n const irisGridUtils = new IrisGridUtils(model.dh);\n return irisGridUtils.dehydrateIrisGridState(model, irisGridState);\n },\n ([modelA, irisGridStateA], [modelB, irisGridStateB]) =>\n modelA === modelB &&\n areIrisGridStatesEqual(irisGridStateA, irisGridStateB)\n );\n}\n\n/**\n * Creates a dehydrator function for grid and iris grid state that is memoized on the last call.\n * Only tracks 1 state at a time. If the model and input states are equal, returns the same dehydrated state object reference.\n * Combines the dehydrated grid and iris grid states into a single object.\n * @returns A dehydrator function memoized on the last call\n */\nfunction makeMemoizedCombinedGridStateDehydrator(): (\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState,\n gridState: HydratedGridState\n) => DehydratedIrisGridState & DehydratedGridState {\n return memoizeOne(\n (\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState,\n gridState: HydratedGridState\n ): DehydratedIrisGridState & DehydratedGridState => {\n const irisGridUtils = new IrisGridUtils(model.dh);\n return {\n ...irisGridUtils.dehydrateIrisGridState(model, irisGridState),\n ...IrisGridUtils.dehydrateGridState(model, gridState),\n };\n },\n (\n [modelA, irisGridStateA, gridStateA],\n [modelB, irisGridStateB, gridStateB]\n ) =>\n modelA === modelB &&\n areIrisGridStatesEqual(irisGridStateA, irisGridStateB) &&\n areGridStatesEqual(gridStateA, gridStateB)\n );\n}\n\nexport const IrisGridCacheUtils = {\n makeMemoizedGridStateDehydrator,\n makeMemoizedIrisGridStateDehydrator,\n makeMemoizedCombinedGridStateDehydrator,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"IrisGridCacheUtils.js","names":["memoizeOne","IrisGridUtils","areGridStatesEqual","gridStateA","gridStateB","compareKeys","every","key","areIrisGridStatesEqual","irisGridStateA","irisGridStateB","compareStateKeys","metrics","metricCalculator","userColumnWidths","userRowHeights","makeMemoizedGridStateDehydrator","model","gridState","dehydrateGridState","_ref","_ref2","_ref3","_slicedToArray","modelA","_ref4","modelB","makeMemoizedIrisGridStateDehydrator","irisGridState","irisGridUtils","dh","dehydrateIrisGridState","_ref5","_ref6","_ref7","_ref8","makeMemoizedCombinedGridStateDehydrator","_objectSpread","_ref9","_ref0","_ref1","_ref10","IrisGridCacheUtils"],"sources":["../src/IrisGridCacheUtils.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\nimport { type GridState } from '@deephaven/grid';\nimport memoizeOne from 'memoize-one';\nimport type IrisGridModel from './IrisGridModel';\nimport IrisGridUtils, {\n type DehydratedGridState,\n type DehydratedIrisGridState,\n type HydratedGridState,\n type HydratedIrisGridState,\n} from './IrisGridUtils';\n\n/**\n * Checks if 2 grid states are equivalent.\n * Checks values and does not require referential equality of the entire state, just the values we care about.\n * @param gridStateA First grid state\n * @param gridStateB Second grid state\n * @returns True if the states are equivalent\n */\nfunction areGridStatesEqual(\n gridStateA: HydratedGridState,\n gridStateB: HydratedGridState\n): boolean {\n const compareKeys = [\n 'isStuckToBottom',\n 'isStuckToRight',\n 'movedColumns',\n 'movedRows',\n ] satisfies Array<keyof GridState>;\n return (\n gridStateA === gridStateB ||\n compareKeys.every(key => gridStateA[key] === gridStateB[key])\n );\n}\n\n/**\n * Checks if 2 iris grid states are equivalent.\n * Checks values and does not require referential equality of the entire state, just the values we care about.\n * @param irisGridStateA First iris grid state\n * @param irisGridStateB Second iris grid state\n * @returns True if the states are equivalent\n */\nfunction areIrisGridStatesEqual(\n irisGridStateA: HydratedIrisGridState,\n irisGridStateB: HydratedIrisGridState\n): boolean {\n // Top level keys we want to check for referential equality\n const compareStateKeys = [\n 'advancedFilters',\n 'aggregationSettings',\n 'customColumnFormatMap',\n 'columnAlignmentMap',\n 'isFilterBarShown',\n 'quickFilters',\n 'customColumns',\n 'reverse',\n 'rollupConfig',\n 'showSearchBar',\n 'searchValue',\n 'selectDistinctColumns',\n 'selectedSearchColumns',\n 'sorts',\n 'invertSearchColumns',\n 'pendingDataMap',\n 'frozenColumns',\n 'conditionalFormats',\n 'columnHeaderGroups',\n 'partitionConfig',\n ] satisfies Array<keyof HydratedIrisGridState>;\n\n return (\n irisGridStateA === irisGridStateB ||\n (irisGridStateA.metrics != null &&\n irisGridStateB.metrics != null &&\n irisGridStateA.metricCalculator === irisGridStateB.metricCalculator &&\n irisGridStateA.metrics.userColumnWidths ===\n irisGridStateB.metrics.userColumnWidths &&\n irisGridStateA.metrics.userRowHeights ===\n irisGridStateB.metrics.userRowHeights &&\n compareStateKeys.every(\n key => irisGridStateA[key] === irisGridStateB[key]\n ))\n );\n}\n\n/**\n * Creates a dehydrator function for grid state that is memoized on the last call.\n * Only tracks 1 state at a time. If the model and input states are equal, returns the same dehydrated state object reference.\n * @returns A dehydrator function memoized on the last call\n */\nfunction makeMemoizedGridStateDehydrator(): (\n model: IrisGridModel,\n gridState: HydratedGridState\n) => DehydratedGridState {\n return memoizeOne(\n (model: IrisGridModel, gridState: HydratedGridState) =>\n IrisGridUtils.dehydrateGridState(model, gridState),\n ([modelA, gridStateA], [modelB, gridStateB]) =>\n modelA === modelB && areGridStatesEqual(gridStateA, gridStateB)\n );\n}\n\n/**\n * Creates a dehydrator function for iris grid state that is memoized on the last call.\n * Only tracks 1 state at a time. If the model and input states are equal, returns the same dehydrated state object reference.\n * @returns A dehydrator function memoized on the last call\n */\nfunction makeMemoizedIrisGridStateDehydrator(): (\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState\n) => DehydratedIrisGridState {\n return memoizeOne(\n (model: IrisGridModel, irisGridState: HydratedIrisGridState) => {\n const irisGridUtils = new IrisGridUtils(model.dh);\n return irisGridUtils.dehydrateIrisGridState(model, irisGridState);\n },\n ([modelA, irisGridStateA], [modelB, irisGridStateB]) =>\n modelA === modelB &&\n areIrisGridStatesEqual(irisGridStateA, irisGridStateB)\n );\n}\n\n/**\n * Creates a dehydrator function for grid and iris grid state that is memoized on the last call.\n * Only tracks 1 state at a time. If the model and input states are equal, returns the same dehydrated state object reference.\n * Combines the dehydrated grid and iris grid states into a single object.\n * @returns A dehydrator function memoized on the last call\n */\nfunction makeMemoizedCombinedGridStateDehydrator(): (\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState,\n gridState: HydratedGridState\n) => DehydratedIrisGridState & DehydratedGridState {\n return memoizeOne(\n (\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState,\n gridState: HydratedGridState\n ): DehydratedIrisGridState & DehydratedGridState => {\n const irisGridUtils = new IrisGridUtils(model.dh);\n return {\n ...irisGridUtils.dehydrateIrisGridState(model, irisGridState),\n ...IrisGridUtils.dehydrateGridState(model, gridState),\n };\n },\n (\n [modelA, irisGridStateA, gridStateA],\n [modelB, irisGridStateB, gridStateB]\n ) =>\n modelA === modelB &&\n areIrisGridStatesEqual(irisGridStateA, irisGridStateB) &&\n areGridStatesEqual(gridStateA, gridStateB)\n );\n}\n\nexport const IrisGridCacheUtils = {\n makeMemoizedGridStateDehydrator,\n makeMemoizedIrisGridStateDehydrator,\n makeMemoizedCombinedGridStateDehydrator,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import React, { useEffect, useRef, useState } from 'react';
2
8
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
9
  import { Editor } from '@deephaven/console';
@@ -7,16 +13,29 @@ import "./IrisGridCellOverflowModal.css";
7
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
14
  export default function IrisGridCellOverflowModal(_ref) {
9
15
  var _editorRef$current$ge, _editorRef$current2;
10
- var {
11
- text,
12
- isOpen,
13
- onClose
14
- } = _ref;
15
- var [isOpened, setIsOpened] = useState(false);
16
- var [height, setHeight] = useState(0);
17
- var [showLineNumbers, setShowLineNumbers] = useState(false);
18
- var [isFormatted, setIsFormatted] = useState(false);
19
- var [canFormat, setCanFormat] = useState(false);
16
+ var text = _ref.text,
17
+ isOpen = _ref.isOpen,
18
+ onClose = _ref.onClose;
19
+ var _useState = useState(false),
20
+ _useState2 = _slicedToArray(_useState, 2),
21
+ isOpened = _useState2[0],
22
+ setIsOpened = _useState2[1];
23
+ var _useState3 = useState(0),
24
+ _useState4 = _slicedToArray(_useState3, 2),
25
+ height = _useState4[0],
26
+ setHeight = _useState4[1];
27
+ var _useState5 = useState(false),
28
+ _useState6 = _slicedToArray(_useState5, 2),
29
+ showLineNumbers = _useState6[0],
30
+ setShowLineNumbers = _useState6[1];
31
+ var _useState7 = useState(false),
32
+ _useState8 = _slicedToArray(_useState7, 2),
33
+ isFormatted = _useState8[0],
34
+ setIsFormatted = _useState8[1];
35
+ var _useState9 = useState(false),
36
+ _useState0 = _slicedToArray(_useState9, 2),
37
+ canFormat = _useState0[0],
38
+ setCanFormat = _useState0[1];
20
39
  var editorRef = useRef();
21
40
 
22
41
  // Update format button on open
@@ -85,9 +104,7 @@ export default function IrisGridCellOverflowModal(_ref) {
85
104
  editorRef.current = editor;
86
105
  setHeight(editor.getContentHeight());
87
106
  editor.onDidContentSizeChange(_ref2 => {
88
- var {
89
- contentHeight
90
- } = _ref2;
107
+ var contentHeight = _ref2.contentHeight;
91
108
  return setHeight(contentHeight);
92
109
  });
93
110
  autoSetLineNumbers();
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridCellOverflowModal.js","names":["React","useEffect","useRef","useState","FontAwesomeIcon","Editor","CopyButton","Icon","Modal","ModalBody","ModalHeader","ToggleButton","Tooltip","vsJson","vsListOrdered","jsx","_jsx","jsxs","_jsxs","IrisGridCellOverflowModal","_ref","_editorRef$current$ge","_editorRef$current2","text","isOpen","onClose","isOpened","setIsOpened","height","setHeight","showLineNumbers","setShowLineNumbers","isFormatted","setIsFormatted","canFormat","setCanFormat","editorRef","enableFormatButtonWhenOpen","JSON","parse","_unused","updateLayoutOnHeightChange","current","layout","toggleShowLineNumber","updateOptions","lineNumbers","toggleLineNumbers","formatAsJSON","_editorRef$current","model","getModel","setValue","stringify","undefined","autoSetLineNumbers","_editor$getModel$getL","_editor$getModel","editor","getLineCount","handleToggle","onEditorInitialized","_document$activeEleme","getContentHeight","onDidContentSizeChange","_ref2","contentHeight","document","activeElement","blur","centered","keyboard","toggle","onOpened","onClosed","className","size","children","tooltip","copy","getValue","isSelected","onChange","UNSAFE_className","icon","style","settings","value","readOnly","wordWrap","language","folding","padding","bottom","overviewRulerLanes","renderLineHighlight","find","seedSearchStringFromSelection"],"sources":["../src/IrisGridCellOverflowModal.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Editor } from '@deephaven/console';\nimport type * as monaco from 'monaco-editor';\nimport {\n CopyButton,\n Icon,\n Modal,\n ModalBody,\n ModalHeader,\n ToggleButton,\n Tooltip,\n} from '@deephaven/components';\nimport { vsJson, vsListOrdered } from '@deephaven/icons';\nimport './IrisGridCellOverflowModal.scss';\n\ninterface IrisGridCellOverflowModalProps {\n text: string;\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport default function IrisGridCellOverflowModal({\n text,\n isOpen,\n onClose,\n}: IrisGridCellOverflowModalProps): React.ReactElement | null {\n const [isOpened, setIsOpened] = useState(false);\n const [height, setHeight] = useState(0);\n const [showLineNumbers, setShowLineNumbers] = useState(false);\n const [isFormatted, setIsFormatted] = useState(false);\n const [canFormat, setCanFormat] = useState(false);\n const editorRef = useRef<monaco.editor.IStandaloneCodeEditor>();\n\n // Update format button on open\n useEffect(\n function enableFormatButtonWhenOpen() {\n if (!isOpen) {\n return;\n }\n\n try {\n JSON.parse(text);\n setCanFormat(true);\n } catch {\n setCanFormat(false);\n }\n setIsFormatted(false);\n },\n [isOpen, text]\n );\n\n // Re-layout editor on height change\n useEffect(\n function updateLayoutOnHeightChange() {\n if (editorRef.current) {\n editorRef.current.layout();\n }\n },\n [height]\n );\n\n // Update editor options on line number toggle\n useEffect(\n function toggleShowLineNumber() {\n if (editorRef.current) {\n editorRef.current.updateOptions({\n lineNumbers: showLineNumbers ? 'on' : 'off',\n });\n }\n },\n [showLineNumbers]\n );\n\n function toggleLineNumbers(): void {\n setShowLineNumbers(!showLineNumbers);\n }\n\n function formatAsJSON(): void {\n const model = editorRef.current?.getModel();\n if (!canFormat || !model) {\n return;\n }\n\n if (!isFormatted) {\n model.setValue(JSON.stringify(JSON.parse(text), undefined, 2));\n setIsFormatted(true);\n } else {\n model.setValue(text);\n setIsFormatted(false);\n }\n autoSetLineNumbers();\n }\n\n function autoSetLineNumbers(): void {\n const editor = editorRef.current;\n if (!editor) {\n return;\n }\n\n setShowLineNumbers((editor.getModel()?.getLineCount() ?? 0) > 1);\n }\n\n function handleToggle(): void {\n if (isOpened) {\n editorRef.current = undefined;\n onClose();\n }\n }\n\n function onEditorInitialized(\n editor: monaco.editor.IStandaloneCodeEditor\n ): void {\n editorRef.current = editor;\n setHeight(editor.getContentHeight());\n editor.onDidContentSizeChange(({ contentHeight }) =>\n setHeight(contentHeight)\n );\n autoSetLineNumbers();\n (document.activeElement as HTMLElement)?.blur();\n }\n\n if (!isOpen && !isOpened) {\n return null;\n }\n\n return (\n <Modal\n isOpen={isOpen}\n centered\n keyboard\n toggle={handleToggle}\n onOpened={() => setIsOpened(true)}\n onClosed={() => {\n setIsOpened(false);\n setHeight(0);\n }}\n className=\"cell-overflow-modal\"\n size=\"xl\"\n >\n <ModalHeader toggle={onClose}>\n <h5 className=\"overflow-modal-title\">Cell Contents</h5>\n <CopyButton\n tooltip=\"Copy cell contents\"\n copy={editorRef.current?.getValue() ?? text}\n />\n <ToggleButton\n isSelected={showLineNumbers}\n aria-label=\"Toggle line numbers\"\n onChange={toggleLineNumbers}\n >\n <Icon UNSAFE_className=\"action-button-icon-with-tooltip\">\n <FontAwesomeIcon icon={vsListOrdered} />\n </Icon>\n <Tooltip>Toggle line numbers</Tooltip>\n </ToggleButton>\n {canFormat && (\n <ToggleButton\n isSelected={isFormatted}\n aria-label=\"Format as JSON\"\n onChange={formatAsJSON}\n >\n <Icon UNSAFE_className=\"action-button-icon-with-tooltip\">\n <FontAwesomeIcon icon={vsJson} />\n </Icon>\n <Tooltip>Format as JSON</Tooltip>\n </ToggleButton>\n )}\n </ModalHeader>\n <ModalBody style={{ height }}>\n <Editor\n onEditorInitialized={onEditorInitialized}\n settings={{\n value: text,\n readOnly: true,\n wordWrap: 'on',\n // Loading json language w/o the monaco workers causes UI freezes and monaco errors. TS colorizes the same\n language: canFormat ? 'typescript' : 'plaintext',\n folding: canFormat,\n padding: { bottom: 16 },\n lineNumbers: showLineNumbers ? 'on' : 'off',\n overviewRulerLanes: 0,\n renderLineHighlight: 'none',\n /*\n The entire string may be 1 giant line\n Monaco by default seeds find w/ that line\n On very long strings this hangs the browser, so never seed the search\n */\n find: { seedSearchStringFromSelection: 'never' },\n }}\n />\n </ModalBody>\n </Modal>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"IrisGridCellOverflowModal.js","names":["React","useEffect","useRef","useState","FontAwesomeIcon","Editor","CopyButton","Icon","Modal","ModalBody","ModalHeader","ToggleButton","Tooltip","vsJson","vsListOrdered","jsx","_jsx","jsxs","_jsxs","IrisGridCellOverflowModal","_ref","_editorRef$current$ge","_editorRef$current2","text","isOpen","onClose","_useState","_useState2","_slicedToArray","isOpened","setIsOpened","_useState3","_useState4","height","setHeight","_useState5","_useState6","showLineNumbers","setShowLineNumbers","_useState7","_useState8","isFormatted","setIsFormatted","_useState9","_useState0","canFormat","setCanFormat","editorRef","enableFormatButtonWhenOpen","JSON","parse","_unused","updateLayoutOnHeightChange","current","layout","toggleShowLineNumber","updateOptions","lineNumbers","toggleLineNumbers","formatAsJSON","_editorRef$current","model","getModel","setValue","stringify","undefined","autoSetLineNumbers","_editor$getModel$getL","_editor$getModel","editor","getLineCount","handleToggle","onEditorInitialized","_document$activeEleme","getContentHeight","onDidContentSizeChange","_ref2","contentHeight","document","activeElement","blur","centered","keyboard","toggle","onOpened","onClosed","className","size","children","tooltip","copy","getValue","isSelected","onChange","UNSAFE_className","icon","style","settings","value","readOnly","wordWrap","language","folding","padding","bottom","overviewRulerLanes","renderLineHighlight","find","seedSearchStringFromSelection"],"sources":["../src/IrisGridCellOverflowModal.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Editor } from '@deephaven/console';\nimport type * as monaco from 'monaco-editor';\nimport {\n CopyButton,\n Icon,\n Modal,\n ModalBody,\n ModalHeader,\n ToggleButton,\n Tooltip,\n} from '@deephaven/components';\nimport { vsJson, vsListOrdered } from '@deephaven/icons';\nimport './IrisGridCellOverflowModal.scss';\n\ninterface IrisGridCellOverflowModalProps {\n text: string;\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport default function IrisGridCellOverflowModal({\n text,\n isOpen,\n onClose,\n}: IrisGridCellOverflowModalProps): React.ReactElement | null {\n const [isOpened, setIsOpened] = useState(false);\n const [height, setHeight] = useState(0);\n const [showLineNumbers, setShowLineNumbers] = useState(false);\n const [isFormatted, setIsFormatted] = useState(false);\n const [canFormat, setCanFormat] = useState(false);\n const editorRef = useRef<monaco.editor.IStandaloneCodeEditor>();\n\n // Update format button on open\n useEffect(\n function enableFormatButtonWhenOpen() {\n if (!isOpen) {\n return;\n }\n\n try {\n JSON.parse(text);\n setCanFormat(true);\n } catch {\n setCanFormat(false);\n }\n setIsFormatted(false);\n },\n [isOpen, text]\n );\n\n // Re-layout editor on height change\n useEffect(\n function updateLayoutOnHeightChange() {\n if (editorRef.current) {\n editorRef.current.layout();\n }\n },\n [height]\n );\n\n // Update editor options on line number toggle\n useEffect(\n function toggleShowLineNumber() {\n if (editorRef.current) {\n editorRef.current.updateOptions({\n lineNumbers: showLineNumbers ? 'on' : 'off',\n });\n }\n },\n [showLineNumbers]\n );\n\n function toggleLineNumbers(): void {\n setShowLineNumbers(!showLineNumbers);\n }\n\n function formatAsJSON(): void {\n const model = editorRef.current?.getModel();\n if (!canFormat || !model) {\n return;\n }\n\n if (!isFormatted) {\n model.setValue(JSON.stringify(JSON.parse(text), undefined, 2));\n setIsFormatted(true);\n } else {\n model.setValue(text);\n setIsFormatted(false);\n }\n autoSetLineNumbers();\n }\n\n function autoSetLineNumbers(): void {\n const editor = editorRef.current;\n if (!editor) {\n return;\n }\n\n setShowLineNumbers((editor.getModel()?.getLineCount() ?? 0) > 1);\n }\n\n function handleToggle(): void {\n if (isOpened) {\n editorRef.current = undefined;\n onClose();\n }\n }\n\n function onEditorInitialized(\n editor: monaco.editor.IStandaloneCodeEditor\n ): void {\n editorRef.current = editor;\n setHeight(editor.getContentHeight());\n editor.onDidContentSizeChange(({ contentHeight }) =>\n setHeight(contentHeight)\n );\n autoSetLineNumbers();\n (document.activeElement as HTMLElement)?.blur();\n }\n\n if (!isOpen && !isOpened) {\n return null;\n }\n\n return (\n <Modal\n isOpen={isOpen}\n centered\n keyboard\n toggle={handleToggle}\n onOpened={() => setIsOpened(true)}\n onClosed={() => {\n setIsOpened(false);\n setHeight(0);\n }}\n className=\"cell-overflow-modal\"\n size=\"xl\"\n >\n <ModalHeader toggle={onClose}>\n <h5 className=\"overflow-modal-title\">Cell Contents</h5>\n <CopyButton\n tooltip=\"Copy cell contents\"\n copy={editorRef.current?.getValue() ?? text}\n />\n <ToggleButton\n isSelected={showLineNumbers}\n aria-label=\"Toggle line numbers\"\n onChange={toggleLineNumbers}\n >\n <Icon UNSAFE_className=\"action-button-icon-with-tooltip\">\n <FontAwesomeIcon icon={vsListOrdered} />\n </Icon>\n <Tooltip>Toggle line numbers</Tooltip>\n </ToggleButton>\n {canFormat && (\n <ToggleButton\n isSelected={isFormatted}\n aria-label=\"Format as JSON\"\n onChange={formatAsJSON}\n >\n <Icon UNSAFE_className=\"action-button-icon-with-tooltip\">\n <FontAwesomeIcon icon={vsJson} />\n </Icon>\n <Tooltip>Format as JSON</Tooltip>\n </ToggleButton>\n )}\n </ModalHeader>\n <ModalBody style={{ height }}>\n <Editor\n onEditorInitialized={onEditorInitialized}\n settings={{\n value: text,\n readOnly: true,\n wordWrap: 'on',\n // Loading json language w/o the monaco workers causes UI freezes and monaco errors. TS colorizes the same\n language: canFormat ? 'typescript' : 'plaintext',\n folding: canFormat,\n padding: { bottom: 16 },\n lineNumbers: showLineNumbers ? 'on' : 'off',\n overviewRulerLanes: 0,\n renderLineHighlight: 'none',\n /*\n The entire string may be 1 giant line\n Monaco by default seeds find w/ that line\n On very long strings this hangs the browser, so never seed the search\n */\n find: { seedSearchStringFromSelection: 'never' },\n }}\n />\n </ModalBody>\n </Modal>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -2,18 +2,12 @@ import { getIcon } from "./IrisGridIcons.js";
2
2
  class IrisGridCellRendererUtils {
3
3
  static drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded) {
4
4
  context.save();
5
- var {
6
- theme
7
- } = state;
8
- var {
9
- iconSize
10
- } = theme;
11
- var {
12
- x1,
13
- x2,
14
- y1,
15
- y2
16
- } = treeBox;
5
+ var theme = state.theme;
6
+ var iconSize = theme.iconSize;
7
+ var x1 = treeBox.x1,
8
+ x2 = treeBox.x2,
9
+ y1 = treeBox.y1,
10
+ y2 = treeBox.y2;
17
11
  var markerIcon = isExpanded ? getIcon('caretDown', iconSize) : getIcon('caretRight', iconSize);
18
12
  var iconX = columnX + (x1 + x2) / 2 - iconSize / 2; // Midpoint of the tree box minus half the icon width
19
13
  var iconY = rowY + (y2 - y1 - iconSize) / 2; // y2 - y1 is effectively rowHeight
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridCellRendererUtils.js","names":["getIcon","IrisGridCellRendererUtils","drawTreeMarker","context","state","columnX","rowY","treeBox","color","isExpanded","save","theme","iconSize","x1","x2","y1","y2","markerIcon","iconX","iconY","fillStyle","textAlign","translate","fill","restore"],"sources":["../src/IrisGridCellRendererUtils.ts"],"sourcesContent":["import { type BoxCoordinates, type Coordinate } from '@deephaven/grid';\nimport { getIcon } from './IrisGridIcons';\nimport { type IrisGridRenderState } from './IrisGridRenderer';\n\nclass IrisGridCellRendererUtils {\n static drawTreeMarker(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n columnX: Coordinate,\n rowY: Coordinate,\n treeBox: BoxCoordinates,\n color: string,\n isExpanded: boolean\n ): void {\n context.save();\n const { theme } = state;\n const { iconSize } = theme;\n const { x1, x2, y1, y2 } = treeBox;\n const markerIcon = isExpanded\n ? getIcon('caretDown', iconSize)\n : getIcon('caretRight', iconSize);\n\n const iconX = columnX + (x1 + x2) / 2 - iconSize / 2; // Midpoint of the tree box minus half the icon width\n const iconY = rowY + (y2 - y1 - iconSize) / 2; // y2 - y1 is effectively rowHeight\n\n context.fillStyle = color;\n context.textAlign = 'center';\n context.translate(iconX, iconY);\n context.fill(markerIcon);\n context.restore();\n }\n}\n\nexport default IrisGridCellRendererUtils;\n"],"mappings":"SACSA,OAAO;AAGhB,MAAMC,yBAAyB,CAAC;EAC9B,OAAOC,cAAcA,CACnBC,OAAiC,EACjCC,KAA0B,EAC1BC,OAAmB,EACnBC,IAAgB,EAChBC,OAAuB,EACvBC,KAAa,EACbC,UAAmB,EACb;IACNN,OAAO,CAACO,IAAI,CAAC,CAAC;IACd,IAAM;MAAEC;IAAM,CAAC,GAAGP,KAAK;IACvB,IAAM;MAAEQ;IAAS,CAAC,GAAGD,KAAK;IAC1B,IAAM;MAAEE,EAAE;MAAEC,EAAE;MAAEC,EAAE;MAAEC;IAAG,CAAC,GAAGT,OAAO;IAClC,IAAMU,UAAU,GAAGR,UAAU,GACzBT,OAAO,CAAC,WAAW,EAAEY,QAAQ,CAAC,GAC9BZ,OAAO,CAAC,YAAY,EAAEY,QAAQ,CAAC;IAEnC,IAAMM,KAAK,GAAGb,OAAO,GAAG,CAACQ,EAAE,GAAGC,EAAE,IAAI,CAAC,GAAGF,QAAQ,GAAG,CAAC,CAAC,CAAC;IACtD,IAAMO,KAAK,GAAGb,IAAI,GAAG,CAACU,EAAE,GAAGD,EAAE,GAAGH,QAAQ,IAAI,CAAC,CAAC,CAAC;;IAE/CT,OAAO,CAACiB,SAAS,GAAGZ,KAAK;IACzBL,OAAO,CAACkB,SAAS,GAAG,QAAQ;IAC5BlB,OAAO,CAACmB,SAAS,CAACJ,KAAK,EAAEC,KAAK,CAAC;IAC/BhB,OAAO,CAACoB,IAAI,CAACN,UAAU,CAAC;IACxBd,OAAO,CAACqB,OAAO,CAAC,CAAC;EACnB;AACF;AAEA,eAAevB,yBAAyB","ignoreList":[]}
1
+ {"version":3,"file":"IrisGridCellRendererUtils.js","names":["getIcon","IrisGridCellRendererUtils","drawTreeMarker","context","state","columnX","rowY","treeBox","color","isExpanded","save","theme","iconSize","x1","x2","y1","y2","markerIcon","iconX","iconY","fillStyle","textAlign","translate","fill","restore"],"sources":["../src/IrisGridCellRendererUtils.ts"],"sourcesContent":["import { type BoxCoordinates, type Coordinate } from '@deephaven/grid';\nimport { getIcon } from './IrisGridIcons';\nimport { type IrisGridRenderState } from './IrisGridRenderer';\n\nclass IrisGridCellRendererUtils {\n static drawTreeMarker(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n columnX: Coordinate,\n rowY: Coordinate,\n treeBox: BoxCoordinates,\n color: string,\n isExpanded: boolean\n ): void {\n context.save();\n const { theme } = state;\n const { iconSize } = theme;\n const { x1, x2, y1, y2 } = treeBox;\n const markerIcon = isExpanded\n ? getIcon('caretDown', iconSize)\n : getIcon('caretRight', iconSize);\n\n const iconX = columnX + (x1 + x2) / 2 - iconSize / 2; // Midpoint of the tree box minus half the icon width\n const iconY = rowY + (y2 - y1 - iconSize) / 2; // y2 - y1 is effectively rowHeight\n\n context.fillStyle = color;\n context.textAlign = 'center';\n context.translate(iconX, iconY);\n context.fill(markerIcon);\n context.restore();\n }\n}\n\nexport default IrisGridCellRendererUtils;\n"],"mappings":"SACSA,OAAO;AAGhB,MAAMC,yBAAyB,CAAC;EAC9B,OAAOC,cAAcA,CACnBC,OAAiC,EACjCC,KAA0B,EAC1BC,OAAmB,EACnBC,IAAgB,EAChBC,OAAuB,EACvBC,KAAa,EACbC,UAAmB,EACb;IACNN,OAAO,CAACO,IAAI,CAAC,CAAC;IACd,IAAQC,KAAK,GAAKP,KAAK,CAAfO,KAAK;IACb,IAAQC,QAAQ,GAAKD,KAAK,CAAlBC,QAAQ;IAChB,IAAQC,EAAE,GAAiBN,OAAO,CAA1BM,EAAE;MAAEC,EAAE,GAAaP,OAAO,CAAtBO,EAAE;MAAEC,EAAE,GAASR,OAAO,CAAlBQ,EAAE;MAAEC,EAAE,GAAKT,OAAO,CAAdS,EAAE;IACtB,IAAMC,UAAU,GAAGR,UAAU,GACzBT,OAAO,CAAC,WAAW,EAAEY,QAAQ,CAAC,GAC9BZ,OAAO,CAAC,YAAY,EAAEY,QAAQ,CAAC;IAEnC,IAAMM,KAAK,GAAGb,OAAO,GAAG,CAACQ,EAAE,GAAGC,EAAE,IAAI,CAAC,GAAGF,QAAQ,GAAG,CAAC,CAAC,CAAC;IACtD,IAAMO,KAAK,GAAGb,IAAI,GAAG,CAACU,EAAE,GAAGD,EAAE,GAAGH,QAAQ,IAAI,CAAC,CAAC,CAAC;;IAE/CT,OAAO,CAACiB,SAAS,GAAGZ,KAAK;IACzBL,OAAO,CAACkB,SAAS,GAAG,QAAQ;IAC5BlB,OAAO,CAACmB,SAAS,CAACJ,KAAK,EAAEC,KAAK,CAAC;IAC/BhB,OAAO,CAACoB,IAAI,CAACN,UAAU,CAAC;IACxBd,OAAO,CAACqB,OAAO,CAAC,CAAC;EACnB;AACF;AAEA,eAAevB,yBAAyB","ignoreList":[]}
@@ -74,17 +74,13 @@ class IrisGridCopyHandler extends Component {
74
74
  };
75
75
  }
76
76
  componentDidMount() {
77
- var {
78
- copyOperation
79
- } = this.props;
77
+ var copyOperation = this.props.copyOperation;
80
78
  if (copyOperation != null) {
81
79
  this.startCopy();
82
80
  }
83
81
  }
84
82
  componentDidUpdate(prevProps) {
85
- var {
86
- copyOperation
87
- } = this.props;
83
+ var copyOperation = this.props.copyOperation;
88
84
  if (prevProps.copyOperation !== copyOperation) {
89
85
  this.startCopy();
90
86
  }
@@ -95,9 +91,7 @@ class IrisGridCopyHandler extends Component {
95
91
  startCopy() {
96
92
  log.debug2('startCopy');
97
93
  this.stopCopy();
98
- var {
99
- copyOperation
100
- } = this.props;
94
+ var copyOperation = this.props.copyOperation;
101
95
  if (copyOperation == null) {
102
96
  log.debug2('No copy operation set, cancelling out');
103
97
  this.setState({
@@ -105,9 +99,7 @@ class IrisGridCopyHandler extends Component {
105
99
  });
106
100
  return;
107
101
  }
108
- var {
109
- error
110
- } = copyOperation;
102
+ var error = copyOperation.error;
111
103
  if (error != null) {
112
104
  log.debug('Showing copy error', error);
113
105
  this.setState({
@@ -123,9 +115,7 @@ class IrisGridCopyHandler extends Component {
123
115
  error: undefined
124
116
  });
125
117
  if (isCopyRangesOperation(copyOperation)) {
126
- var {
127
- ranges
128
- } = copyOperation;
118
+ var ranges = copyOperation.ranges;
129
119
  var rowCount = GridRange.rowCount(ranges);
130
120
  this.setState({
131
121
  rowCount
@@ -147,9 +137,7 @@ class IrisGridCopyHandler extends Component {
147
137
  }
148
138
  handleBackgroundClick() {
149
139
  log.debug2('handleBackgroundClick');
150
- var {
151
- copyState
152
- } = this.state;
140
+ var copyState = this.state.copyState;
153
141
  if (copyState === IrisGridCopyHandler.COPY_STATES.DONE) {
154
142
  this.setState({
155
143
  isShown: false
@@ -207,16 +195,13 @@ class IrisGridCopyHandler extends Component {
207
195
  var _this3 = this;
208
196
  return _asyncToGenerator(function* () {
209
197
  _this3.stopFetch();
210
- var {
211
- model,
212
- copyOperation
213
- } = _this3.props;
198
+ var _this3$props = _this3.props,
199
+ model = _this3$props.model,
200
+ copyOperation = _this3$props.copyOperation;
214
201
  if (isCopyHeaderOperation(copyOperation)) {
215
- var {
216
- columnIndex,
217
- columnDepth,
218
- movedColumns
219
- } = copyOperation;
202
+ var columnIndex = copyOperation.columnIndex,
203
+ columnDepth = copyOperation.columnDepth,
204
+ movedColumns = copyOperation.movedColumns;
220
205
  log.debug('startFetch copyHeader', columnIndex, columnDepth);
221
206
  _this3.setState({
222
207
  buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,
@@ -234,13 +219,11 @@ class IrisGridCopyHandler extends Component {
234
219
  }
235
220
  _this3.fetchPromise = PromiseUtils.makeCancelable(copyText);
236
221
  } else {
237
- var {
238
- ranges,
239
- includeHeaders,
240
- userColumnWidths,
241
- movedColumns: _movedColumns,
242
- formatValues
243
- } = copyOperation;
222
+ var ranges = copyOperation.ranges,
223
+ includeHeaders = copyOperation.includeHeaders,
224
+ userColumnWidths = copyOperation.userColumnWidths,
225
+ _movedColumns = copyOperation.movedColumns,
226
+ formatValues = copyOperation.formatValues;
244
227
  log.debug('startFetch copyRanges', ranges);
245
228
  _this3.setState({
246
229
  buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,
@@ -302,19 +285,17 @@ class IrisGridCopyHandler extends Component {
302
285
  }
303
286
  }
304
287
  render() {
305
- var {
306
- onEntering,
307
- onEntered,
308
- onExiting,
309
- onExited
310
- } = this.props;
311
- var {
312
- buttonState,
313
- copyState,
314
- isShown,
315
- rowCount,
316
- error
317
- } = this.state;
288
+ var _this$props = this.props,
289
+ onEntering = _this$props.onEntering,
290
+ onEntered = _this$props.onEntered,
291
+ onExiting = _this$props.onExiting,
292
+ onExited = _this$props.onExited;
293
+ var _this$state = this.state,
294
+ buttonState = _this$state.buttonState,
295
+ copyState = _this$state.copyState,
296
+ isShown = _this$state.isShown,
297
+ rowCount = _this$state.rowCount,
298
+ error = _this$state.error;
318
299
  var animation = copyState === IrisGridCopyHandler.COPY_STATES.DONE ? 'fade' : 'copy-slide-up';
319
300
  var copyButtonText = IrisGridCopyHandler.getCopyButtonText(buttonState);
320
301
  var statusMessageText = error !== null && error !== void 0 ? error : IrisGridCopyHandler.getStatusMessageText(copyState, rowCount);
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridCopyHandler.js","names":["React","Component","classNames","Button","FadeTransition","LoadingSpinner","GridRange","GridUtils","CanceledPromiseError","copyToClipboard","PromiseUtils","Log","IrisGridUtils","IrisGridBottomBar","jsx","_jsx","jsxs","_jsxs","log","module","isCopyRangesOperation","copyOperation","ranges","isCopyHeaderOperation","columnIndex","IrisGridCopyHandler","getStatusMessageText","copyState","rowCount","COPY_STATES","CONFIRMATION_REQUIRED","concat","toLocaleString","CLICK_REQUIRED","FETCH_ERROR","FETCH_RANGES_IN_PROGRESS","FETCH_HEADER_IN_PROGRESS","DONE","getCopyButtonText","buttonState","BUTTON_STATES","FETCH_IN_PROGRESS","CLICK_TO_COPY","RETRY","constructor","props","_defineProperty","handleBackgroundClick","bind","handleCancelClick","handleCopyClick","handleHideTimeout","state","error","undefined","IDLE","COPY","isShown","componentDidMount","startCopy","componentDidUpdate","prevProps","componentWillUnmount","stopCopy","debug2","setState","debug","startHideTimer","NO_PROMPT_THRESHOLD","startFetch","textData","stopFetch","stopHideTimer","_this","_asyncToGenerator","copyText","showCopyDone","e","text","_this2","_this3","model","columnDepth","movedColumns","modelIndex","getModelIndex","textForColumnHeader","fetchPromise","makeCancelable","includeHeaders","userColumnWidths","formatValues","hiddenColumns","getHiddenColumns","modelRanges","getModelRanges","length","subtractRanges","map","makeColumn","subtractRangesFromRanges","formatValue","value","column","displayString","type","name","textSnapshot","cancel","hideTimer","setTimeout","HIDE_TIMEOUT","clearTimeout","render","onEntering","onEntered","onExiting","onExited","animation","copyButtonText","statusMessageText","isButtonContainerVisible","isFetching","isDone","className","onClick","children","in","mountOnEnter","unmountOnExit","kind","disabled"],"sources":["../src/IrisGridCopyHandler.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { Button, FadeTransition, LoadingSpinner } from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n type ModelSizeMap,\n type MoveOperation,\n} from '@deephaven/grid';\nimport {\n type CancelablePromise,\n CanceledPromiseError,\n copyToClipboard,\n PromiseUtils,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport type { dh } from '@deephaven/jsapi-types';\nimport IrisGridUtils from './IrisGridUtils';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './IrisGridCopyHandler.scss';\nimport type 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\ntype CommonCopyOperation = {\n movedColumns: readonly MoveOperation[];\n error?: string;\n};\n\nexport type CopyRangesOperation = CommonCopyOperation & {\n ranges: readonly GridRange[];\n includeHeaders: boolean;\n formatValues?: boolean;\n userColumnWidths: ModelSizeMap;\n};\n\nexport type CopyHeaderOperation = CommonCopyOperation & {\n columnIndex: number;\n columnDepth: number;\n};\n\nexport type CopyOperation = CopyRangesOperation | CopyHeaderOperation;\n\nfunction isCopyRangesOperation(\n copyOperation: CopyOperation\n): copyOperation is CopyRangesOperation {\n return (copyOperation as CopyRangesOperation).ranges != null;\n}\n\nfunction isCopyHeaderOperation(\n copyOperation: CopyOperation\n): copyOperation is CopyHeaderOperation {\n return (copyOperation as CopyHeaderOperation).columnIndex != null;\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 for copy ranges operation\n FETCH_RANGES_IN_PROGRESS: 'FETCH_RANGES_IN_PROGRESS',\n\n // Fetch is currently in progress for copy header operation\n FETCH_HEADER_IN_PROGRESS: 'FETCH_HEADER_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_RANGES_IN_PROGRESS:\n return `Fetching ${rowCount.toLocaleString()} rows for clipboard...`;\n case IrisGridCopyHandler.COPY_STATES.FETCH_HEADER_IN_PROGRESS:\n return 'Fetching header 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 { 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 this.setState({ isShown: true, error: undefined });\n\n if (isCopyRangesOperation(copyOperation)) {\n const { ranges } = copyOperation;\n const rowCount = GridRange.rowCount(ranges);\n this.setState({ rowCount });\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 return;\n }\n }\n\n this.startFetch();\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 const { model, copyOperation } = this.props;\n\n if (isCopyHeaderOperation(copyOperation)) {\n const { columnIndex, columnDepth, movedColumns } = copyOperation;\n log.debug('startFetch copyHeader', columnIndex, columnDepth);\n\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_HEADER_IN_PROGRESS,\n });\n\n const modelIndex = GridUtils.getModelIndex(columnIndex, movedColumns);\n const copyText = model.textForColumnHeader(modelIndex, columnDepth);\n if (copyText === undefined) {\n this.fetchPromise = undefined;\n this.setState({\n error: 'Invalid column header selected.',\n copyState: IrisGridCopyHandler.COPY_STATES.DONE,\n });\n return;\n }\n this.fetchPromise = PromiseUtils.makeCancelable(copyText);\n } else {\n const {\n ranges,\n includeHeaders,\n userColumnWidths,\n movedColumns,\n formatValues,\n } = copyOperation;\n log.debug('startFetch copyRanges', ranges);\n\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_RANGES_IN_PROGRESS,\n });\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: dh.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 }\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 <FadeTransition\n in={isButtonContainerVisible}\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 && (\n <LoadingSpinner className=\"loading-spinner-vertical-align\" />\n )}\n {copyButtonText}\n </Button>\n </div>\n </FadeTransition>\n </IrisGridBottomBar>\n );\n }\n}\n\nexport default IrisGridCopyHandler;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"IrisGridCopyHandler.js","names":["React","Component","classNames","Button","FadeTransition","LoadingSpinner","GridRange","GridUtils","CanceledPromiseError","copyToClipboard","PromiseUtils","Log","IrisGridUtils","IrisGridBottomBar","jsx","_jsx","jsxs","_jsxs","log","module","isCopyRangesOperation","copyOperation","ranges","isCopyHeaderOperation","columnIndex","IrisGridCopyHandler","getStatusMessageText","copyState","rowCount","COPY_STATES","CONFIRMATION_REQUIRED","concat","toLocaleString","CLICK_REQUIRED","FETCH_ERROR","FETCH_RANGES_IN_PROGRESS","FETCH_HEADER_IN_PROGRESS","DONE","getCopyButtonText","buttonState","BUTTON_STATES","FETCH_IN_PROGRESS","CLICK_TO_COPY","RETRY","constructor","props","_defineProperty","handleBackgroundClick","bind","handleCancelClick","handleCopyClick","handleHideTimeout","state","error","undefined","IDLE","COPY","isShown","componentDidMount","startCopy","componentDidUpdate","prevProps","componentWillUnmount","stopCopy","debug2","setState","debug","startHideTimer","NO_PROMPT_THRESHOLD","startFetch","textData","stopFetch","stopHideTimer","_this","_asyncToGenerator","copyText","showCopyDone","e","text","_this2","_this3","_this3$props","model","columnDepth","movedColumns","modelIndex","getModelIndex","textForColumnHeader","fetchPromise","makeCancelable","includeHeaders","userColumnWidths","formatValues","hiddenColumns","getHiddenColumns","modelRanges","getModelRanges","length","subtractRanges","map","makeColumn","subtractRangesFromRanges","formatValue","value","column","displayString","type","name","textSnapshot","cancel","hideTimer","setTimeout","HIDE_TIMEOUT","clearTimeout","render","_this$props","onEntering","onEntered","onExiting","onExited","_this$state","animation","copyButtonText","statusMessageText","isButtonContainerVisible","isFetching","isDone","className","onClick","children","in","mountOnEnter","unmountOnExit","kind","disabled"],"sources":["../src/IrisGridCopyHandler.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { Button, FadeTransition, LoadingSpinner } from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n type ModelSizeMap,\n type MoveOperation,\n} from '@deephaven/grid';\nimport {\n type CancelablePromise,\n CanceledPromiseError,\n copyToClipboard,\n PromiseUtils,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport type { dh } from '@deephaven/jsapi-types';\nimport IrisGridUtils from './IrisGridUtils';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './IrisGridCopyHandler.scss';\nimport type 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\ntype CommonCopyOperation = {\n movedColumns: readonly MoveOperation[];\n error?: string;\n};\n\nexport type CopyRangesOperation = CommonCopyOperation & {\n ranges: readonly GridRange[];\n includeHeaders: boolean;\n formatValues?: boolean;\n userColumnWidths: ModelSizeMap;\n};\n\nexport type CopyHeaderOperation = CommonCopyOperation & {\n columnIndex: number;\n columnDepth: number;\n};\n\nexport type CopyOperation = CopyRangesOperation | CopyHeaderOperation;\n\nfunction isCopyRangesOperation(\n copyOperation: CopyOperation\n): copyOperation is CopyRangesOperation {\n return (copyOperation as CopyRangesOperation).ranges != null;\n}\n\nfunction isCopyHeaderOperation(\n copyOperation: CopyOperation\n): copyOperation is CopyHeaderOperation {\n return (copyOperation as CopyHeaderOperation).columnIndex != null;\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 for copy ranges operation\n FETCH_RANGES_IN_PROGRESS: 'FETCH_RANGES_IN_PROGRESS',\n\n // Fetch is currently in progress for copy header operation\n FETCH_HEADER_IN_PROGRESS: 'FETCH_HEADER_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_RANGES_IN_PROGRESS:\n return `Fetching ${rowCount.toLocaleString()} rows for clipboard...`;\n case IrisGridCopyHandler.COPY_STATES.FETCH_HEADER_IN_PROGRESS:\n return 'Fetching header 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 { 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 this.setState({ isShown: true, error: undefined });\n\n if (isCopyRangesOperation(copyOperation)) {\n const { ranges } = copyOperation;\n const rowCount = GridRange.rowCount(ranges);\n this.setState({ rowCount });\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 return;\n }\n }\n\n this.startFetch();\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 const { model, copyOperation } = this.props;\n\n if (isCopyHeaderOperation(copyOperation)) {\n const { columnIndex, columnDepth, movedColumns } = copyOperation;\n log.debug('startFetch copyHeader', columnIndex, columnDepth);\n\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_HEADER_IN_PROGRESS,\n });\n\n const modelIndex = GridUtils.getModelIndex(columnIndex, movedColumns);\n const copyText = model.textForColumnHeader(modelIndex, columnDepth);\n if (copyText === undefined) {\n this.fetchPromise = undefined;\n this.setState({\n error: 'Invalid column header selected.',\n copyState: IrisGridCopyHandler.COPY_STATES.DONE,\n });\n return;\n }\n this.fetchPromise = PromiseUtils.makeCancelable(copyText);\n } else {\n const {\n ranges,\n includeHeaders,\n userColumnWidths,\n movedColumns,\n formatValues,\n } = copyOperation;\n log.debug('startFetch copyRanges', ranges);\n\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_RANGES_IN_PROGRESS,\n });\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: dh.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 }\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 <FadeTransition\n in={isButtonContainerVisible}\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 && (\n <LoadingSpinner className=\"loading-spinner-vertical-align\" />\n )}\n {copyButtonText}\n </Button>\n </div>\n </FadeTransition>\n </IrisGridBottomBar>\n );\n }\n}\n\nexport default IrisGridCopyHandler;\n"],"mappings":"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","ignoreList":[]}