@deephaven/iris-grid 0.19.2-beta.0 → 0.19.2-beta.4

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 (86) hide show
  1. package/dist/AdvancedFilterCreator.js +1 -1
  2. package/dist/AdvancedFilterCreator.js.map +1 -1
  3. package/dist/AdvancedFilterCreatorSelectValueList.js +1 -1
  4. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  5. package/dist/ColumnStatistics.js +2 -2
  6. package/dist/ColumnStatistics.js.map +1 -1
  7. package/dist/FilterInputField.d.ts.map +1 -1
  8. package/dist/FilterInputField.js +2 -2
  9. package/dist/FilterInputField.js.map +1 -1
  10. package/dist/IrisGrid.d.ts +1 -1
  11. package/dist/IrisGrid.d.ts.map +1 -1
  12. package/dist/IrisGrid.js +8 -6
  13. package/dist/IrisGrid.js.map +1 -1
  14. package/dist/IrisGridCopyHandler.d.ts.map +1 -1
  15. package/dist/IrisGridCopyHandler.js +1 -1
  16. package/dist/IrisGridCopyHandler.js.map +1 -1
  17. package/dist/IrisGridMetricCalculator.js +2 -2
  18. package/dist/IrisGridMetricCalculator.js.map +1 -1
  19. package/dist/IrisGridRenderer.d.ts.map +1 -1
  20. package/dist/IrisGridRenderer.js +23 -20
  21. package/dist/IrisGridRenderer.js.map +1 -1
  22. package/dist/IrisGridTableModel.d.ts.map +1 -1
  23. package/dist/IrisGridTableModel.js +10 -2
  24. package/dist/IrisGridTableModel.js.map +1 -1
  25. package/dist/IrisGridTableModelTemplate.js +34 -26
  26. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  27. package/dist/IrisGridTestUtils.d.ts.map +1 -1
  28. package/dist/IrisGridTestUtils.js +2 -1
  29. package/dist/IrisGridTestUtils.js.map +1 -1
  30. package/dist/IrisGridTreeTableModel.js +1 -1
  31. package/dist/IrisGridTreeTableModel.js.map +1 -1
  32. package/dist/IrisGridUtils.js +4 -4
  33. package/dist/IrisGridUtils.js.map +1 -1
  34. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  35. package/dist/PendingDataBottomBar.js +3 -3
  36. package/dist/PendingDataBottomBar.js.map +1 -1
  37. package/dist/format-context-menus/CustomFormatAction.js +1 -1
  38. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  39. package/dist/format-context-menus/DecimalFormatContextMenu.js +1 -1
  40. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
  41. package/dist/format-context-menus/FormatContextMenuUtils.js +1 -1
  42. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
  43. package/dist/format-context-menus/IntegerFormatContextMenu.js +1 -1
  44. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
  45. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.d.ts.map +1 -1
  46. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +2 -2
  47. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  48. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +2 -2
  49. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  50. package/dist/mousehandlers/IrisGridContextMenuHandler.js +3 -3
  51. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  52. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +2 -2
  53. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  54. package/dist/sidebar/CustomColumnBuilder.d.ts +0 -1
  55. package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
  56. package/dist/sidebar/CustomColumnBuilder.js +0 -6
  57. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  58. package/dist/sidebar/CustomColumnInput.js +1 -1
  59. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  60. package/dist/sidebar/InputEditor.js +2 -2
  61. package/dist/sidebar/InputEditor.js.map +1 -1
  62. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  63. package/dist/sidebar/RollupRows.js +10 -10
  64. package/dist/sidebar/RollupRows.js.map +1 -1
  65. package/dist/sidebar/TableCsvExporter.d.ts +1 -1
  66. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  67. package/dist/sidebar/TableCsvExporter.js +51 -27
  68. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  69. package/dist/sidebar/TableSaver.d.ts +4 -1
  70. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  71. package/dist/sidebar/TableSaver.js +8 -6
  72. package/dist/sidebar/TableSaver.js.map +1 -1
  73. package/dist/sidebar/VisibilityOrderingBuilder.d.ts +3 -3
  74. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
  75. package/dist/sidebar/VisibilityOrderingBuilder.js +2 -2
  76. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  77. package/dist/sidebar/aggregations/Aggregations.js +1 -1
  78. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  79. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  80. package/dist/sidebar/conditional-formatting/ConditionEditor.js +2 -2
  81. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  82. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  83. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  84. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +1 -1
  85. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  86. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"CustomColumnBuilder.js","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"],"sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"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"],"mappings":"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"}
1
+ {"version":3,"file":"CustomColumnBuilder.js","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","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"],"sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"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.successButtonTimer) {\n clearTimeout(this.successButtonTimer);\n }\n }\n\n container: HTMLDivElement | null;\n\n successButtonTimer: ReturnType<typeof setTimeout> | null;\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"],"mappings":"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"}
@@ -22,7 +22,7 @@ class CustomColumnInput extends PureComponent {
22
22
  eventKey
23
23
  } = this.props;
24
24
 
