diff --git a/web/src/components/MemoActionMenu.tsx b/web/src/components/MemoActionMenu.tsx index 86aaec46..cf9ae874 100644 --- a/web/src/components/MemoActionMenu.tsx +++ b/web/src/components/MemoActionMenu.tsx @@ -10,19 +10,22 @@ import { Edit3Icon, MoreVerticalIcon, TrashIcon, + SquareCheckIcon, } from "lucide-react"; import toast from "react-hot-toast"; import { useLocation } from "react-router-dom"; +import { markdownServiceClient } from "@/grpcweb"; import useNavigateTo from "@/hooks/useNavigateTo"; import { useMemoStore } from "@/store/v1"; import { RowStatus } from "@/types/proto/api/v1/common"; +import { NodeType } from "@/types/proto/api/v1/markdown_service"; import { Memo } from "@/types/proto/api/v1/memo_service"; import { useTranslate } from "@/utils/i18n"; interface Props { memo: Memo; className?: string; - hiddenActions?: ("edit" | "archive" | "delete" | "share" | "pin")[]; + hiddenActions?: ("edit" | "archive" | "delete" | "share" | "pin" | "remove_completed_task_list")[]; onEdit?: () => void; } @@ -113,6 +116,42 @@ const MemoActionMenu = (props: Props) => { } }; + const handleRemoveCompletedTaskListItemsClick = async () => { + const confirmed = window.confirm(t("memo.remove-completed-task-list-items-confirm")); + if (confirmed) { + const newNodes = JSON.parse(JSON.stringify(memo.nodes)); + for (let i = 0; i < newNodes.length; i++) { + if (newNodes[i].type === NodeType.LIST && newNodes[i].listNode?.children?.length > 0) { + let childrenLength = newNodes[i].listNode.children.length; + for (let j = 0; j < childrenLength; j++) { + if ( + newNodes[i].listNode.children[j].type === NodeType.TASK_LIST_ITEM && + newNodes[i].listNode.children[j].taskListItemNode?.complete + ) { + // Remove completed taskList item and next line breaks + newNodes[i].listNode.children.splice(j, 1); + if (newNodes[i].listNode.children[j]?.type === NodeType.LINE_BREAK) { + newNodes[i].listNode.children.splice(j, 1); + childrenLength--; + } + childrenLength--; + j--; + } + } + } + } + const { markdown } = await markdownServiceClient.restoreMarkdownNodes({ nodes: newNodes }); + await memoStore.updateMemo( + { + name: memo.name, + content: markdown, + }, + ["content"], + ); + toast.success(t("message.remove-completed-task-list-items-successfully")); + } + }; + return ( @@ -143,6 +182,12 @@ const MemoActionMenu = (props: Props) => { {memo.rowStatus === RowStatus.ARCHIVED ? : } {memo.rowStatus === RowStatus.ARCHIVED ? t("common.restore") : t("common.archive")} + {!hiddenActions?.includes("remove_completed_task_list") && ( + + + {t("memo.remove-completed-task-list-items")} + + )} {t("common.delete")} diff --git a/web/src/components/MemoView.tsx b/web/src/components/MemoView.tsx index f03ef0fc..840e097b 100644 --- a/web/src/components/MemoView.tsx +++ b/web/src/components/MemoView.tsx @@ -7,6 +7,7 @@ import useAsyncEffect from "@/hooks/useAsyncEffect"; import useCurrentUser from "@/hooks/useCurrentUser"; import useNavigateTo from "@/hooks/useNavigateTo"; import { useUserStore, useWorkspaceSettingStore, useMemoStore } from "@/store/v1"; +import { NodeType } from "@/types/proto/api/v1/markdown_service"; import { MemoRelation_Type } from "@/types/proto/api/v1/memo_relation_service"; import { Memo, Visibility } from "@/types/proto/api/v1/memo_service"; import { WorkspaceMemoRelatedSetting } from "@/types/proto/api/v1/workspace_setting_service"; @@ -115,6 +116,36 @@ const MemoView: React.FC = (props: Props) => { ); + const handleHiddenActions = () => { + const hiddenActions: ("edit" | "archive" | "delete" | "share" | "pin" | "remove_completed_task_list")[] = []; + if (!props.showPinned) { + hiddenActions.push("pin"); + } + // check if the content has done tasks + let hasCompletedTaskList = false; + const newNodes = JSON.parse(JSON.stringify(memo.nodes)); + for (let i = 0; i < newNodes.length; i++) { + if (hasCompletedTaskList) { + break; + } + if (newNodes[i].type === NodeType.LIST && newNodes[i].listNode?.children?.length > 0) { + for (let j = 0; j < newNodes[i].listNode.children.length; j++) { + if ( + newNodes[i].listNode.children[j].type === NodeType.TASK_LIST_ITEM && + newNodes[i].listNode.children[j].taskListItemNode?.complete + ) { + hasCompletedTaskList = true; + break; + } + } + } + } + if (!hasCompletedTaskList) { + hiddenActions.push("remove_completed_task_list"); + } + return hiddenActions; + }; + return (
= (props: Props) => { )} {!readonly && ( - setShowEditor(true)} - /> + setShowEditor(true)} /> )}
diff --git a/web/src/locales/ar.json b/web/src/locales/ar.json index 108ac4ed..1ed6cbeb 100644 --- a/web/src/locales/ar.json +++ b/web/src/locales/ar.json @@ -88,7 +88,9 @@ "private": "خاص", "protected": "مساحة عمل", "public": "عام" - } + }, + "remove-completed-task-list-items": "إزالة المنجز", + "remove-completed-task-list-items-confirm": "هل أنت متأكد أنك تريد إزالة جميع المهام المنجزة؟ (هذه العملية لا يمكن التراجع عنها)" }, "resource": { "clear": "مسح", diff --git a/web/src/locales/de.json b/web/src/locales/de.json index 0d230094..6eba76ea 100644 --- a/web/src/locales/de.json +++ b/web/src/locales/de.json @@ -97,7 +97,9 @@ "private": "Nur für dich sichtbar", "protected": "Mitglieder", "public": "Öffentlich" - } + }, + "remove-completed-task-list-items": "Erledigt entfernen", + "remove-completed-task-list-items-confirm": "Sind Sie sicher, dass Sie alle abgeschlossenen Aufgaben entfernen möchten? (Diese Aktion kann nicht rückgängig gemacht werden)" }, "message": { "change-memo-created-time": "Erstellungszeitpunkt ändern", @@ -112,7 +114,8 @@ "restored-successfully": "Erfolgreich wiederhergestellt", "succeed-copy-link": "Link erfolgreich kopiert", "update-succeed": "Update erfolgreich", - "user-not-found": "Nutzer nicht gefunden" + "user-not-found": "Nutzer nicht gefunden", + "remove-completed-task-list-items-successfully": "Erfolgreich entfernt!" }, "resource": { "clear": "Löschen", @@ -263,7 +266,8 @@ "enable-password-login-warning": "Dadurch wird die Passwortanmeldung für alle Benutzer aktiviert. Fahre nur fort, wenn du möchtest, dass sich Benutzer sowohl mit SSO als auch mit einem Passwort anmelden können", "max-upload-size": "Maximale Uploadgröße (MiB)", "max-upload-size-hint": "Empfohlene Wert ist 32 MiB.", - "server-name": "Servername" + "server-name": "Servername", + "removed-completed-task-list-items": "Entfernen abgeschlossen aktivieren" } }, "tag": { diff --git a/web/src/locales/en.json b/web/src/locales/en.json index 4301742b..7876024b 100644 --- a/web/src/locales/en.json +++ b/web/src/locales/en.json @@ -118,7 +118,9 @@ }, "links": "Links", "to-do": "To-do", - "code": "Code" + "code": "Code", + "remove-completed-task-list-items": "Remove done", + "remove-completed-task-list-items-confirm": "Are you sure you want to remove all completed to-dos? THIS ACTION IS IRREVERSIBLE" }, "message": { "archived-successfully": "Archived successfully", @@ -135,7 +137,8 @@ "restored-successfully": "Restored successfully", "succeed-copy-link": "Link copied successfully.", "update-succeed": "Update succeeded", - "user-not-found": "User not found" + "user-not-found": "User not found", + "remove-completed-task-list-items-successfully": "The removal was successful" }, "reference": { "add-references": "Add references", @@ -299,7 +302,8 @@ "enable-password-login-warning": "This will enable password login for all users. Continue only if you want to users to be able to log in using both SSO and password", "max-upload-size": "Maximum upload size (MiB)", "max-upload-size-hint": "Recommended value is 32 MiB.", - "server-name": "Server Name" + "server-name": "Server Name", + "removed-completed-task-list-items": "Enable removal of completed task list items" }, "memo-related": "Memo", "access-token-section":{ diff --git a/web/src/locales/es.json b/web/src/locales/es.json index 218d19ae..62856ecc 100644 --- a/web/src/locales/es.json +++ b/web/src/locales/es.json @@ -105,7 +105,9 @@ "private": "Solo visible para ti", "protected": "Espacio de trabajo", "public": "Todo el mundo lo puede ver" - } + }, + "remove-completed-task-list-items": "Eliminar completado", + "remove-completed-task-list-items-confirm": "¿Estás seguro de que quieres eliminar todas las tareas completadas? (Esta acción es irreversible)" }, "message": { "change-memo-created-time": "Cambiar la hora de creación del memo", @@ -120,7 +122,8 @@ "restored-successfully": "Restaurado con éxito", "succeed-copy-link": "Enlace copiado correctamente.", "update-succeed": "Actualización exitosa", - "user-not-found": "Usuario no encontrado" + "user-not-found": "Usuario no encontrado", + "remove-completed-task-list-items-successfully": "¡Eliminado con éxito!" }, "resource": { "clear": "Limpiar", @@ -265,7 +268,8 @@ "enable-password-login-warning": "Esto habilitará el inicio de sesión con contraseña para todos los usuarios. Continúa sólo si deseas que los usuarios puedan iniciar sesión mediante SSO y contraseña", "max-upload-size": "Tamaño máximo de subida (MiB)", "max-upload-size-hint": "El valor recomendado es de 32 MiB.", - "server-name": "Nombre del servidor" + "server-name": "Nombre del servidor", + "removed-completed-task-list-items": "Habilitar eliminar completado" } }, "tag": { diff --git a/web/src/locales/fr.json b/web/src/locales/fr.json index 94b3bba3..85212d3b 100644 --- a/web/src/locales/fr.json +++ b/web/src/locales/fr.json @@ -118,7 +118,9 @@ "private": "Privé", "protected": "Accès aux membres", "public": "Public" - } + }, + "remove-completed-task-list-items": "Supprimer terminé", + "remove-completed-task-list-items-confirm": "Êtes-vous sûr de vouloir supprimer toutes les tâches terminées ? (Cette action est irréversible)" }, "message": { "archived-successfully": "Archivé avec succès", @@ -135,7 +137,8 @@ "restored-successfully": "Restauré avec succès", "succeed-copy-link": "Succeed to copy link to clipboard.", "update-succeed": "Mise à jour effectuée", - "user-not-found": "Utilisateur introuvable" + "user-not-found": "Utilisateur introuvable", + "remove-completed-task-list-items-successfully": "Supprimé avec succès !" }, "reference": { "add-references": "Ajouter des références", @@ -297,7 +300,8 @@ "enable-password-login-warning": "Ceci activera la connexion par mot de passe pour tous les utilisateurs. Ne continuez que si vous souhaitez que les utilisateurs puissent se connecter à la fois par SSO et par mot de passe", "max-upload-size": "Taille maximale du téléversement (MiB)", "max-upload-size-hint": "La valeur recommandée est 32 MiB.", - "server-name": "Nom du serveur" + "server-name": "Nom du serveur", + "removed-completed-task-list-items": "Activer la suppression terminée" } }, "tag": { diff --git a/web/src/locales/hi.json b/web/src/locales/hi.json index 8072fe77..9bb006fb 100644 --- a/web/src/locales/hi.json +++ b/web/src/locales/hi.json @@ -90,7 +90,9 @@ "private": "निजी", "protected": "सदस्यों को दिखाई देता है", "public": "सभी के लिए सार्वजनिक" - } + }, + "remove-completed-task-list-items": "हटाएँ किया गया", + "remove-completed-task-list-items-confirm": "क्या आप सुनिश्चित हैं कि आप सभी पूरे कामों को हटाना चाहते हैं? (यह क्रिया वापस ले जाने योग्य नहीं है)" }, "message": { "change-memo-created-time": "मेमो बनाने का समय बदलें", @@ -105,7 +107,8 @@ "restored-successfully": "सफलतापूर्वक पुनर्स्थापित किया गया", "succeed-copy-link": "लिंक सफलतापूर्वक कॉपी किया गया।", "update-succeed": "अपडेट सफल हुआ", - "user-not-found": "उपयोगकर्ता नहीं मिला" + "user-not-found": "उपयोगकर्ता नहीं मिला", + "remove-completed-task-list-items-successfully": "सफलतापूर्वक हटा दिया!" }, "resource": { "clear": "साफ़ करें", diff --git a/web/src/locales/hr.json b/web/src/locales/hr.json index c207adb6..4454866c 100644 --- a/web/src/locales/hr.json +++ b/web/src/locales/hr.json @@ -102,7 +102,9 @@ "private": "Privatno", "protected": "Vidljivo članovima", "public": "Javno" - } + }, + "remove-completed-task-list-items": "Ukloni obavljen", + "remove-completed-task-list-items-confirm": "Jeste li sigurni da želite ukloniti sve obavljene zadatke? (Ova akcija je nevraćiva)" }, "message": { "change-memo-created-time": "Promijeni vrijeme stvaranja memoa", @@ -117,7 +119,8 @@ "restored-successfully": "Uspješno vraćeno", "succeed-copy-link": "Link je uspješno kopiran.", "update-succeed": "Obnavljanje aplikacije je uspjelo!🎉", - "user-not-found": "Korisnik nije nađen" + "user-not-found": "Korisnik nije nađen", + "remove-completed-task-list-items-successfully": "Uspješno uklonjeno!" }, "resource": { "clear": "Očisti", @@ -267,7 +270,8 @@ "enable-password-login-warning": "Ovo će omogućiti prijavu lozinkom za sve korisnike.", "max-upload-size": "Maximalna veličina uploada (MiB)", "max-upload-size-hint": "Preporučena vrijednost je 32 MiB.", - "server-name": "Ime servera" + "server-name": "Ime servera", + "removed-completed-task-list-items": "Omogući uklanjanje obavljenog" } }, "tag": { diff --git a/web/src/locales/hu.json b/web/src/locales/hu.json index 983ddc60..039d6bb0 100644 --- a/web/src/locales/hu.json +++ b/web/src/locales/hu.json @@ -113,7 +113,9 @@ "private": "Privát", "protected": "Munkatér", "public": "Nyilvános" - } + }, + "remove-completed-task-list-items": "Töröld el a kész", + "remove-completed-task-list-items-confirm": "Biztos, hogy törölni akarod az összes kész feladatot? (Ez az akció visszavonhatatlan)" }, "message": { "archived-successfully": "Sikeres archiválás", @@ -130,7 +132,8 @@ "restored-successfully": "Sikeres visszaállítás", "succeed-copy-link": "Hivatkozás sikeresen másolva.", "update-succeed": "Sikeres frissítés", - "user-not-found": "Felhasználó nem található" + "user-not-found": "Felhasználó nem található", + "remove-completed-task-list-items-successfully": "Sikeresen eltávolítva!" }, "reference": { "add-references": "Referenciák hozzáadása", @@ -287,7 +290,8 @@ "enable-password-login-warning": "Ez engedélyezi a jelszavas bejelentkezést minden felhasználó számára. Csak akkor folytasd, ha szeretnéd, ha a felhasználók SSO és jelszó használatával is be tudjanak jelentkezni", "max-upload-size": "Maximális feltöltési méret (MiB)", "max-upload-size-hint": "Az ajánlott érték 32 MiB.", - "server-name": "Szerver neve" + "server-name": "Szerver neve", + "removed-completed-task-list-items": "Kikapcsold a kész törölését" } }, "tag": { diff --git a/web/src/locales/it.json b/web/src/locales/it.json index 26196851..28e5677c 100644 --- a/web/src/locales/it.json +++ b/web/src/locales/it.json @@ -91,7 +91,9 @@ "private": "Privato", "protected": "Visibile ai membri", "public": "Pubblico" - } + }, + "remove-completed-task-list-items": "Rimuovi completato", + "remove-completed-task-list-items-confirm": "Sei sicuro di voler rimuovere tutte le cose completate? (Questa azione è irreversibile)" }, "message": { "change-memo-created-time": "Cambia data creazione", @@ -106,7 +108,8 @@ "restored-successfully": "Ripristinato con successo", "succeed-copy-link": "Link copiato.", "update-succeed": "Aggiornato con successo", - "user-not-found": "Utente non trovato" + "user-not-found": "Utente non trovato", + "remove-completed-task-list-items-successfully": "Rimosso con successo!" }, "resource": { "clear": "Cancella", @@ -253,7 +256,8 @@ "enable-password-login-warning": "Ciò consentirà l'accesso tramite password per tutti gli utenti. Continua solo se desideri che gli utenti possano accedere utilizzando sia SSO che password❗", "max-upload-size": "Dimensione massima caricamento (MiB)", "max-upload-size-hint": "Valore consigliato di 32 MiB.", - "server-name": "Nome server" + "server-name": "Nome server", + "removed-completed-task-list-items": "Abilita rimuovi completato" } }, "tag": { diff --git a/web/src/locales/ja.json b/web/src/locales/ja.json index f53f8c46..703c2eaf 100644 --- a/web/src/locales/ja.json +++ b/web/src/locales/ja.json @@ -118,7 +118,9 @@ "private": "非公開", "protected": "メンバーに表示", "public": "公開メモ" - } + }, + "remove-completed-task-list-items": "完了を削除", + "remove-completed-task-list-items-confirm": "すべての完了したタスクを削除してもよろしいですか?(このアクションは取り消せません)" }, "message": { "archived-successfully": "アーカイブが完了しました", @@ -135,7 +137,8 @@ "restored-successfully": "リストア成功", "succeed-copy-link": "リンクのコピーに成功しました。", "update-succeed": "変更は保存されました", - "user-not-found": "ユーザーが見つかりませんでした" + "user-not-found": "ユーザーが見つかりませんでした", + "remove-completed-task-list-items-successfully": "削除が成功しました!" }, "reference": { "add-references": "変更は保存されました", @@ -297,7 +300,8 @@ "enable-password-login-warning": "これにより、すべてのユーザーのパスワードでのログインが有効になります。SSOとパスワードの両方を使用してログインできるようにしたい場合のみ、続行してください", "max-upload-size": "最大ファイルサイズ(MiB)", "max-upload-size-hint": "推奨サイズは32 MiBです。", - "server-name": "サーバーの名前" + "server-name": "サーバーの名前", + "removed-completed-task-list-items": "完了削除を有効にする" } }, "tag": { diff --git a/web/src/locales/ko.json b/web/src/locales/ko.json index 7631ad00..89e8fc0b 100644 --- a/web/src/locales/ko.json +++ b/web/src/locales/ko.json @@ -102,7 +102,9 @@ "private": "나만 볼 수 있음", "protected": "멤버 전용", "public": "공개" - } + }, + "remove-completed-task-list-items": "완료 제거", + "remove-completed-task-list-items-confirm": "모든 완료된 작업을 삭제하겠습니까? (이 작업은 되돌릴 수 없습니다)" }, "message": { "change-memo-created-time": "메모 생성 시각 변경", @@ -117,7 +119,8 @@ "restored-successfully": "성공적으로 복구했습니다", "succeed-copy-link": "링크를 클립보드에 복사했습니다.", "update-succeed": "업데이트 성공", - "user-not-found": "회원을 찾을 수 없습니다" + "user-not-found": "회원을 찾을 수 없습니다", + "remove-completed-task-list-items-successfully": "성공적으로 제거되었습니다!" }, "resource": { "clear": "클리어", @@ -268,7 +271,8 @@ "enable-password-login-warning": "모든 사용자가 비밀번호를 사용해서 로그인할 수 있게 합니다. 사용자들이 SSO와 비밀번호 둘 다 사용할 수 있게 하고 싶은 경우에만 켜 주세요", "max-upload-size": "최대 업로드 크기 (MiB)", "max-upload-size-hint": "권장값은 32 MiB입니다.", - "server-name": "서버 이름" + "server-name": "서버 이름", + "removed-completed-task-list-items": "완료 제거 활성화" } }, "tag": { diff --git a/web/src/locales/mr.json b/web/src/locales/mr.json index 061c6258..aba93762 100644 --- a/web/src/locales/mr.json +++ b/web/src/locales/mr.json @@ -115,7 +115,9 @@ "private": "खाजगी", "protected": "कार्यक्षेत्र", "public": "सार्वजनिक" - } + }, + "remove-completed-task-list-items": "हटवा केलेले", + "remove-completed-task-list-items-confirm": "तुम्ही सगळ्या पूर्ण केलेल्या कामांचे हटवणार आहात का? (या क्रियेचे उलट घेणे शक्य नाही)" }, "message": { "archived-successfully": "यशस्वीरित्या संग्रहित केले", @@ -132,7 +134,8 @@ "restored-successfully": "यशस्वीरित्या पुनर्संचयित केले", "succeed-copy-link": "लिंक यशस्वीरित्या कॉपी केली.", "update-succeed": "अपडेट यशस्वी झाले", - "user-not-found": "वापरकर्ता सापडला नाही" + "user-not-found": "वापरकर्ता सापडला नाही", + "remove-completed-task-list-items-successfully": "सफळताने हटवा झाले!" }, "reference": { "add-references": "संदर्भ जोडा", @@ -291,7 +294,8 @@ "enable-password-login-warning": "हे सर्व वापरकर्त्यांसाठी पासवर्ड लॉगिन सक्षम करेल. जर तुम्ही वापरकर्त्यांना SSO आणि पासवर्ड दोन्ही वापरून लॉग इन करू इच्छित असाल तरच सुरू ठेवा", "max-upload-size": "कमाल अपलोड आकार (MiB)", "max-upload-size-hint": "शिफारस केलेले मूल्य 32 MiB आहे.", - "server-name": "सर्व्हरचे नाव" + "server-name": "सर्व्हरचे नाव", + "removed-completed-task-list-items": "हटवा केलेले सक्षम करा" } }, "tag": { diff --git a/web/src/locales/nl.json b/web/src/locales/nl.json index 1404f604..3513e5ff 100644 --- a/web/src/locales/nl.json +++ b/web/src/locales/nl.json @@ -97,7 +97,9 @@ "private": "Privé", "protected": "Werkruimte", "public": "Openbaar" - } + }, + "remove-completed-task-list-items": "Verwijder voltooid", + "remove-completed-task-list-items-confirm": "Weet u zeker dat u alle voltooide taken wilt verwijderen? (Deze actie is onomkeerbaar)" }, "message": { "change-memo-created-time": "Tijd van aanmaken wijzigen", @@ -111,7 +113,8 @@ "restored-successfully": "Succesvol teruggezet", "succeed-copy-link": "Link gekopieërd naar klembord.", "update-succeed": "Update voltooid", - "user-not-found": "Gebruiker niet gevonden" + "user-not-found": "Gebruiker niet gevonden", + "remove-completed-task-list-items-successfully": "Gelukt verwijderd!" }, "resource": { "clear": "Opruimen", @@ -235,7 +238,8 @@ "enable-password-login-warning": "Als je dit aanzet kan er met zowel SSO als een wachtwoord ingelogd worden", "max-upload-size": "Maximum uploadgrootte (MiB)", "max-upload-size-hint": "32 MiB wordt aangeraden.", - "server-name": "Servernaam" + "server-name": "Servernaam", + "removed-completed-task-list-items": "Verwijder voltooid inschakelen" } }, "tag": { diff --git a/web/src/locales/pl.json b/web/src/locales/pl.json index 312615cc..25a35727 100644 --- a/web/src/locales/pl.json +++ b/web/src/locales/pl.json @@ -117,7 +117,9 @@ }, "links": "Linki", "to-do": "Lista zadań", - "code": "Kod" + "code": "Kod", + "remove-completed-task-list-items": "Usuń zakończone", + "remove-completed-task-list-items-confirm": "Czy jesteś pewny, że chcesz usunąć wszystkie zakończone zadania? (Ta akcja jest nieodwracalna)" }, "message": { "archived-successfully": "Zarchiwizowano pomyślnie", @@ -134,7 +136,8 @@ "restored-successfully": "Przywrócono pomyślnie", "succeed-copy-link": "Link skopiowany pomyślnie.", "update-succeed": "Aktualizacja zakończona sukcesem", - "user-not-found": "Użytkownik nie został znaleziony" + "user-not-found": "Użytkownik nie został znaleziony", + "remove-completed-task-list-items-successfully": "Pomyślnie usunięto!" }, "reference": { "add-references": "Dodaj odniesienia", @@ -295,7 +298,8 @@ "enable-password-login-warning": "To włączy logowanie hasłem dla wszystkich użytkowników. Kontynuuj tylko wtedy, gdy chcesz, aby użytkownicy mogli logować się za pomocą zarówno SSO, jak i hasła", "max-upload-size": "Maksymalny rozmiar przesyłanego pliku (MiB)", "max-upload-size-hint": "Zalecana wartość to 32 MiB.", - "server-name": "Nazwa serwera" + "server-name": "Nazwa serwera", + "removed-completed-task-list-items": "Włącz usuwanie zakończonych" }, "memo-related": "Notatki" }, diff --git a/web/src/locales/pt-BR.json b/web/src/locales/pt-BR.json index 9dcf4a38..6d0b642c 100644 --- a/web/src/locales/pt-BR.json +++ b/web/src/locales/pt-BR.json @@ -118,7 +118,9 @@ "private": "Privado (eu)", "protected": "Protegido (membros)", "public": "Público (todos)" - } + }, + "remove-completed-task-list-items": "Remover concluídos", + "remove-completed-task-list-items-confirm": "Você tem certeza de que deseja remover todos os itens concluídos? (Essa ação é irreversível)" }, "message": { "archived-successfully": "Arquivado com êxito", @@ -135,7 +137,8 @@ "restored-successfully": "Restaurado com êxito", "succeed-copy-link": "Link copiado com êxito.", "update-succeed": "Atualizado com êxito", - "user-not-found": "Usuário não encontrado" + "user-not-found": "Usuário não encontrado", + "remove-completed-task-list-items-successfully": "Remoção bem-sucedida!" }, "reference": { "add-references": "Adicionar referências", @@ -297,7 +300,8 @@ "enable-password-login-warning": "Isso permitirá o login com senha para todos os usuários. Continue apenas se desejar que os usuários possam fazer login usando SSO e senha local❗", "max-upload-size": "Tamanho máximo de upload (MiB)", "max-upload-size-hint": "O valor recomendado é 32 MiB.", - "server-name": "Nome do servidor" + "server-name": "Nome do servidor", + "removed-completed-task-list-items": "Ativar remoção de concluídos" } }, "tag": { diff --git a/web/src/locales/ru.json b/web/src/locales/ru.json index 9648d898..bcc9c92b 100644 --- a/web/src/locales/ru.json +++ b/web/src/locales/ru.json @@ -112,7 +112,9 @@ "private": "Видно только вам", "protected": "Видно только пользователям", "public": "Видно всем" - } + }, + "remove-completed-task-list-items": "Удалить выполненные", + "remove-completed-task-list-items-confirm": "Вы уверены, что хотите удалить все выполненные задачи? (Данное действие необратимо)" }, "message": { "archived-successfully": "Успешная архивация", @@ -129,7 +131,8 @@ "restored-successfully": "Успешно восстановлено.", "succeed-copy-link": "Ссылка скопирована в буфер обмена.", "update-succeed": "Успешно обновлено", - "user-not-found": "Пользователь не найден" + "user-not-found": "Пользователь не найден", + "remove-completed-task-list-items-successfully": "Удалено успешно!" }, "reference": { "add-references": "Добавить ссылку", @@ -280,7 +283,8 @@ "display-with-updated-time": "Отображать время обновления записи", "max-upload-size": "Максимальный размер загрузки (МБ)", "max-upload-size-hint": "Рекомендуемое значение 32 MБ.", - "server-name": "Имя сервера" + "server-name": "Имя сервера", + "removed-completed-task-list-items": "Включить удаление выполненных" } }, "tag": { diff --git a/web/src/locales/sl.json b/web/src/locales/sl.json index 72de5218..67215799 100644 --- a/web/src/locales/sl.json +++ b/web/src/locales/sl.json @@ -20,8 +20,8 @@ "change": "Spremeni", "clear": "Počisti", "close": "Zapri", - "confirm": "Potrdi", - "collapse": "Strni", + "confirm": "Potrdi", + "collapse": "Strni", "create": "Dodaj", "database": "Baza", "days": "Dni", @@ -118,7 +118,9 @@ }, "links": "Povezave", "to-do": "Opravila", - "code": "Koda" + "code": "Koda", + "remove-completed-task-list-items": "Odstrani končane", + "remove-completed-task-list-items-confirm": "Ste prepričani, da želite odstraniti vse končane naloge? (Ta dejanje ni obrnljivo)" }, "message": { "archived-successfully": "Archived successfully", @@ -135,7 +137,8 @@ "restored-successfully": "Uspešno obnovljeno", "succeed-copy-link": "Povezava je uspešno skopirana.", "update-succeed": "Posodobitev je uspešna", - "user-not-found": "Ne najdem uporabnika" + "user-not-found": "Ne najdem uporabnika", + "remove-completed-task-list-items-successfully": "Odstranitev uspešna!" }, "reference": { "add-references": "Dodaj referenco", @@ -295,8 +298,9 @@ "enable-password-login": "Omogoči prijavo z geslom", "enable-password-login-warning": "To bo omogočilo prijavo z geslom za vse uporabnike. Nadaljujte samo, če želite, da se uporabniki lahko prijavijo z uporabo enotne prijave in gesla", "max-upload-size": "Največja velikost nalaganja (MiB)", - "max-upload-size-hint": "Priporočena velikost je 32 MiB.", - "server-name": "Ime strežnika" + "max-upload-size-hint": "Priporočena velikost je 32 MiB.", + "server-name": "Ime strežnika", + "removed-completed-task-list-items": "Omogoči odstranitev končanih" }, "memo-related": "Beležka" }, diff --git a/web/src/locales/sv.json b/web/src/locales/sv.json index 3132bcf3..1e5bc30a 100644 --- a/web/src/locales/sv.json +++ b/web/src/locales/sv.json @@ -64,7 +64,9 @@ "private": "Endast synlig för dig", "protected": "Synlig för medlemmar", "public": "Synlig för alla" - } + }, + "remove-completed-task-list-items": "Ta bort avklarade", + "remove-completed-task-list-items-confirm": "Är du säker på att du vill ta bort alla avklarade todo? (Detta är oåterkalleligt)" }, "message": { "change-memo-created-time": "Ändra anteckning skapade tid", @@ -77,7 +79,8 @@ "restored-successfully": "Återställdes framgångsrikt", "succeed-copy-link": "Länk kopierades framgångsrikt.", "update-succeed": "Uppdateras framgångsrikt", - "user-not-found": "Användaren hittades inte" + "user-not-found": "Användaren hittades inte", + "remove-completed-task-list-items-successfully": "Borttagning avklarade todo lyckades!" }, "resource": { "clear": "Rensa", @@ -133,7 +136,8 @@ }, "disable-public-memos": "Inaktivera offentliga anteckningar", "display-with-updated-time": "Display with updated time", - "server-name": "Server Name" + "server-name": "Server Name", + "removed-completed-task-list-items": "Aktivera ta bort avklarade" } } } diff --git a/web/src/locales/th.json b/web/src/locales/th.json index 36cfb4d2..c5a71eba 100644 --- a/web/src/locales/th.json +++ b/web/src/locales/th.json @@ -118,7 +118,9 @@ "private": "ส่วนตัว", "protected": "พื้นที่ทำงาน", "public": "สาธารณะ" - } + }, + "remove-completed-task-list-items": "ลบที่ทำแล้ว", + "remove-completed-task-list-items-confirm": "คุณแน่ใจว่าจะลบรายการที่ทำแล้วทั้งหมดหรือไม่? (การกระทำนี้ไม่สามารถย้อนกลับได้)" }, "message": { "archived-successfully": "เก็บถาวรเรียบร้อยแล้ว", @@ -135,7 +137,8 @@ "restored-successfully": "กู้คืนเรียบร้อยแล้ว", "succeed-copy-link": "คัดลอกลิงก์เรียบร้อยแล้ว", "update-succeed": "อัปเดตเรียบร้อยแล้ว", - "user-not-found": "ไม่พบผู้ใช้งาน" + "user-not-found": "ไม่พบผู้ใช้งาน", + "remove-completed-task-list-items-successfully": "ลบเรียบร้อย!" }, "reference": { "add-references": "เพิ่มข้อมูลอ้างอิง", @@ -297,7 +300,8 @@ "enable-password-login-warning": "สิ่งนี้จะเปิดใช้งานการเข้าสู่ระบบด้วยรหัสผ่านสำหรับผู้ใช้ทุกคน ดำเนินการต่อหากคุณต้องการให้ผู้ใช้สามารถเข้าสู่ระบบโดยใช้ทั้ง SSO และรหัสผ่าน", "max-upload-size": "ขนาดการอัปโหลดสูงสุด (MiB)", "max-upload-size-hint": "ค่าที่แนะนำคือ 32 MiB", - "server-name": "ชื่อเซิร์ฟเวอร์" + "server-name": "ชื่อเซิร์ฟเวอร์", + "removed-completed-task-list-items": "เปิดใช้งานการลบรายการที่ทำแล้ว" } }, "tag": { diff --git a/web/src/locales/tr.json b/web/src/locales/tr.json index 180ce60d..aeb2386e 100644 --- a/web/src/locales/tr.json +++ b/web/src/locales/tr.json @@ -118,7 +118,9 @@ "private": "Sadece sizin için görünür", "protected": "Çalışma Alanı", "public": "Herkese açık" - } + }, + "remove-completed-task-list-items": "Tamamlananları Kaldır", + "remove-completed-task-list-items-confirm": "Tüm tamamlanan görevleri kaldırmak istediğinize emin misiniz? (Bu işlem geri alınamaz)" }, "message": { "archived-successfully": "Başarıyla arşivlendi", @@ -135,7 +137,8 @@ "restored-successfully": "Başarıyla geri yüklendi.", "succeed-copy-link": "Bağlantı panosuna bağlantı kopyalandı.", "update-succeed": "Başarıyla güncellendi", - "user-not-found": "Kullanıcı bulunamadı" + "user-not-found": "Kullanıcı bulunamadı", + "remove-completed-task-list-items-successfully": "Başarıyla kaldırıldı!" }, "reference": { "add-references": "Referans ekle", @@ -297,7 +300,8 @@ "enable-password-login-warning": "Bu, tüm kullanıcılar için parola girişini etkinleştirecektir. Yalnızca kullanıcıların hem SSO hem de parola kullanarak oturum açabilmesini istiyorsanız devam edin", "max-upload-size": "Maksimum yükleme boyutu (MiB)", "max-upload-size-hint": "Önerilen değer 32 MiB'dir.", - "server-name": "Uygulama Adı" + "server-name": "Uygulama Adı", + "removed-completed-task-list-items": "Tamamlananları Kaldırma'yı Etkinleştir" } }, "tag": { diff --git a/web/src/locales/uk.json b/web/src/locales/uk.json index e8799759..b2d9280e 100644 --- a/web/src/locales/uk.json +++ b/web/src/locales/uk.json @@ -118,7 +118,9 @@ }, "links": "Посилання", "to-do": "Список справ", - "code": "Код" + "code": "Код", + "remove-completed-task-list-items": "Видалити виконані", + "remove-completed-task-list-items-confirm": "Ви впевнені, що хочете видалити всі виконані задачі? (Ця дія неодмінна)" }, "message": { "archived-successfully": "Архівовано успішно", @@ -135,7 +137,8 @@ "restored-successfully": "Успішно відновлено", "succeed-copy-link": "Посилання успішно скопійовано.", "update-succeed": "Оновлення успішне", - "user-not-found": "Користувача не знайдено" + "user-not-found": "Користувача не знайдено", + "remove-completed-task-list-items-successfully": "Видалення виконаних успішно!" }, "reference": { "add-references": "Додати посилання", @@ -345,6 +348,7 @@ "markdown": { "code-block": "Блок коду", "checkbox": "Чекбокс", - "content-syntax": "Синтаксис вмісту" + "content-syntax": "Синтаксис вмісту", + "removed-completed-task-list-items": "Увімкнути видалення виконаних" } } diff --git a/web/src/locales/vi.json b/web/src/locales/vi.json index 3fc4d1ae..dc51af12 100644 --- a/web/src/locales/vi.json +++ b/web/src/locales/vi.json @@ -118,7 +118,9 @@ }, "links": "Liên kết", "to-do": "Việc cần làm", - "code": "Mã" + "code": "Mã", + "remove-completed-task-list-items": "Xóa đã hoàn thành", + "remove-completed-task-list-items-confirm": "Bạn có chắc chắn muốn xóa tất cả các mục đã hoàn thành không? (Hành động này không thể đảo ngược)" }, "message": { "archived-successfully": "Lưu trữ thành công", @@ -141,7 +143,8 @@ "add-references": "Thêm tham chiếu", "embedded-usage": "Sử dụng như nội dung nhúng", "no-memos-found": "Không tìm thấy ghi chú", - "search-placeholder": "Tìm kiếm nội dung" + "search-placeholder": "Tìm kiếm nội dung", + "remove-completed-task-list-items-successfully": "Xóa thành công!" }, "resource": { "clear": "Xóa", @@ -299,7 +302,8 @@ "enable-password-login-warning": "Điều này sẽ bật đăng nhập bằng mật khẩu cho tất cả người dùng. Chỉ tiếp tục nếu bạn muốn người dùng có thể đăng nhập bằng cả SSO và mật khẩu", "max-upload-size": "Kích thước tải lên tối đa (MiB)", "max-upload-size-hint": "Giá trị đề xuất là 32 MiB.", - "server-name": "Tên máy chủ" + "server-name": "Tên máy chủ", + "removed-completed-task-list-items": "Kích hoạt xóa đã hoàn thành" }, "memo-related": "Ghi chú", "access-token-section": { diff --git a/web/src/locales/zh-Hans.json b/web/src/locales/zh-Hans.json index 082594da..50602188 100644 --- a/web/src/locales/zh-Hans.json +++ b/web/src/locales/zh-Hans.json @@ -118,7 +118,9 @@ }, "links": "链接", "to-do": "待办", - "code": "代码" + "code": "代码", + "remove-completed-task-list-items": "移除已办", + "remove-completed-task-list-items-confirm": "您确定要移除所有完成的待办吗?(此操作不可逆)" }, "message": { "archived-successfully": "归档成功", @@ -135,7 +137,8 @@ "restored-successfully": "恢复成功", "succeed-copy-link": "复制链接到剪贴板成功。", "update-succeed": "更新成功", - "user-not-found": "未找到该用户" + "user-not-found": "未找到该用户", + "remove-completed-task-list-items-successfully": "移除成功!" }, "reference": { "add-references": "添加引用", @@ -297,7 +300,8 @@ "enable-password-login-warning": "启用所有用户的密码登录。如果希望用户同时使用单点登录和密码登录,请开启密码登录", "max-upload-size": "最大上传大小 (MiB)", "max-upload-size-hint": "建议值为 32 MiB。", - "server-name": "服务器名称" + "server-name": "服务器名称", + "removed-completed-task-list-items": "启用移除已办" }, "memo-related": "备忘录" }, diff --git a/web/src/locales/zh-Hant.json b/web/src/locales/zh-Hant.json index c95306ec..4731b332 100644 --- a/web/src/locales/zh-Hant.json +++ b/web/src/locales/zh-Hant.json @@ -118,7 +118,9 @@ "private": "私人", "protected": "成員可見", "public": "公開給所有人" - } + }, + "remove-completed-task-list-items": "移除已完成", + "remove-completed-task-list-items-confirm": "您確定要移除所有完成的待辦嗎?(此操作不可逆)" }, "message": { "archived-successfully": "封存成功", @@ -135,7 +137,8 @@ "restored-successfully": "還原成功", "succeed-copy-link": "複製連結到剪貼簿成功。", "update-succeed": "更新成功", - "user-not-found": "查無該使用者" + "user-not-found": "查無該使用者", + "remove-completed-task-list-items-successfully": "移除成功!" }, "reference": { "add-references": "添加參考資料", @@ -298,7 +301,8 @@ "enable-password-login-warning": "啟用所有使用者的密碼登入。如果希望使用者同時使用 SSO 和密碼登入,請開啟密碼登入", "max-upload-size": "最大上傳檔案大小 (MiB)", "max-upload-size-hint": "建議值為 32 MiB。", - "server-name": "伺服器名稱" + "server-name": "伺服器名稱", + "removed-completed-task-list-items": "啟用移除已完成" } }, "tag": {