diff --git a/services/web/frontend/js/features/file-tree/components/file-tree-item/file-tree-item-inner.js b/services/web/frontend/js/features/file-tree/components/file-tree-item/file-tree-item-inner.js
index 646da8dff6..c75d383d90 100644
--- a/services/web/frontend/js/features/file-tree/components/file-tree-item/file-tree-item-inner.js
+++ b/services/web/frontend/js/features/file-tree/components/file-tree-item/file-tree-item-inner.js
@@ -16,7 +16,7 @@ function FileTreeItemInner({ id, name, isSelected, icons }) {
const hasMenu = hasWritePermissions && isSelected
- const { isDragging, dragRef } = useDraggable(id)
+ const { isDragging, dragRef, isDraggable, setIsDraggable } = useDraggable(id)
const itemRef = createRef()
@@ -54,6 +54,7 @@ function FileTreeItemInner({ id, name, isSelected, icons }) {
role="presentation"
ref={dragRef}
onContextMenu={handleContextMenu}
+ draggable={isDraggable}
>
{icons}
-
+
{hasMenu ? : null}
diff --git a/services/web/frontend/js/features/file-tree/components/file-tree-item/file-tree-item-name.js b/services/web/frontend/js/features/file-tree/components/file-tree-item/file-tree-item-name.js
index be4c994ced..1fbfa511a1 100644
--- a/services/web/frontend/js/features/file-tree/components/file-tree-item/file-tree-item-name.js
+++ b/services/web/frontend/js/features/file-tree/components/file-tree-item/file-tree-item-name.js
@@ -1,11 +1,11 @@
-import React, { useState } from 'react'
+import React, { useState, useEffect } from 'react'
import PropTypes from 'prop-types'
import { useRefWithAutoFocus } from '../../../../infrastructure/auto-focus'
import { useFileTreeActionable } from '../../contexts/file-tree-actionable'
-function FileTreeItemName({ name, isSelected }) {
+function FileTreeItemName({ name, isSelected, setIsDraggable }) {
const {
isRenaming,
startRenaming,
@@ -16,6 +16,10 @@ function FileTreeItemName({ name, isSelected }) {
const isRenamingEntity = isRenaming && isSelected && !error
+ useEffect(() => {
+ setIsDraggable(!isRenamingEntity)
+ }, [setIsDraggable, isRenamingEntity])
+
if (isRenamingEntity) {
return (
', function() {
+ const setIsDraggable = sinon.stub()
+
beforeEach(function() {
global.requestAnimationFrame = sinon.stub()
})
afterEach(function() {
delete global.requestAnimationFrame
+ setIsDraggable.reset()
})
it('renders name as button', function() {
- renderWithContext()
+ renderWithContext(
+
+ )
screen.getByRole('button', { name: 'foo.tex' })
expect(screen.queryByRole('textbox')).to.not.exist
})
it("doesn't start renaming on unselected component", function() {
- renderWithContext()
+ renderWithContext(
+
+ )
const button = screen.queryByRole('button')
fireEvent.click(button)
@@ -33,7 +48,13 @@ describe('', function() {
})
it('start renaming on double-click', function() {
- renderWithContext()
+ renderWithContext(
+
+ )
const button = screen.queryByRole('button')
fireEvent.click(button)
@@ -42,12 +63,20 @@ describe('', function() {
screen.getByRole('textbox')
expect(screen.queryByRole('button')).to.not.exist
expect(global.requestAnimationFrame).to.be.calledOnce
+ expect(setIsDraggable).to.be.calledWith(false)
})
it('cannot start renaming in read-only', function() {
- renderWithContext(, {
- contextProps: { hasWritePermissions: false }
- })
+ renderWithContext(
+ ,
+ {
+ contextProps: { hasWritePermissions: false }
+ }
+ )
const button = screen.queryByRole('button')
fireEvent.click(button)
@@ -59,7 +88,13 @@ describe('', function() {
describe('stop renaming', function() {
beforeEach(function() {
- renderWithContext()
+ renderWithContext(
+
+ )
const button = screen.getByRole('button')
fireEvent.click(button)
@@ -75,6 +110,7 @@ describe('', function() {
fireEvent.keyDown(input, { key: 'Escape' })
screen.getByRole('button', { name: 'foo.tex' })
+ expect(setIsDraggable).to.be.calledWith(true)
})
})
})