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 - +