From 91c5ff7b007c73889918035faf0a46041bc3b3f2 Mon Sep 17 00:00:00 2001 From: Pavel Vesely Date: Tue, 5 Jan 2021 19:52:14 +0100 Subject: [PATCH] UpdateSettings bugfix ISettingControl introduction --- .../Modules/Admin/Modules/Settings.razor | 18 ++++++++++-------- Oqtane.Shared/Interfaces/ISettingsControl.cs | 9 +++++++++ 2 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 Oqtane.Shared/Interfaces/ISettingsControl.cs diff --git a/Oqtane.Client/Modules/Admin/Modules/Settings.razor b/Oqtane.Client/Modules/Admin/Modules/Settings.razor index a4bd4188..c6ebe5c3 100644 --- a/Oqtane.Client/Modules/Admin/Modules/Settings.razor +++ b/Oqtane.Client/Modules/Admin/Modules/Settings.razor @@ -1,4 +1,5 @@ @namespace Oqtane.Modules.Admin.Modules +@using Oqtane.Interfaces @inherits ModuleBase @inject NavigationManager NavigationManager @inject IThemeService ThemeService @@ -137,7 +138,7 @@ builder.AddComponentReferenceCapture(1, inst => { _settings = Convert.ChangeType(inst, _settingsModuleType); }); builder.CloseComponent(); }; - } + } } private async Task SaveModule() @@ -162,15 +163,16 @@ module.Permissions = _permissionGrid.GetPermissions(); await ModuleService.UpdateModuleAsync(module); - if (_settingsModuleType != null) + + if (_settings is ISettingsControl control) { - var moduleType = Type.GetType(ModuleState.ModuleType); - if (moduleType != null) - { - moduleType.GetMethod("UpdateSettings")?.Invoke(_settings, null); // method must be public in settings component - } + await control.UpdateSettings(); + } + else + { + // Compatibility 2.0 fallback + _settings?.GetType().GetMethod("UpdateSettings")?.Invoke(_settings, null); // method must be public in settings component } - NavigationManager.NavigateTo(NavigateUrl()); } diff --git a/Oqtane.Shared/Interfaces/ISettingsControl.cs b/Oqtane.Shared/Interfaces/ISettingsControl.cs new file mode 100644 index 00000000..c5753099 --- /dev/null +++ b/Oqtane.Shared/Interfaces/ISettingsControl.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace Oqtane.Interfaces +{ + public interface ISettingsControl + { + Task UpdateSettings(); + } +}