From 55c2c0141826807aa4cb7864288c320cb9173df3 Mon Sep 17 00:00:00 2001 From: troogs Date: Fri, 3 Apr 2026 12:59:06 +0200 Subject: [PATCH] refactor(app): move account razor inline code to partial classes --- .../Components/Accounts/AccountCard.razor | 5 - .../Components/Accounts/AccountCard.razor.cs | 20 ++ .../Components/Accounts/AccountCardList.razor | 3 - .../Accounts/AccountCardList.razor.cs | 14 ++ .../Components/Accounts/EntryRow.razor | 14 -- .../Components/Accounts/EntryRow.razor.cs | 43 ++++ .../Components/Accounts/EntryTable.razor | 6 - .../Components/Accounts/EntryTable.razor.cs | 23 +++ .../Pages/Accounts/AccountDetail.razor | 153 -------------- .../Pages/Accounts/AccountDetail.razor.cs | 194 ++++++++++++++++++ 10 files changed, 294 insertions(+), 181 deletions(-) create mode 100644 src/Duempelkas.App/Components/Accounts/AccountCard.razor.cs create mode 100644 src/Duempelkas.App/Components/Accounts/AccountCardList.razor.cs create mode 100644 src/Duempelkas.App/Components/Accounts/EntryRow.razor.cs create mode 100644 src/Duempelkas.App/Components/Accounts/EntryTable.razor.cs create mode 100644 src/Duempelkas.App/Pages/Accounts/AccountDetail.razor.cs diff --git a/src/Duempelkas.App/Components/Accounts/AccountCard.razor b/src/Duempelkas.App/Components/Accounts/AccountCard.razor index defcf1e..e11d803 100644 --- a/src/Duempelkas.App/Components/Accounts/AccountCard.razor +++ b/src/Duempelkas.App/Components/Accounts/AccountCard.razor @@ -9,8 +9,3 @@ -@code { - [Parameter] public AccountSummaryDto Account { get; set; } = default!; - - private void Navigate() => Navigation.NavigateTo($"/accounts/{Account.Id}"); -} diff --git a/src/Duempelkas.App/Components/Accounts/AccountCard.razor.cs b/src/Duempelkas.App/Components/Accounts/AccountCard.razor.cs new file mode 100644 index 0000000..f07a2fd --- /dev/null +++ b/src/Duempelkas.App/Components/Accounts/AccountCard.razor.cs @@ -0,0 +1,20 @@ +using Duempelkas.App.Services.Models; +using Microsoft.AspNetCore.Components; + +namespace Duempelkas.App.Components.Accounts; + +public partial class AccountCard +{ + #region Parameters + + [Parameter] + public AccountSummaryDto Account { get; set; } = default!; + + #endregion + + #region Actions + + private void Navigate() => Navigation.NavigateTo($"/accounts/{Account.Id}"); + + #endregion +} diff --git a/src/Duempelkas.App/Components/Accounts/AccountCardList.razor b/src/Duempelkas.App/Components/Accounts/AccountCardList.razor index 39f62a4..28ec5dc 100644 --- a/src/Duempelkas.App/Components/Accounts/AccountCardList.razor +++ b/src/Duempelkas.App/Components/Accounts/AccountCardList.razor @@ -7,6 +7,3 @@ } -@code { - [Parameter] public List Accounts { get; set; } = new(); -} diff --git a/src/Duempelkas.App/Components/Accounts/AccountCardList.razor.cs b/src/Duempelkas.App/Components/Accounts/AccountCardList.razor.cs new file mode 100644 index 0000000..3d32579 --- /dev/null +++ b/src/Duempelkas.App/Components/Accounts/AccountCardList.razor.cs @@ -0,0 +1,14 @@ +using Duempelkas.App.Services.Models; +using Microsoft.AspNetCore.Components; + +namespace Duempelkas.App.Components.Accounts; + +public partial class AccountCardList +{ + #region Parameters + + [Parameter] + public List Accounts { get; set; } = new(); + + #endregion +} diff --git a/src/Duempelkas.App/Components/Accounts/EntryRow.razor b/src/Duempelkas.App/Components/Accounts/EntryRow.razor index cac4432..4138c7b 100644 --- a/src/Duempelkas.App/Components/Accounts/EntryRow.razor +++ b/src/Duempelkas.App/Components/Accounts/EntryRow.razor @@ -34,17 +34,3 @@ -@code { - [Parameter] public EntryDto Entry { get; set; } = default!; - [Parameter] public EventCallback OnDelete { get; set; } - [Parameter] public EventCallback OnRestore { get; set; } - [Parameter] public EventCallback OnEdit { get; set; } - - private string GetRowClass() - { - var classes = new List(); - if (Entry.IsTransfer) classes.Add("entry-row-transfer"); - if (Entry.IsDeleted) classes.Add("entry-deleted"); - return string.Join(" ", classes); - } -} diff --git a/src/Duempelkas.App/Components/Accounts/EntryRow.razor.cs b/src/Duempelkas.App/Components/Accounts/EntryRow.razor.cs new file mode 100644 index 0000000..a21d523 --- /dev/null +++ b/src/Duempelkas.App/Components/Accounts/EntryRow.razor.cs @@ -0,0 +1,43 @@ +using Duempelkas.App.Services.Models; +using Microsoft.AspNetCore.Components; + +namespace Duempelkas.App.Components.Accounts; + +public partial class EntryRow +{ + #region Parameters + + [Parameter] + public EntryDto Entry { get; set; } = default!; + + [Parameter] + public EventCallback OnDelete { get; set; } + + [Parameter] + public EventCallback OnRestore { get; set; } + + [Parameter] + public EventCallback OnEdit { get; set; } + + #endregion + + #region Helpers + + private string GetRowClass() + { + var classes = new List(); + if (Entry.IsTransfer) + { + classes.Add("entry-row-transfer"); + } + + if (Entry.IsDeleted) + { + classes.Add("entry-deleted"); + } + + return string.Join(" ", classes); + } + + #endregion +} diff --git a/src/Duempelkas.App/Components/Accounts/EntryTable.razor b/src/Duempelkas.App/Components/Accounts/EntryTable.razor index 8bf33aa..0ad0a17 100644 --- a/src/Duempelkas.App/Components/Accounts/EntryTable.razor +++ b/src/Duempelkas.App/Components/Accounts/EntryTable.razor @@ -23,9 +23,3 @@
Keine Buchungen vorhanden.
} -@code { - [Parameter] public List Entries { get; set; } = new(); - [Parameter] public EventCallback OnDeleteEntry { get; set; } - [Parameter] public EventCallback OnRestoreEntry { get; set; } - [Parameter] public EventCallback OnEditEntry { get; set; } -} diff --git a/src/Duempelkas.App/Components/Accounts/EntryTable.razor.cs b/src/Duempelkas.App/Components/Accounts/EntryTable.razor.cs new file mode 100644 index 0000000..87236e0 --- /dev/null +++ b/src/Duempelkas.App/Components/Accounts/EntryTable.razor.cs @@ -0,0 +1,23 @@ +using Duempelkas.App.Services.Models; +using Microsoft.AspNetCore.Components; + +namespace Duempelkas.App.Components.Accounts; + +public partial class EntryTable +{ + #region Parameters + + [Parameter] + public List Entries { get; set; } = new(); + + [Parameter] + public EventCallback OnDeleteEntry { get; set; } + + [Parameter] + public EventCallback OnRestoreEntry { get; set; } + + [Parameter] + public EventCallback OnEditEntry { get; set; } + + #endregion +} diff --git a/src/Duempelkas.App/Pages/Accounts/AccountDetail.razor b/src/Duempelkas.App/Pages/Accounts/AccountDetail.razor index 33e7f92..cdbdfd5 100644 --- a/src/Duempelkas.App/Pages/Accounts/AccountDetail.razor +++ b/src/Duempelkas.App/Pages/Accounts/AccountDetail.razor @@ -179,156 +179,3 @@ OnCancel="() => editingTransferEntry = null" /> } -@code { - [Parameter] public int AccountId { get; set; } - - private AccountSummaryDto? account; - private AccountBalanceDto? balance; - private List? entries; - private bool showAddEntry, showAddTransfer; - private bool showEditName, showEditCarryover; - private bool showCurrentYearOnly = true; - - private int? confirmDeleteEntryId; - private string? confirmDeleteEntryTitle; - - private int? confirmRestoreEntryId; - private string? confirmRestoreEntryTitle; - - private string? savedPdfPath; - - private EntryDto? editingEntry; - private EntryDto? editingTransferEntry; - - private void NavigateBack() => Navigation.NavigateTo("/"); - - protected override async Task OnParametersSetAsync() - { - await LoadAll(); - } - - private async Task LoadAll() - { - account = await AccountService.GetAccountAsync(AccountId); - balance = await BalanceQueryService.GetAccountBalanceAsync(AccountId); - entries = await EntryService.GetEntriesAsync(AccountId, showCurrentYearOnly); - } - - private async Task ToggleYearFilter() - { - showCurrentYearOnly = !showCurrentYearOnly; - entries = await EntryService.GetEntriesAsync(AccountId, showCurrentYearOnly); - } - - private async Task HandleSaveName(string newName) - { - await AccountService.RenameAccountAsync(AccountId, newName); - showEditName = false; - await LoadAll(); - } - - private async Task HandleSaveCarryover(decimal newAmount) - { - await AccountService.UpdateCarryoverAsync(AccountId, newAmount); - showEditCarryover = false; - await LoadAll(); - } - - private async Task HandleEntryCreated() - { - showAddEntry = false; - await LoadAll(); - } - - private async Task HandleTransferCreated() - { - showAddTransfer = false; - await LoadAll(); - } - - private void RequestDeleteEntry(int entryId) - { - confirmDeleteEntryId = entryId; - confirmDeleteEntryTitle = entries?.FirstOrDefault(e => e.Id == entryId)?.Title; - } - - private void CancelDeleteConfirm() - { - confirmDeleteEntryId = null; - confirmDeleteEntryTitle = null; - } - - private async Task HandleConfirmDelete() - { - if (confirmDeleteEntryId.HasValue) - { - await EntryService.DeleteEntryAsync(confirmDeleteEntryId.Value); - confirmDeleteEntryId = null; - confirmDeleteEntryTitle = null; - await LoadAll(); - } - } - - private void RequestRestoreEntry(int entryId) - { - confirmRestoreEntryId = entryId; - confirmRestoreEntryTitle = entries?.FirstOrDefault(e => e.Id == entryId)?.Title; - } - - private void CancelRestoreConfirm() - { - confirmRestoreEntryId = null; - confirmRestoreEntryTitle = null; - } - - private async Task HandleConfirmRestore() - { - if (confirmRestoreEntryId.HasValue) - { - await EntryService.RestoreEntryAsync(confirmRestoreEntryId.Value); - confirmRestoreEntryId = null; - confirmRestoreEntryTitle = null; - await LoadAll(); - } - } - - private void RequestEditEntry(int entryId) - { - var entry = entries?.FirstOrDefault(e => e.Id == entryId); - if (entry?.IsTransfer == true) - editingTransferEntry = entry; - else - editingEntry = entry; - } - - private async Task HandleEntryEdited() - { - editingEntry = null; - editingTransferEntry = null; - await LoadAll(); - } - - private async Task HandleExport() - { - var pdf = await PdfStatementService.GenerateStatementAsync(AccountId, showCurrentYearOnly); - var suffix = showCurrentYearOnly ? $"_{DateTime.Now.Year}" : "_Gesamt"; - savedPdfPath = await FileSaveService.SaveFileAsync(pdf, $"{account?.Name}{suffix}.pdf"); - } - - private async Task HandleOpenSavedPdf() - { - if (!string.IsNullOrWhiteSpace(savedPdfPath)) - { - await FileSaveService.OpenFileAsync(savedPdfPath); - } - - savedPdfPath = null; - } - - private void CancelOpenSavedPdf() - { - savedPdfPath = null; - } - - private static string FormatAmount(decimal amount) => $"{amount:N2} €"; -} diff --git a/src/Duempelkas.App/Pages/Accounts/AccountDetail.razor.cs b/src/Duempelkas.App/Pages/Accounts/AccountDetail.razor.cs new file mode 100644 index 0000000..2dac2ed --- /dev/null +++ b/src/Duempelkas.App/Pages/Accounts/AccountDetail.razor.cs @@ -0,0 +1,194 @@ +using Duempelkas.App.Services.Models; +using Microsoft.AspNetCore.Components; + +namespace Duempelkas.App.Pages.Accounts; + +public partial class AccountDetail +{ + #region Parameters + + [Parameter] + public int AccountId { get; set; } + + #endregion + + #region Fields + + private AccountSummaryDto? account; + private AccountBalanceDto? balance; + private List? entries; + private bool showAddEntry; + private bool showAddTransfer; + private bool showEditName; + private bool showEditCarryover; + private bool showCurrentYearOnly = true; + + private int? confirmDeleteEntryId; + private string? confirmDeleteEntryTitle; + + private int? confirmRestoreEntryId; + private string? confirmRestoreEntryTitle; + + private string? savedPdfPath; + + private EntryDto? editingEntry; + private EntryDto? editingTransferEntry; + + #endregion + + #region Navigation + + private void NavigateBack() => Navigation.NavigateTo("/"); + + #endregion + + #region Lifecycle + + protected override async Task OnParametersSetAsync() + { + await LoadAll(); + } + + #endregion + + #region Data Loading + + private async Task LoadAll() + { + account = await AccountService.GetAccountAsync(AccountId); + balance = await BalanceQueryService.GetAccountBalanceAsync(AccountId); + entries = await EntryService.GetEntriesAsync(AccountId, showCurrentYearOnly); + } + + private async Task ToggleYearFilter() + { + showCurrentYearOnly = !showCurrentYearOnly; + entries = await EntryService.GetEntriesAsync(AccountId, showCurrentYearOnly); + } + + #endregion + + #region Actions + + private async Task HandleSaveName(string newName) + { + await AccountService.RenameAccountAsync(AccountId, newName); + showEditName = false; + await LoadAll(); + } + + private async Task HandleSaveCarryover(decimal newAmount) + { + await AccountService.UpdateCarryoverAsync(AccountId, newAmount); + showEditCarryover = false; + await LoadAll(); + } + + private async Task HandleEntryCreated() + { + showAddEntry = false; + await LoadAll(); + } + + private async Task HandleTransferCreated() + { + showAddTransfer = false; + await LoadAll(); + } + + private void RequestDeleteEntry(int entryId) + { + confirmDeleteEntryId = entryId; + confirmDeleteEntryTitle = entries?.FirstOrDefault(e => e.Id == entryId)?.Title; + } + + private void CancelDeleteConfirm() + { + confirmDeleteEntryId = null; + confirmDeleteEntryTitle = null; + } + + private async Task HandleConfirmDelete() + { + if (confirmDeleteEntryId.HasValue) + { + await EntryService.DeleteEntryAsync(confirmDeleteEntryId.Value); + confirmDeleteEntryId = null; + confirmDeleteEntryTitle = null; + await LoadAll(); + } + } + + private void RequestRestoreEntry(int entryId) + { + confirmRestoreEntryId = entryId; + confirmRestoreEntryTitle = entries?.FirstOrDefault(e => e.Id == entryId)?.Title; + } + + private void CancelRestoreConfirm() + { + confirmRestoreEntryId = null; + confirmRestoreEntryTitle = null; + } + + private async Task HandleConfirmRestore() + { + if (confirmRestoreEntryId.HasValue) + { + await EntryService.RestoreEntryAsync(confirmRestoreEntryId.Value); + confirmRestoreEntryId = null; + confirmRestoreEntryTitle = null; + await LoadAll(); + } + } + + private void RequestEditEntry(int entryId) + { + var entry = entries?.FirstOrDefault(e => e.Id == entryId); + if (entry?.IsTransfer == true) + { + editingTransferEntry = entry; + } + else + { + editingEntry = entry; + } + } + + private async Task HandleEntryEdited() + { + editingEntry = null; + editingTransferEntry = null; + await LoadAll(); + } + + private async Task HandleExport() + { + var pdf = await PdfStatementService.GenerateStatementAsync(AccountId, showCurrentYearOnly); + var suffix = showCurrentYearOnly ? $"_{DateTime.Now.Year}" : "_Gesamt"; + savedPdfPath = await FileSaveService.SaveFileAsync(pdf, $"{account?.Name}{suffix}.pdf"); + } + + private async Task HandleOpenSavedPdf() + { + if (!string.IsNullOrWhiteSpace(savedPdfPath)) + { + await FileSaveService.OpenFileAsync(savedPdfPath); + } + + savedPdfPath = null; + } + + private void CancelOpenSavedPdf() + { + savedPdfPath = null; + } + + #endregion + + #region Helpers + + private static string FormatAmount(decimal amount) => $"{amount:N2} €"; + + #endregion +}