From 24c2b54bc991208e8926b039267a3cc85bf1dd94 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 5 Mar 2025 17:23:22 +0200 Subject: [PATCH] feat(note_language): reload list of languages when changed --- src/public/app/widgets/note_language.ts | 50 ++++++++++++++----------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/src/public/app/widgets/note_language.ts b/src/public/app/widgets/note_language.ts index 77690d708..c5a87cc1c 100644 --- a/src/public/app/widgets/note_language.ts +++ b/src/public/app/widgets/note_language.ts @@ -44,27 +44,7 @@ export default class NoteLanguageWidget extends NoteContextAwareWidget { constructor() { super(); - - const enabledLanguages = JSON.parse(options.get("languages") ?? "[]") as string[]; - const filteredLanguages = getAvailableLocales().filter((l) => typeof l !== "object" || enabledLanguages.includes(l.id)); - const leftToRightLanguages = filteredLanguages.filter((l) => !l.rtl); - const rightToLeftLanguages = filteredLanguages.filter((l) => l.rtl); - - this.locales = [ - DEFAULT_LOCALE, - "---", - ...leftToRightLanguages - ]; - - if (rightToLeftLanguages.length > 0) { - this.locales = [ - ...this.locales, - "---", - ...rightToLeftLanguages - ]; - } - - this.locales.push("---"); // this will separate the list of languages from the "Configure languages" button. + this.locales = NoteLanguageWidget.#buildLocales(); } doRender() { @@ -133,9 +113,37 @@ export default class NoteLanguageWidget extends NoteContextAwareWidget { } async entitiesReloadedEvent({ loadResults }: EventData<"entitiesReloaded">) { + if (loadResults.isOptionReloaded("languages")) { + this.locales = NoteLanguageWidget.#buildLocales(); + } + if (loadResults.getAttributeRows().find((a) => a.noteId === this.noteId && a.name === "language")) { this.refresh(); } } + static #buildLocales() { + const enabledLanguages = JSON.parse(options.get("languages") ?? "[]") as string[]; + const filteredLanguages = getAvailableLocales().filter((l) => typeof l !== "object" || enabledLanguages.includes(l.id)); + const leftToRightLanguages = filteredLanguages.filter((l) => !l.rtl); + const rightToLeftLanguages = filteredLanguages.filter((l) => l.rtl); + + let locales: ("---" | Locale)[] = [ + DEFAULT_LOCALE, + "---", + ...leftToRightLanguages + ]; + + if (rightToLeftLanguages.length > 0) { + locales = [ + ...locales, + "---", + ...rightToLeftLanguages + ]; + } + + locales.push("---"); // this will separate the list of languages from the "Configure languages" button. + return locales; + } + }