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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/AdvancedFilterCreator.js +7 -65
  2. package/dist/AdvancedFilterCreator.js.map +1 -1
  3. package/dist/AdvancedFilterCreatorFilterItem.js +0 -23
  4. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.js +0 -52
  6. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValueList.js +2 -42
  8. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  9. package/dist/ColumnHeaderGroup.js +0 -11
  10. package/dist/ColumnHeaderGroup.js.map +1 -1
  11. package/dist/ColumnStatistics.js +1 -20
  12. package/dist/ColumnStatistics.js.map +1 -1
  13. package/dist/CrossColumnSearch.js +2 -23
  14. package/dist/CrossColumnSearch.js.map +1 -1
  15. package/dist/FilterInputField.js +2 -36
  16. package/dist/FilterInputField.js.map +1 -1
  17. package/dist/GotoRow.d.ts +1 -1
  18. package/dist/GotoRow.d.ts.map +1 -1
  19. package/dist/GotoRow.js +2 -7
  20. package/dist/GotoRow.js.map +1 -1
  21. package/dist/IrisGrid.d.ts +41 -35
  22. package/dist/IrisGrid.d.ts.map +1 -1
  23. package/dist/IrisGrid.js +77 -519
  24. package/dist/IrisGrid.js.map +1 -1
  25. package/dist/IrisGridBottomBar.d.ts +1 -1
  26. package/dist/IrisGridBottomBar.d.ts.map +1 -1
  27. package/dist/IrisGridBottomBar.js +2 -2
  28. package/dist/IrisGridBottomBar.js.map +1 -1
  29. package/dist/IrisGridCellOverflowModal.js +6 -21
  30. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  31. package/dist/IrisGridCopyHandler.js +3 -50
  32. package/dist/IrisGridCopyHandler.js.map +1 -1
  33. package/dist/IrisGridMetricCalculator.js +2 -12
  34. package/dist/IrisGridMetricCalculator.js.map +1 -1
  35. package/dist/IrisGridModel.js +32 -58
  36. package/dist/IrisGridModel.js.map +1 -1
  37. package/dist/IrisGridModelFactory.js +0 -7
  38. package/dist/IrisGridModelFactory.js.map +1 -1
  39. package/dist/IrisGridModelUpdater.js +0 -4
  40. package/dist/IrisGridModelUpdater.js.map +1 -1
  41. package/dist/IrisGridPartitionSelector.js +0 -23
  42. package/dist/IrisGridPartitionSelector.js.map +1 -1
  43. package/dist/IrisGridProxyModel.js +9 -153
  44. package/dist/IrisGridProxyModel.js.map +1 -1
  45. package/dist/IrisGridRenderer.js +41 -183
  46. package/dist/IrisGridRenderer.js.map +1 -1
  47. package/dist/IrisGridShortcuts.js.map +1 -1
  48. package/dist/IrisGridTableModel.d.ts +2 -2
  49. package/dist/IrisGridTableModel.d.ts.map +1 -1
  50. package/dist/IrisGridTableModel.js +10 -90
  51. package/dist/IrisGridTableModel.js.map +1 -1
  52. package/dist/IrisGridTableModelTemplate.d.ts +2 -2
  53. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  54. package/dist/IrisGridTableModelTemplate.js +70 -461
  55. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  56. package/dist/IrisGridTestUtils.js +0 -23
  57. package/dist/IrisGridTestUtils.js.map +1 -1
  58. package/dist/IrisGridTheme.js.map +1 -1
  59. package/dist/IrisGridTreeTableModel.js +3 -42
  60. package/dist/IrisGridTreeTableModel.js.map +1 -1
  61. package/dist/IrisGridUtils.d.ts +11 -5
  62. package/dist/IrisGridUtils.d.ts.map +1 -1
  63. package/dist/IrisGridUtils.js +98 -196
  64. package/dist/IrisGridUtils.js.map +1 -1
  65. package/dist/MissingKeyError.js +0 -7
  66. package/dist/MissingKeyError.js.map +1 -1
  67. package/dist/PartitionSelectorSearch.js +2 -48
  68. package/dist/PartitionSelectorSearch.js.map +1 -1
  69. package/dist/PendingDataBottomBar.d.ts +1 -1
  70. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  71. package/dist/PendingDataBottomBar.js +2 -7
  72. package/dist/PendingDataBottomBar.js.map +1 -1
  73. package/dist/TableViewportUpdater.d.ts +2 -2
  74. package/dist/TableViewportUpdater.d.ts.map +1 -1
  75. package/dist/TableViewportUpdater.js +3 -29
  76. package/dist/TableViewportUpdater.js.map +1 -1
  77. package/dist/ToastBottomBar.d.ts +1 -1
  78. package/dist/ToastBottomBar.d.ts.map +1 -1
  79. package/dist/ToastBottomBar.js +2 -4
  80. package/dist/ToastBottomBar.js.map +1 -1
  81. package/dist/TreeTableViewportUpdater.js +0 -21
  82. package/dist/TreeTableViewportUpdater.js.map +1 -1
  83. package/dist/format-context-menus/CustomFormatAction.js +4 -25
  84. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  85. package/dist/format-context-menus/DateTimeFormatContextMenu.js +0 -7
  86. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
  87. package/dist/format-context-menus/DecimalFormatContextMenu.js +0 -9
  88. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
  89. package/dist/format-context-menus/FormatContextMenuUtils.js +3 -9
  90. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
  91. package/dist/format-context-menus/IntegerFormatContextMenu.js +0 -8
  92. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
  93. package/dist/format-context-menus/index.js.map +1 -1
  94. package/dist/index.d.ts +3 -3
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +3 -3
  97. package/dist/index.js.map +1 -1
  98. package/dist/key-handlers/ClearFilterKeyHandler.js +0 -8
  99. package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
  100. package/dist/key-handlers/CopyKeyHandler.js +1 -10
  101. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  102. package/dist/key-handlers/ReverseKeyHandler.js +0 -11
  103. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  104. package/dist/key-handlers/index.js.map +1 -1
  105. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +2 -32
  106. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  107. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +4 -34
  108. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  109. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +0 -20
  110. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  111. package/dist/mousehandlers/IrisGridContextMenuHandler.js +15 -105
  112. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  113. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +0 -9
  114. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  115. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +0 -17
  116. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  117. package/dist/mousehandlers/IrisGridSortMouseHandler.js +2 -15
  118. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  119. package/dist/mousehandlers/PendingMouseHandler.js +0 -6
  120. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  121. package/dist/mousehandlers/index.js.map +1 -1
  122. package/dist/sidebar/AdvancedSettings.js.map +1 -1
  123. package/dist/sidebar/AdvancedSettingsMenu.d.ts +4 -4
  124. package/dist/sidebar/AdvancedSettingsMenu.d.ts.map +1 -1
  125. package/dist/sidebar/AdvancedSettingsMenu.js +2 -6
  126. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  127. package/dist/sidebar/AdvancedSettingsType.js +0 -2
  128. package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
  129. package/dist/sidebar/ChartBuilder.js +2 -46
  130. package/dist/sidebar/ChartBuilder.js.map +1 -1
  131. package/dist/sidebar/CustomColumnBuilder.js +6 -58
  132. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  133. package/dist/sidebar/CustomColumnInput.js +4 -15
  134. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  135. package/dist/sidebar/InputEditor.js +5 -36
  136. package/dist/sidebar/InputEditor.js.map +1 -1
  137. package/dist/sidebar/OptionType.js +0 -2
  138. package/dist/sidebar/OptionType.js.map +1 -1
  139. package/dist/sidebar/RollupRows.js +9 -65
  140. package/dist/sidebar/RollupRows.js.map +1 -1
  141. package/dist/sidebar/SelectDistinctBuilder.js +0 -13
  142. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  143. package/dist/sidebar/TableCsvExporter.js +0 -52
  144. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  145. package/dist/sidebar/TableSaver.d.ts +1 -1
  146. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  147. package/dist/sidebar/TableSaver.js +10 -123
  148. package/dist/sidebar/TableSaver.js.map +1 -1
  149. package/dist/sidebar/VisibilityOrderingBuilder.d.ts +3 -2
  150. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
  151. package/dist/sidebar/VisibilityOrderingBuilder.js +37 -116
  152. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  153. package/dist/sidebar/aggregations/AggregationEdit.d.ts +1 -1
  154. package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
  155. package/dist/sidebar/aggregations/AggregationEdit.js +2 -14
  156. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  157. package/dist/sidebar/aggregations/AggregationOperation.js +0 -2
  158. package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
  159. package/dist/sidebar/aggregations/AggregationUtils.js +2 -5
  160. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  161. package/dist/sidebar/aggregations/Aggregations.d.ts +1 -1
  162. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  163. package/dist/sidebar/aggregations/Aggregations.js +2 -12
  164. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  165. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +1 -1
  166. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
  167. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +2 -16
  168. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  169. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +1 -1
  170. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  171. package/dist/sidebar/conditional-formatting/ConditionEditor.js +2 -35
  172. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  173. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts +1 -1
  174. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
  175. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +2 -12
  176. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  177. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +0 -3
  178. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
  179. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +1 -1
  180. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  181. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +16 -26
  182. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  183. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +9 -172
  184. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  185. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts +1 -1
  186. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  187. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +2 -16
  188. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  189. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts +1 -1
  190. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts.map +1 -1
  191. package/dist/sidebar/conditional-formatting/StyleEditor.js +2 -12
  192. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  193. package/dist/sidebar/icons/BarIcon.js +0 -3
  194. package/dist/sidebar/icons/BarIcon.js.map +1 -1
  195. package/dist/sidebar/icons/FormatColumnWhereIcon.js +2 -5
  196. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
  197. package/dist/sidebar/icons/FormatRowWhereIcon.js +2 -5
  198. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
  199. package/dist/sidebar/icons/HistogramIcon.js +0 -3
  200. package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
  201. package/dist/sidebar/icons/LineIcon.js +0 -3
  202. package/dist/sidebar/icons/LineIcon.js.map +1 -1
  203. package/dist/sidebar/icons/PieIcon.js +0 -3
  204. package/dist/sidebar/icons/PieIcon.js.map +1 -1
  205. package/dist/sidebar/icons/ScatterIcon.js +0 -3
  206. package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
  207. package/dist/sidebar/icons/index.js.map +1 -1
  208. package/dist/sidebar/index.js.map +1 -1
  209. package/package.json +15 -15
