Merge branch 'refs/heads/develop' into bugfix/esc-scroll-to-caret
This commit is contained in:
commit
399ac27016
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "أنشئ جدول بيانات",
|
||||
"HotkeysCreatingObjects": "إنشاء العناصر",
|
||||
"HotkeysCutSelected": "قص العناصر المحددة إلى الحافظة.",
|
||||
"HotkeysEnterKey": "ادخل",
|
||||
"HotkeysExtendSelectionDown": "تمديد التحديد لأسفل",
|
||||
"HotkeysExtendSelectionLeft": "تمديد التحديد لليسار",
|
||||
"HotkeysExtendSelectionRight": "تمديد التحديد لليمين",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "حدد العنصر التالي على اليمين",
|
||||
"HotkeysSelectUp": "حدد العنصر التالي لأعلى",
|
||||
"HotkeysShortcuts": "عرض قائمة مفاتيح الاخصار للوحة المفاتيح",
|
||||
"HotkeysSpaceKey": "إستضافة",
|
||||
"HotkeysUndoLastAction": "التراجع عن الإجراء الأخير",
|
||||
"HotkeysUploadFile": "ارفع الملف",
|
||||
"HotkeysUploadingObjects": "رفع العناصر",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Cədvəl yarat",
|
||||
"HotkeysCreatingObjects": "Elementlərin yaradılması",
|
||||
"HotkeysCutSelected": "Seçilmiş elementləri mübadilə buferinə kopyalayın",
|
||||
"HotkeysEnterKey": "Daxil olun",
|
||||
"HotkeysExtendSelectionDown": "Seçimi sağa doğru uzadın",
|
||||
"HotkeysExtendSelectionLeft": "Seçimi sola doğru uzadın",
|
||||
"HotkeysExtendSelectionRight": "Seçimi sağa doğru uzadın",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Sağdakı növbəti elementi seçin",
|
||||
"HotkeysSelectUp": "Yuxarıdakı növbəti elementi seçin",
|
||||
"HotkeysShortcuts": "Klaviaturadakı qısayollar siyahısını göstərin",
|
||||
"HotkeysSpaceKey": "Boşluq",
|
||||
"HotkeysUndoLastAction": "Son hərəkəti ləğv edin",
|
||||
"HotkeysUploadFile": "Fayl yüklə",
|
||||
"HotkeysUploadingObjects": "Elementlərin yüklənilməsi",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Създайте таблица",
|
||||
"HotkeysCreatingObjects": "Създаване на елементи",
|
||||
"HotkeysCutSelected": "Изрежи избраните елементи в клипборда",
|
||||
"HotkeysEnterKey": "Влез",
|
||||
"HotkeysExtendSelectionDown": "Разширяване на избора надолу",
|
||||
"HotkeysExtendSelectionLeft": "Разширяване на избора вляво",
|
||||
"HotkeysExtendSelectionRight": "Разширете избора надясно",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Изберете следващия елемент вдясно",
|
||||
"HotkeysSelectUp": "Изберете следващия елемент нагоре",
|
||||
"HotkeysShortcuts": "Показване на списък с клавишни комбинации на клавиатурата",
|
||||
"HotkeysSpaceKey": "Пространство",
|
||||
"HotkeysUndoLastAction": "Отмяна на последното действие",
|
||||
"HotkeysUploadFile": "Качи файл",
|
||||
"HotkeysUploadingObjects": "Качване на елементи",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Vytvořit tabulku",
|
||||
"HotkeysCreatingObjects": "Vytváření položek",
|
||||
"HotkeysCutSelected": "Vyjmutí vybraných položek do schránky",
|
||||
"HotkeysEnterKey": "Zadat",
|
||||
"HotkeysExtendSelectionDown": "Rozšířit výběr dolů",
|
||||
"HotkeysExtendSelectionLeft": "Rozšířit výběr vlevo",
|
||||
"HotkeysExtendSelectionRight": "Rozšířit výběr doprava",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Vybrat další položku vpravo",
|
||||
"HotkeysSelectUp": "Vybrat další položku nahoru",
|
||||
"HotkeysShortcuts": "Zobrazit seznam klávesových zkratek",
|
||||
"HotkeysSpaceKey": "Mezera",
|
||||
"HotkeysUndoLastAction": "Vrátit poslední akci",
|
||||
"HotkeysUploadFile": "Nahrát soubor",
|
||||
"HotkeysUploadingObjects": "Nahrávání položek",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Eine Tabelle erstellen",
|
||||
"HotkeysCreatingObjects": "Erstellen von Elementen",
|
||||
"HotkeysCutSelected": "Ausgewählte Elemente in der Zwischenablage ausschneiden",
|
||||
"HotkeysEnterKey": "Eingeben",
|
||||
"HotkeysExtendSelectionDown": "Auswahl nach unten erweitern",
|
||||
"HotkeysExtendSelectionLeft": "Auswahl nach links erweitern",
|
||||
"HotkeysExtendSelectionRight": "Auswahl nach rechts erweitern",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Nächstes Element nach rechts auswählen",
|
||||
"HotkeysSelectUp": "Nächstes Element nach oben auswählen",
|
||||
"HotkeysShortcuts": "Liste der Tastenkombinationen anzeigen",
|
||||
"HotkeysSpaceKey": "Leerzeichen",
|
||||
"HotkeysUndoLastAction": "Rückgängig machen",
|
||||
"HotkeysUploadFile": "Datei hochladen",
|
||||
"HotkeysUploadingObjects": "Hochladen von Elementen",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Δημιουργία υπολογιστικού φύλλου",
|
||||
"HotkeysCreatingObjects": "Δημιουργία στοιχείων",
|
||||
"HotkeysCutSelected": "Αποκοπή επιλεγμένων στοιχείων στο πρόχειρο",
|
||||
"HotkeysEnterKey": "Εισαγωγή",
|
||||
"HotkeysExtendSelectionDown": "Επέκταση της επιλογής προς τα κάτω",
|
||||
"HotkeysExtendSelectionLeft": "Επέκταση της επιλογής αριστερά",
|
||||
"HotkeysExtendSelectionRight": "Επέκταση της επιλογής δεξιά",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Επιλέξτε το επόμενο στοιχείο στα δεξιά",
|
||||
"HotkeysSelectUp": "Επιλέξτε το επόμενο στοιχείο επάνω",
|
||||
"HotkeysShortcuts": "Εμφάνιση λίστας πλήκτρων συντομεύσεων πληκτρολογίου",
|
||||
"HotkeysSpaceKey": "Κενό διάστημα",
|
||||
"HotkeysUndoLastAction": "Αναίρεση της τελευταίας ενέργειας",
|
||||
"HotkeysUploadFile": "Μεταφόρτωση αρχείου",
|
||||
"HotkeysUploadingObjects": "Μεταφόρτωση στοιχείων",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Create spreadsheet",
|
||||
"HotkeysCreatingObjects": "Creating items",
|
||||
"HotkeysCutSelected": "Cut selected items to the clipboard",
|
||||
"HotkeysEnterKey": "Enter",
|
||||
"HotkeysExtendSelectionDown": "Extend selection down",
|
||||
"HotkeysExtendSelectionLeft": "Extend selection left",
|
||||
"HotkeysExtendSelectionRight": "Extend selection right",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Select next item to the right",
|
||||
"HotkeysSelectUp": "Select next item up",
|
||||
"HotkeysShortcuts": "Display keyboard hotkeys list",
|
||||
"HotkeysSpaceKey": "Space",
|
||||
"HotkeysUndoLastAction": "Undo the last action",
|
||||
"HotkeysUploadFile": "Upload file",
|
||||
"HotkeysUploadingObjects": "Uploading items",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Crear hoja de cálculo",
|
||||
"HotkeysCreatingObjects": "Creando elementos",
|
||||
"HotkeysCutSelected": "Cortar los elementos seleccionados en el portapapeles",
|
||||
"HotkeysEnterKey": "Introducir",
|
||||
"HotkeysExtendSelectionDown": "Ampliar la selección hacia abajo",
|
||||
"HotkeysExtendSelectionLeft": "Ampliar la selección hacia la izquierda",
|
||||
"HotkeysExtendSelectionRight": "Ampliar la selección hacia la derecha",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Seleccionar el siguiente elemento hacia la derecha",
|
||||
"HotkeysSelectUp": "Seleccionar el siguiente elemento hacia arriba",
|
||||
"HotkeysShortcuts": "Mostrar la lista de atajos de teclado",
|
||||
"HotkeysSpaceKey": "Espacio",
|
||||
"HotkeysUndoLastAction": "Deshacer la última acción",
|
||||
"HotkeysUploadFile": "Cargar archivo",
|
||||
"HotkeysUploadingObjects": "Cargando elementos",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Luo laskentataulukko",
|
||||
"HotkeysCreatingObjects": "Kohteiden luominen",
|
||||
"HotkeysCutSelected": "Leikkaa valitut kohteet leikepöydälle",
|
||||
"HotkeysEnterKey": "Syötä",
|
||||
"HotkeysExtendSelectionDown": "Laajenna valintaa alaspäin",
|
||||
"HotkeysExtendSelectionLeft": "Laajenna valintaa vasemmalle",
|
||||
"HotkeysExtendSelectionRight": "Laajenna valintaa oikealle",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Valitse seuraava kohde oikealta",
|
||||
"HotkeysSelectUp": "Valitse seuraava kohde yltä",
|
||||
"HotkeysShortcuts": "Näytä näppäimistön pikanäppäinten luettelo",
|
||||
"HotkeysSpaceKey": "Väli",
|
||||
"HotkeysUndoLastAction": "Kumoa viimeinen toiminto",
|
||||
"HotkeysUploadFile": "Lataa tiedosto",
|
||||
"HotkeysUploadingObjects": "Kohteiden lataaminen",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Créer une feuille de calcul",
|
||||
"HotkeysCreatingObjects": "Création d'éléments",
|
||||
"HotkeysCutSelected": "Couper les éléments sélectionnés dans le presse-papiers",
|
||||
"HotkeysEnterKey": "Entrer",
|
||||
"HotkeysExtendSelectionDown": "Étendre la sélection vers le bas",
|
||||
"HotkeysExtendSelectionLeft": "Étendre la sélection vers la gauche",
|
||||
"HotkeysExtendSelectionRight": "Étendre la sélection vers la droite",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Sélectionner l'élément suivant à droite",
|
||||
"HotkeysSelectUp": "Sélectionner l'élément suivant vers le haut",
|
||||
"HotkeysShortcuts": "Afficher la liste des raccourcis clavier",
|
||||
"HotkeysSpaceKey": "Espace",
|
||||
"HotkeysUndoLastAction": "Annuler la dernière action",
|
||||
"HotkeysUploadFile": "Télécharger le fichier",
|
||||
"HotkeysUploadingObjects": "Chargement d'éléments",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Ստեղծել աղյուսակաթերթ",
|
||||
"HotkeysCreatingObjects": "Միավորների ստեղծում",
|
||||
"HotkeysCutSelected": "Կտրեք ընտրված տարրերը սեղմատախտակի վրա",
|
||||
"HotkeysEnterKey": "Մուտքագրել",
|
||||
"HotkeysExtendSelectionDown": "Ընդարձակում է ընտրարկումը վար",
|
||||
"HotkeysExtendSelectionLeft": "Ընդարձակում է ընտրարկումը ձախ",
|
||||
"HotkeysExtendSelectionRight": "Ընդարձակում է ընտրարկումը աջ",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Ընտրեք հաջորդ միավորը ձախ կողմում",
|
||||
"HotkeysSelectUp": "Ընտրեք հաջորդ միավորը աջ կողմում",
|
||||
"HotkeysShortcuts": "Ցուցադրել ստեղնաշարի թեժ ստեղների ցանկը",
|
||||
"HotkeysSpaceKey": "Բացատ",
|
||||
"HotkeysUndoLastAction": "Հետարկել վերջին գործողությունը",
|
||||
"HotkeysUploadFile": "Վերբեռնել ֆայլը",
|
||||
"HotkeysUploadingObjects": "Միավորների վերբեռնում",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Creare foglio di calcolo",
|
||||
"HotkeysCreatingObjects": "Creazione elementi",
|
||||
"HotkeysCutSelected": "Tagliare gli elementi selezionati negli appunti",
|
||||
"HotkeysEnterKey": "Invio",
|
||||
"HotkeysExtendSelectionDown": "Estendere la selezione verso il basso",
|
||||
"HotkeysExtendSelectionLeft": "Estendere la selezione a sinistra",
|
||||
"HotkeysExtendSelectionRight": "Estendere la selezione a destra",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Selezionare l'elemento successivo a destra",
|
||||
"HotkeysSelectUp": "Selezionare l'elemento successivo in alto",
|
||||
"HotkeysShortcuts": "Visualizzare l'elenco dei tasti di scelta rapida della tastiera",
|
||||
"HotkeysSpaceKey": "Spazio",
|
||||
"HotkeysUndoLastAction": "Annullare l'ultima azione",
|
||||
"HotkeysUploadFile": "Caricare file",
|
||||
"HotkeysUploadingObjects": "Caricamento elementi",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "スプレッドシートを作成する",
|
||||
"HotkeysCreatingObjects": "アイテムの作成",
|
||||
"HotkeysCutSelected": "選択した項目をクリップボードにカット",
|
||||
"HotkeysEnterKey": "入力",
|
||||
"HotkeysExtendSelectionDown": "選択範囲の拡大(下)",
|
||||
"HotkeysExtendSelectionLeft": "選択範囲の拡大(左)",
|
||||
"HotkeysExtendSelectionRight": "選択範囲の拡大(右)",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "次のアイテムを選択(右)",
|
||||
"HotkeysSelectUp": "次のアイテムを選択(上)",
|
||||
"HotkeysShortcuts": "キーボードのホットキーリストを表示",
|
||||
"HotkeysSpaceKey": "スペース",
|
||||
"HotkeysUndoLastAction": "直前のアクションを元に戻す",
|
||||
"HotkeysUploadFile": "ファイルをアップロード",
|
||||
"HotkeysUploadingObjects": "アイテムのアップロード",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "스프레드 시트를 만듭니다",
|
||||
"HotkeysCreatingObjects": "항목 생성",
|
||||
"HotkeysCutSelected": "선택한 항목을 클립보드로 잘라내기",
|
||||
"HotkeysEnterKey": "입력",
|
||||
"HotkeysExtendSelectionDown": "아래쪽으로 선택 확장",
|
||||
"HotkeysExtendSelectionLeft": "왼쪽으로 선택 확장",
|
||||
"HotkeysExtendSelectionRight": "오른쪽으로 선택 확장",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "오른쪽으로 다음 항목 선택",
|
||||
"HotkeysSelectUp": "위로 다음 항목 선택",
|
||||
"HotkeysShortcuts": "키보드 단축키 목록 표시",
|
||||
"HotkeysSpaceKey": "공간",
|
||||
"HotkeysUndoLastAction": "마지막 작업 실행 취소",
|
||||
"HotkeysUploadFile": "파일 업로드",
|
||||
"HotkeysUploadingObjects": "항목 업로드",
|
||||
|
@ -12,7 +12,6 @@
|
||||
"HotkeysCreatePresentation": "ສ້າງການນໍາສະເຫນີ",
|
||||
"HotkeysCreateSpreadsheet": "ສ້າງຕາຕະລາງ",
|
||||
"HotkeysCreatingObjects": "ການສ້າງລາຍການ",
|
||||
"HotkeysEnterKey": "ເຂົ້າ",
|
||||
"HotkeysExtendSelectionDown": "ຂະຫຍາຍການເລືອກລົງ",
|
||||
"HotkeysExtendSelectionLeft": "ຂະຫຍາຍການເລືອກຊ້າຍ",
|
||||
"HotkeysExtendSelectionRight": "ຂະຫຍາຍການເລືອກທີ່ຖືກຕ້ອງ",
|
||||
@ -36,7 +35,6 @@
|
||||
"HotkeysSelectRight": "ເລືອກລາຍການຕໍ່ໄປໄປທາງຂວາ",
|
||||
"HotkeysSelectUp": "ເລືອກລາຍການຕໍ່ໄປ",
|
||||
"HotkeysShortcuts": "ສະແດງລາຍການຄີບອດແປ້ນພິມ",
|
||||
"HotkeysSpaceKey": "ຍະຫວ່າງ",
|
||||
"HotkeysUndoLastAction": "ຍົກເລີກການກະ ທຳ ສຸດທ້າຍ",
|
||||
"HotkeysUploadFile": "ອັບໂຫລດໄຟລ໌",
|
||||
"HotkeysUploadingObjects": "ການອັບໂຫລດລາຍການ"
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Izveidot tabulu",
|
||||
"HotkeysCreatingObjects": "Izveidot vienumus",
|
||||
"HotkeysCutSelected": "Izgrieziet atlasītos vienumus starpliktuvē",
|
||||
"HotkeysEnterKey": "Ievadīt",
|
||||
"HotkeysExtendSelectionDown": "Paplašināt atlasi uz leju",
|
||||
"HotkeysExtendSelectionLeft": "Paplašināt atlasi pa kreisi",
|
||||
"HotkeysExtendSelectionRight": "Paplašināt atlasi pa labi",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Atlasīt nākamo vienumu pa labi",
|
||||
"HotkeysSelectUp": "Izvēlēties nākamo vienumu uz augšu",
|
||||
"HotkeysShortcuts": "Parādīt tastatūras karsto taustiņu sarakstu",
|
||||
"HotkeysSpaceKey": "Atstarpe",
|
||||
"HotkeysUndoLastAction": "Atsaukt pēdējo darbību",
|
||||
"HotkeysUploadFile": "Augšupielādēt failu",
|
||||
"HotkeysUploadingObjects": "Notiek vienumu augšupielāde",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Spreadsheet maken",
|
||||
"HotkeysCreatingObjects": "Items aanmaken",
|
||||
"HotkeysCutSelected": "Knip geselecteerde items naar het klembord",
|
||||
"HotkeysEnterKey": "Invoeren",
|
||||
"HotkeysExtendSelectionDown": "Selectie uitbreiden naar beneden",
|
||||
"HotkeysExtendSelectionLeft": "Selectie naar links uitbreiden",
|
||||
"HotkeysExtendSelectionRight": "Selectie naar rechts uitbreiden",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Kies het volgende item aan de rechterkant",
|
||||
"HotkeysSelectUp": "Kies het volgende item omhoog",
|
||||
"HotkeysShortcuts": "Lijst met sneltoetsen weergeven",
|
||||
"HotkeysSpaceKey": "Spatie",
|
||||
"HotkeysUndoLastAction": "Laatste actie ongedaan maken",
|
||||
"HotkeysUploadFile": "Bestand uploaden",
|
||||
"HotkeysUploadingObjects": "Items uploaden",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Utwórz arkusz kalkulacyjny",
|
||||
"HotkeysCreatingObjects": "Tworzenie elementów",
|
||||
"HotkeysCutSelected": "Wytnij zaznaczone pliki do schowka",
|
||||
"HotkeysEnterKey": "Wpisz",
|
||||
"HotkeysExtendSelectionDown": "Rozszerz zaznaczenie w dół",
|
||||
"HotkeysExtendSelectionLeft": "Rozszerz zaznaczenie w lewo",
|
||||
"HotkeysExtendSelectionRight": "Rozszerz zaznaczenie w prawo",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Zaznacz kolejny element po prawej",
|
||||
"HotkeysSelectUp": "Zaznacz kolejny element powyżej",
|
||||
"HotkeysShortcuts": "Wyświetl listę skrótów klawiaturowych",
|
||||
"HotkeysSpaceKey": "Odstęp",
|
||||
"HotkeysUndoLastAction": "Cofnij ostatnią akcję",
|
||||
"HotkeysUploadFile": "Przesyłanie pliku",
|
||||
"HotkeysUploadingObjects": "Wgrywanie elementów",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Criar Planilha",
|
||||
"HotkeysCreatingObjects": "Criar itens",
|
||||
"HotkeysCutSelected": "Cortar itens selecionados para a área de transferência",
|
||||
"HotkeysEnterKey": "Inserir",
|
||||
"HotkeysExtendSelectionDown": "Estender seleção para baixo",
|
||||
"HotkeysExtendSelectionLeft": "Estender seleção para a esquerda",
|
||||
"HotkeysExtendSelectionRight": "Estender seleção para a direita",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Selecionar o próximo item à direita",
|
||||
"HotkeysSelectUp": "Selecionar o próximo item acima",
|
||||
"HotkeysShortcuts": "Exibir lista de teclas de acesso do teclado",
|
||||
"HotkeysSpaceKey": "Espaço",
|
||||
"HotkeysUndoLastAction": "Desfazer a última ação",
|
||||
"HotkeysUploadFile": "Carregar arquivo",
|
||||
"HotkeysUploadingObjects": "Fazer upload de itens",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Criar folha de cálculo",
|
||||
"HotkeysCreatingObjects": "A criar itens",
|
||||
"HotkeysCutSelected": "Cortar itens selecionados para a área de transferência",
|
||||
"HotkeysEnterKey": "Introduzir",
|
||||
"HotkeysExtendSelectionDown": "Expandir a seleção para baixo",
|
||||
"HotkeysExtendSelectionLeft": "Expandir a seleção para a esquerda",
|
||||
"HotkeysExtendSelectionRight": "Expandir a seleção para a direita",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Selecionar o próximo item à direita",
|
||||
"HotkeysSelectUp": "Selecionar o próximo item acima",
|
||||
"HotkeysShortcuts": "Mostrar lista de teclas de atalho",
|
||||
"HotkeysSpaceKey": "Espaço",
|
||||
"HotkeysUndoLastAction": "Anular a última ação",
|
||||
"HotkeysUploadFile": "Carregar ficheiro",
|
||||
"HotkeysUploadingObjects": "A carregar itens",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Creează o foaie de calcul",
|
||||
"HotkeysCreatingObjects": "Creează elemente",
|
||||
"HotkeysCutSelected": "Decupare elemente selectate în clipboard",
|
||||
"HotkeysEnterKey": "Enter",
|
||||
"HotkeysExtendSelectionDown": "Extinde selecția în jos",
|
||||
"HotkeysExtendSelectionLeft": "Extinde selecția la stânga",
|
||||
"HotkeysExtendSelectionRight": "Extinde selecția la dreapta",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Selectează următorul element din dreapta",
|
||||
"HotkeysSelectUp": "Selectează următorul element de deasupra",
|
||||
"HotkeysShortcuts": "Afișează lista de comenzi rapide de la tastatură",
|
||||
"HotkeysSpaceKey": "Spațiu",
|
||||
"HotkeysUndoLastAction": "Anulează ultima acțiune",
|
||||
"HotkeysUploadFile": "Încarcă fișier",
|
||||
"HotkeysUploadingObjects": "Încărcare elemente",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Создать таблицу",
|
||||
"HotkeysCreatingObjects": "Создание объектов",
|
||||
"HotkeysCutSelected": "Вырезать выбранные элементы в буфер обмена",
|
||||
"HotkeysEnterKey": "Ввод",
|
||||
"HotkeysExtendSelectionDown": "Расширить выделение вниз",
|
||||
"HotkeysExtendSelectionLeft": "Расширить выделение влево",
|
||||
"HotkeysExtendSelectionRight": "Расширить выделение вправо",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Выделить следующий объект справа",
|
||||
"HotkeysSelectUp": "Выделить следующий объект сверху",
|
||||
"HotkeysShortcuts": "Показать список быстрых клавиш",
|
||||
"HotkeysSpaceKey": "Пробел",
|
||||
"HotkeysUndoLastAction": "Отменить последнее действие",
|
||||
"HotkeysUploadFile": "Загрузить файл",
|
||||
"HotkeysUploadingObjects": "Загрузка объектов",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "පැතුරුම්පතක් සාදන්න",
|
||||
"HotkeysCreatingObjects": "අථක සෑදීම",
|
||||
"HotkeysCutSelected": "තෝරාගත් අථක කපන්න",
|
||||
"HotkeysEnterKey": "ඇතුල් කරන්න",
|
||||
"HotkeysExtendSelectionDown": "තේරීම පහළට පතුරුවන්න",
|
||||
"HotkeysExtendSelectionLeft": "තේරීම වමට පතුරුවන්න",
|
||||
"HotkeysExtendSelectionRight": "තේරීම දකුණට පතුරුවන්න",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "දකුණු පස ඊළඟ අථකය තෝරන්න",
|
||||
"HotkeysSelectUp": "ඉහළ ඊළඟ අථකය තෝරන්න",
|
||||
"HotkeysShortcuts": "කෙටිමං ලැයිස්තුව පෙන්වන්න",
|
||||
"HotkeysSpaceKey": "හිස්තැන",
|
||||
"HotkeysUndoLastAction": "අවසාන ක්රියාව පෙරසේ තබන්න",
|
||||
"HotkeysUploadFile": "ගොනුවක් උඩුගත කරන්න",
|
||||
"HotkeysUploadingObjects": "අථක උඩුගත වෙමින්",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Vytvoriť tabuľku",
|
||||
"HotkeysCreatingObjects": "Vytváranie položiek",
|
||||
"HotkeysCutSelected": "Vyrezať vybrané položky do schránky",
|
||||
"HotkeysEnterKey": "Zadať",
|
||||
"HotkeysExtendSelectionDown": "Rozšíriť výber nadol",
|
||||
"HotkeysExtendSelectionLeft": "Rozšíriť výber doľava",
|
||||
"HotkeysExtendSelectionRight": "Rozšíriť výber doprava",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Vybrať ďalšiu položku vpravo",
|
||||
"HotkeysSelectUp": "Vybrať ďalšiu položku hore",
|
||||
"HotkeysShortcuts": "Zobraziť zoznam klávesových skratiek na klávesnici",
|
||||
"HotkeysSpaceKey": "Priestor",
|
||||
"HotkeysUndoLastAction": "Vrátiť späť poslednú akciu",
|
||||
"HotkeysUploadFile": "Nahrať súbor",
|
||||
"HotkeysUploadingObjects": "Nahrávanie položiek",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Ustvari preglednico",
|
||||
"HotkeysCreatingObjects": "Ustvarjanje predmetov",
|
||||
"HotkeysCutSelected": "Izreži izbrane elemente v odložišče",
|
||||
"HotkeysEnterKey": "Vstopi",
|
||||
"HotkeysExtendSelectionDown": "Premakni izbiro navzdol",
|
||||
"HotkeysExtendSelectionLeft": "Premakni izbiro na levo",
|
||||
"HotkeysExtendSelectionRight": "Premakni izbiro na desno",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Izberi naslednji predmet desno",
|
||||
"HotkeysSelectUp": "Izberi naslednji predmet zgoraj",
|
||||
"HotkeysShortcuts": "Prikaži seznam bližnjic na tipkovnici",
|
||||
"HotkeysSpaceKey": "Razmik",
|
||||
"HotkeysUndoLastAction": "Razveljavi zadnjo akcijo",
|
||||
"HotkeysUploadFile": "Naloži datoteko",
|
||||
"HotkeysUploadingObjects": "Nalaganje predmetov",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Kreiraj proračunsku tabelu",
|
||||
"HotkeysCreatingObjects": "Kreiranje stavki",
|
||||
"HotkeysCutSelected": "Iseci odabrane stavke na privremenu memoriju",
|
||||
"HotkeysEnterKey": "Uđi",
|
||||
"HotkeysExtendSelectionDown": "Proširi selekciju dole",
|
||||
"HotkeysExtendSelectionLeft": "Proširi selekciju levo",
|
||||
"HotkeysExtendSelectionRight": "Proširi selekciju desno",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Odaberi sledeću stavku sa desne strane",
|
||||
"HotkeysSelectUp": "Odaberi sledeću stavku gore",
|
||||
"HotkeysShortcuts": "Prikaži listu prečica tastature",
|
||||
"HotkeysSpaceKey": "Prostor",
|
||||
"HotkeysUndoLastAction": "Poništi poslednju radnju",
|
||||
"HotkeysUploadFile": "Otpremi datoteku",
|
||||
"HotkeysUploadingObjects": "Otpremljivanje stavki",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Elektronik Tablo Oluştur",
|
||||
"HotkeysCreatingObjects": "Öğeler oluşturuluyor",
|
||||
"HotkeysCutSelected": "Seçilen öğeleri panoya kes",
|
||||
"HotkeysEnterKey": "Giriş",
|
||||
"HotkeysExtendSelectionDown": "Seçimi aşağı genişlet",
|
||||
"HotkeysExtendSelectionLeft": "Seçimi sola genişlet",
|
||||
"HotkeysExtendSelectionRight": "Seçimi sağa genişlet",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Sıradaki öğeyi sağa doğru seç",
|
||||
"HotkeysSelectUp": "Sıradaki öğeyi yukarı doğru seç",
|
||||
"HotkeysShortcuts": "Klavye kısayol tuşları listesini görüntüle",
|
||||
"HotkeysSpaceKey": "Boşluk",
|
||||
"HotkeysUndoLastAction": "Son işlemi geri al",
|
||||
"HotkeysUploadFile": "Dosya yükle",
|
||||
"HotkeysUploadingObjects": "Öğeler yükleniyor",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Створити таблицю",
|
||||
"HotkeysCreatingObjects": "Створення елементів",
|
||||
"HotkeysCutSelected": "Вирізати вибрані елементи до буфера обміну",
|
||||
"HotkeysEnterKey": "Ввести",
|
||||
"HotkeysExtendSelectionDown": "Розширити виділення вниз",
|
||||
"HotkeysExtendSelectionLeft": "Розширити виділення ліворуч",
|
||||
"HotkeysExtendSelectionRight": "Розширити виділення праворуч",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Вибрати наступний елемент праворуч",
|
||||
"HotkeysSelectUp": "Вибрати наступний елемент угорі",
|
||||
"HotkeysShortcuts": "Показати список сполучень клавіш",
|
||||
"HotkeysSpaceKey": "Пробіл",
|
||||
"HotkeysUndoLastAction": "Скасувати останню дію",
|
||||
"HotkeysUploadFile": "Завантажити файл",
|
||||
"HotkeysUploadingObjects": "Передавання елементів",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "Tạo bảng tính",
|
||||
"HotkeysCreatingObjects": "Tạo mục",
|
||||
"HotkeysCutSelected": "Cắt các mục đã chọn vào bộ nhớ tạm",
|
||||
"HotkeysEnterKey": "Nhập",
|
||||
"HotkeysExtendSelectionDown": "Mở rộng lựa chọn xuống",
|
||||
"HotkeysExtendSelectionLeft": "Mở rộng lựa chọn bên trái",
|
||||
"HotkeysExtendSelectionRight": "Mở rộng lựa chọn bên phải",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "Chọn mục tiếp theo bên phải",
|
||||
"HotkeysSelectUp": "Chọn mục tiếp theo bên trên",
|
||||
"HotkeysShortcuts": "Hiển thị danh sách phím tắt",
|
||||
"HotkeysSpaceKey": "Khoảng cách",
|
||||
"HotkeysUndoLastAction": "Hoàn tác hành động cuối cùng",
|
||||
"HotkeysUploadFile": "Tải file lên",
|
||||
"HotkeysUploadingObjects": "Đang tải lên các mục",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"HotkeysCreateSpreadsheet": "新建电子表格",
|
||||
"HotkeysCreatingObjects": "创建项目",
|
||||
"HotkeysCutSelected": "将选定的项目剪切到剪贴板",
|
||||
"HotkeysEnterKey": "输入",
|
||||
"HotkeysExtendSelectionDown": "向下扩展选定",
|
||||
"HotkeysExtendSelectionLeft": "向左扩展选定",
|
||||
"HotkeysExtendSelectionRight": "向右扩展选定",
|
||||
@ -39,7 +38,6 @@
|
||||
"HotkeysSelectRight": "向右选择下一个项目",
|
||||
"HotkeysSelectUp": "向上选择下一个项目",
|
||||
"HotkeysShortcuts": "显示快捷键列表",
|
||||
"HotkeysSpaceKey": "空格",
|
||||
"HotkeysUndoLastAction": "撤销上次的行动",
|
||||
"HotkeysUploadFile": "上传文件",
|
||||
"HotkeysUploadingObjects": "上传项目",
|
||||
|
@ -184,6 +184,8 @@ const CreateEvent = ({
|
||||
searchParams.append("formId", gallerySelected.id);
|
||||
}
|
||||
|
||||
searchParams.append("hash", new Date().getTime());
|
||||
|
||||
const url = combineUrl(
|
||||
window.location.origin,
|
||||
window.DocSpaceConfig?.proxy?.url,
|
||||
|
@ -30,6 +30,7 @@ import styled, { css } from "styled-components";
|
||||
import { useLocation } from "react-router-dom";
|
||||
|
||||
import { mobile } from "@docspace/shared/utils";
|
||||
import { isPublicPreview } from "@docspace/shared/utils/common";
|
||||
import Bar from "./Bar";
|
||||
|
||||
const StyledContainer = styled.div`
|
||||
@ -75,7 +76,8 @@ const MainBar = ({
|
||||
!isNotPaidPeriod &&
|
||||
!pathname.includes("error") &&
|
||||
!pathname.includes("confirm") &&
|
||||
!pathname.includes("preparation-portal");
|
||||
!pathname.includes("preparation-portal") &&
|
||||
!isPublicPreview();
|
||||
|
||||
return (
|
||||
<StyledContainer id={"main-bar"} className={"main-bar"}>
|
||||
|
@ -208,6 +208,7 @@ class ProfileMenu extends React.Component {
|
||||
open={open}
|
||||
clickOutsideAction={clickOutsideAction}
|
||||
forwardedRef={forwardedRef}
|
||||
isDefaultMode={false}
|
||||
withBlur={true}
|
||||
isBannerVisible={isBannerVisible}
|
||||
withPortal={true}
|
||||
@ -236,7 +237,15 @@ class ProfileMenu extends React.Component {
|
||||
};
|
||||
|
||||
render() {
|
||||
return <StyledWrapper>{this.renderDropDown()}</StyledWrapper>;
|
||||
const { open } = this.props;
|
||||
|
||||
const element = this.renderDropDown();
|
||||
|
||||
const root = document.getElementById("root");
|
||||
|
||||
const wrapper = <StyledWrapper>{element}</StyledWrapper>;
|
||||
|
||||
return <>{<Portal element={wrapper} appendTo={root} visible={open} />}</>;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -103,6 +103,8 @@ const ConvertPasswordDialogComponent = (props) => {
|
||||
searchParams.append("password", password);
|
||||
searchParams.append("fromFile", true);
|
||||
|
||||
searchParams.append("hash", new Date().getTime());
|
||||
|
||||
const url = combineUrl(
|
||||
window.location.origin,
|
||||
window.DocSpaceConfig?.proxy?.url,
|
||||
|
@ -34,7 +34,7 @@ const ActionsBlock = ({ t, textStyles, keyTextStyles, CtrlKey }) => {
|
||||
<Row className="hotkeys_row">
|
||||
<>
|
||||
<Text {...textStyles}>{t("HotkeysOpen")}</Text>
|
||||
<Text {...keyTextStyles}>{t("HotkeysEnterKey")}</Text>
|
||||
<Text {...keyTextStyles}>Enter</Text>
|
||||
</>
|
||||
</Row>
|
||||
<Row className="hotkeys_row">
|
||||
|
@ -40,7 +40,7 @@ const PreviewActionsBlock = ({ t, textStyles, keyTextStyles }) => {
|
||||
<Row className="hotkeys_row">
|
||||
<>
|
||||
<Text {...textStyles}>{t("HotkeysPlayPause")}</Text>
|
||||
<Text {...keyTextStyles}>{t("HotkeysSpaceKey")}</Text>
|
||||
<Text {...keyTextStyles}>Space</Text>
|
||||
</>
|
||||
</Row>
|
||||
<Row className="hotkeys_row">
|
||||
|
@ -126,7 +126,7 @@ const StyledSimpleFilesRow = styled(Row)`
|
||||
!props.isThirdPartyFolder &&
|
||||
(props.checked || props.isActive) &&
|
||||
props.canDrag &&
|
||||
`url(${CursorPalmReactSvgUrl}), auto`};
|
||||
`url(${CursorPalmReactSvgUrl}) 8 0, auto`};
|
||||
${(props) =>
|
||||
props.inProgress &&
|
||||
css`
|
||||
|
@ -148,7 +148,7 @@ const StyledTableRow = styled(TableRow)`
|
||||
!props.isThirdPartyFolder &&
|
||||
(props.checked || props.isActive) &&
|
||||
props.canDrag &&
|
||||
`url(${CursorPalmSvgUrl}), auto !important`};
|
||||
`url(${CursorPalmSvgUrl}) 8 0, auto !important`};
|
||||
|
||||
${(props) =>
|
||||
props.inProgress &&
|
||||
@ -438,24 +438,17 @@ const StyledQuickButtonsContainer = styled.div`
|
||||
}
|
||||
|
||||
.badge {
|
||||
${(props) =>
|
||||
props.theme.interfaceDirection === "rtl"
|
||||
? css`
|
||||
margin-left: 14px;
|
||||
`
|
||||
: css`
|
||||
margin-right: 14px;
|
||||
`}
|
||||
padding: 12px 7px;
|
||||
}
|
||||
|
||||
.badge:last-child {
|
||||
${(props) =>
|
||||
props.theme.interfaceDirection === "rtl"
|
||||
? css`
|
||||
margin-left: 10px;
|
||||
margin-left: 3px;
|
||||
`
|
||||
: css`
|
||||
margin-right: 10px;
|
||||
margin-right: 3px;
|
||||
`}
|
||||
}
|
||||
|
||||
|
@ -94,6 +94,8 @@ const HeaderContainer = styled.div`
|
||||
}
|
||||
|
||||
.arrow-button {
|
||||
flex-shrink: 0;
|
||||
|
||||
${(props) =>
|
||||
props.theme.interfaceDirection === "rtl"
|
||||
? css`
|
||||
|
@ -107,7 +107,7 @@ const ImportCompleteStep = ({
|
||||
setIsSaving(true);
|
||||
setTimeout(() => {
|
||||
setIsSaving(false);
|
||||
navigate(-1);
|
||||
navigate("/portal-settings/data-import/migration");
|
||||
}, 1000);
|
||||
};
|
||||
|
||||
|
@ -89,6 +89,8 @@ const ErrorBlock = styled.div`
|
||||
}
|
||||
`;
|
||||
|
||||
const FAILS_TRIES = 1;
|
||||
|
||||
const SelectFileStep = ({
|
||||
t,
|
||||
onNextStep,
|
||||
@ -117,9 +119,10 @@ const SelectFileStep = ({
|
||||
const uploadInterval = useRef(null);
|
||||
const navigate = useNavigate();
|
||||
|
||||
const [failTries, setFailsTries] = useState(FAILS_TRIES);
|
||||
|
||||
const goBack = () => {
|
||||
cancelMigration();
|
||||
setTimeout(() => navigate(-1), 100);
|
||||
navigate("/portal-settings/data-import/migration");
|
||||
};
|
||||
|
||||
const checkMigrationStatusAndUpdate = async () => {
|
||||
@ -187,7 +190,6 @@ const SelectFileStep = ({
|
||||
};
|
||||
|
||||
const onUploadFile = async (file) => {
|
||||
setProgress(0);
|
||||
setIsVisible(true);
|
||||
try {
|
||||
if (file.length) {
|
||||
@ -195,23 +197,18 @@ const SelectFileStep = ({
|
||||
} else {
|
||||
await singleFileUploading(file, setProgress, isAbort);
|
||||
}
|
||||
|
||||
if (isAbort.current) return;
|
||||
|
||||
await initMigrationName(searchParams.get("service"));
|
||||
|
||||
uploadInterval.current = setInterval(async () => {
|
||||
try {
|
||||
const res = await getMigrationStatus();
|
||||
setProgress(res?.progress);
|
||||
|
||||
if (res.progress > 10) {
|
||||
setIsVisible(false);
|
||||
} else {
|
||||
setIsVisible(true);
|
||||
}
|
||||
|
||||
if (res.error || res.parseResult.failedArchives.length > 0) {
|
||||
setShowErrorText(true);
|
||||
} else {
|
||||
setShowErrorText(false);
|
||||
if (!res && failTries) {
|
||||
setFailsTries((tries) => tries - 1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!res || res.parseResult.failedArchives.length > 0 || res.error) {
|
||||
@ -219,12 +216,14 @@ const SelectFileStep = ({
|
||||
setIsFileError(true);
|
||||
setIsFileLoading(false);
|
||||
clearInterval(uploadInterval.current);
|
||||
} else if (res.isCompleted || res.parseResult.progress === 100) {
|
||||
setShowErrorText(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (res.isCompleted || res.parseResult.progress === 100) {
|
||||
clearInterval(uploadInterval.current);
|
||||
setIsFileLoading(false);
|
||||
setIsVisible(false);
|
||||
setProgress(100);
|
||||
|
||||
if (
|
||||
res.parseResult.users.length +
|
||||
res.parseResult.existUsers.length +
|
||||
@ -239,12 +238,23 @@ const SelectFileStep = ({
|
||||
cancelMigration();
|
||||
}
|
||||
}
|
||||
|
||||
setProgress(res?.progress);
|
||||
|
||||
if (res.progress > 10) {
|
||||
setIsVisible(false);
|
||||
} else {
|
||||
setIsVisible(true);
|
||||
}
|
||||
setShowErrorText(false);
|
||||
} catch (error) {
|
||||
toastr.error(error || t("Common:SomethingWentWrong"));
|
||||
setIsFileError(true);
|
||||
setIsFileLoading(false);
|
||||
setIsError(true);
|
||||
clearInterval(uploadInterval.current);
|
||||
} finally {
|
||||
isAbort.current = false;
|
||||
}
|
||||
}, 1000);
|
||||
} catch (error) {
|
||||
@ -259,6 +269,7 @@ const SelectFileStep = ({
|
||||
setIsFileError(false);
|
||||
setShowReminder(false);
|
||||
setIsFileLoading(true);
|
||||
setFailsTries(FAILS_TRIES);
|
||||
try {
|
||||
onUploadFile(file);
|
||||
} catch (error) {
|
||||
@ -286,7 +297,6 @@ const SelectFileStep = ({
|
||||
});
|
||||
} catch (error) {
|
||||
toastr.error(error);
|
||||
console.log(error);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -32,9 +32,9 @@ import { SearchInput } from "@docspace/shared/components/search-input";
|
||||
|
||||
import AccountsTable from "./AccountsTable";
|
||||
import AccountsPaging from "../../../sub-components/AccountsPaging";
|
||||
// import UsersInfoBlock from "./../../../sub-components/UsersInfoBlock";
|
||||
import UsersInfoBlock from "./../../../sub-components/UsersInfoBlock";
|
||||
|
||||
// const LICENSE_LIMIT = 100;
|
||||
import { parseQuota } from "../../../utils";
|
||||
|
||||
const SelectUsersStep = ({
|
||||
t,
|
||||
@ -46,11 +46,16 @@ const SelectUsersStep = ({
|
||||
setResultUsers,
|
||||
areCheckedUsersEmpty,
|
||||
cancelMigration,
|
||||
checkedUsers,
|
||||
quotaCharacteristics,
|
||||
}) => {
|
||||
const [dataPortion, setDataPortion] = useState(withEmailUsers.slice(0, 25));
|
||||
const [quota, setQuota] = useState({ used: 0, max: 0 });
|
||||
const [isSaving, setIsSaving] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
setSearchValue("");
|
||||
setQuota(parseQuota(quotaCharacteristics[1]));
|
||||
}, []);
|
||||
|
||||
const handleDataChange = (leftBoundary, rightBoundary) => {
|
||||
@ -79,9 +84,17 @@ const SelectUsersStep = ({
|
||||
|
||||
const goBack = () => {
|
||||
cancelMigration();
|
||||
setTimeout(onPrevStep, 100);
|
||||
setIsSaving(true);
|
||||
setTimeout(() => {
|
||||
setIsSaving(false);
|
||||
onPrevStep();
|
||||
}, 1000);
|
||||
};
|
||||
|
||||
const totalUsedUsers =
|
||||
quota.used +
|
||||
checkedUsers.withEmail.filter((user) => !user.isDuplicate).length;
|
||||
|
||||
return (
|
||||
<>
|
||||
<SaveCancelButtons
|
||||
@ -92,15 +105,21 @@ const SelectUsersStep = ({
|
||||
saveButtonLabel={t("Settings:NextStep")}
|
||||
cancelButtonLabel={t("Common:Back")}
|
||||
displaySettings={true}
|
||||
saveButtonDisabled={areCheckedUsersEmpty}
|
||||
saveButtonDisabled={
|
||||
areCheckedUsersEmpty || (quota.max && totalUsedUsers > quota.max)
|
||||
}
|
||||
isSaving={isSaving}
|
||||
/>
|
||||
|
||||
{/* <UsersInfoBlock
|
||||
t={t}
|
||||
selectedUsers={100}
|
||||
totalUsers={withEmailUsers.length}
|
||||
totalLicenceLimit={LICENSE_LIMIT}
|
||||
/> */}
|
||||
{quota.max && (
|
||||
<UsersInfoBlock
|
||||
t={t}
|
||||
totalUsedUsers={totalUsedUsers}
|
||||
selectedUsers={checkedUsers.withEmail.length}
|
||||
totalUsers={withEmailUsers.length}
|
||||
totalLicenceLimit={quota.max}
|
||||
/>
|
||||
)}
|
||||
|
||||
<SearchInput
|
||||
id="search-withEmailUsers-input"
|
||||
@ -131,14 +150,17 @@ const SelectUsersStep = ({
|
||||
saveButtonLabel={t("Settings:NextStep")}
|
||||
cancelButtonLabel={t("Common:Back")}
|
||||
displaySettings={true}
|
||||
saveButtonDisabled={areCheckedUsersEmpty}
|
||||
saveButtonDisabled={
|
||||
areCheckedUsersEmpty || (quota.max && totalUsedUsers > quota.max)
|
||||
}
|
||||
isSaving={isSaving}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default inject(({ importAccountsStore }) => {
|
||||
export default inject(({ importAccountsStore, currentQuotaStore }) => {
|
||||
const {
|
||||
withEmailUsers,
|
||||
searchValue,
|
||||
@ -146,7 +168,9 @@ export default inject(({ importAccountsStore }) => {
|
||||
areCheckedUsersEmpty,
|
||||
setResultUsers,
|
||||
cancelMigration,
|
||||
checkedUsers,
|
||||
} = importAccountsStore;
|
||||
const { quotaCharacteristics } = currentQuotaStore;
|
||||
|
||||
return {
|
||||
withEmailUsers,
|
||||
@ -155,5 +179,7 @@ export default inject(({ importAccountsStore }) => {
|
||||
areCheckedUsersEmpty,
|
||||
setResultUsers,
|
||||
cancelMigration,
|
||||
checkedUsers,
|
||||
quotaCharacteristics,
|
||||
};
|
||||
})(observer(SelectUsersStep));
|
||||
|
@ -51,11 +51,11 @@ const StyledTableContainer = styled(TableContainer)`
|
||||
position: sticky;
|
||||
z-index: 201;
|
||||
width: calc(100% + 40px);
|
||||
margin-top: 20px;
|
||||
margin-top: -33px;
|
||||
margin-left: -20px;
|
||||
top: 0;
|
||||
|
||||
margin-bottom: -37.5px;
|
||||
margin-bottom: -36px;
|
||||
|
||||
.table-container_group-menu {
|
||||
border-image-slice: 0;
|
||||
|
@ -92,16 +92,14 @@ const SelectUsersTypeStep = ({
|
||||
|
||||
{filteredUsers.length > 0 && (
|
||||
<>
|
||||
{!checkedUsers.result.length > 0 && (
|
||||
<StyledSearchInput
|
||||
id="search-users-type-input"
|
||||
placeholder={t("Common:Search")}
|
||||
value={searchValue}
|
||||
onChange={onChangeInput}
|
||||
refreshTimeout={100}
|
||||
onClearSearch={onClearSearchInput}
|
||||
/>
|
||||
)}
|
||||
<StyledSearchInput
|
||||
id="search-users-type-input"
|
||||
placeholder={t("Common:Search")}
|
||||
value={searchValue}
|
||||
onChange={onChangeInput}
|
||||
refreshTimeout={100}
|
||||
onClearSearch={onClearSearchInput}
|
||||
/>
|
||||
|
||||
<AccountsTable t={t} accountsData={filteredAccounts} />
|
||||
|
||||
|
@ -28,7 +28,10 @@ import { useState, useEffect } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { Trans, withTranslation } from "react-i18next";
|
||||
import { getStepTitle, getGoogleStepDescription } from "../../../utils";
|
||||
import { tablet } from "@docspace/shared/utils/device";
|
||||
import {
|
||||
tablet,
|
||||
isMobile as isMobileBreakpoint,
|
||||
} from "@docspace/shared/utils/device";
|
||||
|
||||
import { isMobile } from "react-device-detect";
|
||||
import useViewEffect from "SRC_DIR/Hooks/useViewEffect";
|
||||
@ -215,7 +218,7 @@ const GoogleWorkspace = ({
|
||||
return clearCheckedAccounts;
|
||||
}, []);
|
||||
|
||||
if (isMobile)
|
||||
if (isMobile || isMobileBreakpoint())
|
||||
return (
|
||||
<BreakpointWarning
|
||||
isMobileUnavailableOnly
|
||||
|
@ -178,7 +178,7 @@ const UsersTableRow = ({
|
||||
{isEmailOpen ? (
|
||||
<EmailInputWrapper ref={emailInputRef}>
|
||||
<EmailInput
|
||||
placeholder={t("Settings:NoEmail")}
|
||||
placeholder={t("EnterEmail")}
|
||||
className="import-email-input"
|
||||
value={tempEmail}
|
||||
onChange={handleEmailChange}
|
||||
@ -197,7 +197,7 @@ const UsersTableRow = ({
|
||||
<span onClick={openEmail} className="user-email" ref={emailTextRef}>
|
||||
<EditSvg />
|
||||
<Text fontWeight={600} color="#A3A9AE" className="textOverflow">
|
||||
{prevEmail !== "" ? prevEmail : t("EnterEmail")}
|
||||
{prevEmail !== "" ? prevEmail : t("Settings:NoEmail")}
|
||||
</Text>
|
||||
</span>
|
||||
)}
|
||||
|
@ -24,7 +24,7 @@
|
||||
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
|
||||
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
|
||||
import { useState } from "react";
|
||||
import { useState, useEffect } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
|
||||
import { SaveCancelButtons } from "@docspace/shared/components/save-cancel-buttons";
|
||||
@ -36,10 +36,10 @@ import { Text } from "@docspace/shared/components/text";
|
||||
|
||||
import { Wrapper } from "../StyledStepper";
|
||||
|
||||
// import UsersInfoBlock from "../../../sub-components/UsersInfoBlock";
|
||||
import UsersInfoBlock from "../../../sub-components/UsersInfoBlock";
|
||||
import { NoEmailUsersBlock } from "../../../sub-components/NoEmailUsersBlock";
|
||||
|
||||
// const LICENSE_LIMIT = 100;
|
||||
import { parseQuota } from "../../../utils";
|
||||
|
||||
const AddEmailsStep = (props) => {
|
||||
const {
|
||||
@ -51,11 +51,15 @@ const AddEmailsStep = (props) => {
|
||||
setSearchValue,
|
||||
setResultUsers,
|
||||
areCheckedUsersEmpty,
|
||||
checkedUsers,
|
||||
quotaCharacteristics,
|
||||
withEmailUsers,
|
||||
} = props;
|
||||
|
||||
const [dataPortion, setDataPortion] = useState(
|
||||
users.withoutEmail.slice(0, 25),
|
||||
);
|
||||
const [quota, setQuota] = useState({ used: 0, max: 0 });
|
||||
|
||||
const handleDataChange = (leftBoundary, rightBoundary) => {
|
||||
setDataPortion(users.withoutEmail.slice(leftBoundary, rightBoundary));
|
||||
@ -80,6 +84,18 @@ const AddEmailsStep = (props) => {
|
||||
incrementStep();
|
||||
};
|
||||
|
||||
const numberOfSelectedUsers =
|
||||
checkedUsers.withEmail.length + checkedUsers.withoutEmail.length;
|
||||
|
||||
useEffect(() => {
|
||||
setQuota(parseQuota(quotaCharacteristics[1]));
|
||||
}, []);
|
||||
|
||||
const totalUsedUsers =
|
||||
quota.used +
|
||||
checkedUsers.withEmail.filter((user) => !user.isDuplicate).length +
|
||||
checkedUsers.withoutEmail.length;
|
||||
|
||||
return (
|
||||
<Wrapper>
|
||||
{users.withoutEmail.length > 0 && (
|
||||
@ -100,15 +116,20 @@ const AddEmailsStep = (props) => {
|
||||
cancelButtonLabel={t("Common:Back")}
|
||||
showReminder
|
||||
displaySettings
|
||||
saveButtonDisabled={areCheckedUsersEmpty}
|
||||
saveButtonDisabled={
|
||||
areCheckedUsersEmpty || (quota.max && totalUsedUsers > quota.max)
|
||||
}
|
||||
/>
|
||||
|
||||
{/* <UsersInfoBlock
|
||||
t={t}
|
||||
selectedUsers={numberOfCheckedAccounts}
|
||||
totalUsers={users.withoutEmail.length}
|
||||
totalLicenceLimit={LICENSE_LIMIT}
|
||||
/> */}
|
||||
{quota.max && (
|
||||
<UsersInfoBlock
|
||||
t={t}
|
||||
totalUsedUsers={totalUsedUsers}
|
||||
selectedUsers={numberOfSelectedUsers}
|
||||
totalUsers={withEmailUsers.length + users.withoutEmail.length}
|
||||
totalLicenceLimit={quota.max}
|
||||
/>
|
||||
)}
|
||||
|
||||
<SearchInput
|
||||
id="search-users-input"
|
||||
@ -143,13 +164,15 @@ const AddEmailsStep = (props) => {
|
||||
cancelButtonLabel={t("Common:Back")}
|
||||
showReminder
|
||||
displaySettings
|
||||
saveButtonDisabled={areCheckedUsersEmpty}
|
||||
saveButtonDisabled={
|
||||
areCheckedUsersEmpty || (quota.max && totalUsedUsers > quota.max)
|
||||
}
|
||||
/>
|
||||
</Wrapper>
|
||||
);
|
||||
};
|
||||
|
||||
export default inject(({ setup, importAccountsStore }) => {
|
||||
export default inject(({ setup, importAccountsStore, currentQuotaStore }) => {
|
||||
const { viewAs } = setup;
|
||||
const {
|
||||
searchValue,
|
||||
@ -157,7 +180,10 @@ export default inject(({ setup, importAccountsStore }) => {
|
||||
users,
|
||||
setResultUsers,
|
||||
areCheckedUsersEmpty,
|
||||
checkedUsers,
|
||||
withEmailUsers,
|
||||
} = importAccountsStore;
|
||||
const { quotaCharacteristics } = currentQuotaStore;
|
||||
|
||||
return {
|
||||
viewAs,
|
||||
@ -166,5 +192,8 @@ export default inject(({ setup, importAccountsStore }) => {
|
||||
users,
|
||||
setResultUsers,
|
||||
areCheckedUsersEmpty,
|
||||
checkedUsers,
|
||||
quotaCharacteristics,
|
||||
withEmailUsers,
|
||||
};
|
||||
})(observer(AddEmailsStep));
|
||||
|
@ -96,7 +96,7 @@ const ImportCompleteStep = ({
|
||||
setIsSaving(true);
|
||||
setTimeout(() => {
|
||||
setIsSaving(false);
|
||||
navigate(-1);
|
||||
navigate("/portal-settings/data-import/migration");
|
||||
}, 1000);
|
||||
};
|
||||
|
||||
|
@ -39,7 +39,6 @@ import { SaveCancelButtons } from "@docspace/shared/components/save-cancel-butto
|
||||
import { Box } from "@docspace/shared/components/box";
|
||||
import { Link } from "@docspace/shared/components/link";
|
||||
import { toastr } from "@docspace/shared/components/toast";
|
||||
// import { mockRes } from "./tempMock";
|
||||
|
||||
const Wrapper = styled.div`
|
||||
max-width: 700px;
|
||||
@ -101,6 +100,8 @@ const ErrorBlock = styled.div`
|
||||
}
|
||||
`;
|
||||
|
||||
const FAILS_TRIES = 1;
|
||||
|
||||
const SelectFileStep = ({
|
||||
t,
|
||||
incrementStep,
|
||||
@ -125,9 +126,10 @@ const SelectFileStep = ({
|
||||
const uploadInterval = useRef(null);
|
||||
const navigate = useNavigate();
|
||||
|
||||
const [failTries, setFailsTries] = useState(FAILS_TRIES);
|
||||
|
||||
const goBack = () => {
|
||||
cancelMigration();
|
||||
setTimeout(() => navigate(-1), 100);
|
||||
navigate("/portal-settings/data-import/migration");
|
||||
};
|
||||
|
||||
const checkMigrationStatusAndUpdate = async () => {
|
||||
@ -188,15 +190,41 @@ const SelectFileStep = ({
|
||||
};
|
||||
|
||||
const onUploadFile = async (file) => {
|
||||
setProgress(0);
|
||||
setIsVisible(true);
|
||||
try {
|
||||
if (Array.isArray(file)) throw new Error(t("Common:SomethingWentWrong"));
|
||||
|
||||
await singleFileUploading(file, setProgress, isAbort);
|
||||
|
||||
if (isAbort.current) return;
|
||||
|
||||
await initMigrationName(searchParams.get("service"));
|
||||
|
||||
uploadInterval.current = setInterval(async () => {
|
||||
try {
|
||||
const res = await getMigrationStatus();
|
||||
|
||||
if (!res && failTries) {
|
||||
setFailsTries((tries) => tries - 1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!res || res.parseResult.failedArchives.length > 0 || res.error) {
|
||||
clearInterval(uploadInterval.current);
|
||||
setIsFileError(true);
|
||||
setIsFileLoading(false);
|
||||
toastr.error(res.error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (res.isCompleted || res.parseResult.progress === 100) {
|
||||
clearInterval(uploadInterval.current);
|
||||
setIsFileLoading(false);
|
||||
setIsVisible(false);
|
||||
setUsers(res.parseResult);
|
||||
setIsSaveDisabled(true);
|
||||
}
|
||||
|
||||
setProgress(res.progress);
|
||||
|
||||
if (res.progress > 10) {
|
||||
@ -204,26 +232,14 @@ const SelectFileStep = ({
|
||||
} else {
|
||||
setIsVisible(true);
|
||||
}
|
||||
|
||||
if (!res || res.parseResult.failedArchives.length > 0 || res.error) {
|
||||
toastr.error(res.error);
|
||||
setIsFileError(true);
|
||||
setIsFileLoading(false);
|
||||
clearInterval(uploadInterval.current);
|
||||
} else if (res.isCompleted || res.parseResult.progress === 100) {
|
||||
clearInterval(uploadInterval.current);
|
||||
setIsFileLoading(false);
|
||||
setIsVisible(false);
|
||||
setProgress(100);
|
||||
setUsers(res.parseResult);
|
||||
setIsSaveDisabled(true);
|
||||
}
|
||||
} catch (error) {
|
||||
toastr.error(error || error.message);
|
||||
setIsFileError(true);
|
||||
setIsFileLoading(false);
|
||||
setIsError(true);
|
||||
clearInterval(uploadInterval.current);
|
||||
} finally {
|
||||
isAbort.current = false;
|
||||
}
|
||||
}, 1000);
|
||||
} catch (error) {
|
||||
@ -238,6 +254,7 @@ const SelectFileStep = ({
|
||||
setIsFileError(false);
|
||||
setIsSaveDisabled(false);
|
||||
setIsFileLoading(true);
|
||||
setFailsTries(FAILS_TRIES);
|
||||
try {
|
||||
onUploadFile(file);
|
||||
} catch (error) {
|
||||
@ -264,7 +281,6 @@ const SelectFileStep = ({
|
||||
window.URL.revokeObjectURL(url);
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
toastr.error(error);
|
||||
}
|
||||
};
|
||||
|
@ -34,10 +34,10 @@ import { Text } from "@docspace/shared/components/text";
|
||||
import AccountsTable from "./AccountsTable";
|
||||
import AccountsPaging from "../../../sub-components/AccountsPaging";
|
||||
|
||||
// import UsersInfoBlock from "../../../sub-components/UsersInfoBlock";
|
||||
import UsersInfoBlock from "../../../sub-components/UsersInfoBlock";
|
||||
import { Wrapper } from "../StyledStepper";
|
||||
|
||||
// const LICENSE_LIMIT = 100;
|
||||
import { parseQuota } from "../../../utils";
|
||||
|
||||
const SelectUsersStep = (props) => {
|
||||
const {
|
||||
@ -48,12 +48,18 @@ const SelectUsersStep = (props) => {
|
||||
searchValue,
|
||||
setSearchValue,
|
||||
cancelMigration,
|
||||
checkedUsers,
|
||||
quotaCharacteristics,
|
||||
users,
|
||||
} = props;
|
||||
|
||||
const [dataPortion, setDataPortion] = useState(withEmailUsers.slice(0, 25));
|
||||
const [quota, setQuota] = useState({ used: 0, max: 0 });
|
||||
const [isSaving, setIsSaving] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
setSearchValue("");
|
||||
setQuota(parseQuota(quotaCharacteristics[1]));
|
||||
}, []);
|
||||
|
||||
const handleDataChange = (leftBoundary, rightBoundary) => {
|
||||
@ -77,9 +83,21 @@ const SelectUsersStep = (props) => {
|
||||
|
||||
const goBack = () => {
|
||||
cancelMigration();
|
||||
setTimeout(decrementStep, 100);
|
||||
setIsSaving(true);
|
||||
setTimeout(() => {
|
||||
setIsSaving(false);
|
||||
decrementStep();
|
||||
}, 1000);
|
||||
};
|
||||
|
||||
const numberOfSelectedUsers =
|
||||
checkedUsers.withEmail.length + checkedUsers.withoutEmail.length;
|
||||
|
||||
const totalUsedUsers =
|
||||
quota.used +
|
||||
checkedUsers.withEmail.filter((user) => !user.isDuplicate).length +
|
||||
checkedUsers.withoutEmail.length;
|
||||
|
||||
return (
|
||||
<Wrapper>
|
||||
{withEmailUsers.length > 0 ? (
|
||||
@ -92,14 +110,18 @@ const SelectUsersStep = (props) => {
|
||||
cancelButtonLabel={t("Common:Back")}
|
||||
showReminder
|
||||
displaySettings
|
||||
isSaving={isSaving}
|
||||
/>
|
||||
|
||||
{/* <UsersInfoBlock
|
||||
t={t}
|
||||
selectedUsers={numberOfCheckedAccounts}
|
||||
totalUsers={users.length}
|
||||
totalLicenceLimit={LICENSE_LIMIT}
|
||||
/> */}
|
||||
{quota.max && (
|
||||
<UsersInfoBlock
|
||||
t={t}
|
||||
totalUsedUsers={totalUsedUsers}
|
||||
selectedUsers={numberOfSelectedUsers}
|
||||
totalUsers={withEmailUsers.length + users.withoutEmail.length}
|
||||
totalLicenceLimit={quota.max}
|
||||
/>
|
||||
)}
|
||||
|
||||
<SearchInput
|
||||
id="search-users-input"
|
||||
@ -135,20 +157,23 @@ const SelectUsersStep = (props) => {
|
||||
cancelButtonLabel={t("Common:Back")}
|
||||
showReminder
|
||||
displaySettings
|
||||
isSaving={isSaving}
|
||||
/>
|
||||
)}
|
||||
</Wrapper>
|
||||
);
|
||||
};
|
||||
|
||||
export default inject(({ importAccountsStore }) => {
|
||||
export default inject(({ importAccountsStore, currentQuotaStore }) => {
|
||||
const {
|
||||
users,
|
||||
withEmailUsers,
|
||||
searchValue,
|
||||
setSearchValue,
|
||||
cancelMigration,
|
||||
checkedUsers,
|
||||
} = importAccountsStore;
|
||||
const { quotaCharacteristics } = currentQuotaStore;
|
||||
|
||||
return {
|
||||
users,
|
||||
@ -156,5 +181,7 @@ export default inject(({ importAccountsStore }) => {
|
||||
searchValue,
|
||||
setSearchValue,
|
||||
cancelMigration,
|
||||
checkedUsers,
|
||||
quotaCharacteristics,
|
||||
};
|
||||
})(observer(SelectUsersStep));
|
||||
|
@ -49,11 +49,11 @@ const UserSelectTableContainer = styled(StyledTableContainer)`
|
||||
position: sticky;
|
||||
z-index: 201;
|
||||
width: calc(100% + 40px);
|
||||
margin-top: 20px;
|
||||
margin-top: -33px;
|
||||
margin-left: -20px;
|
||||
top: 0;
|
||||
|
||||
margin-bottom: -37.5px;
|
||||
margin-bottom: -36px;
|
||||
|
||||
.table-container_group-menu {
|
||||
border-image-slice: 0;
|
||||
|
@ -89,17 +89,15 @@ const SelectUsersTypeStep = (props) => {
|
||||
|
||||
{filteredUsers.length > 0 && (
|
||||
<>
|
||||
{!checkedUsers.result.length > 0 && (
|
||||
<SearchInput
|
||||
id="search-checkedUsers-type-input"
|
||||
className="importUsersSearch"
|
||||
placeholder={t("Common:Search")}
|
||||
value={searchValue}
|
||||
onChange={onChangeInput}
|
||||
refreshTimeout={100}
|
||||
onClearSearch={onClearSearchInput}
|
||||
/>
|
||||
)}
|
||||
<SearchInput
|
||||
id="search-checkedUsers-type-input"
|
||||
className="importUsersSearch"
|
||||
placeholder={t("Common:Search")}
|
||||
value={searchValue}
|
||||
onChange={onChangeInput}
|
||||
refreshTimeout={100}
|
||||
onClearSearch={onClearSearchInput}
|
||||
/>
|
||||
|
||||
<AccountsTable t={t} accountsData={filteredAccounts} />
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
import { useState, useEffect } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { withTranslation } from "react-i18next";
|
||||
import { isMobile as isMobileBreakpoint } from "@docspace/shared/utils/device";
|
||||
import { isMobile } from "react-device-detect";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import useViewEffect from "SRC_DIR/Hooks/useViewEffect";
|
||||
@ -131,7 +132,7 @@ const NextcloudWorkspace = (props) => {
|
||||
return clearCheckedAccounts;
|
||||
}, []);
|
||||
|
||||
if (isMobile)
|
||||
if (isMobile || isMobileBreakpoint())
|
||||
return (
|
||||
<BreakpointWarning
|
||||
isMobileUnavailableOnly
|
||||
|
@ -107,7 +107,7 @@ const ImportCompleteStep = ({
|
||||
setIsSaving(true);
|
||||
setTimeout(() => {
|
||||
setIsSaving(false);
|
||||
navigate(-1);
|
||||
navigate("/portal-settings/data-import/migration")
|
||||
}, 1000);
|
||||
};
|
||||
|
||||
|
@ -89,6 +89,8 @@ const ErrorBlock = styled.div`
|
||||
}
|
||||
`;
|
||||
|
||||
const FAILS_TRIES = 1;
|
||||
|
||||
const SelectFileStep = ({
|
||||
t,
|
||||
onNextStep,
|
||||
@ -115,9 +117,10 @@ const SelectFileStep = ({
|
||||
const uploadInterval = useRef(null);
|
||||
const navigate = useNavigate();
|
||||
|
||||
const [failTries, setFailsTries] = useState(FAILS_TRIES);
|
||||
|
||||
const goBack = () => {
|
||||
cancelMigration();
|
||||
setTimeout(() => navigate(-1), 100);
|
||||
navigate("/portal-settings/data-import/migration");
|
||||
};
|
||||
|
||||
const checkMigrationStatusAndUpdate = async () => {
|
||||
@ -178,16 +181,45 @@ const SelectFileStep = ({
|
||||
};
|
||||
|
||||
const onUploadFile = async (file) => {
|
||||
setProgress(0);
|
||||
setIsVisible(true);
|
||||
try {
|
||||
if (Array.isArray(file)) {
|
||||
setShowErrorText(true);
|
||||
throw new Error(t("Common:SomethingWentWrong"));
|
||||
}
|
||||
|
||||
await singleFileUploading(file, setProgress, isAbort);
|
||||
|
||||
if (isAbort.current) return;
|
||||
|
||||
await initMigrationName(searchParams.get("service"));
|
||||
|
||||
uploadInterval.current = setInterval(async () => {
|
||||
try {
|
||||
const res = await getMigrationStatus();
|
||||
setProgress(res?.progress);
|
||||
|
||||
if (!res && failTries) {
|
||||
setFailsTries((tries) => tries - 1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!res || res.parseResult.failedArchives.length > 0 || res.error) {
|
||||
toastr.error(res.error || t("Common:SomethingWentWrong"));
|
||||
setIsFileError(true);
|
||||
setIsFileLoading(false);
|
||||
clearInterval(uploadInterval.current);
|
||||
return;
|
||||
}
|
||||
|
||||
if (res.isCompleted || res.parseResult.progress === 100) {
|
||||
clearInterval(uploadInterval.current);
|
||||
setIsFileLoading(false);
|
||||
setIsVisible(false);
|
||||
setUsers(res.parseResult);
|
||||
setShowReminder(true);
|
||||
}
|
||||
|
||||
setProgress(res.progress);
|
||||
|
||||
if (res.progress > 10) {
|
||||
setIsVisible(false);
|
||||
@ -200,26 +232,14 @@ const SelectFileStep = ({
|
||||
} else {
|
||||
setShowErrorText(false);
|
||||
}
|
||||
|
||||
if (!res || res.parseResult.failedArchives.length > 0 || res.error) {
|
||||
toastr.error(res.error || t("Common:SomethingWentWrong"));
|
||||
setIsFileError(true);
|
||||
setIsFileLoading(false);
|
||||
clearInterval(uploadInterval.current);
|
||||
} else if (res.isCompleted || res.parseResult.progress === 100) {
|
||||
clearInterval(uploadInterval.current);
|
||||
setIsFileLoading(false);
|
||||
setIsVisible(false);
|
||||
setProgress(100);
|
||||
setUsers(res.parseResult);
|
||||
setShowReminder(true);
|
||||
}
|
||||
} catch (error) {
|
||||
toastr.error(error || t("Common:SomethingWentWrong"));
|
||||
setIsFileError(true);
|
||||
setIsFileLoading(false);
|
||||
setIsError(true);
|
||||
clearInterval(uploadInterval.current);
|
||||
} finally {
|
||||
isAbort.current = false;
|
||||
}
|
||||
}, 1000);
|
||||
} catch (error) {
|
||||
@ -234,6 +254,7 @@ const SelectFileStep = ({
|
||||
setIsFileError(false);
|
||||
setShowReminder(false);
|
||||
setIsFileLoading(true);
|
||||
setFailsTries(FAILS_TRIES);
|
||||
try {
|
||||
onUploadFile(file);
|
||||
} catch (error) {
|
||||
@ -261,7 +282,6 @@ const SelectFileStep = ({
|
||||
});
|
||||
} catch (error) {
|
||||
toastr.error(error);
|
||||
console.log(error);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -32,9 +32,9 @@ import { SearchInput } from "@docspace/shared/components/search-input";
|
||||
|
||||
import AccountsTable from "./AccountsTable";
|
||||
import AccountsPaging from "../../../sub-components/AccountsPaging";
|
||||
// import UsersInfoBlock from "./../../../sub-components/UsersInfoBlock";
|
||||
import UsersInfoBlock from "./../../../sub-components/UsersInfoBlock";
|
||||
|
||||
// const LICENSE_LIMIT = 100;
|
||||
import { parseQuota } from "../../../utils";
|
||||
|
||||
const SelectUsersStep = ({
|
||||
t,
|
||||
@ -46,11 +46,16 @@ const SelectUsersStep = ({
|
||||
searchValue,
|
||||
setSearchValue,
|
||||
cancelMigration,
|
||||
checkedUsers,
|
||||
quotaCharacteristics,
|
||||
}) => {
|
||||
const [dataPortion, setDataPortion] = useState(withEmailUsers.slice(0, 25));
|
||||
const [quota, setQuota] = useState({ used: 0, max: 0 });
|
||||
const [isSaving, setIsSaving] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
setSearchValue("");
|
||||
setQuota(parseQuota(quotaCharacteristics[1]));
|
||||
}, []);
|
||||
|
||||
const handleDataChange = (leftBoundary, rightBoundary) => {
|
||||
@ -79,9 +84,17 @@ const SelectUsersStep = ({
|
||||
|
||||
const goBack = () => {
|
||||
cancelMigration();
|
||||
setTimeout(onPrevStep, 100);
|
||||
setIsSaving(true);
|
||||
setTimeout(() => {
|
||||
setIsSaving(false);
|
||||
onPrevStep();
|
||||
}, 1000);
|
||||
};
|
||||
|
||||
const totalUsedUsers =
|
||||
quota.used +
|
||||
checkedUsers.withEmail.filter((user) => !user.isDuplicate).length;
|
||||
|
||||
return (
|
||||
<>
|
||||
<SaveCancelButtons
|
||||
@ -92,15 +105,21 @@ const SelectUsersStep = ({
|
||||
saveButtonLabel={t("Settings:NextStep")}
|
||||
cancelButtonLabel={t("Common:Back")}
|
||||
displaySettings
|
||||
saveButtonDisabled={areCheckedUsersEmpty}
|
||||
saveButtonDisabled={
|
||||
areCheckedUsersEmpty || (quota.max && totalUsedUsers > quota.max)
|
||||
}
|
||||
isSaving={isSaving}
|
||||
/>
|
||||
|
||||
{/* <UsersInfoBlock
|
||||
t={t}
|
||||
selectedUsers={numberOfCheckedAccounts}
|
||||
totalUsers={users.length}
|
||||
totalLicenceLimit={LICENSE_LIMIT}
|
||||
/> */}
|
||||
{quota.max && (
|
||||
<UsersInfoBlock
|
||||
t={t}
|
||||
totalUsedUsers={totalUsedUsers}
|
||||
selectedUsers={checkedUsers.withEmail.length}
|
||||
totalUsers={withEmailUsers.length}
|
||||
totalLicenceLimit={quota.max}
|
||||
/>
|
||||
)}
|
||||
|
||||
<SearchInput
|
||||
id="search-users-input"
|
||||
@ -131,14 +150,17 @@ const SelectUsersStep = ({
|
||||
saveButtonLabel={t("Settings:NextStep")}
|
||||
cancelButtonLabel={t("Common:Back")}
|
||||
displaySettings
|
||||
saveButtonDisabled={areCheckedUsersEmpty}
|
||||
saveButtonDisabled={
|
||||
areCheckedUsersEmpty || (quota.max && totalUsedUsers > quota.max)
|
||||
}
|
||||
isSaving={isSaving}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default inject(({ importAccountsStore }) => {
|
||||
export default inject(({ importAccountsStore, currentQuotaStore }) => {
|
||||
const {
|
||||
withEmailUsers,
|
||||
searchValue,
|
||||
@ -146,7 +168,9 @@ export default inject(({ importAccountsStore }) => {
|
||||
setResultUsers,
|
||||
areCheckedUsersEmpty,
|
||||
cancelMigration,
|
||||
checkedUsers,
|
||||
} = importAccountsStore;
|
||||
const { quotaCharacteristics } = currentQuotaStore;
|
||||
|
||||
return {
|
||||
setResultUsers,
|
||||
@ -155,5 +179,7 @@ export default inject(({ importAccountsStore }) => {
|
||||
searchValue,
|
||||
setSearchValue,
|
||||
cancelMigration,
|
||||
checkedUsers,
|
||||
quotaCharacteristics,
|
||||
};
|
||||
})(observer(SelectUsersStep));
|
||||
|
@ -51,11 +51,11 @@ const StyledTableContainer = styled(TableContainer)`
|
||||
position: sticky;
|
||||
z-index: 201;
|
||||
width: calc(100% + 40px);
|
||||
margin-top: 20px;
|
||||
margin-top: -33px;
|
||||
margin-left: -20px;
|
||||
top: 0;
|
||||
|
||||
margin-bottom: -37.5px;
|
||||
margin-bottom: -36px;
|
||||
|
||||
.table-container_group-menu {
|
||||
border-image-slice: 0;
|
||||
|
@ -86,17 +86,15 @@ const SelectUsersTypeStep = ({
|
||||
|
||||
{filteredUsers.length > 0 && (
|
||||
<>
|
||||
{!checkedUsers.result.length > 0 && (
|
||||
<SearchInput
|
||||
id="search-users-type-input"
|
||||
placeholder={t("Common:Search")}
|
||||
style={{ marginTop: "20px" }}
|
||||
value={searchValue}
|
||||
onChange={onChangeInput}
|
||||
refreshTimeout={100}
|
||||
onClearSearch={onClearSearchInput}
|
||||
/>
|
||||
)}
|
||||
<SearchInput
|
||||
id="search-users-type-input"
|
||||
placeholder={t("Common:Search")}
|
||||
style={{ marginTop: "20px" }}
|
||||
value={searchValue}
|
||||
onChange={onChangeInput}
|
||||
refreshTimeout={100}
|
||||
onClearSearch={onClearSearchInput}
|
||||
/>
|
||||
|
||||
<AccountsTable t={t} accountsData={filteredAccounts} />
|
||||
|
||||
|
@ -28,7 +28,10 @@ import { useState, useEffect } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { Trans, withTranslation } from "react-i18next";
|
||||
import { getStepTitle, getWorkspaceStepDescription } from "../../../utils";
|
||||
import { tablet } from "@docspace/shared/utils/device";
|
||||
import {
|
||||
tablet,
|
||||
isMobile as isMobileBreakpoint,
|
||||
} from "@docspace/shared/utils/device";
|
||||
import { isMobile } from "react-device-detect";
|
||||
import useViewEffect from "SRC_DIR/Hooks/useViewEffect";
|
||||
import styled, { css } from "styled-components";
|
||||
@ -212,7 +215,7 @@ const OnlyofficeWorkspace = ({
|
||||
return clearCheckedAccounts;
|
||||
}, []);
|
||||
|
||||
if (isMobile) {
|
||||
if (isMobile || isMobileBreakpoint()) {
|
||||
return (
|
||||
<BreakpointWarning
|
||||
isMobileUnavailableOnly
|
||||
|
@ -87,6 +87,7 @@ const UsersInfoBlock = ({
|
||||
t,
|
||||
selectedUsers,
|
||||
totalUsers,
|
||||
totalUsedUsers,
|
||||
totalLicenceLimit,
|
||||
}) => {
|
||||
return (
|
||||
@ -98,7 +99,7 @@ const UsersInfoBlock = ({
|
||||
)}
|
||||
|
||||
<UsersInfoWrapper
|
||||
selectedUsers={selectedUsers}
|
||||
selectedUsers={totalUsedUsers}
|
||||
totalLicenceLimit={totalLicenceLimit}
|
||||
>
|
||||
<Text className="selected-users-count" truncate>
|
||||
@ -107,7 +108,7 @@ const UsersInfoBlock = ({
|
||||
<Text as="div" className="selected-admins-count" truncate>
|
||||
{t("Settings:LicenseLimitCounter")}
|
||||
<Text as="span">
|
||||
{selectedUsers}/{totalLicenceLimit}
|
||||
{totalUsedUsers}/{totalLicenceLimit}
|
||||
</Text>
|
||||
</Text>
|
||||
<HelpButton
|
||||
|
@ -0,0 +1,50 @@
|
||||
// (c) Copyright Ascensio System SIA 2009-2024
|
||||
//
|
||||
// This program is a free software product.
|
||||
// You can redistribute it and/or modify it under the terms
|
||||
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
|
||||
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
|
||||
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
|
||||
// any third-party rights.
|
||||
//
|
||||
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
|
||||
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
|
||||
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
//
|
||||
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
|
||||
//
|
||||
// The interactive user interfaces in modified source and object code versions of the Program must
|
||||
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
|
||||
//
|
||||
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
|
||||
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
|
||||
// trademark law for use of our trademarks.
|
||||
//
|
||||
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
|
||||
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
|
||||
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
import { PortalFeaturesLimitations } from "@docspace/shared/enums";
|
||||
import { getConvertedSize } from "@docspace/shared/utils/common";
|
||||
|
||||
export const parseQuota = (quotaCharacteristics) => {
|
||||
const maxValue = quotaCharacteristics.value;
|
||||
const usedValue = quotaCharacteristics.used.value;
|
||||
|
||||
if (maxValue === PortalFeaturesLimitations.Unavailable) return;
|
||||
|
||||
const isExistsMaxValue = maxValue !== PortalFeaturesLimitations.Limitless;
|
||||
|
||||
const resultingMaxValue =
|
||||
quotaCharacteristics.type === "size" && isExistsMaxValue
|
||||
? getConvertedSize(t, maxValue)
|
||||
: isExistsMaxValue
|
||||
? maxValue
|
||||
: null;
|
||||
|
||||
const resultingUsedValue =
|
||||
quotaCharacteristics.type === "size"
|
||||
? getConvertedSize(t, usedValue)
|
||||
: usedValue;
|
||||
|
||||
return { used: resultingUsedValue, max: resultingMaxValue };
|
||||
};
|
@ -102,7 +102,9 @@ class ImportAccountsStore {
|
||||
get filteredUsers() {
|
||||
return this.users.result.filter(
|
||||
(user) =>
|
||||
!this.users.existing.some((existingUser) => existingUser.key === user.key),
|
||||
!this.users.existing.some(
|
||||
(existingUser) => existingUser.key === user.key,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@ -290,8 +292,6 @@ class ImportAccountsStore {
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
} finally {
|
||||
isAbort.current = false;
|
||||
}
|
||||
};
|
||||
|
||||
@ -331,8 +331,6 @@ class ImportAccountsStore {
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
} finally {
|
||||
isAbort.current = false;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -141,6 +141,8 @@ const useEditorEvents = ({
|
||||
const onSDKAppReady = React.useCallback(() => {
|
||||
docEditor = window.DocEditor.instances[EDITOR_ID];
|
||||
|
||||
frameCallCommand("setIsLoaded");
|
||||
|
||||
if (errorMessage || isSkipError)
|
||||
return docEditor?.showMessage?.(errorMessage || t("Common:InvalidLink"));
|
||||
|
||||
@ -167,8 +169,6 @@ const useEditorEvents = ({
|
||||
// console.log("onDocumentReady", { docEditor });
|
||||
setDocumentReady(true);
|
||||
|
||||
frameCallCommand("setIsLoaded");
|
||||
|
||||
if (config?.errorMessage) docEditor?.showMessage?.(config.errorMessage);
|
||||
|
||||
// if (config?.file?.canShare) {
|
||||
|
@ -54,6 +54,7 @@ export const LoginFormWrapper = styled.div<{ bgPattern: string }>`
|
||||
|
||||
@media ${mobile} {
|
||||
background-image: none;
|
||||
height: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -82,8 +83,7 @@ export const LoginFormWrapper = styled.div<{ bgPattern: string }>`
|
||||
top: 28px;
|
||||
|
||||
@media ${mobile} {
|
||||
top: 7px;
|
||||
right: 8px;
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
.invitation-info-container {
|
||||
|
@ -34,6 +34,7 @@ import { mobile } from "@docspace/shared/utils/device";
|
||||
import { getLogoUrl } from "@docspace/shared/utils/common";
|
||||
import { Base, Dark } from "@docspace/shared/themes";
|
||||
import { ThemeKeys, WhiteLabelLogoType } from "@docspace/shared/enums";
|
||||
import LanguageComboboxWrapper from "./LanguageCombobox";
|
||||
|
||||
const StyledSimpleNav = styled.div`
|
||||
display: none;
|
||||
@ -50,6 +51,12 @@ const StyledSimpleNav = styled.div`
|
||||
|
||||
@media ${mobile} {
|
||||
display: flex;
|
||||
|
||||
.language-combo-box {
|
||||
position: absolute;
|
||||
top: 7px;
|
||||
right: 8px;
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
@ -66,6 +73,7 @@ const SimpleNav = ({ systemTheme }: SimpleNavProps) => {
|
||||
return (
|
||||
<StyledSimpleNav id="login-header" theme={isDark ? Dark : Base}>
|
||||
<img src={logoUrl} alt="logo-url" />
|
||||
<LanguageComboboxWrapper />
|
||||
</StyledSimpleNav>
|
||||
);
|
||||
};
|
||||
|
@ -37,7 +37,6 @@ import { Row } from "./sub-components/Row";
|
||||
|
||||
import { DropDownProps } from "./DropDown.types";
|
||||
import { DEFAULT_PARENT_HEIGHT } from "./DropDown.constants";
|
||||
import { Backdrop } from "../backdrop";
|
||||
|
||||
const DropDown = ({
|
||||
directionY = "bottom",
|
||||
@ -68,11 +67,6 @@ const DropDown = ({
|
||||
manualY,
|
||||
className,
|
||||
style,
|
||||
withoutBackground,
|
||||
withBackground,
|
||||
withBackdrop,
|
||||
isAside,
|
||||
withBlur,
|
||||
}: DropDownProps) => {
|
||||
const theme = useTheme();
|
||||
|
||||
@ -381,23 +375,19 @@ const DropDown = ({
|
||||
? { height: `${calculatedHeight}px` }
|
||||
: {};
|
||||
|
||||
const toggleDropDown = () => {
|
||||
clickOutsideAction?.({} as Event, !open);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
{withBackdrop ? (
|
||||
{/* {withBackdrop ? ( //TODO: consider a solution when there will be a structure of correct z index for components
|
||||
<Backdrop
|
||||
visible={open || false}
|
||||
zIndex={310}
|
||||
zIndex={199} // TODO: zIndex should almost be equal to the dropdown index
|
||||
onClick={toggleDropDown}
|
||||
withoutBlur={!withBlur}
|
||||
isAside={isAside}
|
||||
withBackground={withBackground}
|
||||
withoutBackground={withoutBackground}
|
||||
/>
|
||||
) : null}
|
||||
) : null} */}
|
||||
<StyledDropdown
|
||||
ref={dropDownRef}
|
||||
style={style}
|
||||
|
@ -33,11 +33,23 @@ import { DropDownProps } from "./DropDown.types";
|
||||
import { EnhancedComponent } from "./DropDown";
|
||||
|
||||
const DropDown = (props: DropDownProps) => {
|
||||
const { eventTypes, forceCloseClickOutside } = props;
|
||||
const {
|
||||
clickOutsideAction,
|
||||
open,
|
||||
withBackdrop = true,
|
||||
|
||||
// const toggleDropDown = () => {
|
||||
// clickOutsideAction?.({} as Event, !open);
|
||||
// };
|
||||
withBlur = false,
|
||||
|
||||
isAside,
|
||||
withBackground,
|
||||
eventTypes,
|
||||
forceCloseClickOutside,
|
||||
withoutBackground,
|
||||
} = props;
|
||||
|
||||
const toggleDropDown = () => {
|
||||
clickOutsideAction?.({} as Event, !open);
|
||||
};
|
||||
|
||||
const eventTypesProp = forceCloseClickOutside
|
||||
? {}
|
||||
@ -49,7 +61,7 @@ const DropDown = (props: DropDownProps) => {
|
||||
|
||||
return (
|
||||
<>
|
||||
{/* {withBackdrop ? (
|
||||
{withBackdrop ? (
|
||||
<Backdrop
|
||||
visible={open || false}
|
||||
zIndex={199}
|
||||
@ -59,12 +71,11 @@ const DropDown = (props: DropDownProps) => {
|
||||
withBackground={withBackground}
|
||||
withoutBackground={withoutBackground}
|
||||
/>
|
||||
) : null} */}
|
||||
) : null}
|
||||
<EnhancedComponent {...eventTypesProp} {...props} />
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
DropDown.defaultProps = {
|
||||
withBackdrop: true,
|
||||
showDisabledItems: false,
|
||||
|
@ -59,12 +59,12 @@ const MediaViewer = (props: MediaViewerProps): JSX.Element | undefined => {
|
||||
playlistPos,
|
||||
currentFileId,
|
||||
isPreviewFile,
|
||||
setBufferSelection,
|
||||
extsImagePreviewed,
|
||||
deleteDialogVisible,
|
||||
pluginContextMenuItems,
|
||||
currentDeviceType,
|
||||
isPublicFile,
|
||||
isPublicFile = false,
|
||||
|
||||
t,
|
||||
getIcon,
|
||||
onClose,
|
||||
@ -74,6 +74,7 @@ const MediaViewer = (props: MediaViewerProps): JSX.Element | undefined => {
|
||||
onDownload,
|
||||
onChangeUrl,
|
||||
setActiveFiles,
|
||||
setBufferSelection,
|
||||
onEmptyPlaylistError,
|
||||
|
||||
...other
|
||||
@ -132,7 +133,7 @@ const MediaViewer = (props: MediaViewerProps): JSX.Element | undefined => {
|
||||
t,
|
||||
targetFile,
|
||||
archiveRoom,
|
||||
Boolean(isPublicFile),
|
||||
isPublicFile,
|
||||
{
|
||||
onClickDownload,
|
||||
onClickRename,
|
||||
@ -140,20 +141,15 @@ const MediaViewer = (props: MediaViewerProps): JSX.Element | undefined => {
|
||||
},
|
||||
);
|
||||
|
||||
const model = getMobileMediaContextModel(
|
||||
t,
|
||||
targetFile,
|
||||
Boolean(isPublicFile),
|
||||
{
|
||||
onShowInfoPanel,
|
||||
onClickDownload,
|
||||
onMoveAction,
|
||||
onCopyAction,
|
||||
onDuplicate,
|
||||
onClickRename,
|
||||
onClickDelete,
|
||||
},
|
||||
);
|
||||
const model = getMobileMediaContextModel(t, targetFile, isPublicFile, {
|
||||
onShowInfoPanel,
|
||||
onClickDownload,
|
||||
onMoveAction,
|
||||
onCopyAction,
|
||||
onDuplicate,
|
||||
onClickRename,
|
||||
onClickDelete,
|
||||
});
|
||||
|
||||
if (isPdf)
|
||||
return getPDFContextModel(t, targetFile, {
|
||||
|
@ -251,7 +251,7 @@ export const Viewer = (props: ViewerProps) => {
|
||||
|
||||
{isImage ? (
|
||||
<ImageViewer
|
||||
key={fileUrl}
|
||||
key={targetFile?.viewUrl}
|
||||
isTiff={isTiff}
|
||||
devices={devices}
|
||||
toolbar={toolbar}
|
||||
|
@ -1,9 +1,9 @@
|
||||
<svg width="22" height="26" viewBox="0 0 22 26" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<rect x="1" width="21" height="26" fill="url(#pattern0)"/>
|
||||
<rect x="1" width="21" height="26" fill="url(#pattern0_494_3779)"/>
|
||||
<defs>
|
||||
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
|
||||
<use xlink:href="#image0" transform="scale(0.047619 0.0384615)"/>
|
||||
<pattern id="pattern0_494_3779" patternContentUnits="objectBoundingBox" width="1" height="1">
|
||||
<use xlink:href="#image0_494_3779" transform="scale(0.047619 0.0384615)"/>
|
||||
</pattern>
|
||||
<image id="image0" width="21" height="26" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAaCAYAAABYQRdDAAACpklEQVRIibVVz2sTURD+dtMqCilC40H0IvYieNGLLQVJQhMLRaSKtQiepSDiuVjBg+DBP6Ap6EHFnwgiFUlbQy+2lW6kKgUv0RYKFgyEJERj9sfIbN5bnsl22SoODG92M/n2++a9eaMREYJM07psADpRRQtMFKZpGsCgi0uGu0rn3xgIiNokrD8+vMDPQJTUXD9SHX5fS6TOZ4lIm5977b17Oz/XR1RBPv/RZU9UiWzJlr+UTI+q72ZyM49TaEoHA6mx4ziIRPZALYcrWbUm/ajqnuSWmGzbJtM03fjylXGSpWizvwUtl8tUKpWoWWdExD64pofZ0RCm+4BW/xV0h8pWYVqV4Cr7MEo45xCAvQB2QTlSuiLB2WZZOL8hYpVp1IwPnMs+ePT0xDbAVGOGOwF0ukw1rYvEWUwm06NJNVOeURlblgXbtv1AOwRgRNCNkvpn9cB7+hzHdQZkZ3D5HIsddIBqP4AygCKA7+5FkUiN5CTA+MREaECORR07hOteTUfODj1LD12Y5fjM6ZOhAQUoGwe22DTZUejs3n/sq2F8kA3kdU+9XqdareZ1ULFYpM3NTdrY2KCX01k60NP7BcBxAIcBxKAcHfvm9au3rt24HZohx4vvVjCY6F0QDC3JVII65NTuL79fXVs2VkIB8pq58/CbrtffCEBTrFAvWW0yc+/S4KmLgZLX19epUCjQ8xfTUnofgCMA9gHYjZbOIcnWMD4FMuTVyK9K6ZboqIbYrD/bcWxsrM61fZXNBQKyt0hvCPntoLK2U3efrAUB8gdNy9amMpOfBVhD3Si/waXHB0ZmxZDb0vvjw0sAjgLoAdAtet+9UNwZ1TZjmn3MlwSPAl75vvQzZvhD3Jk/5e77TlNRmzoLEclbTU7OY/m/POn/xQD8BpP9ctoIZHyxAAAAAElFTkSuQmCC"/>
|
||||
<image id="image0_494_3779" width="21" height="26" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAaCAYAAABYQRdDAAACpklEQVRIibVVz2sTURD+dtMqCilC40H0IvYieNGLLQVJQhMLRaSKtQiepSDiuVjBg+DBP6Ap6EHFnwgiFUlbQy+2lW6kKgUv0RYKFgyEJERj9sfIbN5bnsl22SoODG92M/n2++a9eaMREYJM07psADpRRQtMFKZpGsCgi0uGu0rn3xgIiNokrD8+vMDPQJTUXD9SHX5fS6TOZ4lIm5977b17Oz/XR1RBPv/RZU9UiWzJlr+UTI+q72ZyM49TaEoHA6mx4ziIRPZALYcrWbUm/ajqnuSWmGzbJtM03fjylXGSpWizvwUtl8tUKpWoWWdExD64pofZ0RCm+4BW/xV0h8pWYVqV4Cr7MEo45xCAvQB2QTlSuiLB2WZZOL8hYpVp1IwPnMs+ePT0xDbAVGOGOwF0ukw1rYvEWUwm06NJNVOeURlblgXbtv1AOwRgRNCNkvpn9cB7+hzHdQZkZ3D5HIsddIBqP4AygCKA7+5FkUiN5CTA+MREaECORR07hOteTUfODj1LD12Y5fjM6ZOhAQUoGwe22DTZUejs3n/sq2F8kA3kdU+9XqdareZ1ULFYpM3NTdrY2KCX01k60NP7BcBxAIcBxKAcHfvm9au3rt24HZohx4vvVjCY6F0QDC3JVII65NTuL79fXVs2VkIB8pq58/CbrtffCEBTrFAvWW0yc+/S4KmLgZLX19epUCjQ8xfTUnofgCMA9gHYjZbOIcnWMD4FMuTVyK9K6ZboqIbYrD/bcWxsrM61fZXNBQKyt0hvCPntoLK2U3efrAUB8gdNy9amMpOfBVhD3Si/waXHB0ZmxZDb0vvjw0sAjgLoAdAtet+9UNwZ1TZjmn3MlwSPAl75vvQzZvhD3Jk/5e77TlNRmzoLEclbTU7OY/m/POn/xQD8BpP9ctoIZHyxAAAAAElFTkSuQmCC"/>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Loading…
Reference in New Issue
Block a user