@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.
- package/dist/AdvancedFilterCreator.d.ts +69 -63
- package/dist/AdvancedFilterCreator.d.ts.map +1 -1
- package/dist/AdvancedFilterCreator.js +79 -73
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.d.ts +45 -45
- package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js +32 -36
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts +47 -52
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +24 -39
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnStatistics.d.ts +34 -22
- package/dist/ColumnStatistics.d.ts.map +1 -1
- package/dist/ColumnStatistics.js +8 -12
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CommonTypes.d.ts +58 -0
- package/dist/CommonTypes.d.ts.map +1 -0
- package/dist/CommonTypes.js +2 -0
- package/dist/CommonTypes.js.map +1 -0
- package/dist/CrossColumnSearch.d.ts +26 -24
- package/dist/CrossColumnSearch.d.ts.map +1 -1
- package/dist/CrossColumnSearch.js +9 -13
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.d.ts +48 -51
- package/dist/FilterInputField.d.ts.map +1 -1
- package/dist/FilterInputField.js +30 -27
- package/dist/FilterInputField.js.map +1 -1
- package/dist/IrisGrid.d.ts +409 -453
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +514 -449
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.d.ts +1 -1
- package/dist/IrisGridCellOverflowModal.d.ts.map +1 -1
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCopyHandler.d.ts +52 -46
- package/dist/IrisGridCopyHandler.d.ts.map +1 -1
- package/dist/IrisGridCopyHandler.js +22 -38
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridMetricCalculator.d.ts +5 -4
- package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
- package/dist/IrisGridMetricCalculator.js +5 -1
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.d.ts +37 -35
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js +19 -3
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelFactory.d.ts +7 -5
- package/dist/IrisGridModelFactory.d.ts.map +1 -1
- package/dist/IrisGridModelFactory.js +5 -5
- package/dist/IrisGridModelFactory.js.map +1 -1
- package/dist/IrisGridModelUpdater.d.ts +13 -11
- package/dist/IrisGridModelUpdater.d.ts.map +1 -1
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.d.ts +38 -39
- package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
- package/dist/IrisGridPartitionSelector.js +18 -24
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.d.ts +111 -32
- package/dist/IrisGridProxyModel.d.ts.map +1 -1
- package/dist/IrisGridProxyModel.js +212 -170
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.d.ts +59 -31
- package/dist/IrisGridRenderer.d.ts.map +1 -1
- package/dist/IrisGridRenderer.js +92 -46
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.d.ts +48 -147
- package/dist/IrisGridTableModel.d.ts.map +1 -1
- package/dist/IrisGridTableModel.js +58 -1381
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.d.ts +219 -0
- package/dist/IrisGridTableModelTemplate.d.ts.map +1 -0
- package/dist/IrisGridTableModelTemplate.js +1623 -0
- package/dist/IrisGridTableModelTemplate.js.map +1 -0
- package/dist/IrisGridTestUtils.d.ts +18 -14
- package/dist/IrisGridTestUtils.d.ts.map +1 -1
- package/dist/IrisGridTestUtils.js +29 -1
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTheme.d.ts +35 -3
- package/dist/IrisGridTheme.d.ts.map +1 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridTreeTableModel.d.ts +26 -7
- package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
- package/dist/IrisGridTreeTableModel.js +24 -14
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.d.ts +257 -162
- package/dist/IrisGridUtils.d.ts.map +1 -1
- package/dist/IrisGridUtils.js +132 -95
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/MissingKeyError.d.ts +5 -3
- package/dist/MissingKeyError.d.ts.map +1 -1
- package/dist/MissingKeyError.js.map +1 -1
- package/dist/PartitionSelectorSearch.d.ts +61 -40
- package/dist/PartitionSelectorSearch.d.ts.map +1 -1
- package/dist/PartitionSelectorSearch.js +25 -15
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/PendingDataBottomBar.d.ts +3 -6
- package/dist/PendingDataBottomBar.d.ts.map +1 -1
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/TableViewportUpdater.d.ts +39 -55
- package/dist/TableViewportUpdater.d.ts.map +1 -1
- package/dist/TableViewportUpdater.js +42 -64
- package/dist/TableViewportUpdater.js.map +1 -1
- package/dist/TreeTableViewportUpdater.d.ts +29 -37
- package/dist/TreeTableViewportUpdater.d.ts.map +1 -1
- package/dist/TreeTableViewportUpdater.js +39 -50
- package/dist/TreeTableViewportUpdater.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +2 -0
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +41 -130
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +426 -317
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js +2 -2
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.d.ts +8 -4
- package/dist/mousehandlers/PendingMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js +4 -5
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/sidebar/ChartBuilder.d.ts +48 -33
- package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
- package/dist/sidebar/ChartBuilder.js +28 -27
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.d.ts +51 -41
- package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +22 -18
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.d.ts +26 -36
- package/dist/sidebar/CustomColumnInput.d.ts.map +1 -1
- package/dist/sidebar/CustomColumnInput.js +11 -20
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.d.ts +34 -35
- package/dist/sidebar/InputEditor.d.ts.map +1 -1
- package/dist/sidebar/InputEditor.js +43 -24
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/RollupRows.d.ts +67 -52
- package/dist/sidebar/RollupRows.d.ts.map +1 -1
- package/dist/sidebar/RollupRows.js +51 -53
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.d.ts +27 -21
- package/dist/sidebar/SelectDistinctBuilder.d.ts.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js +6 -10
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.d.ts +42 -39
- package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +12 -20
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.d.ts +59 -60
- package/dist/sidebar/TableSaver.d.ts.map +1 -1
- package/dist/sidebar/TableSaver.js +154 -68
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.d.ts +56 -45
- package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.js +34 -29
- package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +2 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +6 -5
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +5 -0
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/icons/index.d.ts +7 -7
- package/dist/sidebar/icons/index.d.ts.map +1 -1
- package/dist/sidebar/icons/index.js.map +1 -1
- package/dist/sidebar/index.d.ts +12 -12
- package/dist/sidebar/index.d.ts.map +1 -1
- package/dist/sidebar/index.js.map +1 -1
- 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":"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","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
|
-
|
|
2
|
-
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
5
|
-
|
|
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:
|
|
11
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
89
|
-
|
|
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
|
-
|
|
98
|
-
|
|
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
|
|
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
|
-
|
|
170
|
-
|
|
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"}
|