From 25e58b622d55b60d7911f5ad582331d50d9a94cc Mon Sep 17 00:00:00 2001 From: Duy Dao Date: Sat, 12 Jul 2025 08:42:12 +0700 Subject: [PATCH] fix: Show progress circular on CaddyReverseProxiesPage when saving and restarting from editor --- .../CaddyReverseProxiesPage.razor | 2 +- .../CaddyReverseProxiesPage.razor.cs | 9 ++++--- .../CaddyReverseProxyItem.razor.cs | 13 ++++++++- .../CaddyfileEditor/CaddyfileEditor.razor.cs | 27 ++++++++++++------- 4 files changed, 36 insertions(+), 15 deletions(-) diff --git a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor index 4d82882..40df286 100644 --- a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor +++ b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor @@ -28,7 +28,7 @@ @bind-SelectedValues="_selectedCaddyConfigurations"> @foreach (var (index, caddyConfig) in _availableCaddyConfigurations.Index()) { - + @if (index < _availableCaddyConfigurations.Count - 1) { diff --git a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs index f3288ae..73e7dbb 100644 --- a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs +++ b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs @@ -42,11 +42,11 @@ public partial class CaddyReverseProxiesPage : ComponentBase private async Task NewReverseProxy() { var dialog = await DialogService.ShowAsync("New configuration", - options: new DialogOptions + options: new MudBlazor.DialogOptions { FullWidth = true, - MaxWidth = MaxWidth.Medium - }, parameters: new DialogParameters + MaxWidth = MudBlazor.MaxWidth.Medium + }, parameters: new MudBlazor.DialogParameters { { "FileName", string.Empty } }); @@ -56,6 +56,7 @@ public partial class CaddyReverseProxiesPage : ComponentBase if (result is { Data: bool, Canceled: false } && (bool)result.Data) { Refresh(); + await RestartCaddy(); } } @@ -127,6 +128,8 @@ public partial class CaddyReverseProxiesPage : ComponentBase _isProcessing = true; StateHasChanged(); Snackbar.Add("Restarting Caddy container", Severity.Info); + // Added a small delay for debugging purposes to ensure UI renders + await Task.Delay(100); await DockerService.RestartCaddyContainerAsync(); Snackbar.Add("Caddy container restarted successfully", Severity.Success); _isProcessing = false; diff --git a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor.cs b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor.cs index db68653..938da40 100644 --- a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor.cs +++ b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor.cs @@ -16,6 +16,12 @@ public partial class CaddyReverseProxyItem : ComponentBase /// [Parameter] public string FileName { get; set; } = string.Empty; + + /// + /// Callback to refresh the Caddy reverse proxies on the main page + /// + [Parameter] + public EventCallback OnCaddyRestartRequired { get; set; } /// /// Dialog service for showing the Caddy file editor dialog @@ -63,8 +69,13 @@ public partial class CaddyReverseProxyItem : ComponentBase { "FileName", FileName } }); - await dialog.Result; + var result = await dialog.Result; + if (result is { Data: bool, Canceled: false } && (bool)result.Data) + { + await OnCaddyRestartRequired.InvokeAsync(); + } + Refresh(); } } \ No newline at end of file diff --git a/CaddyManager/Components/Pages/Caddy/CaddyfileEditor/CaddyfileEditor.razor.cs b/CaddyManager/Components/Pages/Caddy/CaddyfileEditor/CaddyfileEditor.razor.cs index 1018032..522904a 100644 --- a/CaddyManager/Components/Pages/Caddy/CaddyfileEditor/CaddyfileEditor.razor.cs +++ b/CaddyManager/Components/Pages/Caddy/CaddyfileEditor/CaddyfileEditor.razor.cs @@ -78,11 +78,12 @@ public partial class CaddyfileEditor : ComponentBase if (response.Success) { Snackbar.Add($"{FileName} Caddy configuration saved successfully", Severity.Success); - MudDialog.Close(DialogResult.Ok(true)); + MudDialog.Close(DialogResult.Ok(false)); // Indicate successful save but no restart } else { Snackbar.Add(response.Message, Severity.Error); + MudDialog.Close(DialogResult.Ok(false)); // Indicate failed save } } @@ -99,18 +100,24 @@ public partial class CaddyfileEditor : ComponentBase /// private async Task SaveAndRestart() { - await Submit(); - - // Restart the Caddy container - try + var submitResponse = CaddyService.SaveCaddyConfiguration(new CaddySaveConfigurationRequest { - Snackbar.Add("Restarting Caddy container", Severity.Info); - await DockerService.RestartCaddyContainerAsync(); - Snackbar.Add("Caddy container restarted successfully", Severity.Success); + IsNew = IsNew, + FileName = FileName, + Content = await _codeEditor.GetValue(), + }); + + if (submitResponse.Success) + { + Snackbar.Add($"{FileName} Caddy configuration saved successfully", Severity.Success); + // Indicate successful save and that a restart is required by the calling component + MudDialog.Close(DialogResult.Ok(true)); } - catch + else { - Snackbar.Add("Failed to restart the Caddy container", Severity.Error); + Snackbar.Add(submitResponse.Message, Severity.Error); + // Indicate failed save, no restart needed + MudDialog.Close(DialogResult.Ok(false)); } } } \ No newline at end of file