Merge branch 'develop' into bugfix/fixed-infinite-tiles-styles

This commit is contained in:
Alexey Safronov 2022-09-15 20:54:58 +03:00 committed by GitHub
commit d0a01ff723
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
60 changed files with 900 additions and 381 deletions

View File

@ -4,8 +4,8 @@
"Archives": "Arxivlər",
"BackToParentFolderButton": "Ana qovluğa qayıt",
"ByAuthor": "Müəllif",
"ByCreationDate": "Yaradıldı",
"ByLastModifiedDate": "Dəyişdirilib",
"ByCreation": "Yaradıldı",
"ByLastModified": "Dəyişdirilib",
"ByTitle": "Başlıq",
"CommonEmptyContainerDescription": "'Ümumi' bölməsi portal inzibatçısı tərəfindən bütün istifadəçilərlə paylaşılan faylları ehtiva edir. Orada yalnız portal inzibatçıları fayl yarada bilər. İstifadəçilərə bölmə daxilində müəyyən bir qovluğa tam giriş verilə bilər. Bu şəkildə bu qovluqda fayllar yarada/yükləyə biləcəklər.",
"ContainsSpecCharacter": "Başlıqda aşağıdakı simvollardan heç biri ola bilməz: *+: \"<>? |/ ",

View File

@ -4,8 +4,8 @@
"Archives": "Архиви",
"BackToParentFolderButton": "Обратно към родителската папка",
"ByAuthor": "Автор",
"ByCreationDate": "Създаден",
"ByLastModifiedDate": "Модифициран",
"ByCreation": "Създаден",
"ByLastModified": "Модифициран",
"ByTitle": "Заглавие",
"CommonEmptyContainerDescription": "Разделът 'Често срещани' съдържа файлове, които са споделени с всички потребители от администратора на портала. Само администраторите на портала могат да създават файлове там. Потребителите могат да се сдобият с Пълен достъп до определена папка в рамките на раздела. По този начин те ще могат да създават/качват файлове във всяка папка.",
"ContainsSpecCharacter": "Заглавието не може да съдържа някой от следните символи: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "Archivy",
"BackToParentFolderButton": "Zpět do nadřazené složky",
"ByAuthor": "Autor",
"ByCreationDate": "Vytvořeno",
"ByLastModifiedDate": "Upraveno",
"ByCreation": "Vytvořeno",
"ByLastModified": "Upraveno",
"ByTitle": "Název",
"CommonEmptyContainerDescription": "Sekce 'Sdílené' obsahuje soubory, které správce portálu sdílí se všemi uživateli. Soubory v ní mohou vytvářet pouze správci portálu. Uživatelům lze v rámci sekce udělit plný přístup k určité složce. Tímto způsobem budou moci vytvářet/nahrávat soubory právě v této složce. ",
"ContainsSpecCharacter": "Název nesmí obsahovat žádný z následujících znaků: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "Archive",
"BackToParentFolderButton": "Zurück zum übergeordneten Ordner",
"ByAuthor": "Verfasser",
"ByCreationDate": "Erstellt",
"ByLastModifiedDate": "Verändert",
"ByCreation": "Erstellt",
"ByLastModified": "Verändert",
"ByTitle": "Titel",
"CommonEmptyContainerDescription": "In gemeinsamen Dokumenten finden Sie Dateien, auf denen alle Benutzer Zugriff haben. Nur Portaladministratoren können dort Dateien erstellen. Benutzern kann der vollständigen Zugriff auf einen bestimmten Ordner innerhalb des Abschnitts erteilt werden. Dann können Sie Dateien in diesem Ordner erstellen / hochladen.",
"ContainsSpecCharacter": "Der Titel darf diese Symbole nicht beinhalten: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "Αρχειοθετήσεις",
"BackToParentFolderButton": "Επιστροφή στον γονικό φάκελο",
"ByAuthor": "Δημιουργός",
"ByCreationDate": "Δημιουργήθηκε",
"ByLastModifiedDate": "Τροποποιήθηκε",
"ByCreation": "Δημιουργήθηκε",
"ByLastModified": "Τροποποιήθηκε",
"ByTitle": "Τίτλος",
"CommonEmptyContainerDescription": "Η ενότητα «Κοινά» περιέχει αρχεία που μοιράζονται σε όλους τους χρήστες από τον διαχειριστή της πύλης. Μόνο οι διαχειριστές της πύλης μπορούν να δημιουργήσουν αρχεία εκεί. Οι χρήστες μπορούν να έχουν πλήρη πρόσβαση σε έναν συγκεκριμένο φάκελο εντός της ενότητας. Έτσι, θα μπορούν να δημιουργούν/μεταφορτώνουν αρχεία σε αυτόν τον φάκελο.",
"ContainsSpecCharacter": "Ο τίτλος δεν μπορεί να περιέχει τους ακόλουθους χαρακτήρες: *+:\"<>?|/",

View File

@ -1,12 +1,12 @@
{
"AdvancedFilter": "Advanced search options",
"AdvancedFilter": "Search options",
"All": "All",
"AllFiles": "All files",
"Archives": "Archives",
"BackToParentFolderButton": "Back to parent folder",
"ByAuthor": "Author",
"ByCreationDate": "Created",
"ByLastModifiedDate": "Modified",
"ByCreation": "Created",
"ByLastModified": "Modified",
"ByOwner": "Owner",
"ByTitle": "Title",
"CollaborationRooms": "Collaboration",
@ -24,7 +24,9 @@
"EmptyFolderHeader": "No files in this folder",
"EmptyRecycleBin": "Empty Trash",
"EmptyScreenFolder": "No docs here yet",
"ExcludeSubfolders": "Exclude subfolders",
"FavoritesEmptyContainerDescription": "To mark files as favorites or remove them from this list, use the context menu.",
"FileContents": "File contents",
"FileRemoved": "File moved to Trash",
"FileRenamed": "The document '{{oldTitle}}' is renamed to '{{newTitle}}'",
"FillingFormRooms": "Filling form",
@ -33,6 +35,7 @@
"Folder": "Folder",
"FolderRemoved": "Folder moved to Trash",
"FolderRenamed": "The folder '{{folderTitle}}' is renamed to '{{newFoldedTitle}}'",
"Forms": "Forms",
"FromArchive": "Move from archive",
"GoToMyButton": "Go to My Documents",
"Images": "Images",
@ -40,6 +43,7 @@
"MarkAsFavorite": "Mark as favorite",
"MarkRead": "Mark as read",
"MarkedAsFavorite": "Added to favorites",
"FormsTemplates": "Forms templates",
"Media": "Media",
"MoveItem": "<strong>{{title}}</strong> moved",
"MoveItems": "<strong>{{qty}}</strong> elements have been moved",
@ -74,6 +78,7 @@
"ReviewRooms": "Review",
"RoomRemoved": "Room removed",
"RoomsRemoved": "Rooms removed",
"SearchByContent": "Search by file contents",
"SendByEmail": "Send by email",
"Share": "Share",
"SharedEmptyContainerDescription": "The 'Shared with Me' section shows files shared to you by teammates. If you haven't seen the latest changes, they are marked as new. You can remove the files from the list using the context menu. ",
@ -93,5 +98,6 @@
"VersionHistory": "Version history",
"ViewList": "List",
"ViewOnlyRooms": "View-only",
"ViewTiles": "Tiles"
"ViewTiles": "Tiles",
"WithSubfolders": "With subfolders"
}

View File

@ -4,8 +4,8 @@
"Archives": "Archivos",
"BackToParentFolderButton": "Volver a la carpeta principal",
"ByAuthor": "Autor",
"ByCreationDate": "Creado",
"ByLastModifiedDate": "Modificado",
"ByCreation": "Creado",
"ByLastModified": "Modificado",
"ByTitle": "Título",
"CommonEmptyContainerDescription": "La sección 'Documentos comunes' contiene archivos compartidos por el administrador del portal con todos los usuarios. Sólo los administradores del portal pueden crear archivos allí. Los usuarios pueden tener acceso completo a una determinada carpeta dentro de la sección. De esta manera podrán crear/subir archivos en esta misma carpeta. ",
"ContainsSpecCharacter": "El título no puede contener ninguno de los siguientes caracteres: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "Arkistot",
"BackToParentFolderButton": "Takaisin pääkansioon",
"ByAuthor": "Tekijä",
"ByCreationDate": "Luotu",
"ByLastModifiedDate": "Muokattu",
"ByCreation": "Luotu",
"ByLastModified": "Muokattu",
"ByTitle": "Otsikko",
"CommonEmptyContainerDescription": "Yleinen -osio sisältää tiedostoja, jotka portaalin ylläpitäjä on jakanut kaikille käyttäjille. Vain portaalin ylläpitäjät voivat luoda tiedostoja sinne. Käyttäjille voidaan myöntää täysi käyttöoikeus tiettyyn osion kansioon. Tällä tavalla he voivat luoda/ladata tiedostoja juuri tähän kansioon. ",
"ContainsSpecCharacter": "Otsikko ei voi sisältää mitään seuraavista merkeistä: *+: \"<>? |/",

View File

