@deephaven/iris-grid 0.13.3-beta.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) 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 +409 -453
  30. package/dist/IrisGrid.d.ts.map +1 -1
  31. package/dist/IrisGrid.js +514 -449
  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.map +1 -1
  36. package/dist/IrisGridCopyHandler.d.ts +52 -46
  37. package/dist/IrisGridCopyHandler.d.ts.map +1 -1
  38. package/dist/IrisGridCopyHandler.js +22 -38
  39. package/dist/IrisGridCopyHandler.js.map +1 -1
  40. package/dist/IrisGridMetricCalculator.d.ts +5 -4
  41. package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
  42. package/dist/IrisGridMetricCalculator.js +5 -1
  43. package/dist/IrisGridMetricCalculator.js.map +1 -1
  44. package/dist/IrisGridModel.d.ts +37 -35
  45. package/dist/IrisGridModel.d.ts.map +1 -1
  46. package/dist/IrisGridModel.js +19 -3
  47. package/dist/IrisGridModel.js.map +1 -1
  48. package/dist/IrisGridModelFactory.d.ts +7 -5
  49. package/dist/IrisGridModelFactory.d.ts.map +1 -1
  50. package/dist/IrisGridModelFactory.js +5 -5
  51. package/dist/IrisGridModelFactory.js.map +1 -1
  52. package/dist/IrisGridModelUpdater.d.ts +13 -11
  53. package/dist/IrisGridModelUpdater.d.ts.map +1 -1
  54. package/dist/IrisGridModelUpdater.js.map +1 -1
  55. package/dist/IrisGridPartitionSelector.d.ts +38 -39
  56. package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
  57. package/dist/IrisGridPartitionSelector.js +18 -24
  58. package/dist/IrisGridPartitionSelector.js.map +1 -1
  59. package/dist/IrisGridProxyModel.d.ts +111 -32
  60. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  61. package/dist/IrisGridProxyModel.js +212 -170
  62. package/dist/IrisGridProxyModel.js.map +1 -1
  63. package/dist/IrisGridRenderer.d.ts +59 -31
  64. package/dist/IrisGridRenderer.d.ts.map +1 -1
  65. package/dist/IrisGridRenderer.js +92 -46
  66. package/dist/IrisGridRenderer.js.map +1 -1
  67. package/dist/IrisGridTableModel.d.ts +48 -147
  68. package/dist/IrisGridTableModel.d.ts.map +1 -1
  69. package/dist/IrisGridTableModel.js +58 -1381
  70. package/dist/IrisGridTableModel.js.map +1 -1
  71. package/dist/IrisGridTableModelTemplate.d.ts +219 -0
  72. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -0
  73. package/dist/IrisGridTableModelTemplate.js +1623 -0
  74. package/dist/IrisGridTableModelTemplate.js.map +1 -0
  75. package/dist/IrisGridTestUtils.d.ts +18 -14
  76. package/dist/IrisGridTestUtils.d.ts.map +1 -1
  77. package/dist/IrisGridTestUtils.js +29 -1
  78. package/dist/IrisGridTestUtils.js.map +1 -1
  79. package/dist/IrisGridTheme.d.ts +35 -3
  80. package/dist/IrisGridTheme.d.ts.map +1 -1
  81. package/dist/IrisGridTheme.js.map +1 -1
  82. package/dist/IrisGridTreeTableModel.d.ts +26 -7
  83. package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
  84. package/dist/IrisGridTreeTableModel.js +24 -14
  85. package/dist/IrisGridTreeTableModel.js.map +1 -1
  86. package/dist/IrisGridUtils.d.ts +257 -162
  87. package/dist/IrisGridUtils.d.ts.map +1 -1
  88. package/dist/IrisGridUtils.js +132 -95
  89. package/dist/IrisGridUtils.js.map +1 -1
  90. package/dist/MissingKeyError.d.ts +5 -3
  91. package/dist/MissingKeyError.d.ts.map +1 -1
  92. package/dist/MissingKeyError.js.map +1 -1
  93. package/dist/PartitionSelectorSearch.d.ts +61 -40
  94. package/dist/PartitionSelectorSearch.d.ts.map +1 -1
  95. package/dist/PartitionSelectorSearch.js +25 -15
  96. package/dist/PartitionSelectorSearch.js.map +1 -1
  97. package/dist/PendingDataBottomBar.d.ts +3 -6
  98. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  99. package/dist/PendingDataBottomBar.js.map +1 -1
  100. package/dist/TableViewportUpdater.d.ts +39 -55
  101. package/dist/TableViewportUpdater.d.ts.map +1 -1
  102. package/dist/TableViewportUpdater.js +42 -64
  103. package/dist/TableViewportUpdater.js.map +1 -1
  104. package/dist/TreeTableViewportUpdater.d.ts +29 -37
  105. package/dist/TreeTableViewportUpdater.d.ts.map +1 -1
  106. package/dist/TreeTableViewportUpdater.js +39 -50
  107. package/dist/TreeTableViewportUpdater.js.map +1 -1
  108. package/dist/index.d.ts +9 -0
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +9 -0
  111. package/dist/index.js.map +1 -1
  112. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.d.ts.map +1 -1
  113. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  114. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts +1 -1
  115. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts.map +1 -1
  116. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +2 -0
  117. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  118. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +1 -1
  119. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  120. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +41 -130
  121. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
  122. package/dist/mousehandlers/IrisGridContextMenuHandler.js +426 -317
  123. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  124. package/dist/mousehandlers/IrisGridFilterMouseHandler.d.ts.map +1 -1
  125. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +2 -2
  126. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  127. package/dist/mousehandlers/IrisGridSortMouseHandler.js +1 -1
  128. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  129. package/dist/mousehandlers/PendingMouseHandler.d.ts +8 -4
  130. package/dist/mousehandlers/PendingMouseHandler.d.ts.map +1 -1
  131. package/dist/mousehandlers/PendingMouseHandler.js +4 -5
  132. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  133. package/dist/sidebar/ChartBuilder.d.ts +48 -33
  134. package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
  135. package/dist/sidebar/ChartBuilder.js +28 -27
  136. package/dist/sidebar/ChartBuilder.js.map +1 -1
  137. package/dist/sidebar/CustomColumnBuilder.d.ts +51 -41
  138. package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
  139. package/dist/sidebar/CustomColumnBuilder.js +22 -18
  140. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  141. package/dist/sidebar/CustomColumnInput.d.ts +26 -36
  142. package/dist/sidebar/CustomColumnInput.d.ts.map +1 -1
  143. package/dist/sidebar/CustomColumnInput.js +11 -20
  144. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  145. package/dist/sidebar/InputEditor.d.ts +34 -35
  146. package/dist/sidebar/InputEditor.d.ts.map +1 -1
  147. package/dist/sidebar/InputEditor.js +43 -24
  148. package/dist/sidebar/InputEditor.js.map +1 -1
  149. package/dist/sidebar/RollupRows.d.ts +67 -52
  150. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  151. package/dist/sidebar/RollupRows.js +51 -53
  152. package/dist/sidebar/RollupRows.js.map +1 -1
  153. package/dist/sidebar/SelectDistinctBuilder.d.ts +27 -21
  154. package/dist/sidebar/SelectDistinctBuilder.d.ts.map +1 -1
  155. package/dist/sidebar/SelectDistinctBuilder.js +6 -10
  156. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  157. package/dist/sidebar/TableCsvExporter.d.ts +42 -39
  158. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  159. package/dist/sidebar/TableCsvExporter.js +12 -20
  160. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  161. package/dist/sidebar/TableSaver.d.ts +59 -60
  162. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  163. package/dist/sidebar/TableSaver.js +154 -68
  164. package/dist/sidebar/TableSaver.js.map +1 -1
  165. package/dist/sidebar/VisibilityOrderingBuilder.d.ts +56 -45
  166. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
  167. package/dist/sidebar/VisibilityOrderingBuilder.js +34 -29
  168. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  169. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  170. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  171. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +2 -1
  172. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  173. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  174. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +6 -5
  175. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  176. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +5 -0
  177. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  178. package/dist/sidebar/icons/index.d.ts +7 -7
  179. package/dist/sidebar/icons/index.d.ts.map +1 -1
  180. package/dist/sidebar/icons/index.js.map +1 -1
  181. package/dist/sidebar/index.d.ts +12 -12
  182. package/dist/sidebar/index.d.ts.map +1 -1
  183. package/dist/sidebar/index.js.map +1 -1
  184. package/package.json +17 -16
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/sidebar/CustomColumnBuilder.jsx"],"names":["React","Component","classNames","PropTypes","shortid","memoize","DragDropContext","Droppable","FontAwesomeIcon","DragUtils","LoadingSpinner","dhNewCircleLargeFilled","vsWarning","vsPass","CustomColumnInput","IrisGridModel","CustomColumnBuilder","makeCustomColumnInputEventKey","generate","createCustomColumnInput","eventKey","name","formula","constructor","props","inputs","key","find","input","findIndex","handleAddColumnClick","bind","handleSaveClick","handleInputChange","handleDeleteColumn","handleCustomColumnUpdated","handleRequestFailed","handleDragEnd","resetRequestFailed","handleEditorTabNavigation","state","isCustomColumnApplying","errorMessage","hasRequestFailed","isSuccessShowing","container","successButtonTimer","componentDidMount","customColumns","parseCustomColumns","startListening","componentWillUnmount","stopListening","messageTimer","clearTimeout","resetErrorMessage","setState","model","addEventListener","EVENT","COLUMNS_CHANGED","UPDATED","REQUEST_FAILED","removeEventListener","length","customColumnInputs","map","customColumn","split","newInputs","push","customColumnIndex","getInputIndex","splice","type","value","customColumnInput","getInput","newCustomInput","setTimeout","SUCCESS_SHOW_DURATION","event","detail","JSON","stringify","configuration","result","stopDragging","destination","sourceIndex","source","index","destinationIndex","sourceInput","focusEditorIndex","shiftKey","querySelectorAll","focus","querySelector","nextFocusIndex","onSave","forEach","renderInputs","renderSaveButton","saveText","render","onCancel","startDragging","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder","propTypes","instanceOf","isRequired","arrayOf","string","func","defaultProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { DragDropContext, Droppable } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DragUtils, LoadingSpinner } from '@deephaven/components';\nimport { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';\nimport CustomColumnInput from './CustomColumnInput';\nimport './CustomColumnBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nclass CustomColumnBuilder extends Component {\n static SUCCESS_SHOW_DURATION = 750;\n\n static makeCustomColumnInputEventKey() {\n return shortid.generate();\n }\n\n static createCustomColumnInput() {\n return {\n eventKey: shortid.generate(),\n name: '',\n formula: '',\n };\n }\n\n constructor(props) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleSaveClick = this.handleSaveClick.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleCustomColumnUpdated = this.handleCustomColumnUpdated.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.resetRequestFailed = this.resetRequestFailed.bind(this);\n\n this.handleEditorTabNavigation = this.handleEditorTabNavigation.bind(this);\n\n this.state = {\n inputs: [],\n isCustomColumnApplying: false,\n errorMessage: null,\n hasRequestFailed: false,\n isSuccessShowing: false,\n };\n this.container = null;\n this.successButtonTimer = null;\n }\n\n componentDidMount() {\n const { customColumns } = this.props;\n this.parseCustomColumns(customColumns);\n this.startListening();\n }\n\n componentWillUnmount() {\n this.stopListening();\n if (this.messageTimer) {\n clearTimeout(this.messageTimer);\n }\n if (this.successButtonTimer) {\n clearTimeout(this.successButtonTimer);\n }\n }\n\n getInput = memoize((inputs, key) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs, key) =>\n inputs.findIndex(input => input.eventKey === key)\n );\n\n resetErrorMessage() {\n this.setState({ errorMessage: null });\n }\n\n startListening() {\n const { model } = this.props;\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListening() {\n const { model } = this.props;\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n parseCustomColumns(customColumns) {\n if (customColumns.length > 0) {\n const customColumnInputs = customColumns.map(customColumn => {\n const input = customColumn.split(/=(.+)/, 2);\n return {\n eventKey: CustomColumnBuilder.makeCustomColumnInputEventKey(),\n name: input[0],\n formula: input[1],\n };\n });\n this.setState({ inputs: customColumnInputs });\n } else {\n this.setState({\n inputs: [CustomColumnBuilder.createCustomColumnInput()],\n });\n }\n }\n\n handleAddColumnClick() {\n const { inputs } = this.state;\n const newInputs = [...inputs];\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleDeleteColumn(eventKey) {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1);\n if (newInputs.length === 0) {\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n }\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleInputChange(eventKey, type, value) {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const customColumnInput = this.getInput(inputs, eventKey);\n\n const newCustomInput = { ...customColumnInput };\n newCustomInput[type] = value;\n\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1, newCustomInput);\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleCustomColumnUpdated() {\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n this.setState(\n { isCustomColumnApplying: false, isSuccessShowing: true },\n () => {\n this.successButtonTimer = setTimeout(\n () => this.setState({ isSuccessShowing: false }),\n CustomColumnBuilder.SUCCESS_SHOW_DURATION\n );\n }\n );\n }\n\n handleRequestFailed(event) {\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n\n this.setState({\n isCustomColumnApplying: false,\n errorMessage: (\n <>\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Failed to apply custom columns.\n </p>\n <div className=\"error-box\">\n {event.detail.errorMessage}\n <br />\n Table configuration: {JSON.stringify(event.detail.configuration)}\n </div>\n </>\n ),\n hasRequestFailed: true,\n });\n }\n\n handleDragEnd(result) {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (!result.destination) {\n return;\n }\n const { inputs } = this.state;\n const sourceIndex = result.source.index;\n const destinationIndex = result.destination.index;\n const newInputs = [...inputs];\n const sourceInput = inputs[sourceIndex];\n\n newInputs.splice(sourceIndex, 1);\n newInputs.splice(destinationIndex, 0, sourceInput);\n\n this.setState({ inputs: newInputs });\n }\n\n handleEditorTabNavigation(focusEditorIndex, shiftKey) {\n const { inputs } = this.state;\n // focus on drag handle\n if (shiftKey) {\n this.container\n .querySelectorAll(`.btn-drag-handle`) // eslint-disable-next-line no-unexpected-multiline\n [focusEditorIndex].focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n // focus on add another column button\n this.container.querySelector('.btn-add-column').focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n this.container\n .querySelectorAll('.custom-column-input') // eslint-disable-next-line no-unexpected-multiline\n [nextFocusIndex].focus();\n }\n }\n\n handleSaveClick() {\n const { onSave } = this.props;\n const { inputs, isCustomColumnApplying } = this.state;\n if (isCustomColumnApplying) {\n return;\n }\n const customColumns = [];\n inputs.forEach(input => {\n const { name, formula } = input;\n if (name && formula) {\n customColumns.push(`${name}=${formula}`);\n }\n });\n this.resetErrorMessage();\n this.setState({ isCustomColumnApplying: true });\n onSave(customColumns);\n }\n\n resetRequestFailed() {\n this.setState(({ hasRequestFailed }) => {\n if (hasRequestFailed) {\n return { hasRequestFailed: false };\n }\n return null;\n });\n }\n\n renderInputs() {\n const { inputs, hasRequestFailed } = this.state;\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n return (\n <CustomColumnInput\n key={eventKey}\n inputIndex={index}\n eventKey={eventKey}\n name={name}\n formula={formula}\n onChange={this.handleInputChange}\n onDeleteColumn={this.handleDeleteColumn}\n onTabInEditor={this.handleEditorTabNavigation}\n invalid={hasRequestFailed}\n />\n );\n });\n }\n\n renderSaveButton() {\n const { inputs, isCustomColumnApplying, isSuccessShowing } = this.state;\n const saveText = inputs.length > 1 ? 'Save Columns' : 'Save Column';\n\n return (\n <button\n type=\"button\"\n className={classNames(\n 'btn btn-apply',\n {\n 'btn-spinner': isCustomColumnApplying,\n },\n isSuccessShowing ? 'btn-success' : 'btn-primary'\n )}\n disabled={isSuccessShowing || isCustomColumnApplying}\n onClick={this.handleSaveClick}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-content\">Applying</span>\n <span className=\"btn-hover-content\">Applying</span>\n </span>\n )}\n {!isSuccessShowing && !isCustomColumnApplying && saveText}\n {isSuccessShowing && (\n <>\n <FontAwesomeIcon icon={vsPass} /> Success\n </>\n )}\n </button>\n );\n }\n\n render() {\n const { onCancel } = this.props;\n const { errorMessage } = this.state;\n return (\n <div\n role=\"presentation\"\n className=\"custom-column-builder-container\"\n ref={container => {\n this.container = container;\n }}\n onClick={this.resetRequestFailed}\n onFocus={this.resetRequestFailed}\n >\n <div className=\"section-title\">Custom Column Name and Formula</div>\n <hr />\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={this.handleDragEnd}\n >\n <Droppable droppableId=\"droppable-custom-columns\">\n {(provided, snapshot) => (\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n className={classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith,\n })}\n >\n {this.renderInputs()}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n <div className=\"pt-1 px-3\">\n <button\n type=\"button\"\n className=\"btn btn-link btn-add-column\"\n onClick={this.handleAddColumnClick}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Another Column\n </button>\n </div>\n\n <div className=\"custom-column-builder-footer\">\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\n\n <div className=\"d-flex justify-content-end\">\n <button\n type=\"button\"\n className=\"btn btn-outline-primary mr-2\"\n onClick={onCancel}\n >\n Cancel\n </button>\n {this.renderSaveButton()}\n </div>\n </div>\n </div>\n );\n }\n}\n\nCustomColumnBuilder.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n customColumns: PropTypes.arrayOf(PropTypes.string),\n onSave: PropTypes.func,\n onCancel: PropTypes.func,\n};\n\nCustomColumnBuilder.defaultProps = {\n customColumns: [],\n onSave: () => {},\n onCancel: () => {},\n};\n\nexport default CustomColumnBuilder;\n"],"file":"CustomColumnBuilder.js"}
1
+ {"version":3,"sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"names":["React","Component","classNames","shortid","memoize","DragDropContext","Droppable","FontAwesomeIcon","DragUtils","LoadingSpinner","dhNewCircleLargeFilled","vsWarning","vsPass","CustomColumnInput","IrisGridModel","CustomColumnBuilder","makeCustomColumnInputEventKey","generate","createCustomColumnInput","eventKey","name","formula","constructor","props","inputs","key","find","input","findIndex","handleAddColumnClick","bind","handleSaveClick","handleInputChange","handleDeleteColumn","handleCustomColumnUpdated","handleRequestFailed","handleDragEnd","resetRequestFailed","handleEditorTabNavigation","state","isCustomColumnApplying","errorMessage","hasRequestFailed","isSuccessShowing","container","successButtonTimer","componentDidMount","customColumns","parseCustomColumns","startListening","componentWillUnmount","stopListening","messageTimer","clearTimeout","resetErrorMessage","setState","model","addEventListener","EVENT","COLUMNS_CHANGED","UPDATED","REQUEST_FAILED","removeEventListener","length","customColumnInputs","map","customColumn","split","newInputs","push","customColumnIndex","getInputIndex","splice","type","value","customColumnInput","getInput","newCustomInput","setTimeout","SUCCESS_SHOW_DURATION","event","customEvent","detail","JSON","stringify","configuration","result","stopDragging","destination","sourceIndex","source","index","destinationIndex","sourceInput","focusEditorIndex","shiftKey","querySelectorAll","focus","nextFocusIndex","onSave","forEach","renderInputs","renderSaveButton","saveText","render","onCancel","startDragging","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder","undefined"],"mappings":";;;;;;;;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAA+C,OAA/C;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,OAAP,MAAoB,SAApB;AACA,OAAOC,OAAP,MAAoB,aAApB;AACA,SAASC,eAAT,EAA0BC,SAA1B,QAAuD,qBAAvD;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,SAAT,EAAoBC,cAApB,QAA0C,uBAA1C;AACA,SAASC,sBAAT,EAAiCC,SAAjC,EAA4CC,MAA5C,QAA0D,kBAA1D;OACOC,iB;;OAEAC,a;;AAuBP,MAAMC,mBAAN,SAAkCd,SAAlC,CAGE;AASoC,SAA7Be,6BAA6B,GAAW;AAC7C,WAAOb,OAAO,CAACc,QAAR,EAAP;AACD;;AAE6B,SAAvBC,uBAAuB,GAAU;AACtC,WAAO;AACLC,MAAAA,QAAQ,EAAEhB,OAAO,CAACc,QAAR,EADL;AAELG,MAAAA,IAAI,EAAE,EAFD;AAGLC,MAAAA,OAAO,EAAE;AAHJ,KAAP;AAKD;;AAEDC,EAAAA,WAAW,CAACC,KAAD,EAAkC;AAC3C,UAAMA,KAAN;;AAD2C;;AAAA;;AAAA;;AAAA,sCA+ClCnB,OAAO,CAAC,CAACoB,MAAD,EAAkBC,GAAlB,KACjBD,MAAM,CAACE,IAAP,CAAYC,KAAK,IAAIA,KAAK,CAACR,QAAN,KAAmBM,GAAxC,CADgB,CA/C2B;;AAAA,2CAmD7BrB,OAAO,CAAC,CAACoB,MAAD,EAAkBC,GAAlB,KACtBD,MAAM,CAACI,SAAP,CAAiBD,KAAK,IAAIA,KAAK,CAACR,QAAN,KAAmBM,GAA7C,CADqB,CAnDsB;;AAG3C,SAAKI,oBAAL,GAA4B,KAAKA,oBAAL,CAA0BC,IAA1B,CAA+B,IAA/B,CAA5B;AACA,SAAKC,eAAL,GAAuB,KAAKA,eAAL,CAAqBD,IAArB,CAA0B,IAA1B,CAAvB;AACA,SAAKE,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBF,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKG,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBH,IAAxB,CAA6B,IAA7B,CAA1B;AACA,SAAKI,yBAAL,GAAiC,KAAKA,yBAAL,CAA+BJ,IAA/B,CAAoC,IAApC,CAAjC;AACA,SAAKK,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBL,IAAzB,CAA8B,IAA9B,CAA3B;AACA,SAAKM,aAAL,GAAqB,KAAKA,aAAL,CAAmBN,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAKO,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBP,IAAxB,CAA6B,IAA7B,CAA1B;AAEA,SAAKQ,yBAAL,GAAiC,KAAKA,yBAAL,CAA+BR,IAA/B,CAAoC,IAApC,CAAjC;AAEA,SAAKS,KAAL,GAAa;AACXf,MAAAA,MAAM,EAAE,EADG;AAEXgB,MAAAA,sBAAsB,EAAE,KAFb;AAGXC,MAAAA,YAAY,EAAE,IAHH;AAIXC,MAAAA,gBAAgB,EAAE,KAJP;AAKXC,MAAAA,gBAAgB,EAAE;AALP,KAAb;AAOA,SAAKC,SAAL,GAAiB,IAAjB;AACA,SAAKC,kBAAL,GAA0B,IAA1B;AACD;;AAEDC,EAAAA,iBAAiB,GAAS;AACxB,QAAM;AAAEC,MAAAA;AAAF,QAAoB,KAAKxB,KAA/B;AACA,SAAKyB,kBAAL,CAAwBD,aAAxB;AACA,SAAKE,cAAL;AACD;;AAEDC,EAAAA,oBAAoB,GAAS;AAC3B,SAAKC,aAAL;;AACA,QAAI,KAAKC,YAAT,EAAuB;AACrBC,MAAAA,YAAY,CAAC,KAAKD,YAAN,CAAZ;AACD;;AACD,QAAI,KAAKP,kBAAT,EAA6B;AAC3BQ,MAAAA,YAAY,CAAC,KAAKR,kBAAN,CAAZ;AACD;AACF;;AAgBDS,EAAAA,iBAAiB,GAAS;AACxB,SAAKC,QAAL,CAAc;AAAEd,MAAAA,YAAY,EAAE;AAAhB,KAAd;AACD;;AAEDQ,EAAAA,cAAc,GAAS;AACrB,QAAM;AAAEO,MAAAA;AAAF,QAAY,KAAKjC,KAAvB;AACAiC,IAAAA,KAAK,CAACC,gBAAN,CACE3C,aAAa,CAAC4C,KAAd,CAAoBC,eADtB,EAEE,KAAKzB,yBAFP;AAIAsB,IAAAA,KAAK,CAACC,gBAAN,CACE3C,aAAa,CAAC4C,KAAd,CAAoBE,OADtB,EAEE,KAAK1B,yBAFP;AAIAsB,IAAAA,KAAK,CAACC,gBAAN,CACE3C,aAAa,CAAC4C,KAAd,CAAoBG,cADtB,EAEE,KAAK1B,mBAFP;AAID;;AAEDgB,EAAAA,aAAa,GAAS;AACpB,QAAM;AAAEK,MAAAA;AAAF,QAAY,KAAKjC,KAAvB;AACAiC,IAAAA,KAAK,CAACM,mBAAN,CACEhD,aAAa,CAAC4C,KAAd,CAAoBC,eADtB,EAEE,KAAKzB,yBAFP;AAIAsB,IAAAA,KAAK,CAACM,mBAAN,CACEhD,aAAa,CAAC4C,KAAd,CAAoBE,OADtB,EAEE,KAAK1B,yBAFP;AAIAsB,IAAAA,KAAK,CAACM,mBAAN,CACEhD,aAAa,CAAC4C,KAAd,CAAoBG,cADtB,EAEE,KAAK1B,mBAFP;AAID;;AAEDa,EAAAA,kBAAkB,CAACD,aAAD,EAAgC;AAChD,QAAIA,aAAa,CAACgB,MAAd,GAAuB,CAA3B,EAA8B;AAC5B,UAAMC,kBAAkB,GAAGjB,aAAa,CAACkB,GAAd,CAAkBC,YAAY,IAAI;AAC3D,YAAMvC,KAAK,GAAGuC,YAAY,CAACC,KAAb,CAAmB,OAAnB,EAA4B,CAA5B,CAAd;AACA,eAAO;AACLhD,UAAAA,QAAQ,EAAEJ,mBAAmB,CAACC,6BAApB,EADL;AAELI,UAAAA,IAAI,EAAEO,KAAK,CAAC,CAAD,CAFN;AAGLN,UAAAA,OAAO,EAAEM,KAAK,CAAC,CAAD;AAHT,SAAP;AAKD,OAP0B,CAA3B;AAQA,WAAK4B,QAAL,CAAc;AAAE/B,QAAAA,MAAM,EAAEwC;AAAV,OAAd;AACD,KAVD,MAUO;AACL,WAAKT,QAAL,CAAc;AACZ/B,QAAAA,MAAM,EAAE,CAACT,mBAAmB,CAACG,uBAApB,EAAD;AADI,OAAd;AAGD;AACF;;AAEDW,EAAAA,oBAAoB,GAAS;AAC3B,QAAM;AAAEL,MAAAA;AAAF,QAAa,KAAKe,KAAxB;AACA,QAAM6B,SAAS,GAAG,CAAC,GAAG5C,MAAJ,CAAlB;AACA4C,IAAAA,SAAS,CAACC,IAAV,CAAetD,mBAAmB,CAACG,uBAApB,EAAf;AACA,SAAKqC,QAAL,CAAc;AACZ/B,MAAAA,MAAM,EAAE4C;AADI,KAAd;AAGD;;AAEDnC,EAAAA,kBAAkB,CAACd,QAAD,EAAyB;AACzC,QAAM;AAAEK,MAAAA;AAAF,QAAa,KAAKe,KAAxB;AACA,QAAM+B,iBAAiB,GAAG,KAAKC,aAAL,CAAmB/C,MAAnB,EAA2BL,QAA3B,CAA1B;AACA,QAAMiD,SAAS,GAAG,CAAC,GAAG5C,MAAJ,CAAlB;AACA4C,IAAAA,SAAS,CAACI,MAAV,CAAiBF,iBAAjB,EAAoC,CAApC;;AACA,QAAIF,SAAS,CAACL,MAAV,KAAqB,CAAzB,EAA4B;AAC1BK,MAAAA,SAAS,CAACC,IAAV,CAAetD,mBAAmB,CAACG,uBAApB,EAAf;AACD;;AACD,SAAKqC,QAAL,CAAc;AACZ/B,MAAAA,MAAM,EAAE4C;AADI,KAAd;AAGD;;AAEDpC,EAAAA,iBAAiB,CACfb,QADe,EAEfsD,IAFe,EAGfC,KAHe,EAIT;AACN,QAAM;AAAElD,MAAAA;AAAF,QAAa,KAAKe,KAAxB;AACA,QAAM+B,iBAAiB,GAAG,KAAKC,aAAL,CAAmB/C,MAAnB,EAA2BL,QAA3B,CAA1B;AACA,QAAMwD,iBAAiB,GAAG,KAAKC,QAAL,CAAcpD,MAAd,EAAsBL,QAAtB,CAA1B;;AAEA,QAAM0D,cAAc,qBAAQF,iBAAR,CAApB;;AACAE,IAAAA,cAAc,CAACJ,IAAD,CAAd,GAAuBC,KAAvB;AAEA,QAAMN,SAAS,GAAG,CAAC,GAAG5C,MAAJ,CAAlB;AACA4C,IAAAA,SAAS,CAACI,MAAV,CAAiBF,iBAAjB,EAAoC,CAApC,EAAuCO,cAAvC;AACA,SAAKtB,QAAL,CAAc;AACZ/B,MAAAA,MAAM,EAAE4C;AADI,KAAd;AAGD;;AAEDlC,EAAAA,yBAAyB,GAAS;AAChC,QAAM;AAAEM,MAAAA;AAAF,QAA6B,KAAKD,KAAxC;;AACA,QAAI,CAACC,sBAAL,EAA6B;AAC3B;AACD;;AACD,SAAKe,QAAL,CACE;AAAEf,MAAAA,sBAAsB,EAAE,KAA1B;AAAiCG,MAAAA,gBAAgB,EAAE;AAAnD,KADF,EAEE,MAAM;AACJ,WAAKE,kBAAL,GAA0BiC,UAAU,CAClC,MAAM,KAAKvB,QAAL,CAAc;AAAEZ,QAAAA,gBAAgB,EAAE;AAApB,OAAd,CAD4B,EAElC5B,mBAAmB,CAACgE,qBAFc,CAApC;AAID,KAPH;AASD;;AAED5C,EAAAA,mBAAmB,CAAC6C,KAAD,EAAqB;AACtC,QAAMC,WAAW,GAAGD,KAApB;AACA,QAAM;AAAExC,MAAAA;AAAF,QAA6B,KAAKD,KAAxC;;AACA,QAAI,CAACC,sBAAL,EAA6B;AAC3B;AACD;;AAED,SAAKe,QAAL,CAAc;AACZf,MAAAA,sBAAsB,EAAE,KADZ;AAEZC,MAAAA,YAAY,eACV,uDACE,4CACE,oBAAC,eAAD;AAAiB,QAAA,IAAI,EAAE9B;AAAvB,QADF,qCADF,eAIE;AAAK,QAAA,SAAS,EAAC;AAAf,SACGsE,WAAW,CAACC,MAAZ,CAAmBzC,YADtB,eAEE,+BAFF,0BAGuB,GAHvB,EAIG0C,IAAI,CAACC,SAAL,CAAeH,WAAW,CAACC,MAAZ,CAAmBG,aAAlC,CAJH,CAJF,CAHU;AAeZ3C,MAAAA,gBAAgB,EAAE;AAfN,KAAd;AAiBD;;AAEDN,EAAAA,aAAa,CAACkD,MAAD,EAA2B;AACtC9E,IAAAA,SAAS,CAAC+E,YAAV,GADsC,CAGtC;;AACA,QAAI,CAACD,MAAM,CAACE,WAAZ,EAAyB;AACvB;AACD;;AACD,QAAM;AAAEhE,MAAAA;AAAF,QAAa,KAAKe,KAAxB;AACA,QAAMkD,WAAW,GAAGH,MAAM,CAACI,MAAP,CAAcC,KAAlC;AACA,QAAMC,gBAAgB,GAAGN,MAAM,CAACE,WAAP,CAAmBG,KAA5C;AACA,QAAMvB,SAAS,GAAG,CAAC,GAAG5C,MAAJ,CAAlB;AACA,QAAMqE,WAAW,GAAGrE,MAAM,CAACiE,WAAD,CAA1B;AAEArB,IAAAA,SAAS,CAACI,MAAV,CAAiBiB,WAAjB,EAA8B,CAA9B;AACArB,IAAAA,SAAS,CAACI,MAAV,CAAiBoB,gBAAjB,EAAmC,CAAnC,EAAsCC,WAAtC;AAEA,SAAKtC,QAAL,CAAc;AAAE/B,MAAAA,MAAM,EAAE4C;AAAV,KAAd;AACD;;AAED9B,EAAAA,yBAAyB,CAACwD,gBAAD,EAA2BC,QAA3B,EAAoD;AAC3E,QAAM;AAAEvE,MAAAA;AAAF,QAAa,KAAKe,KAAxB,CAD2E,CAE3E;;AACA,QAAIwD,QAAJ,EAAc;AAAA;;AACZ,0BAAC,KAAKnD,SAAN,oDAAC,gBAAgBoD,gBAAhB,qBACCF,gBADD,CAAD,EAEwBG,KAFxB;AAGA;AACD;;AACD,QAAIH,gBAAgB,KAAKtE,MAAM,CAACuC,MAAP,GAAgB,CAAzC,EAA4C;AAAA;;AAC1C,2BAAC,KAAKnB,SAAN,qDAAC,iBAAgBoD,gBAAhB,oBACCF,gBADD,CAAD,EAEwBG,KAFxB;AAGD,KAJD,MAIO;AAAA;;AACL;AACA,UAAMC,cAAc,GAAGJ,gBAAgB,GAAG,CAA1C;AACA,2BAAC,KAAKlD,SAAN,qDAAC,iBAAgBoD,gBAAhB,yBACCE,cADD,CAAD,EAEuBD,KAFvB;AAGD;AACF;;AAEDlE,EAAAA,eAAe,GAAS;AACtB,QAAM;AAAEoE,MAAAA;AAAF,QAAa,KAAK5E,KAAxB;AACA,QAAM;AAAEC,MAAAA,MAAF;AAAUgB,MAAAA;AAAV,QAAqC,KAAKD,KAAhD;;AACA,QAAIC,sBAAJ,EAA4B;AAC1B;AACD;;AACD,QAAMO,aAAa,GAAG,EAAtB;AACAvB,IAAAA,MAAM,CAAC4E,OAAP,CAAezE,KAAK,IAAI;AACtB,UAAM;AAAEP,QAAAA,IAAF;AAAQC,QAAAA;AAAR,UAAoBM,KAA1B;;AACA,UAAIP,IAAI,IAAIC,OAAZ,EAAqB;AACnB0B,QAAAA,aAAa,CAACsB,IAAd,WAAsBjD,IAAtB,cAA8BC,OAA9B;AACD;AACF,KALD;AAMA,SAAKiC,iBAAL;AACA,SAAKC,QAAL,CAAc;AAAEf,MAAAA,sBAAsB,EAAE;AAA1B,KAAd;AACA2D,IAAAA,MAAM,CAACpD,aAAD,CAAN;AACD;;AAEDV,EAAAA,kBAAkB,GAAS;AACzB,SAAKkB,QAAL,CAAc,QAA0B;AAAA,UAAzB;AAAEb,QAAAA;AAAF,OAAyB;;AACtC,UAAIA,gBAAJ,EAAsB;AACpB,eAAO;AAAEA,UAAAA,gBAAgB,EAAE;AAApB,SAAP;AACD;;AACD,aAAO,IAAP;AACD,KALD;AAMD;;AAED2D,EAAAA,YAAY,GAAmB;AAC7B,QAAM;AAAE7E,MAAAA,MAAF;AAAUkB,MAAAA;AAAV,QAA+B,KAAKH,KAA1C;AAEA,WAAOf,MAAM,CAACyC,GAAP,CAAW,CAACtC,KAAD,EAAQgE,KAAR,KAAkB;AAClC,UAAM;AAAExE,QAAAA,QAAF;AAAYC,QAAAA,IAAZ;AAAkBC,QAAAA;AAAlB,UAA8BM,KAApC;AACA,0BACE,oBAAC,iBAAD;AACE,QAAA,GAAG,EAAER,QADP;AAEE,QAAA,UAAU,EAAEwE,KAFd;AAGE,QAAA,QAAQ,EAAExE,QAHZ;AAIE,QAAA,IAAI,EAAEC,IAJR;AAKE,QAAA,OAAO,EAAEC,OALX;AAME,QAAA,QAAQ,EAAE,KAAKW,iBANjB;AAOE,QAAA,cAAc,EAAE,KAAKC,kBAPvB;AAQE,QAAA,aAAa,EAAE,KAAKK,yBARtB;AASE,QAAA,OAAO,EAAEI;AATX,QADF;AAaD,KAfM,CAAP;AAgBD;;AAED4D,EAAAA,gBAAgB,GAAiB;AAC/B,QAAM;AAAE9E,MAAAA,MAAF;AAAUgB,MAAAA,sBAAV;AAAkCG,MAAAA;AAAlC,QAAuD,KAAKJ,KAAlE;AACA,QAAMgE,QAAQ,GAAG/E,MAAM,CAACuC,MAAP,GAAgB,CAAhB,GAAoB,cAApB,GAAqC,aAAtD;AAEA,wBACE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAE7D,UAAU,CACnB,eADmB,EAEnB;AACE,uBAAesC;AADjB,OAFmB,EAKnBG,gBAAgB,GAAG,aAAH,GAAmB,aALhB,CAFvB;AASE,MAAA,QAAQ,EAAEA,gBAAgB,IAAIH,sBAThC;AAUE,MAAA,OAAO,EAAE,KAAKT;AAVhB,OAYGS,sBAAsB,iBACrB,+CACE,oBAAC,cAAD,OADF,eAEE;AAAM,MAAA,SAAS,EAAC;AAAhB,kBAFF,eAGE;AAAM,MAAA,SAAS,EAAC;AAAhB,kBAHF,CAbJ,EAmBG,CAACG,gBAAD,IAAqB,CAACH,sBAAtB,IAAgD+D,QAnBnD,EAoBG5D,gBAAgB,iBACf,uDACE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAE/B;AAAvB,MADF,aArBJ,CADF;AA4BD;;AAED4F,EAAAA,MAAM,GAAiB;AACrB,QAAM;AAAEC,MAAAA;AAAF,QAAe,KAAKlF,KAA1B;AACA,QAAM;AAAEkB,MAAAA;AAAF,QAAmB,KAAKF,KAA9B;AACA,wBACE;AACE,MAAA,IAAI,EAAC,cADP;AAEE,MAAA,SAAS,EAAC,iCAFZ;AAGE,MAAA,GAAG,EAAEK,SAAS,IAAI;AAChB,aAAKA,SAAL,GAAiBA,SAAjB;AACD,OALH;AAME,MAAA,OAAO,EAAE,KAAKP,kBANhB;AAOE,MAAA,OAAO,EAAE,KAAKA;AAPhB,oBASE;AAAK,MAAA,SAAS,EAAC;AAAf,wCATF,eAUE,+BAVF,eAWE,oBAAC,eAAD;AACE,MAAA,WAAW,EAAE7B,SAAS,CAACkG,aADzB;AAEE,MAAA,SAAS,EAAE,KAAKtE;AAFlB,oBAIE,oBAAC,SAAD;AAAW,MAAA,WAAW,EAAC;AAAvB,OACG,CAACuE,QAAD,EAAWC,QAAX,kBACC;AACE,MAAA,GAAG,EAAED,QAAQ,CAACE,QADhB,CAEE;;AAFF,OAGMF,QAAQ,CAACG,cAHf;AAIE,MAAA,SAAS,EAAE5G,UAAU,CAAC,qBAAD,EAAwB;AAC3C6G,QAAAA,QAAQ,EAAEH,QAAQ,CAACI;AADwB,OAAxB;AAJvB,QAQG,KAAKX,YAAL,EARH,EASGM,QAAQ,CAACM,WATZ,CAFJ,CAJF,CAXF,eAgCE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,6BAFZ;AAGE,MAAA,OAAO,EAAE,KAAKpF;AAHhB,oBAKE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAEnB;AAAvB,MALF,uBADF,CAhCF,eA2CE;AAAK,MAAA,SAAS,EAAC;AAAf,OACG+B,YAAY,iBAAI;AAAK,MAAA,SAAS,EAAC;AAAf,OAAgCA,YAAhC,CADnB,eAGE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,8BAFZ;AAGE,MAAA,OAAO,EAAEgE;AAHX,gBADF,EAQG,KAAKH,gBAAL,EARH,CAHF,CA3CF,CADF;AA4DD;;AA/YD;;gBAHIvF,mB,2BAI2B,G;;gBAJ3BA,mB,kBAMkB;AACpBgC,EAAAA,aAAa,EAAE,EADK;AAEpBoD,EAAAA,MAAM,EAAE,MAAYe,SAFA;AAGpBT,EAAAA,QAAQ,EAAE,MAAYS;AAHF,C;;AA+YxB,eAAenG,mBAAf","sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { DragDropContext, Droppable, DropResult } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DragUtils, LoadingSpinner } from '@deephaven/components';\nimport { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';\nimport CustomColumnInput from './CustomColumnInput';\nimport './CustomColumnBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nexport type CustomColumnKey = 'eventKey' | 'name' | 'formula';\n\ntype Input = {\n eventKey: string;\n name: string;\n formula: string;\n};\ninterface CustomColumnBuilderProps {\n model: IrisGridModel;\n customColumns: string[];\n onSave: (columns: string[]) => void;\n onCancel: () => void;\n}\n\ninterface CustomColumnBuilderState {\n inputs: Input[];\n isCustomColumnApplying: boolean;\n errorMessage: ReactElement | null;\n hasRequestFailed: boolean;\n isSuccessShowing: boolean;\n}\nclass CustomColumnBuilder extends Component<\n CustomColumnBuilderProps,\n CustomColumnBuilderState\n> {\n static SUCCESS_SHOW_DURATION = 750;\n\n static defaultProps = {\n customColumns: [],\n onSave: (): void => undefined,\n onCancel: (): void => undefined,\n };\n\n static makeCustomColumnInputEventKey(): string {\n return shortid.generate();\n }\n\n static createCustomColumnInput(): Input {\n return {\n eventKey: shortid.generate(),\n name: '',\n formula: '',\n };\n }\n\n constructor(props: CustomColumnBuilderProps) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleSaveClick = this.handleSaveClick.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleCustomColumnUpdated = this.handleCustomColumnUpdated.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.resetRequestFailed = this.resetRequestFailed.bind(this);\n\n this.handleEditorTabNavigation = this.handleEditorTabNavigation.bind(this);\n\n this.state = {\n inputs: [],\n isCustomColumnApplying: false,\n errorMessage: null,\n hasRequestFailed: false,\n isSuccessShowing: false,\n };\n this.container = null;\n this.successButtonTimer = null;\n }\n\n componentDidMount(): void {\n const { customColumns } = this.props;\n this.parseCustomColumns(customColumns);\n this.startListening();\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n if (this.messageTimer) {\n clearTimeout(this.messageTimer);\n }\n if (this.successButtonTimer) {\n clearTimeout(this.successButtonTimer);\n }\n }\n\n container: HTMLDivElement | null;\n\n successButtonTimer: ReturnType<typeof setTimeout> | null;\n\n messageTimer: undefined;\n\n getInput = memoize((inputs: Input[], key: string) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs: Input[], key: string) =>\n inputs.findIndex(input => input.eventKey === key)\n );\n\n resetErrorMessage(): void {\n this.setState({ errorMessage: null });\n }\n\n startListening(): void {\n const { model } = this.props;\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListening(): void {\n const { model } = this.props;\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n parseCustomColumns(customColumns: string[]): void {\n if (customColumns.length > 0) {\n const customColumnInputs = customColumns.map(customColumn => {\n const input = customColumn.split(/=(.+)/, 2);\n return {\n eventKey: CustomColumnBuilder.makeCustomColumnInputEventKey(),\n name: input[0],\n formula: input[1],\n };\n });\n this.setState({ inputs: customColumnInputs });\n } else {\n this.setState({\n inputs: [CustomColumnBuilder.createCustomColumnInput()],\n });\n }\n }\n\n handleAddColumnClick(): void {\n const { inputs } = this.state;\n const newInputs = [...inputs];\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleDeleteColumn(eventKey: string): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1);\n if (newInputs.length === 0) {\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n }\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleInputChange(\n eventKey: string,\n type: CustomColumnKey,\n value: string\n ): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const customColumnInput = this.getInput(inputs, eventKey);\n\n const newCustomInput = { ...customColumnInput } as Input;\n newCustomInput[type] = value;\n\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1, newCustomInput);\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleCustomColumnUpdated(): void {\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n this.setState(\n { isCustomColumnApplying: false, isSuccessShowing: true },\n () => {\n this.successButtonTimer = setTimeout(\n () => this.setState({ isSuccessShowing: false }),\n CustomColumnBuilder.SUCCESS_SHOW_DURATION\n );\n }\n );\n }\n\n handleRequestFailed(event: Event): void {\n const customEvent = event as CustomEvent;\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n\n this.setState({\n isCustomColumnApplying: false,\n errorMessage: (\n <>\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Failed to apply custom columns.\n </p>\n <div className=\"error-box\">\n {customEvent.detail.errorMessage}\n <br />\n Table configuration:{' '}\n {JSON.stringify(customEvent.detail.configuration)}\n </div>\n </>\n ),\n hasRequestFailed: true,\n });\n }\n\n handleDragEnd(result: DropResult): void {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (!result.destination) {\n return;\n }\n const { inputs } = this.state;\n const sourceIndex = result.source.index;\n const destinationIndex = result.destination.index;\n const newInputs = [...inputs];\n const sourceInput = inputs[sourceIndex];\n\n newInputs.splice(sourceIndex, 1);\n newInputs.splice(destinationIndex, 0, sourceInput);\n\n this.setState({ inputs: newInputs });\n }\n\n handleEditorTabNavigation(focusEditorIndex: number, shiftKey: boolean): void {\n const { inputs } = this.state;\n // focus on drag handle\n if (shiftKey) {\n (this.container?.querySelectorAll(`.btn-drag-handle`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n (this.container?.querySelectorAll(`.btn-add-column`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n (this.container?.querySelectorAll(`.custom-column-input`)[\n nextFocusIndex\n ] as HTMLInputElement).focus();\n }\n }\n\n handleSaveClick(): void {\n const { onSave } = this.props;\n const { inputs, isCustomColumnApplying } = this.state;\n if (isCustomColumnApplying) {\n return;\n }\n const customColumns = [] as string[];\n inputs.forEach(input => {\n const { name, formula } = input;\n if (name && formula) {\n customColumns.push(`${name}=${formula}`);\n }\n });\n this.resetErrorMessage();\n this.setState({ isCustomColumnApplying: true });\n onSave(customColumns);\n }\n\n resetRequestFailed(): void {\n this.setState(({ hasRequestFailed }) => {\n if (hasRequestFailed) {\n return { hasRequestFailed: false };\n }\n return null;\n });\n }\n\n renderInputs(): ReactElement[] {\n const { inputs, hasRequestFailed } = this.state;\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n return (\n <CustomColumnInput\n key={eventKey}\n inputIndex={index}\n eventKey={eventKey}\n name={name}\n formula={formula}\n onChange={this.handleInputChange}\n onDeleteColumn={this.handleDeleteColumn}\n onTabInEditor={this.handleEditorTabNavigation}\n invalid={hasRequestFailed}\n />\n );\n });\n }\n\n renderSaveButton(): ReactElement {\n const { inputs, isCustomColumnApplying, isSuccessShowing } = this.state;\n const saveText = inputs.length > 1 ? 'Save Columns' : 'Save Column';\n\n return (\n <button\n type=\"button\"\n className={classNames(\n 'btn btn-apply',\n {\n 'btn-spinner': isCustomColumnApplying,\n },\n isSuccessShowing ? 'btn-success' : 'btn-primary'\n )}\n disabled={isSuccessShowing || isCustomColumnApplying}\n onClick={this.handleSaveClick}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-content\">Applying</span>\n <span className=\"btn-hover-content\">Applying</span>\n </span>\n )}\n {!isSuccessShowing && !isCustomColumnApplying && saveText}\n {isSuccessShowing && (\n <>\n <FontAwesomeIcon icon={vsPass} /> Success\n </>\n )}\n </button>\n );\n }\n\n render(): ReactElement {\n const { onCancel } = this.props;\n const { errorMessage } = this.state;\n return (\n <div\n role=\"presentation\"\n className=\"custom-column-builder-container\"\n ref={container => {\n this.container = container;\n }}\n onClick={this.resetRequestFailed}\n onFocus={this.resetRequestFailed}\n >\n <div className=\"section-title\">Custom Column Name and Formula</div>\n <hr />\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={this.handleDragEnd}\n >\n <Droppable droppableId=\"droppable-custom-columns\">\n {(provided, snapshot) => (\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n className={classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith,\n })}\n >\n {this.renderInputs()}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n <div className=\"pt-1 px-3\">\n <button\n type=\"button\"\n className=\"btn btn-link btn-add-column\"\n onClick={this.handleAddColumnClick}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Another Column\n </button>\n </div>\n\n <div className=\"custom-column-builder-footer\">\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\n\n <div className=\"d-flex justify-content-end\">\n <button\n type=\"button\"\n className=\"btn btn-outline-primary mr-2\"\n onClick={onCancel}\n >\n Cancel\n </button>\n {this.renderSaveButton()}\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomColumnBuilder;\n"],"file":"CustomColumnBuilder.js"}
@@ -1,42 +1,32 @@
1
- export default CustomColumnInput;
2
- declare class CustomColumnInput extends React.PureComponent<any, any, any> {
1
+ import { PureComponent, ReactElement } from 'react';
2
+ import { CustomColumnKey } from './CustomColumnBuilder';
3
+ interface CustomColumnInputProps {
4
+ eventKey: string;
5
+ inputIndex: number;
6
+ name: string;
7
+ formula: string;
8
+ onChange: (eventKey: string, inputType: CustomColumnKey, value: string) => void;
9
+ onDeleteColumn: (eventKey: string) => void;
10
+ onTabInEditor: (editorIndex: number, shiftKey: boolean) => void;
11
+ invalid: boolean;
12
+ }
13
+ declare class CustomColumnInput extends PureComponent<CustomColumnInputProps, Record<string, never>> {
3
14
  static INPUT_TYPE: {
4
15
  NAME: string;
5
16
  FORMULA: string;
6
17
  };
7
- constructor(props: any);
8
- handleFormulaEditorContentChanged(formulaValue: any): void;
9
- editorContainer: any;
10
- formulaEditor: any;
11
- }
12
- declare namespace CustomColumnInput {
13
- namespace propTypes {
14
- const eventKey: PropTypes.Validator<string>;
15
- const inputIndex: PropTypes.Requireable<number>;
16
- const name: PropTypes.Requireable<string>;
17
- const formula: PropTypes.Requireable<string>;
18
- const onChange: PropTypes.Requireable<(...args: any[]) => any>;
19
- const onDeleteColumn: PropTypes.Requireable<(...args: any[]) => any>;
20
- const onTabInEditor: PropTypes.Requireable<(...args: any[]) => any>;
21
- const invalid: PropTypes.Requireable<boolean>;
22
- }
23
- namespace defaultProps {
24
- const name_1: string;
25
- export { name_1 as name };
26
- const inputIndex_1: number;
27
- export { inputIndex_1 as inputIndex };
28
- const formula_1: string;
29
- export { formula_1 as formula };
30
- export function onChange_1(): void;
31
- export { onChange_1 as onChange };
32
- export function onDeleteColumn_1(): void;
33
- export { onDeleteColumn_1 as onDeleteColumn };
34
- export function onTabInEditor_1(): void;
35
- export { onTabInEditor_1 as onTabInEditor };
36
- const invalid_1: boolean;
37
- export { invalid_1 as invalid };
38
- }
18
+ static defaultProps: {
19
+ name: string;
20
+ inputIndex: number;
21
+ formula: string;
22
+ onChange: () => void;
23
+ onDeleteColumn: () => void;
24
+ onTabInEditor: () => void;
25
+ invalid: boolean;
26
+ };
27
+ constructor(props: CustomColumnInputProps);
28
+ handleFormulaEditorContentChanged(formulaValue?: string): void;
29
+ render(): ReactElement;
39
30
  }
40
- import React from "react";
41
- import PropTypes from "prop-types";
31
+ export default CustomColumnInput;
42
32
  //# sourceMappingURL=CustomColumnInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomColumnInput.d.ts","sourceRoot":"","sources":["../../src/sidebar/CustomColumnInput.jsx"],"names":[],"mappings":";AASA;IACE;;;MAGE;IAEF,wBAQC;IAED,2DAIC;IARC,qBAA2B;IAC3B,mBAAyB;CAuF5B;;;;;;;;;;;;;;;;;;;QAiBW,mCAAQ;;QACF,yCAAQ;;QACT,wCAAQ"}
1
+ {"version":3,"file":"CustomColumnInput.d.ts","sourceRoot":"","sources":["../../src/sidebar/CustomColumnInput.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAO3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CACR,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,MAAM,KACV,IAAI,CAAC;IACV,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE,OAAO,EAAE,OAAO,CAAC;CAClB;AACD,cAAM,iBAAkB,SAAQ,aAAa,CAC3C,sBAAsB,EACtB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,UAAU;;;MAGf;IAEF,MAAM,CAAC,YAAY;;;;wBAIH,IAAI;8BACE,IAAI;6BACL,IAAI;;MAEvB;gBAEU,KAAK,EAAE,sBAAsB;IAOzC,iCAAiC,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAY9D,MAAM,IAAI,YAAY;CA8EvB;AAED,eAAe,iBAAiB,CAAC"}
@@ -3,7 +3,6 @@ function _extends() { _extends = Object.assign || function (target) { for (var i
3
3
  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; }
4
4
 
5
5
  import React, { PureComponent } from 'react';
6
- import PropTypes from 'prop-types';
7
6
  import classNames from 'classnames';
8
7
  import { Draggable } from 'react-beautiful-dnd';
9
8
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
@@ -15,8 +14,6 @@ class CustomColumnInput extends PureComponent {
15
14
  constructor(props) {
16
15
  super(props);
17
16
  this.handleFormulaEditorContentChanged = this.handleFormulaEditorContentChanged.bind(this);
18
- this.editorContainer = null;
19
- this.formulaEditor = null;
20
17
  }
21
18
 
22
19
  handleFormulaEditorContentChanged(formulaValue) {
@@ -24,9 +21,12 @@ class CustomColumnInput extends PureComponent {
24
21
  onChange,
25
22
  eventKey
26
23
  } = this.props;
27
- formulaValue.replace(/(\r\n|\n|\r)/gm, ''); // remove line break
28
24
 
29
- onChange(eventKey, CustomColumnInput.INPUT_TYPE.FORMULA, formulaValue);
25
+ if (formulaValue) {
26
+ formulaValue.replace(/(\r\n|\n|\r)/gm, ''); // remove line break
27
+
28
+ onChange(eventKey, CustomColumnInput.INPUT_TYPE.FORMULA, formulaValue);
29
+ }
30
30
  }
31
31
 
32
32
  render() {
@@ -96,24 +96,15 @@ _defineProperty(CustomColumnInput, "INPUT_TYPE", {
96
96
  FORMULA: 'formula'
97
97
  });
98
98
 
99
- CustomColumnInput.propTypes = {
100
- eventKey: PropTypes.string.isRequired,
101
- inputIndex: PropTypes.number,
102
- name: PropTypes.string,
103
- formula: PropTypes.string,
104
- onChange: PropTypes.func,
105
- onDeleteColumn: PropTypes.func,
106
- onTabInEditor: PropTypes.func,
107
- invalid: PropTypes.bool
108
- };
109
- CustomColumnInput.defaultProps = {
99
+ _defineProperty(CustomColumnInput, "defaultProps", {
110
100
  name: '',
111
101
  inputIndex: 0,
112
102
  formula: '',
113
- onChange: () => {},
114
- onDeleteColumn: () => {},
115
- onTabInEditor: () => {},
103
+ onChange: () => undefined,
104
+ onDeleteColumn: () => undefined,
105
+ onTabInEditor: () => undefined,
116
106
  invalid: false
117
- };
107
+ });
108
+
118
109
  export default CustomColumnInput;
119
110
  //# sourceMappingURL=CustomColumnInput.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/sidebar/CustomColumnInput.jsx"],"names":["React","PureComponent","PropTypes","classNames","Draggable","FontAwesomeIcon","Tooltip","vsTrash","vsGripper","InputEditor","CustomColumnInput","constructor","props","handleFormulaEditorContentChanged","bind","editorContainer","formulaEditor","formulaValue","onChange","eventKey","replace","INPUT_TYPE","FORMULA","render","name","formula","onDeleteColumn","inputIndex","onTabInEditor","invalid","provided","snapshot","dragging","isDragging","innerRef","draggableProps","event","NAME","target","value","dragHandleProps","language","propTypes","string","isRequired","number","func","bool","defaultProps"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Draggable } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Tooltip } from '@deephaven/components';\nimport { vsTrash, vsGripper } from '@deephaven/icons';\nimport InputEditor from './InputEditor';\n\nclass CustomColumnInput extends PureComponent {\n static INPUT_TYPE = {\n NAME: 'name',\n FORMULA: 'formula',\n };\n\n constructor(props) {\n super(props);\n this.handleFormulaEditorContentChanged = this.handleFormulaEditorContentChanged.bind(\n this\n );\n\n this.editorContainer = null;\n this.formulaEditor = null;\n }\n\n handleFormulaEditorContentChanged(formulaValue) {\n const { onChange, eventKey } = this.props;\n formulaValue.replace(/(\\r\\n|\\n|\\r)/gm, ''); // remove line break\n onChange(eventKey, CustomColumnInput.INPUT_TYPE.FORMULA, formulaValue);\n }\n\n render() {\n const {\n eventKey,\n name,\n formula,\n onChange,\n onDeleteColumn,\n inputIndex,\n onTabInEditor,\n invalid,\n } = this.props;\n return (\n <Draggable\n draggableId={eventKey}\n index={inputIndex}\n disableInteractiveElementBlocking\n >\n {(provided, snapshot) => (\n <div\n className={classNames('draggable-container', {\n dragging: snapshot.isDragging,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n >\n <div className=\"custom-column-input-container\">\n <div className=\"d-flex flex-row pb-3 custom-column-name\">\n <input\n className={classNames('form-control custom-column-input', {\n 'is-invalid': invalid,\n })}\n placeholder=\"Column Name\"\n value={name}\n onChange={event => {\n onChange(\n eventKey,\n CustomColumnInput.INPUT_TYPE.NAME,\n event.target.value\n );\n }}\n />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon ml-1 px-2\"\n onClick={() => {\n onDeleteColumn(eventKey);\n }}\n >\n <Tooltip>Delete custom column</Tooltip>\n <FontAwesomeIcon icon={vsTrash} />\n </button>\n\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon px-2 btn-drag-handle\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n <Tooltip>Drag column to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </button>\n </div>\n <InputEditor\n editorSettings={{ language: 'deephavenDb' }}\n editorIndex={inputIndex}\n value={formula}\n onContentChanged={this.handleFormulaEditorContentChanged}\n onTab={onTabInEditor}\n invalid={invalid}\n />\n </div>\n <hr />\n </div>\n )}\n </Draggable>\n );\n }\n}\n\nCustomColumnInput.propTypes = {\n eventKey: PropTypes.string.isRequired,\n inputIndex: PropTypes.number,\n name: PropTypes.string,\n formula: PropTypes.string,\n onChange: PropTypes.func,\n onDeleteColumn: PropTypes.func,\n onTabInEditor: PropTypes.func,\n invalid: PropTypes.bool,\n};\n\nCustomColumnInput.defaultProps = {\n name: '',\n inputIndex: 0,\n formula: '',\n onChange: () => {},\n onDeleteColumn: () => {},\n onTabInEditor: () => {},\n invalid: false,\n};\n\nexport default CustomColumnInput;\n"],"file":"CustomColumnInput.js"}
1
+ {"version":3,"sources":["../../src/sidebar/CustomColumnInput.tsx"],"names":["React","PureComponent","classNames","Draggable","FontAwesomeIcon","Tooltip","vsTrash","vsGripper","InputEditor","CustomColumnInput","constructor","props","handleFormulaEditorContentChanged","bind","formulaValue","onChange","eventKey","replace","INPUT_TYPE","FORMULA","render","name","formula","onDeleteColumn","inputIndex","onTabInEditor","invalid","provided","snapshot","dragging","isDragging","innerRef","draggableProps","event","NAME","target","value","dragHandleProps","language","undefined"],"mappings":"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","sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { Draggable } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Tooltip } from '@deephaven/components';\nimport { vsTrash, vsGripper } from '@deephaven/icons';\nimport InputEditor from './InputEditor';\nimport { CustomColumnKey } from './CustomColumnBuilder';\n\ninterface CustomColumnInputProps {\n eventKey: string;\n inputIndex: number;\n name: string;\n formula: string;\n onChange: (\n eventKey: string,\n inputType: CustomColumnKey,\n value: string\n ) => void;\n onDeleteColumn: (eventKey: string) => void;\n onTabInEditor: (editorIndex: number, shiftKey: boolean) => void;\n invalid: boolean;\n}\nclass CustomColumnInput extends PureComponent<\n CustomColumnInputProps,\n Record<string, never>\n> {\n static INPUT_TYPE = {\n NAME: 'name',\n FORMULA: 'formula',\n };\n\n static defaultProps = {\n name: '',\n inputIndex: 0,\n formula: '',\n onChange: (): void => undefined,\n onDeleteColumn: (): void => undefined,\n onTabInEditor: (): void => undefined,\n invalid: false,\n };\n\n constructor(props: CustomColumnInputProps) {\n super(props);\n this.handleFormulaEditorContentChanged = this.handleFormulaEditorContentChanged.bind(\n this\n );\n }\n\n handleFormulaEditorContentChanged(formulaValue?: string): void {\n const { onChange, eventKey } = this.props;\n if (formulaValue) {\n formulaValue.replace(/(\\r\\n|\\n|\\r)/gm, ''); // remove line break\n onChange(\n eventKey,\n CustomColumnInput.INPUT_TYPE.FORMULA as CustomColumnKey,\n formulaValue\n );\n }\n }\n\n render(): ReactElement {\n const {\n eventKey,\n name,\n formula,\n onChange,\n onDeleteColumn,\n inputIndex,\n onTabInEditor,\n invalid,\n } = this.props;\n return (\n <Draggable\n draggableId={eventKey}\n index={inputIndex}\n disableInteractiveElementBlocking\n >\n {(provided, snapshot) => (\n <div\n className={classNames('draggable-container', {\n dragging: snapshot.isDragging,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n >\n <div className=\"custom-column-input-container\">\n <div className=\"d-flex flex-row pb-3 custom-column-name\">\n <input\n className={classNames('form-control custom-column-input', {\n 'is-invalid': invalid,\n })}\n placeholder=\"Column Name\"\n value={name}\n onChange={event => {\n onChange(\n eventKey,\n CustomColumnInput.INPUT_TYPE.NAME as CustomColumnKey,\n event.target.value\n );\n }}\n />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon ml-1 px-2\"\n onClick={() => {\n onDeleteColumn(eventKey);\n }}\n >\n <Tooltip>Delete custom column</Tooltip>\n <FontAwesomeIcon icon={vsTrash} />\n </button>\n\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon px-2 btn-drag-handle\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n <Tooltip>Drag column to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </button>\n </div>\n <InputEditor\n editorSettings={{ language: 'deephavenDb' }}\n editorIndex={inputIndex}\n value={formula}\n onContentChanged={this.handleFormulaEditorContentChanged}\n onTab={onTabInEditor}\n invalid={invalid}\n />\n </div>\n <hr />\n </div>\n )}\n </Draggable>\n );\n }\n}\n\nexport default CustomColumnInput;\n"],"file":"CustomColumnInput.js"}
@@ -1,44 +1,43 @@
1
+ import React, { Component, ReactElement } from 'react';
2
+ import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';
3
+ import './InputEditor.scss';
4
+ interface InputEditorProps {
5
+ value: string;
6
+ onContentChanged: (value?: string) => void;
7
+ editorSettings: Partial<monaco.editor.IStandaloneEditorConstructionOptions>;
8
+ editorIndex: number;
9
+ onTab: (editorIndex: number, shiftKey: boolean) => void;
10
+ invalid: boolean;
11
+ }
12
+ interface InputEditorState {
13
+ isEditorFocused: boolean;
14
+ isEditorEmpty: boolean;
15
+ }
1
16
  /**
2
17
  * A monaco editor that looks like an general input
3
18
  */
4
- declare class InputEditor extends React.Component<any, any, any> {
5
- constructor(props: any);
19
+ export default class InputEditor extends Component<InputEditorProps, InputEditorState> {
20
+ static defaultProps: {
21
+ value: string;
22
+ onContentChanged: () => void;
23
+ editorSettings: {};
24
+ editorIndex: number;
25
+ onTab: () => void;
26
+ invalid: boolean;
27
+ };
28
+ constructor(props: InputEditorProps);
29
+ componentDidMount(): void;
30
+ componentWillUnmount(): void;
31
+ editorContainer: HTMLDivElement | null;
32
+ editor?: monaco.editor.IStandaloneCodeEditor;
33
+ initEditor(): void;
34
+ destroyEditor(): void;
6
35
  handleContentChanged(): void;
7
36
  handleEditorFocus(): void;
8
37
  handleEditorBlur(): void;
9
38
  handleContainerClick(): void;
10
- handleKeyDown(event: any): void;
11
- editorContainer: HTMLDivElement | null;
12
- editor: monaco.editor.IStandaloneCodeEditor | null;
13
- initEditor(): void;
14
- destroyEditor(): void;
15
- }
16
- declare namespace InputEditor {
17
- namespace propTypes {
18
- const value: PropTypes.Requireable<string>;
19
- const onContentChanged: PropTypes.Requireable<(...args: any[]) => any>;
20
- const editorSettings: PropTypes.Requireable<PropTypes.InferProps<{}>>;
21
- const editorIndex: PropTypes.Requireable<number>;
22
- const onTab: PropTypes.Requireable<(...args: any[]) => any>;
23
- const invalid: PropTypes.Requireable<boolean>;
24
- }
25
- namespace defaultProps {
26
- const value_1: string;
27
- export { value_1 as value };
28
- export function onContentChanged_1(): void;
29
- export { onContentChanged_1 as onContentChanged };
30
- const editorSettings_1: {};
31
- export { editorSettings_1 as editorSettings };
32
- const editorIndex_1: number;
33
- export { editorIndex_1 as editorIndex };
34
- export function onTab_1(): void;
35
- export { onTab_1 as onTab };
36
- const invalid_1: boolean;
37
- export { invalid_1 as invalid };
38
- }
39
+ handleKeyDown(event: React.KeyboardEvent<HTMLDivElement>): void;
40
+ render(): ReactElement;
39
41
  }
40
- export default InputEditor;
41
- import React from "react";
42
- import * as monaco from "monaco-editor/esm/vs/editor/editor.api.js";
43
- import PropTypes from "prop-types";
42
+ export {};
44
43
  //# sourceMappingURL=InputEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InputEditor.d.ts","sourceRoot":"","sources":["../../src/sidebar/InputEditor.jsx"],"names":[],"mappings":"AAMA;;GAEG;AAEH;IACE,wBAeC;IA2DD,6BAMC;IAED,0BAEC;IAED,yBAMC;IAGD,6BAMC;IAED,gCAKC;IA/FC,uCAA2B;IAC3B,mDAAkB;IAWpB,mBA0CC;IAED,sBAGC;CA+DF;;;;;;;;;;;;;QAamB,2CAAQ;;;;;;QAGnB,gCAAQ"}
1
+ {"version":3,"file":"InputEditor.d.ts","sourceRoot":"","sources":["../../src/sidebar/InputEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,KAAK,MAAM,MAAM,2CAA2C,CAAC;AAEpE,OAAO,oBAAoB,CAAC;AAE5B,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,gBAAgB;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;CACxB;AACD;;GAEG;AAEH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS,CAChD,gBAAgB,EAChB,gBAAgB,CACjB;IACC,MAAM,CAAC,YAAY;;gCAEK,IAAI;;;qBAGf,IAAI;;MAEf;gBAEU,KAAK,EAAE,gBAAgB;IAgBnC,iBAAiB,IAAI,IAAI;IAIzB,oBAAoB,IAAI,IAAI;IAI5B,eAAe,EAAE,cAAc,GAAG,IAAI,CAAC;IAEvC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;IAE7C,UAAU,IAAI,IAAI;IA+ClB,aAAa,IAAI,IAAI;IAKrB,oBAAoB,IAAI,IAAI;IAS5B,iBAAiB,IAAI,IAAI;IAIzB,gBAAgB,IAAI,IAAI;IAYxB,oBAAoB,IAAI,IAAI;IAQ5B,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,IAAI;IAO/D,MAAM,IAAI,YAAY;CAyBvB"}
@@ -5,17 +5,21 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
5
5
  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; }
6
6
 
7
7
  import React, { Component } from 'react';
8
- import PropTypes from 'prop-types';
9
8
  import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';
10
9
  import classNames from 'classnames';
11
10
  import "./InputEditor.css";
11
+
12
12
  /**
13
13
  * A monaco editor that looks like an general input
14
14
  */
15
-
16
15
  export default class InputEditor extends Component {
17
16
  constructor(props) {
18
17
  super(props);
18
+
19
+ _defineProperty(this, "editorContainer", void 0);
20
+
21
+ _defineProperty(this, "editor", void 0);
22
+
19
23
  this.handleContentChanged = this.handleContentChanged.bind(this);
20
24
  this.handleEditorFocus = this.handleEditorFocus.bind(this);
21
25
  this.handleEditorBlur = this.handleEditorBlur.bind(this);
@@ -26,7 +30,6 @@ export default class InputEditor extends Component {
26
30
  isEditorEmpty: true
27
31
  };
28
32
  this.editorContainer = null;
29
- this.editor = null;
30
33
  }
31
34
 
32
35
  componentDidMount() {
@@ -38,6 +41,8 @@ export default class InputEditor extends Component {
38
41
  }
39
42
 
40
43
  initEditor() {
44
+ var _this$editor$getModel;
45
+
41
46
  var {
42
47
  value,
43
48
  editorSettings
@@ -73,10 +78,14 @@ export default class InputEditor extends Component {
73
78
  automaticLayout: true
74
79
  }, editorSettings);
75
80
 
81
+ if (!this.editorContainer) {
82
+ throw new Error('editorContainer is null');
83
+ }
84
+
76
85
  this.editor = monaco.editor.create(this.editorContainer, inputEditorSettings);
77
86
  this.editor.layout(); // disable tab to spaces in this editor to improve tab navigation
78
87
 
79
- this.editor.getModel().updateOptions({
88
+ (_this$editor$getModel = this.editor.getModel()) === null || _this$editor$getModel === void 0 ? void 0 : _this$editor$getModel.updateOptions({
80
89
  tabSize: 0
81
90
  });
82
91
  this.editor.onDidChangeModelContent(this.handleContentChanged);
@@ -85,18 +94,26 @@ export default class InputEditor extends Component {
85
94
  }
86
95
 
87
96
  destroyEditor() {
88
- this.editor.dispose();
89
- this.editor = null;
97
+ var _this$editor;
98
+
99
+ (_this$editor = this.editor) === null || _this$editor === void 0 ? void 0 : _this$editor.dispose();
100
+ this.editor = undefined;
90
101
  }
91
102
 
92
103
  handleContentChanged() {
104
+ var _this$editor2, _this$editor2$getMode;
105
+
93
106
  var {
94
107
  onContentChanged
95
108
  } = this.props;
96
- var value = this.editor.getModel().getValue();
97
- this.setState({
98
- isEditorEmpty: value.length === 0
99
- });
109
+ var value = (_this$editor2 = this.editor) === null || _this$editor2 === void 0 ? void 0 : (_this$editor2$getMode = _this$editor2.getModel()) === null || _this$editor2$getMode === void 0 ? void 0 : _this$editor2$getMode.getValue();
110
+
111
+ if (value) {
112
+ this.setState({
113
+ isEditorEmpty: value.length === 0
114
+ });
115
+ }
116
+
100
117
  onContentChanged(value);
101
118
  }
102
119
 
@@ -107,7 +124,14 @@ export default class InputEditor extends Component {
107
124
  }
108
125
 
109
126
  handleEditorBlur() {
110
- var value = this.editor.getModel().getValue();
127
+ var _this$editor3, _this$editor3$getMode;
128
+
129
+ var value = (_this$editor3 = this.editor) === null || _this$editor3 === void 0 ? void 0 : (_this$editor3$getMode = _this$editor3.getModel()) === null || _this$editor3$getMode === void 0 ? void 0 : _this$editor3$getMode.getValue();
130
+
131
+ if (!value) {
132
+ throw new Error('value is undefined');
133
+ }
134
+
111
135
  this.setState({
112
136
  isEditorEmpty: value.length === 0,
113
137
  isEditorFocused: false
@@ -116,6 +140,8 @@ export default class InputEditor extends Component {
116
140
 
117
141
 
118
142
  handleContainerClick() {
143
+ var _this$editor4;
144
+
119
145
  var {
120
146
  isEditorFocused
121
147
  } = this.state;
@@ -124,7 +150,7 @@ export default class InputEditor extends Component {
124
150
  return;
125
151
  }
126
152
 
127
- this.editor.focus();
153
+ (_this$editor4 = this.editor) === null || _this$editor4 === void 0 ? void 0 : _this$editor4.focus();
128
154
  }
129
155
 
130
156
  handleKeyDown(event) {
@@ -166,20 +192,13 @@ export default class InputEditor extends Component {
166
192
  }
167
193
 
168
194
  }
169
- InputEditor.propTypes = {
170
- value: PropTypes.string,
171
- onContentChanged: PropTypes.func,
172
- editorSettings: PropTypes.shape({}),
173
- editorIndex: PropTypes.number,
174
- onTab: PropTypes.func,
175
- invalid: PropTypes.bool
176
- };
177
- InputEditor.defaultProps = {
195
+
196
+ _defineProperty(InputEditor, "defaultProps", {
178
197
  value: '',
179
- onContentChanged: () => {},
198
+ onContentChanged: () => undefined,
180
199
  editorSettings: {},
181
200
  editorIndex: 0,
182
- onTab: () => {},
201
+ onTab: () => undefined,
183
202
  invalid: false
184
- };
203
+ });
185
204
  //# sourceMappingURL=InputEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/sidebar/InputEditor.jsx"],"names":["React","Component","PropTypes","monaco","classNames","InputEditor","constructor","props","handleContentChanged","bind","handleEditorFocus","handleEditorBlur","handleContainerClick","handleKeyDown","state","isEditorFocused","isEditorEmpty","editorContainer","editor","componentDidMount","initEditor","componentWillUnmount","destroyEditor","value","editorSettings","inputEditorSettings","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbers","minimap","enabled","renderLineHighlight","scrollbar","arrowSize","horizontal","horizontalScrollbarSize","scrollBeyondLastLine","padding","top","bottom","tabCompletion","useTabStops","wordWrap","automaticLayout","create","layout","getModel","updateOptions","tabSize","onDidChangeModelContent","onDidFocusEditorText","onDidBlurEditorText","dispose","onContentChanged","getValue","setState","length","focus","event","onTab","editorIndex","key","shiftKey","render","invalid","focused","propTypes","string","func","shape","number","bool","defaultProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';\nimport classNames from 'classnames';\nimport './InputEditor.scss';\n\n/**\n * A monaco editor that looks like an general input\n */\n\nexport default class InputEditor extends Component {\n constructor(props) {\n super(props);\n\n this.handleContentChanged = this.handleContentChanged.bind(this);\n this.handleEditorFocus = this.handleEditorFocus.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleContainerClick = this.handleContainerClick.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n\n this.state = {\n isEditorFocused: false,\n isEditorEmpty: true,\n };\n this.editorContainer = null;\n this.editor = null;\n }\n\n componentDidMount() {\n this.initEditor();\n }\n\n componentWillUnmount() {\n this.destroyEditor();\n }\n\n initEditor() {\n const { value, editorSettings } = this.props;\n const inputEditorSettings = {\n copyWithSyntaxHighlighting: 'false',\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'groovyDB',\n lineDecorationsWidth: 8,\n lineNumbers: 'off',\n minimap: { enabled: false },\n renderLineHighlight: 'none',\n scrollbar: {\n arrowSize: 0,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n },\n scrollBeyondLastLine: false,\n padding: {\n top: 6,\n bottom: 6,\n },\n tabCompletion: 'off',\n useTabStops: true,\n value,\n wordWrap: 'on',\n automaticLayout: true,\n ...editorSettings,\n };\n this.editor = monaco.editor.create(\n this.editorContainer,\n inputEditorSettings\n );\n this.editor.layout();\n\n // disable tab to spaces in this editor to improve tab navigation\n this.editor.getModel().updateOptions({ tabSize: 0 });\n\n this.editor.onDidChangeModelContent(this.handleContentChanged);\n this.editor.onDidFocusEditorText(this.handleEditorFocus);\n this.editor.onDidBlurEditorText(this.handleEditorBlur);\n }\n\n destroyEditor() {\n this.editor.dispose();\n this.editor = null;\n }\n\n handleContentChanged() {\n const { onContentChanged } = this.props;\n const value = this.editor.getModel().getValue();\n this.setState({ isEditorEmpty: value.length === 0 });\n\n onContentChanged(value);\n }\n\n handleEditorFocus() {\n this.setState({ isEditorFocused: true });\n }\n\n handleEditorBlur() {\n const value = this.editor.getModel().getValue();\n this.setState({\n isEditorEmpty: value.length === 0,\n isEditorFocused: false,\n });\n }\n\n // force editor to focus if clicked\n handleContainerClick() {\n const { isEditorFocused } = this.state;\n if (isEditorFocused) {\n return;\n }\n this.editor.focus();\n }\n\n handleKeyDown(event) {\n const { onTab, editorIndex } = this.props;\n if (event.key === 'Tab') {\n onTab(editorIndex, event.shiftKey);\n }\n }\n\n render() {\n const { value, invalid } = this.props;\n const { isEditorFocused, isEditorEmpty } = this.state;\n return (\n <div\n className={classNames('input-editor-wrapper', {\n focused: isEditorFocused,\n invalid,\n })}\n onKeyDown={this.handleKeyDown}\n role=\"presentation\"\n onClick={this.handleContainerClick}\n >\n <div\n className=\"editor-container\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n {isEditorEmpty && !value && (\n <div className=\"editor-placeholder text-muted\">Column Formula</div>\n )}\n </div>\n );\n }\n}\n\nInputEditor.propTypes = {\n value: PropTypes.string,\n onContentChanged: PropTypes.func,\n editorSettings: PropTypes.shape({}),\n editorIndex: PropTypes.number,\n onTab: PropTypes.func,\n invalid: PropTypes.bool,\n};\n\nInputEditor.defaultProps = {\n value: '',\n onContentChanged: () => {},\n editorSettings: {},\n editorIndex: 0,\n onTab: () => {},\n invalid: false,\n};\n"],"file":"InputEditor.js"}
1
+ {"version":3,"sources":["../../src/sidebar/InputEditor.tsx"],"names":["React","Component","monaco","classNames","InputEditor","constructor","props","handleContentChanged","bind","handleEditorFocus","handleEditorBlur","handleContainerClick","handleKeyDown","state","isEditorFocused","isEditorEmpty","editorContainer","componentDidMount","initEditor","componentWillUnmount","destroyEditor","value","editorSettings","inputEditorSettings","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbers","minimap","enabled","renderLineHighlight","scrollbar","arrowSize","horizontal","horizontalScrollbarSize","scrollBeyondLastLine","padding","top","bottom","tabCompletion","useTabStops","wordWrap","automaticLayout","Error","editor","create","layout","getModel","updateOptions","tabSize","onDidChangeModelContent","onDidFocusEditorText","onDidBlurEditorText","dispose","undefined","onContentChanged","getValue","setState","length","focus","event","onTab","editorIndex","key","shiftKey","render","invalid","focused"],"mappings":"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","sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';\nimport classNames from 'classnames';\nimport './InputEditor.scss';\n\ninterface InputEditorProps {\n value: string;\n onContentChanged: (value?: string) => void;\n editorSettings: Partial<monaco.editor.IStandaloneEditorConstructionOptions>;\n editorIndex: number;\n onTab: (editorIndex: number, shiftKey: boolean) => void;\n invalid: boolean;\n}\n\ninterface InputEditorState {\n isEditorFocused: boolean;\n isEditorEmpty: boolean;\n}\n/**\n * A monaco editor that looks like an general input\n */\n\nexport default class InputEditor extends Component<\n InputEditorProps,\n InputEditorState\n> {\n static defaultProps = {\n value: '',\n onContentChanged: (): void => undefined,\n editorSettings: {},\n editorIndex: 0,\n onTab: (): void => undefined,\n invalid: false,\n };\n\n constructor(props: InputEditorProps) {\n super(props);\n\n this.handleContentChanged = this.handleContentChanged.bind(this);\n this.handleEditorFocus = this.handleEditorFocus.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleContainerClick = this.handleContainerClick.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n\n this.state = {\n isEditorFocused: false,\n isEditorEmpty: true,\n };\n this.editorContainer = null;\n }\n\n componentDidMount(): void {\n this.initEditor();\n }\n\n componentWillUnmount(): void {\n this.destroyEditor();\n }\n\n editorContainer: HTMLDivElement | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n initEditor(): void {\n const { value, editorSettings } = this.props;\n const inputEditorSettings = {\n copyWithSyntaxHighlighting: 'false',\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'groovyDB',\n lineDecorationsWidth: 8,\n lineNumbers: 'off',\n minimap: { enabled: false },\n renderLineHighlight: 'none',\n scrollbar: {\n arrowSize: 0,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n },\n scrollBeyondLastLine: false,\n padding: {\n top: 6,\n bottom: 6,\n },\n tabCompletion: 'off',\n useTabStops: true,\n value,\n wordWrap: 'on',\n automaticLayout: true,\n ...editorSettings,\n } as monaco.editor.IStandaloneEditorConstructionOptions;\n if (!this.editorContainer) {\n throw new Error('editorContainer is null');\n }\n this.editor = monaco.editor.create(\n this.editorContainer,\n inputEditorSettings\n );\n this.editor.layout();\n\n // disable tab to spaces in this editor to improve tab navigation\n this.editor.getModel()?.updateOptions({ tabSize: 0 });\n\n this.editor.onDidChangeModelContent(this.handleContentChanged);\n this.editor.onDidFocusEditorText(this.handleEditorFocus);\n this.editor.onDidBlurEditorText(this.handleEditorBlur);\n }\n\n destroyEditor(): void {\n this.editor?.dispose();\n this.editor = undefined;\n }\n\n handleContentChanged(): void {\n const { onContentChanged } = this.props;\n const value = this.editor?.getModel()?.getValue();\n if (value) {\n this.setState({ isEditorEmpty: value.length === 0 });\n }\n onContentChanged(value);\n }\n\n handleEditorFocus(): void {\n this.setState({ isEditorFocused: true });\n }\n\n handleEditorBlur(): void {\n const value = this.editor?.getModel()?.getValue();\n if (!value) {\n throw new Error('value is undefined');\n }\n this.setState({\n isEditorEmpty: value.length === 0,\n isEditorFocused: false,\n });\n }\n\n // force editor to focus if clicked\n handleContainerClick(): void {\n const { isEditorFocused } = this.state;\n if (isEditorFocused) {\n return;\n }\n this.editor?.focus();\n }\n\n handleKeyDown(event: React.KeyboardEvent<HTMLDivElement>): void {\n const { onTab, editorIndex } = this.props;\n if (event.key === 'Tab') {\n onTab(editorIndex, event.shiftKey);\n }\n }\n\n render(): ReactElement {\n const { value, invalid } = this.props;\n const { isEditorFocused, isEditorEmpty } = this.state;\n return (\n <div\n className={classNames('input-editor-wrapper', {\n focused: isEditorFocused,\n invalid,\n })}\n onKeyDown={this.handleKeyDown}\n role=\"presentation\"\n onClick={this.handleContainerClick}\n >\n <div\n className=\"editor-container\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n {isEditorEmpty && !value && (\n <div className=\"editor-placeholder text-muted\">Column Formula</div>\n )}\n </div>\n );\n }\n}\n"],"file":"InputEditor.js"}