@@ -11,6 +11,6 @@ export declare type IrisGridBottomBarProps = {
11
11
  isShown: boolean;
12
12
  className?: string;
13
13
  };
14
- export declare const IrisGridBottomBar: ({ animation, children, className, isShown, onClick, onEntering, onEntered, onExiting, onExited, }: IrisGridBottomBarProps) => JSX.Element;
14
+ export declare function IrisGridBottomBar({ animation, children, className, isShown, onClick, onEntering, onEntered, onExiting, onExited, }: IrisGridBottomBarProps): JSX.Element;
15
15
  export default IrisGridBottomBar;
16
16
  //# sourceMappingURL=IrisGridBottomBar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridBottomBar.d.ts","sourceRoot":"","sources":["../src/IrisGridBottomBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,0BAA0B,CAAC;AAElC,oBAAY,sBAAsB,GAAG;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,sGAU3B,sBAAsB,KAAG,WAqB3B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"IrisGridBottomBar.d.ts","sourceRoot":"","sources":["../src/IrisGridBottomBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,0BAA0B,CAAC;AAElC,oBAAY,sBAAsB,GAAG;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,SAA2C,EAC3C,QAAQ,EACR,SAAS,EACT,OAAO,EACP,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,GACT,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAuBtC;AAED,eAAe,iBAAiB,CAAC"}
