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