diff --git a/webapp/packages/core-app/src/shared/InlineEditor/InlineEditor.tsx b/webapp/packages/core-app/src/shared/InlineEditor/InlineEditor.tsx index 2953adc0f4..bbf7af7906 100644 --- a/webapp/packages/core-app/src/shared/InlineEditor/InlineEditor.tsx +++ b/webapp/packages/core-app/src/shared/InlineEditor/InlineEditor.tsx @@ -13,9 +13,9 @@ import { import { useImperativeHandle } from 'react'; import styled, { use } from 'reshadow'; -import { Icon } from '@cloudbeaver/core-blocks'; +import { Icon, useObjectRef } from '@cloudbeaver/core-blocks'; import { useService } from '@cloudbeaver/core-di'; -import { CommonDialogService } from '@cloudbeaver/core-dialogs'; +import { CommonDialogService, DialogueStateResult } from '@cloudbeaver/core-dialogs'; import { useStyles } from '@cloudbeaver/core-theming'; import { EditorDialog } from './EditorDialog'; @@ -64,33 +64,39 @@ export const InlineEditor = observer onReject, className, }, ref) { + const props = useObjectRef({ + onChange, + onReject, + onSave, + value, + }); + const commonDialogService = useService(CommonDialogService); - const handleChange = useCallback((event: ChangeEvent| string) => { - const newValue = typeof event === 'string' ? event : event.target.value; - onChange(newValue); - }, [onChange]); + const handleChange = useCallback((event: ChangeEvent) => { + props.onChange(event.target.value); + }, []); const handlePopup = useCallback(async () => { - const newValue = await commonDialogService.open(EditorDialog, value); - if (typeof newValue === 'string') { - handleChange(newValue); - onSave(); - } else if (onReject) { - onReject(); + const newValue = await commonDialogService.open(EditorDialog, props.value); + if (newValue === DialogueStateResult.Rejected || newValue === DialogueStateResult.Resolved) { + props.onReject?.(); + } else { + props.onChange(newValue); + props.onSave(); } - }, [value, commonDialogService, onSave, onReject, handleChange]); + }, []); const handleKeyDown = useCallback((event: React.KeyboardEvent) => { switch (event.key) { case 'Enter': - onSave(); + props.onSave(); break; case 'Escape': - onReject?.(); + props.onReject?.(); break; } - }, [onSave, onReject]); + }, []); const inputRef = useRef(null); diff --git a/webapp/packages/plugin-connections/src/PublicConnectionForm/PublicConnectionForm.tsx b/webapp/packages/plugin-connections/src/PublicConnectionForm/PublicConnectionForm.tsx index dbdb73567d..9e798355a6 100644 --- a/webapp/packages/plugin-connections/src/PublicConnectionForm/PublicConnectionForm.tsx +++ b/webapp/packages/plugin-connections/src/PublicConnectionForm/PublicConnectionForm.tsx @@ -62,13 +62,7 @@ export const PublicConnectionForm: React.FC = observer(function PublicConnection const service = useService(PublicConnectionFormService); const close = useCallback(() => service.close(), []); - const save = useCallback((config: ConnectionConfig) => { - if (config.connectionId) { - service.change({ connectionId: config.connectionId }); - } else { - service.close(true); - } - }, []); + const save = useCallback(() => service.close(true), []); return styled(styles)( diff --git a/webapp/packages/plugin-data-spreadsheet-new/src/DataGrid/CellEditor/CellEditor.tsx b/webapp/packages/plugin-data-spreadsheet-new/src/DataGrid/CellEditor/CellEditor.tsx index 09a7474826..84055631db 100644 --- a/webapp/packages/plugin-data-spreadsheet-new/src/DataGrid/CellEditor/CellEditor.tsx +++ b/webapp/packages/plugin-data-spreadsheet-new/src/DataGrid/CellEditor/CellEditor.tsx @@ -89,8 +89,10 @@ export const CellEditor = observer, 'rowIdx' | 'row' const type = typeof tableDataContext?.getCellValue(rowIdx, column.key) === 'number' ? 'number' : 'text'; const handleSave = () => { - dataGridContext.model.source.getEditor(dataGridContext.resultIndex) - .setCell(rowIdx, Number(column.key), Number(value)); + if (type === 'number') { + const editor = dataGridContext.model.source.getEditor(dataGridContext.resultIndex); + editor.setCell(rowIdx, Number(column.key), Number(editor.getCell(rowIdx, Number(column.key)))); + } onClose(false); }; const handleReject = () => { diff --git a/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/DatabaseDataEditor.ts b/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/DatabaseDataEditor.ts index ace8d45d4b..32ff30339a 100644 --- a/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/DatabaseDataEditor.ts +++ b/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/DatabaseDataEditor.ts @@ -69,7 +69,7 @@ export class DatabaseDataEditor implements set: this.set.bind(this, result), setCell: this.setCell.bind(this, result), get: this.get.bind(this, result), - getCell: this.get.bind(this, result), + getCell: this.getCell.bind(this, result), isCellEdited: this.isCellEdited.bind(this, result), isEdited: this.isResultEdited.bind(this, result), isRowEdited: this.isRowEdited.bind(this, result),