From 90f6df3de96a8973f3356f86a29768f82d82ac7f Mon Sep 17 00:00:00 2001 From: Wroud Date: Tue, 24 Nov 2020 21:11:20 +0300 Subject: [PATCH] fix(plugin-data-spreadsheet): CB-527 cell editing --- .../src/AgGridTable/AgGridTableController.ts | 9 +++++++-- .../AgGridTable/PlainTextEditor/PlainTextEditor.tsx | 10 ++++++++-- .../src/TableViewer/TableDataModel/TableEditor.ts | 7 +++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/webapp/packages/plugin-data-spreadsheet/src/AgGridTable/AgGridTableController.ts b/webapp/packages/plugin-data-spreadsheet/src/AgGridTable/AgGridTableController.ts index 7841de7c48..712659d2e6 100644 --- a/webapp/packages/plugin-data-spreadsheet/src/AgGridTable/AgGridTableController.ts +++ b/webapp/packages/plugin-data-spreadsheet/src/AgGridTable/AgGridTableController.ts @@ -20,7 +20,8 @@ import { GridOptions, CellClassParams, SortChangedEvent, - RowNode + RowNode, + CellEditingStoppedEvent } from '@ag-grid-community/core'; import { injectable, IInitializableController, IDestructibleController } from '@cloudbeaver/core-di'; import { @@ -75,6 +76,7 @@ export class AgGridTableController implements IInitializableController, IDestruc onBodyScroll: this.handleBodyScroll.bind(this), onSortChanged: this.handleSortChanged.bind(this), + onCellEditingStopped: this.handleCellEditingStopped.bind(this), }; @observable columns: ColDef[] = []; @@ -129,7 +131,6 @@ export class AgGridTableController implements IInitializableController, IDestruc startRow, endRow, successCallback, - sortModel, failCallback, } = params; @@ -232,6 +233,10 @@ export class AgGridTableController implements IInitializableController, IDestruc } } + private handleCellEditingStopped(event: CellEditingStoppedEvent) { + this.gridModel.onCellEditingStopped(event.rowIndex, event.column.getId(), event.value, false); + } + /* Actions */ private resetData(): void { diff --git a/webapp/packages/plugin-data-spreadsheet/src/AgGridTable/PlainTextEditor/PlainTextEditor.tsx b/webapp/packages/plugin-data-spreadsheet/src/AgGridTable/PlainTextEditor/PlainTextEditor.tsx index 8594db244c..bd33642c01 100644 --- a/webapp/packages/plugin-data-spreadsheet/src/AgGridTable/PlainTextEditor/PlainTextEditor.tsx +++ b/webapp/packages/plugin-data-spreadsheet/src/AgGridTable/PlainTextEditor/PlainTextEditor.tsx @@ -50,8 +50,6 @@ export const PlainTextEditor = forwardRef, ICellEditorP getValue: () => value.current, }), []); - useEffect(() => inputRef.current?.focus(), []); - const context: AgGridContext = props.context; const handleSave = useCallback(() => props.stopEditing(), [props.stopEditing]); @@ -75,6 +73,14 @@ export const PlainTextEditor = forwardRef, ICellEditorP forceUpdate(value.current); }, []); + useEffect(() => { + inputRef.current?.focus(); + + if (initValue !== props.value) { + handleChange(initValue); + } + }, []); + const isLastColumn = props.columnApi?.getAllGridColumns().slice(-1)[0] === props.column; const isLastRow = props.rowIndex > 0 && ((props.api?.getInfiniteRowCount() || -1) - 1 === props.rowIndex); let controlsPosition: InlineEditorControls = 'right'; diff --git a/webapp/packages/plugin-data-viewer/src/TableViewer/TableDataModel/TableEditor.ts b/webapp/packages/plugin-data-viewer/src/TableViewer/TableDataModel/TableEditor.ts index 11506ec1d8..2be7234d92 100644 --- a/webapp/packages/plugin-data-viewer/src/TableViewer/TableDataModel/TableEditor.ts +++ b/webapp/packages/plugin-data-viewer/src/TableViewer/TableDataModel/TableEditor.ts @@ -43,6 +43,13 @@ export class TableEditor { return; } + const row = this.dataModel.getRowByNumber(rowId); + + if (row[column.position] === value) { + this.revertCellValue(rowId, columnKey); + return; + } + const newValue = this.getOrCreateEditedRow(rowId) .setValue(column.position, value);