@ -4,8 +4,8 @@
"Archives": "Archives",
"BackToParentFolderButton": "Retour vers le dossier précédent",
"ByAuthor": "Auteur",
"ByCreationDate": "Créé",
"ByLastModifiedDate": "Modifié",
"ByCreation": "Créé",
"ByLastModified": "Modifié",
"ByTitle": "Titre",
"CommonEmptyContainerDescription": "La section \"Documents Communs\" contient des fichiers partagés par l'administrateur du portail avec tous les utilisateurs. Seuls les administrateurs du portail peuvent y créer des fichiers. Les utilisateurs peuvent obtenir un accès complet à un certain dossier de la section. Ainsi, ils pourront créer/télécharger des fichiers dans ce même dossier. ",
"ContainsSpecCharacter": "Le titre ne peut contenir aucun des caractères suivants : *+ :\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "Արխիվներ",
"BackToParentFolderButton": "Վերադառնալ ծնող պանակ",
"ByAuthor": "Հեղինակ",
"ByCreationDate": "Ստեղծված",
"ByLastModifiedDate": "Փոփոխված",
"ByCreation": "Ստեղծված",
"ByLastModified": "Փոփոխված",
"ByTitle": "Անվանում",
"CommonEmptyContainerDescription": "'Ընդհանուր'բաժինը պարունակում է ֆայլեր, որոնք կայքէջի ադմինիստրատորի կողմից համօգտագործվում են բոլոր օգտատերերին: Միայն կայքէջի ադմինիստրատորները կարող են այնտեղ ֆայլեր ստեղծել։ Օգտագործողներին կարող է տրվել ամբողջական մուտք դեպի որոշակի պանակ այս բաժնում: Այս կերպ նրանք կկարողանան ստեղծել/վերբեռնել ֆայլեր հենց այս պանակում:",
"ContainsSpecCharacter": "Վերնագիրը չի կարող պարունակել հետևյալ նիշերից որևէ մեկը՝ *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "Archivi",
"BackToParentFolderButton": "Vai alla cartella superiore",
"ByAuthor": "Autore",
"ByCreationDate": "Creato",
"ByLastModifiedDate": "Modificato",
"ByCreation": "Creato",
"ByLastModified": "Modificato",
"ByTitle": "Titolo",
"CommonEmptyContainerDescription": "La sezione \"Comune\" contiene i file condivisi con tutti gli utenti di tipo amministratore del portale. Solo gli amministratori del portale possono creare file nel posto \"Comune\". Agli utenti può essere concesso l'accesso completo a una determinata cartella all'interno della sezione. In questo modo potranno creare / caricare file in questa stessa cartella.",
"ContainsSpecCharacter": "Il titolo non può contenere nessuno dei seguenti caratteri: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "アーカイブ",
"BackToParentFolderButton": "親フォルダに戻る",
"ByAuthor": "作成者",
"ByCreationDate": "作成",
"ByLastModifiedDate": "変更",
"ByCreation": "作成",
"ByLastModified": "変更",
"ByTitle": "タイトル",
"CommonEmptyContainerDescription": "「共通」セクションには、ポータル管理者が全ユーザに共有するファイルがあります。ここにファイルを作成できるのは、ポータル管理者のみです。ユーザーは、セクション内の特定のフォルダへのフルアクセスを許可することができます。この場合、ユーザーは、このフォルダにファイルを作成/アップロードすることができます。 ",
"ContainsSpecCharacter": "タイトルには以下の文字*+:\"<>?|/は使用できません。",

View File

@ -4,8 +4,8 @@
"Archives": "아카이브",
"BackToParentFolderButton": "상위 폴더로 돌아가기",
"ByAuthor": "생성자",
"ByCreationDate": "생성일",
"ByLastModifiedDate": "수정일",
"ByCreation": "생성일",
"ByLastModified": "수정일",
"ByTitle": "제목",
"CommonEmptyContainerDescription": "'공통' 섹션은 포털 관리자에 의해 모든 사용자에게 공유된 파일을 포함합니다. 포털 관리자만 공통 섹션에 파일을 생성할 수 있습니다. 사용자는 해당 섹션 내 특정 폴더에 대한 전체 액세스 권한을 부여 받을 수 있습니다. 그리고 이러한 방식으로 해당 폴더에 파일을 생성/업로드할 수 있습니다.",
"ContainsSpecCharacter": "제목에는 다음 문자가 포함될 수 없습니다: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "ຮວບຮວມ",
"BackToParentFolderButton": "ກັບໄປທີ່ແຟ້ມຫຼັກ",
"ByAuthor": "ຜູ້ຂຽນ",
"ByCreationDate": "ສ້າງ",
"ByLastModifiedDate": "ແກ້ໄຂ",
"ByCreation": "ສ້າງ",
"ByLastModified": "ແກ້ໄຂ",
"ByTitle": "ຫົວຂໍ້",
"CommonEmptyContainerDescription": "ສ່ວນ common 'ມີເອກະສານທີ່ແບ່ງປັນໃຫ້ຜູ້ຊົມໃຊ້ທັງໝົດ ໂດຍ Portal admin. ມີພຽງແຕ່ Portal ເປັນຜູ້ຮັບຮອງເທົ່ານັ້ນທີ່ສາມາດສ້າງເອກະສານຢູ່ບ່ອນນັ້ນ. ຜູ້ໃຊ້ສາມາດໄດ້ຮັບການອະນຸຍາດເຂົ້າເຖິງໂຟນເດີທີ່ແນ່ນອນພາຍໃນພາກສ່ວນໃດໜື່ງ. ວິທີນີ້ພວກເຂົາຈະສາມາດສ້າງ / ອັບໂຫລດເອກະສານໃນໂຟນເດີນັ້ນໄດ້.",
"ContainsSpecCharacter": "ຫົວຂໍ້ບໍ່ສາມາດມີຕົວອັກສອນຕໍ່ໄປນີ້: * +: \"<>? | /",

View File

@ -4,8 +4,8 @@
"Archives": "Arhīvi",
"BackToParentFolderButton": "Atpakaļ uz vecāku mapi",
"ByAuthor": "Autors",
"ByCreationDate": "Izveidots",
"ByLastModifiedDate": "Modificēts",
"ByCreation": "Izveidots",
"ByLastModified": "Modificēts",
"ByTitle": "Nosaukums",
"CommonEmptyContainerDescription": "Sadaļā 'Kopējs' ir faili, kurus visiem lietotājiem ir kopīgojis portāla administrators. Failus tur var izveidot tikai portāla administratori. Lietotājiem var piešķirt pilnu piekļuvi noteiktai sadaļas mapei. Tādā veidā viņi varēs izveidot/augšupielādēt failus tieši šajā mapē. ",
"ContainsSpecCharacter": "Nosaukumā nedrīkst būt neviena no šīm rakstzīmēm: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "Archieven",
"BackToParentFolderButton": "Terug naar bovenliggende map",
"ByAuthor": "Auteur",
"ByCreationDate": "Aangemaakt",
"ByLastModifiedDate": "Gewijzigd",
"ByCreation": "Aangemaakt",
"ByLastModified": "Gewijzigd",
"ByTitle": "Titel",
"CommonEmptyContainerDescription": "'Algemene' sectie bevat bestanden die door de portaal beheerder worden gedeeld met alle gebruikers. Alleen portaal beheerders kunnen daar bestanden aanmaken. Gebruikers kunnen volledige toegang krijgen tot een bepaalde map binnen de sectie. Op deze manier kunnen ze bestanden maken/uploaden in deze map. ",
"ContainsSpecCharacter": "De titel mag geen van de volgende tekens bevatten: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "Archiwa",
"BackToParentFolderButton": "Wróć do folderu nadrzędnego",
"ByAuthor": "Autor",
"ByCreationDate": "Utworzono",
"ByLastModifiedDate": "Zmodyfikowano",
"ByCreation": "Utworzono",
"ByLastModified": "Zmodyfikowano",
"ByTitle": "Tytuł",
"CommonEmptyContainerDescription": "Sekcja 'Wspólne' zawiera pliki udostępnione wszystkim użytkownikom przez administratora portalu. Tylko on może tworzyć w niej nowe pliki. Użytkownicy mogą uzyskać pełen dostęp do pewnych folderów znajdujących się w tej sekcji. Dzięki temu będą w stanie tworzyć/wgrywać w nich dowolne pliki. ",
"ContainsSpecCharacter": "Tytuł nie może zawierać następujących znaków: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "Arquivos",
"BackToParentFolderButton": "Voltar para pasta principal",
"ByAuthor": "Autor",
"ByCreationDate": "Criado",
"ByLastModifiedDate": "Modificado",
"ByCreation": "Criado",
"ByLastModified": "Modificado",
"ByTitle": "Titulo",
"CommonEmptyContainerDescription": "A seção 'Comum' contém arquivos compartilhados a todos os usuários pelo administrador do portal. Somente os administradores do portal podem criar arquivos lá. Os usuários podem ter acesso total a uma determinada pasta dentro da seção. Desta forma, eles poderão criar/enviar arquivos nesta mesma pasta.",
"ContainsSpecCharacter": "O título não pode conter nenhum dos seguintes caracteres: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "Arquivos",
"BackToParentFolderButton": "Voltar à pasta principal",
"ByAuthor": "Autor",
"ByCreationDate": "Criado",
"ByLastModifiedDate": "Modificado",
"ByCreation": "Criado",
"ByLastModified": "Modificado",
"ByTitle": "Titulo",
"CommonEmptyContainerDescription": "A secção 'Comum' contém ficheiro partilhados a todos os utilizadores pelo administrador do portal. Apenas os administradores do portal podem criar lá ficheiros. Os utilizadores podem ter acesso total a uma determinada pasta dentro da secção. Desta forma, eles poderão criar/enviar ficheiros nesta mesma pasta.",
"ContainsSpecCharacter": "O título não pode conter nenhum dos seguintes caracteres: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "Arhive",
"BackToParentFolderButton": "Revenire la folderul părinte",
"ByAuthor": "Autor",
"ByCreationDate": "A fost creat la",
"ByLastModifiedDate": "Modificat",
"ByCreation": "A fost creat la",
"ByLastModified": "Modificat",
"ByTitle": "Titlu",
"CommonEmptyContainerDescription": "Secțiunea Comune conține fișiere partajate cu alți utilizatori de către administratorul portalului. Numai administratorii portalului pot crea fișiere acolo. Utilizatorii pot primi acces complet la un anumit dosar din secțiunea. În acest mod, utilizatorii pot crea/încărca fișiere în acest dosar.",
"ContainsSpecCharacter": "Numele nu poate conține niciun din caractere următoare: *+:\"<>?|/ ",

View File