@@ -3,7 +3,7 @@ import classNames from 'classnames';
3
3
  import { CSSTransition } from 'react-transition-group';
4
4
  import { ThemeExport } from '@deephaven/components';
5
5
  import "./IrisGridBottomBar.css";
6
- export var IrisGridBottomBar = _ref => {
6
+ export function IrisGridBottomBar(_ref) {
7
7
  var {
8
8
  animation = 'iris-grid-bottom-bar-slide-up',
9
9
  children,
@@ -31,6 +31,6 @@ export var IrisGridBottomBar = _ref => {
31
31
  onClick: onClick,
32
32
  onKeyPress: onClick
33
33
  }, children));
34
- };
34
+ }
35
35
  export default IrisGridBottomBar;
36
36
  //# sourceMappingURL=IrisGridBottomBar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridBottomBar.js","names":["React","classNames","CSSTransition","ThemeExport","IrisGridBottomBar","animation","children","className","isShown","onClick","onEntering","onEntered","onExiting","onExited","transitionMs"],"sources":["../src/IrisGridBottomBar.tsx"],"sourcesContent":["import React 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 const 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 <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 >\n <div\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\nexport default IrisGridBottomBar;\n"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,aAAT,QAA8B,wBAA9B;AACA,SAASC,WAAT,QAA4B,uBAA5B;;AAeA,OAAO,IAAMC,iBAAiB,GAAG;EAAA,IAAC;IAChCC,SAAS,GAAG,+BADoB;IAEhCC,QAFgC;IAGhCC,SAHgC;IAIhCC,OAJgC;IAKhCC,OALgC;IAMhCC,UANgC;IAOhCC,SAPgC;IAQhCC,SARgC;IAShCC;EATgC,CAAD;EAAA,oBAW/B,oBAAC,aAAD;IACE,EAAE,EAAEL,OADN;IAEE,OAAO,EAAEL,WAAW,CAACW,YAFvB;IAGE,UAAU,EAAET,SAHd;IAIE,UAAU,EAAEK,UAJd;IAKE,SAAS,EAAEC,SALb;IAME,SAAS,EAAEC,SANb;IAOE,QAAQ,EAAEC,QAPZ;IAQE,YAAY,MARd;IASE,aAAa;EATf,gBAWE;IACE,SAAS,EAAEZ,UAAU,CAAC,sBAAD,EAAyBM,SAAzB,CADvB;IAEE,IAAI,EAAC,cAFP;IAGE,OAAO,EAAEE,OAHX;IAIE,UAAU,EAAEA;EAJd,GAMGH,QANH,CAXF,CAX+B;AAAA,CAA1B;AAiCP,eAAeF,iBAAf"}
