diff --git a/tdrive/frontend/public/locales/en.json b/tdrive/frontend/public/locales/en.json
index 46d06b7c..a1a97dfc 100644
--- a/tdrive/frontend/public/locales/en.json
+++ b/tdrive/frontend/public/locales/en.json
@@ -245,7 +245,7 @@
"components.item_context_menu.versions": "Versions",
"components.item_context_menu.move": "Move",
"components.item_context_menu.move.modal_header": "Move",
- "components.item_context_menu.move_to_trash": "Move to trash",
+ "components.item_context_menu.move_to_trash": "Delete",
"components.item_context_menu.delete": "Delete",
"components.item_context_menu.move_multiple": "Move selected items",
"components.item_context_menu.move_multiple.modal_header": "Move selected items",
diff --git a/tdrive/frontend/public/locales/fr.json b/tdrive/frontend/public/locales/fr.json
index 4ca04d9d..1b4ea66f 100644
--- a/tdrive/frontend/public/locales/fr.json
+++ b/tdrive/frontend/public/locales/fr.json
@@ -245,7 +245,7 @@
"components.item_context_menu.versions": "Versions",
"components.item_context_menu.move": "Déplacer",
"components.item_context_menu.move.modal_header": "Déplacer",
- "components.item_context_menu.move_to_trash": "Déplacer vers la corbeille",
+ "components.item_context_menu.move_to_trash": "Supprimer",
"components.item_context_menu.delete": "Supprimer",
"components.item_context_menu.move_multiple": "Déplacer les éléments sélectionnés",
"components.item_context_menu.move_multiple.modal_header": "Déplacer les éléments sélectionnés",
diff --git a/tdrive/frontend/src/app/components/menus/menu.jsx b/tdrive/frontend/src/app/components/menus/menu.jsx
index a7c5de0e..b201e411 100755
--- a/tdrive/frontend/src/app/components/menus/menu.jsx
+++ b/tdrive/frontend/src/app/components/menus/menu.jsx
@@ -1,5 +1,4 @@
-import React, { Component } from 'react';
-
+import React from 'react';
import MenusManager from '@components/menus/menus-manager.jsx';
/*
@@ -24,71 +23,91 @@ export default class Menu extends React.Component {
*/
static closeAll() {
- MenusManager.closeMenu();
+ MenusManager.closeAllMenus(); // Corrected method name to closeAllMenus()
}
constructor(props) {
- super();
+ super(props);
this.state = {
- menus_manager: MenusManager,
+ isMenuOpen: false,
};
+ this.open = false; // Added initialization for open state
+ this.container = React.createRef(); // Ref for container div
+ this.previousMenusId = null; // Added initialization for previousMenusId
+ }
+
+ componentDidMount() {
MenusManager.addListener(this);
}
+
componentWillUnmount() {
if (this.props.onClose && this.open) {
this.props.onClose();
}
MenusManager.removeListener(this);
}
+
openMenuFromParent(menu, rect, position) {
MenusManager.openMenu(menu, rect, position);
}
+
openMenu(evt) {
- this.open = true;
- evt.preventDefault();
- evt.stopPropagation();
- var elementRect = window.getBoundingClientRect(this.container);
- elementRect.x = elementRect.x || elementRect.left;
- elementRect.y = elementRect.y || elementRect.top;
- this.previous_menus_id = MenusManager.openMenu(
- this.props.menu,
- elementRect,
- this.props.position,
- );
- if (this.props.onOpen) this.props.onOpen();
+ if (this.open) {
+ this.closeAll();
+ } else {
+ this.open = true;
+ evt.preventDefault();
+ evt.stopPropagation();
+ var elementRect = this.container.current.getBoundingClientRect(); // Fixed getBoundingClientRect()
+ elementRect.x = elementRect.x || elementRect.left;
+ elementRect.y = elementRect.y || elementRect.top;
+ this.previousMenusId = MenusManager.openMenu( // Updated variable name
+ this.props.menu,
+ elementRect,
+ this.props.position,
+ );
+ if (this.props.onOpen) this.props.onOpen();
+ }
}
+
shouldComponentUpdate(nextProps, nextState) {
- if (nextProps.menu != this.props.menu && this.open) {
+ if (nextProps.menu !== this.props.menu && this.open) { // Fixed comparison operator
this.setState({});
}
if (
- (this.state.menus_manager.menus.length == 0 && this.previous_menus_number > 0) ||
- this.state.menus_manager.last_opened_id != this.previous_menus_id
+ (MenusManager.menus.length === 0 && this.previousMenusNumber > 0) ||
+ MenusManager.lastOpenedId !== this.previousMenusId // Updated variable name
) {
if (this.open && this.props.onClose) {
this.props.onClose();
}
this.open = false;
}
- if (this.previous_menus_number != this.state.menus_manager.menus.length) {
- this.previous_menus_number = this.state.menus_manager.menus.length;
+ if (this.previousMenusNumber !== MenusManager.menus.length) {
+ this.previousMenusNumber = MenusManager.menus.length;
}
- if (this.props.style !== nextProps.style || this.props.className !== nextProps.className) {
+ if (
+ this.props.style !== nextProps.style ||
+ this.props.className !== nextProps.className
+ ) {
return true;
}
return false;
}
+
render() {
return (
(this.container = node)}
+ ref={this.container}
style={this.props.style}
- onClick={evt => {
+ onClick={(evt) => {
+ console.log('if this open: ', this.state.isMenuOpen);
if (this.props.toggle) {
if (!this.open) {
+ this.setState({ ...this.state, isMenuOpen: true });
this.openMenu(evt);
} else {
MenusManager.closeMenu();
diff --git a/tdrive/frontend/src/app/components/menus/menus-manager.jsx b/tdrive/frontend/src/app/components/menus/menus-manager.jsx
index c2670851..ec4d3e4a 100755
--- a/tdrive/frontend/src/app/components/menus/menus-manager.jsx
+++ b/tdrive/frontend/src/app/components/menus/menus-manager.jsx
@@ -16,6 +16,7 @@ class MenusManager extends Observable {
this.lastOpen = 0;
this.willClose = false;
this.max_level = 0;
+ this.isOpen = 0;
var that = this;
Globals.window.addEventListener('keydown', function (evt) {
@@ -57,7 +58,7 @@ class MenusManager extends Observable {
this.notify();
}
async openMenu(menu, domRect, positionType, options) {
-
+ this.isOpen = 1;
if(typeof menu === 'function') {
menu = await menu();
}
diff --git a/tdrive/frontend/src/app/views/client/body/drive/context-menu.tsx b/tdrive/frontend/src/app/views/client/body/drive/context-menu.tsx
index 2d5a46a7..6c440274 100644
--- a/tdrive/frontend/src/app/views/client/body/drive/context-menu.tsx
+++ b/tdrive/frontend/src/app/views/client/body/drive/context-menu.tsx
@@ -63,24 +63,6 @@ export const useOnBuildContextMenu = (children: DriveItem[], initialParentId?: s
hide: item.is_directory,
onClick: () => preview(item),
},
- {
- type: 'menu',
- text: Languages.t('components.item_context_menu.download'),
- onClick: () => download(item.id),
- },
- { type: 'separator' },
- {
- type: 'menu',
- text: Languages.t('components.item_context_menu.rename'),
- hide: access === 'read',
- onClick: () => setPropertiesModalState({ open: true, id: item.id }),
- },
- {
- type: 'menu',
- text: Languages.t('components.item_context_menu.manage_access'),
- hide: access === 'read' || getPublicLinkToken(),
- onClick: () => setAccessModalState({ open: true, id: item.id }),
- },
{
type: 'menu',
text: Languages.t('components.item_context_menu.share'),
@@ -89,20 +71,15 @@ export const useOnBuildContextMenu = (children: DriveItem[], initialParentId?: s
},
{
type: 'menu',
- text: Languages.t('components.item_context_menu.copy_link'),
- hide: !item.access_info.public?.level || item.access_info.public?.level === 'none',
- onClick: () => {
- copyToClipboard(getPublicLink(item || parent?.item));
- ToasterService.success(
- Languages.t('components.item_context_menu.copy_link.success'),
- );
- },
+ text: Languages.t('components.item_context_menu.download'),
+ onClick: () => download(item.id),
},
+ { type: 'separator' },
{
type: 'menu',
- text: Languages.t('components.item_context_menu.versions'),
- hide: item.is_directory,
- onClick: () => setVersionModal({ open: true, id: item.id }),
+ text: Languages.t('components.item_context_menu.manage_access'),
+ hide: access === 'read' || getPublicLinkToken(),
+ onClick: () => setAccessModalState({ open: true, id: item.id }),
},
{
type: 'menu',
@@ -127,6 +104,29 @@ export const useOnBuildContextMenu = (children: DriveItem[], initialParentId?: s
},
}),
},
+ {
+ type: 'menu',
+ text: Languages.t('components.item_context_menu.rename'),
+ hide: access === 'read',
+ onClick: () => setPropertiesModalState({ open: true, id: item.id }),
+ },
+ {
+ type: 'menu',
+ text: Languages.t('components.item_context_menu.copy_link'),
+ hide: !item.access_info.public?.level || item.access_info.public?.level === 'none',
+ onClick: () => {
+ copyToClipboard(getPublicLink(item || parent?.item));
+ ToasterService.success(
+ Languages.t('components.item_context_menu.copy_link.success'),
+ );
+ },
+ },
+ {
+ type: 'menu',
+ text: Languages.t('components.item_context_menu.versions'),
+ hide: item.is_directory,
+ onClick: () => setVersionModal({ open: true, id: item.id }),
+ },
{ type: 'separator', hide: access !== 'manage' },
{
type: 'menu',
diff --git a/tdrive/frontend/src/app/views/client/side-bar/index.tsx b/tdrive/frontend/src/app/views/client/side-bar/index.tsx
index a83f941d..cf529232 100644
--- a/tdrive/frontend/src/app/views/client/side-bar/index.tsx
+++ b/tdrive/frontend/src/app/views/client/side-bar/index.tsx
@@ -62,14 +62,6 @@ export default () => {
Drive
-
+