@ -4,8 +4,8 @@
"Archives": "Архивы",
"BackToParentFolderButton": "Вернуться в папку на уровень выше",
"ByAuthor": "Автор",
"ByCreationDate": "Создан",
"ByLastModifiedDate": "Изменен",
"ByCreation": "Создан",
"ByLastModified": "Изменен",
"ByTitle": "Название",
"CollaborationRooms": "Совместное редактирование",
"CommonEmptyContainerDescription": "В разделе «Общие документы» отображаются все документы, которыми администратор портала предоставил общий доступ. Только администраторы портала могут создавать папки в этом разделе, но с предоставленным доступом пользователи портала также могут загружать свои файлы здесь. Перетащите файлы со своего компьютера сюда, чтобы загрузить их на свой портал еще проще.",

View File

@ -4,8 +4,8 @@
"Archives": "Archívy",
"BackToParentFolderButton": "Späť do nadradeného priečinka",
"ByAuthor": "Autor",
"ByCreationDate": "Vytvorené",
"ByLastModifiedDate": "Upravené",
"ByCreation": "Vytvorené",
"ByLastModified": "Upravené",
"ByTitle": "Názov",
"CommonEmptyContainerDescription": "Sekcia 'Spoločné' obsahuje súbory zdieľané všetkým používateľom správcom portálu. Súbory tam môžu vytvárať iba správcovia portálu. Používateľom môže byť udelený úplný prístup k určitému priečinku v rámci sekcie. Týmto spôsobom budú môcť vytvárať/nahrávať súbory práve do tohto priečinka.",
"ContainsSpecCharacter": "Názov nemôže obsahovať žiadne z nasledujúcich znakov: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "Arhivi",
"BackToParentFolderButton": "Nazaj na starševsko mapo",
"ByAuthor": "Avtor",
"ByCreationDate": "Ustvarjeno",
"ByLastModifiedDate": "Popravljeno",
"ByCreation": "Ustvarjeno",
"ByLastModified": "Popravljeno",
"ByTitle": "Naslov",
"CommonEmptyContainerDescription": "'Skupen' razdelek vsebuje datoteke, ki jih skrbnik portala deli z vsemi uporabniki. Samo skrbniki portala lahko tam ustvarjajo datoteke. Uporabniki lahko dobijo popoln dostop do določene mape v razdelku. Tako bodo lahko ustvarili/naložili datoteke ravno v tej mapi. ",
"ContainsSpecCharacter": "Naslov ne sme vsebovati nobenega od naslednjih znakov: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "Arşivler",
"BackToParentFolderButton": "Üst klasöre geri dön",
"ByAuthor": "Yazar",
"ByCreationDate": "Oluşturuldu",
"ByLastModifiedDate": "Değiştirilmiş",
"ByCreation": "Oluşturuldu",
"ByLastModified": "Değiştirilmiş",
"ByTitle": "Başlık",
"CommonEmptyContainerDescription": "'Ortak' bölüm, portal yöneticisi tarafından tüm kullanıcılarla paylaşılan dosyaları içerir. Burada yalnızca portal yöneticileri dosya oluşturabilir. Bu bölüm içinde kullanıcılara belirli bir klasöre Tam erişim verilebilir. Bu şekilde, bu klasörde dosya oluşturabilecek/yükleyebileceklerdir.",
"ContainsSpecCharacter": "Başlık şu karakterlerden herhangi birini içeremez:: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "Архіви",
"BackToParentFolderButton": "Назад до батьківської папки",
"ByAuthor": "Автор",
"ByCreationDate": "Створено",
"ByLastModifiedDate": "Змінено",
"ByCreation": "Створено",
"ByLastModified": "Змінено",
"ByTitle": "Заголовок",
"CommonEmptyContainerDescription": "Розділ \"Загальне\" містить файли, до яких адміністратор порталу надав доступ усім користувачам. Тільки адміністратори порталу можуть створювати тут файли. Користувачам може бути наданий повний доступ до певної папки в розділі. Це дозволить їм створювати файли в цій папці та передавати їх до неї.",
"ContainsSpecCharacter": "Заголовок не може містити жодного з цих символів: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "Lưu trữ",
"BackToParentFolderButton": "Quay lại thư mục gốc",
"ByAuthor": "Tác giả",
"ByCreationDate": "Đã tạo",
"ByLastModifiedDate": "Đã sửa đổi",
"ByCreation": "Đã tạo",
"ByLastModified": "Đã sửa đổi",
"ByTitle": "Tiêu đề",
"CommonEmptyContainerDescription": "Phần Chung chứa các tệp được quản trị viên cổng thông tin chia sẻ cho tất cả người dùng. Chỉ quản trị viên cổng thông tin mới có thể tạo ệp ở đó. Người dùng có thể được cấp toàn quyền truy cập vào một thư mục nhất định trong phần này. Bằng cách này họ sẽ có thể tạo/tải lên các tệp trong chính thư mục này.",
"ContainsSpecCharacter": "Tiêu đề không được chứa bất kỳ ký tự nào sau đây: *+:\"<>?|/",

View File

@ -4,8 +4,8 @@
"Archives": "归档",
"BackToParentFolderButton": "返回父文件夹",
"ByAuthor": "作者",
"ByCreationDate": "创建日期",
"ByLastModifiedDate": "修改日期",
"ByCreation": "创建日期",
"ByLastModified": "修改日期",
"ByTitle": "标题",
"CommonEmptyContainerDescription": "'Common'部分包含由门户管理员分享给所有用户的文件。仅门户管理员可在此处创建文件。用户将被授予该部分中特定文件夹的完整访问权限。这样其就能在该文件夹中创建/上传文件了。",
"ContainsSpecCharacter": "标题中不得包含任意以下字符:*+:\"<>?|/",

View File

@ -1,7 +1,7 @@
import React, { useEffect } from "react";
import { useHotkeys } from "react-hotkeys-hook";
import { observer, inject } from "mobx-react";
import { Events } from "@docspace/client/src/helpers/filesConstants";
import { Events } from "@docspace/common/constants";
import toastr from "@docspace/components/toast/toastr";
import throttle from "lodash/throttle";

View File

@ -14,7 +14,7 @@ import MobileView from "./MobileView";
import { combineUrl } from "@docspace/common/utils";
import config from "PACKAGE_FILE";
import withLoader from "../../../HOCs/withLoader";
import { Events } from "@docspace/client/src/helpers/filesConstants";
import { Events } from "@docspace/common/constants";
import { getMainButtonItems } from "SRC_DIR/helpers/plugins";
import toastr from "@docspace/components/toast/toastr";

View File

