From 7c057316d96309efc6f9ab9ceef0c396799c4a6d Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Tue, 12 Aug 2025 15:49:42 +0800 Subject: [PATCH 1/6] Remove extra padding class from tab content wrapper --- .../TagHelpers/Tab/AbpTabsTagHelperService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs index 9b730d5c0d..3026860ed6 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs @@ -84,7 +84,7 @@ public class AbpTabsTagHelperService : AbpTagHelperService var id = TagHelper.Name + "Content"; var wrapper = new TagBuilder("div"); - wrapper.AddCssClass("tab-content pt-3"); + wrapper.AddCssClass("tab-content"); wrapper.Attributes.Add("id", id); wrapper.InnerHtml.AppendHtml(contents); From 710c07ce7524475cdde61b7db05bcbce8692b7b3 Mon Sep 17 00:00:00 2001 From: Alperen Samurlu Date: Wed, 13 Aug 2025 13:23:43 +0300 Subject: [PATCH 2/6] Add UserReports menu item to English localization Introduced a new 'Menu:UserReports' key to the en.json localization file, mapping it to 'Users'. This enables display of the User Reports menu in the admin interface. --- .../AbpIoLocalization/Admin/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index b53783a2ac..62f8304467 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -774,6 +774,7 @@ "Menu:TelemetryMenu": "Telemetry Reports", "Menu:Studio": "Studio", "Menu:Solutions": "Solutions", - "Menu:Users": "Users" + "Menu:Users": "Users", + "Menu:UserReports": "Users" } } From d495be102f80e6ac4745c2bb245051a53366c76b Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 14 Aug 2025 16:45:23 +0800 Subject: [PATCH 3/6] Add documentation for nested object mapping strategies --- .../object-to-object-mapping.md | 159 ++++++++++++++++++ 1 file changed, 159 insertions(+) diff --git a/docs/en/framework/infrastructure/object-to-object-mapping.md b/docs/en/framework/infrastructure/object-to-object-mapping.md index 5a9ea5f82a..11252ba137 100644 --- a/docs/en/framework/infrastructure/object-to-object-mapping.md +++ b/docs/en/framework/infrastructure/object-to-object-mapping.md @@ -320,6 +320,165 @@ var users = await _userRepository.GetListAsync(); // returns List var dtos = ObjectMapper.Map, List>(users); // creates List ```` +### Nested Mapping + +When working with nested object mapping, there's an important limitation to be aware of. If you have separate mappers for nested types like in the example below, the parent mapper (`SourceTypeToDestinationTypeMapper`) will not automatically use the nested mapper (`SourceNestedTypeToDestinationNestedTypeMapper`) to handle the mapping of nested properties. This means that configurations like the `MapperIgnoreTarget` attribute on the nested mapper will be ignored during the parent mapping operation. + +````csharp +public class SourceNestedType +{ + public string Name { get; set; } + + public string Ignored { get; set; } +} + +public class SourceType +{ + public string Name { get; set; } + + public SourceNestedType Nested { get; set; } +} + +public class DestinationNestedType +{ + public string Name { get; set; } + + public string Ignored { get; set; } +} + +public class DestinationType +{ + public string Name { get; set; } + + public DestinationNestedType Nested { get; set; } +} + +[Mapper] +public partial class SourceTypeToDestinationTypeMapper : MapperBase +{ + public override partial DestinationType Map(SourceType source); + public override partial void Map(SourceType source, DestinationType destination); +} + +[Mapper] +public partial class SourceNestedTypeToDestinationNestedTypeMapper : MapperBase +{ + [MapperIgnoreTarget(nameof(SourceNestedType.Ignored))] + public override partial DestinationNestedType Map(SourceNestedType source); + + [MapperIgnoreTarget(nameof(SourceNestedType.Ignored))] + public override partial void Map(SourceNestedType source, DestinationNestedType destination); +} +```` + +There are several ways to solve this nested mapping issue. Choose the approach that best fits your specific requirements: + +#### Solution 1: Multi-Interface Implementation + +Implement both mapping interfaces (`IAbpMapperlyMapper` and `IAbpMapperlyMapper`) in a single mapper class. This approach consolidates all related mapping logic into one class. + +**Important:** Remember to implement `ITransientDependency` to register the mapper class with the dependency injection container. + +````csharp +[Mapper] +public partial class SourceTypeToDestinationTypeMapper : IAbpMapperlyMapper, IAbpMapperlyMapper, ITransientDependency +{ + public partial DestinationType Map(SourceType source); + public partial void Map(SourceType source, DestinationType destination); + public void BeforeMap(SourceType source) + { + } + + public void AfterMap(SourceType source, DestinationType destination) + { + } + + [MapperIgnoreTarget(nameof(SourceNestedType.Ignored))] + public partial DestinationNestedType Map(SourceNestedType source); + + [MapperIgnoreTarget(nameof(SourceNestedType.Ignored))] + public partial void Map(SourceNestedType source, DestinationNestedType destination); + + public void BeforeMap(SourceNestedType source) + { + } + + public void AfterMap(SourceNestedType source, DestinationNestedType destination) + { + } +} +```` + +#### Solution 2: Consolidate Mapping Methods + +Copy the nested mapping methods from `SourceNestedTypeToDestinationNestedTypeMapper` to the parent `SourceTypeToDestinationTypeMapper` class. This ensures all mapping logic is contained within a single mapper. + +Example: + +````csharp +[Mapper] +public partial class SourceTypeToDestinationTypeMapper : MapperBase +{ + public override partial DestinationType Map(SourceType source); + public override partial void Map(SourceType source, DestinationType destination); + + [MapperIgnoreTarget(nameof(SourceNestedType.Ignored))] + public override partial DestinationNestedType Map(SourceNestedType source); + [MapperIgnoreTarget(nameof(SourceNestedType.Ignored))] + public override partial void Map(SourceNestedType source, DestinationNestedType destination); +} + +[Mapper] +public partial class SourceNestedTypeToDestinationNestedTypeMapper : MapperBase +{ + [MapperIgnoreTarget(nameof(SourceNestedType.Ignored))] + public override partial DestinationNestedType Map(SourceNestedType source); + + [MapperIgnoreTarget(nameof(SourceNestedType.Ignored))] + public override partial void Map(SourceNestedType source, DestinationNestedType destination); +} +```` + +#### Solution 3: Dependency Injection Approach + +Inject the nested mapper as a dependency into the parent mapper and use it in the `AfterMap` method to handle nested object mapping manually. + +Example: + +````csharp +[Mapper] +public partial class SourceTypeToDestinationTypeMapper : MapperBase +{ + private readonly SourceNestedTypeToDestinationNestedTypeMapper _sourceNestedTypeToDestinationNestedTypeMapper; + + public SourceTypeToDestinationTypeMapper(SourceNestedTypeToDestinationNestedTypeMapper sourceNestedTypeToDestinationNestedTypeMapper) + { + _sourceNestedTypeToDestinationNestedTypeMapper = sourceNestedTypeToDestinationNestedTypeMapper; + } + + public override partial DestinationType Map(SourceType source); + public override partial void Map(SourceType source, DestinationType destination); + + public override void AfterMap(SourceType source, DestinationType destination) + { + if (source.Nested != null) + { + destination.Nested = _sourceNestedTypeToDestinationNestedTypeMapper.Map(source.Nested); + } + } +} +```` + +#### Choosing the Right Solution + +Each solution has its own advantages: + +- **Solution 1** consolidates all mapping logic in one place and works well when mappings are tightly related. +- **Solution 2** is simple but can lead to code duplication if you need the nested mapper elsewhere. +- **Solution 3** maintains separation of concerns and reusability but requires manual mapping in the `AfterMap` method. + +Choose the approach that best aligns with your application's architecture and maintainability requirements. + ### More Mapperly Features Most of Mapperly's features such as `Ignore` can be configured through its attributes. See the [Mapperly documentation](https://mapperly.riok.app/docs/intro/) for more details. From 43e53a5f778c70f94f5b73c118e15f79740907f2 Mon Sep 17 00:00:00 2001 From: EngincanV Date: Thu, 14 Aug 2025 13:57:19 +0300 Subject: [PATCH 4/6] permission-management: Replace Mapperly with AutoMapper --- .../AbpPermissionManagementBlazorModule.cs | 2 -- ...olo.Abp.PermissionManagement.Blazor.csproj | 1 - ...ermissionManagementWebAutoMapperProfile.cs | 18 ---------- .../AbpPermissionManagementWebMappers.cs | 33 +++++++++++++++++++ .../AbpPermissionManagementWebModule.cs | 10 ++---- .../Volo.Abp.PermissionManagement.Web.csproj | 2 +- 6 files changed, 37 insertions(+), 29 deletions(-) delete mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebAutoMapperProfile.cs create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebMappers.cs diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/AbpPermissionManagementBlazorModule.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/AbpPermissionManagementBlazorModule.cs index 1e7e69d4c3..56d01956e4 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/AbpPermissionManagementBlazorModule.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/AbpPermissionManagementBlazorModule.cs @@ -1,6 +1,5 @@ using Localization.Resources.AbpUi; using Volo.Abp.AspNetCore.Components.Web.Theming; -using Volo.Abp.AutoMapper; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.Localization; @@ -9,7 +8,6 @@ namespace Volo.Abp.PermissionManagement.Blazor; [DependsOn( typeof(AbpAspNetCoreComponentsWebThemingModule), - typeof(AbpAutoMapperModule), typeof(AbpPermissionManagementApplicationContractsModule) )] public class AbpPermissionManagementBlazorModule : AbpModule diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Volo.Abp.PermissionManagement.Blazor.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Volo.Abp.PermissionManagement.Blazor.csproj index 4983eaa9f8..1506afa4eb 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Volo.Abp.PermissionManagement.Blazor.csproj +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Volo.Abp.PermissionManagement.Blazor.csproj @@ -9,7 +9,6 @@ - diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebAutoMapperProfile.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebAutoMapperProfile.cs deleted file mode 100644 index f9baa8befd..0000000000 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebAutoMapperProfile.cs +++ /dev/null @@ -1,18 +0,0 @@ -using AutoMapper; -using Volo.Abp.AutoMapper; -using Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement; - -namespace Volo.Abp.PermissionManagement.Web; - -public class AbpPermissionManagementWebAutoMapperProfile : Profile -{ - public AbpPermissionManagementWebAutoMapperProfile() - { - CreateMap().Ignore(p => p.IsAllPermissionsGranted); - - CreateMap() - .ForMember(p => p.Depth, opts => opts.Ignore()); - - CreateMap(); - } -} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebMappers.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebMappers.cs new file mode 100644 index 0000000000..950a3972f0 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebMappers.cs @@ -0,0 +1,33 @@ +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; +using static Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement.PermissionManagementModal; + +namespace Volo.Abp.PermissionManagement.Web; + +[Mapper] +public partial class PermissionGroupDtoToPermissionGroupViewModelMapper : MapperBase +{ + [MapperIgnoreTarget(nameof(PermissionGroupViewModel.IsAllPermissionsGranted))] + public override partial PermissionGroupViewModel Map(PermissionGroupDto source); + + [MapperIgnoreTarget(nameof(PermissionGroupViewModel.IsAllPermissionsGranted))] + public override partial void Map(PermissionGroupDto source, PermissionGroupViewModel destination); +} + +[Mapper] +public partial class PermissionGrantInfoDtoToPermissionGrantInfoViewModelMapper : MapperBase +{ + [MapperIgnoreTarget(nameof(PermissionGrantInfoViewModel.Depth))] + public override partial PermissionGrantInfoViewModel Map(PermissionGrantInfoDto source); + + [MapperIgnoreTarget(nameof(PermissionGrantInfoViewModel.Depth))] + public override partial void Map(PermissionGrantInfoDto source, PermissionGrantInfoViewModel destination); +} + +[Mapper] +public partial class ProviderInfoDtoToProviderInfoViewModelMapper : MapperBase +{ + public override partial ProviderInfoViewModel Map(ProviderInfoDto source); + + public override partial void Map(ProviderInfoDto source, ProviderInfoViewModel destination); +} \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebModule.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebModule.cs index 5219fafbbf..2159a6107c 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebModule.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebModule.cs @@ -1,8 +1,8 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; -using Volo.Abp.AutoMapper; using Volo.Abp.Http.ProxyScripting.Generators.JQuery; +using Volo.Abp.Mapperly; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.Localization; using Volo.Abp.VirtualFileSystem; @@ -11,7 +11,7 @@ namespace Volo.Abp.PermissionManagement.Web; [DependsOn(typeof(AbpPermissionManagementApplicationContractsModule))] [DependsOn(typeof(AbpAspNetCoreMvcUiBootstrapModule))] -[DependsOn(typeof(AbpAutoMapperModule))] +[DependsOn(typeof(AbpMapperlyModule))] public class AbpPermissionManagementWebModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) @@ -34,11 +34,7 @@ public class AbpPermissionManagementWebModule : AbpModule options.FileSets.AddEmbedded(); }); - context.Services.AddAutoMapperObjectMapper(); - Configure(options => - { - options.AddProfile(validate: true); - }); + context.Services.AddMapperlyObjectMapper(); Configure(options => { diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Volo.Abp.PermissionManagement.Web.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Volo.Abp.PermissionManagement.Web.csproj index 1c80dda96c..9f58d70303 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Volo.Abp.PermissionManagement.Web.csproj +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Volo.Abp.PermissionManagement.Web.csproj @@ -31,7 +31,7 @@ - + From dcc14c9542d1f2db2519408b45c9558dc1b1679a Mon Sep 17 00:00:00 2001 From: EngincanV Date: Thu, 14 Aug 2025 14:12:07 +0300 Subject: [PATCH 5/6] setting-management: Replace Mapperly with AutoMapper --- .../AbpSettingManagementBlazorModule.cs | 11 ++----- ...ettingManagementBlazorAutoMapperProfile.cs | 15 --------- .../SettingManagementBlazorMappers.cs | 31 +++++++++++++++++++ .../Volo.Abp.SettingManagement.Blazor.csproj | 2 +- .../AbpSettingManagementWebModule.cs | 10 ++---- .../SettingManagementWebAutoMapperProfile.cs | 14 --------- .../SettingManagementWebMappers.cs | 22 +++++++++++++ .../Volo.Abp.SettingManagement.Web.csproj | 2 +- 8 files changed, 61 insertions(+), 46 deletions(-) delete mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorMappers.cs delete mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebMappers.cs diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/AbpSettingManagementBlazorModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/AbpSettingManagementBlazorModule.cs index d8e54353e1..f76b5fdb26 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/AbpSettingManagementBlazorModule.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/AbpSettingManagementBlazorModule.cs @@ -2,8 +2,8 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Components.Web.Theming; using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; -using Volo.Abp.AutoMapper; using Volo.Abp.Localization; +using Volo.Abp.Mapperly; using Volo.Abp.Modularity; using Volo.Abp.SettingManagement.Blazor.Menus; using Volo.Abp.SettingManagement.Blazor.Settings; @@ -13,7 +13,7 @@ using Volo.Abp.UI.Navigation; namespace Volo.Abp.SettingManagement.Blazor; [DependsOn( - typeof(AbpAutoMapperModule), + typeof(AbpMapperlyModule), typeof(AbpAspNetCoreComponentsWebThemingModule), typeof(AbpSettingManagementApplicationContractsModule) )] @@ -21,12 +21,7 @@ public class AbpSettingManagementBlazorModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - context.Services.AddAutoMapperObjectMapper(); - - Configure(options => - { - options.AddProfile(validate: true); - }); + context.Services.AddMapperlyObjectMapper(); Configure(options => { diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs deleted file mode 100644 index 604996e478..0000000000 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs +++ /dev/null @@ -1,15 +0,0 @@ -using AutoMapper; -using Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.EmailSettingGroup; - -namespace Volo.Abp.SettingManagement.Blazor; - -public class SettingManagementBlazorAutoMapperProfile : Profile -{ - public SettingManagementBlazorAutoMapperProfile() - { - CreateMap(); - CreateMap(); - - CreateMap(); - } -} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorMappers.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorMappers.cs new file mode 100644 index 0000000000..d5364d8e4d --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorMappers.cs @@ -0,0 +1,31 @@ +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; +using static Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.EmailSettingGroup.EmailSettingGroupViewComponent; + +namespace Volo.Abp.SettingManagement.Blazor; + +[Mapper] +public partial class UpdateEmailSettingsViewModelToUpdateEmailSettingsDtoMapper : MapperBase +{ + public override partial UpdateEmailSettingsDto Map(UpdateEmailSettingsViewModel source); + + public override partial void Map(UpdateEmailSettingsViewModel source, UpdateEmailSettingsDto destination); +} + + +[Mapper] +public partial class EmailSettingsDtoToUpdateEmailSettingsViewModelMapper : MapperBase +{ + public override partial UpdateEmailSettingsViewModel Map(EmailSettingsDto source); + + public override partial void Map(EmailSettingsDto source, UpdateEmailSettingsViewModel destination); +} + +[Mapper] +public partial class SendTestEmailViewModelToSendTestEmailInputMapper : MapperBase +{ + public override partial SendTestEmailInput Map(SendTestEmailViewModel source); + + public override partial void Map(SendTestEmailViewModel source, SendTestEmailInput destination); +} + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Volo.Abp.SettingManagement.Blazor.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Volo.Abp.SettingManagement.Blazor.csproj index 61045cab96..e045dbf4bb 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Volo.Abp.SettingManagement.Blazor.csproj +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Volo.Abp.SettingManagement.Blazor.csproj @@ -9,7 +9,7 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs index b5d3df17ad..1bc204f316 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs @@ -1,8 +1,8 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; -using Volo.Abp.AutoMapper; using Volo.Abp.Http.ProxyScripting.Generators.JQuery; +using Volo.Abp.Mapperly; using Volo.Abp.Modularity; using Volo.Abp.SettingManagement.Localization; using Volo.Abp.SettingManagement.Web.Navigation; @@ -15,7 +15,7 @@ namespace Volo.Abp.SettingManagement.Web; [DependsOn( typeof(AbpSettingManagementApplicationContractsModule), - typeof(AbpAutoMapperModule), + typeof(AbpMapperlyModule), typeof(AbpAspNetCoreMvcUiThemeSharedModule), typeof(AbpSettingManagementDomainSharedModule) )] @@ -58,10 +58,6 @@ public class AbpSettingManagementWebModule : AbpModule options.DisableModule(SettingManagementRemoteServiceConsts.ModuleName); }); - context.Services.AddAutoMapperObjectMapper(); - Configure(options => - { - options.AddProfile(validate: true); - }); + context.Services.AddMapperlyObjectMapper(); } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs deleted file mode 100644 index 77afa99224..0000000000 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs +++ /dev/null @@ -1,14 +0,0 @@ -using AutoMapper; -using Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup; - -namespace Volo.Abp.SettingManagement.Web; - -public class SettingManagementWebAutoMapperProfile : Profile -{ - public SettingManagementWebAutoMapperProfile() - { - CreateMap(); - - CreateMap(); - } -} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebMappers.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebMappers.cs new file mode 100644 index 0000000000..8a205919c9 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebMappers.cs @@ -0,0 +1,22 @@ +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; +using static Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup.EmailSettingGroupViewComponent; +using static Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup.SendTestEmailModal; + +namespace Volo.Abp.SettingManagement.Web; + +[Mapper] +public partial class EmailSettingsDtoToUpdateEmailSettingsViewModelMapper : MapperBase +{ + public override partial UpdateEmailSettingsViewModel Map(EmailSettingsDto source); + + public override partial void Map(EmailSettingsDto source, UpdateEmailSettingsViewModel destination); +} + +[Mapper] +public partial class SendTestEmailViewModelToSendTestEmailInputMapper : MapperBase +{ + public override partial SendTestEmailInput Map(SendTestEmailViewModel source); + + public override partial void Map(SendTestEmailViewModel source, SendTestEmailInput destination); +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj index 182fbb46cd..49fe6fe0b2 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj @@ -15,7 +15,7 @@ - + From ca3473a7da6e9814f49dbecaaaf5b4bf23914e27 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Fri, 15 Aug 2025 09:14:00 +0300 Subject: [PATCH 6/6] Update studio docs for v1.2.1 release --- docs/en/studio/release-notes.md | 9 +++++++++ docs/en/studio/version-mapping.md | 1 + 2 files changed, 10 insertions(+) diff --git a/docs/en/studio/release-notes.md b/docs/en/studio/release-notes.md index 5601fe11d0..d36500ec3b 100644 --- a/docs/en/studio/release-notes.md +++ b/docs/en/studio/release-notes.md @@ -2,6 +2,15 @@ This document contains **brief release notes** for each ABP Studio release. Release notes only include **major features** and **visible enhancements**. Therefore, they don't include all the development done in the related version. +## 1.2.1 (2025-08-14) + +* Upgraded template dependencies for ABP Framework and LeptonX. (targeting ABP `9.3.1`) +* Migrated templates to standalone structure for Angular UI. +* Allowed relating tools with Kubernetes Services (allows to browse tools dashboard those are running in k8s). +* Made several enhancements for Solution Runner. +* Added test projects to **Application (Single Layer)** template (optional). + + ## 1.1.2 (2025-07-31) * Upgraded template dependencies for ABP Framework and LeptonX. (targeting ABP `9.2.3`) diff --git a/docs/en/studio/version-mapping.md b/docs/en/studio/version-mapping.md index 6fe3ba95be..eaf6dc2313 100644 --- a/docs/en/studio/version-mapping.md +++ b/docs/en/studio/version-mapping.md @@ -4,6 +4,7 @@ This document provides a general overview of the relationship between various ve | **ABP Studio Version** | **ABP Version of Startup Template** | |------------------------|---------------------------| +| 1.2.1 | 9.3.1 | | 1.1.2 | 9.2.3 | | 1.1.0 - 1.1.1 | 9.2.2 | | 1.0.2 | 9.2.1 |