Remove possibility to rename item on click a short delay after item has been selected (#5847)

Users noticed that they unwillingly edited object names when they only wanted to click/double-click/drag the object
This commit is contained in:
AlexandreS
2023-10-30 13:53:27 +01:00
committed by GitHub
parent c92025549d
commit 3a5198cb34
3 changed files with 0 additions and 54 deletions

View File

@@ -78,9 +78,6 @@
text-overflow: ellipsis;
user-select: none;
}
.tree-view .item-name.editable {
cursor: text;
}
.tree-view .item-name.placeholder {
color: var(--theme-text-secondary-color);

View File

@@ -23,7 +23,6 @@ import { dataObjectToProps } from '../../Utils/HTMLDataset';
const stopPropagation = e => e.stopPropagation();
const DELAY_BEFORE_OPENING_FOLDER_ON_DRAG_HOVER = 800;
const DELAY_BEFORE_ENABLING_NAME_EDITION_AFTER_SELECTION_ON_DESKTOP = 1000;
const DELAY_BEFORE_OPENING_CONTEXT_MENU_ON_MOBILE = 1000;
const onInputKeyDown = (event: KeyboardEvent) => {
@@ -121,7 +120,6 @@ const TreeViewRow = <Item: ItemBaseAttributes>(props: Props<Item>) => {
onOpen,
onSelect,
onBlurField,
onStartRenaming,
onEndRenaming,
renamedItemId,
onContextMenu,
@@ -136,10 +134,6 @@ const TreeViewRow = <Item: ItemBaseAttributes>(props: Props<Item>) => {
const left = node.depth * 15;
const forceUpdate = useForceUpdate();
const isStayingOverRef = React.useRef<boolean>(false);
const [
hasDelayPassedBeforeEditingName,
setHasDelayPassedBeforeEditingName,
] = React.useState<boolean>(false);
const openWhenOverTimeoutId = React.useRef<?TimeoutID>(null);
const [whereToDrop, setWhereToDrop] = React.useState<
'before' | 'after' | 'inside'
@@ -221,30 +215,8 @@ const TreeViewRow = <Item: ItemBaseAttributes>(props: Props<Item>) => {
[onOpen, node, forceUpdate, isStayingOverRef.current]
);
/**
* Effect allows editing the name of the node after a delay has passed
* after its selection by the user.
*/
React.useEffect(
() => {
if (isMobileScreen) return;
if (node.selected) {
if (!hasDelayPassedBeforeEditingName) {
const timeoutId = setTimeout(() => {
setHasDelayPassedBeforeEditingName(true);
}, DELAY_BEFORE_ENABLING_NAME_EDITION_AFTER_SELECTION_ON_DESKTOP);
return () => clearTimeout(timeoutId);
}
} else {
setHasDelayPassedBeforeEditingName(false);
}
},
[node.selected, isMobileScreen, hasDelayPassedBeforeEditingName]
);
const endRenaming = React.useCallback(
(newValue: string) => {
setHasDelayPassedBeforeEditingName(false);
onEndRenaming(node.item, newValue);
},
[onEndRenaming, node.item]
@@ -414,26 +386,7 @@ const TreeViewRow = <Item: ItemBaseAttributes>(props: Props<Item>) => {
: node.item.isPlaceholder
? ' placeholder'
: ''
}${
node.item.isRoot || node.item.isPlaceholder
? ''
: hasDelayPassedBeforeEditingName
? ' editable'
: ''
}`}
onClick={
node.item.isRoot ||
node.item.isPlaceholder ||
isMobileScreen ||
!hasDelayPassedBeforeEditingName
? null
: e => {
if (!e.metaKey && !e.shiftKey) {
e.stopPropagation();
onStartRenaming(node.id);
}
}
}
>
{node.name}
</span>

View File

@@ -45,7 +45,6 @@ export type ItemData<Item> = {|
onSelect: ({| node: FlattenedNode<Item>, exclusive?: boolean |}) => void,
onBlurField: () => void,
flattenedData: FlattenedNode<Item>[],
onStartRenaming: (nodeId: ?string) => void,
onEndRenaming: (item: Item, newName: string) => void,
onContextMenu: ({|
item: Item,
@@ -68,7 +67,6 @@ const getItemProps = memoizeOne(
onOpen: (FlattenedNode<Item>) => void,
onSelect: ({| node: FlattenedNode<Item>, exclusive?: boolean |}) => void,
onBlurField: () => void,
onStartRenaming: (nodeId: ?string) => void,
onEndRenaming: (item: Item, newName: string) => void,
renamedItemId: ?string,
onContextMenu: ({|
@@ -88,7 +86,6 @@ const getItemProps = memoizeOne(
onSelect,
onBlurField,
flattenedData,
onStartRenaming,
onEndRenaming,
renamedItemId,
onContextMenu,
@@ -492,7 +489,6 @@ const TreeView = <Item: ItemBaseAttributes>(
onOpen,
onSelect,
onBlurField,
setRenamedItemId,
onEndRenaming,
renamedItemId,
openContextMenu,