@ -5,7 +5,7 @@ import EmptyFilterContainer from "./EmptyFilterContainer";
import EmptyFolderContainer from "./EmptyFolderContainer";
import { FileAction } from "@docspace/common/constants";
import { isMobile } from "react-device-detect";
import { Events } from "@docspace/client/src/helpers/filesConstants";
import { Events } from "@docspace/common/constants";
const linkStyles = {
isHovered: true,

View File

@ -1,7 +1,7 @@
import React, { useState, useEffect, useCallback, memo } from "react";
import { FileAction } from "@docspace/common/constants";
import { Events } from "@docspace/client/src/helpers/filesConstants";
import { Events } from "@docspace/common/constants";
import CreateEvent from "./CreateEvent";
import RenameEvent from "./RenameEvent";

View File

@ -51,6 +51,16 @@ export const CategoryType = Object.freeze({
Trash: 7,
});
/**
* Enum for table columns version
* @readonly
*/
export const TableVersions = Object.freeze({
Files: "2",
Rooms: "1",
Accounts: "2",
});
export const BINDING_POST = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST";
export const BINDING_REDIRECT =
"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect";

View File

@ -11,17 +11,11 @@ export const thumbnailStatuses = {
export const ADS_TIMEOUT = 300000; // 5 min
export const Events = Object.freeze({
CREATE: "create",
RENAME: "rename",
ROOM_CREATE: "create_room",
ROOM_EDIT: "edit_room",
});
export const FilterGroups = Object.freeze({
filterType: "filter-filterType",
filterAuthor: "filter-author",
filterFolders: "filter-folders",
filterContent: "filter-withContent",
roomFilterType: "filter-type",
roomFilterOwner: "filter-owner",
roomFilterTags: "filter-tags",

View File

@ -11,10 +11,10 @@ import EmptyScreen from "../EmptyScreen";
import TableRow from "./TableRow";
import TableHeader from "./TableHeader";
import { Base } from "@docspace/components/themes";
import { TableVersions } from "SRC_DIR/helpers/constants";
const TABLE_VERSION = "2";
const COLUMNS_SIZE = `peopleColumnsSize_ver-${TABLE_VERSION}`;
const INFO_PANEL_COLUMNS_SIZE = `infoPanelPeopleColumnsSize_ver-${TABLE_VERSION}`;
const COLUMNS_SIZE = `peopleColumnsSize_ver-${TableVersions.Accounts}`;
const INFO_PANEL_COLUMNS_SIZE = `infoPanelPeopleColumnsSize_ver-${TableVersions.Accounts}`;
const marginCss = css`
margin-top: -1px;

View File

@ -320,6 +320,11 @@ const SectionFilterContent = ({
fetchPeople(newFilter).finally(() => setIsLoading(false));
};
const clearAll = () => {
setIsLoading(true);
fetchPeople().finally(() => setIsLoading(false));
};
return isLoaded && tReady ? (
<FilterInput
t={t}
@ -338,6 +343,8 @@ const SectionFilterContent = ({
viewAs={viewAs}
viewSelectorVisible={false}
removeSelectedItem={removeSelectedItem}
isAccounts={true}
clearAll={clearAll}
/>
) : (
<Loaders.Filter />

View File

@ -56,9 +56,7 @@ const SingleItem = (props) => {
<StyledProperties>
<div className="property">
<Text className="property-title">
{t("Files:ByLastModifiedDate")}
</Text>
<Text className="property-title">{t("Files:ByLastModified")}</Text>
<Text className="property-content">
{parseAndFormatDate(selectedItem.attributes.updatedAt)}
</Text>

View File

@ -106,6 +106,8 @@ const SingleItem = (props) => {
case FileType.Presentation:
return t("Home:Presentation");
case FileType.Document:
case FileType.OForm:
case FileType.OFormTemplate:
return t("Home:Document");
default:
return t("Home:Folder");
@ -147,8 +149,8 @@ const SingleItem = (props) => {
content: styledText(itemSize),
},
{
id: "ByLastModifiedDate",
title: t("Files:ByLastModifiedDate"),
id: "ByLastModified",
title: t("Files:ByLastModified"),
content: styledText(parseAndFormatDate(item.updated)),
},
{
@ -162,8 +164,8 @@ const SingleItem = (props) => {
),
},
{
id: "ByCreationDate",
title: t("Files:ByCreationDate"),
id: "ByCreation",
title: t("Files:ByCreation"),
content: styledText(parseAndFormatDate(item.created)),
},
];

View File

@ -8,6 +8,7 @@ import TableBody from "@docspace/components/table-container/TableBody";
import { isMobile } from "react-device-detect";
import styled, { css } from "styled-components";
import { Base } from "@docspace/components/themes";
import { TableVersions } from "SRC_DIR/helpers/constants";
const marginCss = css`
margin-top: -1px;
@ -98,15 +99,13 @@ const StyledTableContainer = styled(TableContainer)`
StyledTableContainer.defaultProps = { theme: Base };
const TABLE_VERSION = "2";
const TABLE_COLUMNS = `filesTableColumns_ver-${TABLE_VERSION}`;
const COLUMNS_SIZE = `filesColumnsSize_ver-${TABLE_VERSION}`;
const COLUMNS_SIZE_INFO_PANEL = `filesColumnsSizeInfoPanel_ver-${TABLE_VERSION}`;
const TABLE_COLUMNS = `filesTableColumns_ver-${TableVersions.Files}`;
const COLUMNS_SIZE = `filesColumnsSize_ver-${TableVersions.Files}`;
const COLUMNS_SIZE_INFO_PANEL = `filesColumnsSizeInfoPanel_ver-${TableVersions.Files}`;
const TABLE_ROOMS_VERSION = "1";
const TABLE_ROOMS_COLUMNS = `roomsTableColumns_ver-${TABLE_ROOMS_VERSION}`;
const COLUMNS_ROOMS_SIZE = `roomsColumnsSize_ver-${TABLE_ROOMS_VERSION}`;
const COLUMNS_ROOMS_SIZE_INFO_PANEL = `roomsColumnsSizeInfoPanel_ver-${TABLE_ROOMS_VERSION}`;
const TABLE_ROOMS_COLUMNS = `roomsTableColumns_ver-${TableVersions.Rooms}`;
const COLUMNS_ROOMS_SIZE = `roomsColumnsSize_ver-${TableVersions.Rooms}`;
const COLUMNS_ROOMS_SIZE_INFO_PANEL = `roomsColumnsSizeInfoPanel_ver-${TableVersions.Rooms}`;
const Table = ({
filesList,

View File

@ -2,6 +2,9 @@ import React from "react";
import TableHeader from "@docspace/components/table-container/TableHeader";
import { inject, observer } from "mobx-react";
import { withTranslation } from "react-i18next";
import { Events } from "@docspace/common/constants";
const WITH_AUTHOR = "withAuthorColumn";
class FilesTableHeader extends React.Component {
constructor(props) {
@ -13,9 +16,16 @@ class FilesTableHeader extends React.Component {
}
getTableColumns = (fromUpdate = false) => {
const { t, personal, tableStorageName, isRooms } = this.props;
const {
t,
personal,
tableStorageName,
isRooms,
isPersonalRoom,
} = this.props;
const defaultColumns = [];
if (isRooms) {
const columns = [
{
@ -57,7 +67,7 @@ class FilesTableHeader extends React.Component {
},
{
key: "Activity",
title: t("ByLastModifiedDate"),
title: t("ByLastModified"),
enable: true,
resizable: true,
sortBy: "DateAndTime",
@ -68,6 +78,22 @@ class FilesTableHeader extends React.Component {
defaultColumns.push(...columns);
} else {
const authorOption = {
key: "Author",
title: t("ByAuthor"),
enable: false,
resizable: true,
sortBy: "Author",
isDisabled: isPersonalRoom,
onClick: this.onFilter,
onChange: this.onColumnChange,
};
if (isPersonalRoom) {
authorOption.defaultSize = 0;
}
const columns = [
{
key: "Name",
@ -79,18 +105,10 @@ class FilesTableHeader extends React.Component {
minWidth: 210,
onClick: this.onFilter,
},
{
key: "Author",
title: t("ByAuthor"),
enable: false,
resizable: true,
sortBy: "Author",
onClick: this.onFilter,
onChange: this.onColumnChange,
},
authorOption,
{
key: "Created",
title: t("ByCreationDate"),
title: t("ByCreation"),
enable: true,
resizable: true,
sortBy: "DateAndTimeCreation",
@ -99,7 +117,7 @@ class FilesTableHeader extends React.Component {
},
{
key: "Modified",
title: t("ByLastModifiedDate"),
title: t("ByLastModified"),
enable: true,
resizable: true,
sortBy: "DateAndTime",
@ -151,12 +169,14 @@ class FilesTableHeader extends React.Component {
columns: columns,
resetColumnsSize: resetColumnsSize,
isRooms: isRooms,
isPersonalRoom: isPersonalRoom,
});
} else {
this.state = {
columns: columns,
resetColumnsSize: resetColumnsSize,
isRooms: isRooms,
isPersonalRoom: isPersonalRoom,
};
}
};
@ -198,6 +218,10 @@ class FilesTableHeader extends React.Component {
return this.getTableColumns(true);
}
if (this.props.isPersonalRoom !== this.state.isPersonalRoom) {
return this.getTableColumns(true);
}
const { columns } = this.state;
if (this.props.withContent !== prevProps.withContent) {
const columnIndex = columns.findIndex((c) => c.key === "Share");
@ -220,6 +244,8 @@ class FilesTableHeader extends React.Component {
this.customScrollElm.removeEventListener("scroll", this.onBeginScroll);
}
getColumns = (defaultColumns, splitColumns) => {
const { isPersonalRoom, isRooms } = this.props;
const columns = [];
if (splitColumns) {
@ -227,6 +253,22 @@ class FilesTableHeader extends React.Component {
const column = splitColumns.find((key) => key === col.key);
column ? (col.enable = true) : (col.enable = false);
if (!isRooms) {
if (column === "Author" && isPersonalRoom) {
col.enable = false;
}
if (col.key === "Author" && !isPersonalRoom) {
if (!col.enable) {
const withAuthor = localStorage.getItem(WITH_AUTHOR);
if (withAuthor === "true") {
col.enable = true;
}
}
}
}
columns.push(col);
}
return columns;
@ -246,6 +288,14 @@ class FilesTableHeader extends React.Component {
const tableColumns = columns.map((c) => c.enable && c.key);
this.setTableColumns(tableColumns);
if (key === "Author") {
localStorage.setItem(WITH_AUTHOR, columns[columnIndex].enable);
}
const event = new Event(Events.CHANGE_COLUMN);
window.dispatchEvent(event);
};
onFilter = (sortBy) => {
@ -361,7 +411,11 @@ export default inject(
roomsFilter,
fetchRooms,
} = filesStore;
const { isPrivacyFolder, isRecentFolder } = treeFoldersStore;
const {
isPrivacyFolder,
isRecentFolder,
isPersonalRoom,
} = treeFoldersStore;
const withContent = canShare || (canShare && isPrivacyFolder && isDesktop);
const sortingVisible = !isRecentFolder;
@ -386,6 +440,8 @@ export default inject(
infoPanelVisible,
withPaging,
isPersonalRoom,
};
}
)(

View File

@ -21,6 +21,8 @@ const TypeCell = ({ t, item, sideColor }) => {
case FileType.Presentation:
return t("Presentation");
case FileType.Document:
case FileType.OForm:
case FileType.OFormTemplate:
return t("Document");
default:

View File

@ -19,6 +19,7 @@ import { withLayoutSize } from "@docspace/common/utils";
import { getDefaultRoomName } from "@docspace/client/src/helpers/filesUtils";
import withLoader from "../../../../HOCs/withLoader";
import { TableVersions } from "SRC_DIR/helpers/constants";
const getFilterType = (filterValues) => {
const filterType = result(
@ -87,16 +88,16 @@ const getOwner = (filterValues) => {
// return filterFolders ? filterFolders : null;
// };
// const getFilterContent = (filterValues) => {
// const filterContent = result(
// find(filterValues, (value) => {
// return value.group === FilterGroups.roomFilterContent;
// }),
// "key"
// );
const getFilterContent = (filterValues) => {
const filterContent = result(
find(filterValues, (value) => {
return value.group === FilterGroups.filterContent;
}),
"key"
);
// return filterContent ? filterContent : null;
// };
return filterContent ? filterContent : null;
};
const getTags = (filterValues) => {
const filterTags = filterValues.find(
@ -108,6 +109,14 @@ const getTags = (filterValues) => {
return tags;
};
const TABLE_COLUMNS = `filesTableColumns_ver-${TableVersions.Files}`;
const COLUMNS_SIZE_INFO_PANEL = `filesColumnsSizeInfoPanel_ver-${TableVersions.Files}`;
const TABLE_ROOMS_COLUMNS = `roomsTableColumns_ver-${TableVersions.Rooms}`;
const COLUMNS_ROOMS_SIZE_INFO_PANEL = `roomsColumnsSizeInfoPanel_ver-${TableVersions.Rooms}`;
const SectionFilterContent = ({
t,
filter,
@ -127,6 +136,7 @@ const SectionFilterContent = ({
infoPanelVisible,
isRooms,
userId,
isPersonalRoom,
setCurrentRoomsFilter,
}) => {
const onFilter = React.useCallback(
@ -181,18 +191,24 @@ const SectionFilterContent = ({
);
} else {
const filterType = getFilterType(data) || null;
const authorType = !!getAuthorType(data)
? getAuthorType(data).includes("user_")
? getAuthorType(data)
: `user_${getAuthorType(data)}`
: null;
const withSubfolders = getSearchParams(data);
const withContent = getFilterContent(data);
const newFilter = filter.clone();
newFilter.page = 0;
newFilter.filterType = filterType;
newFilter.authorType = authorType;
newFilter.withSubfolders = withSubfolders;
newFilter.withSubfolders =
withSubfolders === FilterKeys.excludeSubfolders ? "false" : "true";
newFilter.searchInContent = withContent === "true" ? "true" : null;
setIsLoading(true);
@ -296,7 +312,13 @@ const SectionFilterContent = ({
);
const getSelectedInputValue = React.useCallback(() => {
return isRooms ? roomsFilter.filterValue : filter.search;
return isRooms
? roomsFilter.filterValue
? roomsFilter.filterValue
: ""
: filter.search
? filter.search
: "";
}, [isRooms, roomsFilter.filterValue, filter.search]);
const getSelectedSortData = React.useCallback(() => {
@ -386,10 +408,26 @@ const SectionFilterContent = ({
});
}
} else {
if (filter.withSubfolders === "false") {
filterValues.push({
key: FilterKeys.excludeSubfolders,
label: t("ExcludeSubfolders"),
group: FilterGroups.filterFolders,
});
}
if (filter.searchInContent) {
filterValues.push({
key: "true",
label: t("FileContents"),
group: FilterGroups.filterContent,
});
}
if (filter.filterType) {
let label = "";
switch (filter.filterType) {
switch (filter.filterType.toString()) {
case FilterType.DocumentsOnly.toString():
label = t("Common:Documents");
break;
@ -414,11 +452,17 @@ const SectionFilterContent = ({
case FilterType.FilesOnly.toString():
label = t("AllFiles");
break;
case FilterType.OFormTemplateOnly.toString():
label = t("FormsTemplates");
break;
case FilterType.OFormOnly.toString():
label = t("Forms");
break;
}
filterValues.push({
key: `${filter.filterType}`,
label: label,
label: label.toLowerCase(),
group: FilterGroups.filterType,
});
}
@ -431,14 +475,6 @@ const SectionFilterContent = ({
label: user.displayName,
});
}
if (filter.withSubfolders === "false") {
filterValues.push({
key: filter.withSubfolders,
label: "Exclude subfolders",
group: FilterGroups.filterFolders,
});
}
}
return filterValues;
@ -446,6 +482,7 @@ const SectionFilterContent = ({
filter.withSubfolders,
filter.authorType,
filter.filterType,
filter.searchInContent,
roomsFilter.type,
roomsFilter.subjectId,
roomsFilter.tags,
@ -465,18 +502,7 @@ const SectionFilterContent = ({
{
key: FilterType.FoldersOnly.toString(),
group: FilterGroups.filterType,
label: t("Translations:Folders"),
},
]
: "";
const allFiles =
!isFavoritesFolder && !isRecentFolder
? [
{
key: FilterType.FilesOnly.toString(),
group: FilterGroups.filterType,
label: t("AllFiles"),
label: t("Translations:Folders").toLowerCase(),
},
]
: "";
@ -486,7 +512,7 @@ const SectionFilterContent = ({
{
key: FilterType.ImagesOnly.toString(),
group: FilterGroups.filterType,
label: t("Images"),
label: t("Images").toLowerCase(),
},
]
: "";
@ -496,7 +522,7 @@ const SectionFilterContent = ({
{
key: FilterType.ArchiveOnly.toString(),
group: FilterGroups.filterType,
label: t("Archives"),
label: t("Archives").toLowerCase(),
},
]
: "";
@ -506,7 +532,7 @@ const SectionFilterContent = ({
{
key: FilterType.MediaOnly.toString(),
group: FilterGroups.filterType,
label: t("Media"),
label: t("Media").toLowerCase(),
},
]
: "";
@ -551,27 +577,38 @@ const SectionFilterContent = ({
group: FilterGroups.filterType,
label: t("Common:Type"),
isHeader: true,
},
{
key: FilterType.DocumentsOnly.toString(),
group: FilterGroups.filterType,
label: t("Common:Documents"),
isLast: true,
},
...folders,
{
key: FilterType.SpreadsheetsOnly.toString(),
key: FilterType.DocumentsOnly.toString(),
group: FilterGroups.filterType,
label: t("Translations:Spreadsheets"),
label: t("Common:Documents").toLowerCase(),
},
...archives,
{
key: FilterType.PresentationsOnly.toString(),
group: FilterGroups.filterType,
label: t("Translations:Presentations"),
label: t("Translations:Presentations").toLowerCase(),
},
{
key: FilterType.SpreadsheetsOnly.toString(),
group: FilterGroups.filterType,
label: t("Translations:Spreadsheets").toLowerCase(),
},
{
key: FilterType.OFormTemplateOnly.toString(),
group: FilterGroups.filterType,
label: t("FormsTemplates").toLowerCase(),
},
{
key: FilterType.OFormOnly.toString(),
group: FilterGroups.filterType,
label: t("Forms").toLowerCase(),
},
...archives,
...images,
...media,
...allFiles,
];
const ownerOptions = [
@ -580,6 +617,7 @@ const SectionFilterContent = ({
group: FilterGroups.roomFilterOwner,
label: t("Common:Owner"),
isHeader: true,
withMultiItems: true,
},
{
key: FilterKeys.me,
@ -672,7 +710,49 @@ const SectionFilterContent = ({
filterOptions.push(...tagsOptions);
}
} else {
if (!personal) {
if (!isRecentFolder && !isFavoritesFolder) {
const foldersOptions = [
{
key: FilterGroups.filterFolders,
group: FilterGroups.filterFolders,
label: t("Common:Search"),
isHeader: true,
withoutSeparator: true,
},
{
key: "folders",
group: FilterGroups.filterFolders,
label: "",
withOptions: true,
options: [
{ key: FilterKeys.withSubfolders, label: t("WithSubfolders") },
{
key: FilterKeys.excludeSubfolders,
label: t("ExcludeSubfolders"),
},
],
},
];
const contentOptions = [
{
key: FilterGroups.filterContent,
group: FilterGroups.filterContent,
isHeader: true,
withoutHeader: true,
},
{
key: "true",
group: FilterGroups.filterContent,
label: t("SearchByContent"),
isCheckbox: true,
},
];
filterOptions.push(...foldersOptions);
filterOptions.push(...contentOptions);
}
if (!isPersonalRoom) {
filterOptions.push(
{
key: FilterGroups.filterAuthor,
@ -690,29 +770,10 @@ const SectionFilterContent = ({
}
filterOptions.push(...typeOptions);
if (!isRecentFolder && !isFavoritesFolder) {
filterOptions.push(
{
key: FilterGroups.filterFolders,
group: FilterGroups.filterFolders,
label: t("Translations:Folders"),
isHeader: true,
withoutHeader: true,
isLast: true,
},
{
key: "false",
group: FilterGroups.filterFolders,
label: t("NoSubfolders"),
isToggle: true,
}
);
}
}
return filterOptions;
}, [isFavoritesFolder, isRecentFolder, isRooms, t, personal]);
}, [isFavoritesFolder, isRecentFolder, isRooms, t, personal, isPersonalRoom]);
const getViewSettingsData = React.useCallback(() => {
const viewSettings = [
@ -733,35 +794,132 @@ const SectionFilterContent = ({
}, [createThumbnails]);
const getSortData = React.useCallback(() => {
const commonOptions = isRooms
? [
{ key: "AZ", label: "Name", default: true },
{ key: "roomType", label: t("Common:Type"), default: true },
{ key: "Tags", label: t("Tags"), default: true },
{ key: "Author", label: t("Common:Owner"), default: true },
{ key: "DateAndTime", label: t("ByLastModifiedDate"), default: true },
]
: [
{ key: "AZ", label: t("ByTitle"), default: true },
{ key: "Type", label: t("Common:Type"), default: true },
{ key: "Size", label: t("Common:Size"), default: true },
{
key: "DateAndTimeCreation",
label: t("ByCreationDate"),
default: true,
},
{ key: "DateAndTime", label: t("ByLastModifiedDate"), default: true },
];
const commonOptions = [];
if (!personal && !isRooms) {
commonOptions.splice(1, 0, {
key: "Author",
label: t("ByAuthor"),
default: true,
});
const name = { key: "AZ", label: t("Common:Name"), default: true };
const modifiedDate = {
key: "DateAndTime",
label: t("ByLastModified"),
default: true,
};
const type = { key: "Type", label: t("Common:Type"), default: true };
const size = { key: "Size", label: t("Common:Size"), default: true };
const creationDate = {
key: "DateAndTimeCreation",
label: t("ByCreation"),
default: true,
};
const authorOption = {
key: "Author",
label: t("ByAuthor"),
default: true,
};
const owner = { key: "Author", label: t("Common:Owner"), default: true };
const tags = { key: "Tags", label: t("Tags"), default: true };
const roomType = {
key: "roomType",
label: t("Common:Type"),
default: true,
};
commonOptions.push(name);
if (viewAs === "table") {
if (isRooms) {
const availableSort = localStorage
?.getItem(`${TABLE_ROOMS_COLUMNS}=${userId}`)
?.split(",");
const infoPanelColumnsSize = localStorage
?.getItem(`${COLUMNS_ROOMS_SIZE_INFO_PANEL}=${userId}`)
?.split(" ");
if (availableSort?.includes("Type")) {
const idx = availableSort.findIndex((x) => x === "Type");
const hide = infoPanelVisible && infoPanelColumnsSize[idx] === "0px";
!hide && commonOptions.push(roomType);
}
if (availableSort?.includes("Tags")) {
const idx = availableSort.findIndex((x) => x === "Tags");
const hide = infoPanelVisible && infoPanelColumnsSize[idx] === "0px";
!hide && commonOptions.push(tags);
}
if (availableSort?.includes("Owner")) {
const idx = availableSort.findIndex((x) => x === "Owner");
const hide = infoPanelVisible && infoPanelColumnsSize[idx] === "0px";
!hide && commonOptions.push(owner);
}
if (availableSort?.includes("Activity")) {
const idx = availableSort.findIndex((x) => x === "Activity");
const hide = infoPanelVisible && infoPanelColumnsSize[idx] === "0px";
!hide && commonOptions.push(modifiedDate);
}
} else {
const availableSort = localStorage
?.getItem(`${TABLE_COLUMNS}=${userId}`)
?.split(",");
const infoPanelColumnsSize = localStorage
?.getItem(`${COLUMNS_SIZE_INFO_PANEL}=${userId}`)
?.split(" ");
if (availableSort?.includes("Author") && !isPersonalRoom) {
const idx = availableSort.findIndex((x) => x === "Author");
const hide = infoPanelVisible && infoPanelColumnsSize[idx] === "0px";
!hide && commonOptions.push(authorOption);
}
if (availableSort?.includes("Create")) {
const idx = availableSort.findIndex((x) => x === "Create");
const hide = infoPanelVisible && infoPanelColumnsSize[idx] === "0px";
!hide && commonOptions.push(creationDate);
}
if (availableSort?.includes("Modified")) {
const idx = availableSort.findIndex((x) => x === "Modified");
const hide = infoPanelVisible && infoPanelColumnsSize[idx] === "0px";
!hide && commonOptions.push(modifiedDate);
}
if (availableSort?.includes("Size")) {
const idx = availableSort.findIndex((x) => x === "Size");
const hide = infoPanelVisible && infoPanelColumnsSize[idx] === "0px";
!hide && commonOptions.push(size);
}
if (availableSort?.includes("Type")) {
const idx = availableSort.findIndex((x) => x === "Type");
const hide = infoPanelVisible && infoPanelColumnsSize[idx] === "0px";
!hide && commonOptions.push(type);
}
}
} else {
if (isRooms) {
commonOptions.push(roomType);
commonOptions.push(tags);
commonOptions.push(owner);
commonOptions.push(modifiedDate);
} else {
commonOptions.push(authorOption);
commonOptions.push(creationDate);
commonOptions.push(modifiedDate);
commonOptions.push(size);
commonOptions.push(type);
}
}
return commonOptions;
}, [personal, isRooms, t]);
}, [personal, isRooms, t, userId, infoPanelVisible, viewAs, isPersonalRoom]);
const removeSelectedItem = React.useCallback(
({ key, group }) => {
@ -820,7 +978,10 @@ const SectionFilterContent = ({
newFilter.authorType = null;
}
if (group === FilterGroups.filterFolders) {
newFilter.withSubfolders = null;
newFilter.withSubfolders = "true";
}
if (group === FilterGroups.filterContent) {
newFilter.searchInContent = null;
}
newFilter.page = 0;
@ -842,6 +1003,18 @@ const SectionFilterContent = ({
]
);
const clearAll = () => {
if (isRooms) {
setIsLoading(true);
fetchRooms(selectedFolderId).finally(() => setIsLoading(false));
} else {
setIsLoading(true);
fetchFiles(selectedFolderId).finally(() => setIsLoading(false));
}
};
return (
<FilterInput
t={t}
@ -862,7 +1035,10 @@ const SectionFilterContent = ({
view={t("Common:View")}
isFavoritesFolder={isFavoritesFolder}
isRecentFolder={isRecentFolder}
isPersonalRoom={isPersonalRoom}
isRooms={isRooms}
removeSelectedItem={removeSelectedItem}
clearAll={clearAll}
/>
);
};
@ -890,6 +1066,7 @@ export default inject(
isRecentFolder,
isRoomsFolder,
isArchiveFolder,
isPersonalRoom,
} = treeFoldersStore;
const isRooms = isRoomsFolder || isArchiveFolder;
@ -918,6 +1095,7 @@ export default inject(
createThumbnails,
personal,
isPersonalRoom,
infoPanelVisible,
setCurrentRoomsFilter,
};

View File

@ -18,7 +18,7 @@ import { Consumer } from "@docspace/components/utils/context";
import { inject, observer } from "mobx-react";
import TableGroupMenu from "@docspace/components/table-container/TableGroupMenu";
import Navigation from "@docspace/common/components/Navigation";
import { Events } from "@docspace/client/src/helpers/filesConstants";
import { Events } from "@docspace/common/constants";
import config from "PACKAGE_FILE";
import { combineUrl } from "@docspace/common/utils";
import RoomsFilter from "@docspace/common/api/rooms/filter";

View File

@ -29,7 +29,7 @@ import DragTooltip from "../../components/DragTooltip";
import { observer, inject } from "mobx-react";
//import config from "PACKAGE_FILE";
import { Consumer } from "@docspace/components/utils/context";
import { Events } from "@docspace/client/src/helpers/filesConstants";
import { Events } from "@docspace/common/constants";
import RoomsFilter from "@docspace/common/api/rooms/filter";
import { getCategoryType } from "SRC_DIR/helpers/utils";
import { CategoryType } from "SRC_DIR/helpers/constants";

View File

@ -10,7 +10,7 @@ import {
isMobile as isMobileUtils,
isTablet as isTabletUtils,
} from "@docspace/components/utils/device";
import { Events } from "@docspace/client/src/helpers/filesConstants";
import { Events } from "@docspace/common/constants";
import { getContextMenuItems } from "SRC_DIR/helpers/plugins";
class ContextOptionsStore {

View File

@ -1,7 +1,7 @@
import { getNewFiles } from "@docspace/common/api/files";
import { FileAction } from "@docspace/common/constants";
import { makeAutoObservable } from "mobx";
import { Events } from "@docspace/client/src/helpers/filesConstants";
import { Events } from "@docspace/common/constants";
class DialogsStore {
authStore;

View File

@ -134,6 +134,10 @@ class TreeFoldersStore {
return this.archiveFolder ? this.archiveFolder.id : null;
}
get isPersonalRoom() {
return this.myFolder && this.myFolder.id === this.selectedFolderStore.id;
}
get isShareFolder() {
return (
this.shareFolder && this.shareFolder.id === this.selectedFolderStore.id

View File

@ -13,6 +13,7 @@ const DEFAULT_SEARCH = null;
const DEFAULT_AUTHOR_TYPE = null;
const DEFAULT_SELECTED_ITEM = {};
const DEFAULT_FOLDER = "@my";
const DEFAULT_SEARCH_IN_CONTENT = null;
const SEARCH_TYPE = "withSubfolders";
const AUTHOR_TYPE = "authorType";
@ -25,11 +26,11 @@ const PAGE = "page";
const PAGE_COUNT = "count";
const FOLDER = "folder";
const PREVIEW = "preview";
const SEARCH_IN_CONTENT = "searchInContent";
// TODO: add next params
// subjectGroup bool
// subjectID
// searchInContent bool
class FilesFilter {
static getDefault(total = DEFAULT_TOTAL) {
@ -66,6 +67,8 @@ class FilesFilter {
(urlFilter[PAGE_COUNT] && +urlFilter[PAGE_COUNT]) ||
defaultFilter.pageCount;
const folder = urlFilter[FOLDER] || defaultFilter.folder;
const searchInContent =
urlFilter[SEARCH_IN_CONTENT] || defaultFilter.searchInContent;
const newFilter = new FilesFilter(
page,
@ -79,7 +82,8 @@ class FilesFilter {
search,
authorType,
defaultFilter.selectedItem,
folder
folder,
searchInContent
);
return newFilter;
@ -97,7 +101,8 @@ class FilesFilter {
search = DEFAULT_SEARCH,
authorType = DEFAULT_AUTHOR_TYPE,
selectedItem = DEFAULT_SELECTED_ITEM,
folder = DEFAULT_FOLDER
folder = DEFAULT_FOLDER,
searchInContent = DEFAULT_SEARCH_IN_CONTENT
) {
this.page = page;
this.pageCount = pageCount;
@ -111,6 +116,7 @@ class FilesFilter {
this.authorType = authorType;
this.selectedItem = selectedItem;
this.folder = folder;
this.searchInContent = searchInContent;
}
getStartIndex = () => {
@ -136,6 +142,7 @@ class FilesFilter {
sortOrder,
withSubfolders,
startIndex,
searchInContent,
} = this;
const isFilterSet =
@ -157,6 +164,7 @@ class FilesFilter {
filterValue: (search ?? "").trim(),
withSubfolders: isFilterSet,
userIdOrGroupId,
searchInContent,
};
const str = toUrlParams(dtoFilter, true);
@ -174,6 +182,7 @@ class FilesFilter {
sortBy,
sortOrder,
withSubfolders,
searchInContent,
} = this;
const dtoFilter = {};
@ -206,6 +215,10 @@ class FilesFilter {
dtoFilter[PREVIEW] = URLParams.preview;
}
if (searchInContent) {
dtoFilter[SEARCH_IN_CONTENT] = searchInContent;
}
dtoFilter[PAGE] = page + 1;
dtoFilter[SORT_BY] = sortBy;
dtoFilter[SORT_ORDER] = sortOrder;
@ -231,7 +244,8 @@ class FilesFilter {
this.search,
this.authorType,
this.selectedItem,
this.folder
this.folder,
this.searchInContent
);
}
@ -247,7 +261,8 @@ class FilesFilter {
this.page === filter.page &&
this.selectedItem.key === filter.selectedItem.key &&
this.folder === filter.folder &&
this.pageCount === filter.pageCount;
this.pageCount === filter.pageCount &&
this.searchInContent === filter.searchInContent;
return equals;
}

View File

@ -35,6 +35,10 @@ const StyledFilterInput = styled.div`
flex-wrap: wrap;
margin-bottom: 8px;
.clear-all-link {
margin-left: 12px;
}
}
`;

View File

@ -7,6 +7,7 @@ import {
} from "@docspace/components/utils/device";
import ViewSelector from "@docspace/components/view-selector";
import Link from "@docspace/components/link";
import FilterButton from "./sub-components/FilterButton";
import SortButton from "./sub-components/SortButton";
@ -34,9 +35,14 @@ const FilterInput = React.memo(
filterHeader,
selectorLabel,
clearAll,
isRecentFolder,
removeSelectedItem,
isPersonalRoom,
isRooms,
isAccounts,
}) => {
const [viewSettings, setViewSettings] = React.useState([]);
const [inputValue, setInputValue] = React.useState("");
@ -52,7 +58,7 @@ const FilterInput = React.memo(
React.useEffect(() => {
const value = getSelectedInputValue && getSelectedInputValue();
if (value) setInputValue(value);
setInputValue(value);
}, [getSelectedInputValue]);
React.useEffect(() => {
@ -116,6 +122,9 @@ const FilterInput = React.memo(
selectedFilterValue={selectedFilterValue}
filterHeader={filterHeader}
selectorLabel={selectorLabel}
isPersonalRoom={isPersonalRoom}
isRooms={isRooms}
isAccounts={isAccounts}
/>
{!isRecentFolder && (
<SortButton
@ -159,6 +168,18 @@ const FilterInput = React.memo(
removeSelectedItem={removeSelectedItemAction}
/>
))}
{selectedItems.length > 1 && (
<Link
className={"clear-all-link"}
isHovered
fontWeight={600}
isSemitransparent
type="action"
onClick={clearAll}
>
{t("Common:ClearAll")}
</Link>
)}
</div>
)}
</StyledFilterInput>

View File

@ -31,6 +31,9 @@ const FilterBlock = ({
hideFilterBlock,
onFilter,
selectorLabel,
isPersonalRoom,
isRooms,
isAccounts,
}) => {
const [showSelector, setShowSelector] = React.useState({
show: false,
@ -74,14 +77,22 @@ const FilterBlock = ({
if (groupItem.isMultiSelect) {
groupItem.isSelected = currentFilter.key.includes(groupItem.key);
}
if (groupItem.withOptions) {
groupItem.isSelected = currentFilter.key.includes(groupItem.key);
}
});
} else {
item.groupItem.forEach((groupItem) => {
item.groupItem.forEach((groupItem, idx) => {
groupItem.isSelected = false;
if (groupItem.isSelector) {
groupItem.selectedKey = null;
groupItem.selectedLabel = null;
}
if (groupItem.withOptions) {
item.groupItem[idx].options.forEach((x, index) => {
item.groupItem[idx].options[index].isSelected = false;
});
}
});
}
});
@ -244,7 +255,7 @@ const FilterBlock = ({
setTimeout(() => {
setIsLoading(false);
}, 300);
}, 500);
}, []);
React.useEffect(() => {
@ -363,19 +374,25 @@ const FilterBlock = ({
<StyledFilterBlock showFooter={showFooter}>
<StyledFilterBlockHeader>
<Heading size="medium">{filterHeader}</Heading>
<IconButton
iconName="/static/images/clear.react.svg"
isFill={true}
onClick={onClearFilter}
size={17}
/>
{showFooter && (
<IconButton
iconName="/static/images/clear.react.svg"
isFill={true}
onClick={onClearFilter}
size={17}
/>
)}
</StyledFilterBlockHeader>
<div className="filter-body">
{isLoading ? (
<Loaders.FilterBlock />
<Loaders.FilterBlock
isPersonalRoom={isPersonalRoom}
isRooms={isRooms}
isAccounts={isAccounts}
/>
) : (
<Scrollbar className="filter-body__scrollbar" stype="mediumBlack">
{filterData.map((item) => {
{filterData.map((item, index) => {
return (
<FilterBlockItem
key={item.key}
@ -384,10 +401,12 @@ const FilterBlock = ({
group={item.group}
groupItem={item.groupItem}
isLast={item.isLast}
isFirst={index === 0}
withoutHeader={item.withoutHeader}
withoutSeparator={item.withoutSeparator}
changeFilterValue={changeFilterValue}
showSelector={changeShowSelector}
withMultiItems={item.withMultiItems}
/>
);
})}
@ -399,10 +418,16 @@ const FilterBlock = ({
<Button
size="normal"
primary={true}
label={t("AddFilter")}
label={t("ApplyButton")}
scale={true}
onClick={onFilterAction}
/>
<Button
size="normal"
label={t("CancelButton")}
scale={true}
onClick={hideFilterBlock}
/>
</StyledFilterBlockFooter>
)}

View File

@ -34,6 +34,8 @@ const FilterBlockItem = ({
withoutSeparator,
changeFilterValue,
showSelector,
isFirst,
withMultiItems,
}) => {
const changeFilterValueAction = (
key,
@ -129,24 +131,29 @@ const FilterBlockItem = ({
};
const getWithOptionsItem = (item) => {
const selectedOption = item.options.find((option) => option.isSelected);
const selectedOption =
item.options.find((option) => option.isSelected) || item.options[0];
return (
<ComboBox
className={"combo-item"}
key={item.key}
onSelect={(data) =>
changeFilterValueAction(
data.key,
data.key === selectedOption?.key,
data.key === item.options[0].key,
false,
item.withOptions
)
}
options={item.options}
selectedOption={selectedOption ? selectedOption : item.options[0]}
selectedOption={selectedOption}
displaySelectedOption={true}
scaled={true}
scaledOptions={true}
isDefaultMode={false}
directionY={"bottom"}
fixedDirection
/>
);
};
@ -187,14 +194,18 @@ const FilterBlockItem = ({
};
return (
<StyledFilterBlockItem withoutHeader={withoutHeader}>
<StyledFilterBlockItem isFirst={isFirst} withoutHeader={withoutHeader}>
{!withoutHeader && (
<StyledFilterBlockItemHeader>
<Heading size="xsmall">{label}</Heading>
</StyledFilterBlockItemHeader>
)}
<StyledFilterBlockItemContent withoutHeader={withoutHeader}>
<StyledFilterBlockItemContent
withMultiItems={withMultiItems}
withoutHeader={withoutHeader}
withoutSeparator={withoutSeparator}
>
{groupItem.map((item) => {
if (item.isSelector === true) return getSelectorItem(item);
if (item.isToggle === true) return getToggleItem(item);

View File

@ -17,6 +17,10 @@ const FilterButton = ({
filterHeader,
selectorLabel,
isPersonalRoom,
isRooms,
isAccounts,
}) => {
const [showFilterBlock, setShowFilterBlock] = React.useState(false);
@ -42,6 +46,9 @@ const FilterButton = ({
getFilterData={getFilterData}
onFilter={onFilter}
selectorLabel={selectorLabel}
isPersonalRoom={isPersonalRoom}
isRooms={isRooms}
isAccounts={isAccounts}
/>
)}
</>

View File

@ -14,6 +14,7 @@ import { Base } from "@docspace/components/themes";
import SortDesc from "../../../../../public/images/sort.desc.react.svg";
import Backdrop from "@docspace/components/backdrop";
import { Events } from "@docspace/common/constants";
const selectedViewIcon = css`
svg {
@ -191,7 +192,7 @@ const SortButton = ({
sortId: null,
});
React.useEffect(() => {
const getSortDataAction = React.useCallback(() => {
const value = getSortData && getSortData();
const selectedValue = getSelectedSortData && getSelectedSortData();
@ -212,7 +213,15 @@ const SortButton = ({
sortDirection: selectedValue.sortDirection,
sortId: selectedValue.sortId,
});
}, [getSortData, getSelectedSortData]);
}, [getSortData, getSelectedSortData, viewAs]);
React.useEffect(() => {
window.addEventListener(Events.CHANGE_COLUMN, getSortDataAction);
getSortDataAction();
return () =>
window.removeEventListener(Events.CHANGE_COLUMN, getSortDataAction);
}, [getSortDataAction]);
const toggleCombobox = React.useCallback(() => {
setIsOpen((val) => !val);

View File

@ -51,6 +51,16 @@ const StyledFilterBlock = styled.div`
.filter-body {
height: ${(props) => (props.showFooter ? "calc(100% - 125px)" : "100%")};
.combo-button {
justify-content: space-between;
.combo-button-label {
font-size: 13px;
font-weight: 400;
line-height: 20px;
}
}
}
`;
@ -72,6 +82,10 @@ const StyledFilterBlockHeader = styled.div`
align-items: center;
justify-content: ${(props) => (props.isSelector ? "start" : "space-between")};
h1 {
font-weight: 700;
}
.arrow-button {
margin-right: 12px;
}
@ -84,8 +98,9 @@ const StyledFilterBlockHeader = styled.div`
StyledFilterBlockHeader.defaultProps = { theme: Base };
const StyledFilterBlockItem = styled.div`
padding: ${(props) =>
!props.withoutHeader ? "12px 16px 0px 16px" : "6px 16px 0px 16px"};
margin: ${(props) =>
props.withoutHeader ? "0" : props.isFirst ? "12px 0 0 0" : "16px 0 0 0"};
padding: 0 15px 0 16px;
display: flex;
flex-direction: column;
@ -102,8 +117,8 @@ const StyledFilterBlockItemHeader = styled.div`
`;
const StyledFilterBlockItemContent = styled.div`
margin-top: ${(props) => !props.withoutHeader && "12px"};
margin-right: -16px;
margin: ${(props) =>
props.withoutSeparator ? "12px -16px 0 0" : "12px -16px 16px 0"};
height: fit-content;
@ -111,6 +126,8 @@ const StyledFilterBlockItemContent = styled.div`
flex-direction: row;
align-items: center;
flex-wrap: wrap;
gap: ${(props) => (props.withMultiItems ? "12px 8px" : "8px")};
`;
const StyledFilterBlockItemSelector = styled.div`
@ -120,8 +137,6 @@ const StyledFilterBlockItemSelector = styled.div`
display: flex;
flex-direction: row;
align-items: center;
margin: 0 0 11px;
`;
const StyledFilterBlockItemSelectorText = styled(Text)`
@ -143,8 +158,8 @@ const selectedItemTag = css`
`;
const StyledFilterBlockItemTag = styled.div`
height: 30px;
max-height: 30px;
height: 28px;
max-height: 28px;
display: flex;
flex-direction: row;
@ -157,8 +172,6 @@ const StyledFilterBlockItemTag = styled.div`
padding: 4px 15px;
margin: 0 6px 12px 0;
cursor: pointer;
${(props) => props.isSelected && selectedItemTag}
@ -170,12 +183,13 @@ StyledFilterBlockItemTag.defaultProps = { theme: Base };
const selectedItemTagText = css`
color: ${(props) => props.theme.filterInput.filter.selectedItem.color};
font-weight: 600;
`;
const StyledFilterBlockItemTagText = styled(Text)`
height: 20px;
font-weight: normal;
font-weight: 400;
font-size: 13px;
line-height: 20px;
@ -222,7 +236,13 @@ const StyledFilterBlockItemToggleButton = styled(ToggleButton)`
grid-gap: 0px;
`;
const StyledFilterBlockItemCheckboxContainer = styled.div`
margin: 7px 0 11px;
.checkbox {
margin-right: 8px !important;
}
.checkbox-text {
line-height: 20px;
}
`;
const StyledFilterBlockItemSeparator = styled.div`
@ -232,8 +252,6 @@ const StyledFilterBlockItemSeparator = styled.div`
margin-right: 16px;
background: ${(props) => props.theme.filterInput.filter.separatorColor};
margin: 2px 0 0 0;
`;
StyledFilterBlockItemToggleButton.defaultProps = { theme: Base };
@ -256,6 +274,8 @@ const StyledFilterBlockFooter = styled.div`
padding: 0 16px;
margin: 0;
gap: 10px;
display: flex;
align-items: center;
justify-content: center;

View File

@ -1,7 +1,5 @@
import styled, { css } from "styled-components";
import RectangleLoader from "../RectangleLoader";
const StyledContainer = styled.div`
width: 100%;
height: 100%;
@ -12,28 +10,33 @@ const StyledContainer = styled.div`
`;
const StyledBlock = styled.div`
padding: 12px 0 6px;
padding: 12px 0 16px;
margin-bottom: 6px;
margin-bottom: 4px;
width: 100%;
height: auto;
display: flex;
flex-direction: column;
border-bottom: 1px solid #eceef1;
gap: 12px 8px;
box-sizing: border-box;
${(props) =>
!props.isLast &&
css`
border-bottom: 1px solid #eceef1;
`}
.row-loader {
display: flex;
align-items: center;
}
flex-wrap: wrap;
.loader-item {
margin-bottom: 12px;
margin-right: 8px;
gap: 8px;
}
`;

View File

@ -4,76 +4,158 @@ import RectangleLoader from "../RectangleLoader";
import { StyledBlock, StyledContainer } from "./StyledFilterBlockLoader";
const FilterBlockLoader = ({ id, className, style, ...rest }) => {
const FilterBlockLoader = ({
id,
className,
style,
isPersonalRoom,
isRooms,
isAccounts,
...rest
}) => {
return (
<StyledContainer id={id} className={className} style={style} {...rest}>
{/* <StyledBlock>
<RectangleLoader
width={"50"}
height={"16"}
borderRadius={"3"}
className={"loader-item"}
/>
<RectangleLoader
width={"448"}
height={"32"}
borderRadius={"3"}
className={"loader-item"}
/>
<div className="row-loader">
{!isRooms && !isAccounts && (
<StyledBlock>
<RectangleLoader
width={"16"}
width={"50"}
height={"16"}
borderRadius={"3"}
className={"loader-item"}
/>
<RectangleLoader
width={"137"}
height={"20"}
borderRadius={"3"}
className={"loader-item"}
/>
</div>
</StyledBlock> */}
<StyledBlock>
<RectangleLoader
width={"50"}
height={"16"}
borderRadius={"3"}
className={"loader-item"}
/>
<div className="row-loader">
<RectangleLoader
width={"49"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
<RectangleLoader
width={"67"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
</div>
<div className="row-loader">
<RectangleLoader
width={"32"}
width={"100%"}
height={"32"}
borderRadius={"6"}
borderRadius={"3"}
className={"loader-item"}
/>
<div className="row-loader">
<RectangleLoader
width={"16"}
height={"16"}
borderRadius={"3"}
className={"loader-item"}
/>
<RectangleLoader
width={"137"}
height={"20"}
borderRadius={"3"}
className={"loader-item"}
/>
</div>
</StyledBlock>
)}
{!isPersonalRoom && !isAccounts && (
<StyledBlock>
<RectangleLoader
width={"76"}
width={"51"}
height={"16"}
borderRadius={"3"}
className={"loader-item"}
/>
</div>
</StyledBlock>
<div className="row-loader">
<RectangleLoader
width={"49"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
<RectangleLoader
width={"76"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
</div>
<div className="row-loader">
<RectangleLoader
width={"32"}
height={"32"}
borderRadius={"6"}
className={"loader-item"}
/>
<RectangleLoader
width={"103"}
height={"16"}
borderRadius={"3"}
className={"loader-item"}
/>
</div>
</StyledBlock>
)}
<StyledBlock>
{(isRooms || isAccounts) && (
<StyledBlock>
<RectangleLoader
width={"50"}
height={"16"}
borderRadius={"3"}
className={"loader-item"}
/>
<div className="row-loader">
{isAccounts ? (
<>
<RectangleLoader
width={"67"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"80"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"83"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
</>
) : isRooms ? (
<>
<RectangleLoader
width={"77"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"98"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"112"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"73"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"89"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
</>
) : (
<></>
)}
</div>
</StyledBlock>
)}
<StyledBlock isLast>
<RectangleLoader
width={"50"}
height={"16"}
@ -81,90 +163,125 @@ const FilterBlockLoader = ({ id, className, style, ...rest }) => {
className={"loader-item"}
/>
<div className="row-loader">
<RectangleLoader
width={"79"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
<RectangleLoader
width={"79"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
<RectangleLoader
width={"79"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
<RectangleLoader
width={"79"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
<RectangleLoader
width={"79"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
{isAccounts ? (
<>
<RectangleLoader
width={"114"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"84"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"59"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
</>
) : isRooms ? (
<>
<RectangleLoader
width={"67"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"73"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"67"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"74"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"65"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"72"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
</>
) : (
<>
<RectangleLoader
width={"73"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"99"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"114"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"112"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"130"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"66"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"81"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"74"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
<RectangleLoader
width={"68"}
height={"28"}
borderRadius={"16"}
className={"loader-item tag-item"}
/>
</>
)}
</div>
<RectangleLoader
width={"79"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
</StyledBlock>
<StyledBlock>
<RectangleLoader
width={"50"}
height={"16"}
borderRadius={"3"}
className={"loader-item"}
/>
<div className="row-loader">
<RectangleLoader
width={"79"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
<RectangleLoader
width={"79"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
<RectangleLoader
width={"79"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
<RectangleLoader
width={"79"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
<RectangleLoader
width={"79"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
</div>
<RectangleLoader
width={"79"}
height={"28"}
borderRadius={"16"}
className={"loader-item"}
/>
</StyledBlock>
</StyledContainer>
);

View File

@ -45,6 +45,8 @@ export const FilterType = Object.freeze({
ArchiveOnly: 10,
ByExtension: 11,
MediaOnly: 12,
OFormTemplateOnly: 18,
OFormOnly: 19,
});
/**
* Enum for file type.
@ -59,6 +61,8 @@ export const FileType = Object.freeze({
Spreadsheet: 5,
Presentation: 6,
Document: 7,
OFormTemplate: 8,
OForm: 9,
});
/**
* Enum for room type.
@ -244,3 +248,15 @@ export const ThemeKeys = Object.freeze({
System: "2",
SystemStr: "System",
});
/**
* Enum for global events.
* @readonly
*/
export const Events = Object.freeze({
CREATE: "create",
RENAME: "rename",
ROOM_CREATE: "create_room",
ROOM_EDIT: "edit_room",
CHANGE_COLUMN: "change_column",
});

View File

@ -1,4 +1,5 @@
import { makeAutoObservable } from "mobx";
import { Events } from "@docspace/common/constants";
class InfoPanelStore {
isVisible = false;
@ -9,14 +10,24 @@ class InfoPanelStore {
toggleIsVisible = () => {
this.isVisible = !this.isVisible;
const event = new Event(Events.CHANGE_COLUMN);
window.dispatchEvent(event);
};
setVisible = () => {
this.isVisible = true;
const event = new Event(Events.CHANGE_COLUMN);
window.dispatchEvent(event);
};
setIsVisible = (bool) => {
this.isVisible = bool;
const event = new Event(Events.CHANGE_COLUMN);
window.dispatchEvent(event);
};
}

View File

@ -43,6 +43,8 @@ const TableSettings = ({ columns, infoPanelVisible }) => {
withBackdrop={false}
>
{columns.map((column) => {
if (column.isDisabled) return;
const onChange = (e) =>
column.onChange && column.onChange(column.key, e);

View File

@ -10,6 +10,7 @@
"AddUsers": "Add users",
"AdminSettings": "Admin",
"Alert": "Alert",
"ApplyButton": "Apply",
"Archive": "Archive",
"Attention": "Attention",
"Audio": "Audio",
@ -19,6 +20,7 @@
"ByLastNameSorting": "By last name",
"CancelButton": "Cancel",
"ClearButton": "Reset filter",
"ClearAll": "Clear all",
"ClearFilter": "Clear search",
"CloseButton": "Close",
"Color": "Color",