@deephaven/iris-grid 0.78.1-use-widget.2 → 0.79.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"CustomColumnBuilder.js","names":["React","Component","classNames","shortid","memoize","DragDropContext","Droppable","FontAwesomeIcon","Button","DragUtils","LoadingSpinner","dhNewCircleLargeFilled","vsWarning","vsPass","DbNameValidator","CustomColumnInput","IrisGridModel","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","CustomColumnBuilder","makeCustomColumnInputEventKey","generate","createCustomColumnInput","eventKey","name","formula","constructor","props","_defineProperty","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","_objectSpread","setTimeout","SUCCESS_SHOW_DURATION","event","customEvent","children","icon","className","detail","JSON","stringify","configuration","result","stopDragging","destination","sourceIndex","source","index","destinationIndex","sourceInput","focusEditorIndex","shiftKey","_this$container","querySelectorAll","focus","_this$container2","_this$container2$quer","querySelector","_this$container3","nextFocusIndex","onSave","originalCustomColumns","forEach","concat","_ref","renderInputs","nameCount","Map","_ref2","_nameCount$get","set","get","_nameCount$get2","isDuplicate","inputIndex","onChange","onDeleteColumn","onTabInEditor","invalid","renderSaveButton","saveText","areNamesValid","every","_ref3","isValidColumnName","filteredNames","filter","_ref4","_ref5","areNamesUnique","Set","size","kind","disabled","onClick","undefined","render","onCancel","role","ref","onFocus","onDragStart","startDragging","onDragEnd","droppableId","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder"],"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 { Button, DragUtils, LoadingSpinner } from '@deephaven/components';\nimport { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';\nimport { DbNameValidator } from '@deephaven/utils';\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};\nexport interface CustomColumnBuilderProps {\n model: IrisGridModel;\n customColumns: readonly string[];\n onSave: (columns: readonly string[]) => void;\n onCancel: () => void;\n}\n\ninterface CustomColumnBuilderState {\n inputs: readonly 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 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: readonly Input[], key: string) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs: readonly 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: readonly 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 (\n this.container?.querySelectorAll('.btn-drag-handle')[\n focusEditorIndex\n ] as HTMLButtonElement\n ).focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n (\n this.container?.querySelector('.btn-add-column') as HTMLButtonElement\n )?.focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n (\n this.container?.querySelectorAll(`.custom-column-input`)[\n nextFocusIndex\n ] as HTMLInputElement\n ).focus();\n }\n }\n\n handleSaveClick(): void {\n const { onSave, customColumns: originalCustomColumns } = 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({\n // If both are 0, then moving from no custom to no custom. The parent won't re-render to cancel the loading state\n isCustomColumnApplying:\n customColumns.length > 0 || originalCustomColumns.length > 0,\n });\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 const nameCount = new Map();\n inputs.forEach(({ name }) =>\n nameCount.set(name, (nameCount.get(name) ?? 0) + 1)\n );\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n const isDuplicate = (nameCount.get(name) ?? 0) > 1;\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 isDuplicate={isDuplicate}\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 const areNamesValid = inputs.every(\n ({ name }) => name === '' || DbNameValidator.isValidColumnName(name)\n );\n const filteredNames = inputs\n .filter(({ name }) => name !== '')\n .map(({ name }) => name);\n const areNamesUnique = new Set(filteredNames).size === filteredNames.length;\n\n return (\n <Button\n kind={isSuccessShowing ? 'success' : 'primary'}\n className={classNames('btn-apply', {\n 'btn-spinner': isCustomColumnApplying,\n })}\n disabled={\n isSuccessShowing ||\n isCustomColumnApplying ||\n !areNamesValid ||\n !areNamesUnique\n }\n onClick={this.handleSaveClick}\n icon={isSuccessShowing ? vsPass : undefined}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner className=\"mr-2 loading-spinner-vertical-align\" />\n <span className=\"btn-normal-content\">Applying</span>\n </span>\n )}\n {!isSuccessShowing && !isCustomColumnApplying && saveText}\n {isSuccessShowing && 'Success'}\n </Button>\n );\n }\n\n render(): JSX.Element {\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 <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 kind=\"ghost\"\n className=\"btn-add-column\"\n onClick={this.handleAddColumnClick}\n icon={dhNewCircleLargeFilled}\n >\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 kind=\"secondary\" className=\"mr-2\" onClick={onCancel}>\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","nanoid","memoize","DragDropContext","Droppable","FontAwesomeIcon","Button","DragUtils","LoadingSpinner","dhNewCircleLargeFilled","vsWarning","vsPass","DbNameValidator","CustomColumnInput","IrisGridModel","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","CustomColumnBuilder","makeCustomColumnInputEventKey","createCustomColumnInput","eventKey","name","formula","constructor","props","_defineProperty","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","_objectSpread","setTimeout","SUCCESS_SHOW_DURATION","event","customEvent","children","icon","className","detail","JSON","stringify","configuration","result","stopDragging","destination","sourceIndex","source","index","destinationIndex","sourceInput","focusEditorIndex","shiftKey","_this$container","querySelectorAll","focus","_this$container2","_this$container2$quer","querySelector","_this$container3","nextFocusIndex","onSave","originalCustomColumns","forEach","concat","_ref","renderInputs","nameCount","Map","_ref2","_nameCount$get","set","get","_nameCount$get2","isDuplicate","inputIndex","onChange","onDeleteColumn","onTabInEditor","invalid","renderSaveButton","saveText","areNamesValid","every","_ref3","isValidColumnName","filteredNames","filter","_ref4","_ref5","areNamesUnique","Set","size","kind","disabled","onClick","undefined","render","onCancel","role","ref","onFocus","onDragStart","startDragging","onDragEnd","droppableId","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder"],"sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { nanoid } from 'nanoid';\nimport memoize from 'memoize-one';\nimport { DragDropContext, Droppable, DropResult } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, DragUtils, LoadingSpinner } from '@deephaven/components';\nimport { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';\nimport { DbNameValidator } from '@deephaven/utils';\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};\nexport interface CustomColumnBuilderProps {\n model: IrisGridModel;\n customColumns: readonly string[];\n onSave: (columns: readonly string[]) => void;\n onCancel: () => void;\n}\n\ninterface CustomColumnBuilderState {\n inputs: readonly 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 makeCustomColumnInputEventKey(): string {\n return nanoid();\n }\n\n static createCustomColumnInput(): Input {\n return {\n eventKey: nanoid(),\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: readonly Input[], key: string) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs: readonly 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: readonly 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 (\n this.container?.querySelectorAll('.btn-drag-handle')[\n focusEditorIndex\n ] as HTMLButtonElement\n ).focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n (\n this.container?.querySelector('.btn-add-column') as HTMLButtonElement\n )?.focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n (\n this.container?.querySelectorAll(`.custom-column-input`)[\n nextFocusIndex\n ] as HTMLInputElement\n ).focus();\n }\n }\n\n handleSaveClick(): void {\n const { onSave, customColumns: originalCustomColumns } = 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({\n // If both are 0, then moving from no custom to no custom. The parent won't re-render to cancel the loading state\n isCustomColumnApplying:\n customColumns.length > 0 || originalCustomColumns.length > 0,\n });\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 const nameCount = new Map();\n inputs.forEach(({ name }) =>\n nameCount.set(name, (nameCount.get(name) ?? 0) + 1)\n );\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n const isDuplicate = (nameCount.get(name) ?? 0) > 1;\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 isDuplicate={isDuplicate}\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 const areNamesValid = inputs.every(\n ({ name }) => name === '' || DbNameValidator.isValidColumnName(name)\n );\n const filteredNames = inputs\n .filter(({ name }) => name !== '')\n .map(({ name }) => name);\n const areNamesUnique = new Set(filteredNames).size === filteredNames.length;\n\n return (\n <Button\n kind={isSuccessShowing ? 'success' : 'primary'}\n className={classNames('btn-apply', {\n 'btn-spinner': isCustomColumnApplying,\n })}\n disabled={\n isSuccessShowing ||\n isCustomColumnApplying ||\n !areNamesValid ||\n !areNamesUnique\n }\n onClick={this.handleSaveClick}\n icon={isSuccessShowing ? vsPass : undefined}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner className=\"mr-2 loading-spinner-vertical-align\" />\n <span className=\"btn-normal-content\">Applying</span>\n </span>\n )}\n {!isSuccessShowing && !isCustomColumnApplying && saveText}\n {isSuccessShowing && 'Success'}\n </Button>\n );\n }\n\n render(): JSX.Element {\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 <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 kind=\"ghost\"\n className=\"btn-add-column\"\n onClick={this.handleAddColumnClick}\n icon={dhNewCircleLargeFilled}\n >\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 kind=\"secondary\" className=\"mr-2\" onClick={onCancel}>\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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"}
@@ -60,7 +60,7 @@ declare class TableCsvExporter extends Component<TableCsvExporterProps, TableCsv
60
60
  getModelRanges(ranges: readonly GridRange[]): GridRange[];
61
61
  resetDownloadState(): void;
62
62
  handleDownloadClick(): Promise<void>;
63
- handleDownloadRowOptionChanged(event: React.ChangeEvent<HTMLInputElement>): void;
63
+ handleDownloadRowOptionChanged(value: string): void;
64
64
  handleCustomizedDownloadRowOptionChanged(eventTargetValue: string): void;
65
65
  handleCustomizedDownloadRowsChanged(event: React.ChangeEvent<HTMLInputElement>): void;