25
- if (formulaValue) {
25
+ if (formulaValue !== undefined && formulaValue !== '') {
26
26
  formulaValue.replace(/(\r\n|\n|\r)/gm, ''); // remove line break
27
27
 
28
28
  onChange(eventKey, CustomColumnInput.INPUT_TYPE.FORMULA, formulaValue);
@@ -1 +1 @@
1
- {"version":3,"file":"CustomColumnInput.js","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"],"sources":["../../src/sidebar/CustomColumnInput.tsx"],"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"],"mappings":";;;;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAmD,OAAnD;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,SAAT,QAA0B,qBAA1B;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,OAAT,QAAwB,uBAAxB;AACA,SAASC,OAAT,EAAkBC,SAAlB,QAAmC,kBAAnC;OACOC,W;;AAiBP,MAAMC,iBAAN,SAAgCR,aAAhC,CAGE;EAgBAS,WAAW,CAACC,KAAD,EAAgC;IACzC,MAAMA,KAAN;IACA,KAAKC,iCAAL,GAAyC,KAAKA,iCAAL,CAAuCC,IAAvC,CACvC,IADuC,CAAzC;EAGD;;EAEDD,iCAAiC,CAACE,YAAD,EAA8B;IAC7D,IAAM;MAAEC,QAAF;MAAYC;IAAZ,IAAyB,KAAKL,KAApC;;IACA,IAAIG,YAAJ,EAAkB;MAChBA,YAAY,CAACG,OAAb,CAAqB,gBAArB,EAAuC,EAAvC,EADgB,CAC4B;;MAC5CF,QAAQ,CACNC,QADM,EAENP,iBAAiB,CAACS,UAAlB,CAA6BC,OAFvB,EAGNL,YAHM,CAAR;IAKD;EACF;;EAEDM,MAAM,GAAiB;IACrB,IAAM;MACJJ,QADI;MAEJK,IAFI;MAGJC,OAHI;MAIJP,QAAQ,EAARA,SAJI;MAKJQ,cALI;MAMJC,UANI;MAOJC,aAPI;MAQJC;IARI,IASF,KAAKf,KATT;IAUA,oBACE,oBAAC,SAAD;MACE,WAAW,EAAEK,QADf;MAEE,KAAK,EAAEQ,UAFT;MAGE,iCAAiC;IAHnC,GAKG,CAACG,QAAD,EAAWC,QAAX,kBACC;MACE,SAAS,EAAE1B,UAAU,CAAC,qBAAD,EAAwB;QAC3C2B,QAAQ,EAAED,QAAQ,CAACE;MADwB,CAAxB,CADvB;MAIE,GAAG,EAAEH,QAAQ,CAACI,QAJhB,CAKE;;IALF,GAMMJ,QAAQ,CAACK,cANf,gBAQE;MAAK,SAAS,EAAC;IAAf,gBACE;MAAK,SAAS,EAAC;IAAf,gBACE;MACE,SAAS,EAAE9B,UAAU,CAAC,kCAAD,EAAqC;QACxD,cAAcwB;MAD0C,CAArC,CADvB;MAIE,WAAW,EAAC,aAJd;MAKE,KAAK,EAAEL,IALT;MAME,QAAQ,EAAEY,KAAK,IAAI;QACjBlB,SAAQ,CACNC,QADM,EAENP,iBAAiB,CAACS,UAAlB,CAA6BgB,IAFvB,EAGND,KAAK,CAACE,MAAN,CAAaC,KAHP,CAAR;MAKD;IAZH,EADF,eAeE;MACE,IAAI,EAAC,QADP;MAEE,SAAS,EAAC,sCAFZ;MAGE,OAAO,EAAE,MAAM;QACbb,cAAc,CAACP,QAAD,CAAd;MACD;IALH,gBAOE,oBAAC,OAAD,+BAPF,eAQE,oBAAC,eAAD;MAAiB,IAAI,EAAEV;IAAvB,EARF,CAfF,eA0BE;MACE,IAAI,EAAC,QADP;MAEE,SAAS,EAAC,iDAFZ,CAGE;;IAHF,GAIMqB,QAAQ,CAACU,eAJf,gBAME,oBAAC,OAAD,kCANF,eAOE,oBAAC,eAAD;MAAiB,IAAI,EAAE9B;IAAvB,EAPF,CA1BF,CADF,eAqCE,oBAAC,WAAD;MACE,cAAc,EAAE;QAAE+B,QAAQ,EAAE;MAAZ,CADlB;MAEE,WAAW,EAAEd,UAFf;MAGE,KAAK,EAAEF,OAHT;MAIE,gBAAgB,EAAE,KAAKV,iCAJzB;MAKE,KAAK,EAAEa,aALT;MAME,OAAO,EAAEC;IANX,EArCF,CARF,eAsDE,+BAtDF,CANJ,CADF;EAkED;;AAhHD;;gBAHIjB,iB,gBAIgB;EAClByB,IAAI,EAAE,MADY;EAElBf,OAAO,EAAE;AAFS,C;;gBAJhBV,iB,kBASkB;EACpBY,IAAI,EAAE,EADc;EAEpBG,UAAU,EAAE,CAFQ;EAGpBF,OAAO,EAAE,EAHW;EAIpBP,QAAQ,EAAE,MAAYwB,SAJF;EAKpBhB,cAAc,EAAE,MAAYgB,SALR;EAMpBd,aAAa,EAAE,MAAYc,SANP;EAOpBb,OAAO,EAAE;AAPW,C;;AA6GxB,eAAejB,iBAAf"}
1
+ {"version":3,"file":"CustomColumnInput.js","names":["React","PureComponent","classNames","Draggable","FontAwesomeIcon","Tooltip","vsTrash","vsGripper","InputEditor","CustomColumnInput","constructor","props","handleFormulaEditorContentChanged","bind","formulaValue","onChange","eventKey","undefined","replace","INPUT_TYPE","FORMULA","render","name","formula","onDeleteColumn","inputIndex","onTabInEditor","invalid","provided","snapshot","dragging","isDragging","innerRef","draggableProps","event","NAME","target","value","dragHandleProps","language"],"sources":["../../src/sidebar/CustomColumnInput.tsx"],"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 !== undefined && 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"],"mappings":"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"}
@@ -108,7 +108,7 @@ export default class InputEditor extends Component {
108
108
  } = this.props;
109
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
110
 
