From 620b065ac8b8a587c3e0ed7618ab8b3d5520cdd7 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Mon, 10 Nov 2025 16:07:24 +0100 Subject: [PATCH] Refactor dialog handling to utilize utility functions for improved consistency Updated various components to replace direct dialog configurations with utility functions for building dialog configurations. This change enhances the maintainability and readability of the code by centralizing dialog setup logic, ensuring a consistent approach across the application. Additionally, improved error handling and user feedback mechanisms were implemented to provide clearer messages during interactions. --- backend/MYTISCHTENNIS_URL_PARSER_README.md | 10 +- frontend/src/App.vue | 20 +-- frontend/src/components/DIALOGS_OVERVIEW.md | 7 +- .../src/components/MemberTransferDialog.vue | 34 +++-- frontend/src/composables/useDialog.js | 24 +-- frontend/src/store.js | 51 ++++--- frontend/src/utils/dialogUtils.js | 103 +++++++++++++ frontend/src/utils/errorMessages.js | 50 +++++++ frontend/src/utils/storage.js | 35 +++++ frontend/src/views/Activate.vue | 22 ++- frontend/src/views/ClubView.vue | 33 +++-- frontend/src/views/CreateClub.vue | 26 ++-- frontend/src/views/DiaryView.vue | 24 ++- frontend/src/views/Login.vue | 23 ++- .../src/views/MemberTransferSettingsView.vue | 35 +++-- frontend/src/views/MembersView.vue | 73 +++++---- frontend/src/views/MyTischtennisAccount.vue | 3 +- frontend/src/views/OfficialTournaments.vue | 75 ++++++---- frontend/src/views/PendingApprovalsView.vue | 3 +- frontend/src/views/PredefinedActivities.vue | 47 ++++-- frontend/src/views/Register.vue | 22 ++- frontend/src/views/ScheduleView.vue | 27 ++-- frontend/src/views/TeamManagementView.vue | 138 +++++++++++------- frontend/src/views/TournamentsView.vue | 46 +++--- 24 files changed, 608 insertions(+), 323 deletions(-) create mode 100644 frontend/src/utils/dialogUtils.js create mode 100644 frontend/src/utils/errorMessages.js create mode 100644 frontend/src/utils/storage.js diff --git a/backend/MYTISCHTENNIS_URL_PARSER_README.md b/backend/MYTISCHTENNIS_URL_PARSER_README.md index a54eff9..2b006bb 100644 --- a/backend/MYTISCHTENNIS_URL_PARSER_README.md +++ b/backend/MYTISCHTENNIS_URL_PARSER_README.md @@ -203,7 +203,8 @@ export default { this.parsedData = result.data; } catch (error) { console.error('Fehler beim Parsen:', error); - alert('URL konnte nicht geparst werden'); + // Hinweis: Im Frontend stattdessen InfoDialog/ConfirmDialog verwenden + // alert('URL konnte nicht geparst werden'); } }, @@ -227,11 +228,14 @@ export default { const result = await response.json(); if (result.success) { - alert('Team erfolgreich konfiguriert!'); + // In der Anwendung bitte InfoDialog nutzen + // alert('Team erfolgreich konfiguriert!'); + } else { + // alert('Team konnte nicht konfiguriert werden'); } } catch (error) { console.error('Fehler bei Konfiguration:', error); - alert('Team konnte nicht konfiguriert werden'); + // alert('Team konnte nicht konfiguriert werden'); } } } diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 264ea36..751fcb7 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -161,9 +161,9 @@ import { mapGetters, mapActions } from 'vuex'; import apiClient from './apiClient.js'; import logoUrl from './assets/logo.png'; import DialogManager from './components/DialogManager.vue'; - import InfoDialog from './components/InfoDialog.vue'; import ConfirmDialog from './components/ConfirmDialog.vue'; +import { buildInfoConfig, buildConfirmConfig } from './utils/dialogUtils.js'; export default { name: 'App', components: { @@ -255,25 +255,19 @@ export default { }, // Dialog Helper Methods async showInfo(title, message, details = '', type = 'info') { - this.infoDialog = { - isOpen: true, - title, - message, - details, - type - }; + this.infoDialog = buildInfoConfig({ title, message, details, type }); }, - async showConfirm(title, message, details = '', type = 'info') { + async showConfirm(title, message, details = '', type = 'info', options = {}) { return new Promise((resolve) => { - this.confirmDialog = { - isOpen: true, + this.confirmDialog = buildConfirmConfig({ title, message, details, type, - resolveCallback: resolve - }; + resolveCallback: resolve, + ...options, + }); }); }, diff --git a/frontend/src/components/DIALOGS_OVERVIEW.md b/frontend/src/components/DIALOGS_OVERVIEW.md index 73949e8..2d52987 100644 --- a/frontend/src/components/DIALOGS_OVERVIEW.md +++ b/frontend/src/components/DIALOGS_OVERVIEW.md @@ -1,5 +1,7 @@ # Dialog-Komponenten Übersicht +> Hinweis: Alle Beispiele verwenden unsere Dialog-Komponenten (`InfoDialog`, `ConfirmDialog`). Klassische Browser-Dialoge (`alert`, `confirm`) werden ausschließlich zu Vergleichszwecken genannt und sollen nicht in produktivem Code eingesetzt werden. + ## 📋 Alle verfügbaren Dialog-Komponenten ### Basis-Komponenten @@ -281,8 +283,9 @@ await showInfo({ **Vorher:** ```javascript -alert('Fehler!'); -if (confirm('Löschen?')) { ... } +// Nicht mehr verwenden: +// alert('Fehler!'); +// if (confirm('Löschen?')) { ... } ``` **Nachher:** diff --git a/frontend/src/components/MemberTransferDialog.vue b/frontend/src/components/MemberTransferDialog.vue index 8442481..4d6b0f9 100644 --- a/frontend/src/components/MemberTransferDialog.vue +++ b/frontend/src/components/MemberTransferDialog.vue @@ -122,6 +122,7 @@