From 040e0fd8bf108fe00d91b843b34ed373616a13ed Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 1 Apr 2024 02:29:37 +0200 Subject: [PATCH] UX: fix #1829 --- .../ThemeConfig/Conversion/Validation.ts | 2 +- .../Helpers/TranslationInput.svelte | 67 +++++++++++++------ 2 files changed, 49 insertions(+), 20 deletions(-) diff --git a/src/Models/ThemeConfig/Conversion/Validation.ts b/src/Models/ThemeConfig/Conversion/Validation.ts index d13afe8b04..520fd10ed5 100644 --- a/src/Models/ThemeConfig/Conversion/Validation.ts +++ b/src/Models/ThemeConfig/Conversion/Validation.ts @@ -852,7 +852,7 @@ class CheckTranslation extends DesugaringStep { for (const key of keys) { const lng = json[key] if (lng === "") { - context.enter(lng).err("Got an empty string in translation for language " + lng) + context.enter(lng).err("Got an empty string in translation for language " + key) } // TODO validate that all subparts are here diff --git a/src/UI/InputElement/Helpers/TranslationInput.svelte b/src/UI/InputElement/Helpers/TranslationInput.svelte index b491747214..780d853954 100644 --- a/src/UI/InputElement/Helpers/TranslationInput.svelte +++ b/src/UI/InputElement/Helpers/TranslationInput.svelte @@ -3,6 +3,7 @@ import LanguageUtils from "../../../Utils/LanguageUtils" import { createEventDispatcher, onDestroy } from "svelte" import ValidatedInput from "../ValidatedInput.svelte" + import { del } from "idb-keyval" export let value: UIEventSource> = new UIEventSource< Record @@ -18,14 +19,25 @@ const allLanguages: string[] = LanguageUtils.usedLanguagesSorted let currentLang = new UIEventSource("en") const currentVal = new UIEventSource("") + /** + * Mostly the same as currentVal, but might be the empty string as well + */ + const currentValRaw = new UIEventSource("") + let dispatch = createEventDispatcher<{ submit }>() function update() { - const v = currentVal.data + let v = currentValRaw.data const l = currentLang.data + console.log("Updating translation input for value", v, " and language", l) if (translations.data === "" || translations.data === undefined) { translations.data = {} } + if (v === "") { + delete translations.data[l] + translations.ping() + return + } if (translations.data[l] === v) { return } @@ -39,35 +51,52 @@ translations.data = {} } translations.data[currentLang] = translations.data[currentLang] ?? "" - currentVal.setData(translations.data[currentLang]) + if (translations.data[currentLang] === "") { + delete translations.data[currentLang] + } + currentVal.setData(translations.data[currentLang] ?? "") + currentValRaw.setData(translations.data[currentLang]) }) ) onDestroy( - currentVal.addCallbackAndRunD(() => { + currentValRaw.addCallbackAndRunD(() => { update() }) ) - -
+ +
+
{prefix} - - dispatch("submit")} - /> - + + dispatch("submit")} + /> + {postfix} + +
+ You have currently set translations for +
    + {#each Object.keys($translations) as l} +
  • + {/each} +