onlyoffice rework (#650)

#525 #515 #548 #523

This is a rewrite to have a more robust connexion with only office,
recovering forgotten files, handling editing sessions as global locks,
that kind
This commit is contained in:
ericlinagora
2024-10-02 17:59:52 +02:00
committed by GitHub
54 changed files with 2546 additions and 287 deletions
+4 -5
View File
@@ -20,10 +20,6 @@
"compenents.ConfirmTrashModalContent_move_to_trash": "Move to trash",
"compenents.ConfirmTrashModalContent_move_to_trash_desc": "Click 'Move to trash' to move the selected items to the trash folder. You can restore them later from the trash.",
"compenents.ConfirmTrashModalContent_to_trash": "to trash",
"compenents.ProprietiesModalContent_name": "Name",
"compenents.ProprietiesModalContent_place_holder": "Document or folder name",
"compenents.ProprietiesModalContent_rename": "Rename",
"compenents.ProprietiesModalContent_update_button": "Update name",
"compenents.VersionModalContent_create": "Create version",
"compenents.VersionModalContent_donwload": "Download",
"compenents.VersionModalContent_version": "Versions of",
@@ -100,7 +96,6 @@
"components.item_context_menu.to_trash_multiple": "Move selected items to trash",
"components.item_context_menu.today": "Today",
"components.item_context_menu.trash.empty": "Empty trash",
"components.item_context_menu.trash.exit": "Exit trash",
"components.item_context_menu.versions": "Versions",
"components.locked_features.locked_drive_popup.subtitle": "In the free version, you can store only 6GB.",
"components.locked_features.locked_drive_popup.title": "You have just reached the drive limit",
@@ -127,6 +122,10 @@
"components.open_desktop_popup.subtitle": "Opened in Tdrive app",
"components.pending_file_list.estimation.approximations": "Waiting for time approximations...",
"components.pending_file_list.estimation.end": "Will end",
"components.PropertiesModalContent_name": "Name",
"components.PropertiesModalContent_place_holder": "Document or folder name",
"components.PropertiesModalContent_rename": "Rename",
"components.PropertiesModalContent_update_button": "Update name",
"components.public-link-access-level-create": "Anyone with the link will have access to",
"components.public-link-access-level-delete": "Delete link",
"components.public-link-access-level-update-subtitle": "Anyone with the link has access to",
+4 -5
View File
@@ -218,10 +218,10 @@
"components.SelectorModalContent_no_items": "Pas de fichier sélectionné",
"components.SelectorModalContent_select": "sélectionné(s)",
"components.SelectorModalContent_files": "fichier(s)",
"compenents.ProprietiesModalContent_rename": "Renommer",
"compenents.ProprietiesModalContent_name": "Nom",
"compenents.ProprietiesModalContent_place_holder": "Nom du fichier ou du document",
"compenents.ProprietiesModalContent_update_button": "Renommer",
"components.PropertiesModalContent_rename": "Renommer",
"components.PropertiesModalContent_name": "Nom",
"components.PropertiesModalContent_place_holder": "Nom du fichier ou du document",
"components.PropertiesModalContent_update_button": "Renommer",
"compenents.ConfirmTrashModalContent_move": "Déplacer",
"compenents.ConfirmTrashModalContent_to_trash": "vers la corbeille",
"compenents.ConfirmTrashModalContent_items_to_trash": "éléments vers la corbeille",
@@ -337,7 +337,6 @@
"components.item_context_menu.clear_selection": "Annuler la sélection",
"components.item_context_menu.delete_multiple": "Supprimer",
"components.item_context_menu.to_trash_multiple": "Supprimer",
"components.item_context_menu.trash.exit": "Quitter la corbeille",
"components.item_context_menu.trash.empty": "Vider la corbeille",
"components.item_context_menu.add_documents": "Ajouter un document ou un dossier",
"components.item_context_menu.download_folder": "Télécharger le dossier",
+4 -5
View File
@@ -20,10 +20,6 @@
"compenents.ConfirmTrashModalContent_move_to_trash": "Удалить",
"compenents.ConfirmTrashModalContent_move_to_trash_desc": "Нажмите 'Удалить' чтобы переместить выделенные элементы в корзину. Вы сможете восстановить их позже.",
"compenents.ConfirmTrashModalContent_to_trash": "в корзину",
"compenents.ProprietiesModalContent_name": "Имя",
"compenents.ProprietiesModalContent_place_holder": "Имя папки или документа",
"compenents.ProprietiesModalContent_rename": "Переименовать",
"compenents.ProprietiesModalContent_update_button": "Переименовать",
"compenents.VersionModalContent_create": "Создать версию",
"compenents.VersionModalContent_donwload": "Скачать",
"compenents.VersionModalContent_version": "Версии ...",
@@ -100,7 +96,6 @@
"components.item_context_menu.to_trash_multiple": "Удалить",
"components.item_context_menu.today": "Сегодня",
"components.item_context_menu.trash.empty": "Очистить корзину",
"components.item_context_menu.trash.exit": "Выйти из корзины",
"components.item_context_menu.versions": "История изменений",
"components.locked_features.locked_drive_popup.subtitle": "В бесплатной версии можно хранить только 6 ГБ.",
"components.locked_features.locked_drive_popup.title": "Вы не можете загружать больше файлов",
@@ -127,6 +122,10 @@
"components.open_desktop_popup.subtitle": "открыто в приложении Tdrive",
"components.pending_file_list.estimation.approximations": "Примерное время ожидания...",
"components.pending_file_list.estimation.end": "Закончится через",
"components.PropertiesModalContent_name": "Имя",
"components.PropertiesModalContent_place_holder": "Имя папки или документа",
"components.PropertiesModalContent_rename": "Переименовать",
"components.PropertiesModalContent_update_button": "Переименовать",
"components.public-link-access-level-create": "Все кто имеет ссылку буду иметь доступ",
"components.public-link-access-level-delete": "Удалить ссылку",
"components.public-link-access-level-update-subtitle": "У каждого, кто имеет ссылку, есть доступ к",
+4 -5
View File
@@ -233,10 +233,10 @@
"components.SelectorModalContent_no_items": "Không có mục nào được chọn",
"components.SelectorModalContent_select": "Đã chọn",
"components.SelectorModalContent_files": "tệp",
"compenents.ProprietiesModalContent_rename": "Đổi tên",
"compenents.ProprietiesModalContent_name": "Tên",
"compenents.ProprietiesModalContent_place_holder": "Tên tài liệu hoặc thư mục",
"compenents.ProprietiesModalContent_update_button": "Cập nhật tên",
"components.PropertiesModalContent_rename": "Đổi tên",
"components.PropertiesModalContent_name": "Tên",
"components.PropertiesModalContent_place_holder": "Tên tài liệu hoặc thư mục",
"components.PropertiesModalContent_update_button": "Cập nhật tên",
"compenents.ConfirmTrashModalContent_move": "Di chuyển",
"compenents.ConfirmTrashModalContent_to_trash": "vào thùng rác",
"compenents.ConfirmTrashModalContent_items_to_trash": "mục vào thùng rác",
@@ -326,7 +326,6 @@
"components.item_context_menu.clear_selection": "Xóa lựa chọn",
"components.item_context_menu.delete_multiple": "Xóa",
"components.item_context_menu.to_trash_multiple": "Di chuyển các mục đã chọn vào thùng rác",
"components.item_context_menu.trash.exit": "Thoát thùng rác",
"components.item_context_menu.trash.empty": "Làm trống thùng rác",
"components.item_context_menu.add_documents": "Thêm tài liệu hoặc thư mục",
"components.item_context_menu.download_folder": "Tải xuống thư mục",
@@ -275,12 +275,6 @@ export const useOnBuildContextMenu = (
//Add parent related menus
const newMenuActions: any[] = inTrash
? [
{
type: 'menu',
text: Languages.t('components.item_context_menu.trash.exit'),
onClick: () => setParentId('root'),
},
{ type: 'separator' },
{
type: 'menu',
text: Languages.t('components.item_context_menu.trash.empty'),
@@ -4,7 +4,7 @@ import { Input } from '@atoms/input/input-text';
import { Modal, ModalContent } from '@atoms/modal';
import { useDriveActions } from '@features/drive/hooks/use-drive-actions';
import { useDriveItem } from '@features/drive/hooks/use-drive-item';
import { useEffect, useState } from 'react';
import { useEffect, useRef, useState } from 'react';
import { atom, useRecoilState } from 'recoil';
import Languages from '@features/global/services/languages-service';
@@ -44,54 +44,79 @@ const PropertiesModalContent = ({ id, onClose, inPublicSharing }: { id: string;
const { update } = useDriveActions(inPublicSharing);
const [loading, setLoading] = useState(false);
const [name, setName] = useState('');
const inputRef = useRef<HTMLInputElement>(null);
useEffect(() => {
refresh(id);
}, []);
useEffect(() => {
setTimeout(() => {
if (inputRef.current) {
inputRef.current.focus();
const lastDot = inputRef.current.value.lastIndexOf('.');
const endRange = lastDot >= 0 ? lastDot : inputRef.current.value.length;
inputRef.current.setSelectionRange(0, endRange);
}
}, 100);
}, []);
useEffect(() => {
if (!name) setName(item?.name || '');
}, [item?.name]);
const doSave = async () => {
setLoading(true);
if (item) {
let finalName = (name || '').trim();
//TODO: Confirm rename if extension changed ?
if (!item?.is_directory) {
//TODO: Why do we trim extensions on folders ?
const lastDotIndex = finalName.lastIndexOf('.');
if (lastDotIndex !== -1) {
const fileExtension = name.slice(lastDotIndex);
finalName = finalName.slice(0, lastDotIndex) + fileExtension;
}
}
await update({ name: finalName }, id, item.parent_id);
}
onClose();
setLoading(false);
}
return (
<ModalContent
title={Languages.t('compenents.ProprietiesModalContent_rename') + ' ' + item?.name}
title={Languages.t('components.PropertiesModalContent_rename') + ' ' + item?.name}
>
<InputLabel
className="mt-4"
label={Languages.t('compenents.ProprietiesModalContent_name')}
label={Languages.t('components.PropertiesModalContent_name')}
input={
<Input
value={name}
inputRef={inputRef}
onChange={e => setName(e.target.value)}
placeholder={Languages.t('compenents.ProprietiesModalContent_place_holder')}
onKeyUp={({ key }) => {
if (!loading) {
if (key === 'Enter')
doSave();
else if (key === "Escape")
onClose();
}
}}
placeholder={Languages.t('components.PropertiesModalContent_place_holder')}
/>
}
/>
<br />
<Button
disabled={!name}
disabled={!((name || '').trim())}
className="float-right mt-4"
theme="primary"
loading={loading}
onClick={async () => {
setLoading(true);
if (item) {
let finalName = name;
if (!item?.is_directory) {
const lastDotIndex = finalName.lastIndexOf('.');
if (lastDotIndex !== -1) {
const fileExtension = name.slice(lastDotIndex);
finalName = finalName.slice(0, lastDotIndex) + fileExtension;
}
}
await update({ name: finalName }, id, item.parent_id);
}
onClose();
setLoading(false);
}}
onClick={doSave}
>
{Languages.t('compenents.ProprietiesModalContent_update_button')}
{Languages.t('components.PropertiesModalContent_update_button')}
</Button>
</ModalContent>
);