1
+ {"version":3,"file":"IrisGridBottomBar.js","names":["React","classNames","CSSTransition","ThemeExport","IrisGridBottomBar","animation","children","className","isShown","onClick","onEntering","onEntered","onExiting","onExited","transitionMs"],"sources":["../src/IrisGridBottomBar.tsx"],"sourcesContent":["import React 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 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 >\n <div\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,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,aAAa,QAAQ,wBAAwB;AACtD,SAASC,WAAW,QAAQ,uBAAuB;AAAC;AAepD,OAAO,SAASC,iBAAiB,OAUO;EAAA,IAVN;IAChCC,SAAS,GAAG,+BAA+B;IAC3CC,QAAQ;IACRC,SAAS;IACTC,OAAO;IACPC,OAAO;IACPC,UAAU;IACVC,SAAS;IACTC,SAAS;IACTC;EACsB,CAAC;EACvB,oBACE,oBAAC,aAAa;IACZ,EAAE,EAAEL,OAAQ;IACZ,OAAO,EAAEL,WAAW,CAACW,YAAa;IAClC,UAAU,EAAET,SAAU;IACtB,UAAU,EAAEK,UAAW;IACvB,SAAS,EAAEC,SAAU;IACrB,SAAS,EAAEC,SAAU;IACrB,QAAQ,EAAEC,QAAS;IACnB,YAAY;IACZ,aAAa;EAAA,gBAEb;IACE,SAAS,EAAEZ,UAAU,CAAC,sBAAsB,EAAEM,SAAS,CAAE;IACzD,IAAI,EAAC,cAAc;IACnB,OAAO,EAAEE,OAAQ;IACjB,UAAU,EAAEA;EAAQ,GAEnBH,QAAQ,CACL,CACQ;AAEpB;AAEA,eAAeF,iBAAiB"}
@@ -5,7 +5,6 @@ import { vsJson, vsListOrdered } from '@deephaven/icons';
5
5
  import "./IrisGridCellOverflowModal.css";
6
6
  export default function IrisGridCellOverflowModal(_ref) {
7
7
  var _editorRef$current$ge, _editorRef$current2;
8
-
9
8
  var {
10
9
  text,
11
10
  isOpen,
@@ -16,29 +15,30 @@ export default function IrisGridCellOverflowModal(_ref) {
16
15
  var [showLineNumbers, setShowLineNumbers] = useState(false);
17
16
  var [isFormatted, setIsFormatted] = useState(false);
18
17
  var [canFormat, setCanFormat] = useState(false);
19
- var editorRef = useRef(); // Update format button on open
18
+ var editorRef = useRef();
20
19
 
20
+ // Update format button on open
21
21
  useEffect(function enableFormatButtonWhenOpen() {
22
22
  if (!isOpen) {
23
23
  return;
24
24
  }
25
-
26
25
  try {
27
26
  JSON.parse(text);
28
27
  setCanFormat(true);
29
28
  } catch (_unused) {
30
29
  setCanFormat(false);
31
30
  }
32
-
33
31
  setIsFormatted(false);
34
- }, [isOpen, text]); // Re-layout editor on height change
32
+ }, [isOpen, text]);
35
33
 
34
+ // Re-layout editor on height change
36
35
  useEffect(function updateLayoutOnHeightChange() {
37
36
  if (editorRef.current) {
38
37
  editorRef.current.layout();
39
38
  }
40
- }, [height]); // Update editor options on line number toggle
39
+ }, [height]);
41
40
 
