From 310d1ed4850be5f19930652f952b69d5aa00b27d Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Thu, 14 Jul 2022 16:58:16 -0400 Subject: [PATCH] Fix #2285 - handle scenario where the module definition associated to a module instance does not exist --- Oqtane.Client/Modules/Admin/Error/Index.razor | 3 +- .../Modules/Admin/Modules/Settings.razor | 50 +++++++++++-------- .../Resources/Modules/Admin/Error/Index.resx | 4 +- .../Modules/Admin/Modules/Settings.resx | 3 ++ 4 files changed, 35 insertions(+), 25 deletions(-) diff --git a/Oqtane.Client/Modules/Admin/Error/Index.razor b/Oqtane.Client/Modules/Admin/Error/Index.razor index 0e085ab9..0375c8d3 100644 --- a/Oqtane.Client/Modules/Admin/Error/Index.razor +++ b/Oqtane.Client/Modules/Admin/Error/Index.razor @@ -11,8 +11,7 @@ Module module = await ModuleService.GetModuleAsync(ModuleState.ModuleId); if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { - string message = string.Format(Localizer["Error.Module.Load"], module.ModuleDefinitionName); - AddModuleMessage(message, MessageType.Error); + AddModuleMessage(string.Format(Localizer["Error.Module.Load"], module.ModuleDefinitionName), MessageType.Error); } await logger.LogCritical("Error Loading Module {Module}", module); diff --git a/Oqtane.Client/Modules/Admin/Modules/Settings.razor b/Oqtane.Client/Modules/Admin/Modules/Settings.razor index 47f4cd45..ca84fd46 100644 --- a/Oqtane.Client/Modules/Admin/Modules/Settings.razor +++ b/Oqtane.Client/Modules/Admin/Modules/Settings.razor @@ -124,37 +124,45 @@ _containerType = ModuleState.ContainerType; _allPages = ModuleState.AllPages.ToString(); _permissions = ModuleState.Permissions; - _permissionNames = ModuleState.ModuleDefinition.PermissionNames; _pageId = ModuleState.PageId.ToString(); createdby = ModuleState.CreatedBy; createdon = ModuleState.CreatedOn; modifiedby = ModuleState.ModifiedBy; modifiedon = ModuleState.ModifiedOn; - if (!string.IsNullOrEmpty(ModuleState.ModuleDefinition.SettingsType)) + if (ModuleState.ModuleDefinition != null) { - // module settings type explicitly declared in IModule interface - _moduleSettingsType = Type.GetType(ModuleState.ModuleDefinition.SettingsType); + _permissionNames = ModuleState.ModuleDefinition?.PermissionNames; + + if (!string.IsNullOrEmpty(ModuleState.ModuleDefinition.SettingsType)) + { + // module settings type explicitly declared in IModule interface + _moduleSettingsType = Type.GetType(ModuleState.ModuleDefinition.SettingsType); + } + else + { + // legacy support - module settings type determined by convention ( ie. existence of a "Settings.razor" component in module ) + _moduleSettingsType = Type.GetType(ModuleState.ModuleDefinition.ControlTypeTemplate.Replace(Constants.ActionToken, PageState.Action), false, true); + } + if (_moduleSettingsType != null) + { + var moduleobject = Activator.CreateInstance(_moduleSettingsType) as IModuleControl; + if (!string.IsNullOrEmpty(moduleobject.Title)) + { + _moduleSettingsTitle = moduleobject.Title; + } + + ModuleSettingsComponent = builder => + { + builder.OpenComponent(0, _moduleSettingsType); + builder.AddComponentReferenceCapture(1, inst => { _moduleSettings = Convert.ChangeType(inst, _moduleSettingsType); }); + builder.CloseComponent(); + }; + } } else { - // legacy support - module settings type determined by convention ( ie. existence of a "Settings.razor" component in module ) - _moduleSettingsType = Type.GetType(ModuleState.ModuleDefinition.ControlTypeTemplate.Replace(Constants.ActionToken, PageState.Action), false, true); - } - if (_moduleSettingsType != null) - { - var moduleobject = Activator.CreateInstance(_moduleSettingsType) as IModuleControl; - if (!string.IsNullOrEmpty(moduleobject.Title)) - { - _moduleSettingsTitle = moduleobject.Title; - } - - ModuleSettingsComponent = builder => - { - builder.OpenComponent(0, _moduleSettingsType); - builder.AddComponentReferenceCapture(1, inst => { _moduleSettings = Convert.ChangeType(inst, _moduleSettingsType); }); - builder.CloseComponent(); - }; + AddModuleMessage(string.Format(Localizer["Error.Module.Load"], ModuleState.ModuleDefinitionName), MessageType.Error); } var theme = _themes.FirstOrDefault(item => item.Containers.Any(themecontrol => themecontrol.TypeName.Equals(_containerType))); diff --git a/Oqtane.Client/Resources/Modules/Admin/Error/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Error/Index.resx index c9890a9f..139084d0 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Error/Index.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Error/Index.resx @@ -1,4 +1,4 @@ - +