@deephaven/iris-grid 0.13.3-treemap.2 → 0.14.1-beta.6

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 (187) hide show
  1. package/dist/AdvancedFilterCreator.d.ts +69 -63
  2. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  3. package/dist/AdvancedFilterCreator.js +79 -73
  4. package/dist/AdvancedFilterCreator.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.d.ts +45 -45
  6. package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValue.js +32 -36
  8. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  9. package/dist/AdvancedFilterCreatorSelectValueList.d.ts +47 -52
  10. package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
  11. package/dist/AdvancedFilterCreatorSelectValueList.js +24 -39
  12. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  13. package/dist/ColumnStatistics.d.ts +34 -22
  14. package/dist/ColumnStatistics.d.ts.map +1 -1
  15. package/dist/ColumnStatistics.js +8 -12
  16. package/dist/ColumnStatistics.js.map +1 -1
  17. package/dist/CommonTypes.d.ts +58 -0
  18. package/dist/CommonTypes.d.ts.map +1 -0
  19. package/dist/CommonTypes.js +2 -0
  20. package/dist/CommonTypes.js.map +1 -0
  21. package/dist/CrossColumnSearch.d.ts +26 -24
  22. package/dist/CrossColumnSearch.d.ts.map +1 -1
  23. package/dist/CrossColumnSearch.js +9 -13
  24. package/dist/CrossColumnSearch.js.map +1 -1
  25. package/dist/FilterInputField.d.ts +48 -51
  26. package/dist/FilterInputField.d.ts.map +1 -1
  27. package/dist/FilterInputField.js +30 -27
  28. package/dist/FilterInputField.js.map +1 -1
  29. package/dist/IrisGrid.d.ts +410 -453
  30. package/dist/IrisGrid.d.ts.map +1 -1
  31. package/dist/IrisGrid.js +590 -526
  32. package/dist/IrisGrid.js.map +1 -1
  33. package/dist/IrisGridCellOverflowModal.d.ts +1 -1
  34. package/dist/IrisGridCellOverflowModal.d.ts.map +1 -1
  35. package/dist/IrisGridCellOverflowModal.js +1 -4
  36. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  37. package/dist/IrisGridCopyHandler.d.ts +52 -46
  38. package/dist/IrisGridCopyHandler.d.ts.map +1 -1
  39. package/dist/IrisGridCopyHandler.js +22 -38
  40. package/dist/IrisGridCopyHandler.js.map +1 -1
  41. package/dist/IrisGridMetricCalculator.d.ts +5 -4
  42. package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
  43. package/dist/IrisGridMetricCalculator.js +5 -1
  44. package/dist/IrisGridMetricCalculator.js.map +1 -1
  45. package/dist/IrisGridModel.d.ts +37 -35
  46. package/dist/IrisGridModel.d.ts.map +1 -1
  47. package/dist/IrisGridModel.js +19 -3
  48. package/dist/IrisGridModel.js.map +1 -1
  49. package/dist/IrisGridModelFactory.d.ts +7 -5
  50. package/dist/IrisGridModelFactory.d.ts.map +1 -1
  51. package/dist/IrisGridModelFactory.js +5 -5
  52. package/dist/IrisGridModelFactory.js.map +1 -1
  53. package/dist/IrisGridModelUpdater.d.ts +13 -11
  54. package/dist/IrisGridModelUpdater.d.ts.map +1 -1
  55. package/dist/IrisGridModelUpdater.js.map +1 -1
  56. package/dist/IrisGridPartitionSelector.d.ts +38 -39
  57. package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
  58. package/dist/IrisGridPartitionSelector.js +18 -24
  59. package/dist/IrisGridPartitionSelector.js.map +1 -1
  60. package/dist/IrisGridProxyModel.d.ts +111 -32
  61. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  62. package/dist/IrisGridProxyModel.js +212 -170
  63. package/dist/IrisGridProxyModel.js.map +1 -1
  64. package/dist/IrisGridRenderer.d.ts +59 -31
  65. package/dist/IrisGridRenderer.d.ts.map +1 -1
  66. package/dist/IrisGridRenderer.js +92 -46
  67. package/dist/IrisGridRenderer.js.map +1 -1
  68. package/dist/IrisGridTableModel.d.ts +48 -149
  69. package/dist/IrisGridTableModel.d.ts.map +1 -1
  70. package/dist/IrisGridTableModel.js +58 -1385
  71. package/dist/IrisGridTableModel.js.map +1 -1
  72. package/dist/IrisGridTableModelTemplate.d.ts +218 -0
  73. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -0
  74. package/dist/IrisGridTableModelTemplate.js +1624 -0
  75. package/dist/IrisGridTableModelTemplate.js.map +1 -0
  76. package/dist/IrisGridTestUtils.d.ts +18 -14
  77. package/dist/IrisGridTestUtils.d.ts.map +1 -1
  78. package/dist/IrisGridTestUtils.js +29 -1
  79. package/dist/IrisGridTestUtils.js.map +1 -1
  80. package/dist/IrisGridTheme.d.ts +35 -3
  81. package/dist/IrisGridTheme.d.ts.map +1 -1
  82. package/dist/IrisGridTheme.js.map +1 -1
  83. package/dist/IrisGridTreeTableModel.d.ts +26 -7
  84. package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
  85. package/dist/IrisGridTreeTableModel.js +24 -14
  86. package/dist/IrisGridTreeTableModel.js.map +1 -1
  87. package/dist/IrisGridUtils.d.ts +257 -162
  88. package/dist/IrisGridUtils.d.ts.map +1 -1
  89. package/dist/IrisGridUtils.js +132 -95
  90. package/dist/IrisGridUtils.js.map +1 -1
  91. package/dist/MissingKeyError.d.ts +5 -3
  92. package/dist/MissingKeyError.d.ts.map +1 -1
  93. package/dist/MissingKeyError.js.map +1 -1
  94. package/dist/PartitionSelectorSearch.d.ts +61 -40
  95. package/dist/PartitionSelectorSearch.d.ts.map +1 -1
  96. package/dist/PartitionSelectorSearch.js +25 -15
  97. package/dist/PartitionSelectorSearch.js.map +1 -1
  98. package/dist/PendingDataBottomBar.d.ts +3 -6
  99. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  100. package/dist/PendingDataBottomBar.js.map +1 -1
  101. package/dist/TableViewportUpdater.d.ts +39 -55
  102. package/dist/TableViewportUpdater.d.ts.map +1 -1
  103. package/dist/TableViewportUpdater.js +42 -64
  104. package/dist/TableViewportUpdater.js.map +1 -1
  105. package/dist/TreeTableViewportUpdater.d.ts +29 -37
  106. package/dist/TreeTableViewportUpdater.d.ts.map +1 -1
  107. package/dist/TreeTableViewportUpdater.js +39 -50
  108. package/dist/TreeTableViewportUpdater.js.map +1 -1
  109. package/dist/index.d.ts +9 -0
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +9 -0
  112. package/dist/index.js.map +1 -1
  113. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.d.ts.map +1 -1
  114. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  115. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts +1 -1
  116. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts.map +1 -1
  117. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +2 -0
  118. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  119. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.d.ts +2 -2
  120. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.d.ts.map +1 -1
  121. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +32 -14
  122. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  123. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +41 -130
  124. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
  125. package/dist/mousehandlers/IrisGridContextMenuHandler.js +426 -317
  126. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  127. package/dist/mousehandlers/IrisGridFilterMouseHandler.d.ts.map +1 -1
  128. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +2 -2
  129. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  130. package/dist/mousehandlers/IrisGridSortMouseHandler.js +1 -1
  131. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  132. package/dist/mousehandlers/PendingMouseHandler.d.ts +8 -4
  133. package/dist/mousehandlers/PendingMouseHandler.d.ts.map +1 -1
  134. package/dist/mousehandlers/PendingMouseHandler.js +4 -5
  135. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  136. package/dist/sidebar/ChartBuilder.d.ts +48 -33
  137. package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
  138. package/dist/sidebar/ChartBuilder.js +28 -27
  139. package/dist/sidebar/ChartBuilder.js.map +1 -1
  140. package/dist/sidebar/CustomColumnBuilder.d.ts +51 -41
  141. package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
  142. package/dist/sidebar/CustomColumnBuilder.js +22 -18
  143. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  144. package/dist/sidebar/CustomColumnInput.d.ts +26 -36
  145. package/dist/sidebar/CustomColumnInput.d.ts.map +1 -1
  146. package/dist/sidebar/CustomColumnInput.js +11 -20
  147. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  148. package/dist/sidebar/InputEditor.d.ts +34 -35
  149. package/dist/sidebar/InputEditor.d.ts.map +1 -1
  150. package/dist/sidebar/InputEditor.js +43 -24
  151. package/dist/sidebar/InputEditor.js.map +1 -1
  152. package/dist/sidebar/RollupRows.d.ts +67 -52
  153. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  154. package/dist/sidebar/RollupRows.js +51 -53
  155. package/dist/sidebar/RollupRows.js.map +1 -1
  156. package/dist/sidebar/SelectDistinctBuilder.d.ts +27 -21
  157. package/dist/sidebar/SelectDistinctBuilder.d.ts.map +1 -1
  158. package/dist/sidebar/SelectDistinctBuilder.js +6 -10
  159. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  160. package/dist/sidebar/TableCsvExporter.d.ts +42 -39
  161. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  162. package/dist/sidebar/TableCsvExporter.js +12 -20
  163. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  164. package/dist/sidebar/TableSaver.d.ts +59 -60
  165. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  166. package/dist/sidebar/TableSaver.js +154 -68
  167. package/dist/sidebar/TableSaver.js.map +1 -1
  168. package/dist/sidebar/VisibilityOrderingBuilder.d.ts +56 -45
  169. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
  170. package/dist/sidebar/VisibilityOrderingBuilder.js +34 -29
  171. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  172. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  173. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  174. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +2 -1
  175. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  176. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  177. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +6 -5
  178. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  179. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +5 -0
  180. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  181. package/dist/sidebar/icons/index.d.ts +7 -7
  182. package/dist/sidebar/icons/index.d.ts.map +1 -1
  183. package/dist/sidebar/icons/index.js.map +1 -1
  184. package/dist/sidebar/index.d.ts +12 -12
  185. package/dist/sidebar/index.d.ts.map +1 -1
  186. package/dist/sidebar/index.js.map +1 -1
  187. package/package.json +18 -17
