From f05e5f8f008b594d6eb16c0f907409274a8597ff Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Fri, 2 Oct 2026 18:32:22 +0200 Subject: [PATCH] add dialog to confirm chat deletion --- dist/index.js | 61 ++++++++++++++++++---- dist/sw.js | 2 +- dist/version.txt | 2 +- src/View/ChatPages/settingsPage.tsx | 10 ++-- src/View/Components/confirmationDialog.tsx | 47 +++++++++++++++++ src/View/translations.ts | 9 ++++ 6 files changed, 117 insertions(+), 14 deletions(-) create mode 100644 src/View/Components/confirmationDialog.tsx diff --git a/dist/index.js b/dist/index.js index 9e10f481..fd68b39a 100644 --- a/dist/index.js +++ b/dist/index.js @@ -480,7 +480,9 @@ showEncryptionKey: "Show encryption key", randomizeKey: "Randomize", setColorButtonAudioLabel: "set color", - deleteChatButton: "Delete entire chat" + deleteChatButton: "Delete entire chat", + deleteChatHeadline: "Delete chat?", + deleteChatDescription: "This will delete all messages, tasks, and other data related to this chat from device." }, message: { messagesHeadline: "Messages", @@ -746,7 +748,9 @@ showEncryptionKey: "Schl\xFCssel anzeigen", randomizeKey: "Zuf\xE4llig generieren", setColorButtonAudioLabel: "Farbe festlegen", - deleteChatButton: "Gesamten Chat l\xF6schen" + deleteChatButton: "Gesamten Chat l\xF6schen", + deleteChatHeadline: "Gesamten Chat l\xF6schen?", + deleteChatDescription: "Dies l\xF6scht alle Nachrichten, Aufgaben und alle anderen Daten, die zu diesem Chat geh\xF6ren." }, message: { messagesHeadline: "Nachrichten", @@ -999,7 +1003,9 @@ showEncryptionKey: "Mostrar clave de encriptaci\xF3n", randomizeKey: "Aleatorizar", setColorButtonAudioLabel: "establecer color", - deleteChatButton: "Eliminar todo el chat" + deleteChatButton: "Eliminar todo el chat", + deleteChatHeadline: "\xBFEliminar chat?", + deleteChatDescription: "\xBFQuieres borrar todas las mensajes, tareas y otros datos que pertenecen a este chat?" }, message: { messagesHeadline: "Mensajes", @@ -6700,6 +6706,48 @@ ); } + // src/View/Components/confirmationDialog.tsx + function ConfirmationDialog(coreViewModel2, buttonLabel, icon, headline, description, action) { + const isModalOpen = new State(false); + function openModal() { + isModalOpen.value = true; + } + function closeModal() { + isModalOpen.value = false; + } + return /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement( + "button", + { + class: "danger width-100", + "on:click": openModal + }, + /* @__PURE__ */ createElement("span", null, buttonLabel), + /* @__PURE__ */ createElement("span", { class: "icon" }, icon) + ), /* @__PURE__ */ createElement( + "div", + { + class: "modal", + "toggle:open": isModalOpen + }, + /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, headline), /* @__PURE__ */ createElement("p", { class: "secondary" }, description)), /* @__PURE__ */ createElement("div", { class: "flex-row" }, /* @__PURE__ */ createElement( + "button", + { + class: "standard width-50", + "on:click": closeModal + }, + coreViewModel2.translations.general.cancelButton + ), /* @__PURE__ */ createElement( + "button", + { + class: "danger width-50", + "on:click": action + }, + /* @__PURE__ */ createElement("span", null, buttonLabel), + /* @__PURE__ */ createElement("span", { class: "icon" }, icon) + ))) + )); + } + // src/View/ChatPages/settingsPage.tsx function SettingsPage(coreViewModel2, settingsPageViewModel) { settingsPageViewModel.loadData(); @@ -6796,12 +6844,7 @@ }, coreViewModel2.translations.general.setButton, /* @__PURE__ */ createElement("span", { class: "icon" }, "check") - )), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("div", { class: "width-input" }, DangerousActionButton( - coreViewModel2, - coreViewModel2.translations.chatPage.settings.deleteChatButton, - "chat_error", - settingsPageViewModel.remove - )))))); + )), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("div", { class: "width-input" }, ConfirmationDialog(coreViewModel2, coreViewModel2.translations.chatPage.settings.deleteChatButton, "delete_forever", coreViewModel2.translations.chatPage.settings.deleteChatHeadline, coreViewModel2.translations.chatPage.settings.deleteChatDescription, settingsPageViewModel.remove)))))); } // src/View/Components/messageReactionFilterButton.tsx diff --git a/dist/sw.js b/dist/sw.js index 385cd216..647fb29f 100644 --- a/dist/sw.js +++ b/dist/sw.js @@ -1,4 +1,4 @@ -const VERSION = "2610 Beta 21.20" +const VERSION = "2610 Beta 21.24" function processUrl(event) { const url = event.request.url; diff --git a/dist/version.txt b/dist/version.txt index cc513537..a44c31b3 100644 --- a/dist/version.txt +++ b/dist/version.txt @@ -1 +1 @@ -2610 Beta 21.20 +2610 Beta 21.24 diff --git a/src/View/ChatPages/settingsPage.tsx b/src/View/ChatPages/settingsPage.tsx index ca2acb8b..2de4943b 100644 --- a/src/View/ChatPages/settingsPage.tsx +++ b/src/View/ChatPages/settingsPage.tsx @@ -1,5 +1,5 @@ import { DeletableListItem } from "../Components/deletableListItem"; -import { DangerousActionButton } from "../Components/dangerousActionButton"; +import { ConfirmationDialog } from "../Components/confirmationDialog"; import { ColorPicker } from "../Components/colorPicker"; import * as React from "../../react"; import SettingsPageViewModel from "../../ViewModel/Pages/settingsPageViewModel"; @@ -203,11 +203,15 @@ export function SettingsPage(
- {DangerousActionButton( + {ConfirmationDialog( coreViewModel, coreViewModel.translations.chatPage.settings .deleteChatButton, - "chat_error", + "delete_forever", + coreViewModel.translations.chatPage.settings + .deleteChatHeadline, + coreViewModel.translations.chatPage.settings + .deleteChatDescription, settingsPageViewModel.remove, )}
diff --git a/src/View/Components/confirmationDialog.tsx b/src/View/Components/confirmationDialog.tsx new file mode 100644 index 00000000..840a8a5c --- /dev/null +++ b/src/View/Components/confirmationDialog.tsx @@ -0,0 +1,47 @@ +import * as React from "../../react"; +import CoreViewModel from "../../ViewModel/Global/coreViewModel"; + +export function ConfirmationDialog( + coreViewModel: CoreViewModel, + buttonLabel: string, + icon: string, + headline: string, + description: string, + action: () => void, +) { + const isModalOpen = new React.State(false); + + function openModal() { + isModalOpen.value = true; + } + function closeModal() { + isModalOpen.value = false; + } + + return ( +
+ + + +
+ ); +} diff --git a/src/View/translations.ts b/src/View/translations.ts index 9cd650fd..1fabb028 100644 --- a/src/View/translations.ts +++ b/src/View/translations.ts @@ -244,6 +244,9 @@ const englishTranslations = { setColorButtonAudioLabel: "set color", deleteChatButton: "Delete entire chat", + deleteChatHeadline: "Delete chat?", + deleteChatDescription: + "This will delete all messages, tasks, and other data related to this chat from device.", }, message: { @@ -618,6 +621,9 @@ export const allTranslations: { setColorButtonAudioLabel: "Farbe festlegen", deleteChatButton: "Gesamten Chat löschen", + deleteChatHeadline: "Gesamten Chat löschen?", + deleteChatDescription: + "Dies löscht alle Nachrichten, Aufgaben und alle anderen Daten, die zu diesem Chat gehören.", }, message: { @@ -965,6 +971,9 @@ export const allTranslations: { setColorButtonAudioLabel: "establecer color", deleteChatButton: "Eliminar todo el chat", + deleteChatHeadline: "¿Eliminar chat?", + deleteChatDescription: + "¿Quieres borrar todas las mensajes, tareas y otros datos que pertenecen a este chat?", }, message: {