diff --git a/apps/client/src/translations/cn/translation.json b/apps/client/src/translations/cn/translation.json index fbfd09282..ae1f438ae 100644 --- a/apps/client/src/translations/cn/translation.json +++ b/apps/client/src/translations/cn/translation.json @@ -305,7 +305,7 @@ "sort_with_respect_to_different_character_sorting": "根据不同语言或地区的字符排序和排序规则排序。", "natural_sort_language": "自然排序语言", "the_language_code_for_natural_sort": "自然排序的语言代码,例如中文的 \"zh-CN\"。", - "sort": "排序 Enter" + "sort": "排序" }, "upload_attachments": { "upload_attachments_to_note": "上传附件到笔记", diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index 31d65b005..8adae6ca9 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -303,7 +303,7 @@ "sort_with_respect_to_different_character_sorting": "Sortierung im Hinblick auf unterschiedliche Sortier- und Sortierregeln für Zeichen in verschiedenen Sprachen oder Regionen.", "natural_sort_language": "Natürliche Sortiersprache", "the_language_code_for_natural_sort": "Der Sprachcode für die natürliche Sortierung, z. B. \"de-DE\" für Deutsch.", - "sort": "Sortieren Eingabetaste" + "sort": "Sortieren" }, "upload_attachments": { "upload_attachments_to_note": "Lade Anhänge zur Notiz hoch", diff --git a/apps/client/src/translations/en/translation.json b/apps/client/src/translations/en/translation.json index 578260ef8..f368095b8 100644 --- a/apps/client/src/translations/en/translation.json +++ b/apps/client/src/translations/en/translation.json @@ -309,7 +309,7 @@ "sort_with_respect_to_different_character_sorting": "sort with respect to different character sorting and collation rules in different languages or regions.", "natural_sort_language": "Natural sort language", "the_language_code_for_natural_sort": "The language code for natural sort, e.g. \"zh-CN\" for Chinese.", - "sort": "Sort enter" + "sort": "Sort" }, "upload_attachments": { "upload_attachments_to_note": "Upload attachments to note", diff --git a/apps/client/src/translations/es/translation.json b/apps/client/src/translations/es/translation.json index b3ea6ff2a..aa67b4c15 100644 --- a/apps/client/src/translations/es/translation.json +++ b/apps/client/src/translations/es/translation.json @@ -308,7 +308,7 @@ "sort_with_respect_to_different_character_sorting": "ordenar con respecto a diferentes reglas de ordenamiento y clasificación de caracteres en diferentes idiomas o regiones.", "natural_sort_language": "Idioma de clasificación natural", "the_language_code_for_natural_sort": "El código del idioma para el ordenamiento natural, ej. \"zh-CN\" para Chino.", - "sort": "Ordenar Enter" + "sort": "Ordenar" }, "upload_attachments": { "upload_attachments_to_note": "Cargar archivos adjuntos a nota", diff --git a/apps/client/src/translations/fr/translation.json b/apps/client/src/translations/fr/translation.json index 5e01bb9ec..f2303b488 100644 --- a/apps/client/src/translations/fr/translation.json +++ b/apps/client/src/translations/fr/translation.json @@ -303,7 +303,7 @@ "sort_with_respect_to_different_character_sorting": "trier en fonction de différentes règles de tri et de classement des caractères dans différentes langues ou régions.", "natural_sort_language": "Langage de tri naturel", "the_language_code_for_natural_sort": "Le code de langue pour le tri naturel, par ex. \"zh-CN\" pour le chinois.", - "sort": "Trier Entrée" + "sort": "Trier" }, "upload_attachments": { "upload_attachments_to_note": "Téléverser des pièces jointes à la note", diff --git a/apps/client/src/translations/ro/translation.json b/apps/client/src/translations/ro/translation.json index 902f8cf28..2e6bba53c 100644 --- a/apps/client/src/translations/ro/translation.json +++ b/apps/client/src/translations/ro/translation.json @@ -1193,7 +1193,7 @@ "folders": "Dosare", "natural_sort": "Ordonare naturală", "natural_sort_language": "Limba pentru ordonare naturală", - "sort": "Ordonare Enter", + "sort": "Ordonare", "sort_children_by": "Ordonează subnotițele după...", "sort_folders_at_top": "ordonează dosarele primele", "sort_with_respect_to_different_character_sorting": "ordonează respectând regulile de sortare și clasificare diferite în funcție de limbă și regiune.", diff --git a/apps/client/src/translations/sr/translation.json b/apps/client/src/translations/sr/translation.json index af3292368..5e678a481 100644 --- a/apps/client/src/translations/sr/translation.json +++ b/apps/client/src/translations/sr/translation.json @@ -309,7 +309,7 @@ "sort_with_respect_to_different_character_sorting": "sortiranje sa poštovanjem različitih pravila sortiranja karaktera i kolacija u različitim jezicima ili regionima.", "natural_sort_language": "Jezik za prirodno sortiranje", "the_language_code_for_natural_sort": "Kod jezika za prirodno sortiranje, npr. \"zh-CN\" za Kineski.", - "sort": "Sortiraj enter" + "sort": "Sortiraj" }, "upload_attachments": { "upload_attachments_to_note": "Otpremite priloge uz belešku", diff --git a/apps/client/src/translations/tw/translation.json b/apps/client/src/translations/tw/translation.json index e675a64fd..a85495485 100644 --- a/apps/client/src/translations/tw/translation.json +++ b/apps/client/src/translations/tw/translation.json @@ -278,7 +278,7 @@ "sort_with_respect_to_different_character_sorting": "根據不同語言或地區的字符排序和排序規則排序。", "natural_sort_language": "自然排序語言", "the_language_code_for_natural_sort": "自然排序的語言程式碼,例如繁體中文的 \"zh-TW\"。", - "sort": "排序 Enter" + "sort": "排序" }, "upload_attachments": { "upload_attachments_to_note": "上傳附件到筆記", diff --git a/apps/client/src/widgets/dialogs/sort_child_notes.ts b/apps/client/src/widgets/dialogs/sort_child_notes.ts deleted file mode 100644 index 4724cf55c..000000000 --- a/apps/client/src/widgets/dialogs/sort_child_notes.ts +++ /dev/null @@ -1,113 +0,0 @@ -import type { EventData } from "../../components/app_context.js"; -import { closeActiveDialog, openDialog } from "../../services/dialog.js"; -import { t } from "../../services/i18n.js"; -import server from "../../services/server.js"; -import BasicWidget from "../basic_widget.js"; - -const TPL = /*html*/``; - -export default class SortChildNotesDialog extends BasicWidget { - - private parentNoteId?: string; - private $form!: JQuery; - - doRender() { - this.$widget = $(TPL); - this.$form = this.$widget.find(".sort-child-notes-form"); - - this.$form.on("submit", async (e) => { - e.preventDefault(); - - const sortBy = this.$form.find("input[name='sort-by']:checked").val(); - const sortDirection = this.$form.find("input[name='sort-direction']:checked").val(); - const foldersFirst = this.$form.find("input[name='sort-folders-first']").is(":checked"); - const sortNatural = this.$form.find("input[name='sort-natural']").is(":checked"); - const sortLocale = this.$form.find("input[name='sort-locale']").val(); - - await server.put(`notes/${this.parentNoteId}/sort-children`, { sortBy, sortDirection, foldersFirst, sortNatural, sortLocale }); - - closeActiveDialog(); - }); - } - - async sortChildNotesEvent({ node }: EventData<"sortChildNotes">) { - this.parentNoteId = node.data.noteId; - - openDialog(this.$widget); - - this.$form.find("input:first").focus(); - } -} diff --git a/apps/client/src/widgets/dialogs/sort_child_notes.tsx b/apps/client/src/widgets/dialogs/sort_child_notes.tsx new file mode 100644 index 000000000..0e07808cf --- /dev/null +++ b/apps/client/src/widgets/dialogs/sort_child_notes.tsx @@ -0,0 +1,104 @@ +import { useState } from "preact/hooks"; +import { EventData } from "../../components/app_context"; +import { closeActiveDialog, openDialog } from "../../services/dialog"; +import { t } from "../../services/i18n"; +import Button from "../react/Button"; +import FormCheckbox from "../react/FormCheckbox"; +import FormRadioGroup from "../react/FormRadioGroup"; +import FormTextBox from "../react/FormTextBox"; +import Modal from "../react/Modal"; +import ReactBasicWidget from "../react/ReactBasicWidget"; +import server from "../../services/server"; + +function SortChildNotesDialogComponent({ parentNoteId }: { parentNoteId?: string }) { + const [ sortBy, setSortBy ] = useState("title"); + const [ sortDirection, setSortDirection ] = useState("asc"); + const [ foldersFirst, setFoldersFirst ] = useState(false); + const [ sortNatural, setSortNatural ] = useState(false); + const [ sortLocale, setSortLocale ] = useState(""); + + async function onSubmit() { + await server.put(`notes/${parentNoteId}/sort-children`, { + sortBy, + sortDirection, + foldersFirst, + sortNatural, + sortLocale + }); + + // Close the dialog after submission + closeActiveDialog(); + } + + return (parentNoteId && + } + > +
{t("sort_child_notes.sorting_criteria")}
+ +
+ +
{t("sort_child_notes.sorting_direction")}
+ +
+ +
{t("sort_child_notes.folders")}
+ +
+ +
{t("sort_child_notes.natural_sort")}
+ + +
+ ) +} + +export default class SortChildNotesDialog extends ReactBasicWidget { + + private parentNoteId?: string; + + get component() { + return ; + } + + async sortChildNotesEvent({ node }: EventData<"sortChildNotes">) { + this.parentNoteId = node.data.noteId; + this.doRender(); + openDialog(this.$widget); + } + + +} \ No newline at end of file diff --git a/apps/client/src/widgets/react/FormCheckbox.tsx b/apps/client/src/widgets/react/FormCheckbox.tsx new file mode 100644 index 000000000..2652ca70a --- /dev/null +++ b/apps/client/src/widgets/react/FormCheckbox.tsx @@ -0,0 +1,23 @@ +interface FormCheckboxProps { + name: string; + label: string; + currentValue?: boolean; + onChange(newValue: boolean): void; +} + +export default function FormCheckbox({ name, label, currentValue, onChange }: FormCheckboxProps) { + return ( +
+ +
+ ); +} \ No newline at end of file diff --git a/apps/client/src/widgets/react/FormRadioGroup.tsx b/apps/client/src/widgets/react/FormRadioGroup.tsx new file mode 100644 index 000000000..a6fd0ebbb --- /dev/null +++ b/apps/client/src/widgets/react/FormRadioGroup.tsx @@ -0,0 +1,30 @@ +interface FormRadioProps { + name: string; + currentValue?: string; + values: { + value: string; + label: string; + }[]; + onChange(newValue: string): void; +} + +export default function FormRadioGroup({ name, values, currentValue, onChange }: FormRadioProps) { + return ( + <> + {(values || []).map(({ value, label }) => ( +
+ +
+ ))} + + ); +} \ No newline at end of file diff --git a/apps/client/src/widgets/react/FormTextBox.tsx b/apps/client/src/widgets/react/FormTextBox.tsx new file mode 100644 index 000000000..0fe83f294 --- /dev/null +++ b/apps/client/src/widgets/react/FormTextBox.tsx @@ -0,0 +1,25 @@ +interface FormTextBoxProps { + name: string; + label: string; + currentValue?: string; + className?: string; + description?: string; + onChange?(newValue: string): void; +} + +export default function FormTextBox({ name, label, description, className, currentValue, onChange }: FormTextBoxProps) { + return ( +
+ +
+ ); +} \ No newline at end of file