@@ -5,6 +5,6 @@ interface IrisGridCellOverflowModalProps {
5
5
  isOpen: boolean;
6
6
  onClose: () => void;
7
7
  }
8
- export default function IrisGridCellOverflowModal({ text, isOpen, onClose, }: IrisGridCellOverflowModalProps): React.ReactNode;
8
+ export default function IrisGridCellOverflowModal({ text, isOpen, onClose, }: IrisGridCellOverflowModalProps): React.ReactElement | null;
9
9
  export {};
10
10
  //# sourceMappingURL=IrisGridCellOverflowModal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridCellOverflowModal.d.ts","sourceRoot":"","sources":["../src/IrisGridCellOverflowModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAM3D,OAAO,kCAAkC,CAAC;AAE1C,UAAU,8BAA8B;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,EAChD,IAAI,EACJ,MAAM,EACN,OAAO,GACR,EAAE,8BAA8B,GAAG,KAAK,CAAC,SAAS,CA0JlD"}
1
+ {"version":3,"file":"IrisGridCellOverflowModal.d.ts","sourceRoot":"","sources":["../src/IrisGridCellOverflowModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAK3D,OAAO,kCAAkC,CAAC;AAE1C,UAAU,8BAA8B;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,EAChD,IAAI,EACJ,MAAM,EACN,OAAO,GACR,EAAE,8BAA8B,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAyJ5D"}
@@ -1,7 +1,6 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
2
  import { Editor } from '@deephaven/console';
3
- import { Modal, ModalBody, ModalHeader } from 'reactstrap';
4
- import { Button } from '@deephaven/components';
3
+ import { Button, Modal, ModalBody, ModalHeader } from '@deephaven/components';
5
4
  import { vsJson, vsListOrdered } from '@deephaven/icons';
6
5
  import "./IrisGridCellOverflowModal.css";
7
6
  export default function IrisGridCellOverflowModal(_ref) {
@@ -114,10 +113,8 @@ export default function IrisGridCellOverflowModal(_ref) {
114
113
  setIsOpened(false);
115
114
  setHeight(0);
116
115
  },
117
- size: "xl",
118
116
  className: "theme-bg-dark cell-overflow-modal"
119
117
  }, /*#__PURE__*/React.createElement(ModalHeader, {
120
- tag: "div",
121
118
  toggle: onClose
122
119
  }, /*#__PURE__*/React.createElement("h5", {
123
120
  className: "overflow-modal-title"
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/IrisGridCellOverflowModal.tsx"],"names":["React","useEffect","useRef","useState","Editor","Modal","ModalBody","ModalHeader","Button","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","value","readOnly","wordWrap","language","folding","padding","bottom","overviewRulerLanes","renderLineHighlight","find","seedSearchStringFromSelection"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Editor } from '@deephaven/console';\nimport { Modal, ModalBody, ModalHeader } from 'reactstrap';\nimport * as monaco from 'monaco-editor';\nimport { Button } 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.ReactNode {\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 size=\"xl\"\n className=\"theme-bg-dark cell-overflow-modal\"\n >\n <ModalHeader tag=\"div\" toggle={onClose}>\n <h5 className=\"overflow-modal-title\">Cell Contents</h5>\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"],"file":"IrisGridCellOverflowModal.js"}
1
+ {"version":3,"sources":["../src/IrisGridCellOverflowModal.tsx"],"names":["React","useEffect","useRef","useState","Editor","Button","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","value","readOnly","wordWrap","language","folding","padding","bottom","overviewRulerLanes","renderLineHighlight","find","seedSearchStringFromSelection"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,SAAhB,EAA2BC,MAA3B,EAAmCC,QAAnC,QAAmD,OAAnD;AACA,SAASC,MAAT,QAAuB,oBAAvB;AAEA,SAASC,MAAT,EAAiBC,KAAjB,EAAwBC,SAAxB,EAAmCC,WAAnC,QAAsD,uBAAtD;AACA,SAASC,MAAT,EAAiBC,aAAjB,QAAsC,kBAAtC;;AASA,eAAe,SAASC,yBAAT,OAI+C;AAAA,MAJZ;AAChDC,IAAAA,IADgD;AAEhDC,IAAAA,MAFgD;AAGhDC,IAAAA;AAHgD,GAIY;AAC5D,MAAM,CAACC,QAAD,EAAWC,WAAX,IAA0Bb,QAAQ,CAAC,KAAD,CAAxC;AACA,MAAM,CAACc,MAAD,EAASC,SAAT,IAAsBf,QAAQ,CAAC,CAAD,CAApC;AACA,MAAM,CAACgB,eAAD,EAAkBC,kBAAlB,IAAwCjB,QAAQ,CAAC,KAAD,CAAtD;AACA,MAAM,CAACkB,WAAD,EAAcC,cAAd,IAAgCnB,QAAQ,CAAC,KAAD,CAA9C;AACA,MAAM,CAACoB,SAAD,EAAYC,YAAZ,IAA4BrB,QAAQ,CAAC,KAAD,CAA1C;AACA,MAAMsB,SAAS,GAAGvB,MAAM,EAAxB,CAN4D,CAQ5D;;AACAD,EAAAA,SAAS,CACP,SAASyB,0BAAT,GAAsC;AACpC,QAAI,CAACb,MAAL,EAAa;AACX;AACD;;AAED,QAAI;AACFc,MAAAA,IAAI,CAACC,KAAL,CAAWhB,IAAX;AACAY,MAAAA,YAAY,CAAC,IAAD,CAAZ;AACD,KAHD,CAGE,gBAAM;AACNA,MAAAA,YAAY,CAAC,KAAD,CAAZ;AACD;;AACDF,IAAAA,cAAc,CAAC,KAAD,CAAd;AACD,GAbM,EAcP,CAACT,MAAD,EAASD,IAAT,CAdO,CAAT,CAT4D,CA0B5D;;AACAX,EAAAA,SAAS,CACP,SAAS4B,0BAAT,GAAsC;AACpC,QAAIJ,SAAS,CAACK,OAAd,EAAuB;AACrBL,MAAAA,SAAS,CAACK,OAAV,CAAkBC,MAAlB;AACD;AACF,GALM,EAMP,CAACd,MAAD,CANO,CAAT,CA3B4D,CAoC5D;;AACAhB,EAAAA,SAAS,CACP,SAAS+B,oBAAT,GAAgC;AAC9B,QAAIP,SAAS,CAACK,OAAd,EAAuB;AACrBL,MAAAA,SAAS,CAACK,OAAV,CAAkBG,aAAlB,CAAgC;AAC9BC,QAAAA,WAAW,EAAEf,eAAe,GAAG,IAAH,GAAU;AADR,OAAhC;AAGD;AACF,GAPM,EAQP,CAACA,eAAD,CARO,CAAT;;AAWA,WAASgB,iBAAT,GAA6B;AAC3Bf,IAAAA,kBAAkB,CAAC,CAACD,eAAF,CAAlB;AACD;;AAED,WAASiB,YAAT,GAAwB;AAAA;;AACtB,QAAMC,KAAK,yBAAGZ,SAAS,CAACK,OAAb,uDAAG,mBAAmBQ,QAAnB,EAAd;;AACA,QAAI,CAACf,SAAD,IAAc,CAACc,KAAnB,EAA0B;AACxB;AACD;;AAED,QAAI,CAAChB,WAAL,EAAkB;AAChBgB,MAAAA,KAAK,CAACE,QAAN,CAAeZ,IAAI,CAACa,SAAL,CAAeb,IAAI,CAACC,KAAL,CAAWhB,IAAX,CAAf,EAAiC6B,SAAjC,EAA4C,CAA5C,CAAf;AACAnB,MAAAA,cAAc,CAAC,IAAD,CAAd;AACD,KAHD,MAGO;AACLe,MAAAA,KAAK,CAACE,QAAN,CAAe3B,IAAf;AACAU,MAAAA,cAAc,CAAC,KAAD,CAAd;AACD;;AACDoB,IAAAA,kBAAkB;AACnB;;AAED,WAASA,kBAAT,GAA8B;AAAA;;AAC5B,QAAMC,MAAM,GAAGlB,SAAS,CAACK,OAAzB;;AACA,QAAI,CAACa,MAAL,EAAa;AACX;AACD;;AAEDvB,IAAAA,kBAAkB,CAAC,8CAACuB,MAAM,CAACL,QAAP,EAAD,qDAAC,iBAAmBM,YAAnB,EAAD,yEAAsC,CAAtC,IAA2C,CAA5C,CAAlB;AACD;;AAED,WAASC,YAAT,GAAwB;AACtB,QAAI9B,QAAJ,EAAc;AACZU,MAAAA,SAAS,CAACK,OAAV,GAAoBW,SAApB;AACA3B,MAAAA,OAAO;AACR;AACF;;AAED,WAASgC,mBAAT,CAA6BH,MAA7B,EAA0E;AACxElB,IAAAA,SAAS,CAACK,OAAV,GAAoBa,MAApB;AACAA,IAAAA,MAAM,CAACI,sBAAP,CAA8B;AAAA,UAAC;AAAEC,QAAAA;AAAF,OAAD;AAAA,aAC5B9B,SAAS,CAAC8B,aAAD,CADmB;AAAA,KAA9B;AAGAN,IAAAA,kBAAkB;AACnB;;AAED,MAAI,CAAC7B,MAAD,IAAW,CAACE,QAAhB,EAA0B;AACxB,WAAO,IAAP;AACD;;AAED,sBACE,oBAAC,KAAD;AACE,IAAA,MAAM,EAAEF,MADV;AAEE,IAAA,QAAQ,MAFV;AAGE,IAAA,QAAQ,MAHV;AAIE,IAAA,MAAM,EAAEgC,YAJV;AAKE,IAAA,QAAQ,EAAE,MAAM7B,WAAW,CAAC,IAAD,CAL7B;AAME,IAAA,QAAQ,EAAE,MAAM;AACdA,MAAAA,WAAW,CAAC,KAAD,CAAX;AACAE,MAAAA,SAAS,CAAC,CAAD,CAAT;AACD,KATH;AAUE,IAAA,SAAS,EAAC;AAVZ,kBAYE,oBAAC,WAAD;AAAa,IAAA,MAAM,EAAEJ;AAArB,kBACE;AAAI,IAAA,SAAS,EAAC;AAAd,qBADF,eAEE,oBAAC,MAAD;AACE,IAAA,IAAI,EAAC,QADP;AAEE,IAAA,MAAM,EAAEK,eAFV;AAGE,IAAA,IAAI,EAAET,aAHR;AAIE,IAAA,OAAO,EAAC,qBAJV;AAKE,IAAA,OAAO,EAAEyB;AALX,IAFF,EASGZ,SAAS,iBACR,oBAAC,MAAD;AACE,IAAA,IAAI,EAAC,QADP;AAEE,IAAA,IAAI,EAAEd,MAFR;AAGE,IAAA,MAAM,EAAEY,WAHV;AAIE,IAAA,OAAO,EAAC,gBAJV;AAKE,IAAA,OAAO,EAAEe;AALX,IAVJ,CAZF,eA+BE,oBAAC,SAAD;AAAW,IAAA,KAAK,EAAE;AAAEnB,MAAAA;AAAF;AAAlB,kBACE,oBAAC,MAAD;AACE,IAAA,mBAAmB,EAAE6B,mBADvB;AAEE,IAAA,QAAQ,EAAE;AACRG,MAAAA,KAAK,EAAErC,IADC;AAERsC,MAAAA,QAAQ,EAAE,IAFF;AAGRC,MAAAA,QAAQ,EAAE,IAHF;AAIR;AACAC,MAAAA,QAAQ,EAAE7B,SAAS,GAAG,YAAH,GAAkB,WAL7B;AAMR8B,MAAAA,OAAO,EAAE9B,SAND;AAOR+B,MAAAA,OAAO,EAAE;AAAEC,QAAAA,MAAM,EAAE;AAAV,OAPD;AAQRrB,MAAAA,WAAW,EAAEf,eAAe,GAAG,IAAH,GAAU,KAR9B;AASRqC,MAAAA,kBAAkB,EAAE,CATZ;AAURC,MAAAA,mBAAmB,EAAE,MAVb;;AAWR;AACZ;AACA;AACA;AACA;AACYC,MAAAA,IAAI,EAAE;AAAEC,QAAAA,6BAA6B,EAAE;AAAjC;AAhBE;AAFZ,IADF,CA/BF,CADF;AAyDD","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Editor } from '@deephaven/console';\nimport * as monaco from 'monaco-editor';\nimport { Button, Modal, ModalBody, ModalHeader } 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 <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"],"file":"IrisGridCellOverflowModal.js"}
@@ -1,10 +1,39 @@
1
- export default IrisGridCopyHandler;
1
+ import { Component } from 'react';
2
+ import { GridRange, ModelSizeMap, MoveOperation } from '@deephaven/grid';
3
+ import { CancelablePromise } from '@deephaven/utils';
4
+ import './IrisGridCopyHandler.scss';
5
+ import IrisGridModel from './IrisGridModel';
6
+ declare type Values<T> = T[keyof T];
7
+ declare type ButtonStateType = Values<typeof IrisGridCopyHandler.BUTTON_STATES>;
8
+ export declare type CopyOperation = {
9
+ ranges: GridRange[];
10
+ includeHeaders: boolean;
11
+ formatValues?: boolean;
12
+ movedColumns: MoveOperation[];
13
+ userColumnWidths: ModelSizeMap;
14
+ error?: string;
15
+ };
16
+ interface IrisGridCopyHandlerProps {
17
+ model: IrisGridModel;
18
+ copyOperation: CopyOperation;
19
+ onEntering: () => void;
20
+ onEntered: () => void;
21
+ onExiting: () => void;
22
+ onExited: () => void;
23
+ }
24
+ interface IrisGridCopyHandlerState {
25
+ error?: string;
26
+ copyState: string;
27
+ buttonState: string;
28
+ isShown: boolean;
29
+ rowCount: number;
30
+ }
2
31
  /**
3
32
  * Component for handling copying of data from the Iris Grid.
4
33
  * - Prompts if necessary (large amount of rows copied)
5
34
  * - Tries to async copy, falls back to showing a "Click to Copy" button if that fails
6
35
  */
7
- declare class IrisGridCopyHandler extends React.Component<any, any, any> {
36
+ declare class IrisGridCopyHandler extends Component<IrisGridCopyHandlerProps, IrisGridCopyHandlerState> {
8
37
  static NO_PROMPT_THRESHOLD: number;
9
38
  static HIDE_TIMEOUT: number;
10
39
  /**
@@ -24,57 +53,34 @@ declare class IrisGridCopyHandler extends React.Component<any, any, any> {
24
53
  CLICK_TO_COPY: string;
25
54
  RETRY: string;
26
55
  };
27
- static getStatusMessageText(copyState: any, rowCount: any): string;
28
- static getCopyButtonText(buttonState: any): "Fetching" | "Click to Copy" | "Retry" | "Copy";
29
- constructor(props: any);
56
+ static defaultProps: {
57
+ copyOperation: null;
58
+ onEntering: () => void;
59
+ onEntered: () => void;
60
+ onExiting: () => void;
61
+ onExited: () => void;
62
+ };
63
+ static getStatusMessageText(copyState: string, rowCount: number): string;
64
+ static getCopyButtonText(buttonState: ButtonStateType): string;
65
+ constructor(props: IrisGridCopyHandlerProps);
66
+ componentDidMount(): void;
67
+ componentDidUpdate(prevProps: IrisGridCopyHandlerProps): void;
68
+ componentWillUnmount(): void;
69
+ textData?: string;
70
+ hideTimer?: ReturnType<typeof setTimeout>;
71
+ fetchPromise?: CancelablePromise<string>;
72
+ startCopy(): void;
73
+ stopCopy(): void;
30
74
  handleBackgroundClick(): void;
31
75
  handleCancelClick(): void;
32
76
  handleCopyClick(): void;
33
77
  handleHideTimeout(): void;
34
- textData: any;
35
- hideTimer: NodeJS.Timeout | null;
36
- fetchPromise: import("@deephaven/utils").CancelablePromise<any> | null;
37
- startCopy(): void;
38
- stopCopy(): void;
39
- copyText(text: any): void;
78
+ copyText(text: string): void;
40
79
  startFetch(): void;
41
80
  stopFetch(): void;
42
81
  startHideTimer(): void;
43
82
  stopHideTimer(): void;
83
+ render(): JSX.Element;
44
84
  }
45
- declare namespace IrisGridCopyHandler {
46
- namespace propTypes {
47
- const model: PropTypes.Validator<any>;
48
- const copyOperation: PropTypes.Requireable<PropTypes.InferProps<{
49
- ranges: PropTypes.Validator<(GridRange | null | undefined)[]>;
50
- movedColumns: PropTypes.Validator<(PropTypes.InferProps<{
51
- to: PropTypes.Requireable<number>;
52
- from: PropTypes.Requireable<number>;
53
- }> | null | undefined)[]>;
54
- userColumnWidths: PropTypes.Validator<Map<unknown, unknown>>;
55
- formatValues: PropTypes.Requireable<boolean>;
56
- includeHeaders: PropTypes.Requireable<boolean>;
57
- error: PropTypes.Requireable<string>;
58
- }>>;
59
- const onEntering: PropTypes.Requireable<(...args: any[]) => any>;
60
- const onEntered: PropTypes.Requireable<(...args: any[]) => any>;
61
- const onExiting: PropTypes.Requireable<(...args: any[]) => any>;
62
- const onExited: PropTypes.Requireable<(...args: any[]) => any>;
63
- }
64
- namespace defaultProps {
65
- const copyOperation_1: null;
66
- export { copyOperation_1 as copyOperation };
67
- export function onEntering_1(): void;
68
- export { onEntering_1 as onEntering };
69
- export function onEntered_1(): void;
70
- export { onEntered_1 as onEntered };
71
- export function onExiting_1(): void;
72
- export { onExiting_1 as onExiting };
73
- export function onExited_1(): void;
74
- export { onExited_1 as onExited };
75
- }
76
- }
77
- import React from "react";
78
- import PropTypes from "prop-types";
79
- import { GridRange } from "packages/grid/src/GridRange";
85
+ export default IrisGridCopyHandler;
80
86
  //# sourceMappingURL=IrisGridCopyHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridCopyHandler.d.ts","sourceRoot":"","sources":["../src/IrisGridCopyHandler.jsx"],"names":[],"mappings":";AAmBA;;;;GAIG;AACH;IACE,mCAAmC;IAEnC,4BAA2B;IAE3B;;OAEG;IACH;;;;;;;MAkBE;IAEF;;;;;MAKE;IAEF,mEAeC;IAED,4FAWC;IAED,wBAmBC;IAgED,8BAOC;IAED,0BAKC;IAED,wBAQC;IAED,0BAMC;IA3GC,cAAoB;IACpB,iCAAqB;IACrB,uEAAwB;IA6B1B,kBAoCC;IAED,iBAIC;IAoCD,0BAkBC;IAED,mBAqDC;IAED,kBAMC;IAED,uBAOC;IAED,sBAKC;CAoEF;;;;;;;;;;;;;;;;;;;;;;;QAuBa,qCAAQ;;QACT,oCAAQ;;QACR,oCAAQ;;QACT,mCAAQ"}
1
+ {"version":3,"file":"IrisGridCopyHandler.d.ts","sourceRoot":"","sources":["../src/IrisGridCopyHandler.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQzC,OAAO,EACL,SAAS,EAET,YAAY,EACZ,aAAa,EACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EAGlB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,4BAA4B,CAAC;AACpC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAI5C,aAAK,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5B,aAAK,eAAe,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,aAAa,CAAC,CAAC;AAExE,oBAAY,aAAa,GAAG;IAC1B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,gBAAgB,EAAE,YAAY,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,UAAU,wBAAwB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,UAAU,wBAAwB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD;;;;GAIG;AACH,cAAM,mBAAoB,SAAQ,SAAS,CACzC,wBAAwB,EACxB,wBAAwB,CACzB;IACC,MAAM,CAAC,mBAAmB,SAAS;IAEnC,MAAM,CAAC,YAAY,SAAQ;IAE3B;;OAEG;IACH,MAAM,CAAC,WAAW;;;;;;;MAkBhB;IAEF,MAAM,CAAC,aAAa;;;;;MAKlB;IAEF,MAAM,CAAC,YAAY;;0BAED,IAAI;yBACL,IAAI;yBACJ,IAAI;wBACL,IAAI;MAClB;IAEF,MAAM,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAiBxE,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,eAAe,GAAG,MAAM;gBAalD,KAAK,EAAE,wBAAwB;IAiB3C,iBAAiB,IAAI,IAAI;IAOzB,kBAAkB,CAAC,SAAS,EAAE,wBAAwB,GAAG,IAAI;IAO7D,oBAAoB,IAAI,IAAI;IAI5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAE1C,YAAY,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAEzC,SAAS,IAAI,IAAI;IAsCjB,QAAQ,IAAI,IAAI;IAMhB,qBAAqB,IAAI,IAAI;IAS7B,iBAAiB,IAAI,IAAI;IAOzB,eAAe,IAAI,IAAI;IAUvB,iBAAiB,IAAI,IAAI;IAQzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAoB5B,UAAU,IAAI,IAAI;IAwDlB,SAAS,IAAI,IAAI;IAQjB,cAAc,IAAI,IAAI;IAStB,aAAa,IAAI,IAAI;IAOrB,MAAM,IAAI,GAAG,CAAC,OAAO;CAkEtB;AAED,eAAe,mBAAmB,CAAC"}
@@ -2,23 +2,21 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
2
2
 
3
3
  import React, { Component } from 'react';
4
4
  import classNames from 'classnames';
5
- import PropTypes from 'prop-types';
6
5
  import { CSSTransition } from 'react-transition-group';
7
6
  import { ContextActionUtils, LoadingSpinner, ThemeExport } from '@deephaven/components';
8
7
  import { GridRange, GridUtils } from '@deephaven/grid';
9
8
  import { CanceledPromiseError, PromiseUtils } from '@deephaven/utils';
10
9
  import Log from '@deephaven/log';
11
- import IrisGridModel from "./IrisGridModel.js";
12
10
  import IrisGridUtils from "./IrisGridUtils.js";
13
11
  import IrisGridBottomBar from "./IrisGridBottomBar.js";
14
12
  import "./IrisGridCopyHandler.css";
15
13
  var log = Log.module('IrisGridCopyHandler');
14
+
16
15
  /**
17
16
  * Component for handling copying of data from the Iris Grid.
18
17
  * - Prompts if necessary (large amount of rows copied)
19
18
  * - Tries to async copy, falls back to showing a "Click to Copy" button if that fails
20
19
  */
21
-
22
20
  class IrisGridCopyHandler extends Component {
23
21
  /**
24
22
  * Different states for the current copy operation
@@ -63,15 +61,19 @@ class IrisGridCopyHandler extends Component {
63
61
 
64
62
  constructor(props) {
65
63
  super(props);
64
+
65
+ _defineProperty(this, "textData", void 0);
66
+
67
+ _defineProperty(this, "hideTimer", void 0);
68
+
69
+ _defineProperty(this, "fetchPromise", void 0);
70
+
66
71
  this.handleBackgroundClick = this.handleBackgroundClick.bind(this);
67
72
  this.handleCancelClick = this.handleCancelClick.bind(this);
68
73
  this.handleCopyClick = this.handleCopyClick.bind(this);
69
74
  this.handleHideTimeout = this.handleHideTimeout.bind(this);
70
- this.textData = null;
71
- this.hideTimer = null;
72
- this.fetchPromise = null;
73
75
  this.state = {
74
- error: null,
76
+ error: undefined,
75
77
  copyState: IrisGridCopyHandler.COPY_STATES.IDLE,
76
78
  buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,
77
79
  isShown: false,
@@ -138,7 +140,7 @@ class IrisGridCopyHandler extends Component {
138
140
  this.setState({
139
141
  rowCount,
140
142
  isShown: true,
141
- error: null
143
+ error: undefined
142
144
  });
143
145
 
144
146
  if (rowCount > IrisGridCopyHandler.NO_PROMPT_THRESHOLD) {
@@ -152,7 +154,7 @@ class IrisGridCopyHandler extends Component {
152
154
  }
153
155
 
154
156
  stopCopy() {
155
- this.textData = null;
157
+ this.textData = undefined;
156
158
  this.stopFetch();
157
159
  this.stopHideTimer();
158
160
  }
@@ -243,14 +245,14 @@ class IrisGridCopyHandler extends Component {
243
245
  var formatValue = formatValues ? (value, column) => model.displayString(value, column.type, column.name) : value => "".concat(value);
244
246
  this.fetchPromise = PromiseUtils.makeCancelable(model.textSnapshot(modelRanges, includeHeaders, formatValue));
245
247
  this.fetchPromise.then(text => {
246
- this.fetchPromise = null;
248
+ this.fetchPromise = undefined;
247
249
  this.copyText(text);
248
250
  }).catch(error => {
249
251
  if (error instanceof CanceledPromiseError) {
250
252
  log.debug('User cancelled copy.');
251
253
  } else {
252
254
  log.error('Error fetching contents', error);
253
- this.fetchPromise = null;
255
+ this.fetchPromise = undefined;
254
256
  this.setState({
255
257
  buttonState: IrisGridCopyHandler.BUTTON_STATES.RETRY,
256
258
  copyState: IrisGridCopyHandler.COPY_STATES.FETCH_ERROR
@@ -263,7 +265,7 @@ class IrisGridCopyHandler extends Component {
263
265
  if (this.fetchPromise) {
264
266
  log.debug2('stopFetch');
265
267
  this.fetchPromise.cancel();
266
- this.fetchPromise = null;
268
+ this.fetchPromise = undefined;
267
269
  }
268
270
  }
269
271
 
@@ -275,7 +277,7 @@ class IrisGridCopyHandler extends Component {
275
277
  stopHideTimer() {
276
278
  if (this.hideTimer != null) {
277
279
  clearTimeout(this.hideTimer);
278
- this.hideTimer = null;
280
+ this.hideTimer = undefined;
279
281
  }
280
282
  }
281
283
 
@@ -364,31 +366,13 @@ _defineProperty(IrisGridCopyHandler, "BUTTON_STATES", {
364
366
  RETRY: 'RETRY'
365
367
  });
366
368
 
367
- IrisGridCopyHandler.propTypes = {
368
- model: PropTypes.instanceOf(IrisGridModel).isRequired,
369
- copyOperation: PropTypes.shape({
370
- // ranges are expected to be bounded ranges
371
- ranges: PropTypes.arrayOf(PropTypes.instanceOf(GridRange)).isRequired,
372
- movedColumns: PropTypes.arrayOf(PropTypes.shape({
373
- to: PropTypes.number,
374
- from: PropTypes.number
375
- })).isRequired,
376
- userColumnWidths: PropTypes.instanceOf(Map).isRequired,
377
- formatValues: PropTypes.bool,
378
- includeHeaders: PropTypes.bool,
379
- error: PropTypes.string
380
- }),
381
- onEntering: PropTypes.func,
382
- onEntered: PropTypes.func,
383
- onExiting: PropTypes.func,
384
- onExited: PropTypes.func
385
- };
386
- IrisGridCopyHandler.defaultProps = {
369
+ _defineProperty(IrisGridCopyHandler, "defaultProps", {
387
370
  copyOperation: null,
388
- onEntering: () => {},
389
- onEntered: () => {},
390
- onExiting: () => {},
391
- onExited: () => {}
392
- };
371
+ onEntering: () => undefined,
372
+ onEntered: () => undefined,
373
+ onExiting: () => undefined,
374
+ onExited: () => undefined
375
+ });
376
+
393
377
  export default IrisGridCopyHandler;
394
378
  //# sourceMappingURL=IrisGridCopyHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/IrisGridCopyHandler.jsx"],"names":["React","Component","classNames","PropTypes","CSSTransition","ContextActionUtils","LoadingSpinner","ThemeExport","GridRange","GridUtils","CanceledPromiseError","PromiseUtils","Log","IrisGridModel","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","textData","hideTimer","fetchPromise","state","error","IDLE","COPY","isShown","componentDidMount","copyOperation","startCopy","componentDidUpdate","prevProps","componentWillUnmount","stopCopy","debug2","setState","ranges","debug","startHideTimer","NO_PROMPT_THRESHOLD","startFetch","stopFetch","stopHideTimer","copyText","text","copyToClipboard","then","model","includeHeaders","userColumnWidths","movedColumns","formatValues","hiddenColumns","getHiddenColumns","modelRanges","getModelRanges","length","subtractRanges","map","makeColumn","subtractRangesFromRanges","formatValue","value","column","displayString","type","name","makeCancelable","textSnapshot","catch","cancel","setTimeout","HIDE_TIMEOUT","clearTimeout","render","onEntering","onEntered","onExiting","onExited","animation","copyButtonText","statusMessageText","isButtonContainerVisible","isFetching","isDone","transitionMs","propTypes","instanceOf","isRequired","shape","arrayOf","to","number","from","Map","bool","string","func","defaultProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { CSSTransition } from 'react-transition-group';\nimport {\n ContextActionUtils,\n LoadingSpinner,\n ThemeExport,\n} from '@deephaven/components';\nimport { GridRange, GridUtils } from '@deephaven/grid';\nimport { CanceledPromiseError, PromiseUtils } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport IrisGridModel from './IrisGridModel';\nimport IrisGridUtils from './IrisGridUtils';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './IrisGridCopyHandler.scss';\n\nconst log = Log.module('IrisGridCopyHandler');\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 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 getStatusMessageText(copyState, rowCount) {\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) {\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) {\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.textData = null;\n this.hideTimer = null;\n this.fetchPromise = null;\n\n this.state = {\n error: null,\n copyState: IrisGridCopyHandler.COPY_STATES.IDLE,\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n isShown: false,\n rowCount: 0,\n };\n }\n\n componentDidMount() {\n const { copyOperation } = this.props;\n if (copyOperation != null) {\n this.startCopy();\n }\n }\n\n componentDidUpdate(prevProps) {\n const { copyOperation } = this.props;\n if (prevProps.copyOperation !== copyOperation) {\n this.startCopy();\n }\n }\n\n componentWillUnmount() {\n this.stopCopy();\n }\n\n startCopy() {\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: null });\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() {\n this.textData = null;\n this.stopFetch();\n this.stopHideTimer();\n }\n\n handleBackgroundClick() {\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() {\n log.debug2('handleCancelClick');\n\n this.stopFetch();\n this.setState({ isShown: false });\n }\n\n handleCopyClick() {\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() {\n log.debug2('handleHideTimeout');\n\n this.stopHideTimer();\n\n this.setState({ isShown: false });\n }\n\n copyText(text) {\n log.debug2('copyText', text);\n\n this.textData = text;\n\n ContextActionUtils.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() {\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 = formatValues\n ? (value, column) => model.displayString(value, column.type, column.name)\n : value => `${value}`;\n\n this.fetchPromise = PromiseUtils.makeCancelable(\n model.textSnapshot(modelRanges, includeHeaders, formatValue)\n );\n this.fetchPromise\n .then(text => {\n this.fetchPromise = null;\n this.copyText(text);\n })\n .catch(error => {\n if (error instanceof CanceledPromiseError) {\n log.debug('User cancelled copy.');\n } else {\n log.error('Error fetching contents', error);\n this.fetchPromise = null;\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.RETRY,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_ERROR,\n });\n }\n });\n }\n\n stopFetch() {\n if (this.fetchPromise) {\n log.debug2('stopFetch');\n this.fetchPromise.cancel();\n this.fetchPromise = null;\n }\n }\n\n startHideTimer() {\n this.stopHideTimer();\n\n this.hideTimer = setTimeout(\n this.handleHideTimeout,\n IrisGridCopyHandler.HIDE_TIMEOUT\n );\n }\n\n stopHideTimer() {\n if (this.hideTimer != null) {\n clearTimeout(this.hideTimer);\n this.hideTimer = null;\n }\n }\n\n render() {\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 type=\"button\"\n className={classNames('btn', 'btn-copy', {\n 'btn-primary': !isFetching,\n 'btn-secondary': isFetching,\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\nIrisGridCopyHandler.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n copyOperation: PropTypes.shape({\n // ranges are expected to be bounded ranges\n ranges: PropTypes.arrayOf(PropTypes.instanceOf(GridRange)).isRequired,\n movedColumns: PropTypes.arrayOf(\n PropTypes.shape({ to: PropTypes.number, from: PropTypes.number })\n ).isRequired,\n userColumnWidths: PropTypes.instanceOf(Map).isRequired,\n formatValues: PropTypes.bool,\n includeHeaders: PropTypes.bool,\n error: PropTypes.string,\n }),\n onEntering: PropTypes.func,\n onEntered: PropTypes.func,\n onExiting: PropTypes.func,\n onExited: PropTypes.func,\n};\n\nIrisGridCopyHandler.defaultProps = {\n copyOperation: null,\n onEntering: () => {},\n onEntered: () => {},\n onExiting: () => {},\n onExited: () => {},\n};\n\nexport default IrisGridCopyHandler;\n"],"file":"IrisGridCopyHandler.js"}
1
+ {"version":3,"sources":["../src/IrisGridCopyHandler.tsx"],"names":["React","Component","classNames","CSSTransition","ContextActionUtils","LoadingSpinner","ThemeExport","GridRange","GridUtils","CanceledPromiseError","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","copyToClipboard","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"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport {\n ContextActionUtils,\n LoadingSpinner,\n ThemeExport,\n} from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n ModelSizeMap,\n MoveOperation,\n} from '@deephaven/grid';\nimport {\n CancelablePromise,\n CanceledPromiseError,\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 ContextActionUtils.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 = 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 type=\"button\"\n className={classNames('btn', 'btn-copy', {\n 'btn-primary': !isFetching,\n 'btn-secondary': isFetching,\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"],"file":"IrisGridCopyHandler.js"}
@@ -1,11 +1,11 @@
1
- import { GridMetricCalculator } from '@deephaven/grid';
2
- import type { VisibleIndex, GridMetricState, GridTheme } from '@deephaven/grid';
1
+ import { GridMetricCalculator, ModelSizeMap } from '@deephaven/grid';
2
+ import type { VisibleIndex, GridMetricState } from '@deephaven/grid';
3
3
  import type { FilterCondition, Sort } from '@deephaven/jsapi-shim';
4
4
  import type IrisGridModel from './IrisGridModel';
5
- import type IrisGridTheme from './IrisGridTheme';
5
+ import { IrisGridThemeType } from './IrisGridTheme';
6
6
  export interface IrisGridMetricState extends GridMetricState {
7
7
  model: IrisGridModel;
8
- theme: typeof IrisGridTheme & typeof GridTheme;
8
+ theme: IrisGridThemeType;
9
9
  isFilterBarShown: boolean;
10
10
  advancedFilters: Map<string, {
11
11
  options: unknown;
@@ -25,6 +25,7 @@ export interface IrisGridMetricState extends GridMetricState {
25
25
  declare class IrisGridMetricCalculator extends GridMetricCalculator {
26
26
  getVisibleColumnWidth(column: VisibleIndex, state: IrisGridMetricState, firstColumn?: VisibleIndex, treePaddingX?: number): number;
27
27
  getGridY(state: IrisGridMetricState): number;
28
+ getUserColumnWidths(): ModelSizeMap;
28
29
  }
29
30
  export default IrisGridMetricCalculator;
30
31
  //# sourceMappingURL=IrisGridMetricCalculator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridMetricCalculator.d.ts","sourceRoot":"","sources":["../src/IrisGridMetricCalculator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,OAAO,aAAa,GAAG,OAAO,SAAS,CAAC;IAC/C,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,GAAG,CAClB,MAAM,EACN;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAA;KAAE,CACrD,CAAC;IACF,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC5E,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAID;;;GAGG;AACH,cAAM,wBAAyB,SAAQ,oBAAoB;IACzD,qBAAqB,CACnB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,mBAAmB,EAC1B,WAAW,GAAE,YAAyC,EACtD,YAAY,SAAoC,GAC/C,MAAM;IAsBT,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM;CAwB7C;AAED,eAAe,wBAAwB,CAAC"}
1
+ {"version":3,"file":"IrisGridMetricCalculator.d.ts","sourceRoot":"","sources":["../src/IrisGridMetricCalculator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,iBAAiB,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,GAAG,CAClB,MAAM,EACN;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAA;KAAE,CACrD,CAAC;IACF,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC5E,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAID;;;GAGG;AACH,cAAM,wBAAyB,SAAQ,oBAAoB;IACzD,qBAAqB,CACnB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,mBAAmB,EAC1B,WAAW,GAAE,YAAyC,EACtD,YAAY,SAAoC,GAC/C,MAAM;IAsBT,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM;IA6B5C,mBAAmB,IAAI,YAAY;CAGpC;AAED,eAAe,wBAAwB,CAAC"}
@@ -48,13 +48,17 @@ class IrisGridMetricCalculator extends GridMetricCalculator {
48
48
  gridY += theme.filterBarCollapsedHeight;
49
49
  }
50
50
 
51
- if (reverseType !== TableUtils.REVERSE_TYPE.NONE && sorts.length > 0) {
51
+ if (reverseType !== TableUtils.REVERSE_TYPE.NONE && sorts && sorts.length > 0) {
52
52
  gridY += theme.reverseHeaderBarHeight;
53
53
  }
54
54
 
55
55
  return gridY;
56
56
  }
57
57
 
58
+ getUserColumnWidths() {
59
+ return this.userColumnWidths;
60
+ }
61
+
58
62
  }
59
63
 
60
64
  export default IrisGridMetricCalculator;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/IrisGridMetricCalculator.ts"],"names":["GridMetricCalculator","TableUtils","IrisGridMetricCalculator","getVisibleColumnWidth","column","state","firstColumn","getFirstColumn","treePaddingX","calculateTreePaddingX","model","hiddenColumns","layoutHints","modelColumn","getModelColumn","columnWidth","hasUserSetWidth","userColumnWidths","has","includes","columns","name","getGridY","gridY","isFilterBarShown","theme","advancedFilters","quickFilters","sorts","reverseType","filterBarHeight","size","filterBarCollapsedHeight","REVERSE_TYPE","NONE","length","reverseHeaderBarHeight"],"mappings":"AAAA,SAASA,oBAAT,QAAqC,iBAArC;AAGA,SAASC,UAAT,QAA2B,wBAA3B;;AAiBA;;AACA;;AACA;AACA;AACA;AACA;AACA,MAAMC,wBAAN,SAAuCF,oBAAvC,CAA4D;AAC1DG,EAAAA,qBAAqB,CACnBC,MADmB,EAEnBC,KAFmB,EAKX;AAAA;;AAAA,QAFRC,WAEQ,uEAFoB,KAAKC,cAAL,CAAoBF,KAApB,CAEpB;AAAA,QADRG,YACQ,uEADO,KAAKC,qBAAL,CAA2BJ,KAA3B,CACP;AACR,QAAM;AAAEK,MAAAA;AAAF,QAAYL,KAAlB;AACA,QAAMM,aAAa,kDAAGD,KAAK,CAACE,WAAT,uDAAG,mBAAmBD,aAAtB,yEAAuC,EAA1D;AACA,QAAME,WAAW,GAAG,KAAKC,cAAL,CAAoBV,MAApB,EAA4BC,KAA5B,CAApB,CAHQ,CAKR;;AACA,QAAMU,WAAW,GAAG,MAAMZ,qBAAN,CAClBC,MADkB,EAElBC,KAFkB,EAGlBC,WAHkB,EAIlBE,YAJkB,CAApB;AAMA,QAAMQ,eAAe,GAAG,KAAKC,gBAAL,CAAsBC,GAAtB,CAA0BL,WAA1B,CAAxB;;AACA,QACE,CAACG,eAAD,IACAL,aAAa,CAACQ,QAAd,CAAuBT,KAAK,CAACU,OAAN,CAAcP,WAAd,EAA2BQ,IAAlD,CAFF,EAGE;AACA,aAAO,CAAP;AACD;;AACD,WAAON,WAAP;AACD;;AAEDO,EAAAA,QAAQ,CAACjB,KAAD,EAAqC;AAC3C,QAAIkB,KAAK,GAAG,MAAMD,QAAN,CAAejB,KAAf,CAAZ;AACA,QAAM;AACJmB,MAAAA,gBADI;AAEJC,MAAAA,KAFI;AAGJC,MAAAA,eAHI;AAIJC,MAAAA,YAJI;AAKJC,MAAAA,KALI;AAMJC,MAAAA;AANI,QAOFxB,KAPJ;;AAQA,QAAImB,gBAAJ,EAAsB;AACpBD,MAAAA,KAAK,IAAIE,KAAK,CAACK,eAAf;AACD,KAFD,MAEO,IACJH,YAAY,IAAIA,YAAY,CAACI,IAAb,GAAoB,CAArC,IACCL,eAAe,IAAIA,eAAe,CAACK,IAAhB,GAAuB,CAFtC,EAGL;AACAR,MAAAA,KAAK,IAAIE,KAAK,CAACO,wBAAf;AACD;;AACD,QAAIH,WAAW,KAAK5B,UAAU,CAACgC,YAAX,CAAwBC,IAAxC,IAAgDN,KAAK,CAACO,MAAN,GAAe,CAAnE,EAAsE;AACpEZ,MAAAA,KAAK,IAAIE,KAAK,CAACW,sBAAf;AACD;;AAED,WAAOb,KAAP;AACD;;AAnDyD;;AAsD5D,eAAerB,wBAAf","sourcesContent":["import { GridMetricCalculator } from '@deephaven/grid';\nimport type { VisibleIndex, GridMetricState, GridTheme } from '@deephaven/grid';\nimport type { FilterCondition, Sort } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport type IrisGridModel from './IrisGridModel';\nimport type IrisGridTheme from './IrisGridTheme';\n\nexport interface IrisGridMetricState extends GridMetricState {\n model: IrisGridModel;\n theme: typeof IrisGridTheme & typeof GridTheme;\n isFilterBarShown: boolean;\n advancedFilters: Map<\n string,\n { options: unknown; filter: FilterCondition | null }\n >;\n quickFilters: Map<string, { text: string; filter: FilterCondition | null }>;\n sorts: Sort[];\n reverseType: string;\n}\n\n/* eslint class-methods-use-this: \"off\" */\n/* eslint react/destructuring-assignment: \"off\" */\n/**\n * Class to calculate all the metrics for a grid.\n * Call getMetrics() with the state to get metrics\n */\nclass IrisGridMetricCalculator extends GridMetricCalculator {\n getVisibleColumnWidth(\n column: VisibleIndex,\n state: IrisGridMetricState,\n firstColumn: VisibleIndex = this.getFirstColumn(state),\n treePaddingX = this.calculateTreePaddingX(state)\n ): number {\n const { model } = state;\n const hiddenColumns = model.layoutHints?.hiddenColumns ?? [];\n const modelColumn = this.getModelColumn(column, state);\n\n // Need to make sure super is called so column width is always re-calculated correctly\n const columnWidth = super.getVisibleColumnWidth(\n column,\n state,\n firstColumn,\n treePaddingX\n );\n const hasUserSetWidth = this.userColumnWidths.has(modelColumn);\n if (\n !hasUserSetWidth &&\n hiddenColumns.includes(model.columns[modelColumn].name)\n ) {\n return 0;\n }\n return columnWidth;\n }\n\n getGridY(state: IrisGridMetricState): number {\n let gridY = super.getGridY(state);\n const {\n isFilterBarShown,\n theme,\n advancedFilters,\n quickFilters,\n sorts,\n reverseType,\n } = state;\n if (isFilterBarShown) {\n gridY += theme.filterBarHeight;\n } else if (\n (quickFilters && quickFilters.size > 0) ||\n (advancedFilters && advancedFilters.size > 0)\n ) {\n gridY += theme.filterBarCollapsedHeight;\n }\n if (reverseType !== TableUtils.REVERSE_TYPE.NONE && sorts.length > 0) {\n gridY += theme.reverseHeaderBarHeight;\n }\n\n return gridY;\n }\n}\n\nexport default IrisGridMetricCalculator;\n"],"file":"IrisGridMetricCalculator.js"}
1
+ {"version":3,"sources":["../src/IrisGridMetricCalculator.ts"],"names":["GridMetricCalculator","TableUtils","IrisGridMetricCalculator","getVisibleColumnWidth","column","state","firstColumn","getFirstColumn","treePaddingX","calculateTreePaddingX","model","hiddenColumns","layoutHints","modelColumn","getModelColumn","columnWidth","hasUserSetWidth","userColumnWidths","has","includes","columns","name","getGridY","gridY","isFilterBarShown","theme","advancedFilters","quickFilters","sorts","reverseType","filterBarHeight","size","filterBarCollapsedHeight","REVERSE_TYPE","NONE","length","reverseHeaderBarHeight","getUserColumnWidths"],"mappings":"AAAA,SAASA,oBAAT,QAAmD,iBAAnD;AAGA,SAASC,UAAT,QAA2B,wBAA3B;;AAiBA;;AACA;;AACA;AACA;AACA;AACA;AACA,MAAMC,wBAAN,SAAuCF,oBAAvC,CAA4D;AAC1DG,EAAAA,qBAAqB,CACnBC,MADmB,EAEnBC,KAFmB,EAKX;AAAA;;AAAA,QAFRC,WAEQ,uEAFoB,KAAKC,cAAL,CAAoBF,KAApB,CAEpB;AAAA,QADRG,YACQ,uEADO,KAAKC,qBAAL,CAA2BJ,KAA3B,CACP;AACR,QAAM;AAAEK,MAAAA;AAAF,QAAYL,KAAlB;AACA,QAAMM,aAAa,kDAAGD,KAAK,CAACE,WAAT,uDAAG,mBAAmBD,aAAtB,yEAAuC,EAA1D;AACA,QAAME,WAAW,GAAG,KAAKC,cAAL,CAAoBV,MAApB,EAA4BC,KAA5B,CAApB,CAHQ,CAKR;;AACA,QAAMU,WAAW,GAAG,MAAMZ,qBAAN,CAClBC,MADkB,EAElBC,KAFkB,EAGlBC,WAHkB,EAIlBE,YAJkB,CAApB;AAMA,QAAMQ,eAAe,GAAG,KAAKC,gBAAL,CAAsBC,GAAtB,CAA0BL,WAA1B,CAAxB;;AACA,QACE,CAACG,eAAD,IACAL,aAAa,CAACQ,QAAd,CAAuBT,KAAK,CAACU,OAAN,CAAcP,WAAd,EAA2BQ,IAAlD,CAFF,EAGE;AACA,aAAO,CAAP;AACD;;AACD,WAAON,WAAP;AACD;;AAEDO,EAAAA,QAAQ,CAACjB,KAAD,EAAqC;AAC3C,QAAIkB,KAAK,GAAG,MAAMD,QAAN,CAAejB,KAAf,CAAZ;AACA,QAAM;AACJmB,MAAAA,gBADI;AAEJC,MAAAA,KAFI;AAGJC,MAAAA,eAHI;AAIJC,MAAAA,YAJI;AAKJC,MAAAA,KALI;AAMJC,MAAAA;AANI,QAOFxB,KAPJ;;AAQA,QAAImB,gBAAJ,EAAsB;AACpBD,MAAAA,KAAK,IAAIE,KAAK,CAACK,eAAf;AACD,KAFD,MAEO,IACJH,YAAY,IAAIA,YAAY,CAACI,IAAb,GAAoB,CAArC,IACCL,eAAe,IAAIA,eAAe,CAACK,IAAhB,GAAuB,CAFtC,EAGL;AACAR,MAAAA,KAAK,IAAIE,KAAK,CAACO,wBAAf;AACD;;AACD,QACEH,WAAW,KAAK5B,UAAU,CAACgC,YAAX,CAAwBC,IAAxC,IACAN,KADA,IAEAA,KAAK,CAACO,MAAN,GAAe,CAHjB,EAIE;AACAZ,MAAAA,KAAK,IAAIE,KAAK,CAACW,sBAAf;AACD;;AAED,WAAOb,KAAP;AACD;;AAEDc,EAAAA,mBAAmB,GAAiB;AAClC,WAAO,KAAKpB,gBAAZ;AACD;;AA3DyD;;AA8D5D,eAAef,wBAAf","sourcesContent":["import { GridMetricCalculator, ModelSizeMap } from '@deephaven/grid';\nimport type { VisibleIndex, GridMetricState } from '@deephaven/grid';\nimport type { FilterCondition, Sort } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport type IrisGridModel from './IrisGridModel';\nimport { IrisGridThemeType } from './IrisGridTheme';\n\nexport interface IrisGridMetricState extends GridMetricState {\n model: IrisGridModel;\n theme: IrisGridThemeType;\n isFilterBarShown: boolean;\n advancedFilters: Map<\n string,\n { options: unknown; filter: FilterCondition | null }\n >;\n quickFilters: Map<string, { text: string; filter: FilterCondition | null }>;\n sorts: Sort[];\n reverseType: string;\n}\n\n/* eslint class-methods-use-this: \"off\" */\n/* eslint react/destructuring-assignment: \"off\" */\n/**\n * Class to calculate all the metrics for a grid.\n * Call getMetrics() with the state to get metrics\n */\nclass IrisGridMetricCalculator extends GridMetricCalculator {\n getVisibleColumnWidth(\n column: VisibleIndex,\n state: IrisGridMetricState,\n firstColumn: VisibleIndex = this.getFirstColumn(state),\n treePaddingX = this.calculateTreePaddingX(state)\n ): number {\n const { model } = state;\n const hiddenColumns = model.layoutHints?.hiddenColumns ?? [];\n const modelColumn = this.getModelColumn(column, state);\n\n // Need to make sure super is called so column width is always re-calculated correctly\n const columnWidth = super.getVisibleColumnWidth(\n column,\n state,\n firstColumn,\n treePaddingX\n );\n const hasUserSetWidth = this.userColumnWidths.has(modelColumn);\n if (\n !hasUserSetWidth &&\n hiddenColumns.includes(model.columns[modelColumn].name)\n ) {\n return 0;\n }\n return columnWidth;\n }\n\n getGridY(state: IrisGridMetricState): number {\n let gridY = super.getGridY(state);\n const {\n isFilterBarShown,\n theme,\n advancedFilters,\n quickFilters,\n sorts,\n reverseType,\n } = state;\n if (isFilterBarShown) {\n gridY += theme.filterBarHeight;\n } else if (\n (quickFilters && quickFilters.size > 0) ||\n (advancedFilters && advancedFilters.size > 0)\n ) {\n gridY += theme.filterBarCollapsedHeight;\n }\n if (\n reverseType !== TableUtils.REVERSE_TYPE.NONE &&\n sorts &&\n sorts.length > 0\n ) {\n gridY += theme.reverseHeaderBarHeight;\n }\n\n return gridY;\n }\n\n getUserColumnWidths(): ModelSizeMap {\n return this.userColumnWidths;\n }\n}\n\nexport default IrisGridMetricCalculator;\n"],"file":"IrisGridMetricCalculator.js"}