diff --git a/src/DnsmasqWebUI/Components/EffectiveConfig/Composition/EffectiveConfigSection.razor b/src/DnsmasqWebUI/Components/EffectiveConfig/Composition/EffectiveConfigSection.razor index 2bb4c63..06979dc 100644 --- a/src/DnsmasqWebUI/Components/EffectiveConfig/Composition/EffectiveConfigSection.razor +++ b/src/DnsmasqWebUI/Components/EffectiveConfig/Composition/EffectiveConfigSection.razor @@ -28,7 +28,7 @@ + OnClose="CloseSaveModal" OnSaveCompleted="OnSaveCompleted" OnContinueEditingAfterSavedFailure="ContinueEditingAfterSavedFailureAsync" OnCloseAndEndEdit="CloseSaveModalAndEndEdit" /> } @@ -212,6 +212,15 @@ StateHasChanged(); } + private async Task ContinueEditingAfterSavedFailureAsync() + { + _showSaveModal = false; + Session.ExitEditModeDiscard(); + await OnSaveCompleted.InvokeAsync(); + Session.EnterEditMode(); + StateHasChanged(); + } + private void CloseSaveModalAndEndEdit() { _showSaveModal = false; diff --git a/src/DnsmasqWebUI/Components/EffectiveConfig/Fields/EffectiveConfigMultiValueItem.razor b/src/DnsmasqWebUI/Components/EffectiveConfig/Fields/EffectiveConfigMultiValueItem.razor index 5574ff6..80a4cbe 100644 --- a/src/DnsmasqWebUI/Components/EffectiveConfig/Fields/EffectiveConfigMultiValueItem.razor +++ b/src/DnsmasqWebUI/Components/EffectiveConfig/Fields/EffectiveConfigMultiValueItem.razor @@ -6,7 +6,7 @@ @Value diff --git a/src/DnsmasqWebUI/Components/EffectiveConfig/Modals/EffectiveConfigSaveFlow.razor b/src/DnsmasqWebUI/Components/EffectiveConfig/Modals/EffectiveConfigSaveFlow.razor index 90442b9..3265893 100644 --- a/src/DnsmasqWebUI/Components/EffectiveConfig/Modals/EffectiveConfigSaveFlow.razor +++ b/src/DnsmasqWebUI/Components/EffectiveConfig/Modals/EffectiveConfigSaveFlow.razor @@ -16,10 +16,11 @@ SaveResult="@_saveResult" RestoreResult="@_restoreResult" OnClose="@OnClose" + OnContinueEditing="@(EventCallback.Factory.Create(this, HandleContinueEditing))" OnSave="@HandleSave" OnRestore="@HandleRestore" OnReverted="@HandleReverted" - OnCloseAndEndEdit="@OnCloseAndEndEdit" /> + OnCloseAndEndEdit="@HandleCloseAndEndEdit" /> } @code { @@ -39,6 +40,7 @@ [Parameter] public DnsmasqServiceStatus? Status { get; set; } [Parameter] public EventCallback OnClose { get; set; } [Parameter] public EventCallback OnSaveCompleted { get; set; } + [Parameter] public EventCallback OnContinueEditingAfterSavedFailure { get; set; } [Parameter] public EventCallback OnCloseAndEndEdit { get; set; } [Parameter] public IEffectiveConfigEditSession Session { get; set; } = null!; @@ -127,4 +129,23 @@ _saveState = SaveUiState.RestoreFailed; await InvokeAsync(StateHasChanged); } + + private async Task HandleContinueEditing() + { + if (_saveState == SaveUiState.ValidateFailed || _saveState == SaveUiState.ReloadFailed) + { + await OnContinueEditingAfterSavedFailure.InvokeAsync(); + return; + } + + await OnClose.InvokeAsync(); + } + + private async Task HandleCloseAndEndEdit() + { + await OnCloseAndEndEdit.InvokeAsync(); + + if (_saveState == SaveUiState.ValidateFailed || _saveState == SaveUiState.ReloadFailed) + await OnSaveCompleted.InvokeAsync(); + } } diff --git a/src/DnsmasqWebUI/Components/EffectiveConfig/Modals/EffectiveConfigSaveModal.razor b/src/DnsmasqWebUI/Components/EffectiveConfig/Modals/EffectiveConfigSaveModal.razor index 3f8e1ae..f7b7053 100644 --- a/src/DnsmasqWebUI/Components/EffectiveConfig/Modals/EffectiveConfigSaveModal.razor +++ b/src/DnsmasqWebUI/Components/EffectiveConfig/Modals/EffectiveConfigSaveModal.razor @@ -153,7 +153,7 @@ @if ((SaveState == EffectiveConfigSaveFlow.SaveUiState.ReloadFailed || SaveState == EffectiveConfigSaveFlow.SaveUiState.ValidateFailed) && SaveResult?.BackupPath != null) { - + } else if (SaveState == EffectiveConfigSaveFlow.SaveUiState.RestoreFailed) @@ -184,6 +184,7 @@ [Parameter] public EffectiveConfigSaveResult? SaveResult { get; set; } [Parameter] public EffectiveConfigRestoreResult? RestoreResult { get; set; } [Parameter] public EventCallback OnClose { get; set; } + [Parameter] public EventCallback OnContinueEditing { get; set; } [Parameter] public EventCallback OnSave { get; set; } [Parameter] public EventCallback OnRestore { get; set; } [Parameter] public EventCallback OnReverted { get; set; } @@ -262,6 +263,12 @@ await OnClose.InvokeAsync(); } + private async Task ContinueEditing() + { + if (!AllowClose) return; + await OnContinueEditing.InvokeAsync(); + } + private async Task Save() { await OnSave.InvokeAsync();