chore: refactor Caddyfile editor duplication
All checks were successful
Caddy Manager CI build / docker (push) Successful in 1m2s

This commit is contained in:
2025-07-15 07:53:34 +07:00
parent 14cbcf20f3
commit 44c7a5b45c
5 changed files with 39 additions and 17 deletions

View File

@@ -29,7 +29,8 @@
@bind-SelectedValues="_selectedCaddyConfigurations"> @bind-SelectedValues="_selectedCaddyConfigurations">
@foreach (var (index, caddyConfig) in _availableCaddyConfigurations.Index()) @foreach (var (index, caddyConfig) in _availableCaddyConfigurations.Index())
{ {
<CaddyReverseProxyItem ConfigurationInfo="@caddyConfig" OnCaddyRestartRequired="@RestartCaddy"/> <CaddyReverseProxyItem ConfigurationInfo="@caddyConfig" OnCaddyRestartRequired="@RestartCaddy"
OnCaddyfileDuplicateRequested="@HandleDuplicateRequest"/>
@if (index < _availableCaddyConfigurations.Count - 1) @if (index < _availableCaddyConfigurations.Count - 1)
{ {

View File

@@ -42,6 +42,26 @@ public partial class CaddyReverseProxiesPage : ComponentBase
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
private async Task NewReverseProxy() private async Task NewReverseProxy()
{
await ShowCaddyfileEditorDialog(string.Empty);
}
/// <summary>
/// Method to handle duplication of a Caddyfile from the editor dialog.
/// </summary>
/// <param name="content">The content of the Caddyfile to duplicate.</param>
private async Task HandleDuplicateRequest(string content)
{
await ShowCaddyfileEditorDialog(string.Empty, content);
}
/// <summary>
/// Helper to show the Caddyfile editor dialog
/// </summary>
/// <param name="fileName">The file name to open</param>
/// <param name="initialContent">The initial content of the file</param>
/// <returns></returns>
private async Task ShowCaddyfileEditorDialog(string fileName, string initialContent = "")
{ {
var dialog = await DialogService.ShowAsync<CaddyfileEditorComponent>("New configuration", var dialog = await DialogService.ShowAsync<CaddyfileEditorComponent>("New configuration",
options: new DialogOptions options: new DialogOptions
@@ -50,7 +70,8 @@ public partial class CaddyReverseProxiesPage : ComponentBase
MaxWidth = MaxWidth.Medium MaxWidth = MaxWidth.Medium
}, parameters: new DialogParameters<CaddyfileEditorComponent> }, parameters: new DialogParameters<CaddyfileEditorComponent>
{ {
{ p => p.FileName, string.Empty } { p => p.FileName, fileName },
{ p => p.InitialContent, initialContent }
}); });
_ = await dialog.Result; _ = await dialog.Result;

View File

@@ -17,6 +17,9 @@ public partial class CaddyReverseProxyItem : ComponentBase
[Parameter] [Parameter]
public EventCallback OnCaddyRestartRequired { get; set; } public EventCallback OnCaddyRestartRequired { get; set; }
[Parameter]
public EventCallback<string> OnCaddyfileDuplicateRequested { get; set; }
[Parameter] [Parameter]
public CaddyConfigurationInfo ConfigurationInfo { get; set; } = null!; public CaddyConfigurationInfo ConfigurationInfo { get; set; } = null!;
@@ -35,10 +38,11 @@ public partial class CaddyReverseProxyItem : ComponentBase
var dialog = await DialogService.ShowAsync<CaddyfileEditor.CaddyfileEditor>("Caddy file", options: new DialogOptions var dialog = await DialogService.ShowAsync<CaddyfileEditor.CaddyfileEditor>("Caddy file", options: new DialogOptions
{ {
FullWidth = true, FullWidth = true,
MaxWidth = MudBlazor.MaxWidth.Medium, MaxWidth = MaxWidth.Medium,
}, parameters: new MudBlazor.DialogParameters }, parameters: new DialogParameters<CaddyfileEditor.CaddyfileEditor>
{ {
{ "FileName", ConfigurationInfo.FileName } { p => p.FileName, ConfigurationInfo.FileName },
{ p => p.OnDuplicate, EventCallback.Factory.Create(this, OnCaddyfileDuplicateRequested) }
}); });
var result = await dialog.Result; var result = await dialog.Result;

View File

@@ -17,7 +17,7 @@
<MudButton OnClick="Cancel">Cancel</MudButton> <MudButton OnClick="Cancel">Cancel</MudButton>
@if (!IsNew) @if (!IsNew)
{ {
<MudButton Color="Color.Tertiary" OnClick="Duplicate">Duplicate</MudButton> <MudButton OnClick="Duplicate">Duplicate</MudButton>
} }
<MudButton Color="Color.Primary" OnClick="Submit">Save</MudButton> <MudButton Color="Color.Primary" OnClick="Submit">Save</MudButton>
<MudButton Color="Color.Secondary" OnClick="SaveAndRestart">Save & Restart</MudButton> <MudButton Color="Color.Secondary" OnClick="SaveAndRestart">Save & Restart</MudButton>

View File

@@ -17,6 +17,11 @@ public partial class CaddyfileEditor : ComponentBase
[CascadingParameter] private IMudDialogInstance MudDialog { get; set; } = null!; [CascadingParameter] private IMudDialogInstance MudDialog { get; set; } = null!;
/// <summary>
/// Callback to be invoked when the Caddyfile is duplicated.
/// </summary>
[Parameter] public EventCallback<string> OnDuplicate { get; set; }
/// <summary> /// <summary>
/// Determines if the Caddy configuration file is new /// Determines if the Caddy configuration file is new
/// </summary> /// </summary>
@@ -135,17 +140,8 @@ public partial class CaddyfileEditor : ComponentBase
{ {
var content = await _codeEditor.GetValue(); var content = await _codeEditor.GetValue();
MudDialog.Close(DialogResult.Ok(false)); await OnDuplicate.InvokeAsync(content);
await DialogService.ShowAsync<CaddyfileEditor>("New configuration", MudDialog.Close(DialogResult.Ok(false));
options: new DialogOptions
{
FullWidth = true,
MaxWidth = MaxWidth.Medium
}, parameters: new DialogParameters<CaddyfileEditor>
{
{ p => p.FileName, string.Empty },
{ p => p.InitialContent, content }
});
} }
} }