diff --git a/CaddyManager/CaddyManager.csproj b/CaddyManager/CaddyManager.csproj
index 4e70ac2..9eccf9c 100644
--- a/CaddyManager/CaddyManager.csproj
+++ b/CaddyManager/CaddyManager.csproj
@@ -27,8 +27,9 @@
-
-
+
+
+
diff --git a/CaddyManager/Components/Pages/Caddy/ReverseProxies/ReverseProxiesPage.razor b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor
similarity index 95%
rename from CaddyManager/Components/Pages/Caddy/ReverseProxies/ReverseProxiesPage.razor
rename to CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor
index 49f8516..a0c5c67 100644
--- a/CaddyManager/Components/Pages/Caddy/ReverseProxies/ReverseProxiesPage.razor
+++ b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor
@@ -23,7 +23,7 @@
@bind-SelectedValues="_selectedCaddyConfigurations">
@foreach (var caddyConfig in _availableCaddyConfigurations)
{
-
+
}
\ No newline at end of file
diff --git a/CaddyManager/Components/Pages/Caddy/ReverseProxies/ReverseProxiesPage.razor.cs b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs
similarity index 52%
rename from CaddyManager/Components/Pages/Caddy/ReverseProxies/ReverseProxiesPage.razor.cs
rename to CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs
index 1ea7f0f..9b32781 100644
--- a/CaddyManager/Components/Pages/Caddy/ReverseProxies/ReverseProxiesPage.razor.cs
+++ b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs
@@ -1,27 +1,25 @@
+using System.Globalization;
+using CaddyManager.Components.Pages.Generic;
using CaddyManager.Contracts.Caddy;
using CaddyManager.Contracts.Docker;
using Microsoft.AspNetCore.Components;
using MudBlazor;
-namespace CaddyManager.Components.Pages.Caddy.ReverseProxies;
+namespace CaddyManager.Components.Pages.Caddy.CaddyReverseProxies;
-public partial class ReverseProxiesPage : ComponentBase
+public partial class CaddyReverseProxiesPage : ComponentBase
{
private bool _isProcessing;
private List _availableCaddyConfigurations = [];
private IReadOnlyCollection _selectedCaddyConfigurations = [];
-
- [Inject]
- private ICaddyService CaddyService { get; set; } = null!;
-
- [Inject]
- private IDockerService DockerService { get; set; } = null!;
-
- [Inject]
- private IDialogService DialogService { get; set; } = null!;
-
- [Inject]
- private ISnackbar Snackbar { get; set; } = null!;
+
+ [Inject] private ICaddyService CaddyService { get; set; } = null!;
+
+ [Inject] private IDockerService DockerService { get; set; } = null!;
+
+ [Inject] private IDialogService DialogService { get; set; } = null!;
+
+ [Inject] private ISnackbar Snackbar { get; set; } = null!;
protected override void OnAfterRender(bool firstRender)
{
@@ -46,15 +44,15 @@ public partial class ReverseProxiesPage : ComponentBase
{
{ "FileName", string.Empty }
});
-
+
var result = await dialog.Result;
-
+
if (result is { Data: bool, Canceled: false } && (bool)result.Data)
{
Refresh();
}
}
-
+
///
/// Get the latest information from the server
///
@@ -63,27 +61,51 @@ public partial class ReverseProxiesPage : ComponentBase
_availableCaddyConfigurations = CaddyService.GetExistingCaddyConfigurations();
StateHasChanged();
}
-
+
///
/// Have the selected configurations be deleted
///
- private void Delete()
+ private Task Delete()
{
- var response = CaddyService.DeleteCaddyConfigurations(_selectedCaddyConfigurations.ToList());
-
- _selectedCaddyConfigurations = _selectedCaddyConfigurations.Except(response.DeletedConfigurations).ToList();
-
- if (response.Success)
+ var confWord = _selectedCaddyConfigurations.Count > 1 ? "configurations" : "configuration";
+
+ return DialogService.ShowAsync($"Delete {confWord}", options: new DialogOptions
{
- Snackbar.Add("Configuration(s) deleted successfully", Severity.Success);
- Refresh();
- }
- else
+ FullWidth = true,
+ MaxWidth = MaxWidth.ExtraSmall,
+ }, parameters: new DialogParameters
{
- Snackbar.Add(response.Message, Severity.Error);
- }
+ {
+ "Message",
+ $"Are you sure you want to delete the selected {confWord}?"
+ },
+ {
+ "OnConfirm", EventCallback.Factory.Create(this, () =>
+ {
+ var response = CaddyService.DeleteCaddyConfigurations(_selectedCaddyConfigurations.ToList());
+
+ _selectedCaddyConfigurations =
+ _selectedCaddyConfigurations.Except(response.DeletedConfigurations).ToList();
+
+ if (response.Success)
+ {
+ Snackbar.Add(
+ $"{CultureInfo.InvariantCulture.TextInfo.ToTitleCase(confWord)} deleted successfully",
+ Severity.Success);
+ Refresh();
+ }
+ else
+ {
+ Snackbar.Add(response.Message, Severity.Error);
+ }
+ })
+ },
+ { "ConfirmText", "Yes" },
+ { "ConfirmColor", Color.Error },
+ { "CancelText", "No" }
+ });
}
-
+
///
/// Restart the Caddy container
///
diff --git a/CaddyManager/Components/Pages/Caddy/ReverseProxies/ReverseProxyItem.razor b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor
similarity index 100%
rename from CaddyManager/Components/Pages/Caddy/ReverseProxies/ReverseProxyItem.razor
rename to CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor
diff --git a/CaddyManager/Components/Pages/Caddy/ReverseProxies/ReverseProxyItem.razor.cs b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor.cs
similarity index 85%
rename from CaddyManager/Components/Pages/Caddy/ReverseProxies/ReverseProxyItem.razor.cs
rename to CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor.cs
index 67ccd2c..c472eea 100644
--- a/CaddyManager/Components/Pages/Caddy/ReverseProxies/ReverseProxyItem.razor.cs
+++ b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor.cs
@@ -2,9 +2,9 @@ using CaddyManager.Contracts.Caddy;
using Microsoft.AspNetCore.Components;
using MudBlazor;
-namespace CaddyManager.Components.Pages.Caddy.ReverseProxies;
+namespace CaddyManager.Components.Pages.Caddy.CaddyReverseProxies;
-public partial class ReverseProxyItem : ComponentBase
+public partial class CaddyReverseProxyItem : ComponentBase
{
///
/// File path of the Caddy configuration file
diff --git a/CaddyManager/Components/Pages/Generic/ConfirmationDialog.razor b/CaddyManager/Components/Pages/Generic/ConfirmationDialog.razor
new file mode 100644
index 0000000..187b044
--- /dev/null
+++ b/CaddyManager/Components/Pages/Generic/ConfirmationDialog.razor
@@ -0,0 +1,9 @@
+
+
+ @Message
+
+
+ @CancelText
+ @ConfirmText
+
+
\ No newline at end of file
diff --git a/CaddyManager/Components/Pages/Generic/ConfirmationDialog.razor.cs b/CaddyManager/Components/Pages/Generic/ConfirmationDialog.razor.cs
new file mode 100644
index 0000000..0937c35
--- /dev/null
+++ b/CaddyManager/Components/Pages/Generic/ConfirmationDialog.razor.cs
@@ -0,0 +1,64 @@
+using Microsoft.AspNetCore.Components;
+using MudBlazor;
+
+namespace CaddyManager.Components.Pages.Generic;
+
+public partial class ConfirmationDialog : ComponentBase
+{
+ [CascadingParameter]
+ private IMudDialogInstance MudDialog { get; set; } = null!;
+
+ ///
+ /// The message to display to the user, to be set in the body of the dialog
+ ///
+ [Parameter]
+ public string Message { get; set; } = string.Empty;
+
+ ///
+ /// Callback when the user confirms the action. The dialog will close after this callback is invoked.
+ ///
+ [Parameter]
+ public EventCallback OnConfirm { get; set; } = EventCallback.Empty;
+
+ ///
+ /// Callback when the user cancels the action. The dialog will close after this callback is invoked.
+ ///
+ [Parameter]
+ public EventCallback OnCancel { get; set; } = EventCallback.Empty;
+
+ ///
+ /// The text to display on the confirm button
+ ///
+ [Parameter]
+ public string ConfirmText { get; set; } = "Confirm";
+
+ ///
+ /// The color of the confirm button
+ ///
+ [Parameter]
+ public Color ConfirmColor { get; set; } = Color.Primary;
+
+ ///
+ /// The text to display on the cancel button
+ ///
+ [Parameter]
+ public string CancelText { get; set; } = "Cancel";
+
+ ///
+ /// Perform the confirmation action
+ ///
+ private async Task Confirm()
+ {
+ await OnConfirm.InvokeAsync();
+ MudDialog.Close();
+ }
+
+ ///
+ /// Cancel the cancel action
+ ///
+ private async Task Cancel()
+ {
+ await OnCancel.InvokeAsync();
+ MudDialog.Close();
+ }
+}
\ No newline at end of file
diff --git a/CaddyManager/Components/Pages/Error.razor b/CaddyManager/Components/Pages/Generic/Error.razor
similarity index 100%
rename from CaddyManager/Components/Pages/Error.razor
rename to CaddyManager/Components/Pages/Generic/Error.razor