diff --git a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor
index 0589609..5b3682e 100644
--- a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor
+++ b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor
@@ -29,7 +29,8 @@
@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 a7580e5..c333ae9 100644
--- a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs
+++ b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs
@@ -42,6 +42,26 @@ public partial class CaddyReverseProxiesPage : ComponentBase
///
///
private async Task NewReverseProxy()
+ {
+ await ShowCaddyfileEditorDialog(string.Empty);
+ }
+
+ ///
+ /// Method to handle duplication of a Caddyfile from the editor dialog.
+ ///
+ /// The content of the Caddyfile to duplicate.
+ private async Task HandleDuplicateRequest(string content)
+ {
+ await ShowCaddyfileEditorDialog(string.Empty, content);
+ }
+
+ ///
+ /// Helper to show the Caddyfile editor dialog
+ ///
+ /// The file name to open
+ /// The initial content of the file
+ ///
+ private async Task ShowCaddyfileEditorDialog(string fileName, string initialContent = "")
{
var dialog = await DialogService.ShowAsync("New configuration",
options: new DialogOptions
@@ -50,7 +70,8 @@ public partial class CaddyReverseProxiesPage : ComponentBase
MaxWidth = MaxWidth.Medium
}, parameters: new DialogParameters
{
- { p => p.FileName, string.Empty }
+ { p => p.FileName, fileName },
+ { p => p.InitialContent, initialContent }
});
_ = await dialog.Result;
diff --git a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor.cs b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor.cs
index 6cc4420..3916b87 100644
--- a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor.cs
+++ b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor.cs
@@ -17,6 +17,9 @@ public partial class CaddyReverseProxyItem : ComponentBase
[Parameter]
public EventCallback OnCaddyRestartRequired { get; set; }
+ [Parameter]
+ public EventCallback OnCaddyfileDuplicateRequested { get; set; }
+
[Parameter]
public CaddyConfigurationInfo ConfigurationInfo { get; set; } = null!;
@@ -35,10 +38,11 @@ public partial class CaddyReverseProxyItem : ComponentBase
var dialog = await DialogService.ShowAsync("Caddy file", options: new DialogOptions
{
FullWidth = true,
- MaxWidth = MudBlazor.MaxWidth.Medium,
- }, parameters: new MudBlazor.DialogParameters
+ MaxWidth = MaxWidth.Medium,
+ }, parameters: new DialogParameters
{
- { "FileName", ConfigurationInfo.FileName }
+ { p => p.FileName, ConfigurationInfo.FileName },
+ { p => p.OnDuplicate, EventCallback.Factory.Create(this, OnCaddyfileDuplicateRequested) }
});
var result = await dialog.Result;
diff --git a/CaddyManager/Components/Pages/Caddy/CaddyfileEditor/CaddyfileEditor.razor b/CaddyManager/Components/Pages/Caddy/CaddyfileEditor/CaddyfileEditor.razor
index b449539..77a42aa 100644
--- a/CaddyManager/Components/Pages/Caddy/CaddyfileEditor/CaddyfileEditor.razor
+++ b/CaddyManager/Components/Pages/Caddy/CaddyfileEditor/CaddyfileEditor.razor
@@ -17,7 +17,7 @@
Cancel
@if (!IsNew)
{
- Duplicate
+ Duplicate
}
Save
Save & Restart
diff --git a/CaddyManager/Components/Pages/Caddy/CaddyfileEditor/CaddyfileEditor.razor.cs b/CaddyManager/Components/Pages/Caddy/CaddyfileEditor/CaddyfileEditor.razor.cs
index 8275f82..10bfe26 100644
--- a/CaddyManager/Components/Pages/Caddy/CaddyfileEditor/CaddyfileEditor.razor.cs
+++ b/CaddyManager/Components/Pages/Caddy/CaddyfileEditor/CaddyfileEditor.razor.cs
@@ -17,6 +17,11 @@ public partial class CaddyfileEditor : ComponentBase
[CascadingParameter] private IMudDialogInstance MudDialog { get; set; } = null!;
+ ///
+ /// Callback to be invoked when the Caddyfile is duplicated.
+ ///
+ [Parameter] public EventCallback OnDuplicate { get; set; }
+
///
/// Determines if the Caddy configuration file is new
///
@@ -135,17 +140,8 @@ public partial class CaddyfileEditor : ComponentBase
{
var content = await _codeEditor.GetValue();
- MudDialog.Close(DialogResult.Ok(false));
+ await OnDuplicate.InvokeAsync(content);
- await DialogService.ShowAsync("New configuration",
- options: new DialogOptions
- {
- FullWidth = true,
- MaxWidth = MaxWidth.Medium
- }, parameters: new DialogParameters
- {
- { p => p.FileName, string.Empty },
- { p => p.InitialContent, content }
- });
+ MudDialog.Close(DialogResult.Ok(false));
}
}
\ No newline at end of file