41
+ // Update editor options on line number toggle
42
42
  useEffect(function toggleShowLineNumber() {
43
43
  if (editorRef.current) {
44
44
  editorRef.current.updateOptions({
@@ -46,20 +46,15 @@ export default function IrisGridCellOverflowModal(_ref) {
46
46
  });
47
47
  }
48
48
  }, [showLineNumbers]);
49
-
50
49
  function toggleLineNumbers() {
51
50
  setShowLineNumbers(!showLineNumbers);
52
51
  }
53
-
54
52
  function formatAsJSON() {
55
53
  var _editorRef$current;
56
-
57
54
  var model = (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 ? void 0 : _editorRef$current.getModel();
58
-
59
55
  if (!canFormat || !model) {
60
56
  return;
61
57
  }
62
-
63
58
  if (!isFormatted) {
64
59
  model.setValue(JSON.stringify(JSON.parse(text), undefined, 2));
65
60
  setIsFormatted(true);
@@ -67,29 +62,22 @@ export default function IrisGridCellOverflowModal(_ref) {
67
62
  model.setValue(text);
68
63
  setIsFormatted(false);
69
64
  }
70
-
71
65
  autoSetLineNumbers();
72
66
  }
73
-
74
67
  function autoSetLineNumbers() {
75
68
  var _editor$getModel$getL, _editor$getModel;
76
-
77
69
  var editor = editorRef.current;
78
-
79
70
  if (!editor) {
80
71
  return;
81
72
  }
82
-
83
73
  setShowLineNumbers(((_editor$getModel$getL = (_editor$getModel = editor.getModel()) === null || _editor$getModel === void 0 ? void 0 : _editor$getModel.getLineCount()) !== null && _editor$getModel$getL !== void 0 ? _editor$getModel$getL : 0) > 1);
84
74
  }
85
-
86
75
  function handleToggle() {
87
76
  if (isOpened) {
88
77
  editorRef.current = undefined;
89
78
  onClose();
90
79
  }
91
80
  }
92
-
93
81
  function onEditorInitialized(editor) {
94
82
  editorRef.current = editor;
95
83
  editor.onDidContentSizeChange(_ref2 => {
@@ -100,11 +88,9 @@ export default function IrisGridCellOverflowModal(_ref) {
100
88
  });
101
89
  autoSetLineNumbers();
102
90
  }
103
-
104
91
  if (!isOpen && !isOpened) {
105
92
  return null;
106
93
  }
107
-
108
94
  return /*#__PURE__*/React.createElement(Modal, {
109
95
  isOpen: isOpen,
110
96
  centered: true,
@@ -155,7 +141,6 @@ export default function IrisGridCellOverflowModal(_ref) {
155
141
  lineNumbers: showLineNumbers ? 'on' : 'off',
156
142
  overviewRulerLanes: 0,
157
143
  renderLineHighlight: 'none',
158
-
159
144
  /*
160
145
  The entire string may be 1 giant line
161
146
  Monaco by default seeds find w/ that line
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridCellOverflowModal.js","names":["React","useEffect","useRef","useState","Editor","Button","CopyButton","Modal","ModalBody","ModalHeader","vsJson","vsListOrdered","IrisGridCellOverflowModal","text","isOpen","onClose","isOpened","setIsOpened","height","setHeight","showLineNumbers","setShowLineNumbers","isFormatted","setIsFormatted","canFormat","setCanFormat","editorRef","enableFormatButtonWhenOpen","JSON","parse","updateLayoutOnHeightChange","current","layout","toggleShowLineNumber","updateOptions","lineNumbers","toggleLineNumbers","formatAsJSON","model","getModel","setValue","stringify","undefined","autoSetLineNumbers","editor","getLineCount","handleToggle","onEditorInitialized","onDidContentSizeChange","contentHeight","getValue","value","readOnly","wordWrap","language","folding","padding","bottom","overviewRulerLanes","renderLineHighlight","find","seedSearchStringFromSelection"],"sources":["../src/IrisGridCellOverflowModal.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Editor } from '@deephaven/console';\nimport * as monaco from 'monaco-editor';\nimport {\n Button,\n CopyButton,\n Modal,\n ModalBody,\n ModalHeader,\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() {\n setShowLineNumbers(!showLineNumbers);\n }\n\n function formatAsJSON() {\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() {\n const editor = editorRef.current;\n if (!editor) {\n return;\n }\n\n setShowLineNumbers((editor.getModel()?.getLineCount() ?? 0) > 1);\n }\n\n function handleToggle() {\n if (isOpened) {\n editorRef.current = undefined;\n onClose();\n }\n }\n\n function onEditorInitialized(editor: monaco.editor.IStandaloneCodeEditor) {\n editorRef.current = editor;\n editor.onDidContentSizeChange(({ contentHeight }) =>\n setHeight(contentHeight)\n );\n autoSetLineNumbers();\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=\"theme-bg-dark cell-overflow-modal\"\n >\n <ModalHeader toggle={onClose}>\n <h5 className=\"overflow-modal-title\">Cell Contents</h5>\n <CopyButton\n kind=\"inline\"\n tooltip=\"Copy cell contents\"\n copy={editorRef.current?.getValue() ?? text}\n />\n <Button\n kind=\"inline\"\n active={showLineNumbers}\n icon={vsListOrdered}\n tooltip=\"Toggle line numbers\"\n onClick={toggleLineNumbers}\n />\n {canFormat && (\n <Button\n kind=\"inline\"\n icon={vsJson}\n active={isFormatted}\n tooltip=\"Format as JSON\"\n onClick={formatAsJSON}\n />\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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"}
1
+ {"version":3,"file":"IrisGridCellOverflowModal.js","names":["React","useEffect","useRef","useState","Editor","Button","CopyButton","Modal","ModalBody","ModalHeader","vsJson","vsListOrdered","IrisGridCellOverflowModal","text","isOpen","onClose","isOpened","setIsOpened","height","setHeight","showLineNumbers","setShowLineNumbers","isFormatted","setIsFormatted","canFormat","setCanFormat","editorRef","enableFormatButtonWhenOpen","JSON","parse","updateLayoutOnHeightChange","current","layout","toggleShowLineNumber","updateOptions","lineNumbers","toggleLineNumbers","formatAsJSON","model","getModel","setValue","stringify","undefined","autoSetLineNumbers","editor","getLineCount","handleToggle","onEditorInitialized","onDidContentSizeChange","contentHeight","getValue","value","readOnly","wordWrap","language","folding","padding","bottom","overviewRulerLanes","renderLineHighlight","find","seedSearchStringFromSelection"],"sources":["../src/IrisGridCellOverflowModal.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Editor } from '@deephaven/console';\nimport * as monaco from 'monaco-editor';\nimport {\n Button,\n CopyButton,\n Modal,\n ModalBody,\n ModalHeader,\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() {\n setShowLineNumbers(!showLineNumbers);\n }\n\n function formatAsJSON() {\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() {\n const editor = editorRef.current;\n if (!editor) {\n return;\n }\n\n setShowLineNumbers((editor.getModel()?.getLineCount() ?? 0) > 1);\n }\n\n function handleToggle() {\n if (isOpened) {\n editorRef.current = undefined;\n onClose();\n }\n }\n\n function onEditorInitialized(editor: monaco.editor.IStandaloneCodeEditor) {\n editorRef.current = editor;\n editor.onDidContentSizeChange(({ contentHeight }) =>\n setHeight(contentHeight)\n );\n autoSetLineNumbers();\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=\"theme-bg-dark cell-overflow-modal\"\n >\n <ModalHeader toggle={onClose}>\n <h5 className=\"overflow-modal-title\">Cell Contents</h5>\n <CopyButton\n kind=\"inline\"\n tooltip=\"Copy cell contents\"\n copy={editorRef.current?.getValue() ?? text}\n />\n <Button\n kind=\"inline\"\n active={showLineNumbers}\n icon={vsListOrdered}\n tooltip=\"Toggle line numbers\"\n onClick={toggleLineNumbers}\n />\n {canFormat && (\n <Button\n kind=\"inline\"\n icon={vsJson}\n active={isFormatted}\n tooltip=\"Format as JSON\"\n onClick={formatAsJSON}\n />\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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"}
@@ -1,5 +1,4 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
2
  import React, { Component } from 'react';
4
3
  import classNames from 'classnames';
5
4
  import { CSSTransition } from 'react-transition-group';
@@ -11,7 +10,6 @@ import IrisGridUtils from "./IrisGridUtils.js";
11
10
  import IrisGridBottomBar from "./IrisGridBottomBar.js";
12
11
  import "./IrisGridCopyHandler.css";
13
12
  var log = Log.module('IrisGridCopyHandler');
14
-
15
13
  /**
16
14
  * Component for handling copying of data from the Iris Grid.
17
15
  * - Prompts if necessary (large amount of rows copied)
@@ -21,53 +19,40 @@ class IrisGridCopyHandler extends Component {
21
19
  /**
22
20
  * Different states for the current copy operation
23
21
  */
22
+
24
23
  static getStatusMessageText(copyState, rowCount) {
25
24
  switch (copyState) {
26
25
  case IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED:
27
26
  return "Are you sure you want to copy ".concat(rowCount.toLocaleString(), " rows to your clipboard?");
28
-
29
27
  case IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED:
30
28
  return "Fetched ".concat(rowCount.toLocaleString(), " rows!");
31
-
32
29
  case IrisGridCopyHandler.COPY_STATES.FETCH_ERROR:
33
30
  return 'Unable to copy data.';
34
-
35
31
  case IrisGridCopyHandler.COPY_STATES.FETCH_IN_PROGRESS:
36
32
  return "Fetching ".concat(rowCount.toLocaleString(), " rows for clipboard...");
37
-
38
33
  case IrisGridCopyHandler.COPY_STATES.DONE:
39
34
  return 'Copied to Clipboard!';
40
-
41
35
  default:
42
36
  return '';
43
37
  }
44
38
  }
45
-
46
39
  static getCopyButtonText(buttonState) {
47
40
  switch (buttonState) {
48
41
  case IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS:
49
42
  return 'Fetching';
50
-
51
43
  case IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY:
52
44
  return 'Click to Copy';
53
-
54
45
  case IrisGridCopyHandler.BUTTON_STATES.RETRY:
55
46
  return 'Retry';
56
-
57
47
  default:
58
48
  return 'Copy';
59
49
  }
60
50
  }
61
-
62
51
  constructor(props) {
63
52
  super(props);
64
-
65
53
  _defineProperty(this, "textData", void 0);
66
-
67
54
  _defineProperty(this, "hideTimer", void 0);
68
-
69
55
  _defineProperty(this, "fetchPromise", void 0);
70
-
71
56
  this.handleBackgroundClick = this.handleBackgroundClick.bind(this);
72
57
  this.handleCancelClick = this.handleCancelClick.bind(this);
73
58
  this.handleCopyClick = this.handleCopyClick.bind(this);
@@ -80,38 +65,31 @@ class IrisGridCopyHandler extends Component {
80
65
  rowCount: 0
81
66
  };
82
67
  }
83
-
84
68
  componentDidMount() {
85
69
  var {
86
70
  copyOperation
87
71
  } = this.props;
88
-
89
72
  if (copyOperation != null) {
90
73
  this.startCopy();
91
74
  }
92
75
  }
93
-
94
76
  componentDidUpdate(prevProps) {
95
77
  var {
96
78
  copyOperation
97
79
  } = this.props;
98
-
99
80
  if (prevProps.copyOperation !== copyOperation) {
100
81
  this.startCopy();
101
82
  }
102
83
  }
103
-
104
84
  componentWillUnmount() {
105
85
  this.stopCopy();
106
86
  }
107
-
108
87
  startCopy() {
109
88
  log.debug2('startCopy');
110
89
  this.stopCopy();
111
90
  var {
112
91
  copyOperation
113
92
  } = this.props;
114
-
115
93
  if (copyOperation == null) {
116
94
  log.debug2('No copy operation set, cancelling out');
117
95
  this.setState({
@@ -119,12 +97,10 @@ class IrisGridCopyHandler extends Component {
119
97
  });
120
98
  return;
121
99
  }
122
-
123
100
  var {
124
101
  ranges,
125
102
  error
126
103
  } = copyOperation;
127
-
128
104
  if (error != null) {
129
105
  log.debug('Showing copy error', error);
130
106
  this.setState({
@@ -135,14 +111,12 @@ class IrisGridCopyHandler extends Component {
135
111
  this.startHideTimer();
136
112
  return;
137
113
  }
138
-
139
114
  var rowCount = GridRange.rowCount(ranges);
140
115
  this.setState({
141
116
  rowCount,
142
117
  isShown: true,
143
118
  error: undefined
144
119
  });
145
-
146
120
  if (rowCount > IrisGridCopyHandler.NO_PROMPT_THRESHOLD) {
147
121
  this.setState({
148
122
  buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,
@@ -152,26 +126,22 @@ class IrisGridCopyHandler extends Component {
152
126
  this.startFetch();
153
127
  }
154
128
  }
155
-
156
129
  stopCopy() {
157
130
  this.textData = undefined;
158
131
  this.stopFetch();
159
132
  this.stopHideTimer();
160
133
  }
161
-
162
134
  handleBackgroundClick() {
163
135
  log.debug2('handleBackgroundClick');
164
136
  var {
165
137
  copyState
166
138
  } = this.state;
167
-
168
139
  if (copyState === IrisGridCopyHandler.COPY_STATES.DONE) {
169
140
  this.setState({
170
141
  isShown: false
171
142
  });
172
143
  }
173
144
  }
174
-
175
145
  handleCancelClick() {
176
146
  log.debug2('handleCancelClick');
177
147
  this.stopFetch();
@@ -179,17 +149,14 @@ class IrisGridCopyHandler extends Component {
179
149
  isShown: false
180
150
  });
181
151
  }
182
-
183
152
  handleCopyClick() {
184
153
  log.debug2('handleCopyClick');
185
-
186
154
  if (this.textData != null) {
187
155
  this.copyText(this.textData);
188
156
  } else {
189
157
  this.startFetch();
190
158
  }
191
159
  }
192
-
193
160
  handleHideTimeout() {
194
161
  log.debug2('handleHideTimeout');
195
162
  this.stopHideTimer();
@@ -197,7 +164,6 @@ class IrisGridCopyHandler extends Component {
197
164
  isShown: false
198
165
  });
199
166
  }
200
-
201
167
  copyText(text) {
202
168
  log.debug2('copyText', text);
203
169
  this.textData = text;
@@ -214,7 +180,6 @@ class IrisGridCopyHandler extends Component {
214
180
  });
215
181
  });
216
182
  }
217
-
218
183
  startFetch() {
219
184
  this.stopFetch();
220
185
  this.setState({
@@ -235,13 +200,12 @@ class IrisGridCopyHandler extends Component {
235
200
  log.debug('startFetch', ranges);
236
201
  var hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);
237
202
  var modelRanges = GridUtils.getModelRanges(ranges, movedColumns);
238
-
239
203
  if (hiddenColumns.length > 0) {
240
204
  var subtractRanges = hiddenColumns.map(GridRange.makeColumn);
241
205
  modelRanges = GridRange.subtractRangesFromRanges(modelRanges, subtractRanges);
242
- } // Remove the hidden columns from the snapshot
243
-
206
+ }
244
207
 
208
+ // Remove the hidden columns from the snapshot
245
209
  var formatValue = formatValues != null && formatValues ? (value, column) => model.displayString(value, column.type, column.name) : value => "".concat(value);
246
210
  this.fetchPromise = PromiseUtils.makeCancelable(model.textSnapshot(modelRanges, includeHeaders, formatValue));
247
211
  this.fetchPromise.then(text => {
@@ -260,7 +224,6 @@ class IrisGridCopyHandler extends Component {
260
224
  }
261
225
  });
262
226
  }
263
-
264
227
  stopFetch() {
265
228
  if (this.fetchPromise) {
266
229
  log.debug2('stopFetch');
@@ -268,19 +231,16 @@ class IrisGridCopyHandler extends Component {
268
231
  this.fetchPromise = undefined;
269
232
  }
270
233
  }
271
-
272
234
  startHideTimer() {
273
235
  this.stopHideTimer();
274
236
  this.hideTimer = setTimeout(this.handleHideTimeout, IrisGridCopyHandler.HIDE_TIMEOUT);
275
237
  }
276
-
277
238
  stopHideTimer() {
278
239
  if (this.hideTimer != null) {
279
240
  clearTimeout(this.hideTimer);
280
241
  this.hideTimer = undefined;
281
242
  }
282
243
  }
283
-
284
244
  render() {
285
245
  var {
286
246
  onEntering,
@@ -335,13 +295,9 @@ class IrisGridCopyHandler extends Component {
335
295
  disabled: isFetching
336
296
  }, isFetching && /*#__PURE__*/React.createElement(LoadingSpinner, null), copyButtonText))));
337
297
  }
338
-
339
298
  }
340
-
341
299
  _defineProperty(IrisGridCopyHandler, "NO_PROMPT_THRESHOLD", 10000);
342
-
343
300
  _defineProperty(IrisGridCopyHandler, "HIDE_TIMEOUT", 3000);
344
-
345
301
  _defineProperty(IrisGridCopyHandler, "COPY_STATES", {
346
302
  // No copy operation in progress
347
303
  IDLE: 'IDLE',
@@ -356,14 +312,12 @@ _defineProperty(IrisGridCopyHandler, "COPY_STATES", {
356
312
  // The copy operation is completed and successfully copied to the clipboard
357
313
  DONE: 'DONE'
358
314
  });
359
-
360
315
  _defineProperty(IrisGridCopyHandler, "BUTTON_STATES", {
361
316
  COPY: 'COPY',
362
317
  FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',
363
318
  CLICK_TO_COPY: 'CLICK_TO_COPY',
364
319
  RETRY: 'RETRY'
365
320
  });
366
-
367
321
  _defineProperty(IrisGridCopyHandler, "defaultProps", {
368
322
  copyOperation: null,
369
323
  onEntering: () => undefined,
@@ -371,6 +325,5 @@ _defineProperty(IrisGridCopyHandler, "defaultProps", {
371
325
  onExiting: () => undefined,
372
326
  onExited: () => undefined
373
327
  });
374
-
375
328
  export default IrisGridCopyHandler;
376
329
  //# sourceMappingURL=IrisGridCopyHandler.js.map
@@ -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","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 { Column } from '@deephaven/jsapi-shim';\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: GridRange[];\n includeHeaders: boolean;\n formatValues?: boolean;\n movedColumns: 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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"}
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 { Column } from '@deephaven/jsapi-shim';\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: GridRange[];\n includeHeaders: boolean;\n formatValues?: boolean;\n movedColumns: 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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"}