66
66
  handleIncludeColumnHeadersChanged(): 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;AAWvD,OAAO,EACL,SAAS,EAET,YAAY,EACZ,aAAa,EACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAG3D,OAAO,yBAAyB,CAAC;AAEjC,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAI7C,UAAU,qBAAqB;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,YAAY,CAAC;IAC/B,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;IACvC,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,MAAM,CAAC,KAAK,EACzB,iBAAiB,EAAE,MAAM,CAAC,yBAAyB,EACnD,cAAc,EAAE,SAAS,SAAS,EAAE,EACpC,WAAW,EAAE,SAAS,SAAS,EAAE,EACjC,oBAAoB,EAAE,OAAO,EAC7B,oBAAoB,EAAE,OAAO,KAC1B,IAAI,CAAC;IACV,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,EAAE,SAAS,SAAS,EAAE,CAAC;CACtC;AAED,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IAEjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2BAA2B,EAAE,MAAM,CAAC;IACpC,sBAAsB,EAAE,MAAM,CAAC;IAE/B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,oBAAoB,EAAE,OAAO,CAAC;IAE9B,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,oBAAoB;;;;MAIzB;IAEF,MAAM,CAAC,uBAAuB;;;MAG5B;IAEF,MAAM,CAAC,qBAAqB,SAAO;IAEnC,MAAM,CAAC,YAAY;+BACI,IAAI;;;;;;MAMzB;IAEF,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,MAAM,GAAG,MAAM;gBAOnC,KAAK,EAAE,qBAAqB;IAmCxC,iBAAiB,IAAI,SAAS,EAAE;IA2DhC,cAAc,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,EAAE;IAezD,kBAAkB,IAAI,IAAI;IAIpB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IA4C1C,8BAA8B,CAC5B,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GACzC,IAAI;IAIP,wCAAwC,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAIxE,mCAAmC,CACjC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GACzC,IAAI;IAIP,iCAAiC,IAAI,IAAI;IAMzC,iCAAiC,IAAI,IAAI;IAMzC,iCAAiC,IAAI,IAAI;IAMzC,mBAAmB,IAAI,OAAO;IAsC9B,MAAM,IAAI,YAAY;CAoNvB;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;AAWvD,OAAO,EACL,SAAS,EAET,YAAY,EACZ,aAAa,EACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAG3D,OAAO,yBAAyB,CAAC;AAEjC,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAI7C,UAAU,qBAAqB;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,YAAY,CAAC;IAC/B,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;IACvC,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,MAAM,CAAC,KAAK,EACzB,iBAAiB,EAAE,MAAM,CAAC,yBAAyB,EACnD,cAAc,EAAE,SAAS,SAAS,EAAE,EACpC,WAAW,EAAE,SAAS,SAAS,EAAE,EACjC,oBAAoB,EAAE,OAAO,EAC7B,oBAAoB,EAAE,OAAO,KAC1B,IAAI,CAAC;IACV,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,EAAE,SAAS,SAAS,EAAE,CAAC;CACtC;AAED,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IAEjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2BAA2B,EAAE,MAAM,CAAC;IACpC,sBAAsB,EAAE,MAAM,CAAC;IAE/B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,oBAAoB,EAAE,OAAO,CAAC;IAE9B,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,oBAAoB;;;;MAIzB;IAEF,MAAM,CAAC,uBAAuB;;;MAG5B;IAEF,MAAM,CAAC,qBAAqB,SAAO;IAEnC,MAAM,CAAC,YAAY;+BACI,IAAI;;;;;;MAMzB;IAEF,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,MAAM,GAAG,MAAM;gBAOnC,KAAK,EAAE,qBAAqB;IAmCxC,iBAAiB,IAAI,SAAS,EAAE;IA2DhC,cAAc,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,EAAE;IAezD,kBAAkB,IAAI,IAAI;IAIpB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IA4C1C,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInD,wCAAwC,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAIxE,mCAAmC,CACjC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GACzC,IAAI;IAIP,iCAAiC,IAAI,IAAI;IAMzC,iCAAiC,IAAI,IAAI;IAMzC,iCAAiC,IAAI,IAAI;IAMzC,mBAAmB,IAAI,OAAO;IAsC9B,MAAM,IAAI,YAAY;CAuNvB;AAED,eAAe,gBAAgB,CAAC"}
@@ -8,11 +8,11 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
8
8
  import React, { Component } from 'react';
9
9
  import ClassNames from 'classnames';
10
10
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
11
- import { Button, Checkbox, LoadingSpinner, RadioGroup, RadioItem, Select } from '@deephaven/components';
11
+ import { Button, Checkbox, LoadingSpinner, RadioGroup, Radio, Select } from '@deephaven/components';
12
12
  import { GridRange, GridUtils } from '@deephaven/grid';
13
13
  import { vsWarning } from '@deephaven/icons';
14
14
  import { TimeUtils } from '@deephaven/utils';
15
- import shortid from 'shortid';
15
+ import { nanoid } from 'nanoid';
16
16
  import "./TableCsvExporter.css";
17
17
  import Log from '@deephaven/log';
18
18
  import IrisGridUtils from "../IrisGridUtils.js";
@@ -46,7 +46,7 @@ class TableCsvExporter extends Component {
46
46
  includeHiddenColumns: false,
47
47
  useUnformattedValues: false,
48
48
  errorMessage: null,
49
- id: shortid.generate()
49
+ id: nanoid()
50
50
  };
51
51
  }
52
52
  getSnapshotRanges() {
@@ -160,9 +160,9 @@ class TableCsvExporter extends Component {
160
160
  }
161
161
  })();
162
162
  }
