diff --git a/webapp/packages/core-app/src/NavigationTree/NavigationTreeNode/NavigationNode/NavigationNodeEditor.tsx b/webapp/packages/core-app/src/NavigationTree/NavigationTreeNode/NavigationNode/NavigationNodeEditor.tsx index f801101ca9..63712acd96 100644 --- a/webapp/packages/core-app/src/NavigationTree/NavigationTreeNode/NavigationNode/NavigationNodeEditor.tsx +++ b/webapp/packages/core-app/src/NavigationTree/NavigationTreeNode/NavigationNode/NavigationNodeEditor.tsx @@ -10,7 +10,7 @@ import { observer } from 'mobx-react-lite'; import { useCallback, useState } from 'react'; import { useService } from '@cloudbeaver/core-di'; -import { NotificationService } from '@cloudbeaver/core-events'; +import { EventContext, EventStopPropagationFlag, NotificationService } from '@cloudbeaver/core-events'; import { InlineEditor } from '../../../shared/InlineEditor/InlineEditor'; import type { NavNode } from '../../../shared/NodesManager/EntityTypes'; @@ -34,7 +34,7 @@ export const NavigationNodeEditor = observer(function NavigationNodeEdito } try { - if (node.name !== name) { + if (node.name !== name && name.trim().length) { setLoading(true); await navTreeResource.changeName(node, name); } @@ -46,6 +46,10 @@ export const NavigationNodeEditor = observer(function NavigationNodeEdito } }, [name, onClose, node, loading, navTreeResource, notificationService]); + const stopPropagation = (event: React.MouseEvent) => { + EventContext.set(event, EventStopPropagationFlag); + }; + return ( (function NavigationNodeEdito onSave={save} onReject={onClose} onBlur={onClose} + onClick={stopPropagation} + onDoubleClick={stopPropagation} /> ); }); diff --git a/webapp/packages/core-app/src/shared/InlineEditor/InlineEditor.tsx b/webapp/packages/core-app/src/shared/InlineEditor/InlineEditor.tsx index dd917c7c06..943d2e3afe 100644 --- a/webapp/packages/core-app/src/shared/InlineEditor/InlineEditor.tsx +++ b/webapp/packages/core-app/src/shared/InlineEditor/InlineEditor.tsx @@ -37,6 +37,8 @@ export interface InlineEditorProps extends Omit void; onReject?: () => void; onUndo?: () => void; + onClick?: (event: React.MouseEvent) => void; + onDoubleClick?: (event: React.MouseEvent) => void; className?: string; } @@ -55,6 +57,8 @@ export const InlineEditor = observer onSave, onUndo, onReject, + onClick, + onDoubleClick, className, ...rest }, ref) { @@ -103,7 +107,7 @@ export const InlineEditor = observer useImperativeHandle(ref, () => inputRef.current!); return styled(useStyles(InlineEditorStyles))( - + (function TreeNodeControl({ const context = useContext(TreeNodeContext); const handleEnter = (event: React.KeyboardEvent) => { - if (EventContext.has(event, EventTreeNodeExpandFlag, EventTreeNodeSelectFlag)) { + if (EventContext.has(event, EventTreeNodeExpandFlag, EventTreeNodeSelectFlag, EventStopPropagationFlag)) { return; } @@ -47,7 +47,7 @@ export const TreeNodeControl = observer(function TreeNodeControl({ }; const handleClick = (event: React.MouseEvent) => { - if (EventContext.has(event, EventTreeNodeExpandFlag, EventTreeNodeSelectFlag)) { + if (EventContext.has(event, EventTreeNodeExpandFlag, EventTreeNodeSelectFlag, EventStopPropagationFlag)) { return; } @@ -57,7 +57,7 @@ export const TreeNodeControl = observer(function TreeNodeControl({ }; const handleDbClick = (event: React.MouseEvent) => { - if (EventContext.has(event, EventTreeNodeExpandFlag, EventTreeNodeSelectFlag)) { + if (EventContext.has(event, EventTreeNodeExpandFlag, EventTreeNodeSelectFlag, EventStopPropagationFlag)) { return; } context.open();