111
- if (value) {
111
+ if (value !== '' && value !== undefined) {
112
112
  this.setState({
113
113
  isEditorEmpty: value.length === 0
114
114
  });
@@ -128,7 +128,7 @@ export default class InputEditor extends Component {
128
128
 
129
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
130
 
131
- if (!value) {
131
+ if (value === undefined || value === '') {
132
132
  throw new Error('value is undefined');
133
133
  }
134
134
 
@@ -1 +1 @@
1
- {"version":3,"file":"InputEditor.js","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"],"sources":["../../src/sidebar/InputEditor.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport * as monaco from 'monaco-editor';\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"],"mappings":"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"}
1
+ {"version":3,"file":"InputEditor.js","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"],"sources":["../../src/sidebar/InputEditor.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport * as monaco from 'monaco-editor';\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 !== '' && value !== undefined) {\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 === undefined || 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"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RollupRows.d.ts","sourceRoot":"","sources":["../../src/sidebar/RollupRows.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RollupRows.d.ts","sourceRoot":"","sources":["../../src/sidebar/RollupRows.tsx"],"names":[],"mappings":"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"}
@@ -27,9 +27,9 @@ class RollupRows extends Component {
27
27
  isClone,
28
28
  selectedCount
29
29
  } = _ref;
30
- var text = item && item.name;
31
- var badgeText = isClone ? "".concat(selectedCount) : undefined;
32
- var className = isClone ? 'item-list-item-clone' : '';
30
+ var text = item === null || item === void 0 ? void 0 : item.name;
31
+ var badgeText = isClone !== undefined && isClone ? "".concat(selectedCount) : undefined;
32
+ var className = isClone !== undefined && isClone ? 'item-list-item-clone' : '';
33
33
  return DraggableItemList.renderTextItem({
34
34
  text,
35
35
  badgeText,
@@ -98,7 +98,7 @@ class RollupRows extends Component {
98
98
  }
99
99
  }, DEBOUNCE_SEARCH));
100
100
 
101
- _defineProperty(this, "getCachedUngroupedColumns", memoize((columns, groupedColumns) => columns.filter(column => RollupRows.isGroupable(column) && !groupedColumns.find(name => name === column.name))));
101
+ _defineProperty(this, "getCachedUngroupedColumns", memoize((columns, groupedColumns) => columns.filter(column => RollupRows.isGroupable(column) && groupedColumns.find(name => name === column.name) != null)));
102
102
 
103
103
  _defineProperty(this, "getCachedSortedColumns", memoize((columns, sort) => sort == null ? [...columns] : TableUtils.sortColumns(columns, sort === RollupRows.SORT.ASCENDING)));
104
104
 
@@ -424,15 +424,15 @@ class RollupRows extends Component {
424
424
  isClone,
425
425
  selectedCount
426
426
  } = _ref12;
427
- var indent = isClone ? '' : '\u00A0\u00A0'.repeat(itemIndex);
427
+ var indent = isClone !== undefined && isClone ? '' : '\u00A0\u00A0'.repeat(itemIndex);
428
428
  var text = "".concat(indent).concat(item);
429
- var badgeText = isClone ? "".concat(selectedCount) : undefined;
430
- var className = isClone ? 'item-list-item-clone' : '';
429
+ var badgeText = isClone !== undefined && isClone ? "".concat(selectedCount) : undefined;
430
+ var className = isClone !== undefined && isClone ? 'item-list-item-clone' : '';
431
431
  return /*#__PURE__*/React.createElement(React.Fragment, null, DraggableItemList.renderTextItem({
432
432
  text,
433
433
  badgeText,
434
434
  className
435
- }), !isClone && /*#__PURE__*/React.createElement(Button, {
435
+ }), (isClone === undefined || !isClone) && /*#__PURE__*/React.createElement(Button, {
436
436
  kind: "ghost",
437
437
  className: "btn btn-link btn-link-icon btn-delete-grouping float-right",
438
438
  onClick: () => this.handleDeleteClicked(itemIndex)
@@ -562,8 +562,8 @@ class RollupRows extends Component {
562
562
  }
563
563
 
564
564
  _defineProperty(RollupRows, "SORT", Object.freeze({
565
- ASCENDING: 'ASCENDING',
566
- DESCENDING: 'DESCENDING'
565
+ ASCENDING: 'ASC',
566
+ DESCENDING: 'DESC'
567
567
  }));
568
568
 
569
569
  _defineProperty(RollupRows, "defaultProps", {
@@ -1 +1 @@
1
- {"version":3,"file":"RollupRows.js","names":["React","Component","classNames","FontAwesomeIcon","DragDropContext","Droppable","Checkbox","DraggableItemList","DragUtils","SearchInput","Tooltip","Button","vsTrash","dhSortAlphaDown","dhSortAlphaUp","TableUtils","memoize","debounce","Log","assertNotNull","log","module","DEBOUNCE_SEARCH","GROUPED_LIST_ID","UNGROUPED_LIST_ID","RollupRows","renderColumn","item","isClone","selectedCount","text","name","badgeText","undefined","className","renderTextItem","addGroupings","currentGroupings","newGroupings","index","length","insertIndex","groupings","filter","grouping","i","includes","splice","isGroupable","column","isDecimalType","type","constructor","props","searchFilter","columns","getSortedUngroupedColumns","selectedRanges","focusIndex","toLowerCase","push","setState","ungroupedSelectedRanges","ungroupedList","current","scrollToItem","groupedColumns","find","sort","sortColumns","SORT","ASCENDING","search","bind","handleDeleteClicked","handleSearchChange","handleUngroupedSelect","handleUngroupedSelectionChange","handleDragStart","handleDragEnd","handleGroupedSelectionChange","handleShowConstituentsChange","handleShowNonAggregatedColumnsChange","handleSortAscending","handleSortDescending","renderGroupedItem","createRef","groupedList","config","showConstituents","showNonAggregatedColumns","state","groupedSelectedRanges","dragSource","componentDidUpdate","prevProps","prevState","updateFromConfig","sendChange","componentWillUnmount","cancel","event","target","value","resetSelection","DESCENDING","e","debug","document","documentElement","classList","add","source","remove","destination","droppableId","newColumns","reorder","isSameList","destinationIndex","sourceItems","map","c","sourceRanges","draggedItems","adjustDestinationIndex","newSelectedRanges","itemIndex","debug2","stateUngroupedSelectedRanges","stateGroupedSelectedRanges","slice","onChange","getUngroupedColumns","model","originalColumns","getCachedUngroupedColumns","getCachedSortedColumns","indent","repeat","render","ungroupedColumns","groupListHeight","DEFAULT_ROW_HEIGHT","ungroupMaxListHeight","ungroupMinListHeight","Math","min","provided","snapshot","draggingFromThisWith","isDraggingOver","draggingOverWith","innerRef","droppableProps","height","active","maxHeight","minHeight","Object","freeze"],"sources":["../../src/sidebar/RollupRows.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { ChangeEvent, Component, ReactElement, RefObject } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n DragDropContext,\n DraggableLocation,\n DragStart,\n Droppable,\n DropResult,\n} from 'react-beautiful-dnd';\nimport {\n Checkbox,\n DraggableItemList,\n DragUtils,\n SearchInput,\n Tooltip,\n Range,\n RenderItemProps,\n Button,\n} from '@deephaven/components';\nimport { vsTrash, dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport { TableUtils, SortDirection } from '@deephaven/jsapi-utils';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { assertNotNull } from '@deephaven/utils';\nimport './RollupRows.scss';\nimport { Column } from '@deephaven/jsapi-shim';\nimport IrisGridModel from '../IrisGridModel';\nimport { ColumnName } from '../CommonTypes';\n\nconst log = Log.module('RollupRows');\nconst DEBOUNCE_SEARCH = 150;\nconst GROUPED_LIST_ID = 'grouped-rollup-rows';\nconst UNGROUPED_LIST_ID = 'ungrouped-rollup-rows';\n\nexport interface UIRollupConfig {\n columns: ColumnName[];\n showConstituents: boolean;\n showNonAggregatedColumns: boolean;\n includeDescriptions: true;\n}\n\ninterface RollupRowsProps {\n model: IrisGridModel;\n onChange: (rollupConfig: UIRollupConfig) => void;\n config: UIRollupConfig | null;\n}\n\ninterface RollupRowsState {\n ungroupedSelectedRanges: Range[];\n columns: ColumnName[];\n groupedSelectedRanges: Range[];\n searchFilter: string;\n showConstituents: boolean;\n showNonAggregatedColumns: boolean;\n dragSource: DraggableLocation | null;\n sort: SortDirection;\n}\n\nclass RollupRows extends Component<RollupRowsProps, RollupRowsState> {\n static SORT = Object.freeze({\n ASCENDING: 'ASCENDING',\n DESCENDING: 'DESCENDING',\n });\n\n static defaultProps = {\n config: null,\n onChange: (): void => undefined,\n };\n\n static renderColumn({\n item,\n isClone,\n selectedCount,\n }: RenderItemProps<Column> & {\n isClone?: boolean;\n selectedCount?: number;\n }): ReactElement {\n const text = item && item.name;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static addGroupings(\n currentGroupings: string[],\n newGroupings: string[],\n index: number = currentGroupings.length\n ): string[] {\n if (newGroupings == null || newGroupings.length === 0) {\n return currentGroupings;\n }\n\n let insertIndex = index;\n const groupings = currentGroupings.filter((grouping, i) => {\n if (newGroupings.includes(grouping)) {\n if (i < insertIndex) {\n insertIndex -= 1;\n }\n return false;\n }\n return true;\n });\n groupings.splice(insertIndex, 0, ...newGroupings);\n return groupings;\n }\n\n static isGroupable(column: Column): boolean {\n return !TableUtils.isDecimalType(column.type);\n }\n\n constructor(props: RollupRowsProps) {\n super(props);\n\n this.search = this.search.bind(this);\n\n this.handleDeleteClicked = this.handleDeleteClicked.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUngroupedSelect = this.handleUngroupedSelect.bind(this);\n this.handleUngroupedSelectionChange = this.handleUngroupedSelectionChange.bind(\n this\n );\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleGroupedSelectionChange = this.handleGroupedSelectionChange.bind(\n this\n );\n this.handleShowConstituentsChange = this.handleShowConstituentsChange.bind(\n this\n );\n this.handleShowNonAggregatedColumnsChange = this.handleShowNonAggregatedColumnsChange.bind(\n this\n );\n this.handleSortAscending = this.handleSortAscending.bind(this);\n this.handleSortDescending = this.handleSortDescending.bind(this);\n this.renderGroupedItem = this.renderGroupedItem.bind(this);\n\n this.ungroupedList = React.createRef();\n this.groupedList = React.createRef();\n\n const { config } = props;\n const {\n columns = [],\n showConstituents = true,\n showNonAggregatedColumns = true,\n } = config ?? {};\n\n this.state = {\n ungroupedSelectedRanges: [],\n columns,\n groupedSelectedRanges: [],\n searchFilter: '',\n showConstituents,\n showNonAggregatedColumns,\n dragSource: null,\n sort: null,\n };\n }\n\n componentDidUpdate(\n prevProps: RollupRowsProps,\n prevState: RollupRowsState\n ): void {\n const { config } = this.props;\n const { columns, showConstituents, showNonAggregatedColumns } = this.state;\n if (config !== prevProps.config) {\n this.updateFromConfig();\n } else if (\n columns !== prevState.columns ||\n showConstituents !== prevState.showConstituents ||\n showNonAggregatedColumns !== prevState.showNonAggregatedColumns\n ) {\n if (\n config == null ||\n columns !== config.columns ||\n showConstituents !== config.showConstituents ||\n showNonAggregatedColumns !== config.showNonAggregatedColumns\n ) {\n this.sendChange();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.search.cancel();\n }\n\n ungroupedList: RefObject<DraggableItemList<Column>>;\n\n groupedList: RefObject<DraggableItemList<string>>;\n\n handleSearchChange(event: ChangeEvent<HTMLInputElement>): void {\n const searchFilter = event.target.value;\n this.setState({ searchFilter });\n if (!searchFilter) {\n this.search.cancel();\n this.resetSelection();\n return;\n }\n this.search(searchFilter);\n }\n\n handleSortAscending(): void {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.ASCENDING\n ? null\n : (RollupRows.SORT.ASCENDING as SortDirection),\n }));\n }\n\n handleSortDescending(): void {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.DESCENDING\n ? null\n : (RollupRows.SORT.DESCENDING as SortDirection),\n }));\n }\n\n resetSelection(): void {\n this.setState({ ungroupedSelectedRanges: [], groupedSelectedRanges: [] });\n }\n\n search = debounce((searchFilter: string) => {\n const columns = this.getSortedUngroupedColumns();\n const selectedRanges = [] as Range[];\n let focusIndex = null;\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n if (column.name.toLowerCase().includes(searchFilter.toLowerCase())) {\n if (focusIndex == null) {\n focusIndex = i;\n }\n selectedRanges.push([i, i]);\n }\n }\n assertNotNull(focusIndex);\n this.setState({ ungroupedSelectedRanges: selectedRanges });\n\n if (selectedRanges.length > 0 && this.ungroupedList.current) {\n this.ungroupedList.current.scrollToItem(focusIndex);\n }\n }, DEBOUNCE_SEARCH);\n\n handleDragStart(e: DragStart): void {\n log.debug('handleDragStart', e);\n\n document.documentElement.classList.add('drag-pointer-events-none');\n\n this.setState({ dragSource: e.source });\n }\n\n handleDragEnd(e: DropResult): void {\n log.debug('handleDragEnd', e);\n\n document.documentElement.classList.remove('drag-pointer-events-none');\n\n this.setState({ dragSource: null });\n\n const { destination, source } = e;\n if (destination == null || source == null) {\n return;\n }\n\n // We don't allow dragging within the ungrouped list, so if we're dragging into the ungrouped list,\n // it must have came from the grouped list. Remove those grouped columns.\n if (destination.droppableId === UNGROUPED_LIST_ID) {\n this.setState(({ groupedSelectedRanges, columns }) => {\n const newColumns = [...columns];\n DragUtils.reorder(newColumns, groupedSelectedRanges, [], 0);\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: [],\n };\n });\n return;\n }\n\n // Otherwise, it must be dropping into the grouped list, so we just need to check the source\n const isSameList = source.droppableId === GROUPED_LIST_ID;\n let destinationIndex = destination.index;\n if (isSameList && source.index < destination.index) {\n // react-beautiful-dnd adjusts the index when dragging within a list already, however that only supports single selection\n // We need to change it back to the index we actually want it to drop at before adjusting for the removed source index, as\n // we adjust the index based on all the selected ranges, not just the source.index.\n destinationIndex += 1;\n }\n this.setState(\n ({ columns, ungroupedSelectedRanges, groupedSelectedRanges }) => {\n const newColumns = [...columns];\n const sourceItems = isSameList\n ? newColumns\n : this.getSortedUngroupedColumns().map(c => c.name);\n const sourceRanges = isSameList\n ? groupedSelectedRanges\n : ungroupedSelectedRanges;\n const draggedItems = DragUtils.reorder(\n sourceItems,\n sourceRanges,\n newColumns,\n destinationIndex\n );\n\n // Select the newly dropped items\n const insertIndex = isSameList\n ? DragUtils.adjustDestinationIndex(\n destinationIndex,\n groupedSelectedRanges\n )\n : destinationIndex;\n const newSelectedRanges = [\n [insertIndex, insertIndex + draggedItems.length - 1] as Range,\n ];\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [] as Range[],\n groupedSelectedRanges: newSelectedRanges,\n };\n }\n );\n this.resetSelection();\n }\n\n handleUngroupedSelect(itemIndex: number): void {\n log.debug('handleUngroupedSelect');\n\n this.setState(({ columns }) => ({\n columns: RollupRows.addGroupings(columns, [\n this.getSortedUngroupedColumns()[itemIndex].name,\n ]),\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: [],\n }));\n }\n\n handleUngroupedSelectionChange(ungroupedSelectedRanges: Range[]): void {\n log.debug2('handleUngroupedSelectionChange', ungroupedSelectedRanges);\n this.setState(\n ({ ungroupedSelectedRanges: stateUngroupedSelectedRanges }) => {\n if (ungroupedSelectedRanges === stateUngroupedSelectedRanges) {\n return null;\n }\n\n return { ungroupedSelectedRanges, groupedSelectedRanges: [] };\n }\n );\n }\n\n handleGroupedSelectionChange(groupedSelectedRanges: Range[]): void {\n log.debug2('handleGroupedSelectedRanges', groupedSelectedRanges);\n this.setState(({ groupedSelectedRanges: stateGroupedSelectedRanges }) => {\n if (groupedSelectedRanges === stateGroupedSelectedRanges) {\n return null;\n }\n\n return { groupedSelectedRanges, ungroupedSelectedRanges: [] };\n });\n }\n\n handleDeleteClicked(index: number): void {\n this.setState(({ columns }) => {\n const newColumns = columns.slice();\n newColumns.splice(index, 1);\n return { columns: newColumns };\n });\n }\n\n handleShowConstituentsChange(): void {\n this.setState(({ showConstituents }) => ({\n showConstituents: !showConstituents,\n }));\n }\n\n handleShowNonAggregatedColumnsChange(): void {\n this.setState(({ showNonAggregatedColumns }) => ({\n showNonAggregatedColumns: !showNonAggregatedColumns,\n }));\n }\n\n updateFromConfig(): void {\n const { config } = this.props;\n const {\n columns = [],\n showConstituents = true,\n showNonAggregatedColumns = true,\n } = config ?? {};\n this.setState({ columns, showConstituents, showNonAggregatedColumns });\n }\n\n sendChange(): void {\n const { onChange } = this.props;\n const { columns, showConstituents, showNonAggregatedColumns } = this.state;\n onChange({\n columns,\n showConstituents,\n showNonAggregatedColumns,\n } as UIRollupConfig);\n }\n\n getCachedUngroupedColumns = memoize(\n (columns: Column[], groupedColumns: ColumnName[]): Column[] =>\n columns.filter(\n column =>\n RollupRows.isGroupable(column) &&\n !groupedColumns.find(name => name === column.name)\n )\n );\n\n getCachedSortedColumns = memoize(\n (columns: Column[], sort?: SortDirection): Column[] =>\n sort == null\n ? [...columns]\n : TableUtils.sortColumns(columns, sort === RollupRows.SORT.ASCENDING)\n );\n\n getUngroupedColumns(): Column[] {\n const { model } = this.props;\n const { columns } = this.state;\n const { originalColumns } = model;\n\n return this.getCachedUngroupedColumns(originalColumns, columns);\n }\n\n getSortedUngroupedColumns(): Column[] {\n const { sort } = this.state;\n const columns = this.getUngroupedColumns();\n return this.getCachedSortedColumns(columns, sort);\n }\n\n renderGroupedItem({\n item,\n itemIndex,\n isClone,\n selectedCount,\n }: RenderItemProps<string> & {\n isClone?: boolean;\n selectedCount?: number;\n }): ReactElement {\n const indent = isClone ? '' : '\\u00A0\\u00A0'.repeat(itemIndex);\n const text = `${indent}${item}`;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : '';\n return (\n <>\n {DraggableItemList.renderTextItem({ text, badgeText, className })}\n {!isClone && (\n <Button\n kind=\"ghost\"\n className=\"btn btn-link btn-link-icon btn-delete-grouping float-right\"\n onClick={() => this.handleDeleteClicked(itemIndex)}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </Button>\n )}\n </>\n );\n }\n\n render(): ReactElement {\n const {\n columns,\n dragSource,\n searchFilter,\n groupedSelectedRanges,\n ungroupedSelectedRanges,\n showConstituents,\n showNonAggregatedColumns,\n sort,\n } = this.state;\n\n const ungroupedColumns = this.getSortedUngroupedColumns();\n let groupListHeight = columns.length * DraggableItemList.DEFAULT_ROW_HEIGHT;\n if (dragSource?.droppableId === UNGROUPED_LIST_ID) {\n groupListHeight += DraggableItemList.DEFAULT_ROW_HEIGHT;\n }\n const ungroupMaxListHeight =\n ungroupedColumns.length * DraggableItemList.DEFAULT_ROW_HEIGHT + 10;\n const ungroupMinListHeight = Math.min(\n 3 * DraggableItemList.DEFAULT_ROW_HEIGHT,\n ungroupMaxListHeight\n );\n\n return (\n <div\n role=\"menu\"\n className={classNames('rollup-rows', {\n 'is-dragging': dragSource != null,\n })}\n tabIndex={0}\n >\n <DragDropContext\n onDragEnd={this.handleDragEnd}\n onDragStart={this.handleDragStart}\n >\n <div className=\"rollup-rows-group-by\">\n <div className=\"section-title\">Group By</div>\n {columns.length === 0 && (\n <Droppable isDropDisabled droppableId=\"placeholder\">\n {(provided, snapshot) => (\n <div\n className={classNames('placeholder', 'text-muted', {\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n Create rollup by dragging columns here, from the available\n columns list below.\n </div>\n )}\n </Droppable>\n )}\n {columns.length > 0 && (\n <DraggableItemList\n draggingItemClassName=\"rollup-rows-dragging-grouped-item\"\n draggablePrefix={GROUPED_LIST_ID}\n droppableId={GROUPED_LIST_ID}\n itemCount={columns.length}\n items={columns}\n offset={0}\n onSelectionChange={this.handleGroupedSelectionChange}\n ref={this.groupedList}\n renderItem={this.renderGroupedItem}\n selectedRanges={groupedSelectedRanges}\n style={{ height: groupListHeight }}\n isMultiSelect\n />\n )}\n </div>\n <div className=\"rollup-rows-available-columns\">\n <div className=\"section-title\">Available Grouping Columns</div>\n <div className=\"top-menu\">\n <SearchInput\n className=\"w-100\"\n value={searchFilter}\n matchCount={\n searchFilter ? ungroupedSelectedRanges.length : undefined\n }\n placeholder=\"Find column...\"\n onChange={this.handleSearchChange}\n />\n <Button\n kind=\"ghost\"\n className={classNames('btn-link btn-link-icon', {\n active: sort === RollupRows.SORT.ASCENDING,\n })}\n onClick={this.handleSortAscending}\n >\n <FontAwesomeIcon icon={dhSortAlphaDown} />\n <Tooltip>Sort ascending</Tooltip>\n </Button>\n <Button\n kind=\"ghost\"\n className={classNames('btn-link btn-link-icon', {\n active: sort === RollupRows.SORT.DESCENDING,\n })}\n onClick={this.handleSortDescending}\n >\n <FontAwesomeIcon icon={dhSortAlphaUp} />\n <Tooltip>Sort descending</Tooltip>\n </Button>\n </div>\n <DraggableItemList\n className=\"rollup-available-grouping-columns\"\n draggablePrefix={UNGROUPED_LIST_ID}\n droppableId={UNGROUPED_LIST_ID}\n itemCount={ungroupedColumns.length}\n items={ungroupedColumns}\n renderItem={RollupRows.renderColumn}\n offset={0}\n onSelect={this.handleUngroupedSelect}\n onSelectionChange={this.handleUngroupedSelectionChange}\n ref={this.ungroupedList}\n selectedRanges={ungroupedSelectedRanges}\n style={{\n maxHeight: ungroupMaxListHeight,\n minHeight: ungroupMinListHeight,\n }}\n isDropDisabled={dragSource?.droppableId !== GROUPED_LIST_ID}\n isMultiSelect\n />\n <div className=\"bottom-menu\">\n <div className=\"label\">Show:</div>\n <Checkbox\n checked={showConstituents}\n onChange={this.handleShowConstituentsChange}\n >\n Constituents\n </Checkbox>\n <Checkbox\n checked={showNonAggregatedColumns}\n onChange={this.handleShowNonAggregatedColumnsChange}\n >\n Non-Aggregated Columns\n </Checkbox>\n </div>\n </div>\n </DragDropContext>\n </div>\n );\n }\n}\n\nexport default RollupRows;\n"],"mappings":"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"}
1
+ {"version":3,"file":"RollupRows.js","names":["React","Component","classNames","FontAwesomeIcon","DragDropContext","Droppable","Checkbox","DraggableItemList","DragUtils","SearchInput","Tooltip","Button","vsTrash","dhSortAlphaDown","dhSortAlphaUp","TableUtils","memoize","debounce","Log","assertNotNull","log","module","DEBOUNCE_SEARCH","GROUPED_LIST_ID","UNGROUPED_LIST_ID","RollupRows","renderColumn","item","isClone","selectedCount","text","name","badgeText","undefined","className","renderTextItem","addGroupings","currentGroupings","newGroupings","index","length","insertIndex","groupings","filter","grouping","i","includes","splice","isGroupable","column","isDecimalType","type","constructor","props","searchFilter","columns","getSortedUngroupedColumns","selectedRanges","focusIndex","toLowerCase","push","setState","ungroupedSelectedRanges","ungroupedList","current","scrollToItem","groupedColumns","find","sort","sortColumns","SORT","ASCENDING","search","bind","handleDeleteClicked","handleSearchChange","handleUngroupedSelect","handleUngroupedSelectionChange","handleDragStart","handleDragEnd","handleGroupedSelectionChange","handleShowConstituentsChange","handleShowNonAggregatedColumnsChange","handleSortAscending","handleSortDescending","renderGroupedItem","createRef","groupedList","config","showConstituents","showNonAggregatedColumns","state","groupedSelectedRanges","dragSource","componentDidUpdate","prevProps","prevState","updateFromConfig","sendChange","componentWillUnmount","cancel","event","target","value","resetSelection","DESCENDING","e","debug","document","documentElement","classList","add","source","remove","destination","droppableId","newColumns","reorder","isSameList","destinationIndex","sourceItems","map","c","sourceRanges","draggedItems","adjustDestinationIndex","newSelectedRanges","itemIndex","debug2","stateUngroupedSelectedRanges","stateGroupedSelectedRanges","slice","onChange","getUngroupedColumns","model","originalColumns","getCachedUngroupedColumns","getCachedSortedColumns","indent","repeat","render","ungroupedColumns","groupListHeight","DEFAULT_ROW_HEIGHT","ungroupMaxListHeight","ungroupMinListHeight","Math","min","provided","snapshot","draggingFromThisWith","isDraggingOver","draggingOverWith","innerRef","droppableProps","height","active","maxHeight","minHeight","Object","freeze"],"sources":["../../src/sidebar/RollupRows.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { ChangeEvent, Component, ReactElement, RefObject } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n DragDropContext,\n DraggableLocation,\n DragStart,\n Droppable,\n DropResult,\n} from 'react-beautiful-dnd';\nimport {\n Checkbox,\n DraggableItemList,\n DragUtils,\n SearchInput,\n Tooltip,\n Range,\n RenderItemProps,\n Button,\n} from '@deephaven/components';\nimport { vsTrash, dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport { TableUtils, SortDirection } from '@deephaven/jsapi-utils';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { assertNotNull } from '@deephaven/utils';\nimport './RollupRows.scss';\nimport { Column } from '@deephaven/jsapi-shim';\nimport IrisGridModel from '../IrisGridModel';\nimport { ColumnName } from '../CommonTypes';\n\nconst log = Log.module('RollupRows');\nconst DEBOUNCE_SEARCH = 150;\nconst GROUPED_LIST_ID = 'grouped-rollup-rows';\nconst UNGROUPED_LIST_ID = 'ungrouped-rollup-rows';\n\nexport interface UIRollupConfig {\n columns: ColumnName[];\n showConstituents: boolean;\n showNonAggregatedColumns: boolean;\n includeDescriptions: true;\n}\n\ninterface RollupRowsProps {\n model: IrisGridModel;\n onChange: (rollupConfig: UIRollupConfig) => void;\n config: UIRollupConfig | null;\n}\n\ninterface RollupRowsState {\n ungroupedSelectedRanges: Range[];\n columns: ColumnName[];\n groupedSelectedRanges: Range[];\n searchFilter: string;\n showConstituents: boolean;\n showNonAggregatedColumns: boolean;\n dragSource: DraggableLocation | null;\n sort: SortDirection;\n}\n\nclass RollupRows extends Component<RollupRowsProps, RollupRowsState> {\n static SORT = Object.freeze({\n ASCENDING: 'ASC',\n DESCENDING: 'DESC',\n });\n\n static defaultProps = {\n config: null,\n onChange: (): void => undefined,\n };\n\n static renderColumn({\n item,\n isClone,\n selectedCount,\n }: RenderItemProps<Column> & {\n isClone?: boolean;\n selectedCount?: number;\n }): ReactElement {\n const text = item?.name;\n const badgeText =\n isClone !== undefined && isClone ? `${selectedCount}` : undefined;\n const className =\n isClone !== undefined && isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static addGroupings(\n currentGroupings: string[],\n newGroupings: string[],\n index: number = currentGroupings.length\n ): string[] {\n if (newGroupings == null || newGroupings.length === 0) {\n return currentGroupings;\n }\n\n let insertIndex = index;\n const groupings = currentGroupings.filter((grouping, i) => {\n if (newGroupings.includes(grouping)) {\n if (i < insertIndex) {\n insertIndex -= 1;\n }\n return false;\n }\n return true;\n });\n groupings.splice(insertIndex, 0, ...newGroupings);\n return groupings;\n }\n\n static isGroupable(column: Column): boolean {\n return !TableUtils.isDecimalType(column.type);\n }\n\n constructor(props: RollupRowsProps) {\n super(props);\n\n this.search = this.search.bind(this);\n\n this.handleDeleteClicked = this.handleDeleteClicked.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUngroupedSelect = this.handleUngroupedSelect.bind(this);\n this.handleUngroupedSelectionChange = this.handleUngroupedSelectionChange.bind(\n this\n );\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleGroupedSelectionChange = this.handleGroupedSelectionChange.bind(\n this\n );\n this.handleShowConstituentsChange = this.handleShowConstituentsChange.bind(\n this\n );\n this.handleShowNonAggregatedColumnsChange = this.handleShowNonAggregatedColumnsChange.bind(\n this\n );\n this.handleSortAscending = this.handleSortAscending.bind(this);\n this.handleSortDescending = this.handleSortDescending.bind(this);\n this.renderGroupedItem = this.renderGroupedItem.bind(this);\n\n this.ungroupedList = React.createRef();\n this.groupedList = React.createRef();\n\n const { config } = props;\n const {\n columns = [],\n showConstituents = true,\n showNonAggregatedColumns = true,\n } = config ?? {};\n\n this.state = {\n ungroupedSelectedRanges: [],\n columns,\n groupedSelectedRanges: [],\n searchFilter: '',\n showConstituents,\n showNonAggregatedColumns,\n dragSource: null,\n sort: null,\n };\n }\n\n componentDidUpdate(\n prevProps: RollupRowsProps,\n prevState: RollupRowsState\n ): void {\n const { config } = this.props;\n const { columns, showConstituents, showNonAggregatedColumns } = this.state;\n if (config !== prevProps.config) {\n this.updateFromConfig();\n } else if (\n columns !== prevState.columns ||\n showConstituents !== prevState.showConstituents ||\n showNonAggregatedColumns !== prevState.showNonAggregatedColumns\n ) {\n if (\n config == null ||\n columns !== config.columns ||\n showConstituents !== config.showConstituents ||\n showNonAggregatedColumns !== config.showNonAggregatedColumns\n ) {\n this.sendChange();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.search.cancel();\n }\n\n ungroupedList: RefObject<DraggableItemList<Column>>;\n\n groupedList: RefObject<DraggableItemList<string>>;\n\n handleSearchChange(event: ChangeEvent<HTMLInputElement>): void {\n const searchFilter = event.target.value;\n this.setState({ searchFilter });\n if (!searchFilter) {\n this.search.cancel();\n this.resetSelection();\n return;\n }\n this.search(searchFilter);\n }\n\n handleSortAscending(): void {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.ASCENDING\n ? null\n : (RollupRows.SORT.ASCENDING as SortDirection),\n }));\n }\n\n handleSortDescending(): void {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.DESCENDING\n ? null\n : (RollupRows.SORT.DESCENDING as SortDirection),\n }));\n }\n\n resetSelection(): void {\n this.setState({ ungroupedSelectedRanges: [], groupedSelectedRanges: [] });\n }\n\n search = debounce((searchFilter: string) => {\n const columns = this.getSortedUngroupedColumns();\n const selectedRanges = [] as Range[];\n let focusIndex = null;\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n if (column.name.toLowerCase().includes(searchFilter.toLowerCase())) {\n if (focusIndex == null) {\n focusIndex = i;\n }\n selectedRanges.push([i, i]);\n }\n }\n assertNotNull(focusIndex);\n this.setState({ ungroupedSelectedRanges: selectedRanges });\n\n if (selectedRanges.length > 0 && this.ungroupedList.current) {\n this.ungroupedList.current.scrollToItem(focusIndex);\n }\n }, DEBOUNCE_SEARCH);\n\n handleDragStart(e: DragStart): void {\n log.debug('handleDragStart', e);\n\n document.documentElement.classList.add('drag-pointer-events-none');\n\n this.setState({ dragSource: e.source });\n }\n\n handleDragEnd(e: DropResult): void {\n log.debug('handleDragEnd', e);\n\n document.documentElement.classList.remove('drag-pointer-events-none');\n\n this.setState({ dragSource: null });\n\n const { destination, source } = e;\n if (destination == null || source == null) {\n return;\n }\n\n // We don't allow dragging within the ungrouped list, so if we're dragging into the ungrouped list,\n // it must have came from the grouped list. Remove those grouped columns.\n if (destination.droppableId === UNGROUPED_LIST_ID) {\n this.setState(({ groupedSelectedRanges, columns }) => {\n const newColumns = [...columns];\n DragUtils.reorder(newColumns, groupedSelectedRanges, [], 0);\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: [],\n };\n });\n return;\n }\n\n // Otherwise, it must be dropping into the grouped list, so we just need to check the source\n const isSameList = source.droppableId === GROUPED_LIST_ID;\n let destinationIndex = destination.index;\n if (isSameList && source.index < destination.index) {\n // react-beautiful-dnd adjusts the index when dragging within a list already, however that only supports single selection\n // We need to change it back to the index we actually want it to drop at before adjusting for the removed source index, as\n // we adjust the index based on all the selected ranges, not just the source.index.\n destinationIndex += 1;\n }\n this.setState(\n ({ columns, ungroupedSelectedRanges, groupedSelectedRanges }) => {\n const newColumns = [...columns];\n const sourceItems = isSameList\n ? newColumns\n : this.getSortedUngroupedColumns().map(c => c.name);\n const sourceRanges = isSameList\n ? groupedSelectedRanges\n : ungroupedSelectedRanges;\n const draggedItems = DragUtils.reorder(\n sourceItems,\n sourceRanges,\n newColumns,\n destinationIndex\n );\n\n // Select the newly dropped items\n const insertIndex = isSameList\n ? DragUtils.adjustDestinationIndex(\n destinationIndex,\n groupedSelectedRanges\n )\n : destinationIndex;\n const newSelectedRanges = [\n [insertIndex, insertIndex + draggedItems.length - 1] as Range,\n ];\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [] as Range[],\n groupedSelectedRanges: newSelectedRanges,\n };\n }\n );\n this.resetSelection();\n }\n\n handleUngroupedSelect(itemIndex: number): void {\n log.debug('handleUngroupedSelect');\n\n this.setState(({ columns }) => ({\n columns: RollupRows.addGroupings(columns, [\n this.getSortedUngroupedColumns()[itemIndex].name,\n ]),\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: [],\n }));\n }\n\n handleUngroupedSelectionChange(ungroupedSelectedRanges: Range[]): void {\n log.debug2('handleUngroupedSelectionChange', ungroupedSelectedRanges);\n this.setState(\n ({ ungroupedSelectedRanges: stateUngroupedSelectedRanges }) => {\n if (ungroupedSelectedRanges === stateUngroupedSelectedRanges) {\n return null;\n }\n\n return { ungroupedSelectedRanges, groupedSelectedRanges: [] };\n }\n );\n }\n\n handleGroupedSelectionChange(groupedSelectedRanges: Range[]): void {\n log.debug2('handleGroupedSelectedRanges', groupedSelectedRanges);\n this.setState(({ groupedSelectedRanges: stateGroupedSelectedRanges }) => {\n if (groupedSelectedRanges === stateGroupedSelectedRanges) {\n return null;\n }\n\n return { groupedSelectedRanges, ungroupedSelectedRanges: [] };\n });\n }\n\n handleDeleteClicked(index: number): void {\n this.setState(({ columns }) => {\n const newColumns = columns.slice();\n newColumns.splice(index, 1);\n return { columns: newColumns };\n });\n }\n\n handleShowConstituentsChange(): void {\n this.setState(({ showConstituents }) => ({\n showConstituents: !showConstituents,\n }));\n }\n\n handleShowNonAggregatedColumnsChange(): void {\n this.setState(({ showNonAggregatedColumns }) => ({\n showNonAggregatedColumns: !showNonAggregatedColumns,\n }));\n }\n\n updateFromConfig(): void {\n const { config } = this.props;\n const {\n columns = [],\n showConstituents = true,\n showNonAggregatedColumns = true,\n } = config ?? {};\n this.setState({ columns, showConstituents, showNonAggregatedColumns });\n }\n\n sendChange(): void {\n const { onChange } = this.props;\n const { columns, showConstituents, showNonAggregatedColumns } = this.state;\n onChange({\n columns,\n showConstituents,\n showNonAggregatedColumns,\n } as UIRollupConfig);\n }\n\n getCachedUngroupedColumns = memoize(\n (columns: Column[], groupedColumns: ColumnName[]): Column[] =>\n columns.filter(\n column =>\n RollupRows.isGroupable(column) &&\n groupedColumns.find(name => name === column.name) != null\n )\n );\n\n getCachedSortedColumns = memoize(\n (columns: Column[], sort?: SortDirection): Column[] =>\n sort == null\n ? [...columns]\n : TableUtils.sortColumns(columns, sort === RollupRows.SORT.ASCENDING)\n );\n\n getUngroupedColumns(): Column[] {\n const { model } = this.props;\n const { columns } = this.state;\n const { originalColumns } = model;\n\n return this.getCachedUngroupedColumns(originalColumns, columns);\n }\n\n getSortedUngroupedColumns(): Column[] {\n const { sort } = this.state;\n const columns = this.getUngroupedColumns();\n return this.getCachedSortedColumns(columns, sort);\n }\n\n renderGroupedItem({\n item,\n itemIndex,\n isClone,\n selectedCount,\n }: RenderItemProps<string> & {\n isClone?: boolean;\n selectedCount?: number;\n }): ReactElement {\n const indent =\n isClone !== undefined && isClone ? '' : '\\u00A0\\u00A0'.repeat(itemIndex);\n const text = `${indent}${item}`;\n const badgeText =\n isClone !== undefined && isClone ? `${selectedCount}` : undefined;\n const className =\n isClone !== undefined && isClone ? 'item-list-item-clone' : '';\n return (\n <>\n {DraggableItemList.renderTextItem({ text, badgeText, className })}\n {(isClone === undefined || !isClone) && (\n <Button\n kind=\"ghost\"\n className=\"btn btn-link btn-link-icon btn-delete-grouping float-right\"\n onClick={() => this.handleDeleteClicked(itemIndex)}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </Button>\n )}\n </>\n );\n }\n\n render(): ReactElement {\n const {\n columns,\n dragSource,\n searchFilter,\n groupedSelectedRanges,\n ungroupedSelectedRanges,\n showConstituents,\n showNonAggregatedColumns,\n sort,\n } = this.state;\n\n const ungroupedColumns = this.getSortedUngroupedColumns();\n let groupListHeight = columns.length * DraggableItemList.DEFAULT_ROW_HEIGHT;\n if (dragSource?.droppableId === UNGROUPED_LIST_ID) {\n groupListHeight += DraggableItemList.DEFAULT_ROW_HEIGHT;\n }\n const ungroupMaxListHeight =\n ungroupedColumns.length * DraggableItemList.DEFAULT_ROW_HEIGHT + 10;\n const ungroupMinListHeight = Math.min(\n 3 * DraggableItemList.DEFAULT_ROW_HEIGHT,\n ungroupMaxListHeight\n );\n\n return (\n <div\n role=\"menu\"\n className={classNames('rollup-rows', {\n 'is-dragging': dragSource != null,\n })}\n tabIndex={0}\n >\n <DragDropContext\n onDragEnd={this.handleDragEnd}\n onDragStart={this.handleDragStart}\n >\n <div className=\"rollup-rows-group-by\">\n <div className=\"section-title\">Group By</div>\n {columns.length === 0 && (\n <Droppable isDropDisabled droppableId=\"placeholder\">\n {(provided, snapshot) => (\n <div\n className={classNames('placeholder', 'text-muted', {\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n Create rollup by dragging columns here, from the available\n columns list below.\n </div>\n )}\n </Droppable>\n )}\n {columns.length > 0 && (\n <DraggableItemList\n draggingItemClassName=\"rollup-rows-dragging-grouped-item\"\n draggablePrefix={GROUPED_LIST_ID}\n droppableId={GROUPED_LIST_ID}\n itemCount={columns.length}\n items={columns}\n offset={0}\n onSelectionChange={this.handleGroupedSelectionChange}\n ref={this.groupedList}\n renderItem={this.renderGroupedItem}\n selectedRanges={groupedSelectedRanges}\n style={{ height: groupListHeight }}\n isMultiSelect\n />\n )}\n </div>\n <div className=\"rollup-rows-available-columns\">\n <div className=\"section-title\">Available Grouping Columns</div>\n <div className=\"top-menu\">\n <SearchInput\n className=\"w-100\"\n value={searchFilter}\n matchCount={\n searchFilter ? ungroupedSelectedRanges.length : undefined\n }\n placeholder=\"Find column...\"\n onChange={this.handleSearchChange}\n />\n <Button\n kind=\"ghost\"\n className={classNames('btn-link btn-link-icon', {\n active: sort === RollupRows.SORT.ASCENDING,\n })}\n onClick={this.handleSortAscending}\n >\n <FontAwesomeIcon icon={dhSortAlphaDown} />\n <Tooltip>Sort ascending</Tooltip>\n </Button>\n <Button\n kind=\"ghost\"\n className={classNames('btn-link btn-link-icon', {\n active: sort === RollupRows.SORT.DESCENDING,\n })}\n onClick={this.handleSortDescending}\n >\n <FontAwesomeIcon icon={dhSortAlphaUp} />\n <Tooltip>Sort descending</Tooltip>\n </Button>\n </div>\n <DraggableItemList\n className=\"rollup-available-grouping-columns\"\n draggablePrefix={UNGROUPED_LIST_ID}\n droppableId={UNGROUPED_LIST_ID}\n itemCount={ungroupedColumns.length}\n items={ungroupedColumns}\n renderItem={RollupRows.renderColumn}\n offset={0}\n onSelect={this.handleUngroupedSelect}\n onSelectionChange={this.handleUngroupedSelectionChange}\n ref={this.ungroupedList}\n selectedRanges={ungroupedSelectedRanges}\n style={{\n maxHeight: ungroupMaxListHeight,\n minHeight: ungroupMinListHeight,\n }}\n isDropDisabled={dragSource?.droppableId !== GROUPED_LIST_ID}\n isMultiSelect\n />\n <div className=\"bottom-menu\">\n <div className=\"label\">Show:</div>\n <Checkbox\n checked={showConstituents}\n onChange={this.handleShowConstituentsChange}\n >\n Constituents\n </Checkbox>\n <Checkbox\n checked={showNonAggregatedColumns}\n onChange={this.handleShowNonAggregatedColumnsChange}\n >\n Non-Aggregated Columns\n </Checkbox>\n </div>\n </div>\n </DragDropContext>\n </div>\n );\n }\n}\n\nexport default RollupRows;\n"],"mappings":"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"}
@@ -53,7 +53,7 @@ declare class TableCsvExporter extends Component<TableCsvExporterProps, TableCsv
53
53
  constructor(props: TableCsvExporterProps);
54
54
  getSnapshotRanges(): GridRange[];
55
55
  resetDownloadState(): void;
56
- handleDownloadClick(): void;
56
+ handleDownloadClick(): Promise<void>;
57
57
  handleDownloadOptionChanged(event: React.ChangeEvent<HTMLInputElement>): void;
58
58
  handleCustomizedDownloadOptionChanged(event: React.ChangeEvent<HTMLSelectElement>): void;
59
59
  handleCustomizedDownloadRowsChanged(event: React.ChangeEvent<HTMLInputElement>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"TableCsvExporter.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableCsvExporter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAIvD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAW,EAAE,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAG7E,OAAO,yBAAyB,CAAC;AACjC,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAE7C,UAAU,qBAAqB;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,0BAA0B,EAAE,MAAM,CAAC;IACnC,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,UAAU,EAAE,CACV,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,KAAK,EAClB,iBAAiB,EAAE,yBAAyB,EAC5C,cAAc,EAAE,SAAS,EAAE,KACxB,IAAI,CAAC;IACV,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,EAAE,SAAS,EAAE,CAAC;CAC7B;AAED,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IAEjB,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB,EAAE,MAAM,CAAC;IACjC,sBAAsB,EAAE,MAAM,CAAC;IAE/B,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,EAAE,EAAE,MAAM,CAAC;CACZ;AACD,cAAM,gBAAiB,SAAQ,SAAS,CACtC,qBAAqB,EACrB,qBAAqB,CACtB;IACC,MAAM,CAAC,oBAAoB,SAAuB;IAElD,MAAM,CAAC,eAAe;;;;;MAKpB;IAEF,MAAM,CAAC,gBAAgB;;;;MAIrB;IAEF,MAAM,CAAC,uBAAuB;;;MAG5B;IAEF,MAAM,CAAC,qBAAqB,SAAO;IAEnC,MAAM,CAAC,YAAY;+BACI,IAAI;;;;;;MAMzB;IAEF,MAAM,CAAC,aAAa,IAAI,MAAM;gBAOlB,KAAK,EAAE,qBAAqB;IA2BxC,iBAAiB,IAAI,SAAS,EAAE;IAqDhC,kBAAkB,IAAI,IAAI;IAI1B,mBAAmB,IAAI,IAAI;IA6B3B,2BAA2B,CACzB,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GACzC,IAAI;IAIP,qCAAqC,CACnC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAC1C,IAAI;IAIP,mCAAmC,CACjC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GACzC,IAAI;IAIP,mBAAmB,IAAI,OAAO;IAoC9B,MAAM,IAAI,YAAY;CA2LvB;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"TableCsvExporter.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableCsvExporter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAIvD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAW,EAAE,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAG7E,OAAO,yBAAyB,CAAC;AAEjC,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAG7C,UAAU,qBAAqB;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,0BAA0B,EAAE,MAAM,CAAC;IACnC,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,UAAU,EAAE,CACV,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,KAAK,EAClB,iBAAiB,EAAE,yBAAyB,EAC5C,cAAc,EAAE,SAAS,EAAE,KACxB,IAAI,CAAC;IACV,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,EAAE,SAAS,EAAE,CAAC;CAC7B;AAED,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IAEjB,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB,EAAE,MAAM,CAAC;IACjC,sBAAsB,EAAE,MAAM,CAAC;IAE/B,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,EAAE,EAAE,MAAM,CAAC;CACZ;AACD,cAAM,gBAAiB,SAAQ,SAAS,CACtC,qBAAqB,EACrB,qBAAqB,CACtB;IACC,MAAM,CAAC,oBAAoB,SAAuB;IAElD,MAAM,CAAC,eAAe;;;;;MAKpB;IAEF,MAAM,CAAC,gBAAgB;;;;MAIrB;IAEF,MAAM,CAAC,uBAAuB;;;MAG5B;IAEF,MAAM,CAAC,qBAAqB,SAAO;IAEnC,MAAM,CAAC,YAAY;+BACI,IAAI;;;;;;MAMzB;IAEF,MAAM,CAAC,aAAa,IAAI,MAAM;gBAOlB,KAAK,EAAE,qBAAqB;IA2BxC,iBAAiB,IAAI,SAAS,EAAE;IAqDhC,kBAAkB,IAAI,IAAI;IAIpB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC1C,2BAA2B,CACzB,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GACzC,IAAI;IAIP,qCAAqC,CACnC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAC1C,IAAI;IAIP,mCAAmC,CACjC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GACzC,IAAI;IAIP,mBAAmB,IAAI,OAAO;IAoC9B,MAAM,IAAI,YAAY;CA6LvB;AAED,eAAe,gBAAgB,CAAC"}