163
- handleDownloadRowOptionChanged(event) {
163
+ handleDownloadRowOptionChanged(value) {
164
164
  this.setState({
165
- downloadRowOption: event.target.value
165
+ downloadRowOption: value
166
166
  });
167
167
  }
168
168
  handleCustomizedDownloadRowOptionChanged(eventTargetValue) {
@@ -261,29 +261,31 @@ class TableCsvExporter extends Component {
261
261
  return /*#__PURE__*/_jsxs("div", {
262
262
  className: "table-csv-exporter",
263
263
  children: [/*#__PURE__*/_jsx("div", {
264
+ id: "download-rows-label",
264
265
  className: "section-title",
265
266
  children: "Download Rows"
266
267
  }), /*#__PURE__*/_jsx("div", {
267
268
  className: "form-group",
268
269
  children: /*#__PURE__*/_jsxs(RadioGroup, {
270
+ "aria-labelledby": "download-rows-label",
269
271
  onChange: this.handleDownloadRowOptionChanged,
270
272
  value: downloadRowOption,
271
- disabled: isDownloading,
272
- children: [/*#__PURE__*/_jsxs(RadioItem, {
273
+ isDisabled: isDownloading,
274
+ children: [/*#__PURE__*/_jsxs(Radio, {
273
275
  value: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS,
274
276
  "data-testid": "radio-csv-exporter-download-all",
275
277
  children: ["All Rows", /*#__PURE__*/_jsx("span", {
276
278
  className: "text-muted ml-2",
277
279
  children: "(".concat(rowCount.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,'), " rows)")
278
280
  })]
279
- }), /*#__PURE__*/_jsxs(RadioItem, {
281
+ }), /*#__PURE__*/_jsxs(Radio, {
280
282
  value: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS,
281
283
  "data-testid": "radio-csv-exporter-only-selected",
282
284
  children: ["Only Selected Rows", /*#__PURE__*/_jsx("span", {
283
285
  className: "text-muted ml-2",
284
286
  children: selectedRanges.length > 0 ? "(".concat(GridRange.rowCount(selectedRanges).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,'), " rows)") : null
285
287
  })]
286
- }), /*#__PURE__*/_jsx(RadioItem, {
288
+ }), /*#__PURE__*/_jsx(Radio, {
287
289
  value: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS,
288
290
  "data-testid": "radio-csv-exporter-customized-rows",
289
291
  children: /*#__PURE__*/_jsxs("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"TableCsvExporter.js","names":["React","Component","ClassNames","FontAwesomeIcon","Button","Checkbox","LoadingSpinner","RadioGroup","RadioItem","Select","GridRange","GridUtils","vsWarning","TimeUtils","shortid","Log","IrisGridUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","TableCsvExporter","getDateString","dh","i18n","DateTimeFormat","format","FILENAME_DATE_FORMAT","Date","constructor","props","handleDownloadClick","bind","handleDownloadRowOptionChanged","handleCustomizedDownloadRowOptionChanged","handleCustomizedDownloadRowsChanged","handleIncludeColumnHeadersChanged","handleIncludeHiddenColumnsChanged","handleUseUnformattedValuesChanged","model","name","state","fileName","concat","downloadRowOption","DOWNLOAD_ROW_OPTIONS","ALL_ROWS","customizedDownloadRowOption","CUSTOMIZED_ROWS_OPTIONS","FIRST","customizedDownloadRows","DEFAULT_DOWNLOAD_ROWS","includeColumnHeaders","includeHiddenColumns","useUnformattedValues","errorMessage","id","generate","getSnapshotRanges","selectedRanges","rowCount","columnCount","snapshotRanges","push","SELECTED_ROWS","map","range","_objectSpread","startColumn","endColumn","sort","rangeA","rangeB","startRow","CUSTOMIZED_ROWS","Math","min","LAST","max","getModelRanges","ranges","userColumnWidths","movedColumns","hiddenColumns","getHiddenColumns","modelRanges","length","subtractRanges","makeColumn","subtractRangesFromRanges","resetDownloadState","setState","_this","_asyncToGenerator","isDownloading","onDownloadStart","onDownload","onCancel","validateOptionInput","frozenTable","export","tableSubscription","setViewport","getViewportData","error","children","icon","event","target","value","eventTargetValue","parseInt","_ref","_ref2","_ref3","render","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","className","onChange","disabled","toString","replace","role","onClick","type","placeholder","htmlFor","checked","DOWNLOAD_STATUS","DOWNLOADING","INITIATING","formatElapsedTime","FINISHED","CANCELED","style","width","kind","_defineProperty","undefined"],"sources":["../../src/sidebar/TableCsvExporter.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport ClassNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n Checkbox,\n LoadingSpinner,\n RadioGroup,\n RadioItem,\n Select,\n} from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n ModelSizeMap,\n MoveOperation,\n} from '@deephaven/grid';\nimport { vsWarning } from '@deephaven/icons';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { TimeUtils } from '@deephaven/utils';\nimport shortid from 'shortid';\nimport './TableCsvExporter.scss';\nimport Log from '@deephaven/log';\nimport IrisGridModel from '../IrisGridModel';\nimport IrisGridUtils from '../IrisGridUtils';\n\nconst log = Log.module('TableCsvExporter');\ninterface TableCsvExporterProps {\n model: IrisGridModel;\n name: string;\n userColumnWidths: ModelSizeMap;\n movedColumns: readonly MoveOperation[];\n isDownloading: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number;\n onDownloadStart: () => void;\n onDownload: (\n fileName: string,\n frozenTable: DhType.Table,\n tableSubscription: DhType.TableViewportSubscription,\n snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ) => void;\n onCancel: () => void;\n selectedRanges: readonly GridRange[];\n}\n\ninterface TableCsvExporterState {\n fileName: string;\n\n downloadRowOption: string;\n customizedDownloadRowOption: string;\n customizedDownloadRows: number;\n\n includeColumnHeaders: boolean;\n includeHiddenColumns: boolean;\n useUnformattedValues: boolean;\n\n errorMessage: React.ReactNode;\n id: string;\n}\nclass TableCsvExporter extends Component<\n TableCsvExporterProps,\n TableCsvExporterState\n> {\n static FILENAME_DATE_FORMAT = 'yyyy-MM-dd-HHmmss';\n\n static DOWNLOAD_STATUS = {\n INITIATING: 'INITIATING',\n DOWNLOADING: 'DOWNLOADING',\n FINISHED: 'FINISHED',\n CANCELED: 'CANCELED',\n };\n\n static DOWNLOAD_ROW_OPTIONS = {\n ALL_ROWS: 'ALL_ROWS',\n SELECTED_ROWS: 'SELECTED_ROWS',\n CUSTOMIZED_ROWS: 'CUSTOMIZED_ROWS',\n };\n\n static CUSTOMIZED_ROWS_OPTIONS = {\n FIRST: 'FIRST',\n LAST: 'LAST',\n };\n\n static DEFAULT_DOWNLOAD_ROWS = 100;\n\n static defaultProps = {\n onDownloadStart: (): void => undefined,\n isDownloading: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n selectedRanges: [],\n };\n\n static getDateString(dh: typeof DhType): string {\n return dh.i18n.DateTimeFormat.format(\n TableCsvExporter.FILENAME_DATE_FORMAT,\n new Date()\n );\n }\n\n constructor(props: TableCsvExporterProps) {\n super(props);\n\n this.handleDownloadClick = this.handleDownloadClick.bind(this);\n this.handleDownloadRowOptionChanged =\n this.handleDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowOptionChanged =\n this.handleCustomizedDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowsChanged =\n this.handleCustomizedDownloadRowsChanged.bind(this);\n this.handleIncludeColumnHeadersChanged =\n this.handleIncludeColumnHeadersChanged.bind(this);\n this.handleIncludeHiddenColumnsChanged =\n this.handleIncludeHiddenColumnsChanged.bind(this);\n this.handleUseUnformattedValuesChanged =\n this.handleUseUnformattedValuesChanged.bind(this);\n\n const { model, name } = props;\n this.state = {\n fileName: `${name}-${TableCsvExporter.getDateString(model.dh)}.csv`,\n\n downloadRowOption: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS,\n customizedDownloadRowOption:\n TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST,\n customizedDownloadRows: TableCsvExporter.DEFAULT_DOWNLOAD_ROWS,\n\n includeColumnHeaders: true,\n includeHiddenColumns: false,\n useUnformattedValues: false,\n\n errorMessage: null,\n id: shortid.generate(),\n };\n }\n\n getSnapshotRanges(): GridRange[] {\n const { model, selectedRanges } = this.props;\n const {\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n } = this.state;\n const { rowCount, columnCount } = model;\n let snapshotRanges = [] as GridRange[];\n switch (downloadRowOption) {\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS:\n snapshotRanges.push(new GridRange(0, 0, columnCount - 1, rowCount - 1));\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS:\n snapshotRanges = selectedRanges\n .map(range => ({\n ...range,\n startColumn: 0,\n endColumn: columnCount - 1,\n }))\n .sort((rangeA, rangeB) => {\n if (rangeA.startRow != null && rangeB.startRow != null) {\n return rangeA.startRow - rangeB.startRow;\n }\n return 0;\n }) as GridRange[];\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS:\n switch (customizedDownloadRowOption) {\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST:\n snapshotRanges.push(\n new GridRange(\n 0,\n 0,\n columnCount - 1,\n Math.min(customizedDownloadRows - 1, rowCount - 1)\n )\n );\n break;\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.LAST:\n snapshotRanges.push(\n new GridRange(\n 0,\n Math.max(0, rowCount - customizedDownloadRows),\n columnCount - 1,\n rowCount - 1\n )\n );\n break;\n default:\n break;\n }\n break;\n default:\n break;\n }\n return snapshotRanges;\n }\n\n getModelRanges(ranges: readonly GridRange[]): GridRange[] {\n const { userColumnWidths, movedColumns } = this.props;\n const { includeHiddenColumns } = this.state;\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (!includeHiddenColumns && hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n return modelRanges;\n }\n\n resetDownloadState(): void {\n this.setState({ errorMessage: null });\n }\n\n async handleDownloadClick(): Promise<void> {\n const { model, isDownloading, onDownloadStart, onDownload, onCancel } =\n this.props;\n const { fileName, includeColumnHeaders, useUnformattedValues } = this.state;\n\n if (isDownloading) {\n onCancel();\n return;\n }\n\n this.resetDownloadState();\n\n const snapshotRanges = this.getSnapshotRanges();\n const modelRanges = this.getModelRanges(snapshotRanges);\n if (this.validateOptionInput()) {\n onDownloadStart();\n try {\n const frozenTable = await model.export();\n const tableSubscription = frozenTable.setViewport(0, 0);\n await tableSubscription.getViewportData();\n onDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n } catch (error) {\n log.error('CSV download failed', error);\n\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> {`${error}`}\n </p>\n ),\n });\n onCancel();\n }\n }\n }\n\n handleDownloadRowOptionChanged(\n event: React.ChangeEvent<HTMLInputElement>\n ): void {\n this.setState({ downloadRowOption: event.target.value });\n }\n\n handleCustomizedDownloadRowOptionChanged(eventTargetValue: string): void {\n this.setState({ customizedDownloadRowOption: eventTargetValue });\n }\n\n handleCustomizedDownloadRowsChanged(\n event: React.ChangeEvent<HTMLInputElement>\n ): void {\n this.setState({ customizedDownloadRows: parseInt(event.target.value, 10) });\n }\n\n handleIncludeColumnHeadersChanged(): void {\n this.setState(({ includeColumnHeaders }) => ({\n includeColumnHeaders: !includeColumnHeaders,\n }));\n }\n\n handleIncludeHiddenColumnsChanged(): void {\n this.setState(({ includeHiddenColumns }) => ({\n includeHiddenColumns: !includeHiddenColumns,\n }));\n }\n\n handleUseUnformattedValuesChanged(): void {\n this.setState(({ useUnformattedValues }) => ({\n useUnformattedValues: !useUnformattedValues,\n }));\n }\n\n validateOptionInput(): boolean {\n const { selectedRanges } = this.props;\n const { downloadRowOption, customizedDownloadRows } = this.state;\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS &&\n selectedRanges.length === 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> No rows selected. Please select\n some rows in the table.\n </p>\n ),\n });\n return false;\n }\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS &&\n customizedDownloadRows <= 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Number of rows to output must\n be greater than 0\n </p>\n ),\n });\n return false;\n }\n return true;\n }\n\n render(): ReactElement {\n const {\n model,\n isDownloading,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n selectedRanges,\n tableDownloadStatus,\n } = this.props;\n const {\n fileName,\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n includeColumnHeaders,\n includeHiddenColumns,\n useUnformattedValues,\n errorMessage,\n id,\n } = this.state;\n const { rowCount } = model;\n return (\n <div className=\"table-csv-exporter\">\n <div className=\"section-title\">Download Rows</div>\n <div className=\"form-group\">\n <RadioGroup\n onChange={this.handleDownloadRowOptionChanged}\n value={downloadRowOption}\n disabled={isDownloading}\n >\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS}\n data-testid=\"radio-csv-exporter-download-all\"\n >\n All Rows\n <span className=\"text-muted ml-2\">\n {`(${rowCount\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`}\n </span>\n </RadioItem>\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS}\n data-testid=\"radio-csv-exporter-only-selected\"\n >\n Only Selected Rows\n <span className=\"text-muted ml-2\">\n {selectedRanges.length > 0\n ? `(${GridRange.rowCount(selectedRanges)\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`\n : null}\n </span>\n </RadioItem>\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS}\n data-testid=\"radio-csv-exporter-customized-rows\"\n >\n <div\n className=\"radio-input-row\"\n role=\"presentation\"\n onClick={() => {\n this.setState({\n downloadRowOption:\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS,\n });\n }}\n >\n <Select\n value={customizedDownloadRowOption}\n data-testid=\"select-csv-exporter-customized-rows\"\n className=\"custom-select\"\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowOptionChanged}\n >\n <option value=\"FIRST\">First</option>\n <option value=\"LAST\">Last</option>\n </Select>\n <input\n type=\"number\"\n className=\"form-control\"\n id={`customizedRows-${id}`}\n data-testid=\"input-csv-exporter-customized-rows\"\n name={`customizedRows-${id}`}\n placeholder=\"100\"\n value={customizedDownloadRows}\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowsChanged}\n />\n <div>Rows</div>\n </div>\n </RadioItem>\n </RadioGroup>\n </div>\n <div className=\"form-group\">\n <label htmlFor={`customizedRows-${id}`}>File Name</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`filename-${id}`}\n data-testid=\"input-csv-exporter-file-name\"\n name={`filename-${id}`}\n value={fileName}\n onChange={event => {\n this.setState({ fileName: event.target.value });\n }}\n disabled={isDownloading}\n />\n </div>\n <div className=\"checkbox-options\">\n <Checkbox\n checked={includeColumnHeaders}\n onChange={this.handleIncludeColumnHeadersChanged}\n >\n Include column headers\n </Checkbox>\n <Checkbox\n checked={includeHiddenColumns}\n onChange={this.handleIncludeHiddenColumnsChanged}\n >\n Include hidden columns\n </Checkbox>\n <Checkbox\n checked={useUnformattedValues}\n onChange={this.handleUseUnformattedValuesChanged}\n >\n Use unformatted values\n </Checkbox>\n </div>\n <div className=\"section-footer flex-column\">\n {errorMessage != null && (\n <div className=\"error-message\">{errorMessage}</div>\n )}\n {tableDownloadStatus && (\n <div className=\"download-status\">\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <>\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING && (\n <div className=\"text-muted\">Starting Download...</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING && (\n <div className=\"text-muted d-flex justify-content-between\">\n <span>\n {tableDownloadEstimatedTime ||\n tableDownloadEstimatedTime === 0\n ? `Estimated time: ${TimeUtils.formatElapsedTime(\n tableDownloadEstimatedTime\n )}`\n : null}\n </span>\n <span>{`${tableDownloadProgress}%`}</span>\n </div>\n )}\n </>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"text-muted text-right\">Download Completed</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.CANCELED && (\n <div className=\"text-muted\">Download Canceled</div>\n )}\n\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <div className=\"progress\">\n <div\n className=\"progress-bar progress-bar-striped progress-bar-animated\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-success\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n </div>\n )}\n <Button\n kind=\"primary\"\n data-testid=\"btn-csv-exporter-download\"\n className={ClassNames('btn-downloading', {\n 'btn-spinner btn-cancelable': isDownloading,\n })}\n onClick={this.handleDownloadClick}\n >\n {isDownloading && (\n <span>\n <LoadingSpinner className=\"mr-2 loading-spinner-vertical-align\" />\n <span className=\"btn-normal-content\">Downloading</span>\n <span className=\"btn-hover-content\">Cancel</span>\n </span>\n )}\n {!isDownloading && 'Download'}\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default TableCsvExporter;\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableCsvExporter.js","names":["React","Component","ClassNames","FontAwesomeIcon","Button","Checkbox","LoadingSpinner","RadioGroup","Radio","Select","GridRange","GridUtils","vsWarning","TimeUtils","nanoid","Log","IrisGridUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","TableCsvExporter","getDateString","dh","i18n","DateTimeFormat","format","FILENAME_DATE_FORMAT","Date","constructor","props","handleDownloadClick","bind","handleDownloadRowOptionChanged","handleCustomizedDownloadRowOptionChanged","handleCustomizedDownloadRowsChanged","handleIncludeColumnHeadersChanged","handleIncludeHiddenColumnsChanged","handleUseUnformattedValuesChanged","model","name","state","fileName","concat","downloadRowOption","DOWNLOAD_ROW_OPTIONS","ALL_ROWS","customizedDownloadRowOption","CUSTOMIZED_ROWS_OPTIONS","FIRST","customizedDownloadRows","DEFAULT_DOWNLOAD_ROWS","includeColumnHeaders","includeHiddenColumns","useUnformattedValues","errorMessage","id","getSnapshotRanges","selectedRanges","rowCount","columnCount","snapshotRanges","push","SELECTED_ROWS","map","range","_objectSpread","startColumn","endColumn","sort","rangeA","rangeB","startRow","CUSTOMIZED_ROWS","Math","min","LAST","max","getModelRanges","ranges","userColumnWidths","movedColumns","hiddenColumns","getHiddenColumns","modelRanges","length","subtractRanges","makeColumn","subtractRangesFromRanges","resetDownloadState","setState","_this","_asyncToGenerator","isDownloading","onDownloadStart","onDownload","onCancel","validateOptionInput","frozenTable","export","tableSubscription","setViewport","getViewportData","error","children","icon","value","eventTargetValue","event","parseInt","target","_ref","_ref2","_ref3","render","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","className","onChange","isDisabled","toString","replace","role","onClick","disabled","type","placeholder","htmlFor","checked","DOWNLOAD_STATUS","DOWNLOADING","INITIATING","formatElapsedTime","FINISHED","CANCELED","style","width","kind","_defineProperty","undefined"],"sources":["../../src/sidebar/TableCsvExporter.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport ClassNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n Checkbox,\n LoadingSpinner,\n RadioGroup,\n Radio,\n Select,\n} from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n ModelSizeMap,\n MoveOperation,\n} from '@deephaven/grid';\nimport { vsWarning } from '@deephaven/icons';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { TimeUtils } from '@deephaven/utils';\nimport { nanoid } from 'nanoid';\nimport './TableCsvExporter.scss';\nimport Log from '@deephaven/log';\nimport IrisGridModel from '../IrisGridModel';\nimport IrisGridUtils from '../IrisGridUtils';\n\nconst log = Log.module('TableCsvExporter');\ninterface TableCsvExporterProps {\n model: IrisGridModel;\n name: string;\n userColumnWidths: ModelSizeMap;\n movedColumns: readonly MoveOperation[];\n isDownloading: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number;\n onDownloadStart: () => void;\n onDownload: (\n fileName: string,\n frozenTable: DhType.Table,\n tableSubscription: DhType.TableViewportSubscription,\n snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ) => void;\n onCancel: () => void;\n selectedRanges: readonly GridRange[];\n}\n\ninterface TableCsvExporterState {\n fileName: string;\n\n downloadRowOption: string;\n customizedDownloadRowOption: string;\n customizedDownloadRows: number;\n\n includeColumnHeaders: boolean;\n includeHiddenColumns: boolean;\n useUnformattedValues: boolean;\n\n errorMessage: React.ReactNode;\n id: string;\n}\nclass TableCsvExporter extends Component<\n TableCsvExporterProps,\n TableCsvExporterState\n> {\n static FILENAME_DATE_FORMAT = 'yyyy-MM-dd-HHmmss';\n\n static DOWNLOAD_STATUS = {\n INITIATING: 'INITIATING',\n DOWNLOADING: 'DOWNLOADING',\n FINISHED: 'FINISHED',\n CANCELED: 'CANCELED',\n };\n\n static DOWNLOAD_ROW_OPTIONS = {\n ALL_ROWS: 'ALL_ROWS',\n SELECTED_ROWS: 'SELECTED_ROWS',\n CUSTOMIZED_ROWS: 'CUSTOMIZED_ROWS',\n };\n\n static CUSTOMIZED_ROWS_OPTIONS = {\n FIRST: 'FIRST',\n LAST: 'LAST',\n };\n\n static DEFAULT_DOWNLOAD_ROWS = 100;\n\n static defaultProps = {\n onDownloadStart: (): void => undefined,\n isDownloading: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n selectedRanges: [],\n };\n\n static getDateString(dh: typeof DhType): string {\n return dh.i18n.DateTimeFormat.format(\n TableCsvExporter.FILENAME_DATE_FORMAT,\n new Date()\n );\n }\n\n constructor(props: TableCsvExporterProps) {\n super(props);\n\n this.handleDownloadClick = this.handleDownloadClick.bind(this);\n this.handleDownloadRowOptionChanged =\n this.handleDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowOptionChanged =\n this.handleCustomizedDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowsChanged =\n this.handleCustomizedDownloadRowsChanged.bind(this);\n this.handleIncludeColumnHeadersChanged =\n this.handleIncludeColumnHeadersChanged.bind(this);\n this.handleIncludeHiddenColumnsChanged =\n this.handleIncludeHiddenColumnsChanged.bind(this);\n this.handleUseUnformattedValuesChanged =\n this.handleUseUnformattedValuesChanged.bind(this);\n\n const { model, name } = props;\n this.state = {\n fileName: `${name}-${TableCsvExporter.getDateString(model.dh)}.csv`,\n\n downloadRowOption: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS,\n customizedDownloadRowOption:\n TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST,\n customizedDownloadRows: TableCsvExporter.DEFAULT_DOWNLOAD_ROWS,\n\n includeColumnHeaders: true,\n includeHiddenColumns: false,\n useUnformattedValues: false,\n\n errorMessage: null,\n id: nanoid(),\n };\n }\n\n getSnapshotRanges(): GridRange[] {\n const { model, selectedRanges } = this.props;\n const {\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n } = this.state;\n const { rowCount, columnCount } = model;\n let snapshotRanges = [] as GridRange[];\n switch (downloadRowOption) {\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS:\n snapshotRanges.push(new GridRange(0, 0, columnCount - 1, rowCount - 1));\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS:\n snapshotRanges = selectedRanges\n .map(range => ({\n ...range,\n startColumn: 0,\n endColumn: columnCount - 1,\n }))\n .sort((rangeA, rangeB) => {\n if (rangeA.startRow != null && rangeB.startRow != null) {\n return rangeA.startRow - rangeB.startRow;\n }\n return 0;\n }) as GridRange[];\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS:\n switch (customizedDownloadRowOption) {\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST:\n snapshotRanges.push(\n new GridRange(\n 0,\n 0,\n columnCount - 1,\n Math.min(customizedDownloadRows - 1, rowCount - 1)\n )\n );\n break;\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.LAST:\n snapshotRanges.push(\n new GridRange(\n 0,\n Math.max(0, rowCount - customizedDownloadRows),\n columnCount - 1,\n rowCount - 1\n )\n );\n break;\n default:\n break;\n }\n break;\n default:\n break;\n }\n return snapshotRanges;\n }\n\n getModelRanges(ranges: readonly GridRange[]): GridRange[] {\n const { userColumnWidths, movedColumns } = this.props;\n const { includeHiddenColumns } = this.state;\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (!includeHiddenColumns && hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n return modelRanges;\n }\n\n resetDownloadState(): void {\n this.setState({ errorMessage: null });\n }\n\n async handleDownloadClick(): Promise<void> {\n const { model, isDownloading, onDownloadStart, onDownload, onCancel } =\n this.props;\n const { fileName, includeColumnHeaders, useUnformattedValues } = this.state;\n\n if (isDownloading) {\n onCancel();\n return;\n }\n\n this.resetDownloadState();\n\n const snapshotRanges = this.getSnapshotRanges();\n const modelRanges = this.getModelRanges(snapshotRanges);\n if (this.validateOptionInput()) {\n onDownloadStart();\n try {\n const frozenTable = await model.export();\n const tableSubscription = frozenTable.setViewport(0, 0);\n await tableSubscription.getViewportData();\n onDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n } catch (error) {\n log.error('CSV download failed', error);\n\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> {`${error}`}\n </p>\n ),\n });\n onCancel();\n }\n }\n }\n\n handleDownloadRowOptionChanged(value: string): void {\n this.setState({ downloadRowOption: value });\n }\n\n handleCustomizedDownloadRowOptionChanged(eventTargetValue: string): void {\n this.setState({ customizedDownloadRowOption: eventTargetValue });\n }\n\n handleCustomizedDownloadRowsChanged(\n event: React.ChangeEvent<HTMLInputElement>\n ): void {\n this.setState({ customizedDownloadRows: parseInt(event.target.value, 10) });\n }\n\n handleIncludeColumnHeadersChanged(): void {\n this.setState(({ includeColumnHeaders }) => ({\n includeColumnHeaders: !includeColumnHeaders,\n }));\n }\n\n handleIncludeHiddenColumnsChanged(): void {\n this.setState(({ includeHiddenColumns }) => ({\n includeHiddenColumns: !includeHiddenColumns,\n }));\n }\n\n handleUseUnformattedValuesChanged(): void {\n this.setState(({ useUnformattedValues }) => ({\n useUnformattedValues: !useUnformattedValues,\n }));\n }\n\n validateOptionInput(): boolean {\n const { selectedRanges } = this.props;\n const { downloadRowOption, customizedDownloadRows } = this.state;\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS &&\n selectedRanges.length === 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> No rows selected. Please select\n some rows in the table.\n </p>\n ),\n });\n return false;\n }\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS &&\n customizedDownloadRows <= 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Number of rows to output must\n be greater than 0\n </p>\n ),\n });\n return false;\n }\n return true;\n }\n\n render(): ReactElement {\n const {\n model,\n isDownloading,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n selectedRanges,\n tableDownloadStatus,\n } = this.props;\n const {\n fileName,\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n includeColumnHeaders,\n includeHiddenColumns,\n useUnformattedValues,\n errorMessage,\n id,\n } = this.state;\n const { rowCount } = model;\n return (\n <div className=\"table-csv-exporter\">\n <div id=\"download-rows-label\" className=\"section-title\">\n Download Rows\n </div>\n <div className=\"form-group\">\n <RadioGroup\n aria-labelledby=\"download-rows-label\"\n onChange={this.handleDownloadRowOptionChanged}\n value={downloadRowOption}\n isDisabled={isDownloading}\n >\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS}\n data-testid=\"radio-csv-exporter-download-all\"\n >\n All Rows\n <span className=\"text-muted ml-2\">\n {`(${rowCount\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`}\n </span>\n </Radio>\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS}\n data-testid=\"radio-csv-exporter-only-selected\"\n >\n Only Selected Rows\n <span className=\"text-muted ml-2\">\n {selectedRanges.length > 0\n ? `(${GridRange.rowCount(selectedRanges)\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`\n : null}\n </span>\n </Radio>\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS}\n data-testid=\"radio-csv-exporter-customized-rows\"\n >\n <div\n className=\"radio-input-row\"\n role=\"presentation\"\n onClick={() => {\n this.setState({\n downloadRowOption:\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS,\n });\n }}\n >\n <Select\n value={customizedDownloadRowOption}\n data-testid=\"select-csv-exporter-customized-rows\"\n className=\"custom-select\"\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowOptionChanged}\n >\n <option value=\"FIRST\">First</option>\n <option value=\"LAST\">Last</option>\n </Select>\n <input\n type=\"number\"\n className=\"form-control\"\n id={`customizedRows-${id}`}\n data-testid=\"input-csv-exporter-customized-rows\"\n name={`customizedRows-${id}`}\n placeholder=\"100\"\n value={customizedDownloadRows}\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowsChanged}\n />\n <div>Rows</div>\n </div>\n </Radio>\n </RadioGroup>\n </div>\n <div className=\"form-group\">\n <label htmlFor={`customizedRows-${id}`}>File Name</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`filename-${id}`}\n data-testid=\"input-csv-exporter-file-name\"\n name={`filename-${id}`}\n value={fileName}\n onChange={event => {\n this.setState({ fileName: event.target.value });\n }}\n disabled={isDownloading}\n />\n </div>\n <div className=\"checkbox-options\">\n <Checkbox\n checked={includeColumnHeaders}\n onChange={this.handleIncludeColumnHeadersChanged}\n >\n Include column headers\n </Checkbox>\n <Checkbox\n checked={includeHiddenColumns}\n onChange={this.handleIncludeHiddenColumnsChanged}\n >\n Include hidden columns\n </Checkbox>\n <Checkbox\n checked={useUnformattedValues}\n onChange={this.handleUseUnformattedValuesChanged}\n >\n Use unformatted values\n </Checkbox>\n </div>\n <div className=\"section-footer flex-column\">\n {errorMessage != null && (\n <div className=\"error-message\">{errorMessage}</div>\n )}\n {tableDownloadStatus && (\n <div className=\"download-status\">\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <>\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING && (\n <div className=\"text-muted\">Starting Download...</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING && (\n <div className=\"text-muted d-flex justify-content-between\">\n <span>\n {tableDownloadEstimatedTime ||\n tableDownloadEstimatedTime === 0\n ? `Estimated time: ${TimeUtils.formatElapsedTime(\n tableDownloadEstimatedTime\n )}`\n : null}\n </span>\n <span>{`${tableDownloadProgress}%`}</span>\n </div>\n )}\n </>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"text-muted text-right\">Download Completed</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.CANCELED && (\n <div className=\"text-muted\">Download Canceled</div>\n )}\n\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <div className=\"progress\">\n <div\n className=\"progress-bar progress-bar-striped progress-bar-animated\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-success\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n </div>\n )}\n <Button\n kind=\"primary\"\n data-testid=\"btn-csv-exporter-download\"\n className={ClassNames('btn-downloading', {\n 'btn-spinner btn-cancelable': isDownloading,\n })}\n onClick={this.handleDownloadClick}\n >\n {isDownloading && (\n <span>\n <LoadingSpinner className=\"mr-2 loading-spinner-vertical-align\" />\n <span className=\"btn-normal-content\">Downloading</span>\n <span className=\"btn-hover-content\">Cancel</span>\n </span>\n )}\n {!isDownloading && 'Download'}\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default TableCsvExporter;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Aggregations.d.ts","sourceRoot":"","sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"names":[],"mappings":";AA4BA,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D,OAAO,qBAAqB,CAAC;AAI7B,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,oBAAoB,CAAC;IAChC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAClD,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,iBAAS,YAAY,CAAC,EACpB,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,GACP,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAuPjC;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"Aggregations.d.ts","sourceRoot":"","sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"names":[],"mappings":";AAsBA,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D,OAAO,qBAAqB,CAAC;AAI7B,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,oBAAoB,CAAC;IAChC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAClD,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,iBAAS,YAAY,CAAC,EACpB,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,GACP,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CA0PjC;AAED,eAAe,YAAY,CAAC"}
@@ -9,7 +9,7 @@ import classNames from 'classnames';
9
9
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
10
10
  import { dhNewCircleLargeFilled, vsTrash, vsEdit, dhWarningFilled } from '@deephaven/icons';
11
11
  import Log from '@deephaven/log';
12
- import { DraggableItemList, DragUtils, Option, Select, RadioItem, RadioGroup, Button } from '@deephaven/components';
12
+ import { DraggableItemList, DragUtils, Option, Select, Radio, RadioGroup, Button } from '@deephaven/components';
13
13
  import AggregationUtils, { SELECTABLE_OPTIONS } from "./AggregationUtils.js";
14
14
  import "./Aggregations.css";
15
15
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -90,8 +90,8 @@ function Aggregations(_ref) {
90
90
  onEdit(aggregation);
91
91
  }
92
92
  }, [aggregations, onEdit]);
93
- var handleShowOnTopChange = useCallback(event => {
94
- changeShowOnTop(event.target.value === 'true');
93
+ var handleShowOnTopChange = useCallback(value => {
94
+ changeShowOnTop(value === 'true');
95
95
  }, [changeShowOnTop]);
96
96
  useEffect(function setDefaultOperation() {
97
97
  if (options.length > 0 && !options.includes(selectedOperation)) {
@@ -165,16 +165,19 @@ function Aggregations(_ref) {
165
165
  })]
166
166
  }), isOptionsShown && isAggregationsShown && /*#__PURE__*/_jsx("hr", {}), isAggregationsShown && /*#__PURE__*/_jsxs(_Fragment, {
167
167
  children: [!isRollup && /*#__PURE__*/_jsxs("div", {
168
- className: "form-inline",
169
168
  children: [/*#__PURE__*/_jsx("label", {
169
+ id: "placement-options-label",
170
170
  children: "Placement:\xA0"
171
171
  }), /*#__PURE__*/_jsxs(RadioGroup, {
172
+ "aria-labelledby": "placement-options-label",
173
+ marginStart: "size-125",
174
+ orientation: "horizontal",
172
175
  onChange: handleShowOnTopChange,
173
176
  value: "".concat(showOnTop),
174
- children: [/*#__PURE__*/_jsx(RadioItem, {
177
+ children: [/*#__PURE__*/_jsx(Radio, {
175
178
  value: "true",
176
179
  children: "Top"
177
- }), /*#__PURE__*/_jsx(RadioItem, {
180
+ }), /*#__PURE__*/_jsx(Radio, {
178
181
  value: "false",
179
182
  children: "Bottom"
180
183
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"Aggregations.js","names":["React","useCallback","useEffect","useMemo","useState","DragDropContext","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","vsEdit","dhWarningFilled","Log","DraggableItemList","DragUtils","Option","Select","RadioItem","RadioGroup","Button","AggregationUtils","SELECTABLE_OPTIONS","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","Aggregations","_ref","isRollup","settings","onChange","onEdit","aggregations","showOnTop","options","filter","option","some","aggregation","operation","selectedOperation","setSelectedOperation","selectedRanges","setSelectedRanges","changeSettings","changedSettings","_objectSpread","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","debug","startDragging","handleDragEnd","_ref2","destination","source","stopDragging","destinationIndex","index","draggedItems","reorder","insertIndex","adjustDestinationIndex","newSelectedRanges","length","handleOperationChange","handleAdd","selected","invert","handleDeleteClicked","itemIndex","handleAggregationSelectionChange","handleAggregationSelect","isRollupOperation","handleShowOnTopChange","event","target","value","setDefaultOperation","includes","renderAggregation","_ref3","item","isClone","selectedCount","text","badgeText","concat","undefined","className","isEditable","children","icon","renderBadge","renderHandle","kind","tooltip","onClick","disabled","isOptionsShown","isAggregationsShown","map","type","onDragStart","onDragEnd","itemCount","items","renderItem","offset","onSelectionChange","onSelect","isMultiSelect"],"sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { DragDropContext } from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhNewCircleLargeFilled,\n vsTrash,\n vsEdit,\n dhWarningFilled,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n DraggableItemList,\n DragUtils,\n Option,\n Select,\n RadioItem,\n RadioGroup,\n Button,\n} from '@deephaven/components';\nimport type { DraggableRenderItemProps, Range } from '@deephaven/components';\nimport { ModelIndex } from '@deephaven/grid';\nimport AggregationOperation from './AggregationOperation';\nimport AggregationUtils, { SELECTABLE_OPTIONS } from './AggregationUtils';\nimport './Aggregations.scss';\n\nconst log = Log.module('Aggregations');\n\nexport type Aggregation = {\n operation: AggregationOperation;\n selected: readonly string[];\n invert: boolean;\n};\n\nexport type AggregationSettings = {\n aggregations: readonly Aggregation[];\n showOnTop: boolean;\n};\n\nexport type AggregationsProps = {\n isRollup: boolean;\n settings: AggregationSettings;\n onChange: (settings: AggregationSettings) => void;\n onEdit: (aggregation: Aggregation) => void;\n};\n\nfunction Aggregations({\n isRollup,\n settings,\n onChange,\n onEdit,\n}: AggregationsProps): JSX.Element {\n const { aggregations, showOnTop } = settings;\n const options = useMemo(\n () =>\n SELECTABLE_OPTIONS.filter(\n option =>\n !aggregations.some(aggregation => aggregation.operation === option)\n ),\n [aggregations]\n );\n const [selectedOperation, setSelectedOperation] = useState(options[0]);\n const [selectedRanges, setSelectedRanges] = useState<Range[]>([]);\n const changeSettings = useCallback(\n changedSettings => {\n onChange({ ...settings, ...changedSettings });\n },\n [onChange, settings]\n );\n const changeAggregations = useCallback(\n newAggregations => {\n changeSettings({ aggregations: newAggregations });\n },\n [changeSettings]\n );\n\n const changeShowOnTop = useCallback(\n newShowOnTop => {\n changeSettings({ showOnTop: newShowOnTop });\n },\n [changeSettings]\n );\n\n const handleDragStart = useCallback(() => {\n log.debug('handleDragStart');\n\n DragUtils.startDragging();\n }, []);\n\n const handleDragEnd = useCallback(\n ({ destination, source }) => {\n log.debug('handleDragEnd', destination, source);\n\n DragUtils.stopDragging();\n\n if (destination === null) {\n return;\n }\n\n let destinationIndex = destination.index;\n if (source.index < destination.index) {\n destinationIndex += 1;\n }\n\n const newAggregations = [...aggregations];\n const draggedItems = DragUtils.reorder(\n newAggregations,\n selectedRanges,\n newAggregations,\n destinationIndex\n );\n const insertIndex = DragUtils.adjustDestinationIndex(\n destinationIndex,\n selectedRanges\n );\n const newSelectedRanges: Range[] = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n changeAggregations(newAggregations);\n setSelectedRanges(newSelectedRanges);\n },\n [changeAggregations, aggregations, selectedRanges, setSelectedRanges]\n );\n\n const handleOperationChange = useCallback(\n operation => {\n setSelectedOperation(operation);\n },\n [setSelectedOperation]\n );\n\n const handleAdd = useCallback(() => {\n changeAggregations([\n ...aggregations,\n { operation: selectedOperation, selected: [], invert: true },\n ]);\n }, [aggregations, selectedOperation, changeAggregations]);\n\n const handleDeleteClicked = useCallback(\n (itemIndex: ModelIndex) => {\n changeAggregations(\n aggregations.filter((aggregation, index) => index !== itemIndex)\n );\n },\n [aggregations, changeAggregations]\n );\n\n const handleAggregationSelectionChange = useCallback(\n newSelectedRanges => {\n setSelectedRanges(newSelectedRanges);\n },\n [setSelectedRanges]\n );\n\n const handleAggregationSelect = useCallback(\n itemIndex => {\n const aggregation = aggregations[itemIndex];\n if (!AggregationUtils.isRollupOperation(aggregation.operation)) {\n onEdit(aggregation);\n }\n },\n [aggregations, onEdit]\n );\n\n const handleShowOnTopChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n changeShowOnTop(event.target.value === 'true');\n },\n [changeShowOnTop]\n );\n\n useEffect(\n function setDefaultOperation() {\n if (options.length > 0 && !options.includes(selectedOperation)) {\n setSelectedOperation(options[0]);\n }\n },\n [options, selectedOperation]\n );\n\n const renderAggregation = useCallback(\n ({\n item,\n itemIndex,\n isClone = false,\n selectedCount,\n }: DraggableRenderItemProps<Aggregation>) => {\n const text = item.operation;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : undefined;\n const isRollupOperation = AggregationUtils.isRollupOperation(\n item.operation\n );\n const isEditable = !isClone && !isRollupOperation;\n return (\n <>\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">\n {text}\n {!isRollup && isRollupOperation && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Requires rollup\n </span>\n )}\n </span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n {!isClone && (\n <>\n <Button\n kind=\"ghost\"\n className=\"btn-edit\"\n icon={vsEdit}\n tooltip=\"Edit Columns\"\n onClick={() => onEdit(item)}\n disabled={!isEditable}\n />\n <Button\n kind=\"ghost\"\n className=\"btn-delete\"\n icon={vsTrash}\n tooltip=\"Delete Aggregation\"\n onClick={() => handleDeleteClicked(itemIndex)}\n />\n </>\n )}\n </>\n );\n },\n [handleDeleteClicked, onEdit, isRollup]\n );\n\n const isOptionsShown = options.length > 0;\n const isAggregationsShown = aggregations.length > 0;\n\n return (\n <div className=\"aggregations\">\n {isOptionsShown && (\n <div className=\"form-inline\">\n <Select onChange={handleOperationChange} value={selectedOperation}>\n {options.map(option => (\n <Option value={option} key={option}>\n {option}\n </Option>\n ))}\n </Select>\n <button\n type=\"button\"\n className=\"btn btn-link btn-add\"\n onClick={handleAdd}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Aggregation\n </button>\n </div>\n )}\n {isOptionsShown && isAggregationsShown && <hr />}\n {isAggregationsShown && (\n <>\n {!isRollup && (\n <div className=\"form-inline\">\n <label>Placement:&nbsp;</label>\n <RadioGroup\n onChange={handleShowOnTopChange}\n value={`${showOnTop}`}\n >\n <RadioItem value=\"true\">Top</RadioItem>\n <RadioItem value=\"false\">Bottom</RadioItem>\n </RadioGroup>\n </div>\n )}\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <DraggableItemList<Aggregation>\n className=\"selected-aggregations\"\n itemCount={aggregations.length}\n items={aggregations}\n renderItem={renderAggregation}\n offset={0}\n onSelectionChange={handleAggregationSelectionChange}\n onSelect={handleAggregationSelect}\n selectedRanges={selectedRanges}\n isMultiSelect\n />\n </DragDropContext>\n </>\n )}\n </div>\n );\n}\n\nexport default Aggregations;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Aggregations.js","names":["React","useCallback","useEffect","useMemo","useState","DragDropContext","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","vsEdit","dhWarningFilled","Log","DraggableItemList","DragUtils","Option","Select","Radio","RadioGroup","Button","AggregationUtils","SELECTABLE_OPTIONS","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","Aggregations","_ref","isRollup","settings","onChange","onEdit","aggregations","showOnTop","options","filter","option","some","aggregation","operation","selectedOperation","setSelectedOperation","selectedRanges","setSelectedRanges","changeSettings","changedSettings","_objectSpread","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","debug","startDragging","handleDragEnd","_ref2","destination","source","stopDragging","destinationIndex","index","draggedItems","reorder","insertIndex","adjustDestinationIndex","newSelectedRanges","length","handleOperationChange","handleAdd","selected","invert","handleDeleteClicked","itemIndex","handleAggregationSelectionChange","handleAggregationSelect","isRollupOperation","handleShowOnTopChange","value","setDefaultOperation","includes","renderAggregation","_ref3","item","isClone","selectedCount","text","badgeText","concat","undefined","className","isEditable","children","icon","renderBadge","renderHandle","kind","tooltip","onClick","disabled","isOptionsShown","isAggregationsShown","map","type","id","marginStart","orientation","onDragStart","onDragEnd","itemCount","items","renderItem","offset","onSelectionChange","onSelect","isMultiSelect"],"sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { DragDropContext } from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhNewCircleLargeFilled,\n vsTrash,\n vsEdit,\n dhWarningFilled,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n DraggableItemList,\n DragUtils,\n Option,\n Select,\n Radio,\n RadioGroup,\n Button,\n} from '@deephaven/components';\nimport type { DraggableRenderItemProps, Range } from '@deephaven/components';\nimport { ModelIndex } from '@deephaven/grid';\nimport AggregationOperation from './AggregationOperation';\nimport AggregationUtils, { SELECTABLE_OPTIONS } from './AggregationUtils';\nimport './Aggregations.scss';\n\nconst log = Log.module('Aggregations');\n\nexport type Aggregation = {\n operation: AggregationOperation;\n selected: readonly string[];\n invert: boolean;\n};\n\nexport type AggregationSettings = {\n aggregations: readonly Aggregation[];\n showOnTop: boolean;\n};\n\nexport type AggregationsProps = {\n isRollup: boolean;\n settings: AggregationSettings;\n onChange: (settings: AggregationSettings) => void;\n onEdit: (aggregation: Aggregation) => void;\n};\n\nfunction Aggregations({\n isRollup,\n settings,\n onChange,\n onEdit,\n}: AggregationsProps): JSX.Element {\n const { aggregations, showOnTop } = settings;\n const options = useMemo(\n () =>\n SELECTABLE_OPTIONS.filter(\n option =>\n !aggregations.some(aggregation => aggregation.operation === option)\n ),\n [aggregations]\n );\n const [selectedOperation, setSelectedOperation] = useState(options[0]);\n const [selectedRanges, setSelectedRanges] = useState<Range[]>([]);\n const changeSettings = useCallback(\n changedSettings => {\n onChange({ ...settings, ...changedSettings });\n },\n [onChange, settings]\n );\n const changeAggregations = useCallback(\n newAggregations => {\n changeSettings({ aggregations: newAggregations });\n },\n [changeSettings]\n );\n\n const changeShowOnTop = useCallback(\n newShowOnTop => {\n changeSettings({ showOnTop: newShowOnTop });\n },\n [changeSettings]\n );\n\n const handleDragStart = useCallback(() => {\n log.debug('handleDragStart');\n\n DragUtils.startDragging();\n }, []);\n\n const handleDragEnd = useCallback(\n ({ destination, source }) => {\n log.debug('handleDragEnd', destination, source);\n\n DragUtils.stopDragging();\n\n if (destination === null) {\n return;\n }\n\n let destinationIndex = destination.index;\n if (source.index < destination.index) {\n destinationIndex += 1;\n }\n\n const newAggregations = [...aggregations];\n const draggedItems = DragUtils.reorder(\n newAggregations,\n selectedRanges,\n newAggregations,\n destinationIndex\n );\n const insertIndex = DragUtils.adjustDestinationIndex(\n destinationIndex,\n selectedRanges\n );\n const newSelectedRanges: Range[] = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n changeAggregations(newAggregations);\n setSelectedRanges(newSelectedRanges);\n },\n [changeAggregations, aggregations, selectedRanges, setSelectedRanges]\n );\n\n const handleOperationChange = useCallback(\n operation => {\n setSelectedOperation(operation);\n },\n [setSelectedOperation]\n );\n\n const handleAdd = useCallback(() => {\n changeAggregations([\n ...aggregations,\n { operation: selectedOperation, selected: [], invert: true },\n ]);\n }, [aggregations, selectedOperation, changeAggregations]);\n\n const handleDeleteClicked = useCallback(\n (itemIndex: ModelIndex) => {\n changeAggregations(\n aggregations.filter((aggregation, index) => index !== itemIndex)\n );\n },\n [aggregations, changeAggregations]\n );\n\n const handleAggregationSelectionChange = useCallback(\n newSelectedRanges => {\n setSelectedRanges(newSelectedRanges);\n },\n [setSelectedRanges]\n );\n\n const handleAggregationSelect = useCallback(\n itemIndex => {\n const aggregation = aggregations[itemIndex];\n if (!AggregationUtils.isRollupOperation(aggregation.operation)) {\n onEdit(aggregation);\n }\n },\n [aggregations, onEdit]\n );\n\n const handleShowOnTopChange = useCallback(\n (value: string) => {\n changeShowOnTop(value === 'true');\n },\n [changeShowOnTop]\n );\n\n useEffect(\n function setDefaultOperation() {\n if (options.length > 0 && !options.includes(selectedOperation)) {\n setSelectedOperation(options[0]);\n }\n },\n [options, selectedOperation]\n );\n\n const renderAggregation = useCallback(\n ({\n item,\n itemIndex,\n isClone = false,\n selectedCount,\n }: DraggableRenderItemProps<Aggregation>) => {\n const text = item.operation;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : undefined;\n const isRollupOperation = AggregationUtils.isRollupOperation(\n item.operation\n );\n const isEditable = !isClone && !isRollupOperation;\n return (\n <>\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">\n {text}\n {!isRollup && isRollupOperation && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Requires rollup\n </span>\n )}\n </span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n {!isClone && (\n <>\n <Button\n kind=\"ghost\"\n className=\"btn-edit\"\n icon={vsEdit}\n tooltip=\"Edit Columns\"\n onClick={() => onEdit(item)}\n disabled={!isEditable}\n />\n <Button\n kind=\"ghost\"\n className=\"btn-delete\"\n icon={vsTrash}\n tooltip=\"Delete Aggregation\"\n onClick={() => handleDeleteClicked(itemIndex)}\n />\n </>\n )}\n </>\n );\n },\n [handleDeleteClicked, onEdit, isRollup]\n );\n\n const isOptionsShown = options.length > 0;\n const isAggregationsShown = aggregations.length > 0;\n\n return (\n <div className=\"aggregations\">\n {isOptionsShown && (\n <div className=\"form-inline\">\n <Select onChange={handleOperationChange} value={selectedOperation}>\n {options.map(option => (\n <Option value={option} key={option}>\n {option}\n </Option>\n ))}\n </Select>\n <button\n type=\"button\"\n className=\"btn btn-link btn-add\"\n onClick={handleAdd}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Aggregation\n </button>\n </div>\n )}\n {isOptionsShown && isAggregationsShown && <hr />}\n {isAggregationsShown && (\n <>\n {!isRollup && (\n <div>\n <label id=\"placement-options-label\">Placement:&nbsp;</label>\n <RadioGroup\n aria-labelledby=\"placement-options-label\"\n marginStart=\"size-125\"\n orientation=\"horizontal\"\n onChange={handleShowOnTopChange}\n value={`${showOnTop}`}\n >\n <Radio value=\"true\">Top</Radio>\n <Radio value=\"false\">Bottom</Radio>\n </RadioGroup>\n </div>\n )}\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <DraggableItemList<Aggregation>\n className=\"selected-aggregations\"\n itemCount={aggregations.length}\n items={aggregations}\n renderItem={renderAggregation}\n offset={0}\n onSelectionChange={handleAggregationSelectionChange}\n onSelect={handleAggregationSelect}\n selectedRanges={selectedRanges}\n isMultiSelect\n />\n </DragDropContext>\n </>\n )}\n </div>\n );\n}\n\nexport default Aggregations;\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AACxE,SAASC,eAAe,QAAQ,qBAAqB;AACrD,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SACEC,sBAAsB,EACtBC,OAAO,EACPC,MAAM,EACNC,eAAe,QACV,kBAAkB;AACzB,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SACEC,iBAAiB,EACjBC,SAAS,EACTC,MAAM,EACNC,MAAM,EACNC,KAAK,EACLC,UAAU,EACVC,MAAM,QACD,uBAAuB;AAAC,OAIxBC,gBAAgB,IAAIC,kBAAkB;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAAA,SAAAC,QAAA,IAAAC,SAAA;AAG7C,IAAMC,GAAG,GAAGhB,GAAG,CAACiB,MAAM,CAAC,cAAc,CAAC;AAoBtC,SAASC,YAAYA,CAAAC,IAAA,EAKc;EAAA,IALb;IACpBC,QAAQ;IACRC,QAAQ;IACRC,QAAQ;IACRC;EACiB,CAAC,GAAAJ,IAAA;EAClB,IAAM;IAAEK,YAAY;IAAEC;EAAU,CAAC,GAAGJ,QAAQ;EAC5C,IAAMK,OAAO,GAAGnC,OAAO,CACrB,MACEkB,kBAAkB,CAACkB,MAAM,CACvBC,MAAM,IACJ,CAACJ,YAAY,CAACK,IAAI,CAACC,WAAW,IAAIA,WAAW,CAACC,SAAS,KAAKH,MAAM,CACtE,CAAC,EACH,CAACJ,YAAY,CACf,CAAC;EACD,IAAM,CAACQ,iBAAiB,EAAEC,oBAAoB,CAAC,GAAGzC,QAAQ,CAACkC,OAAO,CAAC,CAAC,CAAC,CAAC;EACtE,IAAM,CAACQ,cAAc,EAAEC,iBAAiB,CAAC,GAAG3C,QAAQ,CAAU,EAAE,CAAC;EACjE,IAAM4C,cAAc,GAAG/C,WAAW,CAChCgD,eAAe,IAAI;IACjBf,QAAQ,CAAAgB,aAAA,CAAAA,aAAA,KAAMjB,QAAQ,GAAKgB,eAAe,CAAE,CAAC;EAC/C,CAAC,EACD,CAACf,QAAQ,EAAED,QAAQ,CACrB,CAAC;EACD,IAAMkB,kBAAkB,GAAGlD,WAAW,CACpCmD,eAAe,IAAI;IACjBJ,cAAc,CAAC;MAAEZ,YAAY,EAAEgB;IAAgB,CAAC,CAAC;EACnD,CAAC,EACD,CAACJ,cAAc,CACjB,CAAC;EAED,IAAMK,eAAe,GAAGpD,WAAW,CACjCqD,YAAY,IAAI;IACdN,cAAc,CAAC;MAAEX,SAAS,EAAEiB;IAAa,CAAC,CAAC;EAC7C,CAAC,EACD,CAACN,cAAc,CACjB,CAAC;EAED,IAAMO,eAAe,GAAGtD,WAAW,CAAC,MAAM;IACxC2B,GAAG,CAAC4B,KAAK,CAAC,iBAAiB,CAAC;IAE5B1C,SAAS,CAAC2C,aAAa,CAAC,CAAC;EAC3B,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMC,aAAa,GAAGzD,WAAW,CAC/B0D,KAAA,IAA6B;IAAA,IAA5B;MAAEC,WAAW;MAAEC;IAAO,CAAC,GAAAF,KAAA;IACtB/B,GAAG,CAAC4B,KAAK,CAAC,eAAe,EAAEI,WAAW,EAAEC,MAAM,CAAC;IAE/C/C,SAAS,CAACgD,YAAY,CAAC,CAAC;IAExB,IAAIF,WAAW,KAAK,IAAI,EAAE;MACxB;IACF;IAEA,IAAIG,gBAAgB,GAAGH,WAAW,CAACI,KAAK;IACxC,IAAIH,MAAM,CAACG,KAAK,GAAGJ,WAAW,CAACI,KAAK,EAAE;MACpCD,gBAAgB,IAAI,CAAC;IACvB;IAEA,IAAMX,eAAe,GAAG,CAAC,GAAGhB,YAAY,CAAC;IACzC,IAAM6B,YAAY,GAAGnD,SAAS,CAACoD,OAAO,CACpCd,eAAe,EACfN,cAAc,EACdM,eAAe,EACfW,gBACF,CAAC;IACD,IAAMI,WAAW,GAAGrD,SAAS,CAACsD,sBAAsB,CAClDL,gBAAgB,EAChBjB,cACF,CAAC;IACD,IAAMuB,iBAA0B,GAAG,CACjC,CAACF,WAAW,EAAEA,WAAW,GAAGF,YAAY,CAACK,MAAM,GAAG,CAAC,CAAC,CACrD;IACDnB,kBAAkB,CAACC,eAAe,CAAC;IACnCL,iBAAiB,CAACsB,iBAAiB,CAAC;EACtC,CAAC,EACD,CAAClB,kBAAkB,EAAEf,YAAY,EAAEU,cAAc,EAAEC,iBAAiB,CACtE,CAAC;EAED,IAAMwB,qBAAqB,GAAGtE,WAAW,CACvC0C,SAAS,IAAI;IACXE,oBAAoB,CAACF,SAAS,CAAC;EACjC,CAAC,EACD,CAACE,oBAAoB,CACvB,CAAC;EAED,IAAM2B,SAAS,GAAGvE,WAAW,CAAC,MAAM;IAClCkD,kBAAkB,CAAC,CACjB,GAAGf,YAAY,EACf;MAAEO,SAAS,EAAEC,iBAAiB;MAAE6B,QAAQ,EAAE,EAAE;MAAEC,MAAM,EAAE;IAAK,CAAC,CAC7D,CAAC;EACJ,CAAC,EAAE,CAACtC,YAAY,EAAEQ,iBAAiB,EAAEO,kBAAkB,CAAC,CAAC;EAEzD,IAAMwB,mBAAmB,GAAG1E,WAAW,CACpC2E,SAAqB,IAAK;IACzBzB,kBAAkB,CAChBf,YAAY,CAACG,MAAM,CAAC,CAACG,WAAW,EAAEsB,KAAK,KAAKA,KAAK,KAAKY,SAAS,CACjE,CAAC;EACH,CAAC,EACD,CAACxC,YAAY,EAAEe,kBAAkB,CACnC,CAAC;EAED,IAAM0B,gCAAgC,GAAG5E,WAAW,CAClDoE,iBAAiB,IAAI;IACnBtB,iBAAiB,CAACsB,iBAAiB,CAAC;EACtC,CAAC,EACD,CAACtB,iBAAiB,CACpB,CAAC;EAED,IAAM+B,uBAAuB,GAAG7E,WAAW,CACzC2E,SAAS,IAAI;IACX,IAAMlC,WAAW,GAAGN,YAAY,CAACwC,SAAS,CAAC;IAC3C,IAAI,CAACxD,gBAAgB,CAAC2D,iBAAiB,CAACrC,WAAW,CAACC,SAAS,CAAC,EAAE;MAC9DR,MAAM,CAACO,WAAW,CAAC;IACrB;EACF,CAAC,EACD,CAACN,YAAY,EAAED,MAAM,CACvB,CAAC;EAED,IAAM6C,qBAAqB,GAAG/E,WAAW,CACtCgF,KAAa,IAAK;IACjB5B,eAAe,CAAC4B,KAAK,KAAK,MAAM,CAAC;EACnC,CAAC,EACD,CAAC5B,eAAe,CAClB,CAAC;EAEDnD,SAAS,CACP,SAASgF,mBAAmBA,CAAA,EAAG;IAC7B,IAAI5C,OAAO,CAACgC,MAAM,GAAG,CAAC,IAAI,CAAChC,OAAO,CAAC6C,QAAQ,CAACvC,iBAAiB,CAAC,EAAE;MAC9DC,oBAAoB,CAACP,OAAO,CAAC,CAAC,CAAC,CAAC;IAClC;EACF,CAAC,EACD,CAACA,OAAO,EAAEM,iBAAiB,CAC7B,CAAC;EAED,IAAMwC,iBAAiB,GAAGnF,WAAW,CACnCoF,KAAA,IAK6C;IAAA,IAL5C;MACCC,IAAI;MACJV,SAAS;MACTW,OAAO,GAAG,KAAK;MACfC;IACqC,CAAC,GAAAH,KAAA;IACtC,IAAMI,IAAI,GAAGH,IAAI,CAAC3C,SAAS;IAC3B,IAAM+C,SAAS,GAAGH,OAAO,MAAAI,MAAA,CAAMH,aAAa,IAAKI,SAAS;IAC1D,IAAMC,SAAS,GAAGN,OAAO,GAAG,sBAAsB,GAAGK,SAAS;IAC9D,IAAMb,iBAAiB,GAAG3D,gBAAgB,CAAC2D,iBAAiB,CAC1DO,IAAI,CAAC3C,SACP,CAAC;IACD,IAAMmD,UAAU,GAAG,CAACP,OAAO,IAAI,CAACR,iBAAiB;IACjD,oBACEtD,KAAA,CAAAE,SAAA;MAAAoE,QAAA,gBACEtE,KAAA;QACEoE,SAAS,EAAEvF,UAAU,CACnB,wBAAwB,EACxB,kCAAkC,EAClCuF,SACF,CAAE;QAAAE,QAAA,gBAEFtE,KAAA;UAAMoE,SAAS,EAAC,OAAO;UAAAE,QAAA,GACpBN,IAAI,EACJ,CAACzD,QAAQ,IAAI+C,iBAAiB,iBAC7BtD,KAAA;YAAMoE,SAAS,EAAC,oBAAoB;YAAAE,QAAA,gBAClCxE,IAAA,CAAChB,eAAe;cAACyF,IAAI,EAAErF;YAAgB,CAAE,CAAC,oBAC5C;UAAA,CAAM,CACP;QAAA,CACG,CAAC,EACNE,iBAAiB,CAACoF,WAAW,CAAC;UAAER,IAAI,EAAEC;QAAU,CAAC,CAAC,EAClD7E,iBAAiB,CAACqF,YAAY,CAAC,CAAC;MAAA,CAC9B,CAAC,EACL,CAACX,OAAO,iBACP9D,KAAA,CAAAE,SAAA;QAAAoE,QAAA,gBACExE,IAAA,CAACJ,MAAM;UACLgF,IAAI,EAAC,OAAO;UACZN,SAAS,EAAC,UAAU;UACpBG,IAAI,EAAEtF,MAAO;UACb0F,OAAO,EAAC,cAAc;UACtBC,OAAO,EAAEA,CAAA,KAAMlE,MAAM,CAACmD,IAAI,CAAE;UAC5BgB,QAAQ,EAAE,CAACR;QAAW,CACvB,CAAC,eACFvE,IAAA,CAACJ,MAAM;UACLgF,IAAI,EAAC,OAAO;UACZN,SAAS,EAAC,YAAY;UACtBG,IAAI,EAAEvF,OAAQ;UACd2F,OAAO,EAAC,oBAAoB;UAC5BC,OAAO,EAAEA,CAAA,KAAM1B,mBAAmB,CAACC,SAAS;QAAE,CAC/C,CAAC;MAAA,CACF,CACH;IAAA,CACD,CAAC;EAEP,CAAC,EACD,CAACD,mBAAmB,EAAExC,MAAM,EAAEH,QAAQ,CACxC,CAAC;EAED,IAAMuE,cAAc,GAAGjE,OAAO,CAACgC,MAAM,GAAG,CAAC;EACzC,IAAMkC,mBAAmB,GAAGpE,YAAY,CAACkC,MAAM,GAAG,CAAC;EAEnD,oBACE7C,KAAA;IAAKoE,SAAS,EAAC,cAAc;IAAAE,QAAA,GAC1BQ,cAAc,iBACb9E,KAAA;MAAKoE,SAAS,EAAC,aAAa;MAAAE,QAAA,gBAC1BxE,IAAA,CAACP,MAAM;QAACkB,QAAQ,EAAEqC,qBAAsB;QAACU,KAAK,EAAErC,iBAAkB;QAAAmD,QAAA,EAC/DzD,OAAO,CAACmE,GAAG,CAACjE,MAAM,iBACjBjB,IAAA,CAACR,MAAM;UAACkE,KAAK,EAAEzC,MAAO;UAAAuD,QAAA,EACnBvD;QAAM,GADmBA,MAEpB,CACT;MAAC,CACI,CAAC,eACTf,KAAA;QACEiF,IAAI,EAAC,QAAQ;QACbb,SAAS,EAAC,sBAAsB;QAChCQ,OAAO,EAAE7B,SAAU;QAAAuB,QAAA,gBAEnBxE,IAAA,CAAChB,eAAe;UAACyF,IAAI,EAAExF;QAAuB,CAAE,CAAC,mBAEnD;MAAA,CAAQ,CAAC;IAAA,CACN,CACN,EACA+F,cAAc,IAAIC,mBAAmB,iBAAIjF,IAAA,SAAK,CAAC,EAC/CiF,mBAAmB,iBAClB/E,KAAA,CAAAE,SAAA;MAAAoE,QAAA,GACG,CAAC/D,QAAQ,iBACRP,KAAA;QAAAsE,QAAA,gBACExE,IAAA;UAAOoF,EAAE,EAAC,yBAAyB;UAAAZ,QAAA,EAAC;QAAgB,CAAO,CAAC,eAC5DtE,KAAA,CAACP,UAAU;UACT,mBAAgB,yBAAyB;UACzC0F,WAAW,EAAC,UAAU;UACtBC,WAAW,EAAC,YAAY;UACxB3E,QAAQ,EAAE8C,qBAAsB;UAChCC,KAAK,KAAAU,MAAA,CAAKtD,SAAS,CAAG;UAAA0D,QAAA,gBAEtBxE,IAAA,CAACN,KAAK;YAACgE,KAAK,EAAC,MAAM;YAAAc,QAAA,EAAC;UAAG,CAAO,CAAC,eAC/BxE,IAAA,CAACN,KAAK;YAACgE,KAAK,EAAC,OAAO;YAAAc,QAAA,EAAC;UAAM,CAAO,CAAC;QAAA,CACzB,CAAC;MAAA,CACV,CACN,eACDxE,IAAA,CAAClB,eAAe;QACdyG,WAAW,EAAEvD,eAAgB;QAC7BwD,SAAS,EAAErD,aAAc;QAAAqC,QAAA,eAEzBxE,IAAA,CAACV,iBAAiB;UAChBgF,SAAS,EAAC,uBAAuB;UACjCmB,SAAS,EAAE5E,YAAY,CAACkC,MAAO;UAC/B2C,KAAK,EAAE7E,YAAa;UACpB8E,UAAU,EAAE9B,iBAAkB;UAC9B+B,MAAM,EAAE,CAAE;UACVC,iBAAiB,EAAEvC,gCAAiC;UACpDwC,QAAQ,EAAEvC,uBAAwB;UAClChC,cAAc,EAAEA,cAAe;UAC/BwE,aAAa;QAAA,CACd;MAAC,CACa,CAAC;IAAA,CAClB,CACH;EAAA,CACE,CAAC;AAEV;AAEA,eAAexF,YAAY"}