From eec13fa333d6cfb71abd0aac7b8cfcf833b70e88 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Mon, 12 Oct 2020 10:57:09 +0200 Subject: [PATCH 001/108] New extension method to reset an object properties --- .../System/AbpObjectExtensions.cs | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs b/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs index 958398e0c5..9542383983 100644 --- a/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs +++ b/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs @@ -2,6 +2,7 @@ using System.ComponentModel; using System.Globalization; using System.Linq; +using System.Reflection; namespace System { @@ -105,5 +106,36 @@ namespace System return obj; } + + /// + /// Resets all fields of a given object to their default values. + /// + /// Type of the object + /// An object + /// Alternative custom method to reset the values. + /// Returns the original object. + public static T ResetState(this T obj, Action customReset = null) + { + if (customReset != null) + { + customReset(obj); + } + else + { + var properties = typeof(T).GetProperties(); + + foreach (var property in properties) + { + if (!property.CanWrite) + { + continue; + } + + property.SetValue(obj, null); + } + } + + return obj; + } } } From ed9f3f5c0a0d15f328d01dc05d63103bf455948d Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Mon, 12 Oct 2020 11:28:04 +0200 Subject: [PATCH 002/108] Reset model state when AbpCrudPageBase is opened --- framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index 8723209c53..44fc2403f0 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -318,7 +318,8 @@ namespace Volo.Abp.BlazoriseUI { await CheckCreatePolicyAsync(); - NewEntity = new TCreateViewModel(); + NewEntity.ResetState(); + CreateModal.Show(); } From 56fce17d70733f23510b0435b2780272b5ab5141 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Mon, 12 Oct 2020 11:28:10 +0200 Subject: [PATCH 003/108] Blazorise client side validation for RoleManagementBase --- .../Pages/Identity/RoleManagement.razor | 28 +++++++++++-------- .../Pages/Identity/RoleManagement.razor.cs | 15 ++++++++++ 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor index 781756dd71..a45aafbe59 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor @@ -78,26 +78,32 @@ { - + @L["NewRole"] - + + + + @L["DisplayName:RoleName"] + + + + + + + - @L["DisplayName:RoleName"] - - - - @L["DisplayName:IsDefault"] - @L["DisplayName:IsPublic"] + @L["DisplayName:IsDefault"] + @L["DisplayName:IsPublic"] - + - + @@ -107,7 +113,7 @@ { - + @L["Edit"] diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs index bccf3ddbd8..591707355b 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs @@ -1,5 +1,6 @@ using System; using System.Threading.Tasks; +using Blazorise; using Microsoft.AspNetCore.Authorization; using Volo.Abp.Application.Dtos; using Volo.Abp.BlazoriseUI; @@ -17,6 +18,8 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity protected bool ShouldShowEntityActions { get; set; } + protected Validations ValidationsRef { get; set; } + public RoleManagementBase() { ObjectMapperContext = typeof(AbpIdentityBlazorModule); @@ -38,5 +41,17 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity HasDeletePermission || HasManagePermissionsPermission; } + + protected virtual Task OnCreateEntityClicked() + { + if ( ValidationsRef.ValidateAll() ) + { + CreateModal.Hide(); + + return CreateEntityAsync(); + } + + return Task.CompletedTask; + } } } From 1a44a268f8787649ae32561ad83b2238468f8aaa Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Wed, 14 Oct 2020 12:11:39 +0200 Subject: [PATCH 004/108] Role and User client side Blazorise validations --- .../Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs | 2 +- .../System/AbpObjectExtensions.cs | 28 ++- .../Pages/Identity/RoleManagement.razor | 49 ++-- .../Pages/Identity/RoleManagement.razor.cs | 38 ++- .../Pages/Identity/UserManagement.razor | 219 ++++++++++++------ .../Pages/Identity/UserManagement.razor.cs | 47 +++- 6 files changed, 267 insertions(+), 116 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index 44fc2403f0..7616447552 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -335,7 +335,7 @@ namespace Volo.Abp.BlazoriseUI var entityDto = await AppService.GetAsync(id); EditingEntityId = id; - EditingEntity = MapToEditingEntity(entityDto); + EditingEntity.ApplyState(MapToEditingEntity(entityDto)); EditModal.Show(); } diff --git a/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs b/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs index 9542383983..a173c2a95d 100644 --- a/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs +++ b/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs @@ -110,7 +110,7 @@ namespace System /// /// Resets all fields of a given object to their default values. /// - /// Type of the object + /// Type of the object. /// An object /// Alternative custom method to reset the values. /// Returns the original object. @@ -137,5 +137,31 @@ namespace System return obj; } + + /// + /// Applies all fields of a given object from it's counterpart. + /// + /// Type of the object. + /// An object. + /// An object from which we copy the values. + /// Returns the original object. + public static T ApplyState(this T obj, T other) + { + // This code is not production ready and it should be removed once + // the proper validation in Blazorise is done! + var properties = typeof(T).GetProperties(); + + foreach (var property in properties) + { + if (!property.CanWrite) + { + continue; + } + + property.SetValue(obj, typeof(T).GetProperty(property.Name).GetValue(other)); + } + + return obj; + } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor index a45aafbe59..033a5293d8 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor @@ -1,5 +1,5 @@ @page "/identity/roles" -@attribute [Authorize(IdentityPermissions.Roles.Default)] +@attribute [Authorize( IdentityPermissions.Roles.Default )] @using Volo.Abp.Identity @using Microsoft.AspNetCore.Authorization @using Microsoft.Extensions.Localization @@ -7,14 +7,13 @@ @using Volo.Abp.PermissionManagement.Blazor.Components @inherits RoleManagementBase @inject IStringLocalizer L - @* ************************* PAGE HEADER ************************* *@

@L["Roles"]

- @if (HasCreatePermission) + @if ( HasCreatePermission ) { @@ -31,7 +30,7 @@ ShowPager="true" PageSize="PageSize"> - @if (ShouldShowEntityActions) + @if ( ShouldShowEntityActions ) { @@ -40,15 +39,15 @@ @L["Actions"] - @if (HasUpdatePermission) + @if ( HasUpdatePermission ) { @L["Edit"] } - @if (HasManagePermissionsPermission) + @if ( HasManagePermissionsPermission ) { @L["Permissions"] } - @if (HasDeletePermission) + @if ( HasDeletePermission ) { @L["Delete"] } @@ -60,11 +59,11 @@ @(context.As().Name) - @if (context.As().IsDefault) + @if ( context.As().IsDefault ) { @L["DisplayName:IsDefault"] } - @if (context.As().IsPublic) + @if ( context.As().IsPublic ) { @L["DisplayName:IsPublic"] } @@ -74,7 +73,7 @@ @* ************************* CREATE MODAL ************************* *@ -@if (HasCreatePermission) +@if ( HasCreatePermission ) { @@ -84,7 +83,7 @@
- + @L["DisplayName:RoleName"] @@ -103,13 +102,13 @@ - +
} @* ************************* EDIT MODAL ************************* *@ -@if (HasUpdatePermission) +@if ( HasUpdatePermission ) { @@ -119,17 +118,23 @@ - + + + + @L["DisplayName:RoleName"] + + + + + + + - @L["DisplayName:RoleName"] - - - - @L["DisplayName:IsDefault"] - @L["DisplayName:IsPublic"] + @L["DisplayName:IsDefault"] + @L["DisplayName:IsPublic"] - + @@ -139,4 +144,4 @@ } - + diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs index 591707355b..1645f1f2a3 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs @@ -8,7 +8,7 @@ using Volo.Abp.PermissionManagement.Blazor.Components; namespace Volo.Abp.Identity.Blazor.Pages.Identity { - public abstract class RoleManagementBase : AbpCrudPageBase + public abstract class RoleManagementBase : AbpCrudPageBase { protected const string PermissionProviderName = "R"; @@ -18,7 +18,9 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity protected bool ShouldShowEntityActions { get; set; } - protected Validations ValidationsRef { get; set; } + protected Validations CreateValidationsRef { get; set; } + + protected Validations EditValidationsRef { get; set; } public RoleManagementBase() { @@ -42,13 +44,39 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity HasManagePermissionsPermission; } - protected virtual Task OnCreateEntityClicked() + protected override Task OpenCreateModalAsync() + { + CreateValidationsRef.ClearAll(); + + return base.OpenCreateModalAsync(); + } + + protected override Task OpenEditModalAsync(Guid id) + { + EditValidationsRef.ClearAll(); + + return base.OpenEditModalAsync(id); + } + + protected override Task CreateEntityAsync() { - if ( ValidationsRef.ValidateAll() ) + if (CreateValidationsRef.ValidateAll()) { CreateModal.Hide(); - return CreateEntityAsync(); + return base.CreateEntityAsync(); + } + + return Task.CompletedTask; + } + + protected override Task UpdateEntityAsync() + { + if (EditValidationsRef.ValidateAll()) + { + EditModal.Hide(); + + return base.UpdateEntityAsync(); } return Task.CompletedTask; diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index bfbd2150c6..e3a24323e8 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -1,19 +1,18 @@ @page "/identity/users" -@attribute [Authorize(IdentityPermissions.Users.Default)] +@attribute [Authorize( IdentityPermissions.Users.Default )] @using Microsoft.AspNetCore.Authorization @using Microsoft.Extensions.Localization @using Volo.Abp.Identity.Localization @using Volo.Abp.PermissionManagement.Blazor.Components @inherits UserManagementBase @inject IStringLocalizer L - @* ************************* PAGE HEADER ************************* *@

@L["Users"]

- @if (HasCreatePermission) + @if ( HasCreatePermission ) { @@ -30,7 +29,7 @@ ShowPager="true" PageSize="PageSize"> - @if (ShouldShowEntityActions) + @if ( ShouldShowEntityActions ) { @@ -39,17 +38,17 @@ @L["Actions"] - @if (HasUpdatePermission) + @if ( HasUpdatePermission ) { @L["Edit"] } - @if (HasManagePermissionsPermission) + @if ( HasManagePermissionsPermission ) { @L["Permissions"] } - @if (HasDeletePermission) + @if ( HasDeletePermission ) { - + @L["Delete"] } @@ -76,17 +75,17 @@ @* ************************* CREATE MODAL ************************* *@ -@if (HasCreatePermission) +@if ( HasCreatePermission ) { - + @L["NewUser"] - + - + @L["UserInformations"] @@ -94,71 +93,107 @@ + + + @L["DisplayName:UserName"] + + + + + + + + + + @L["DisplayName:Name"] + + + + + + + + + + @L["DisplayName:Surname"] + + + + + + + + + + @L["DisplayName:Password"] + + + + + + + + + + @L["DisplayName:Email"] + + + + + + + + + + @L["DisplayName:PhoneNumber"] + + + + + + + - @L["DisplayName:UserName"] - - - - @L["DisplayName:Name"] - - - - @L["DisplayName:Surname"] - - - - @L["DisplayName:Password"] - - - - @L["DisplayName:Email"] - - - - @L["DisplayName:PhoneNumber"] - - - - @L["DisplayName:LockoutEnabled"] + @L["DisplayName:LockoutEnabled"] - @if (NewUserRoles != null) + @if ( NewUserRoles != null ) { - @foreach (var role in NewUserRoles) + @foreach ( var role in NewUserRoles ) { - - @role.Name + + @role.Name } } - + - + } @* ************************* EDIT MODAL ************************* *@ -@if (HasUpdatePermission) +@if ( HasUpdatePermission ) { - + @L["Edit"] - + - - + + @@ -168,55 +203,89 @@ - @L["DisplayName:UserName"] - - - - @L["DisplayName:Name"] - + + @L["DisplayName:UserName"] + + + + + + + + + @L["DisplayName:Name"] + + + + + + + @L["DisplayName:Surname"] - - - - @L["DisplayName:Password"] - - - - @L["DisplayName:Email"] - - - - @L["DisplayName:PhoneNumber"] - + + + + + + + + @L["DisplayName:Password"] + + + + + + + + + + @L["DisplayName:Email"] + + + + + + + + + + @L["DisplayName:PhoneNumber"] + + + + + + + - @L["DisplayName:LockoutEnabled"] + @L["DisplayName:LockoutEnabled"] - @if (EditUserRoles != null) + @if ( EditUserRoles != null ) { - @foreach (var role in EditUserRoles) + @foreach ( var role in EditUserRoles ) { - - @role.Name + + @role.Name } } - + - + } - \ No newline at end of file + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs index a488cbd358..dc51f59dc1 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Blazorise; using Microsoft.AspNetCore.Authorization; using Volo.Abp.BlazoriseUI; using Volo.Abp.PermissionManagement.Blazor.Components; @@ -29,6 +30,10 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity protected string EditModalSelectedTab = DefaultSelectedTab; + protected Validations CreateValidationsRef { get; set; } + + protected Validations EditValidationsRef { get; set; } + public UserManagementBase() { ObjectMapperContext = typeof(AbpIdentityBlazorModule); @@ -60,44 +65,62 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity protected override Task OpenCreateModalAsync() { + CreateValidationsRef.ClearAll(); + CreateModalSelectedTab = DefaultSelectedTab; NewUserRoles = Roles.Select(x => new AssignedRoleViewModel - { - Name = x.Name, - IsAssigned = x.IsDefault - }).ToArray(); + { + Name = x.Name, + IsAssigned = x.IsDefault + }).ToArray(); return base.OpenCreateModalAsync(); } protected override Task CreateEntityAsync() { - NewEntity.RoleNames = NewUserRoles.Where(x => x.IsAssigned).Select(x => x.Name).ToArray(); + if (CreateValidationsRef.ValidateAll()) + { + CreateModal.Hide(); + + NewEntity.RoleNames = NewUserRoles.Where(x => x.IsAssigned).Select(x => x.Name).ToArray(); - return base.CreateEntityAsync(); + return base.CreateEntityAsync(); + } + + return Task.CompletedTask; } protected override async Task OpenEditModalAsync(Guid id) { + EditValidationsRef.ClearAll(); + EditModalSelectedTab = DefaultSelectedTab; var userRoleNames = (await AppService.GetRolesAsync(id)).Items.Select(r => r.Name).ToList(); EditUserRoles = Roles.Select(x => new AssignedRoleViewModel - { - Name = x.Name, - IsAssigned = userRoleNames.Contains(x.Name) - }).ToArray(); + { + Name = x.Name, + IsAssigned = userRoleNames.Contains(x.Name) + }).ToArray(); await base.OpenEditModalAsync(id); } protected override Task UpdateEntityAsync() { - EditingEntity.RoleNames = EditUserRoles.Where(x => x.IsAssigned).Select(x => x.Name).ToArray(); + if (EditValidationsRef.ValidateAll()) + { + EditModal.Hide(); + + EditingEntity.RoleNames = EditUserRoles.Where(x => x.IsAssigned).Select(x => x.Name).ToArray(); + + return base.UpdateEntityAsync(); + } - return base.UpdateEntityAsync(); + return Task.CompletedTask; } } From f4e568befe16efbf99123e558d24e0c11638a0e8 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Wed, 21 Oct 2020 12:11:11 +0200 Subject: [PATCH 005/108] WIP message arguments localization --- ...dentityBlazorMessageLocalizerExtensions.cs | 15 ++++++ .../Pages/Identity/RoleManagement.razor | 5 +- .../Identity/AbpIdentityDomainSharedModule.cs | 5 +- .../Identity/AbpIdentityMessageLocalizer.cs | 46 +++++++++++++++++++ 4 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityMessageLocalizer.cs diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs new file mode 100644 index 0000000000..480b17ac14 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using System.Linq; +using Blazorise; + +namespace Volo.Abp.Identity.Blazor +{ + public static class AbpIdentityBlazorMessageLocalizerExtensions + { + public static IEnumerable Localize(this AbpIdentityMessageLocalizer abpIdentityMessageLocalizer, + ValidationMessageLocalizerEventArgs eventArgs) + { + return abpIdentityMessageLocalizer.Localize(eventArgs.Messages?.Select(m => (m.Message, m.MessageArguments)))?.ToArray(); + } + } +} diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor index 033a5293d8..e850e5c87a 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor @@ -7,6 +7,7 @@ @using Volo.Abp.PermissionManagement.Blazor.Components @inherits RoleManagementBase @inject IStringLocalizer L +@inject AbpIdentityMessageLocalizer ML @* ************************* PAGE HEADER ************************* *@ @@ -84,7 +85,7 @@ - + @L["DisplayName:RoleName"] @@ -120,7 +121,7 @@ - + @L["DisplayName:RoleName"] diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityDomainSharedModule.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityDomainSharedModule.cs index e14ce5e3f4..5a63d52b24 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityDomainSharedModule.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityDomainSharedModule.cs @@ -1,4 +1,5 @@ -using Volo.Abp.Features; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Features; using Volo.Abp.Identity.Localization; using Volo.Abp.Localization; using Volo.Abp.Localization.ExceptionHandling; @@ -37,6 +38,8 @@ namespace Volo.Abp.Identity { options.MapCodeNamespace("Volo.Abp.Identity", typeof(IdentityResource)); }); + + context.Services.AddSingleton(typeof(AbpIdentityMessageLocalizer<>), typeof(AbpIdentityMessageLocalizer<>)); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityMessageLocalizer.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityMessageLocalizer.cs new file mode 100644 index 0000000000..ff2c50ee83 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityMessageLocalizer.cs @@ -0,0 +1,46 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Extensions.Localization; + +namespace Volo.Abp.Identity +{ + public class AbpIdentityMessageLocalizer + { + private readonly IStringLocalizer stringLocalizer; + + public AbpIdentityMessageLocalizer(IStringLocalizer stringLocalizer) + { + this.stringLocalizer = stringLocalizer; + } + + public virtual string Localize(string format, params string[] arguments) + { + try + { + return arguments?.Length > 0 + ? string.Format(stringLocalizer[format], LocalizeArguments(arguments)?.ToArray()) + : stringLocalizer[format]; + } + catch + { + return stringLocalizer[format]; + } + } + + public virtual IEnumerable Localize(IEnumerable<(string format, string[] arguments)> messages) + { + return messages?.Select(m => Localize(m.format, m.arguments)); + } + + protected virtual IEnumerable LocalizeArguments(IEnumerable arguments) + { + foreach (var argument in arguments) + { + yield return stringLocalizer[$"DisplayName:{argument}"] + ?? stringLocalizer[argument] + ?? argument; + } + } + } +} From b3ba2e3186e078607ff0f6489022eb20c45cfaa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0lkay=20=C4=B0lknur?= Date: Wed, 21 Oct 2020 17:33:54 +0300 Subject: [PATCH 006/108] entity actions component implementation. --- .../Components/EntityAction.razor | 21 ++++++++++ .../Components/EntityAction.razor.cs | 33 ++++++++++++++++ .../Components/EntityActions.razor | 30 ++++++++++++++ .../Components/EntityActions.razor.cs | 39 +++++++++++++++++++ 4 files changed, 123 insertions(+) create mode 100644 framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor create mode 100644 framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs create mode 100644 framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor create mode 100644 framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor new file mode 100644 index 0000000000..c36620f195 --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor @@ -0,0 +1,21 @@ +@typeparam TItem +@using Blazorise + +@if (ParentActions.Type == ActionType.Dropdown) +{ + if (IsVisible && Primary == false) + { + @Text + } +} +else +{ + if (IsVisible) + { + + @Text + + } +} diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs new file mode 100644 index 0000000000..8dc4dcb5a0 --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs @@ -0,0 +1,33 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; + +namespace Volo.Abp.BlazoriseUI.Components +{ + public partial class EntityAction : ComponentBase + { + [Parameter] + public bool IsVisible { get; set; } + [Parameter] + public string Text { get; set; } + + [Parameter] + public bool Primary { get; set; } + + [Parameter] + public EventCallback Clicked { get; set; } + + [CascadingParameter] + public EntityActions ParentActions { get; set; } + + protected override void OnInitialized() + { + base.OnInitialized(); + ParentActions.AddAction(this); + } + + protected virtual async Task ActionClickedAsync() + { + await Clicked.InvokeAsync(ParentActions.Entity); + } + } +} diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor new file mode 100644 index 0000000000..b5afcdbadf --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor @@ -0,0 +1,30 @@ +@typeparam TItem + + @if (Type == ActionType.Dropdown) + { + + @if (HasPrimaryAction) + { + + @PrimaryAction.Text + + + } + else + { + + @ToggleText + + } + + @ChildContent + + + } + else + { + @ChildContent + } + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs new file mode 100644 index 0000000000..d24c7125a7 --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs @@ -0,0 +1,39 @@ +using System.Collections.Generic; +using System.Linq; +using Blazorise; +using Microsoft.AspNetCore.Components; + +namespace Volo.Abp.BlazoriseUI.Components +{ + public partial class EntityActions : ComponentBase + { + protected List> Actions = new List>(); + protected bool HasPrimaryAction => Actions.Any(t => t.Primary); + protected EntityAction PrimaryAction => Actions.FirstOrDefault(t => t.Primary); + protected internal ActionType Type => Actions.Count(t => t.IsVisible) > 1 ? ActionType.Dropdown : ActionType.Button; + + [Parameter] + public Color ToggleColor { get; set; } + + [Parameter] + public string ToggleText { get; set; } + + [Parameter] + public TItem Entity { get; set; } + + [Parameter] + public RenderFragment ChildContent { get; set; } + + internal void AddAction(EntityAction action) + { + Actions.Add(action); + StateHasChanged(); + } + } + + public enum ActionType + { + Dropdown, + Button + } +} From eb2be1d672335f188ffac94f2a715c2588cddc49 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Thu, 22 Oct 2020 11:25:57 +0200 Subject: [PATCH 007/108] Optimized usage of Localize method --- .../Pages/Identity/RoleManagement.razor | 4 +- .../Pages/Identity/UserManagement.razor | 47 ++++++++++--------- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor index e850e5c87a..daba629c3e 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor @@ -85,7 +85,7 @@ - + @L["DisplayName:RoleName"] @@ -121,7 +121,7 @@ - + @L["DisplayName:RoleName"] diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index e3a24323e8..f0fe98c61c 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -6,6 +6,7 @@ @using Volo.Abp.PermissionManagement.Blazor.Components @inherits UserManagementBase @inject IStringLocalizer L +@inject AbpIdentityMessageLocalizer ML @* ************************* PAGE HEADER ************************* *@ @@ -79,7 +80,7 @@ { - + @L["NewUser"] @@ -93,7 +94,7 @@ - + @L["DisplayName:UserName"] @@ -103,7 +104,7 @@ - + @L["DisplayName:Name"] @@ -113,7 +114,7 @@ - + @L["DisplayName:Surname"] @@ -133,7 +134,7 @@ - + @L["DisplayName:Email"] @@ -143,7 +144,7 @@ - + @L["DisplayName:PhoneNumber"] @@ -186,7 +187,7 @@ { - + @L["Edit"] @@ -202,17 +203,17 @@ - - + + @L["DisplayName:UserName"] - - - + + + @L["DisplayName:Name"] @@ -222,14 +223,16 @@ - - @L["DisplayName:Surname"] - - - - - - + + + @L["DisplayName:Surname"] + + + + + + + @L["DisplayName:Password"] @@ -240,7 +243,7 @@ - + @L["DisplayName:Email"] @@ -250,7 +253,7 @@ - + @L["DisplayName:PhoneNumber"] From f24a7d18e18a35cc7ccf1a7e7ebae4d6b0700c5f Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Thu, 22 Oct 2020 11:26:33 +0200 Subject: [PATCH 008/108] Fixed blazor app element for .Net 5 --- .../MyProjectNameBlazorModule.cs | 2 +- .../src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs index 7554ae8aca..279fe57114 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs @@ -77,7 +77,7 @@ namespace MyCompanyName.MyProjectName.Blazor private static void ConfigureUI(WebAssemblyHostBuilder builder) { - builder.RootComponents.Add("app"); + builder.RootComponents.Add("#app"); } private static void ConfigureHttpClient(ServiceConfigurationContext context, IWebAssemblyHostEnvironment environment) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html index 4566bec3c1..576e00f716 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html @@ -17,7 +17,7 @@ - Loading... +
Loading...
From 38495de1812f66d0151d12f20e97e51961a5ddca Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Thu, 22 Oct 2020 11:27:55 +0200 Subject: [PATCH 009/108] Added editorconfig for identity/module solution --- modules/identity/.editorconfig | 131 +++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 modules/identity/.editorconfig diff --git a/modules/identity/.editorconfig b/modules/identity/.editorconfig new file mode 100644 index 0000000000..9f20b90112 --- /dev/null +++ b/modules/identity/.editorconfig @@ -0,0 +1,131 @@ +# Rules in this file were initially inferred by Visual Studio IntelliCode from the D:\Projects\Volosoft\abp\framework codebase based on best match to current usage at 2.10.2020. +# You can modify the rules from these initially generated values to suit your own policies +# You can learn more about editorconfig here: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference +[*.cs] + + +#Core editorconfig formatting - indentation + +#use soft tabs (spaces) for indentation +indent_style = space + +#Formatting - indentation options + +#indent switch case contents. +csharp_indent_case_contents = true +#indent switch labels +csharp_indent_switch_labels = true + +#Formatting - new line options + +#place catch statements on a new line +csharp_new_line_before_catch = true +#place else statements on a new line +csharp_new_line_before_else = true +#require members of object intializers to be on separate lines +csharp_new_line_before_members_in_object_initializers = true +#require braces to be on a new line for accessors, methods, lambdas, object_collection_array_initializers, control_blocks, types, and properties (also known as "Allman" style) +csharp_new_line_before_open_brace = accessors, methods, lambdas, object_collection_array_initializers, control_blocks, types, properties + +#Formatting - organize using options + +#sort System.* using directives alphabetically, and place them before other usings +dotnet_sort_system_directives_first = true + +#Formatting - spacing options + +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false + +#Formatting - wrapping options + +#leave code block on single line +csharp_preserve_single_line_blocks = true + +#Style - Code block preferences + +#prefer curly braces even for one line of code +csharp_prefer_braces = true:suggestion + +#Style - expression bodied member options + +#prefer block bodies for constructors +csharp_style_expression_bodied_constructors = false:suggestion +#prefer block bodies for methods +csharp_style_expression_bodied_methods = false:suggestion +#prefer expression-bodied members for properties +csharp_style_expression_bodied_properties = true:suggestion + +#Style - expression level options + +#prefer out variables to be declared inline in the argument list of a method call when possible +csharp_style_inlined_variable_declaration = true:suggestion +#prefer the language keyword for member access expressions, instead of the type name, for types that have a keyword to represent them +dotnet_style_predefined_type_for_member_access = true:suggestion + +#Style - Expression-level preferences + +#prefer default over default(T) +csharp_prefer_simple_default_expression = true:suggestion +#prefer objects to be initialized using object initializers when possible +dotnet_style_object_initializer = true:suggestion +#prefer inferred tuple element names +dotnet_style_prefer_inferred_tuple_names = true:suggestion + +#Style - implicit and explicit types + +#prefer var over explicit type in all cases, unless overridden by another code style rule +csharp_style_var_elsewhere = true:suggestion +#prefer var is used to declare variables with built-in system types such as int +csharp_style_var_for_built_in_types = true:suggestion +#prefer var when the type is already mentioned on the right-hand side of a declaration expression +csharp_style_var_when_type_is_apparent = true:suggestion + +#Style - language keyword and framework type options + +#prefer the language keyword for local variables, method parameters, and class members, instead of the type name, for types that have a keyword to represent them +dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion + +#Style - modifier options + +#prefer accessibility modifiers to be declared except for public interface members. This will currently not differ from always and will act as future proofing for if C# adds default interface methods. +dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion + +#Style - Modifier preferences + +#when this rule is set to a list of modifiers, prefer the specified ordering. +csharp_preferred_modifier_order = public,protected,private,virtual,async,static,override,readonly,abstract:suggestion + +#Style - Pattern matching + +#prefer pattern matching instead of is expression with type casts +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion + +#Style - qualification options + +#prefer fields not to be prefaced with this. or Me. in Visual Basic +dotnet_style_qualification_for_field = false:suggestion +#prefer methods not to be prefaced with this. or Me. in Visual Basic +dotnet_style_qualification_for_method = false:suggestion +#prefer properties not to be prefaced with this. or Me. in Visual Basic +dotnet_style_qualification_for_property = false:suggestion From d6fce9d9d65e474d0412174cabd113667f5fbdb4 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Thu, 22 Oct 2020 11:36:53 +0200 Subject: [PATCH 010/108] Update Blazorise 0.9.2-preview12 --- .../src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj | 4 ++-- .../MyCompanyName.MyProjectName.Blazor.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj index e696a2f915..2e67a2b182 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj +++ b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index d1bec5d5d3..31f9899115 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -6,8 +6,8 @@ - - + + From 1d84ce4f8af7b13c9bf80005bbacf3a1adb94de4 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Thu, 22 Oct 2020 11:43:21 +0200 Subject: [PATCH 011/108] Fix Password localization --- .../Pages/Identity/UserManagement.razor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index f0fe98c61c..03a8b68fa7 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -124,7 +124,7 @@
- + @L["DisplayName:Password"] @@ -233,7 +233,7 @@ - + @L["DisplayName:Password"] From 167aae0ec520d2e1bae76fd025f4476ab9e8415e Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Fri, 23 Oct 2020 10:05:34 +0200 Subject: [PATCH 012/108] Fixed formating --- .../Pages/Identity/RoleManagement.razor | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor index daba629c3e..4246d2dd76 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor @@ -11,10 +11,10 @@ @* ************************* PAGE HEADER ************************* *@ -

@L["Roles"]

+ @L["Roles"]
- @if ( HasCreatePermission ) + @if (HasCreatePermission) { @@ -31,7 +31,7 @@ ShowPager="true" PageSize="PageSize"> - @if ( ShouldShowEntityActions ) + @if (ShouldShowEntityActions) { @@ -40,15 +40,15 @@ @L["Actions"] - @if ( HasUpdatePermission ) + @if (HasUpdatePermission) { @L["Edit"] } - @if ( HasManagePermissionsPermission ) + @if (HasManagePermissionsPermission) { @L["Permissions"] } - @if ( HasDeletePermission ) + @if (HasDeletePermission) { @L["Delete"] } @@ -60,11 +60,11 @@ @(context.As().Name) - @if ( context.As().IsDefault ) + @if (context.As().IsDefault) { @L["DisplayName:IsDefault"] } - @if ( context.As().IsPublic ) + @if (context.As().IsPublic) { @L["DisplayName:IsPublic"] } @@ -74,7 +74,7 @@ @* ************************* CREATE MODAL ************************* *@ -@if ( HasCreatePermission ) +@if (HasCreatePermission) { @@ -109,7 +109,7 @@ } @* ************************* EDIT MODAL ************************* *@ -@if ( HasUpdatePermission ) +@if (HasUpdatePermission) { From 157d7b1d6e732bd4f6beb2b8ba2485c3e85b7f37 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Fri, 23 Oct 2020 11:06:07 +0200 Subject: [PATCH 013/108] Use ObjectMapper for NewEntity and EditingEntity --- .../src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index 7616447552..c6491f1ec1 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -318,7 +318,11 @@ namespace Volo.Abp.BlazoriseUI { await CheckCreatePolicyAsync(); - NewEntity.ResetState(); + ObjectMapper.Map(new TCreateViewModel(), NewEntity); + + // Mapper will not notify Blazor that binded values are changed + // so we need to notify it manually by calling StateHasChanged + await InvokeAsync(() => StateHasChanged()); CreateModal.Show(); } @@ -334,8 +338,12 @@ namespace Volo.Abp.BlazoriseUI await CheckUpdatePolicyAsync(); var entityDto = await AppService.GetAsync(id); + EditingEntityId = id; - EditingEntity.ApplyState(MapToEditingEntity(entityDto)); + ObjectMapper.Map(entityDto, EditingEntity); + + await InvokeAsync(() => StateHasChanged()); + EditModal.Show(); } @@ -379,8 +387,6 @@ namespace Volo.Abp.BlazoriseUI CreateModal.Hide(); } - - protected virtual async Task UpdateEntityAsync() { await CheckUpdatePolicyAsync(); From b5986115a2ac737ce7bcc90ef9839d5585a639d2 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Fri, 23 Oct 2020 11:13:20 +0200 Subject: [PATCH 014/108] Remove explicit Auto validation mode --- .../Pages/Identity/RoleManagement.razor | 22 +++++++++---------- .../Pages/Identity/UserManagement.razor | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor index 4246d2dd76..ef59e969fd 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor @@ -14,7 +14,7 @@ @L["Roles"] - @if (HasCreatePermission) + @if ( HasCreatePermission ) { @@ -31,7 +31,7 @@ ShowPager="true" PageSize="PageSize"> - @if (ShouldShowEntityActions) + @if ( ShouldShowEntityActions ) { @@ -40,15 +40,15 @@ @L["Actions"] - @if (HasUpdatePermission) + @if ( HasUpdatePermission ) { @L["Edit"] } - @if (HasManagePermissionsPermission) + @if ( HasManagePermissionsPermission ) { @L["Permissions"] } - @if (HasDeletePermission) + @if ( HasDeletePermission ) { @L["Delete"] } @@ -60,11 +60,11 @@ @(context.As().Name) - @if (context.As().IsDefault) + @if ( context.As().IsDefault ) { @L["DisplayName:IsDefault"] } - @if (context.As().IsPublic) + @if ( context.As().IsPublic ) { @L["DisplayName:IsPublic"] } @@ -74,7 +74,7 @@ @* ************************* CREATE MODAL ************************* *@ -@if (HasCreatePermission) +@if ( HasCreatePermission ) { @@ -84,7 +84,7 @@ - + @L["DisplayName:RoleName"] @@ -109,7 +109,7 @@ } @* ************************* EDIT MODAL ************************* *@ -@if (HasUpdatePermission) +@if ( HasUpdatePermission ) { @@ -119,7 +119,7 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index 03a8b68fa7..0ed1fd3d5a 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -86,7 +86,7 @@ - + @L["UserInformations"] @@ -193,7 +193,7 @@ - + From e6b9253614c883ae19be2039804d5622e372214b Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Fri, 23 Oct 2020 11:25:09 +0200 Subject: [PATCH 015/108] Removed AbpIdentityMessageLocalizer --- ...dentityBlazorMessageLocalizerExtensions.cs | 35 ++++++++++++-- .../Pages/Identity/RoleManagement.razor | 5 +- .../Pages/Identity/UserManagement.razor | 25 +++++----- .../Identity/AbpIdentityDomainSharedModule.cs | 2 - .../Identity/AbpIdentityMessageLocalizer.cs | 46 ------------------- 5 files changed, 46 insertions(+), 67 deletions(-) delete mode 100644 modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityMessageLocalizer.cs diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs index 480b17ac14..bb5214ac63 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs @@ -1,15 +1,44 @@ using System.Collections.Generic; using System.Linq; using Blazorise; +using Microsoft.Extensions.Localization; namespace Volo.Abp.Identity.Blazor { public static class AbpIdentityBlazorMessageLocalizerExtensions { - public static IEnumerable Localize(this AbpIdentityMessageLocalizer abpIdentityMessageLocalizer, - ValidationMessageLocalizerEventArgs eventArgs) + public static IEnumerable Localize(this IStringLocalizer stringLocalizer, ValidationMessageLocalizerEventArgs eventArgs) { - return abpIdentityMessageLocalizer.Localize(eventArgs.Messages?.Select(m => (m.Message, m.MessageArguments)))?.ToArray(); + return LocalizeMessages(stringLocalizer, eventArgs.Messages?.Select(m => (m.Message, m.MessageArguments)))?.ToArray(); + } + + private static IEnumerable LocalizeMessages(IStringLocalizer stringLocalizer, IEnumerable<(string format, string[] arguments)> messages) + { + return messages?.Select(m => LocalizeMessage(stringLocalizer, m.format, m.arguments)); + } + + private static string LocalizeMessage(IStringLocalizer stringLocalizer, string format, params string[] arguments) + { + try + { + return arguments?.Length > 0 + ? string.Format(stringLocalizer[format], LocalizeMessageArguments(stringLocalizer, arguments)?.ToArray()) + : stringLocalizer[format]; + } + catch + { + return stringLocalizer[format]; + } + } + + private static IEnumerable LocalizeMessageArguments(IStringLocalizer stringLocalizer, IEnumerable arguments) + { + foreach (var argument in arguments) + { + yield return stringLocalizer[$"DisplayName:{argument}"] + ?? stringLocalizer[argument] + ?? argument; + } } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor index ef59e969fd..ac40aca83d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor @@ -7,7 +7,6 @@ @using Volo.Abp.PermissionManagement.Blazor.Components @inherits RoleManagementBase @inject IStringLocalizer L -@inject AbpIdentityMessageLocalizer ML @* ************************* PAGE HEADER ************************* *@ @@ -85,7 +84,7 @@ - + @L["DisplayName:RoleName"] @@ -121,7 +120,7 @@ - + @L["DisplayName:RoleName"] diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index 0ed1fd3d5a..6f33181f8a 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -6,7 +6,6 @@ @using Volo.Abp.PermissionManagement.Blazor.Components @inherits UserManagementBase @inject IStringLocalizer L -@inject AbpIdentityMessageLocalizer ML @* ************************* PAGE HEADER ************************* *@ @@ -94,7 +93,7 @@ - + @L["DisplayName:UserName"] @@ -104,7 +103,7 @@ - + @L["DisplayName:Name"] @@ -114,7 +113,7 @@ - + @L["DisplayName:Surname"] @@ -124,7 +123,7 @@ - + @L["DisplayName:Password"] @@ -134,7 +133,7 @@ - + @L["DisplayName:Email"] @@ -144,7 +143,7 @@ - + @L["DisplayName:PhoneNumber"] @@ -203,7 +202,7 @@ - + @L["DisplayName:UserName"] @@ -213,7 +212,7 @@ - + @L["DisplayName:Name"] @@ -223,7 +222,7 @@ - + @L["DisplayName:Surname"] @@ -233,7 +232,7 @@ - + @L["DisplayName:Password"] @@ -243,7 +242,7 @@ - + @L["DisplayName:Email"] @@ -253,7 +252,7 @@ - + @L["DisplayName:PhoneNumber"] diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityDomainSharedModule.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityDomainSharedModule.cs index 5a63d52b24..80d039b7d7 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityDomainSharedModule.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityDomainSharedModule.cs @@ -38,8 +38,6 @@ namespace Volo.Abp.Identity { options.MapCodeNamespace("Volo.Abp.Identity", typeof(IdentityResource)); }); - - context.Services.AddSingleton(typeof(AbpIdentityMessageLocalizer<>), typeof(AbpIdentityMessageLocalizer<>)); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityMessageLocalizer.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityMessageLocalizer.cs deleted file mode 100644 index ff2c50ee83..0000000000 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityMessageLocalizer.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using Microsoft.Extensions.Localization; - -namespace Volo.Abp.Identity -{ - public class AbpIdentityMessageLocalizer - { - private readonly IStringLocalizer stringLocalizer; - - public AbpIdentityMessageLocalizer(IStringLocalizer stringLocalizer) - { - this.stringLocalizer = stringLocalizer; - } - - public virtual string Localize(string format, params string[] arguments) - { - try - { - return arguments?.Length > 0 - ? string.Format(stringLocalizer[format], LocalizeArguments(arguments)?.ToArray()) - : stringLocalizer[format]; - } - catch - { - return stringLocalizer[format]; - } - } - - public virtual IEnumerable Localize(IEnumerable<(string format, string[] arguments)> messages) - { - return messages?.Select(m => Localize(m.format, m.arguments)); - } - - protected virtual IEnumerable LocalizeArguments(IEnumerable arguments) - { - foreach (var argument in arguments) - { - yield return stringLocalizer[$"DisplayName:{argument}"] - ?? stringLocalizer[argument] - ?? argument; - } - } - } -} From f7a3955e368b80dd4397849a30a251d490afaa18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0lkay=20=C4=B0lknur?= Date: Fri, 23 Oct 2020 15:13:01 +0300 Subject: [PATCH 016/108] Introduce DataGridActionsColumn and add policy check, default value setting --- .../Components/DataGridEntityActionsColumn.cs | 23 ++++++++ .../Components/EntityAction.razor | 5 +- .../Components/EntityAction.razor.cs | 57 +++++++++++++++---- .../Components/EntityActions.razor | 7 +-- .../Components/EntityActions.razor.cs | 30 +++++++--- 5 files changed, 98 insertions(+), 24 deletions(-) create mode 100644 framework/src/Volo.Abp.BlazoriseUI/Components/DataGridEntityActionsColumn.cs diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/DataGridEntityActionsColumn.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/DataGridEntityActionsColumn.cs new file mode 100644 index 0000000000..316c01370b --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/DataGridEntityActionsColumn.cs @@ -0,0 +1,23 @@ +using System.Linq; +using Blazorise.DataGrid; +using Localization.Resources.AbpUi; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; + +namespace Volo.Abp.BlazoriseUI.Components +{ + public class DataGridEntityActionsColumn : DataGridColumn + { + [Inject] + public IStringLocalizer UiLocalizer { get; set; } + + protected override void OnInitialized() + { + base.OnInitialized(); + Caption = UiLocalizer["Actions"]; + Width = "150px"; + Sortable = false; + Field = typeof(TItem).GetProperties().First().Name; + } + } +} diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor index c36620f195..4988af6725 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor @@ -1,5 +1,4 @@ -@typeparam TItem -@using Blazorise +@using Blazorise @if (ParentActions.Type == ActionType.Dropdown) { @@ -13,7 +12,7 @@ else if (IsVisible) { @Text diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs index 8dc4dcb5a0..872a735f83 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs @@ -1,12 +1,16 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; +using Blazorise; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Components; +using Volo.Abp.AspNetCore.Components.WebAssembly; namespace Volo.Abp.BlazoriseUI.Components { - public partial class EntityAction : ComponentBase + public partial class EntityAction : ComponentBase { - [Parameter] - public bool IsVisible { get; set; } + internal bool IsVisible; + [Parameter] public string Text { get; set; } @@ -14,20 +18,53 @@ namespace Volo.Abp.BlazoriseUI.Components public bool Primary { get; set; } [Parameter] - public EventCallback Clicked { get; set; } + public EventCallback Clicked { get; set; } + + [Parameter] + public string Policy { get; set; } + + [Parameter] + public Color Color { get; set; } + + [Parameter] + public string ConfirmationMessage { get; set; } [CascadingParameter] - public EntityActions ParentActions { get; set; } + public EntityActions ParentActions { get; set; } - protected override void OnInitialized() + [Inject] + protected IAuthorizationService AuthorizationService { get; set; } + + [Inject] + protected IUiMessageService UiMessageService { get; set; } + + protected async override Task OnInitializedAsync() { - base.OnInitialized(); + await base.OnInitializedAsync(); + await SetDefaultValuesAsync(); ParentActions.AddAction(this); + IsVisible = await AuthorizationService.IsGrantedAsync(Policy); + } + + protected internal virtual async Task ActionClickedAsync() + { + if (!ConfirmationMessage.IsNullOrEmpty()) + { + if (await UiMessageService.ConfirmAsync(ConfirmationMessage)) + { + await Clicked.InvokeAsync(); + } + } + else + { + await Clicked.InvokeAsync(); + } } - protected virtual async Task ActionClickedAsync() + protected virtual ValueTask SetDefaultValuesAsync() { - await Clicked.InvokeAsync(ParentActions.Entity); + Color = Color.Primary; + return ValueTask.CompletedTask; } } } diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor index b5afcdbadf..16e4889490 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor @@ -1,13 +1,12 @@ -@typeparam TItem - + @if (Type == ActionType.Dropdown) { @if (HasPrimaryAction) { + Color="@PrimaryAction.Color" + Clicked="async ()=> await PrimaryAction.ActionClickedAsync()"> @PrimaryAction.Text diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs index d24c7125a7..9024bf0d4b 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs @@ -1,15 +1,18 @@ using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Blazorise; +using Localization.Resources.AbpUi; using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; namespace Volo.Abp.BlazoriseUI.Components { - public partial class EntityActions : ComponentBase + public partial class EntityActions : ComponentBase { - protected List> Actions = new List>(); + protected readonly List Actions = new List(); protected bool HasPrimaryAction => Actions.Any(t => t.Primary); - protected EntityAction PrimaryAction => Actions.FirstOrDefault(t => t.Primary); + protected EntityAction PrimaryAction => Actions.FirstOrDefault(t => t.Primary); protected internal ActionType Type => Actions.Count(t => t.IsVisible) > 1 ? ActionType.Dropdown : ActionType.Button; [Parameter] @@ -18,17 +21,30 @@ namespace Volo.Abp.BlazoriseUI.Components [Parameter] public string ToggleText { get; set; } - [Parameter] - public TItem Entity { get; set; } - [Parameter] public RenderFragment ChildContent { get; set; } - internal void AddAction(EntityAction action) + [Inject] + public IStringLocalizer UiLocalizer { get; set; } + + internal void AddAction(EntityAction action) { Actions.Add(action); StateHasChanged(); } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + await SetDefaultValuesAsync(); + } + + protected virtual ValueTask SetDefaultValuesAsync() + { + ToggleColor = Color.Primary; + ToggleText = UiLocalizer["Actions"]; + return ValueTask.CompletedTask; + } } public enum ActionType From a2643f3f2834444ae515cb43023e6009fcc120db Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Sun, 25 Oct 2020 23:50:43 +0300 Subject: [PATCH 017/108] add datagridentityactionscolumn reference to the entityactions component and code refactorings. --- .../Components/DataGridEntityActionsColumn.cs | 11 ++++++-- .../Components/EntityAction.razor | 3 +- .../Components/EntityAction.razor.cs | 6 ++-- .../Components/EntityActions.razor | 3 +- .../Components/EntityActions.razor.cs | 28 +++++++++---------- 5 files changed, 30 insertions(+), 21 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/DataGridEntityActionsColumn.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/DataGridEntityActionsColumn.cs index 316c01370b..f41ec63e2c 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/DataGridEntityActionsColumn.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/DataGridEntityActionsColumn.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading.Tasks; using Blazorise.DataGrid; using Localization.Resources.AbpUi; using Microsoft.AspNetCore.Components; @@ -11,13 +12,19 @@ namespace Volo.Abp.BlazoriseUI.Components [Inject] public IStringLocalizer UiLocalizer { get; set; } - protected override void OnInitialized() + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + await SetDefaultValuesAsync(); + } + + protected virtual ValueTask SetDefaultValuesAsync() { - base.OnInitialized(); Caption = UiLocalizer["Actions"]; Width = "150px"; Sortable = false; Field = typeof(TItem).GetProperties().First().Name; + return ValueTask.CompletedTask; } } } diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor index 4988af6725..99e0383fdc 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor @@ -1,4 +1,5 @@ -@using Blazorise +@typeparam TItem +@using Blazorise @if (ParentActions.Type == ActionType.Dropdown) { diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs index 872a735f83..60b2495938 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs @@ -7,7 +7,7 @@ using Volo.Abp.AspNetCore.Components.WebAssembly; namespace Volo.Abp.BlazoriseUI.Components { - public partial class EntityAction : ComponentBase + public partial class EntityAction : ComponentBase { internal bool IsVisible; @@ -30,7 +30,7 @@ namespace Volo.Abp.BlazoriseUI.Components public string ConfirmationMessage { get; set; } [CascadingParameter] - public EntityActions ParentActions { get; set; } + public EntityActions ParentActions { get; set; } [Inject] protected IAuthorizationService AuthorizationService { get; set; } @@ -42,8 +42,8 @@ namespace Volo.Abp.BlazoriseUI.Components { await base.OnInitializedAsync(); await SetDefaultValuesAsync(); - ParentActions.AddAction(this); IsVisible = await AuthorizationService.IsGrantedAsync(Policy); + ParentActions.AddAction(this); } protected internal virtual async Task ActionClickedAsync() diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor index 16e4889490..d445d102d3 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor @@ -1,4 +1,5 @@ - +@typeparam TItem + @if (Type == ActionType.Dropdown) { diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs index 9024bf0d4b..ef3d9a8a9e 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs @@ -8,15 +8,15 @@ using Microsoft.Extensions.Localization; namespace Volo.Abp.BlazoriseUI.Components { - public partial class EntityActions : ComponentBase + public partial class EntityActions : ComponentBase { - protected readonly List Actions = new List(); + protected readonly List> Actions = new List>(); protected bool HasPrimaryAction => Actions.Any(t => t.Primary); - protected EntityAction PrimaryAction => Actions.FirstOrDefault(t => t.Primary); + protected EntityAction PrimaryAction => Actions.FirstOrDefault(t => t.Primary); protected internal ActionType Type => Actions.Count(t => t.IsVisible) > 1 ? ActionType.Dropdown : ActionType.Button; [Parameter] - public Color ToggleColor { get; set; } + public Color ToggleColor { get; set; } = Color.Primary; [Parameter] public string ToggleText { get; set; } @@ -24,26 +24,26 @@ namespace Volo.Abp.BlazoriseUI.Components [Parameter] public RenderFragment ChildContent { get; set; } + [Parameter] + public DataGridEntityActionsColumn EntityActionsColumn { get; set; } + [Inject] public IStringLocalizer UiLocalizer { get; set; } - internal void AddAction(EntityAction action) + internal void AddAction(EntityAction action) { Actions.Add(action); + if (EntityActionsColumn != null) + { + EntityActionsColumn.Displayable = Actions.Any(t => t.IsVisible); + } StateHasChanged(); } - protected override async Task OnInitializedAsync() - { - await base.OnInitializedAsync(); - await SetDefaultValuesAsync(); - } - - protected virtual ValueTask SetDefaultValuesAsync() + protected override void OnInitialized() { - ToggleColor = Color.Primary; + base.OnInitialized(); ToggleText = UiLocalizer["Actions"]; - return ValueTask.CompletedTask; } } From b2d05a53bc1a9bbb5b6e196312f0fe4051633f80 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Mon, 26 Oct 2020 11:50:43 +0300 Subject: [PATCH 018/108] policy name changed. --- .../Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs index 60b2495938..7d2a96dcf1 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs @@ -21,12 +21,12 @@ namespace Volo.Abp.BlazoriseUI.Components public EventCallback Clicked { get; set; } [Parameter] - public string Policy { get; set; } + public string RequiredPolicy { get; set; } [Parameter] public Color Color { get; set; } - - [Parameter] + + [Parameter] public string ConfirmationMessage { get; set; } [CascadingParameter] @@ -42,7 +42,7 @@ namespace Volo.Abp.BlazoriseUI.Components { await base.OnInitializedAsync(); await SetDefaultValuesAsync(); - IsVisible = await AuthorizationService.IsGrantedAsync(Policy); + IsVisible = await AuthorizationService.IsGrantedAsync(RequiredPolicy); ParentActions.AddAction(this); } From a36ccf1e822727c7cf7af0e8c4f3147c99f7a648 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Mon, 26 Oct 2020 13:55:16 +0300 Subject: [PATCH 019/108] move confirmation check to the actions component. --- framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs | 6 ------ .../Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs | 8 +++++--- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index 76f7caf377..4df70152fa 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -169,7 +169,6 @@ namespace Volo.Abp.BlazoriseUI where TUpdateViewModel : class, new() { [Inject] protected TAppService AppService { get; set; } - [Inject] protected IUiMessageService UiMessageService { get; set; } [Inject] protected IStringLocalizer UiLocalizer { get; set; } [Inject] protected IAuthorizationService AuthorizationService { get; set; } @@ -392,11 +391,6 @@ namespace Volo.Abp.BlazoriseUI { await CheckDeletePolicyAsync(); - if (!await UiMessageService.ConfirmAsync(GetDeleteConfirmationMessage(entity))) - { - return; - } - await AppService.DeleteAsync(entity.Id); await GetEntitiesAsync(); } diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs index 7d2a96dcf1..6e98865297 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs @@ -1,8 +1,10 @@ using System; using System.Threading.Tasks; using Blazorise; +using Localization.Resources.AbpUi; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; using Volo.Abp.AspNetCore.Components.WebAssembly; namespace Volo.Abp.BlazoriseUI.Components @@ -27,7 +29,7 @@ namespace Volo.Abp.BlazoriseUI.Components public Color Color { get; set; } [Parameter] - public string ConfirmationMessage { get; set; } + public Func ConfirmationMessage { get; set; } [CascadingParameter] public EntityActions ParentActions { get; set; } @@ -48,9 +50,9 @@ namespace Volo.Abp.BlazoriseUI.Components protected internal virtual async Task ActionClickedAsync() { - if (!ConfirmationMessage.IsNullOrEmpty()) + if (ConfirmationMessage != null) { - if (await UiMessageService.ConfirmAsync(ConfirmationMessage)) + if (await UiMessageService.ConfirmAsync(ConfirmationMessage())) { await Clicked.InvokeAsync(); } From 3666579a2970a14089b23a5b14d17990d138b340 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Mon, 26 Oct 2020 14:14:40 +0300 Subject: [PATCH 020/108] move action type enum to a new file. --- .../src/Volo.Abp.BlazoriseUI/Components/ActionType.cs | 8 ++++++++ .../Components/EntityActions.razor.cs | 6 ------ 2 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 framework/src/Volo.Abp.BlazoriseUI/Components/ActionType.cs diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/ActionType.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/ActionType.cs new file mode 100644 index 0000000000..8f6afd69c9 --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/ActionType.cs @@ -0,0 +1,8 @@ +namespace Volo.Abp.BlazoriseUI.Components +{ + public enum ActionType + { + Dropdown, + Button + } +} diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs index ef3d9a8a9e..0d058904c4 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs @@ -46,10 +46,4 @@ namespace Volo.Abp.BlazoriseUI.Components ToggleText = UiLocalizer["Actions"]; } } - - public enum ActionType - { - Dropdown, - Button - } } From 429e62d06384b274f6887957b5546c4f908b1219 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Tue, 27 Oct 2020 11:34:27 +0100 Subject: [PATCH 021/108] Added more Before and After methods for AbpCrudPageBase --- .../Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs | 94 ++++++++++++++++--- 1 file changed, 82 insertions(+), 12 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index c6491f1ec1..fae7e136ba 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -184,6 +184,8 @@ namespace Volo.Abp.BlazoriseUI protected TUpdateViewModel EditingEntity; protected Modal CreateModal; protected Modal EditModal; + protected Validations CreateValidationsRef; + protected Validations EditValidationsRef; protected string CreatePolicyName { get; set; } protected string UpdatePolicyName { get; set; } @@ -316,15 +318,31 @@ namespace Volo.Abp.BlazoriseUI protected virtual async Task OpenCreateModalAsync() { + await OnOpeningCreateModalAsync(); + + CreateValidationsRef.ClearAll(); + await CheckCreatePolicyAsync(); - ObjectMapper.Map(new TCreateViewModel(), NewEntity); + NewEntity = new TCreateViewModel(); // Mapper will not notify Blazor that binded values are changed // so we need to notify it manually by calling StateHasChanged await InvokeAsync(() => StateHasChanged()); CreateModal.Show(); + + await OnOpeningCreateModalAsync(); + } + + protected virtual Task OnOpeningCreateModalAsync() + { + return Task.CompletedTask; + } + + protected virtual Task OnOpenedCreateModalAsync() + { + return Task.CompletedTask; } protected virtual Task CloseCreateModalAsync() @@ -335,16 +353,32 @@ namespace Volo.Abp.BlazoriseUI protected virtual async Task OpenEditModalAsync(TKey id) { + await OnOpeningEditModalAsync(id); + + EditValidationsRef.ClearAll(); + await CheckUpdatePolicyAsync(); var entityDto = await AppService.GetAsync(id); EditingEntityId = id; - ObjectMapper.Map(entityDto, EditingEntity); + EditingEntity = MapToEditingEntity(entityDto); await InvokeAsync(() => StateHasChanged()); EditModal.Show(); + + await OnOpenedEditModalAsync(id); + } + + protected virtual Task OnOpeningEditModalAsync(TKey id) + { + return Task.CompletedTask; + } + + protected virtual Task OnOpenedEditModalAsync(TKey id) + { + return Task.CompletedTask; } protected virtual TUpdateViewModel MapToEditingEntity(TGetOutputDto entityDto) @@ -380,20 +414,56 @@ namespace Volo.Abp.BlazoriseUI protected virtual async Task CreateEntityAsync() { - await CheckCreatePolicyAsync(); - var createInput = MapToCreateInput(NewEntity); - await AppService.CreateAsync(createInput); - await GetEntitiesAsync(); - CreateModal.Hide(); + if (CreateValidationsRef.ValidateAll()) + { + await OnCreatingEntityAsync(); + + await CheckCreatePolicyAsync(); + var createInput = MapToCreateInput(NewEntity); + await AppService.CreateAsync(createInput); + await GetEntitiesAsync(); + + await OnCreatedEntityAsync(); + + CreateModal.Hide(); + } + } + + protected virtual Task OnCreatingEntityAsync() + { + return Task.CompletedTask; + } + + protected virtual Task OnCreatedEntityAsync() + { + return Task.CompletedTask; } protected virtual async Task UpdateEntityAsync() { - await CheckUpdatePolicyAsync(); - var updateInput = MapToUpdateInput(EditingEntity); - await AppService.UpdateAsync(EditingEntityId, updateInput); - await GetEntitiesAsync(); - EditModal.Hide(); + if (EditValidationsRef.ValidateAll()) + { + await OnUpdatingEntityAsync(); + + await CheckUpdatePolicyAsync(); + var updateInput = MapToUpdateInput(EditingEntity); + await AppService.UpdateAsync(EditingEntityId, updateInput); + await GetEntitiesAsync(); + + await OnUpdatedEntityAsync(); + + EditModal.Hide(); + } + } + + protected virtual Task OnUpdatingEntityAsync() + { + return Task.CompletedTask; + } + + protected virtual Task OnUpdatedEntityAsync() + { + return Task.CompletedTask; } protected virtual async Task DeleteEntityAsync(TListViewModel entity) From 0aaa5b8c4617af17cfdf44fecff6fcc1740c7443 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Tue, 27 Oct 2020 11:35:00 +0100 Subject: [PATCH 022/108] Updated to Blazorise 0.9.2-preview14 --- .../src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj | 4 ++-- .../MyCompanyName.MyProjectName.Blazor.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj index 2e67a2b182..1134821b78 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj +++ b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index 31f9899115..c9abf32119 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -6,8 +6,8 @@ - - + + From 6ee17e04c631e2258279bfdf32306c1c95edd058 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Tue, 27 Oct 2020 11:35:57 +0100 Subject: [PATCH 023/108] Most of crud operations moved to base class --- .../Pages/Identity/RoleManagement.razor.cs | 42 ------------------ .../Pages/Identity/UserManagement.razor.cs | 44 +++++-------------- 2 files changed, 12 insertions(+), 74 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs index 1645f1f2a3..a2cb77478f 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs @@ -18,10 +18,6 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity protected bool ShouldShowEntityActions { get; set; } - protected Validations CreateValidationsRef { get; set; } - - protected Validations EditValidationsRef { get; set; } - public RoleManagementBase() { ObjectMapperContext = typeof(AbpIdentityBlazorModule); @@ -43,43 +39,5 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity HasDeletePermission || HasManagePermissionsPermission; } - - protected override Task OpenCreateModalAsync() - { - CreateValidationsRef.ClearAll(); - - return base.OpenCreateModalAsync(); - } - - protected override Task OpenEditModalAsync(Guid id) - { - EditValidationsRef.ClearAll(); - - return base.OpenEditModalAsync(id); - } - - protected override Task CreateEntityAsync() - { - if (CreateValidationsRef.ValidateAll()) - { - CreateModal.Hide(); - - return base.CreateEntityAsync(); - } - - return Task.CompletedTask; - } - - protected override Task UpdateEntityAsync() - { - if (EditValidationsRef.ValidateAll()) - { - EditModal.Hide(); - - return base.UpdateEntityAsync(); - } - - return Task.CompletedTask; - } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs index dc51f59dc1..e2773e8334 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs @@ -30,10 +30,6 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity protected string EditModalSelectedTab = DefaultSelectedTab; - protected Validations CreateValidationsRef { get; set; } - - protected Validations EditValidationsRef { get; set; } - public UserManagementBase() { ObjectMapperContext = typeof(AbpIdentityBlazorModule); @@ -63,10 +59,8 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity HasManagePermissionsPermission; } - protected override Task OpenCreateModalAsync() + protected override async Task OnOpeningCreateModalAsync() { - CreateValidationsRef.ClearAll(); - CreateModalSelectedTab = DefaultSelectedTab; NewUserRoles = Roles.Select(x => new AssignedRoleViewModel @@ -75,27 +69,19 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity IsAssigned = x.IsDefault }).ToArray(); - return base.OpenCreateModalAsync(); + await base.OnOpeningCreateModalAsync(); } - protected override Task CreateEntityAsync() + protected override Task OnCreatingEntityAsync() { - if (CreateValidationsRef.ValidateAll()) - { - CreateModal.Hide(); - - NewEntity.RoleNames = NewUserRoles.Where(x => x.IsAssigned).Select(x => x.Name).ToArray(); + // apply roles before saving + NewEntity.RoleNames = NewUserRoles.Where(x => x.IsAssigned).Select(x => x.Name).ToArray(); - return base.CreateEntityAsync(); - } - - return Task.CompletedTask; + return base.OnCreatingEntityAsync(); } - protected override async Task OpenEditModalAsync(Guid id) + protected override async Task OnOpeningEditModalAsync(Guid id) { - EditValidationsRef.ClearAll(); - EditModalSelectedTab = DefaultSelectedTab; var userRoleNames = (await AppService.GetRolesAsync(id)).Items.Select(r => r.Name).ToList(); @@ -106,21 +92,15 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity IsAssigned = userRoleNames.Contains(x.Name) }).ToArray(); - await base.OpenEditModalAsync(id); + await base.OnOpeningEditModalAsync(id); } - protected override Task UpdateEntityAsync() + protected override Task OnUpdatingEntityAsync() { - if (EditValidationsRef.ValidateAll()) - { - EditModal.Hide(); - - EditingEntity.RoleNames = EditUserRoles.Where(x => x.IsAssigned).Select(x => x.Name).ToArray(); - - return base.UpdateEntityAsync(); - } + // apply roles before saving + EditingEntity.RoleNames = EditUserRoles.Where(x => x.IsAssigned).Select(x => x.Name).ToArray(); - return Task.CompletedTask; + return base.OnUpdatingEntityAsync(); } } From 31e39c1ce36cfdd276fde0ae20b52ab212c0b7e3 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Tue, 27 Oct 2020 11:37:05 +0100 Subject: [PATCH 024/108] Updated Blazorise MessageLocalizer according to latest changes --- .../AbpIdentityBlazorMessageLocalizerExtensions.cs | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs index bb5214ac63..18a6242bab 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs @@ -7,21 +7,11 @@ namespace Volo.Abp.Identity.Blazor { public static class AbpIdentityBlazorMessageLocalizerExtensions { - public static IEnumerable Localize(this IStringLocalizer stringLocalizer, ValidationMessageLocalizerEventArgs eventArgs) - { - return LocalizeMessages(stringLocalizer, eventArgs.Messages?.Select(m => (m.Message, m.MessageArguments)))?.ToArray(); - } - - private static IEnumerable LocalizeMessages(IStringLocalizer stringLocalizer, IEnumerable<(string format, string[] arguments)> messages) - { - return messages?.Select(m => LocalizeMessage(stringLocalizer, m.format, m.arguments)); - } - - private static string LocalizeMessage(IStringLocalizer stringLocalizer, string format, params string[] arguments) + public static string Localize(this IStringLocalizer stringLocalizer, string format, IEnumerable arguments) { try { - return arguments?.Length > 0 + return arguments?.Count() > 0 ? string.Format(stringLocalizer[format], LocalizeMessageArguments(stringLocalizer, arguments)?.ToArray()) : stringLocalizer[format]; } From f9a682cf94b181bde5384d14df43ed8d4084a810 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 28 Oct 2020 10:52:47 +0800 Subject: [PATCH 025/108] Change override async to async override. https://github.com/abpframework/abp/pull/5924 --- .../Mvc/Client/RemoteFeatureChecker.cs | 2 +- .../AbpBreadcrumbTagHelperService.cs | 2 +- .../Carousel/AbpCarouselTagHelperService.cs | 2 +- .../AbpAccordionItemTagHelperService.cs | 2 +- .../Collapse/AbpAccordionTagHelperService.cs | 6 +- .../AbpCollapseBodyTagHelperService.cs | 4 +- .../AbpDropdownButtonTagHelperService.cs | 8 +- .../Form/AbpDynamicformTagHelperService.cs | 6 +- .../Form/AbpInputTagHelperService.cs | 2 +- .../Form/AbpSelectTagHelperService.cs | 2 +- .../Modal/AbpModalTagHelperService.cs | 110 +++++++++--------- .../AbpPaginationTagHelperService.cs | 10 +- .../Tab/AbpTabDropdownTagHelperService.cs | 2 +- .../TagHelpers/Tab/AbpTabTagHelperService.cs | 2 +- .../TagHelpers/Tab/AbpTabsTagHelperService.cs | 2 +- .../AbpBundleItemTagHelperService.cs | 2 +- .../TagHelpers/AbpBundleTagHelperService.cs | 2 +- .../AbpComponentDemoSectionTagHelper.cs | 18 +-- .../Volo/Abp/Auditing/AuditingInterceptor.cs | 8 +- .../AbpAuthorizationPolicyProvider.cs | 2 +- .../Authorization/AuthorizationInterceptor.cs | 2 +- .../ClientPermissionValueProvider.cs | 4 +- .../RolePermissionValueProvider.cs | 4 +- .../UserPermissionValueProvider.cs | 2 +- .../Quartz/QuartzBackgroundWorkerAdapter.cs | 2 +- .../AsyncPeriodicBackgroundWorkerBase.cs | 6 +- .../PeriodicBackgroundWorkerBase.cs | 8 +- .../BlobStoring/Aliyun/AliyunBlobProvider.cs | 2 +- .../Abp/BlobStoring/Aws/AwsBlobProvider.cs | 10 +- .../BlobStoring/Azure/AzureBlobProvider.cs | 8 +- .../FileSystem/FileSystemBlobProvider.cs | 4 +- .../BlobStoring/Minio/MinioBlobProvider.cs | 22 ++-- .../CastleAbpMethodInvocationAdapter.cs | 4 +- ...pMethodInvocationAdapterWithReturnValue.cs | 4 +- .../Abp/Emailing/BackgroundEmailSendingJob.cs | 2 +- .../EntityFrameworkCore/EfCoreRepository.cs | 16 +-- .../Abp/EntityFrameworkCore/AbpDbContext.cs | 2 +- .../Kafka/KafkaDistributedEventBus.cs | 2 +- .../Rebus/RebusDistributedEventBus.cs | 2 +- .../Volo/Abp/EventBus/Local/LocalEventBus.cs | 2 +- .../Features/EditionFeatureValueProvider.cs | 4 +- .../Volo/Abp/Features/FeatureChecker.cs | 6 +- .../Volo/Abp/Features/FeatureInterceptor.cs | 2 +- .../Features/TenantFeatureValueProvider.cs | 6 +- ...delRemoteServiceHttpClientAuthenticator.cs | 2 +- .../DynamicHttpProxyInterceptor.cs | 2 +- .../MemoryDb/MemoryDbRepository.cs | 8 +- .../Repositories/MongoDB/MongoDbRepository.cs | 16 +-- .../Settings/TenantSettingValueProvider.cs | 6 +- .../Abp/Settings/UserSettingValueProvider.cs | 4 +- .../Volo/Abp/Uow/UnitOfWorkInterceptor.cs | 2 +- .../Abp/Validation/ValidationInterceptor.cs | 2 +- .../Minio/AbpBlobStoringMinioTestModule.cs | 4 +- .../DynamicProxy/SimpleAsyncInterceptor.cs | 4 +- .../SimpleResultCacheTestInterceptor.cs | 4 +- .../Repositories/Repository_Basic_Tests.cs | 2 +- .../IdentityServerSupportedLoginModel.cs | 6 +- .../IdentityServerSupportedLogoutModel.cs | 2 +- .../Database/DatabaseBlobProvider.cs | 8 +- .../Identity/AspNetCore/AbpSignInManager.cs | 2 +- .../Identity/AbpUserClaimsPrincipalFactory.cs | 2 +- .../Volo/Abp/Identity/IdentityRoleManager.cs | 4 +- .../RolePermissionManagementProvider.cs | 6 +- .../AspNetIdentity/AbpProfileService.cs | 4 +- .../ApiResources/ApiResourceRepository.cs | 2 +- .../ApiScopes/ApiScopeRepository.cs | 2 +- .../Clients/ClientRepository.cs | 2 +- 67 files changed, 208 insertions(+), 208 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/RemoteFeatureChecker.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/RemoteFeatureChecker.cs index f769f512a5..4cba01bea2 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/RemoteFeatureChecker.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/RemoteFeatureChecker.cs @@ -13,7 +13,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Client ConfigurationClient = configurationClient; } - public override async Task GetOrNullAsync(string name) + public async override Task GetOrNullAsync(string name) { var configuration = await ConfigurationClient.GetAsync(); return configuration.Features.Values.GetOrDefault(name); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs index 4b433ac495..e1b4469f8c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs @@ -8,7 +8,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb { public class AbpBreadcrumbTagHelperService : AbpTagHelperService { - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { output.TagName = "nav"; output.Attributes.Add("aria-label", "breadcrumb"); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs index c3672db7f5..e4a277ba66 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel L = localizer; } - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { output.TagName = "div"; diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs index 6e532cb71d..0cd400d43c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs @@ -9,7 +9,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse { public class AbpAccordionItemTagHelperService : AbpTagHelperService { - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { SetRandomIdIfNotProvided(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs index c7f93e87cc..7651309e1a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse HtmlGenerator = htmlGenerator; } - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { SetRandomIdIfNotProvided(); @@ -25,7 +25,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse output.TagMode = TagMode.StartTagAndEndTag; output.Attributes.AddClass("accordion"); output.Attributes.Add("id",TagHelper.Id); - + var items = InitilizeFormGroupContentsContext(context, output); await output.GetChildContentAsync(); @@ -62,4 +62,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse } } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpCollapseBodyTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpCollapseBodyTagHelperService.cs index 10e49b92a7..198c5b91e6 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpCollapseBodyTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpCollapseBodyTagHelperService.cs @@ -6,7 +6,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse { public class AbpCollapseBodyTagHelperService : AbpTagHelperService { - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { output.TagName = "div"; output.Attributes.AddClass("collapse"); @@ -27,4 +27,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse output.Content.SetHtmlContent(innerContent); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownButtonTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownButtonTagHelperService.cs index 673204b302..52ea6ace85 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownButtonTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownButtonTagHelperService.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown _serviceProvider = serviceProvider; } - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { var content = await output.GetChildContentAsync(); @@ -60,7 +60,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown protected virtual async Task GetMainButtonAsync(TagHelperContext context, TagHelperOutput output, TagHelperContent content) { var abpButtonTagHelper = _serviceProvider.GetRequiredService(); - + abpButtonTagHelper.Icon = TagHelper.Icon; abpButtonTagHelper.Text = TagHelper.Text; abpButtonTagHelper.IconType = TagHelper.IconType; @@ -121,7 +121,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown {"aria-haspopup", "true"}, {"aria-expanded", "false"}, }; - + attributes.AddClass("dropdown-toggle"); attributes.AddClass("dropdown-toggle-split"); @@ -142,4 +142,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown return buttonTag; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs index 4504906566..cd8c7e6f22 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs @@ -31,7 +31,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form _serviceProvider = serviceProvider; } - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { var list = InitilizeFormGroupContentsContext(context, output); @@ -144,7 +144,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form } } } - + protected virtual void RemoveFormGroupItemsNotInModel(TagHelperContext context, TagHelperOutput output, List items) { var models = GetModels(context, output); @@ -303,4 +303,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return explorer.GetAttribute() != null; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs index ff5b085df5..adb50d7382 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form _tagHelperLocalizer = tagHelperLocalizer; } - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { var (innerHtml, isCheckBox) = await GetFormInputGroupAsHtmlAsync(context, output); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs index 017d58dc17..a33b48d11b 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs @@ -35,7 +35,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form _stringLocalizerFactory = stringLocalizerFactory; } - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { var innerHtml = await GetFormInputGroupAsHtmlAsync(context, output); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs index 78d664b562..9086d8def4 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs @@ -1,22 +1,22 @@ using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Mvc.Rendering; -using Microsoft.AspNetCore.Razor.TagHelpers; -using System.Text; +using Microsoft.AspNetCore.Razor.TagHelpers; +using System.Text; using System.Threading.Tasks; -namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal -{ - public class AbpModalTagHelperService : AbpTagHelperService - { - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) - { - output.TagName = null; - - var childContent = await output.GetChildContentAsync(); - - SetContent(context, output, childContent); - } - +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal +{ + public class AbpModalTagHelperService : AbpTagHelperService + { + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + { + output.TagName = null; + + var childContent = await output.GetChildContentAsync(); + + SetContent(context, output, childContent); + } + protected virtual void SetContent(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent) { var modalContent = GetModalContentElement(context, output, childContent); @@ -24,16 +24,16 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal var modal = GetModal(context, output, modalDialog); output.Content.SetHtmlContent(modal); - } - + } + protected virtual TagBuilder GetModalContentElement(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent) { var element = new TagBuilder("div"); element.AddCssClass(GetModalContentClasses()); element.InnerHtml.SetHtmlContent(childContent); return element; - } - + } + protected virtual TagBuilder GetModalDialogElement(TagHelperContext context, TagHelperOutput output, IHtmlContent innerHtml) { var element = new TagBuilder("div"); @@ -41,8 +41,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal element.Attributes.Add("role", "document"); element.InnerHtml.SetHtmlContent(innerHtml); return element; - } - + } + protected virtual TagBuilder GetModal(TagHelperContext context, TagHelperOutput output, IHtmlContent innerHtml) { var element = new TagBuilder("div"); @@ -61,37 +61,37 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal element.InnerHtml.SetHtmlContent(innerHtml); return element; - } - - protected virtual string GetModalClasses() - { - return "modal fade"; - } - - protected virtual string GetModalDialogClasses() - { - var classNames = new StringBuilder("modal-dialog"); - - if (TagHelper.Centered ?? false) - { - classNames.Append(" "); - classNames.Append("modal-dialog-centered"); - } - - if (TagHelper.Size != AbpModalSize.Default) - { - classNames.Append(" "); - classNames.Append(TagHelper.Size.ToClassName()); - } - - return classNames.ToString(); - } - - protected virtual string GetModalContentClasses() - { - return "modal-content"; - } - + } + + protected virtual string GetModalClasses() + { + return "modal fade"; + } + + protected virtual string GetModalDialogClasses() + { + var classNames = new StringBuilder("modal-dialog"); + + if (TagHelper.Centered ?? false) + { + classNames.Append(" "); + classNames.Append("modal-dialog-centered"); + } + + if (TagHelper.Size != AbpModalSize.Default) + { + classNames.Append(" "); + classNames.Append(TagHelper.Size.ToClassName()); + } + + return classNames.ToString(); + } + + protected virtual string GetModalContentClasses() + { + return "modal-content"; + } + protected virtual string GetDataAttributes() { if (TagHelper.Static == true) @@ -107,6 +107,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal { builder.Attributes.Add("data-backdrop", "static"); } - } - } -} \ No newline at end of file + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/AbpPaginationTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/AbpPaginationTagHelperService.cs index 71f3bfe247..148f196aad 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/AbpPaginationTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/AbpPaginationTagHelperService.cs @@ -21,9 +21,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination private readonly IStringLocalizerFactory _stringLocalizerFactory; public AbpPaginationTagHelperService( - IHtmlGenerator generator, - HtmlEncoder encoder, - IAbpTagHelperLocalizer tagHelperLocalizer, + IHtmlGenerator generator, + HtmlEncoder encoder, + IAbpTagHelperLocalizer tagHelperLocalizer, IStringLocalizerFactory stringLocalizerFactory) { _generator = generator; @@ -32,7 +32,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination _stringLocalizerFactory = stringLocalizerFactory; } - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { if (TagHelper.Model.ShownItemsCount <= 0) { @@ -199,4 +199,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination } } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs index 8746e4a48b..cdaf55d87c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs @@ -9,7 +9,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab { public class AbpTabDropdownTagHelperService : AbpTagHelperService { - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { if (string.IsNullOrWhiteSpace(TagHelper.Name)) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs index 9080e49d83..c4d4b654a9 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs @@ -9,7 +9,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab { public class AbpTabTagHelperService : AbpTagHelperService { - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { SetPlaceholderForNameIfNotProvided(); 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 92e50990a4..8046af8ccd 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 @@ -20,7 +20,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab HtmlGenerator = htmlGenerator; } - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { SetRandomNameIfNotProvided(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelperService.cs index eca80c5fcf..0ffb5b9049 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelperService.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers ResourceService = resourceService; } - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { var tagHelperItems = context.Items.GetOrDefault(AbpTagHelperConsts.ContextBundleItemListKey) as List; if (tagHelperItems != null) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperService.cs index f0c76d5cc4..9158f33b90 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperService.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers ResourceService = resourceService; } - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { await ResourceService.ProcessAsync( TagHelper.ViewContext, diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/TagHelpers/AbpComponentDemoSectionTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/TagHelpers/AbpComponentDemoSectionTagHelper.cs index 27fc4c4d13..9a16b4b43a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/TagHelpers/AbpComponentDemoSectionTagHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/TagHelpers/AbpComponentDemoSectionTagHelper.cs @@ -21,14 +21,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.S private readonly IGuidGenerator _guidGenerator; public AbpComponentDemoSectionTagHelper( - IVirtualFileProvider virtualFileProvider, + IVirtualFileProvider virtualFileProvider, IGuidGenerator guidGenerator) { _virtualFileProvider = virtualFileProvider; _guidGenerator = guidGenerator; } - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { output.TagName = null; @@ -40,7 +40,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.S var codeBlockTabId = _guidGenerator.Create(); var tagHelperCodeBlockId = _guidGenerator.Create(); var bootstrapCodeBlockId = _guidGenerator.Create(); - + output.PreContent.AppendHtml("
"); output.PreContent.AppendHtml("
"); output.PreContent.AppendHtml("
"); @@ -58,14 +58,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.S output.PreContent.AppendHtml("
"); output.PreContent.AppendHtml($"
"); output.PreContent.AppendHtml($"
"); - + /* component rendering here */ output.PostContent.AppendHtml("
"); // tab-pane output.PostContent.AppendHtml($"
"); - + /* CodeBlock tabs */ - + output.PostContent.AppendHtml($"
    "); output.PostContent.AppendHtml("
  • "); output.PostContent.AppendHtml($"Abp Tag Helper"); @@ -75,7 +75,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.S output.PostContent.AppendHtml("
  • "); output.PostContent.AppendHtml("
"); output.PostContent.AppendHtml($"
"); - + output.PostContent.AppendHtml($"
"); output.PostContent.AppendHtml("
");
             output.PostContent.AppendHtml("");
@@ -83,7 +83,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.S
             output.PostContent.AppendHtml("");
             output.PostContent.AppendHtml("
"); output.PostContent.AppendHtml("
"); - + output.PostContent.AppendHtml($"
"); output.PostContent.AppendHtml("
");
             output.PostContent.AppendHtml("");
@@ -91,7 +91,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.S
             output.PostContent.AppendHtml("");
             output.PostContent.AppendHtml("
"); output.PostContent.AppendHtml("
"); - + output.PostContent.AppendHtml("
"); // tab-content output.PostContent.AppendHtml("
"); // tab-pane output.PostContent.AppendHtml("
"); // tab-content diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptor.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptor.cs index 5a401a218e..0eef78ed6a 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptor.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptor.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.Auditing _auditingManager = auditingManager; } - public override async Task InterceptAsync(IAbpMethodInvocation invocation) + public async override Task InterceptAsync(IAbpMethodInvocation invocation) { if (!ShouldIntercept(invocation, out var auditLog, out var auditLogAction)) { @@ -46,8 +46,8 @@ namespace Volo.Abp.Auditing } protected virtual bool ShouldIntercept( - IAbpMethodInvocation invocation, - out AuditLogInfo auditLog, + IAbpMethodInvocation invocation, + out AuditLogInfo auditLog, out AuditLogActionInfo auditLogAction) { auditLog = null; @@ -73,7 +73,7 @@ namespace Volo.Abp.Auditing auditLogAction = _auditingHelper.CreateAuditLogAction( auditLog, invocation.TargetObject.GetType(), - invocation.Method, + invocation.Method, invocation.Arguments ); diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs index f636877fc1..f889251c69 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.Authorization _options = options.Value; } - public override async Task GetPolicyAsync(string policyName) + public async override Task GetPolicyAsync(string policyName) { var policy = await base.GetPolicyAsync(policyName); if (policy != null) diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AuthorizationInterceptor.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AuthorizationInterceptor.cs index 44466884dd..82f4adeabe 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AuthorizationInterceptor.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AuthorizationInterceptor.cs @@ -13,7 +13,7 @@ namespace Volo.Abp.Authorization _methodInvocationAuthorizationService = methodInvocationAuthorizationService; } - public override async Task InterceptAsync(IAbpMethodInvocation invocation) + public async override Task InterceptAsync(IAbpMethodInvocation invocation) { await AuthorizeAsync(invocation); await invocation.ProceedAsync(); diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs index 38c29b1ddf..c1d9b3a6dc 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.Authorization.Permissions } - public override async Task CheckAsync(PermissionValueCheckContext context) + public async override Task CheckAsync(PermissionValueCheckContext context) { var clientId = context.Principal?.FindFirst(AbpClaimTypes.ClientId)?.Value; @@ -24,7 +24,7 @@ namespace Volo.Abp.Authorization.Permissions return PermissionGrantResult.Undefined; } - return await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, clientId) + return await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, clientId) ? PermissionGrantResult.Granted : PermissionGrantResult.Undefined; } diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs index b98867a78e..a458cd8fdb 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.Authorization.Permissions } - public override async Task CheckAsync(PermissionValueCheckContext context) + public async override Task CheckAsync(PermissionValueCheckContext context) { var roles = context.Principal?.FindAll(AbpClaimTypes.Role).Select(c => c.Value).ToArray(); @@ -36,4 +36,4 @@ namespace Volo.Abp.Authorization.Permissions return PermissionGrantResult.Undefined; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs index c7f327c40c..204b928e61 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.Authorization.Permissions } - public override async Task CheckAsync(PermissionValueCheckContext context) + public async override Task CheckAsync(PermissionValueCheckContext context) { var userId = context.Principal?.FindFirst(AbpClaimTypes.UserId)?.Value; diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerAdapter.cs b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerAdapter.cs index 96cf3988bd..e6a65a2865 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerAdapter.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerAdapter.cs @@ -57,7 +57,7 @@ namespace Volo.Abp.BackgroundWorkers.Quartz .Build(); } - public override async Task Execute(IJobExecutionContext context) + public async override Task Execute(IJobExecutionContext context) { var worker = (IBackgroundWorker) ServiceProvider.GetService(typeof(TWorker)); var workerContext = new PeriodicBackgroundWorkerContext(ServiceProvider); diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AsyncPeriodicBackgroundWorkerBase.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AsyncPeriodicBackgroundWorkerBase.cs index cb2f6dbfae..ed48ba69ee 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AsyncPeriodicBackgroundWorkerBase.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AsyncPeriodicBackgroundWorkerBase.cs @@ -22,13 +22,13 @@ namespace Volo.Abp.BackgroundWorkers Timer.Elapsed += Timer_Elapsed; } - public override async Task StartAsync(CancellationToken cancellationToken = default) + public async override Task StartAsync(CancellationToken cancellationToken = default) { await base.StartAsync(cancellationToken); Timer.Start(cancellationToken); } - public override async Task StopAsync(CancellationToken cancellationToken = default) + public async override Task StopAsync(CancellationToken cancellationToken = default) { Timer.Stop(cancellationToken); await base.StopAsync(cancellationToken); @@ -59,4 +59,4 @@ namespace Volo.Abp.BackgroundWorkers protected abstract Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext); } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerBase.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerBase.cs index c63adaf798..e29dbfec6e 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerBase.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerBase.cs @@ -9,7 +9,7 @@ using Volo.Abp.Threading; namespace Volo.Abp.BackgroundWorkers { /// - /// Extends to add a periodic running Timer. + /// Extends to add a periodic running Timer. /// public abstract class PeriodicBackgroundWorkerBase : BackgroundWorkerBase { @@ -25,13 +25,13 @@ namespace Volo.Abp.BackgroundWorkers Timer.Elapsed += Timer_Elapsed; } - public override async Task StartAsync(CancellationToken cancellationToken = default) + public async override Task StartAsync(CancellationToken cancellationToken = default) { await base.StartAsync(cancellationToken); Timer.Start(cancellationToken); } - public override async Task StopAsync(CancellationToken cancellationToken = default) + public async override Task StopAsync(CancellationToken cancellationToken = default) { Timer.Stop(cancellationToken); await base.StopAsync(cancellationToken); @@ -62,4 +62,4 @@ namespace Volo.Abp.BackgroundWorkers /// protected abstract void DoWork(PeriodicBackgroundWorkerContext workerContext); } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs index 237465ef91..aa0fecaf09 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs @@ -73,7 +73,7 @@ namespace Volo.Abp.BlobStoring.Aliyun return Task.FromResult(BlobExistsAsync(ossClient, containerName, blobName)); } - public override async Task GetOrNullAsync(BlobProviderGetArgs args) + public async override Task GetOrNullAsync(BlobProviderGetArgs args) { var containerName = GetContainerName(args); var blobName = AliyunBlobNameCalculator.Calculate(args); diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs index 6acb91aea9..191f9a0ac7 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.BlobStoring.Aws AmazonS3ClientFactory = amazonS3ClientFactory; } - public override async Task SaveAsync(BlobProviderSaveArgs args) + public async override Task SaveAsync(BlobProviderSaveArgs args) { var blobName = AwsBlobNameCalculator.Calculate(args); var configuration = args.Configuration.GetAwsConfiguration(); @@ -48,7 +48,7 @@ namespace Volo.Abp.BlobStoring.Aws } } - public override async Task DeleteAsync(BlobProviderDeleteArgs args) + public async override Task DeleteAsync(BlobProviderDeleteArgs args) { var blobName = AwsBlobNameCalculator.Calculate(args); var containerName = GetContainerName(args); @@ -70,7 +70,7 @@ namespace Volo.Abp.BlobStoring.Aws } } - public override async Task ExistsAsync(BlobProviderExistsArgs args) + public async override Task ExistsAsync(BlobProviderExistsArgs args) { var blobName = AwsBlobNameCalculator.Calculate(args); var containerName = GetContainerName(args); @@ -81,7 +81,7 @@ namespace Volo.Abp.BlobStoring.Aws } } - public override async Task GetOrNullAsync(BlobProviderGetArgs args) + public async override Task GetOrNullAsync(BlobProviderGetArgs args) { var blobName = AwsBlobNameCalculator.Calculate(args); var containerName = GetContainerName(args); @@ -155,4 +155,4 @@ namespace Volo.Abp.BlobStoring.Aws : configuration.ContainerName; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs index 1afc3b6a53..3a9a062e76 100644 --- a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.BlobStoring.Azure AzureBlobNameCalculator = azureBlobNameCalculator; } - public override async Task SaveAsync(BlobProviderSaveArgs args) + public async override Task SaveAsync(BlobProviderSaveArgs args) { var blobName = AzureBlobNameCalculator.Calculate(args); var configuration = args.Configuration.GetAzureConfiguration(); @@ -33,7 +33,7 @@ namespace Volo.Abp.BlobStoring.Azure await GetBlobClient(args, blobName).UploadAsync(args.BlobStream, true); } - public override async Task DeleteAsync(BlobProviderDeleteArgs args) + public async override Task DeleteAsync(BlobProviderDeleteArgs args) { var blobName = AzureBlobNameCalculator.Calculate(args); @@ -45,14 +45,14 @@ namespace Volo.Abp.BlobStoring.Azure return false; } - public override async Task ExistsAsync(BlobProviderExistsArgs args) + public async override Task ExistsAsync(BlobProviderExistsArgs args) { var blobName = AzureBlobNameCalculator.Calculate(args); return await BlobExistsAsync(args, blobName); } - public override async Task GetOrNullAsync(BlobProviderGetArgs args) + public async override Task GetOrNullAsync(BlobProviderGetArgs args) { var blobName = AzureBlobNameCalculator.Calculate(args); diff --git a/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo/Abp/BlobStoring/FileSystem/FileSystemBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo/Abp/BlobStoring/FileSystem/FileSystemBlobProvider.cs index cbfe4bcaf7..3a512a0ba3 100644 --- a/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo/Abp/BlobStoring/FileSystem/FileSystemBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo/Abp/BlobStoring/FileSystem/FileSystemBlobProvider.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.BlobStoring.FileSystem FilePathCalculator = filePathCalculator; } - public override async Task SaveAsync(BlobProviderSaveArgs args) + public async override Task SaveAsync(BlobProviderSaveArgs args) { var filePath = FilePathCalculator.Calculate(args); @@ -59,7 +59,7 @@ namespace Volo.Abp.BlobStoring.FileSystem return ExistsAsync(filePath); } - public override async Task GetOrNullAsync(BlobProviderGetArgs args) + public async override Task GetOrNullAsync(BlobProviderGetArgs args) { var filePath = FilePathCalculator.Calculate(args); diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs index 1a3f14e97b..fca23324dc 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.BlobStoring.Minio MinioBlobNameCalculator = minioBlobNameCalculator; } - public override async Task SaveAsync(BlobProviderSaveArgs args) + public async override Task SaveAsync(BlobProviderSaveArgs args) { var blobName = MinioBlobNameCalculator.Calculate(args); var configuration = args.Configuration.GetMinioConfiguration(); @@ -36,7 +36,7 @@ namespace Volo.Abp.BlobStoring.Minio await client.PutObjectAsync(containerName, blobName, args.BlobStream, args.BlobStream.Length); } - public override async Task DeleteAsync(BlobProviderDeleteArgs args) + public async override Task DeleteAsync(BlobProviderDeleteArgs args) { var blobName = MinioBlobNameCalculator.Calculate(args); var client = GetMinioClient(args); @@ -51,7 +51,7 @@ namespace Volo.Abp.BlobStoring.Minio return false; } - public override async Task ExistsAsync(BlobProviderExistsArgs args) + public async override Task ExistsAsync(BlobProviderExistsArgs args) { var blobName = MinioBlobNameCalculator.Calculate(args); var client = GetMinioClient(args); @@ -60,7 +60,7 @@ namespace Volo.Abp.BlobStoring.Minio return await BlobExistsAsync(client, containerName, blobName); } - public override async Task GetOrNullAsync(BlobProviderGetArgs args) + public async override Task GetOrNullAsync(BlobProviderGetArgs args) { var blobName = MinioBlobNameCalculator.Calculate(args); var client = GetMinioClient(args); @@ -69,10 +69,10 @@ namespace Volo.Abp.BlobStoring.Minio if (!await BlobExistsAsync(client, containerName, blobName)) { return null; - } - + } + var memoryStream = new MemoryStream(); - await client.GetObjectAsync(containerName, blobName, (stream) => + await client.GetObjectAsync(containerName, blobName, (stream) => { if (stream != null) { @@ -118,13 +118,13 @@ namespace Volo.Abp.BlobStoring.Minio await client.StatObjectAsync(containerName, blobName); } catch (Exception e) - { + { if (e is ObjectNotFoundException) { return false; - } - - throw; + } + + throw; } return true; diff --git a/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapter.cs b/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapter.cs index 89f3713521..7a99859d3a 100644 --- a/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapter.cs +++ b/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapter.cs @@ -18,9 +18,9 @@ namespace Volo.Abp.Castle.DynamicProxy Proceed = proceed; } - public override async Task ProceedAsync() + public async override Task ProceedAsync() { await Proceed(Invocation, ProceedInfo); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapterWithReturnValue.cs b/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapterWithReturnValue.cs index bf91102337..a0babad231 100644 --- a/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapterWithReturnValue.cs +++ b/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapterWithReturnValue.cs @@ -19,9 +19,9 @@ namespace Volo.Abp.Castle.DynamicProxy Proceed = proceed; } - public override async Task ProceedAsync() + public async override Task ProceedAsync() { ReturnValue = await Proceed(Invocation, ProceedInfo); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs index a81bfb8c7f..5c704f74f0 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/BackgroundEmailSendingJob.cs @@ -14,7 +14,7 @@ namespace Volo.Abp.Emailing EmailSender = emailSender; } - public override async Task ExecuteAsync(BackgroundEmailSendingJobArgs args) + public async override Task ExecuteAsync(BackgroundEmailSendingJobArgs args) { if (args.From.IsNullOrWhiteSpace()) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index 4f2ce6b434..d75133cb07 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -45,7 +45,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore ); } - public override async Task InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) + public async override Task InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { CheckAndSetId(entity); @@ -59,7 +59,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore return savedEntity; } - public override async Task UpdateAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) + public async override Task UpdateAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { DbContext.Attach(entity); @@ -73,7 +73,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore return updatedEntity; } - public override async Task DeleteAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) + public async override Task DeleteAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { DbSet.Remove(entity); @@ -83,19 +83,19 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore } } - public override async Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) + public async override Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) { return includeDetails ? await WithDetails().ToListAsync(GetCancellationToken(cancellationToken)) : await DbSet.ToListAsync(GetCancellationToken(cancellationToken)); } - public override async Task GetCountAsync(CancellationToken cancellationToken = default) + public async override Task GetCountAsync(CancellationToken cancellationToken = default) { return await DbSet.LongCountAsync(GetCancellationToken(cancellationToken)); } - public override async Task> GetPagedListAsync( + public async override Task> GetPagedListAsync( int skipCount, int maxResultCount, string sorting, @@ -115,7 +115,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore return DbSet.AsQueryable(); } - public override async Task FindAsync( + public async override Task FindAsync( Expression> predicate, bool includeDetails = true, CancellationToken cancellationToken = default) @@ -129,7 +129,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore .SingleOrDefaultAsync(GetCancellationToken(cancellationToken)); } - public override async Task DeleteAsync(Expression> predicate, bool autoSave = false, CancellationToken cancellationToken = default) + public async override Task DeleteAsync(Expression> predicate, bool autoSave = false, CancellationToken cancellationToken = default) { var entities = await GetQueryable() .Where(predicate) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 9a61e7f8e3..a17aab8621 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -148,7 +148,7 @@ namespace Volo.Abp.EntityFrameworkCore } } - public override async Task SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default) + public async override Task SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default) { try { diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs index fd6d773952..363744c1d4 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs @@ -146,7 +146,7 @@ namespace Volo.Abp.EventBus.Kafka GetOrCreateHandlerFactories(eventType).Locking(factories => factories.Clear()); } - public override async Task PublishAsync(Type eventType, object eventData) + public async override Task PublishAsync(Type eventType, object eventData) { var eventName = EventNameAttribute.GetNameOrDefault(eventType); var body = Serializer.Serialize(eventData); diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index ce3549646e..44d229ee94 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs @@ -124,7 +124,7 @@ namespace Volo.Abp.EventBus.Rebus return Subscribe(typeof(TEvent), handler); } - public override async Task PublishAsync(Type eventType, object eventData) + public async override Task PublishAsync(Type eventType, object eventData) { await AbpRebusEventBusOptions.Publish(Rebus, eventType, eventData); } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs index 8c7bef6f2d..828bd4f5c7 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs @@ -117,7 +117,7 @@ namespace Volo.Abp.EventBus.Local GetOrCreateHandlerFactories(eventType).Locking(factories => factories.Clear()); } - public override async Task PublishAsync(Type eventType, object eventData) + public async override Task PublishAsync(Type eventType, object eventData) { var exceptions = new List(); diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/EditionFeatureValueProvider.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/EditionFeatureValueProvider.cs index 49ea1b3f4c..3bb039f7b2 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/EditionFeatureValueProvider.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/EditionFeatureValueProvider.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.Features PrincipalAccessor = principalAccessor; } - public override async Task GetOrNullAsync(FeatureDefinition feature) + public async override Task GetOrNullAsync(FeatureDefinition feature) { var editionId = PrincipalAccessor.Principal?.FindEditionId(); if (editionId == null) @@ -29,4 +29,4 @@ namespace Volo.Abp.Features return await FeatureStore.GetOrNullAsync(feature.Name, Name, editionId.Value.ToString()); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureChecker.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureChecker.cs index 0c653c3448..b52ffe355e 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureChecker.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureChecker.cs @@ -34,8 +34,8 @@ namespace Volo.Abp.Features true ); } - - public override async Task GetOrNullAsync(string name) + + public async override Task GetOrNullAsync(string name) { var featureDefinition = FeatureDefinitionManager.Get(name); var providers = Enumerable @@ -65,4 +65,4 @@ namespace Volo.Abp.Features return null; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptor.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptor.cs index 9986af6275..7b84593378 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptor.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptor.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.Features _methodInvocationFeatureCheckerService = methodInvocationFeatureCheckerService; } - public override async Task InterceptAsync(IAbpMethodInvocation invocation) + public async override Task InterceptAsync(IAbpMethodInvocation invocation) { if (AbpCrossCuttingConcerns.IsApplied(invocation.TargetObject, AbpCrossCuttingConcerns.FeatureChecking)) { diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/TenantFeatureValueProvider.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/TenantFeatureValueProvider.cs index 5ae4b5f876..6e4dc669fa 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/TenantFeatureValueProvider.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/TenantFeatureValueProvider.cs @@ -10,16 +10,16 @@ namespace Volo.Abp.Features public override string Name => ProviderName; protected ICurrentTenant CurrentTenant { get; } - + public TenantFeatureValueProvider(IFeatureStore featureStore, ICurrentTenant currentTenant) : base(featureStore) { CurrentTenant = currentTenant; } - public override async Task GetOrNullAsync(FeatureDefinition feature) + public async override Task GetOrNullAsync(FeatureDefinition feature) { return await FeatureStore.GetOrNullAsync(feature.Name, Name, CurrentTenant.Id?.ToString()); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextIdentityModelRemoteServiceHttpClientAuthenticator.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextIdentityModelRemoteServiceHttpClientAuthenticator.cs index a829a630d6..f3001eb443 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextIdentityModelRemoteServiceHttpClientAuthenticator.cs +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextIdentityModelRemoteServiceHttpClientAuthenticator.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.Http.Client.IdentityModel.Web { } - public override async Task Authenticate(RemoteServiceHttpClientAuthenticateContext context) + public async override Task Authenticate(RemoteServiceHttpClientAuthenticateContext context) { if (context.RemoteService.GetUseCurrentAccessToken() != false) { diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs index 321d538044..81c1d02d9b 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs @@ -75,7 +75,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying Logger = NullLogger>.Instance; } - public override async Task InterceptAsync(IAbpMethodInvocation invocation) + public async override Task InterceptAsync(IAbpMethodInvocation invocation) { if (invocation.Method.ReturnType.GenericTypeArguments.IsNullOrEmpty()) { diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs index fdf66b08a6..bb77149a29 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs @@ -170,7 +170,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb return Task.FromResult(GetQueryable().Where(predicate).SingleOrDefault()); } - public override async Task DeleteAsync( + public async override Task DeleteAsync( Expression> predicate, bool autoSave = false, CancellationToken cancellationToken = default) @@ -182,7 +182,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb } } - public override async Task InsertAsync( + public async override Task InsertAsync( TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) @@ -194,7 +194,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb return entity; } - public override async Task UpdateAsync( + public async override Task UpdateAsync( TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) @@ -218,7 +218,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb return entity; } - public override async Task DeleteAsync( + public async override Task DeleteAsync( TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index 02dd0e5de7..6af98da56b 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -55,7 +55,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB GuidGenerator = SimpleGuidGenerator.Instance; } - public override async Task InsertAsync( + public async override Task InsertAsync( TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) @@ -81,7 +81,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB return entity; } - public override async Task UpdateAsync( + public async override Task UpdateAsync( TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) @@ -131,7 +131,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB return entity; } - public override async Task DeleteAsync( + public async override Task DeleteAsync( TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) @@ -194,17 +194,17 @@ namespace Volo.Abp.Domain.Repositories.MongoDB } } - public override async Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) + public async override Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) { return await GetMongoQueryable().ToListAsync(GetCancellationToken(cancellationToken)); } - public override async Task GetCountAsync(CancellationToken cancellationToken = default) + public async override Task GetCountAsync(CancellationToken cancellationToken = default) { return await GetMongoQueryable().LongCountAsync(GetCancellationToken(cancellationToken)); } - public override async Task> GetPagedListAsync( + public async override Task> GetPagedListAsync( int skipCount, int maxResultCount, string sorting, @@ -218,7 +218,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB .ToListAsync(GetCancellationToken(cancellationToken)); } - public override async Task DeleteAsync( + public async override Task DeleteAsync( Expression> predicate, bool autoSave = false, CancellationToken cancellationToken = default) @@ -238,7 +238,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB return GetMongoQueryable(); } - public override async Task FindAsync( + public async override Task FindAsync( Expression> predicate, bool includeDetails = true, CancellationToken cancellationToken = default) diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs index eab23b7258..4fa876ae80 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs @@ -10,16 +10,16 @@ namespace Volo.Abp.Settings public override string Name => ProviderName; protected ICurrentTenant CurrentTenant { get; } - + public TenantSettingValueProvider(ISettingStore settingStore, ICurrentTenant currentTenant) : base(settingStore) { CurrentTenant = currentTenant; } - public override async Task GetOrNullAsync(SettingDefinition setting) + public async override Task GetOrNullAsync(SettingDefinition setting) { return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentTenant.Id?.ToString()); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs index 01125f3201..0781b10433 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.Settings CurrentUser = currentUser; } - public override async Task GetOrNullAsync(SettingDefinition setting) + public async override Task GetOrNullAsync(SettingDefinition setting) { if (CurrentUser.Id == null) { @@ -27,4 +27,4 @@ namespace Volo.Abp.Settings return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentUser.Id.ToString()); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs index 81bd132a5e..f5afcea494 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.Uow _defaultOptions = options.Value; } - public override async Task InterceptAsync(IAbpMethodInvocation invocation) + public async override Task InterceptAsync(IAbpMethodInvocation invocation) { if (!UnitOfWorkHelper.IsUnitOfWorkMethod(invocation.Method, out var unitOfWorkAttribute)) { diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationInterceptor.cs b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationInterceptor.cs index b4ce642471..d0d9e7594d 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationInterceptor.cs +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationInterceptor.cs @@ -13,7 +13,7 @@ namespace Volo.Abp.Validation _methodInvocationValidator = methodInvocationValidator; } - public override async Task InterceptAsync(IAbpMethodInvocation invocation) + public async override Task InterceptAsync(IAbpMethodInvocation invocation) { Validate(invocation); await invocation.ProceedAsync(); diff --git a/framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo/Abp/BlobStoring/Minio/AbpBlobStoringMinioTestModule.cs b/framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo/Abp/BlobStoring/Minio/AbpBlobStoringMinioTestModule.cs index 71d780e880..a448c2160e 100644 --- a/framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo/Abp/BlobStoring/Minio/AbpBlobStoringMinioTestModule.cs +++ b/framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo/Abp/BlobStoring/Minio/AbpBlobStoringMinioTestModule.cs @@ -60,7 +60,7 @@ namespace Volo.Abp.BlobStoring.Minio }); } - public override async void OnApplicationShutdown(ApplicationShutdownContext context) + public async override void OnApplicationShutdown(ApplicationShutdownContext context) { var minioClient = new MinioClient(_endPoint, _accessKey, _secretKey); if (await minioClient.BucketExistsAsync(_randomContainerName)) @@ -74,7 +74,7 @@ namespace Volo.Abp.BlobStoring.Minio await minioClient.RemoveBucketAsync(_randomContainerName); } - + } } diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleAsyncInterceptor.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleAsyncInterceptor.cs index ac5f6beb16..7f38276df2 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleAsyncInterceptor.cs +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleAsyncInterceptor.cs @@ -5,7 +5,7 @@ namespace Volo.Abp.DynamicProxy { public class SimpleAsyncInterceptor : AbpInterceptor { - public override async Task InterceptAsync(IAbpMethodInvocation invocation) + public async override Task InterceptAsync(IAbpMethodInvocation invocation) { await Task.Delay(5); (invocation.TargetObject as ICanLogOnObject)?.Logs?.Add($"{GetType().Name}_InterceptAsync_BeforeInvocation"); @@ -14,4 +14,4 @@ namespace Volo.Abp.DynamicProxy await Task.Delay(5); } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleResultCacheTestInterceptor.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleResultCacheTestInterceptor.cs index 15bcf4631b..ebbf890b14 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleResultCacheTestInterceptor.cs +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleResultCacheTestInterceptor.cs @@ -12,8 +12,8 @@ namespace Volo.Abp.DynamicProxy { _cache = new ConcurrentDictionary(); } - - public override async Task InterceptAsync(IAbpMethodInvocation invocation) + + public async override Task InterceptAsync(IAbpMethodInvocation invocation) { if (_cache.ContainsKey(invocation.Method)) { diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs index 09b1551e3d..f998da8528 100644 --- a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs @@ -51,7 +51,7 @@ namespace Volo.Abp.MongoDB.Repositories } [Fact] - public override async Task InsertAsync() + public async override Task InsertAsync() { var person = new Person(Guid.NewGuid(), "New Person", 35); person.Phones.Add(new Phone(person.Id, "1234567890")); diff --git a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs index df6eb0e1ae..e52f6731dc 100644 --- a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs +++ b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs @@ -43,7 +43,7 @@ namespace Volo.Abp.Account.Web.Pages.Account IdentityServerEvents = identityServerEvents; } - public override async Task OnGetAsync() + public async override Task OnGetAsync() { LoginInput = new LoginInputModel(); @@ -98,7 +98,7 @@ namespace Volo.Abp.Account.Web.Pages.Account return Page(); } - public override async Task OnPostAsync(string action) + public async override Task OnPostAsync(string action) { if (action == "Cancel") { @@ -173,7 +173,7 @@ namespace Volo.Abp.Account.Web.Pages.Account return RedirectSafely(ReturnUrl, ReturnUrlHash); } - public override async Task OnPostExternalLogin(string provider) + public async override Task OnPostExternalLogin(string provider) { if (AccountOptions.WindowsAuthenticationSchemeName == provider) { diff --git a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLogoutModel.cs b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLogoutModel.cs index bec2ede369..26ee0d4c34 100644 --- a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLogoutModel.cs +++ b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLogoutModel.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.Account.Web.Pages.Account Interaction = interaction; } - public override async Task OnGetAsync() + public async override Task OnGetAsync() { await IdentitySecurityLogManager.SaveAsync(new IdentitySecurityLogContext() { diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/DatabaseBlobProvider.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/DatabaseBlobProvider.cs index 7fec4592c6..6d9b3dfc5b 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/DatabaseBlobProvider.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/DatabaseBlobProvider.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.BlobStoring.Database CurrentTenant = currentTenant; } - public override async Task SaveAsync(BlobProviderSaveArgs args) + public async override Task SaveAsync(BlobProviderSaveArgs args) { var container = await GetOrCreateContainerAsync(args.ContainerName, args.CancellationToken); @@ -57,7 +57,7 @@ namespace Volo.Abp.BlobStoring.Database } } - public override async Task DeleteAsync(BlobProviderDeleteArgs args) + public async override Task DeleteAsync(BlobProviderDeleteArgs args) { var container = await DatabaseBlobContainerRepository.FindAsync( args.ContainerName, @@ -77,7 +77,7 @@ namespace Volo.Abp.BlobStoring.Database ); } - public override async Task ExistsAsync(BlobProviderExistsArgs args) + public async override Task ExistsAsync(BlobProviderExistsArgs args) { var container = await DatabaseBlobContainerRepository.FindAsync( args.ContainerName, @@ -96,7 +96,7 @@ namespace Volo.Abp.BlobStoring.Database ); } - public override async Task GetOrNullAsync(BlobProviderGetArgs args) + public async override Task GetOrNullAsync(BlobProviderGetArgs args) { var container = await DatabaseBlobContainerRepository.FindAsync( args.ContainerName, diff --git a/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSignInManager.cs b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSignInManager.cs index 8e4b435b48..8de9014cbe 100644 --- a/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSignInManager.cs +++ b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSignInManager.cs @@ -33,7 +33,7 @@ namespace Volo.Abp.Identity.AspNetCore AbpOptions = options.Value; } - public override async Task PasswordSignInAsync( + public async override Task PasswordSignInAsync( string userName, string password, bool isPersistent, diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs index 11abe2bdf3..9831b03d5d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.Identity } [UnitOfWork] - public override async Task CreateAsync(IdentityUser user) + public async override Task CreateAsync(IdentityUser user) { var principal = await base.CreateAsync(user); var identity = principal.Identities.First(); diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleManager.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleManager.cs index 40c249e5c4..7522b96159 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleManager.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleManager.cs @@ -50,7 +50,7 @@ namespace Volo.Abp.Identity return role; } - public override async Task SetRoleNameAsync(IdentityRole role, string name) + public async override Task SetRoleNameAsync(IdentityRole role, string name) { if (role.IsStatic && role.Name != name) { @@ -60,7 +60,7 @@ namespace Volo.Abp.Identity return await base.SetRoleNameAsync(role, name); } - public override async Task DeleteAsync(IdentityRole role) + public async override Task DeleteAsync(IdentityRole role) { if (role.IsStatic) { diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs index 74aa138b5e..53ebe46fb2 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.PermissionManagement.Identity public RolePermissionManagementProvider( IPermissionGrantRepository permissionGrantRepository, IGuidGenerator guidGenerator, - ICurrentTenant currentTenant, + ICurrentTenant currentTenant, IUserRoleFinder userRoleFinder) : base( permissionGrantRepository, @@ -26,7 +26,7 @@ namespace Volo.Abp.PermissionManagement.Identity UserRoleFinder = userRoleFinder; } - public override async Task CheckAsync(string name, string providerName, string providerKey) + public async override Task CheckAsync(string name, string providerName, string providerKey) { if (providerName == Name) { @@ -54,4 +54,4 @@ namespace Volo.Abp.PermissionManagement.Identity return PermissionValueProviderGrantInfo.NonGranted; } } -} \ No newline at end of file +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpProfileService.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpProfileService.cs index 224abc6c10..3eb14131f1 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpProfileService.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpProfileService.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity } [UnitOfWork] - public override async Task GetProfileDataAsync(ProfileDataRequestContext context) + public async override Task GetProfileDataAsync(ProfileDataRequestContext context) { using (CurrentTenant.Change(context.Subject.FindTenantId())) { @@ -33,7 +33,7 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity } [UnitOfWork] - public override async Task IsActiveAsync(IsActiveContext context) + public async override Task IsActiveAsync(IsActiveContext context) { using (CurrentTenant.Change(context.Subject.FindTenantId())) { diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs index 17e84876af..bdfe2bbb81 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs @@ -72,7 +72,7 @@ namespace Volo.Abp.IdentityServer.ApiResources return await DbSet.AnyAsync(ar => ar.Id != expectedId && ar.Name == name, GetCancellationToken(cancellationToken)); } - public override async Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = default) + public async override Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = default) { var resourceClaims = DbContext.Set().Where(sc => sc.ApiResourceId == id); foreach (var scopeClaim in resourceClaims) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs index 88772bfab7..8e5d2bd09c 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs @@ -50,7 +50,7 @@ namespace Volo.Abp.IdentityServer.ApiScopes return await DbSet.AnyAsync(x => x.Id != expectedId && x.Name == name, GetCancellationToken(cancellationToken)); } - public override async Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = new CancellationToken()) + public async override Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = new CancellationToken()) { var scopeClaims = DbContext.Set().Where(sc => sc.ApiScopeId == id); foreach (var claim in scopeClaims) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs index b1ff2770bb..671d98d822 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs @@ -54,7 +54,7 @@ namespace Volo.Abp.IdentityServer.Clients return await DbSet.AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken); } - public override async Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = default) + public async override Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = default) { foreach (var clientGrantType in DbContext.Set().Where(x => x.ClientId == id)) { From a4ee9f2c7bd73a82d1ffb081284e79f26e81c9c4 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 28 Oct 2020 11:05:46 +0800 Subject: [PATCH 026/108] Update document files. --- docs/en/Authorization.md | 4 +- .../2020-05-08 v2_7_Release/Post.md | 8 ++-- .../POST.md | 8 ++-- .../POST.md | 14 +++---- ...Application-Modules-Overriding-Services.md | 42 +++++++++---------- docs/en/Entity-Framework-Core.md | 14 +++---- docs/en/Exception-Handling.md | 4 +- docs/en/MongoDB.md | 16 +++---- docs/en/Tutorials/Part-10.md | 26 ++++++------ .../Customization-User-Interface.md | 12 +++--- docs/zh-Hans/Authorization.md | 2 +- .../2020-05-08 v2_7_Release/Post.md | 2 +- ...Application-Modules-Overriding-Services.md | 36 ++++++++-------- docs/zh-Hans/Entity-Framework-Core.md | 6 +-- .../How-To/Customize-SignIn-Manager.md | 2 +- docs/zh-Hans/MongoDB.md | 10 ++--- .../Customization-User-Interface.md | 6 +-- 17 files changed, 106 insertions(+), 106 deletions(-) diff --git a/docs/en/Authorization.md b/docs/en/Authorization.md index eef4237039..158466d153 100644 --- a/docs/en/Authorization.md +++ b/docs/en/Authorization.md @@ -234,7 +234,7 @@ context When you write this code inside your permission definition provider, it finds the "role deletion" permission of the [Identity Module](Modules/Identity.md) and disabled the permission, so no one can delete a role on the application. -> Tip: It is better to check the value returned by the `GetPermissionOrNull` method since it may return null if the given permission was not defined. +> Tip: It is better to check the value returned by the `GetPermissionOrNull` method since it may return null if the given permission was not defined. ## IAuthorizationService @@ -354,7 +354,7 @@ public class SystemAdminPermissionValueProvider : PermissionValueProvider public override string Name => "SystemAdmin"; - public override async Task + public async override Task CheckAsync(PermissionValueCheckContext context) { if (context.Principal?.FindFirst("User_Type")?.Value == "SystemAdmin") diff --git a/docs/en/Blog-Posts/2020-05-08 v2_7_Release/Post.md b/docs/en/Blog-Posts/2020-05-08 v2_7_Release/Post.md index b6c1d3f952..c09b0eb75c 100644 --- a/docs/en/Blog-Posts/2020-05-08 v2_7_Release/Post.md +++ b/docs/en/Blog-Posts/2020-05-08 v2_7_Release/Post.md @@ -16,7 +16,7 @@ ABP.IO Platform is rapidly growing and we are getting more and more contribution ### Object Extending System -In the last few releases, we've mostly focused on providing ways to extend existing modules when you use them as NuGet/NPM Packages. +In the last few releases, we've mostly focused on providing ways to extend existing modules when you use them as NuGet/NPM Packages. The Object Extending System allows module developers to create extensible modules and allows application developers to customize and extend a module easily. @@ -43,7 +43,7 @@ ObjectExtensionManager.Instance options.Attributes.Add(new RequiredAttribute()); options.Attributes.Add( new StringLengthAttribute(32) { - MinimumLength = 6 + MinimumLength = 6 } ); }); @@ -121,7 +121,7 @@ Just create a class derived from the `ExceptionSubscriber` class in your applica ````csharp public class MyExceptionSubscriber : ExceptionSubscriber { - public override async Task HandleAsync(ExceptionNotificationContext context) + public async override Task HandleAsync(ExceptionNotificationContext context) { //TODO... } @@ -244,4 +244,4 @@ We ([Volosoft](https://volosoft.com/) - the core team behind the ABP.IO platform [ABP Framework](https://abp.io/) provides all the infrastructure and application independent framework features to make you more productive, focus on your own business code and implement software development best practices. It provides you a well defined and comfortable development experience without repeating yourself. -[ABP Commercial](https://commercial.abp.io/) provides pre-built functionalities, themes and tooling to save your time if your requirements involve these functionalities in addition to the premium support for the framework and the pre-built modules. \ No newline at end of file +[ABP Commercial](https://commercial.abp.io/) provides pre-built functionalities, themes and tooling to save your time if your requirements involve these functionalities in addition to the premium support for the framework and the pre-built modules. diff --git a/docs/en/Community-Articles/2020-04-19-Customize-the-SignIn-Manager/POST.md b/docs/en/Community-Articles/2020-04-19-Customize-the-SignIn-Manager/POST.md index d46049526d..1342407880 100644 --- a/docs/en/Community-Articles/2020-04-19-Customize-the-SignIn-Manager/POST.md +++ b/docs/en/Community-Articles/2020-04-19-Customize-the-SignIn-Manager/POST.md @@ -1,6 +1,6 @@ # How to Customize the SignIn Manager for ABP Applications -After creating a new application using the [application startup template](https://docs.abp.io/en/abp/latest/Startup-Templates/Application), you may want extend or change the default behavior of the SignIn Manager for your authentication and registration flow needs. ABP [Account Module](https://docs.abp.io/en/abp/latest/Modules/Account) uses the [Identity Management Module](https://docs.abp.io/en/abp/latest/Modules/Identity) for SignIn Manager and the [Identity Management Module](https://docs.abp.io/en/abp/latest/Modules/Identity) uses default [Microsoft Identity SignIn Manager](https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Core/src/SignInManager.cs) ([see here](https://github.com/abpframework/abp/blob/be32a55449e270d2d456df3dabdc91f3ffdd4fa9/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs#L17)). +After creating a new application using the [application startup template](https://docs.abp.io/en/abp/latest/Startup-Templates/Application), you may want extend or change the default behavior of the SignIn Manager for your authentication and registration flow needs. ABP [Account Module](https://docs.abp.io/en/abp/latest/Modules/Account) uses the [Identity Management Module](https://docs.abp.io/en/abp/latest/Modules/Identity) for SignIn Manager and the [Identity Management Module](https://docs.abp.io/en/abp/latest/Modules/Identity) uses default [Microsoft Identity SignIn Manager](https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Core/src/SignInManager.cs) ([see here](https://github.com/abpframework/abp/blob/be32a55449e270d2d456df3dabdc91f3ffdd4fa9/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs#L17)). To write your Custom SignIn Manager, you need to extend [Microsoft Identity SignIn Manager](https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Core/src/SignInManager.cs) class and register it to the DI container. @@ -27,7 +27,7 @@ public class CustomSignInManager : Microsoft.AspNetCore.Identity.SignInManager It is important to use **Volo.Abp.Identity.IdentityUser** type for SignInManager to inherit, not the AppUser of your application. +> It is important to use **Volo.Abp.Identity.IdentityUser** type for SignInManager to inherit, not the AppUser of your application. Afterwards you can override any of the SignIn Manager methods you need and add new methods and properties needed for your authentication or registration flow. @@ -38,7 +38,7 @@ In this case we'll be overriding the `GetExternalLoginInfoAsync` method which is A good way to override a method is copying its [source code](https://github.com/dotnet/aspnetcore/blob/c56aa320c32ee5429d60647782c91d53ac765865/src/Identity/Core/src/SignInManager.cs#L638-L674). In this case, we will be using a minorly modified version of the source code which explicitly shows the namespaces of the methods and properties to help better understanding of the concept. ````csharp -public override async Task GetExternalLoginInfoAsync(string expectedXsrf = null) +public async override Task GetExternalLoginInfoAsync(string expectedXsrf = null) { var auth = await Context.AuthenticateAsync(Microsoft.AspNetCore.Identity.IdentityConstants.ExternalScheme); var items = auth?.Properties?.Items; @@ -93,4 +93,4 @@ PreConfigure(identityBuilder => ## The Source Code -You can find the source code of the completed example [here](https://github.com/abpframework/abp-samples/tree/master/Authentication-Customization). \ No newline at end of file +You can find the source code of the completed example [here](https://github.com/abpframework/abp-samples/tree/master/Authentication-Customization). diff --git a/docs/en/Community-Articles/2020-08-07-Passwordless-Authentication/POST.md b/docs/en/Community-Articles/2020-08-07-Passwordless-Authentication/POST.md index b31ea023f2..9489c004bd 100644 --- a/docs/en/Community-Articles/2020-08-07-Passwordless-Authentication/POST.md +++ b/docs/en/Community-Articles/2020-08-07-Passwordless-Authentication/POST.md @@ -33,7 +33,7 @@ namespace PasswordlessAuthentication.Web } //We need to override this method as well. - public override async Task GetUserModifierAsync(string purpose, UserManager manager, TUser user) + public async override Task GetUserModifierAsync(string purpose, UserManager manager, TUser user) { var userId = await manager.GetUserIdAsync(user); @@ -105,7 +105,7 @@ namespace PasswordlessAuthentication.Web.Pages UserManager = userManager; _userRepository = userRepository; } - + public ActionResult OnGet() { if (!CurrentUser.IsAuthenticated) @@ -115,15 +115,15 @@ namespace PasswordlessAuthentication.Web.Pages return Page(); } - + //added for passwordless authentication public async Task OnPostGeneratePasswordlessTokenAsync() { var adminUser = await _userRepository.FindByNormalizedUserNameAsync("admin"); - + var token = await UserManager.GenerateUserTokenAsync(adminUser, "PasswordlessLoginProvider", "passwordless-auth"); - + PasswordlessLoginUrl = Url.Action("Login", "Passwordless", new {token = token, userId = adminUser.Id.ToString()}, Request.Scheme); @@ -238,7 +238,7 @@ namespace PasswordlessAuthentication.Web.Controllers return Redirect("/"); } - + private static IEnumerable CreateClaims(IUser user, IEnumerable roles) { var claims = new List @@ -272,4 +272,4 @@ That's all! We created a passwordless login with 7 steps. ## Source Code -The completed sample is available on [GitHub repository](https://github.com/abpframework/abp-samples/tree/master/PasswordlessAuthentication). \ No newline at end of file +The completed sample is available on [GitHub repository](https://github.com/abpframework/abp-samples/tree/master/PasswordlessAuthentication). diff --git a/docs/en/Customizing-Application-Modules-Overriding-Services.md b/docs/en/Customizing-Application-Modules-Overriding-Services.md index b8706eea61..97df12a3a6 100644 --- a/docs/en/Customizing-Application-Modules-Overriding-Services.md +++ b/docs/en/Customizing-Application-Modules-Overriding-Services.md @@ -29,7 +29,7 @@ public class TestAppService : IIdentityUserAppService, ITransientDependency } ```` -The dependency injection system allows to register multiple services for the same interface. The last registered one is used when the interface is injected. It is a good practice to explicitly replace the service. +The dependency injection system allows to register multiple services for the same interface. The last registered one is used when the interface is injected. It is a good practice to explicitly replace the service. Example: @@ -76,7 +76,7 @@ public class MyIdentityUserAppService : IdentityUserAppService { } - public override async Task CreateAsync(IdentityUserCreateDto input) + public async override Task CreateAsync(IdentityUserCreateDto input) { if (input.PhoneNumber.IsNullOrWhiteSpace()) { @@ -109,33 +109,33 @@ public class MyIdentityUserManager : IdentityUserManager { public MyIdentityUserManager( IdentityUserStore store, - IIdentityRoleRepository roleRepository, + IIdentityRoleRepository roleRepository, IIdentityUserRepository userRepository, - IOptions optionsAccessor, + IOptions optionsAccessor, IPasswordHasher passwordHasher, - IEnumerable> userValidators, - IEnumerable> passwordValidators, + IEnumerable> userValidators, + IEnumerable> passwordValidators, ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, IServiceProvider services, - ILogger logger, - ICancellationTokenProvider cancellationTokenProvider) : + ILogger logger, + ICancellationTokenProvider cancellationTokenProvider) : base(store, roleRepository, - userRepository, - optionsAccessor, - passwordHasher, - userValidators, + userRepository, + optionsAccessor, + passwordHasher, + userValidators, passwordValidators, - keyNormalizer, - errors, - services, - logger, + keyNormalizer, + errors, + services, + logger, cancellationTokenProvider) { } - public override async Task CreateAsync(IdentityUser user) + public async override Task CreateAsync(IdentityUser user) { if (user.PhoneNumber.IsNullOrWhiteSpace()) { @@ -182,7 +182,7 @@ namespace MyProject.Controllers } - public override async Task SendPasswordResetCodeAsync( + public async override Task SendPasswordResetCodeAsync( SendPasswordResetCodeDto input) { Logger.LogInformation("Your custom logic..."); @@ -214,7 +214,7 @@ Assuming that you've already added a `SocialSecurityNumber` as described in the You can use the [object extension system](Object-Extensions.md) to add the property to the `IdentityUserDto`. Write this code inside the `YourProjectNameDtoExtensions` class comes with the application startup template: ````csharp -ObjectExtensionManager.Instance +ObjectExtensionManager.Instance .AddOrUpdateProperty( "SocialSecurityNumber" ); @@ -286,8 +286,8 @@ ObjectExtensionManager.Instance .AddOrUpdateProperty( new[] { - typeof(IdentityUserDto), - typeof(IdentityUserCreateDto), + typeof(IdentityUserDto), + typeof(IdentityUserCreateDto), typeof(IdentityUserUpdateDto) }, "SocialSecurityNumber" diff --git a/docs/en/Entity-Framework-Core.md b/docs/en/Entity-Framework-Core.md index 98163e7c28..5d41d571b7 100644 --- a/docs/en/Entity-Framework-Core.md +++ b/docs/en/Entity-Framework-Core.md @@ -92,7 +92,7 @@ protected override void OnModelCreating(ModelBuilder builder) b.ToTable("Books"); //Configure the base properties - b.ConfigureByConvention(); + b.ConfigureByConvention(); //Configure other properties (if you are using the fluent API) b.Property(x => x.Name).IsRequired().HasMaxLength(128); @@ -113,7 +113,7 @@ If you have multiple databases in your application, you can configure the connec [ConnectionStringName("MySecondConnString")] public class MyDbContext : AbpDbContext { - + } ``` @@ -254,7 +254,7 @@ If you want to replace default repository implementation with your custom reposi context.Services.AddAbpDbContext(options => { options.AddDefaultRepositories(); - + //Replaces IRepository options.AddRepository(); }); @@ -263,7 +263,7 @@ context.Services.AddAbpDbContext(options => This is especially important when you want to **override a base repository method** to customize it. For instance, you may want to override `DeleteAsync` method to delete a specific entity in a more efficient way: ````csharp -public override async Task DeleteAsync( +public async override Task DeleteAsync( Guid id, bool autoSave = false, CancellationToken cancellationToken = default) @@ -365,7 +365,7 @@ public class MyRepositoryBase : EfCoreRepository where TEntity : class, IEntity { - public MyRepositoryBase(IDbContextProvider dbContextProvider) + public MyRepositoryBase(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } @@ -395,7 +395,7 @@ context.Services.AddAbpDbContext(options => typeof(MyRepositoryBase<,>), typeof(MyRepositoryBase<>) ); - + //... }); ``` @@ -448,4 +448,4 @@ In this example, `OtherDbContext` implements `IBookStoreDbContext`. This feature ## See Also -* [Entities](Entities.md) \ No newline at end of file +* [Entities](Entities.md) diff --git a/docs/en/Exception-Handling.md b/docs/en/Exception-Handling.md index 59a2c6bd0e..04cc6fc695 100644 --- a/docs/en/Exception-Handling.md +++ b/docs/en/Exception-Handling.md @@ -85,7 +85,7 @@ Error **details** in an optional field of the JSON error message. Thrown `Except ### Logging -Caught exceptions are automatically logged. +Caught exceptions are automatically logged. #### Log Level @@ -300,7 +300,7 @@ In this case, create a class derived from the `ExceptionSubscriber` class in you ````csharp public class MyExceptionSubscriber : ExceptionSubscriber { - public override async Task HandleAsync(ExceptionNotificationContext context) + public async override Task HandleAsync(ExceptionNotificationContext context) { //TODO... } diff --git a/docs/en/MongoDB.md b/docs/en/MongoDB.md index 475eb94f1b..98769c13b8 100644 --- a/docs/en/MongoDB.md +++ b/docs/en/MongoDB.md @@ -40,7 +40,7 @@ public class MyDbContext : AbpMongoDbContext protected override void CreateModel(IMongoModelBuilder modelBuilder) { base.CreateModel(modelBuilder); - + //Customize the configuration for your collections. } } @@ -62,7 +62,7 @@ So, most of times you don't need to explicitly configure registration for your e protected override void CreateModel(IMongoModelBuilder modelBuilder) { base.CreateModel(modelBuilder); - + modelBuilder.Entity(b => { b.CollectionName = "MyQuestions"; //Sets the collection name @@ -88,7 +88,7 @@ If you have multiple databases in your application, you can configure the connec [ConnectionStringName("MySecondConnString")] public class MyDbContext : AbpMongoDbContext { - + } ```` @@ -202,7 +202,7 @@ You generally want to derive from the `IRepository` to inherit standard reposito Example implementation of the `IBookRepository` interface: ```csharp -public class BookRepository : +public class BookRepository : MongoDbRepository, IBookRepository { @@ -242,9 +242,9 @@ context.Services.AddMongoDbContext(options => This is especially important when you want to **override a base repository method** to customize it. For instance, you may want to override `DeleteAsync` method to delete an entity in a more efficient way: ```csharp -public override async Task DeleteAsync( - Guid id, - bool autoSave = false, +public async override Task DeleteAsync( + Guid id, + bool autoSave = false, CancellationToken cancellationToken = default) { //TODO: Custom implementation of the delete method @@ -381,4 +381,4 @@ context.Services.AddMongoDbContext(options => }); ``` -In this example, `OtherMongoDbContext` implements `IBookStoreMongoDbContext`. This feature allows you to have multiple MongoDbContext (one per module) on development, but single MongoDbContext (implements all interfaces of all MongoDbContexts) on runtime. \ No newline at end of file +In this example, `OtherMongoDbContext` implements `IBookStoreMongoDbContext`. This feature allows you to have multiple MongoDbContext (one per module) on development, but single MongoDbContext (implements all interfaces of all MongoDbContexts) on runtime. diff --git a/docs/en/Tutorials/Part-10.md b/docs/en/Tutorials/Part-10.md index 53f19d93dd..98c1aa91ac 100644 --- a/docs/en/Tutorials/Part-10.md +++ b/docs/en/Tutorials/Part-10.md @@ -10,7 +10,7 @@ In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: -* **{{DB_Value}}** as the ORM provider. +* **{{DB_Value}}** as the ORM provider. * **{{UI_Value}}** as the UI Framework. This tutorial is organized as the following parts; @@ -78,7 +78,7 @@ builder.Entity(b => b.ToTable(BookStoreConsts.DbTablePrefix + "Books", BookStoreConsts.DbSchema); b.ConfigureByConvention(); //auto configure for the base class props b.Property(x => x.Name).IsRequired().HasMaxLength(128); - + // ADD THE MAPPING FOR THE RELATION b.HasOne().WithMany().HasForeignKey(x => x.AuthorId).IsRequired(); }); @@ -362,7 +362,7 @@ namespace Acme.BookStore.Books DeletePolicyName = BookStorePermissions.Books.Create; } - public override async Task GetAsync(Guid id) + public async override Task GetAsync(Guid id) { await CheckGetPolicyAsync(); @@ -384,7 +384,7 @@ namespace Acme.BookStore.Books return bookDto; } - public override async Task> + public async override Task> GetListAsync(PagedAndSortedResultRequestDto input) { await CheckGetListPolicyAsync(); @@ -485,7 +485,7 @@ namespace Acme.BookStore.Books DeletePolicyName = BookStorePermissions.Books.Create; } - public override async Task GetAsync(Guid id) + public async override Task GetAsync(Guid id) { await CheckGetPolicyAsync(); @@ -498,7 +498,7 @@ namespace Acme.BookStore.Books return bookDto; } - public override async Task> + public async override Task> GetListAsync(PagedAndSortedResultRequestDto input) { await CheckGetListPolicyAsync(); @@ -524,7 +524,7 @@ namespace Acme.BookStore.Books var authorDictionary = await GetAuthorDictionaryAsync(books); //Set AuthorName for the DTOs - bookDtos.ForEach(bookDto => bookDto.AuthorName = + bookDtos.ForEach(bookDto => bookDto.AuthorName = authorDictionary[bookDto.AuthorId].Name); //Get the total count with another query (required for the paging) @@ -622,7 +622,7 @@ namespace Acme.BookStore.Books result.Items.ShouldContain(b => b.Name == "1984" && b.AuthorName == "George Orwell"); } - + [Fact] public async Task Should_Create_A_Valid_Book() { @@ -645,7 +645,7 @@ namespace Acme.BookStore.Books result.Id.ShouldNotBe(Guid.Empty); result.Name.ShouldBe("New test book 42"); } - + [Fact] public async Task Should_Not_Create_A_Book_Without_Name() { @@ -1104,11 +1104,11 @@ The final `@code` block should be the following: { await base.OnInitializedAsync(); - canCreateBook = await + canCreateBook = await AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Create); - canEditBook = await + canEditBook = await AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Edit); - canDeleteBook = await + canDeleteBook = await AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Delete); //GET AUTHORS @@ -1164,4 +1164,4 @@ Add the following `Field` definition into the `ModalBody` of the *Edit* modal, a That's all. We are reusing the `authorList` defined for the *Create* modal. -{{end}} \ No newline at end of file +{{end}} diff --git a/docs/en/UI/AspNetCore/Customization-User-Interface.md b/docs/en/UI/AspNetCore/Customization-User-Interface.md index c4e196fbb9..b3e0ec33fb 100644 --- a/docs/en/UI/AspNetCore/Customization-User-Interface.md +++ b/docs/en/UI/AspNetCore/Customization-User-Interface.md @@ -28,15 +28,15 @@ namespace Acme.BookStore.Web.Pages.Identity.Users public class MyEditModalModel : EditModalModel { public MyEditModalModel( - IIdentityUserAppService identityUserAppService, + IIdentityUserAppService identityUserAppService, IIdentityRoleAppService identityRoleAppService ) : base( - identityUserAppService, + identityUserAppService, identityRoleAppService) { } - public override async Task OnPostAsync() + public async override Task OnPostAsync() { //TODO: Additional logic await base.OnPostAsync(); @@ -84,10 +84,10 @@ Create a page model class deriving from the ` LoginModel ` (defined in the ` Vol public class MyLoginModel : LoginModel { public MyLoginModel( - IAuthenticationSchemeProvider schemeProvider, + IAuthenticationSchemeProvider schemeProvider, IOptions accountOptions ) : base( - schemeProvider, + schemeProvider, accountOptions) { @@ -437,7 +437,7 @@ See the layouts section below to learn more about the layout system. Layout system allows themes to define standard, named layouts and allows any page to select a proper layout for its purpose. There are three pre-defined layouts: -* "**Application**": The main (and the default) layout for an application. It typically contains header, menu (sidebar), footer, toolbar... etc. +* "**Application**": The main (and the default) layout for an application. It typically contains header, menu (sidebar), footer, toolbar... etc. * "**Account**": This layout is used by login, register and other similar pages. It is used for the pages under the `/Pages/Account` folder by default. * "**Empty**": Empty and minimal layout. diff --git a/docs/zh-Hans/Authorization.md b/docs/zh-Hans/Authorization.md index 96caae1404..db0dfdb654 100644 --- a/docs/zh-Hans/Authorization.md +++ b/docs/zh-Hans/Authorization.md @@ -343,7 +343,7 @@ public class SystemAdminPermissionValueProvider : PermissionValueProvider public override string Name => "SystemAdmin"; - public override async Task + public async override Task CheckAsync(PermissionValueCheckContext context) { if (context.Principal?.FindFirst("User_Type")?.Value == "SystemAdmin") diff --git a/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/Post.md b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/Post.md index 0f97391eb8..bc448179cc 100644 --- a/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/Post.md +++ b/docs/zh-Hans/Blog-Posts/2020-05-08 v2_7_Release/Post.md @@ -121,7 +121,7 @@ ABP框架的[异常处理系统](https://docs.abp.io/en/abp/latest/Exception-Han ````csharp public class MyExceptionSubscriber : ExceptionSubscriber { - public override async Task HandleAsync(ExceptionNotificationContext context) + public async override Task HandleAsync(ExceptionNotificationContext context) { //TODO... } diff --git a/docs/zh-Hans/Customizing-Application-Modules-Overriding-Services.md b/docs/zh-Hans/Customizing-Application-Modules-Overriding-Services.md index 21245cec16..2e950d4355 100644 --- a/docs/zh-Hans/Customizing-Application-Modules-Overriding-Services.md +++ b/docs/zh-Hans/Customizing-Application-Modules-Overriding-Services.md @@ -76,7 +76,7 @@ public class MyIdentityUserAppService : IdentityUserAppService { } - public override async Task CreateAsync(IdentityUserCreateDto input) + public async override Task CreateAsync(IdentityUserCreateDto input) { if (input.PhoneNumber.IsNullOrWhiteSpace()) { @@ -109,33 +109,33 @@ public class MyIdentityUserManager : IdentityUserManager { public MyIdentityUserManager( IdentityUserStore store, - IIdentityRoleRepository roleRepository, + IIdentityRoleRepository roleRepository, IIdentityUserRepository userRepository, - IOptions optionsAccessor, + IOptions optionsAccessor, IPasswordHasher passwordHasher, - IEnumerable> userValidators, - IEnumerable> passwordValidators, + IEnumerable> userValidators, + IEnumerable> passwordValidators, ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, IServiceProvider services, - ILogger logger, - ICancellationTokenProvider cancellationTokenProvider) : + ILogger logger, + ICancellationTokenProvider cancellationTokenProvider) : base(store, roleRepository, - userRepository, - optionsAccessor, - passwordHasher, - userValidators, + userRepository, + optionsAccessor, + passwordHasher, + userValidators, passwordValidators, - keyNormalizer, - errors, - services, - logger, + keyNormalizer, + errors, + services, + logger, cancellationTokenProvider) { } - public override async Task CreateAsync(IdentityUser user) + public async override Task CreateAsync(IdentityUser user) { if (user.PhoneNumber.IsNullOrWhiteSpace()) { @@ -251,8 +251,8 @@ ObjectExtensionManager.Instance .AddOrUpdateProperty( new[] { - typeof(IdentityUserDto), - typeof(IdentityUserCreateDto), + typeof(IdentityUserDto), + typeof(IdentityUserCreateDto), typeof(IdentityUserUpdateDto) }, "SocialSecurityNumber" diff --git a/docs/zh-Hans/Entity-Framework-Core.md b/docs/zh-Hans/Entity-Framework-Core.md index 211ec4d65f..b5252b86c0 100644 --- a/docs/zh-Hans/Entity-Framework-Core.md +++ b/docs/zh-Hans/Entity-Framework-Core.md @@ -263,7 +263,7 @@ context.Services.AddAbpDbContext(options => 在你想要覆盖默认仓储方法对其自定义时,这一点非常需要. 例如你可能希望自定义`DeleteAsync`方法覆盖默认实现 ````csharp -public override async Task DeleteAsync( +public async override Task DeleteAsync( Guid id, bool autoSave = false, CancellationToken cancellationToken = default) @@ -365,7 +365,7 @@ public class MyRepositoryBase : EfCoreRepository where TEntity : class, IEntity { - public MyRepositoryBase(IDbContextProvider dbContextProvider) + public MyRepositoryBase(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } @@ -447,4 +447,4 @@ context.Services.AddAbpDbContext(options => ## 另请参阅 -* [实体](Entities.md) \ No newline at end of file +* [实体](Entities.md) diff --git a/docs/zh-Hans/How-To/Customize-SignIn-Manager.md b/docs/zh-Hans/How-To/Customize-SignIn-Manager.md index 73cbcd2ce7..eea0364e6e 100644 --- a/docs/zh-Hans/How-To/Customize-SignIn-Manager.md +++ b/docs/zh-Hans/How-To/Customize-SignIn-Manager.md @@ -38,7 +38,7 @@ public class CustomSignInManager : Microsoft.AspNetCore.Identity.SignInManager GetExternalLoginInfoAsync(string expectedXsrf = null) +public async override Task GetExternalLoginInfoAsync(string expectedXsrf = null) { var auth = await Context.AuthenticateAsync(Microsoft.AspNetCore.Identity.IdentityConstants.ExternalScheme); var items = auth?.Properties?.Items; diff --git a/docs/zh-Hans/MongoDB.md b/docs/zh-Hans/MongoDB.md index c90b9b5740..2ceeb1e00c 100644 --- a/docs/zh-Hans/MongoDB.md +++ b/docs/zh-Hans/MongoDB.md @@ -160,7 +160,7 @@ public interface IBookRepository : IRepository 实现`IBookRepository`接口的例子: ```csharp -public class BookRepository : +public class BookRepository : MongoDbRepository, IBookRepository { @@ -200,9 +200,9 @@ context.Services.AddMongoDbContext(options => 当你想**重写基础仓储方法**时,这一点尤为重要.例如,你想要重写`DeleteAsync`方法,以便更有效的删除实体: ```csharp -public override async Task DeleteAsync( - Guid id, - bool autoSave = false, +public async override Task DeleteAsync( + Guid id, + bool autoSave = false, CancellationToken cancellationToken = default) { //TODO: 自定义实现删除方法 @@ -338,4 +338,4 @@ context.Services.AddMongoDbContext(options => }); ``` -这个例子中,`OtherMongoDbContext`实现了`IBookStoreMongoDbContext`.这个特性允许你在发开的时候使用多个MongoDbContext(每个模块一个),但是运行的时候只能使有一个MongoDbContext(实现所有MongoDbContexts的所有接口) \ No newline at end of file +这个例子中,`OtherMongoDbContext`实现了`IBookStoreMongoDbContext`.这个特性允许你在发开的时候使用多个MongoDbContext(每个模块一个),但是运行的时候只能使有一个MongoDbContext(实现所有MongoDbContexts的所有接口) diff --git a/docs/zh-Hans/UI/AspNetCore/Customization-User-Interface.md b/docs/zh-Hans/UI/AspNetCore/Customization-User-Interface.md index c94c29d27f..44eb9b6e26 100644 --- a/docs/zh-Hans/UI/AspNetCore/Customization-User-Interface.md +++ b/docs/zh-Hans/UI/AspNetCore/Customization-User-Interface.md @@ -36,7 +36,7 @@ namespace Acme.BookStore.Web.Pages.Identity.Users { } - public override async Task OnPostAsync() + public async override Task OnPostAsync() { //TODO: Additional logic await base.OnPostAsync(); @@ -83,10 +83,10 @@ namespace Acme.BookStore.Web.Pages.Identity.Users public class MyLoginModel : LoginModel { public MyLoginModel( - IAuthenticationSchemeProvider schemeProvider, + IAuthenticationSchemeProvider schemeProvider, IOptions accountOptions ) : base( - schemeProvider, + schemeProvider, accountOptions) { From b4f6ef6d03e973c940e222b7e43b3f1d8d37fd23 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Wed, 28 Oct 2020 10:25:32 +0100 Subject: [PATCH 027/108] Implemented UiNotificationService --- .../Themes/Basic/MainLayout.razor | 1 + .../WebAssembly/IUiNotificationService.cs | 11 +-- .../WebAssembly/NullUiNotificationService.cs | 11 +-- .../WebAssembly/UiNotificationEventArgs.cs | 23 ++++++ .../WebAssembly/UiNotificationOptions.cs | 18 +++++ .../WebAssembly/UiNotificationType.cs | 10 +++ .../BlazoriseUiNotificationService.cs | 62 ++++++++++++++-- .../Components/UiNotificationAlert.razor | 1 + .../Components/UiNotificationAlert.razor.cs | 71 +++++++++++++++++++ .../Volo.Abp.BlazoriseUI.csproj | 1 + .../src/Volo.Abp.BlazoriseUI/_Imports.razor | 3 +- .../wwwroot/index.html | 1 + 12 files changed, 195 insertions(+), 18 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationEventArgs.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationOptions.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationType.cs create mode 100644 framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor create mode 100644 framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor index 45496a7984..20b96bef45 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor @@ -22,4 +22,5 @@ @Body +
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs index a9816dc325..753dad4dcd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs @@ -1,12 +1,13 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; namespace Volo.Abp.AspNetCore.Components.WebAssembly { public interface IUiNotificationService { - Task Info(string message); - Task Success(string message); - Task Warn(string message); - Task Error(string message); + Task Info(string message, string title = null, Action options = null); + Task Success(string message, string title = null, Action options = null); + Task Warn(string message, string title = null, Action options = null); + Task Error(string message, string title = null, Action options = null); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs index 85ee10287c..950cca3047 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs @@ -1,25 +1,26 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; using Volo.Abp.DependencyInjection; namespace Volo.Abp.AspNetCore.Components.WebAssembly { public class NullUiNotificationService : IUiNotificationService, ITransientDependency { - public Task Info(string message) + public Task Info(string message, string title = null, Action options = null) { return Task.CompletedTask; } - public Task Success(string message) + public Task Success(string message, string title = null, Action options = null) { return Task.CompletedTask; } - public Task Warn(string message) + public Task Warn(string message, string title = null, Action options = null) { return Task.CompletedTask; } - public Task Error(string message) + public Task Error(string message, string title = null, Action options = null) { return Task.CompletedTask; } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationEventArgs.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationEventArgs.cs new file mode 100644 index 0000000000..402bfb329b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationEventArgs.cs @@ -0,0 +1,23 @@ +using System; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly +{ + public class UiNotificationEventArgs : EventArgs + { + public UiNotificationEventArgs(UiNotificationType notificationType, string message, string title, UiNotificationOptions options) + { + NotificationType = notificationType; + Message = message; + Title = title; + Options = options; + } + + public UiNotificationType NotificationType { get; set; } + + public string Message { get; } + + public string Title { get; } + + public UiNotificationOptions Options { get; } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationOptions.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationOptions.cs new file mode 100644 index 0000000000..2d51716cd9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationOptions.cs @@ -0,0 +1,18 @@ +namespace Volo.Abp.AspNetCore.Components.WebAssembly +{ + /// + /// Options to override notification appearance. + /// + public class UiNotificationOptions + { + /// + /// Custom text for the Ok button. + /// + public string OkButtonText { get; set; } + + /// + /// Custom icon for the Ok button. + /// + public object OkButtonIcon { get; set; } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationType.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationType.cs new file mode 100644 index 0000000000..78f3a86bb5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationType.cs @@ -0,0 +1,10 @@ +namespace Volo.Abp.AspNetCore.Components.WebAssembly +{ + public enum UiNotificationType + { + Info, + Success, + Warning, + Error, + } +} diff --git a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs index 549a1f4d07..d1e6ed6ce2 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs @@ -1,4 +1,7 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; +using Localization.Resources.AbpUi; +using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.AspNetCore.Components.WebAssembly; @@ -7,34 +10,79 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.BlazoriseUI { [Dependency(ReplaceServices = true)] - public class BlazoriseUiNotificationService : IUiNotificationService, ITransientDependency + public class BlazoriseUiNotificationService : IUiNotificationService, IScopedDependency { + /// + /// An event raised after the notification is received. + /// + public event EventHandler NotificationReceived; + + private readonly IStringLocalizer localizer; + public ILogger Logger { get; set; } - public BlazoriseUiNotificationService() + public BlazoriseUiNotificationService( + IStringLocalizer localizer) { + this.localizer = localizer; + Logger = NullLogger.Instance; } - public Task Info(string message) + public Task Info(string message, string title = null, Action options = null) { + var uiNotificationOptions = CreateDefaultOptions(); + options?.Invoke(uiNotificationOptions); + Logger.LogInformation(message); + + NotificationReceived?.Invoke(this, new UiNotificationEventArgs(UiNotificationType.Info, message, title, uiNotificationOptions)); + return Task.CompletedTask; } - public Task Success(string message) + public Task Success(string message, string title = null, Action options = null) { + var uiNotificationOptions = CreateDefaultOptions(); + options?.Invoke(uiNotificationOptions); + + Logger.LogInformation(message); + + NotificationReceived?.Invoke(this, new UiNotificationEventArgs(UiNotificationType.Success, message, title, uiNotificationOptions)); + return Task.CompletedTask; } - public Task Warn(string message) + public Task Warn(string message, string title = null, Action options = null) { + var uiNotificationOptions = CreateDefaultOptions(); + options?.Invoke(uiNotificationOptions); + + Logger.LogWarning(message); + + NotificationReceived?.Invoke(this, new UiNotificationEventArgs(UiNotificationType.Warning, message, title, uiNotificationOptions)); + return Task.CompletedTask; } - public Task Error(string message) + public Task Error(string message, string title = null, Action options = null) { + var uiNotificationOptions = CreateDefaultOptions(); + options?.Invoke(uiNotificationOptions); + + Logger.LogError(message); + + NotificationReceived?.Invoke(this, new UiNotificationEventArgs(UiNotificationType.Error, message, title, uiNotificationOptions)); + return Task.CompletedTask; } + + protected virtual UiNotificationOptions CreateDefaultOptions() + { + return new UiNotificationOptions + { + OkButtonText = localizer["Ok"], + }; + } } } diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor new file mode 100644 index 0000000000..349eee2c40 --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor.cs new file mode 100644 index 0000000000..691b6a7a1a --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor.cs @@ -0,0 +1,71 @@ +using System; +using System.Threading.Tasks; +using Blazorise.Snackbar; +using Microsoft.AspNetCore.Components; +using Volo.Abp.AspNetCore.Components.WebAssembly; + +namespace Volo.Abp.BlazoriseUI.Components +{ + public partial class UiNotificationAlert : ComponentBase, IDisposable + { + protected SnackbarStack SnackbarStack { get; set; } + + [Parameter] public UiNotificationType NotificationType { get; set; } + + [Parameter] public string Message { get; set; } + + [Parameter] public string Title { get; set; } + + [Parameter] public UiNotificationOptions Options { get; set; } + + [Parameter] public EventCallback Okayed { get; set; } + + [Parameter] public EventCallback Closed { get; set; } + + [Inject] protected BlazoriseUiNotificationService UiNotificationService { get; set; } + + protected virtual SnackbarColor GetSnackbarColor(UiNotificationType notificationType) + { + return notificationType switch + { + UiNotificationType.Info => SnackbarColor.Info, + UiNotificationType.Success => SnackbarColor.Success, + UiNotificationType.Warning => SnackbarColor.Warning, + UiNotificationType.Error => SnackbarColor.Danger, + _ => SnackbarColor.None, + }; + } + + protected override void OnInitialized() + { + base.OnInitialized(); + + UiNotificationService.NotificationReceived += OnNotificationReceived; + } + + protected virtual void OnNotificationReceived(object sender, UiNotificationEventArgs e) + { + NotificationType = e.NotificationType; + Message = e.Message; + Title = e.Title; + Options = e.Options; + + SnackbarStack.Push(Message, GetSnackbarColor(e.NotificationType)); + } + + public virtual void Dispose() + { + if (UiNotificationService != null) + { + UiNotificationService.NotificationReceived -= OnNotificationReceived; + } + } + + protected virtual Task OnSnackbarClosed(SnackbarClosedEventArgs eventArgs) + { + return eventArgs.CloseReason == SnackbarCloseReason.UserClosed + ? Okayed.InvokeAsync() + : Closed.InvokeAsync(); + } + } +} diff --git a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj index 1134821b78..110387927d 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj +++ b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj @@ -14,6 +14,7 @@ + diff --git a/framework/src/Volo.Abp.BlazoriseUI/_Imports.razor b/framework/src/Volo.Abp.BlazoriseUI/_Imports.razor index 37be71828c..0aae8ed947 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/_Imports.razor +++ b/framework/src/Volo.Abp.BlazoriseUI/_Imports.razor @@ -1,2 +1,3 @@ @using Microsoft.AspNetCore.Components.Web -@using Blazorise \ No newline at end of file +@using Blazorise +@using Blazorise.Snackbar \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html index 9f11ef4bd8..b8037cca39 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html @@ -12,6 +12,7 @@ + From 1c0baa6ca64ac6db9686a13964f71e4edc5332df Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Wed, 28 Oct 2020 15:23:58 +0100 Subject: [PATCH 028/108] Remove OnOpenedCreateModalAsync --- .../src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index f1563947c0..35b436565d 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -294,8 +294,6 @@ namespace Volo.Abp.BlazoriseUI await InvokeAsync(() => StateHasChanged()); CreateModal.Show(); - - await OnOpeningCreateModalAsync(); } protected virtual Task OnOpeningCreateModalAsync() @@ -303,11 +301,6 @@ namespace Volo.Abp.BlazoriseUI return Task.CompletedTask; } - protected virtual Task OnOpenedCreateModalAsync() - { - return Task.CompletedTask; - } - protected virtual Task CloseCreateModalAsync() { CreateModal.Hide(); @@ -330,8 +323,6 @@ namespace Volo.Abp.BlazoriseUI await InvokeAsync(() => StateHasChanged()); EditModal.Show(); - - await OnOpenedEditModalAsync(id); } protected virtual Task OnOpeningEditModalAsync(TKey id) @@ -339,11 +330,6 @@ namespace Volo.Abp.BlazoriseUI return Task.CompletedTask; } - protected virtual Task OnOpenedEditModalAsync(TKey id) - { - return Task.CompletedTask; - } - protected virtual TUpdateViewModel MapToEditingEntity(TGetOutputDto entityDto) { return ObjectMapper.Map(entityDto); From 66d60024ed8bd597c134a0e4f5a90dea3eed7b5c Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Wed, 28 Oct 2020 15:26:20 +0100 Subject: [PATCH 029/108] Remove ResetState and ApplyState temporary helpers --- .../System/AbpObjectExtensions.cs | 57 ------------------- 1 file changed, 57 deletions(-) diff --git a/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs b/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs index a173c2a95d..a3fd87188f 100644 --- a/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs +++ b/framework/src/Volo.Abp.Core/System/AbpObjectExtensions.cs @@ -106,62 +106,5 @@ namespace System return obj; } - - /// - /// Resets all fields of a given object to their default values. - /// - /// Type of the object. - /// An object - /// Alternative custom method to reset the values. - /// Returns the original object. - public static T ResetState(this T obj, Action customReset = null) - { - if (customReset != null) - { - customReset(obj); - } - else - { - var properties = typeof(T).GetProperties(); - - foreach (var property in properties) - { - if (!property.CanWrite) - { - continue; - } - - property.SetValue(obj, null); - } - } - - return obj; - } - - /// - /// Applies all fields of a given object from it's counterpart. - /// - /// Type of the object. - /// An object. - /// An object from which we copy the values. - /// Returns the original object. - public static T ApplyState(this T obj, T other) - { - // This code is not production ready and it should be removed once - // the proper validation in Blazorise is done! - var properties = typeof(T).GetProperties(); - - foreach (var property in properties) - { - if (!property.CanWrite) - { - continue; - } - - property.SetValue(obj, typeof(T).GetProperty(property.Name).GetValue(other)); - } - - return obj; - } } } From 18a3c6271675713cd99af64247a7b9034029ca84 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Wed, 28 Oct 2020 15:34:33 +0100 Subject: [PATCH 030/108] Use stringLocalizer default formater --- .../AbpIdentityBlazorMessageLocalizerExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs index 18a6242bab..a8aa779151 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.Identity.Blazor try { return arguments?.Count() > 0 - ? string.Format(stringLocalizer[format], LocalizeMessageArguments(stringLocalizer, arguments)?.ToArray()) + ? stringLocalizer[format, LocalizeMessageArguments(stringLocalizer, arguments)?.ToArray()] : stringLocalizer[format]; } catch From 26d54f693283f31f44c0ec664bc68196f19ad6c0 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Wed, 28 Oct 2020 15:35:38 +0100 Subject: [PATCH 031/108] Rename format parameter to message --- .../AbpIdentityBlazorMessageLocalizerExtensions.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs index a8aa779151..72328eb86d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs @@ -7,17 +7,17 @@ namespace Volo.Abp.Identity.Blazor { public static class AbpIdentityBlazorMessageLocalizerExtensions { - public static string Localize(this IStringLocalizer stringLocalizer, string format, IEnumerable arguments) + public static string Localize(this IStringLocalizer stringLocalizer, string message, IEnumerable arguments) { try { return arguments?.Count() > 0 - ? stringLocalizer[format, LocalizeMessageArguments(stringLocalizer, arguments)?.ToArray()] - : stringLocalizer[format]; + ? stringLocalizer[message, LocalizeMessageArguments(stringLocalizer, arguments)?.ToArray()] + : stringLocalizer[message]; } catch { - return stringLocalizer[format]; + return stringLocalizer[message]; } } From 11c9daf11a0f0af8e9d8315bc6bc72e5a490ca9f Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Wed, 28 Oct 2020 15:37:01 +0100 Subject: [PATCH 032/108] Fix formating --- .../Pages/Identity/RoleManagement.razor | 2 +- .../Pages/Identity/UserManagement.razor | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor index ac40aca83d..97001ee6ec 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor @@ -1,5 +1,5 @@ @page "/identity/roles" -@attribute [Authorize( IdentityPermissions.Roles.Default )] +@attribute [Authorize(IdentityPermissions.Roles.Default)] @using Volo.Abp.Identity @using Microsoft.AspNetCore.Authorization @using Microsoft.Extensions.Localization diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index 6f33181f8a..0a61fc70ab 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -1,5 +1,5 @@ @page "/identity/users" -@attribute [Authorize( IdentityPermissions.Users.Default )] +@attribute [Authorize(IdentityPermissions.Users.Default)] @using Microsoft.AspNetCore.Authorization @using Microsoft.Extensions.Localization @using Volo.Abp.Identity.Localization From f9ca7c638c5d511c31c539bfda572244a1ee8ce2 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 29 Oct 2020 10:46:42 +0800 Subject: [PATCH 033/108] Use global namespace in blazor. Fix #5982 --- .../Pages/MyProjectName/Index.razor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/MyProjectName/Index.razor b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/MyProjectName/Index.razor index d54a229594..2d155b021c 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/MyProjectName/Index.razor +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/MyProjectName/Index.razor @@ -1,6 +1,6 @@ -@page "/MyProjectName" +@page "/MyProjectName" @using Microsoft.Extensions.Localization -@using MyCompanyName.MyProjectName.Localization +@using global::MyCompanyName.MyProjectName.Localization @inject IStringLocalizer L @{ } From 58a304bd0c1e12ee0eebab2a6f6b856f0639a2e3 Mon Sep 17 00:00:00 2001 From: ZFmY Date: Thu, 29 Oct 2020 16:14:17 +0800 Subject: [PATCH 034/108] sync from the English doc --- .../Getting-Started-AspNetCore-Application.md | 354 ++++++++---------- 1 file changed, 160 insertions(+), 194 deletions(-) diff --git a/docs/zh-Hans/Getting-Started-AspNetCore-Application.md b/docs/zh-Hans/Getting-Started-AspNetCore-Application.md index 0334609bd3..be5e50c2bd 100644 --- a/docs/zh-Hans/Getting-Started-AspNetCore-Application.md +++ b/docs/zh-Hans/Getting-Started-AspNetCore-Application.md @@ -1,194 +1,160 @@ -## 在AspNet Core MVC Web Application中使用ABP - -本教程将介绍如何开始以最少的依赖关系开始使用ABP开发. - -通常情况下你需要下载一个 ***[启动模板](Getting-Started-AspNetCore-MVC-Template.md)*** - -### 创建一个新项目 - -1. 使用Visual Studio创建一个空的AspNet Core Web Application: - -![](images/create-new-aspnet-core-application.png) - -2. 选择空模板 - -![](images/select-empty-web-application.png) - -你可以选择其它模板,但是我想要从一个简洁的项目演示它. - -### 安装 Volo.Abp.AspNetCore.Mvc 包 - -Volo.Abp.AspNetCore.Mvc是ABP集成AspNet Core MVC的包,请安装它到你项目中: - -```` -Install-Package Volo.Abp.AspNetCore.Mvc -```` - -### 创建ABP模块 - -ABP是一个模块化框架,它需要一个**启动 (根) 模块**继承自``AbpModule``: - -````C# -using Microsoft.AspNetCore.Builder; -using Microsoft.Extensions.Hosting; -using Volo.Abp; -using Volo.Abp.AspNetCore.Mvc; -using Volo.Abp.Modularity; - -namespace BasicAspNetCoreApplication -{ - [DependsOn(typeof(AbpAspNetCoreMvcModule))] - public class AppModule : AbpModule - { - public override void OnApplicationInitialization( - ApplicationInitializationContext context) - { - var app = context.GetApplicationBuilder(); - var env = context.GetEnvironment(); - - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - else - { - app.UseExceptionHandler("/Error"); - } - - app.UseStaticFiles(); - app.UseRouting(); - app.UseConfiguredEndpoints(); - } - } -} -```` - -``AppModule`` 是应用程序启动模块的好名称(建议你的启动模块也使用这个命名). - -ABP的包定义了这个模块类,模块可以依赖其它模块.在上面的代码中 ``AppModule`` 依赖于 ``AbpAspNetCoreMvcModule`` (模块存在于Volo.Abp.AspNetCore.Mvc包中). 安装新的ABP的包后添加``DependsOn``是很常见的做法. - -我们在此模块类中配置ASP.NET Core管道,而不是Startup类中. - -### 启动类 - -接下来修改启动类集成ABP模块系统: - -````C# -using System; -using Microsoft.AspNetCore.Builder; -using Microsoft.Extensions.DependencyInjection; - -namespace BasicAspNetCoreApplication -{ - public class Startup - { - public IServiceProvider ConfigureServices(IServiceCollection services) - { - services.AddApplication(); - - return services.BuildServiceProviderFromFactory(); - } - - public void Configure(IApplicationBuilder app) - { - app.InitializeApplication(); - } - } -} - -```` - -修改``ConfigureServices``方法的返回值为``IServiceProvider``(默认是``void``).这个修改允许我们替换AspNet Core的依赖注入框架. (参阅下面的Autofac集成部分). ``services.AddApplication()``添加了所有模块中定义的全部服务. - -``app.InitializeApplication()`` 调用 ``Configure`` 方法初始化并启动应用程序 - -### Hello World! - -上面的应用程序没有什么功能,让我们创建一个MVC控制器实现一些功能: - -````C# -using Microsoft.AspNetCore.Mvc; -using Volo.Abp.AspNetCore.Mvc; - -namespace BasicAspNetCoreApplication.Controllers -{ - public class HomeController : AbpController - { - public IActionResult Index() - { - return Content("Hello World!"); - } - } -} - -```` - -如果运行这个应用程序你会在页面中看到"Hello World!". - -Derived ``HomeController`` from ``AbpController`` instead of standard ``Controller`` class. This is not required, but ``AbpController`` class has useful base properties and methods to make your development easier. - -从``AbpController``派生``HomeController`` 而不是继承自``Controller``类.虽然这不是强制要求,但是``AbpController``类有很多有用的有属性和方法,使你的开发更容易. - -### 使用 Autofac 依赖注入框架 - -虽然AspNet Core的依赖注入(DI)系统适用于基本要求,但Autofac提供了属性注入和方法拦截等高级功能,这些功能是ABP执行高级应用程序框架功能所必需的. - -用Autofac取代AspNet Core的DI系统并集成到ABP非常简单. - -1. 安装 Volo.Abp.Autofac 包 - -```` -Install-Package Volo.Abp.Autofac -```` - -2. 添加 ``AbpAutofacModule`` 依赖 - -````C# -[DependsOn(typeof(AbpAspNetCoreMvcModule))] -[DependsOn(typeof(AbpAutofacModule))] // 在模块上添加依赖AbpAutofacModule -public class AppModule : AbpModule -{ - ... -} -```` - -3. 修改在``Startup``类下的``services.AddApplication();``如下所示: - -````C# -services.AddApplication(options => -{ - options.UseAutofac(); // 集成 Autofac -}); -```` - -4. 更新 `Program.cs`代码, 不再使用`WebHost.CreateDefaultBuilder()`方法(因为它使用默认的DI容器): - - ````csharp -public class Program -{ - public static void Main(string[] args) - { - /* - https://github.com/aspnet/AspNetCore/issues/4206#issuecomment-445612167 - CurrentDirectoryHelpers 文件位于: \framework\src\Volo.Abp.AspNetCore.Mvc\Microsoft\AspNetCore\InProcess\CurrentDirectoryHelpers.cs - 当升级到ASP.NET Core 3.0的时候将会删除这个类. - */ - CurrentDirectoryHelpers.SetCurrentDirectory(); - - BuildWebHostInternal(args).Run(); - } - public static IWebHost BuildWebHostInternal(string[] args) => - new WebHostBuilder() - .UseKestrel() - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIIS() - .UseIISIntegration() - .UseStartup() - .Build(); -} -```` - - -### 源码 - -从[此处](https://github.com/abpframework/abp-samples/tree/master/BasicAspNetCoreApplication)获取本教程中创建的示例项目的源代码. +# 在AspNet Core MVC Web Application中使用ABP + +本教程将介绍如何开始以最少的依赖关系开始使用ABP开发. + +通常情况下你需要下载一个 **[启动模板](Getting-Started-AspNetCore-MVC-Template.md)** + +## 创建一个新项目 + +1. 使用Visual Studio 2019 (16.4.0+)创建一个新的AspNet Core Web Application: + +![](images/create-new-aspnet-core-application-v2.png) + +2. 配置新的项目: + +![](images/select-empty-web-application-v2.png) + +3. 完成创建: + +![](images/create-aspnet-core-application.png) + + +## 安装 Volo.Abp.AspNetCore.Mvc 包 + +Volo.Abp.AspNetCore.Mvc是ABP集成AspNet Core MVC的包,请安装它到你项目中: + +```` +Install-Package Volo.Abp.AspNetCore.Mvc +```` + +## 创建ABP模块 + +ABP是一个模块化框架,它需要一个**启动 (根) 模块**继承自``AbpModule``: + +````C# +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.Hosting; +using Volo.Abp; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Modularity; + +namespace BasicAspNetCoreApplication +{ + [DependsOn(typeof(AbpAspNetCoreMvcModule))] + public class AppModule : AbpModule + { + public override void OnApplicationInitialization( + ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + var env = context.GetEnvironment(); + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseExceptionHandler("/Error"); + } + + app.UseStaticFiles(); + app.UseRouting(); + app.UseConfiguredEndpoints(); + } + } +} +```` + +``AppModule`` 是应用程序启动模块的好名称. + +ABP的包定义了这个模块类,模块可以依赖其它模块.在上面的代码中 ``AppModule`` 依赖于 ``AbpAspNetCoreMvcModule`` (模块存在于[Volo.Abp.AspNetCore.Mvc](https://www.nuget.org/packages/Volo.Abp.AspNetCore.Mvc)包中). 安装新的ABP的包后添加``DependsOn``是很常见的做法. + +我们在此模块类中配置ASP.NET Core管道,而不是Startup类中. + +### 启动类 + +接下来修改启动类集成ABP模块系统: + +````C# +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; + +namespace BasicAspNetCoreApplication +{ + public class Startup + { + public void ConfigureServices(IServiceCollection services) + { + services.AddApplication(); + } + + public void Configure(IApplicationBuilder app) + { + app.InitializeApplication(); + } + } +} + +```` + +``services.AddApplication()``添加了所有``AppModule``模块中定义的全部服务. + +``Configure``方法中的``app.InitializeApplication()``完成初始化并启动应用程序. + +## 运行应用程序! + +启动该应用,它将按预期运行. + +## 使用 Autofac 依赖注入框架 + +虽然AspNet Core的依赖注入(DI)系统适用于基本要求,但[Autofac](https://autofac.org/)提供了属性注入和方法拦截等高级功能,这些功能是ABP执行高级应用程序框架功能所必需的. + +用Autofac取代AspNet Core的DI系统并集成到ABP非常简单. + +1. 安装 [Volo.Abp.Autofac](https://www.nuget.org/packages/Volo.Abp.Autofac) 包 + +```` +Install-Package Volo.Abp.Autofac +```` + +2. 添加 ``AbpAutofacModule`` 依赖 + +````C# +[DependsOn(typeof(AbpAspNetCoreMvcModule))] +[DependsOn(typeof(AbpAutofacModule))] // 在模块上添加依赖AbpAutofacModule +public class AppModule : AbpModule +{ + ... +} +```` + +3. 修改``Program.cs``以使用Autofac: + +````C# +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; + +namespace BasicAspNetCoreApplication +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }) + .UseAutofac(); // 添加这一行 + } +} +```` + +## 源码 + +从[此处](https://github.com/abpframework/abp-samples/tree/master/BasicAspNetCoreApplication)获取本教程中创建的示例项目的源代码. From 4a3835fde94d39f45dc6fe04191a83f807129756 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Thu, 29 Oct 2020 11:31:01 +0100 Subject: [PATCH 035/108] Remove logging --- .../BlazoriseUiNotificationService.cs | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs index d1e6ed6ce2..be2d5c9d51 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs @@ -2,8 +2,6 @@ using System.Threading.Tasks; using Localization.Resources.AbpUi; using Microsoft.Extensions.Localization; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.AspNetCore.Components.WebAssembly; using Volo.Abp.DependencyInjection; @@ -19,14 +17,10 @@ namespace Volo.Abp.BlazoriseUI private readonly IStringLocalizer localizer; - public ILogger Logger { get; set; } - public BlazoriseUiNotificationService( IStringLocalizer localizer) { this.localizer = localizer; - - Logger = NullLogger.Instance; } public Task Info(string message, string title = null, Action options = null) @@ -34,8 +28,6 @@ namespace Volo.Abp.BlazoriseUI var uiNotificationOptions = CreateDefaultOptions(); options?.Invoke(uiNotificationOptions); - Logger.LogInformation(message); - NotificationReceived?.Invoke(this, new UiNotificationEventArgs(UiNotificationType.Info, message, title, uiNotificationOptions)); return Task.CompletedTask; @@ -46,8 +38,6 @@ namespace Volo.Abp.BlazoriseUI var uiNotificationOptions = CreateDefaultOptions(); options?.Invoke(uiNotificationOptions); - Logger.LogInformation(message); - NotificationReceived?.Invoke(this, new UiNotificationEventArgs(UiNotificationType.Success, message, title, uiNotificationOptions)); return Task.CompletedTask; @@ -58,8 +48,6 @@ namespace Volo.Abp.BlazoriseUI var uiNotificationOptions = CreateDefaultOptions(); options?.Invoke(uiNotificationOptions); - Logger.LogWarning(message); - NotificationReceived?.Invoke(this, new UiNotificationEventArgs(UiNotificationType.Warning, message, title, uiNotificationOptions)); return Task.CompletedTask; @@ -70,8 +58,6 @@ namespace Volo.Abp.BlazoriseUI var uiNotificationOptions = CreateDefaultOptions(); options?.Invoke(uiNotificationOptions); - Logger.LogError(message); - NotificationReceived?.Invoke(this, new UiNotificationEventArgs(UiNotificationType.Error, message, title, uiNotificationOptions)); return Task.CompletedTask; From ed8857832c2d390bba78446a4fad78d557103b1d Mon Sep 17 00:00:00 2001 From: ZFmY Date: Thu, 29 Oct 2020 18:32:47 +0800 Subject: [PATCH 036/108] fix typo --- docs/zh-Hans/Entity-Framework-Core-Migrations.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/zh-Hans/Entity-Framework-Core-Migrations.md b/docs/zh-Hans/Entity-Framework-Core-Migrations.md index c6f1086540..266c0f46b0 100644 --- a/docs/zh-Hans/Entity-Framework-Core-Migrations.md +++ b/docs/zh-Hans/Entity-Framework-Core-Migrations.md @@ -235,7 +235,7 @@ public static class BackgroundJobsDbContextModelCreatingExtensions } ```` -此u还获取选项用于更改此模块的数据库表前缀和模式,但在这里并不重要. +此扩展方法还提供了选项用于更改此模块的数据库表前缀和模式,但在这里并不重要. 最终的应用程序在 `MigrationsDbContext` 类中调用扩展方法, 因此它可以确定此 `MigrationsDbContext` 维护的数据库中包含哪些模块. 如果要创建第二个数据库并将某些模块表移动到第二个数据库,则需要有第二个`MigrationsDbContext` 类,该类仅调用相关模块的扩展方法. 下一部分将详细介绍该主题. @@ -883,4 +883,4 @@ public class BookStoreDbMigratorModule : AbpModule ## 结论 -本文档说明了如何拆分数据库以及管理Entity Framework Core解决方案的数据库迁移. 简而言之,你需要为每个不同的数据库创建一个单独的迁移项目. \ No newline at end of file +本文档说明了如何拆分数据库以及管理Entity Framework Core解决方案的数据库迁移. 简而言之,你需要为每个不同的数据库创建一个单独的迁移项目. From 6c1d09db932d3801fd9f3e1128b601b174c7d1fc Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Thu, 29 Oct 2020 13:38:06 +0300 Subject: [PATCH 037/108] use Blazorise latest preview version volosoft/volo#3826 --- templates/app/aspnet-core/NuGet.Config | 6 ++++++ .../MyCompanyName.MyProjectName.Blazor.csproj | 4 ++-- templates/module/aspnet-core/NuGet.Config | 6 ++++++ .../MyCompanyName.MyProjectName.Blazor.Host.csproj | 4 ++-- 4 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 templates/app/aspnet-core/NuGet.Config create mode 100644 templates/module/aspnet-core/NuGet.Config diff --git a/templates/app/aspnet-core/NuGet.Config b/templates/app/aspnet-core/NuGet.Config new file mode 100644 index 0000000000..be8a1ece10 --- /dev/null +++ b/templates/app/aspnet-core/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index cfaf51eee7..0da1f2822a 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/templates/module/aspnet-core/NuGet.Config b/templates/module/aspnet-core/NuGet.Config new file mode 100644 index 0000000000..be8a1ece10 --- /dev/null +++ b/templates/module/aspnet-core/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj index 9d0ce4f54d..ab9baf3b70 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj @@ -8,8 +8,8 @@ - - + + From 20accec68a2931ac5ece91455aeb242872d71974 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Thu, 29 Oct 2020 12:44:58 +0100 Subject: [PATCH 038/108] editorconfig added to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5b8dfe9c11..b9576fda4c 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ *.user *.userosscache *.sln.docstates +*.editorconfig # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs From 0cbdb692ae98d1a061d09a25be064a0188bbe70c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 29 Oct 2020 14:45:53 +0300 Subject: [PATCH 039/108] Documented The Basic Theme --- docs/en/Themes/Basic.md | 3 +- docs/en/UI/AspNetCore/Basic-Theme.md | 89 +++++++++++++++++- .../Customization-User-Interface.md | 2 +- docs/en/docs-nav.json | 8 +- docs/en/images/example-global-styles.png | Bin 0 -> 14635 bytes 5 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 docs/en/images/example-global-styles.png diff --git a/docs/en/Themes/Basic.md b/docs/en/Themes/Basic.md index a0165c803a..819138de5f 100644 --- a/docs/en/Themes/Basic.md +++ b/docs/en/Themes/Basic.md @@ -1,3 +1,2 @@ -## Basic Theme +This document has been moved to [here](../UI/AspNetCore/Basic-Theme.md). -TODO \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Basic-Theme.md b/docs/en/UI/AspNetCore/Basic-Theme.md index 3435e94a8b..5f28475f43 100644 --- a/docs/en/UI/AspNetCore/Basic-Theme.md +++ b/docs/en/UI/AspNetCore/Basic-Theme.md @@ -1,3 +1,90 @@ # ASP.NET Core MVC / Razor Pages: The Basic Theme -This document is in progress. See the [Theming](Theming.md) document. \ No newline at end of file +The Basic Theme is a theme implementation for the ASP.NET Core MVC / Razor Pages UI. It is a minimalist theme that doesn't add any styling on top of the plain [Bootstrap](https://getbootstrap.com/). You can take the Basic Theme as the **base theme** and build your own theme or styling on top of it. See the *Customization* section. + +The Basic Theme has RTL (Right-to-Left language) support. + +> If you are looking for a professional, enterprise ready theme, you can check the [Lepton Theme](https://commercial.abp.io/themes), which is a part of the [ABP Commercial](https://commercial.abp.io/). + +> See the [Theming document](Theming.md) to learn about themes. + +## Installation + +**This theme is already installed** when you create a new solution using the [startup templates](../../Startup-Templates/Index.md). If you need to manually install it, follow the steps below: + +* Install the [Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic](https://www.nuget.org/packages/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic) NuGet package to your web project. +* Add `AbpAspNetCoreMvcUiBasicThemeModule` into the `[DependsOn(...)]` attribute for your [module class](../../Module-Development-Basics.md) in the web project. +* Install the [@abp/aspnetcore.mvc.ui.theme.basic](https://www.npmjs.com/package/@abp/aspnetcore.mvc.ui.theme.basic) NPM package to your web project (e.g. `npm install @abp/aspnetcore.mvc.ui.theme.basic` or `yarn add @abp/aspnetcore.mvc.ui.theme.basic`). +* Run `gulp` command in a command line terminal in the web project's folder. + +## Layouts + +The Basic Theme implements the standard layouts. All the layouts implement the following parts; + +* Global [Bundles](Bundling-Minification.md) +* [Page Alerts](Page-Alerts.md) +* [Layout Hooks](Layout-Hooks.md) +* [Widget](Widgets.md) Resources + +### The Application Layout + +![basic-theme-application-layout](../../images/basic-theme-application-layout.png) + +Application Layout implements the following parts, in addition to the common parts mentioned above; + +* Branding +* Main [Menu](Navigation-Menu.md) +* Main [Toolbar](Toolbars.md) with Language Selection & User Menu + +### The Account Layout + +![basic-theme-account-layout](D:\Github\abp\docs\en\images\basic-theme-account-layout.png) + +Application Layout implements the following parts, in addition to the common parts mentioned above; + +* Branding +* Main [Menu](Navigation-Menu.md) +* Main [Toolbar](Toolbars.md) with Language Selection & User Menu +* Tenant Switch Area + +### Empty Layout + +Empty layout is empty, as its name stands for. However, it implements the common parts mentioned above. + +## Customization + +You have two options two customize this theme: + +### Overriding Styles/Components + +In this approach, you continue to use the the theme as NuGet and NPM packages and customize the parts you need to. There are several ways to customize it; + +#### Override the Styles + +1. Create a CSS file in the `wwwroot` folder of your project: + +![example-global-styles](../../images/example-global-styles.png) + +2. Add the style file to the global bundle, in the `ConfigureServices` method of your [module](../../Module-Development-Basics.md): + +````csharp +Configure(options => +{ + options.StyleBundles.Configure(BasicThemeBundles.Styles.Global, bundle => + { + bundle.AddFiles("/styles/global-styles.css"); + }); +}); +```` + +#### Override the Components + +See the [User Interface Customization Guide](Customization-User-Interface.md) to learn how you can replace components, customize and extend the user interface. + +### Copy & Customize + +You can download the [source code](https://github.com/abpframework/abp/tree/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic) of the Basic Theme, copy the project content into your solution, re-arrange the package/module dependencies (see the Installation section above to understand how it was installed to the project) and freely customize the theme based on your application requirements. + +## See Also + +* [Theming](Theming.md) \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Customization-User-Interface.md b/docs/en/UI/AspNetCore/Customization-User-Interface.md index c4e196fbb9..d2a1193a53 100644 --- a/docs/en/UI/AspNetCore/Customization-User-Interface.md +++ b/docs/en/UI/AspNetCore/Customization-User-Interface.md @@ -132,7 +132,7 @@ The screenshot below was taken from the **basic theme** comes with the applicati ![bookstore-brand-area-highlighted](../../images/bookstore-brand-area-highlighted.png) -[The basic theme](../../Themes/Basic.md) defines some view components for the layout. For example, the highlighted area with the red rectangle above is called **Brand component**. You probably want to customize this component by adding your **own application logo**. Let's see how to do it. +[The basic theme](Basic-Theme.md) defines some view components for the layout. For example, the highlighted area with the red rectangle above is called **Brand component**. You probably want to customize this component by adding your **own application logo**. Let's see how to do it. First, create your logo and place under a folder in your web application. We used `wwwroot/logos/bookstore-logo.png` path. Then copy the Brand component's view ([from here](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Brand/Default.cshtml)) from the basic theme files under the `Themes/Basic/Components/Brand` folder. The result should be similar the picture below: diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 9510da38eb..c5bc0eeb3a 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -450,7 +450,13 @@ }, { "text": "Theming", - "path": "UI/AspNetCore/Theming.md" + "path": "UI/AspNetCore/Theming.md", + "items": [ + { + "text": "The Basic Theme", + "path": "UI/AspNetCore/Basic-Theme.md" + } + ] }, { "text": "JavaScript API", diff --git a/docs/en/images/example-global-styles.png b/docs/en/images/example-global-styles.png new file mode 100644 index 0000000000000000000000000000000000000000..04232aa62d43d513a516ae85ae459461237ae6f7 GIT binary patch literal 14635 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 ajGy4TMK-bK>)YLrfRvcLXqB*`|NjT#7Dy8S literal 0 HcmV?d00001 From b6761195d08dd11f72e568332e0afe7d86d1c378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 29 Oct 2020 14:48:46 +0300 Subject: [PATCH 040/108] Update Basic-Theme.md --- docs/en/UI/AspNetCore/Basic-Theme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/AspNetCore/Basic-Theme.md b/docs/en/UI/AspNetCore/Basic-Theme.md index 5f28475f43..67977ffd4e 100644 --- a/docs/en/UI/AspNetCore/Basic-Theme.md +++ b/docs/en/UI/AspNetCore/Basic-Theme.md @@ -38,7 +38,7 @@ Application Layout implements the following parts, in addition to the common par ### The Account Layout -![basic-theme-account-layout](D:\Github\abp\docs\en\images\basic-theme-account-layout.png) +![basic-theme-account-layout](../../images/basic-theme-account-layout.png) Application Layout implements the following parts, in addition to the common parts mentioned above; From 51284a2e16b276109c2c911e64917177fea8af55 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Thu, 29 Oct 2020 12:49:14 +0100 Subject: [PATCH 041/108] Removed .editorconfig files from tracking --- framework/.editorconfig | 131 --------------------------------- modules/identity/.editorconfig | 131 --------------------------------- 2 files changed, 262 deletions(-) delete mode 100644 framework/.editorconfig delete mode 100644 modules/identity/.editorconfig diff --git a/framework/.editorconfig b/framework/.editorconfig deleted file mode 100644 index 9f20b90112..0000000000 --- a/framework/.editorconfig +++ /dev/null @@ -1,131 +0,0 @@ -# Rules in this file were initially inferred by Visual Studio IntelliCode from the D:\Projects\Volosoft\abp\framework codebase based on best match to current usage at 2.10.2020. -# You can modify the rules from these initially generated values to suit your own policies -# You can learn more about editorconfig here: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference -[*.cs] - - -#Core editorconfig formatting - indentation - -#use soft tabs (spaces) for indentation -indent_style = space - -#Formatting - indentation options - -#indent switch case contents. -csharp_indent_case_contents = true -#indent switch labels -csharp_indent_switch_labels = true - -#Formatting - new line options - -#place catch statements on a new line -csharp_new_line_before_catch = true -#place else statements on a new line -csharp_new_line_before_else = true -#require members of object intializers to be on separate lines -csharp_new_line_before_members_in_object_initializers = true -#require braces to be on a new line for accessors, methods, lambdas, object_collection_array_initializers, control_blocks, types, and properties (also known as "Allman" style) -csharp_new_line_before_open_brace = accessors, methods, lambdas, object_collection_array_initializers, control_blocks, types, properties - -#Formatting - organize using options - -#sort System.* using directives alphabetically, and place them before other usings -dotnet_sort_system_directives_first = true - -#Formatting - spacing options - -csharp_space_after_cast = false -csharp_space_after_colon_in_inheritance_clause = true -csharp_space_after_comma = true -csharp_space_after_dot = false -csharp_space_after_keywords_in_control_flow_statements = true -csharp_space_after_semicolon_in_for_statement = true -csharp_space_around_binary_operators = before_and_after -csharp_space_around_declaration_statements = false -csharp_space_before_colon_in_inheritance_clause = true -csharp_space_before_comma = false -csharp_space_before_dot = false -csharp_space_before_open_square_brackets = false -csharp_space_before_semicolon_in_for_statement = false -csharp_space_between_empty_square_brackets = false -csharp_space_between_method_call_empty_parameter_list_parentheses = false -csharp_space_between_method_call_name_and_opening_parenthesis = false -csharp_space_between_method_call_parameter_list_parentheses = false -csharp_space_between_method_declaration_empty_parameter_list_parentheses = false -csharp_space_between_method_declaration_name_and_open_parenthesis = false -csharp_space_between_method_declaration_parameter_list_parentheses = false -csharp_space_between_parentheses = false -csharp_space_between_square_brackets = false - -#Formatting - wrapping options - -#leave code block on single line -csharp_preserve_single_line_blocks = true - -#Style - Code block preferences - -#prefer curly braces even for one line of code -csharp_prefer_braces = true:suggestion - -#Style - expression bodied member options - -#prefer block bodies for constructors -csharp_style_expression_bodied_constructors = false:suggestion -#prefer block bodies for methods -csharp_style_expression_bodied_methods = false:suggestion -#prefer expression-bodied members for properties -csharp_style_expression_bodied_properties = true:suggestion - -#Style - expression level options - -#prefer out variables to be declared inline in the argument list of a method call when possible -csharp_style_inlined_variable_declaration = true:suggestion -#prefer the language keyword for member access expressions, instead of the type name, for types that have a keyword to represent them -dotnet_style_predefined_type_for_member_access = true:suggestion - -#Style - Expression-level preferences - -#prefer default over default(T) -csharp_prefer_simple_default_expression = true:suggestion -#prefer objects to be initialized using object initializers when possible -dotnet_style_object_initializer = true:suggestion -#prefer inferred tuple element names -dotnet_style_prefer_inferred_tuple_names = true:suggestion - -#Style - implicit and explicit types - -#prefer var over explicit type in all cases, unless overridden by another code style rule -csharp_style_var_elsewhere = true:suggestion -#prefer var is used to declare variables with built-in system types such as int -csharp_style_var_for_built_in_types = true:suggestion -#prefer var when the type is already mentioned on the right-hand side of a declaration expression -csharp_style_var_when_type_is_apparent = true:suggestion - -#Style - language keyword and framework type options - -#prefer the language keyword for local variables, method parameters, and class members, instead of the type name, for types that have a keyword to represent them -dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion - -#Style - modifier options - -#prefer accessibility modifiers to be declared except for public interface members. This will currently not differ from always and will act as future proofing for if C# adds default interface methods. -dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion - -#Style - Modifier preferences - -#when this rule is set to a list of modifiers, prefer the specified ordering. -csharp_preferred_modifier_order = public,protected,private,virtual,async,static,override,readonly,abstract:suggestion - -#Style - Pattern matching - -#prefer pattern matching instead of is expression with type casts -csharp_style_pattern_matching_over_as_with_null_check = true:suggestion - -#Style - qualification options - -#prefer fields not to be prefaced with this. or Me. in Visual Basic -dotnet_style_qualification_for_field = false:suggestion -#prefer methods not to be prefaced with this. or Me. in Visual Basic -dotnet_style_qualification_for_method = false:suggestion -#prefer properties not to be prefaced with this. or Me. in Visual Basic -dotnet_style_qualification_for_property = false:suggestion diff --git a/modules/identity/.editorconfig b/modules/identity/.editorconfig deleted file mode 100644 index 9f20b90112..0000000000 --- a/modules/identity/.editorconfig +++ /dev/null @@ -1,131 +0,0 @@ -# Rules in this file were initially inferred by Visual Studio IntelliCode from the D:\Projects\Volosoft\abp\framework codebase based on best match to current usage at 2.10.2020. -# You can modify the rules from these initially generated values to suit your own policies -# You can learn more about editorconfig here: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference -[*.cs] - - -#Core editorconfig formatting - indentation - -#use soft tabs (spaces) for indentation -indent_style = space - -#Formatting - indentation options - -#indent switch case contents. -csharp_indent_case_contents = true -#indent switch labels -csharp_indent_switch_labels = true - -#Formatting - new line options - -#place catch statements on a new line -csharp_new_line_before_catch = true -#place else statements on a new line -csharp_new_line_before_else = true -#require members of object intializers to be on separate lines -csharp_new_line_before_members_in_object_initializers = true -#require braces to be on a new line for accessors, methods, lambdas, object_collection_array_initializers, control_blocks, types, and properties (also known as "Allman" style) -csharp_new_line_before_open_brace = accessors, methods, lambdas, object_collection_array_initializers, control_blocks, types, properties - -#Formatting - organize using options - -#sort System.* using directives alphabetically, and place them before other usings -dotnet_sort_system_directives_first = true - -#Formatting - spacing options - -csharp_space_after_cast = false -csharp_space_after_colon_in_inheritance_clause = true -csharp_space_after_comma = true -csharp_space_after_dot = false -csharp_space_after_keywords_in_control_flow_statements = true -csharp_space_after_semicolon_in_for_statement = true -csharp_space_around_binary_operators = before_and_after -csharp_space_around_declaration_statements = false -csharp_space_before_colon_in_inheritance_clause = true -csharp_space_before_comma = false -csharp_space_before_dot = false -csharp_space_before_open_square_brackets = false -csharp_space_before_semicolon_in_for_statement = false -csharp_space_between_empty_square_brackets = false -csharp_space_between_method_call_empty_parameter_list_parentheses = false -csharp_space_between_method_call_name_and_opening_parenthesis = false -csharp_space_between_method_call_parameter_list_parentheses = false -csharp_space_between_method_declaration_empty_parameter_list_parentheses = false -csharp_space_between_method_declaration_name_and_open_parenthesis = false -csharp_space_between_method_declaration_parameter_list_parentheses = false -csharp_space_between_parentheses = false -csharp_space_between_square_brackets = false - -#Formatting - wrapping options - -#leave code block on single line -csharp_preserve_single_line_blocks = true - -#Style - Code block preferences - -#prefer curly braces even for one line of code -csharp_prefer_braces = true:suggestion - -#Style - expression bodied member options - -#prefer block bodies for constructors -csharp_style_expression_bodied_constructors = false:suggestion -#prefer block bodies for methods -csharp_style_expression_bodied_methods = false:suggestion -#prefer expression-bodied members for properties -csharp_style_expression_bodied_properties = true:suggestion - -#Style - expression level options - -#prefer out variables to be declared inline in the argument list of a method call when possible -csharp_style_inlined_variable_declaration = true:suggestion -#prefer the language keyword for member access expressions, instead of the type name, for types that have a keyword to represent them -dotnet_style_predefined_type_for_member_access = true:suggestion - -#Style - Expression-level preferences - -#prefer default over default(T) -csharp_prefer_simple_default_expression = true:suggestion -#prefer objects to be initialized using object initializers when possible -dotnet_style_object_initializer = true:suggestion -#prefer inferred tuple element names -dotnet_style_prefer_inferred_tuple_names = true:suggestion - -#Style - implicit and explicit types - -#prefer var over explicit type in all cases, unless overridden by another code style rule -csharp_style_var_elsewhere = true:suggestion -#prefer var is used to declare variables with built-in system types such as int -csharp_style_var_for_built_in_types = true:suggestion -#prefer var when the type is already mentioned on the right-hand side of a declaration expression -csharp_style_var_when_type_is_apparent = true:suggestion - -#Style - language keyword and framework type options - -#prefer the language keyword for local variables, method parameters, and class members, instead of the type name, for types that have a keyword to represent them -dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion - -#Style - modifier options - -#prefer accessibility modifiers to be declared except for public interface members. This will currently not differ from always and will act as future proofing for if C# adds default interface methods. -dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion - -#Style - Modifier preferences - -#when this rule is set to a list of modifiers, prefer the specified ordering. -csharp_preferred_modifier_order = public,protected,private,virtual,async,static,override,readonly,abstract:suggestion - -#Style - Pattern matching - -#prefer pattern matching instead of is expression with type casts -csharp_style_pattern_matching_over_as_with_null_check = true:suggestion - -#Style - qualification options - -#prefer fields not to be prefaced with this. or Me. in Visual Basic -dotnet_style_qualification_for_field = false:suggestion -#prefer methods not to be prefaced with this. or Me. in Visual Basic -dotnet_style_qualification_for_method = false:suggestion -#prefer properties not to be prefaced with this. or Me. in Visual Basic -dotnet_style_qualification_for_property = false:suggestion From 47224d242f5a3b11d74a9ead60596244c1e32fa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 29 Oct 2020 16:09:18 +0300 Subject: [PATCH 042/108] Documented Toolbars for the aspnet core mvc UI --- docs/en/UI/AspNetCore/Toolbars.md | 73 ++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/docs/en/UI/AspNetCore/Toolbars.md b/docs/en/UI/AspNetCore/Toolbars.md index cc3bcd95be..524ef3f18b 100644 --- a/docs/en/UI/AspNetCore/Toolbars.md +++ b/docs/en/UI/AspNetCore/Toolbars.md @@ -1,3 +1,74 @@ # Toolbars -TODO \ No newline at end of file +The Toolbar system is used to define **toolbars** on the user interface. Modules (or your application) can add **items** to a toolbar, then the [theme](Theming.md) renders the toolbar on the **layout**. + +There is only one **standard toolbar** named "Main" (defined as a constant: `StandardToolbars.Main`). The [Basic Theme](Basic-Theme) renders the main toolbar as shown below: + +![bookstore-toolbar-highlighted](../../images/bookstore-toolbar-highlighted.png) + +In the screenshot above, there are two items added to the main toolbar: Language switch component & user menu. You can add your own items here. + +## Example: Add a Notification Icon + +In this example, we will add a **notification (bell) icon** to the left of the language switch item. A item in the toolbar should be a **view component**. So, first, create a new view component in your project: + +![bookstore-notification-view-component](../../images/bookstore-notification-view-component.png) + +**NotificationViewComponent.cs** + +````csharp +public class NotificationViewComponent : AbpViewComponent +{ + public async Task InvokeAsync() + { + return View("/Pages/Shared/Components/Notification/Default.cshtml"); + } +} +```` + +**Default.cshtml** + +````xml +
+ +
+```` + +Now, we can create a class implementing the `IToolbarContributor` interface: + +````csharp +public class MyToolbarContributor : IToolbarContributor +{ + public Task ConfigureToolbarAsync(IToolbarConfigurationContext context) + { + if (context.Toolbar.Name == StandardToolbars.Main) + { + context.Toolbar.Items + .Insert(0, new ToolbarItem(typeof(NotificationViewComponent))); + } + + return Task.CompletedTask; + } +} +```` + +This class adds the `NotificationViewComponent` as the first item in the `Main` toolbar. + +Finally, you need to add this contributor to the `AbpToolbarOptions`, in the `ConfigureServices` of your [module](../../Module-Development-Basics.md): + +````csharp +Configure(options => +{ + options.Contributors.Add(new MyToolbarContributor()); +}); +```` + +That's all, you will see the notification icon on the toolbar when you run the application: + +![bookstore-notification-icon-on-toolbar](../../images/bookstore-notification-icon-on-toolbar.png) + +`NotificationViewComponent` in this sample simply returns a view without any data. In real life, you probably want to **query database** (or call an HTTP API) to get notifications and pass to the view. If you need, you can add a `JavaScript` or `CSS` file to the global [bundle](Bundling-Minification.md) for your toolbar item. + +## IToolbarManager + +`IToolbarManager` is used to render the toolbar. It returns the toolbar items by a toolbar name. This is generally used by the [themes](Theming.md) to render the toolbar on the layout. \ No newline at end of file From 6b73be814ff0887cf184267416f0d9d54a599e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 29 Oct 2020 16:10:48 +0300 Subject: [PATCH 043/108] Update docs-nav.json --- docs/en/docs-nav.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index c5bc0eeb3a..8b9a889974 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -444,6 +444,10 @@ "text": "Widgets", "path": "UI/AspNetCore/Widgets.md" }, + { + "text": "Toolbars", + "path": "UI/AspNetCore/Toolbars.md" + }, { "text": "Layout Hooks", "path": "UI/AspNetCore/Layout-Hooks.md" From a865f0f8ec9fda67183ef9cbeb81e60926a123a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 29 Oct 2020 17:04:35 +0300 Subject: [PATCH 044/108] Initial ASP.NET Core MVC / Razor Pages: Data Tables document --- docs/en/UI/AspNetCore/Breadcrumbs.md | 2 +- docs/en/UI/AspNetCore/Data-Tables.md | 102 ++++++++++++++++++++++++++ docs/en/docs-nav.json | 4 + docs/en/images/datatables-example.png | Bin 0 -> 49745 bytes 4 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 docs/en/UI/AspNetCore/Data-Tables.md create mode 100644 docs/en/images/datatables-example.png diff --git a/docs/en/UI/AspNetCore/Breadcrumbs.md b/docs/en/UI/AspNetCore/Breadcrumbs.md index cc3bcd95be..6147f71236 100644 --- a/docs/en/UI/AspNetCore/Breadcrumbs.md +++ b/docs/en/UI/AspNetCore/Breadcrumbs.md @@ -1,3 +1,3 @@ -# Toolbars +# Breadcrumbs TODO \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Data-Tables.md b/docs/en/UI/AspNetCore/Data-Tables.md new file mode 100644 index 0000000000..b7c4dd3b43 --- /dev/null +++ b/docs/en/UI/AspNetCore/Data-Tables.md @@ -0,0 +1,102 @@ +# ASP.NET Core MVC / Razor Pages: Data Tables + +A Data Table (aka Data Grid) is a UI component to show tabular data to the users. There are a lot of Data table components/libraries and **you can use any one you like** with the ABP Framework. However, the startup templates come with the [DataTables.Net](https://datatables.net/) library as **pre-installed and configured**. ABP Framework provides adapters for this library and make it easy to use with the API endpoints. + +An example screenshot from the user management page that shows the user list in a data table: + +![datatables-example](../../images/datatables-example.png) + +## DataTables.Net Integration + +First of all, you can follow the official documentation to understand how the [DataTables.Net](https://datatables.net/) works. This section will focus on the ABP addons & integration points rather than fully covering the usage of this library. + +### A Quick Example + +You can follow the [web application development tutorial](https://docs.abp.io/en/abp/latest/Tutorials/Part-1?UI=MVC) for a complete example application that uses the DataTables.Net as the Data Table. This section shows a minimalist example. + +You do nothing to add DataTables.Net library to the page since it is already added to the global [bundle](Bundling-Minification.md) by default. + +First, add an `abp-table` as shown below, with an `id`: + +````html + +```` + +> `abp-table` is a [Tag Helper](Tag-Helpers/Index.md) defined by the ABP Framework, but a simple `` tag would also work. + +Then call the `DataTable` plugin on the table selector: + +````js +var dataTable = $('#BooksTable').DataTable( + abp.libs.datatables.normalizeConfiguration({ + serverSide: true, + paging: true, + order: [[1, "asc"]], + searching: false, + ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), + columnDefs: [ + { + title: l('Actions'), + rowAction: { + items: + [ + { + text: l('Edit'), + action: function (data) { + ///... + } + } + ] + } + }, + { + title: l('Name'), + data: "name" + }, + { + title: l('PublishDate'), + data: "publishDate", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(); + } + }, + { + title: l('Price'), + data: "price" + } + ] + }) +); +```` + +The example code above uses some ABP integration features those will be explained in the next sections. + +### Configuration Normalization + +`abp.libs.datatables.normalizeConfiguration` function takes a DataTables configuration and normalizes to simplify it; + +* Sets `scrollX` option to `true`, if not set. +* Sets `target` index for the column definitions. +* Sets the `language` option to [localize](../../Localization.md) the table in the current language. + +#### Default Configuration + +`normalizeConfiguration` uses the default configuration. You can change the default configuration using the `abp.libs.datatables.defaultConfigurations` object. Example: + +````js +abp.libs.datatables.defaultConfigurations.scrollX = false; +```` + +Here, the all configuration options; + +* `scrollX`: `false` by default. +* `dom`: Default value is `<"dataTable_filters"f>rt<"row dataTable_footer"<"col-auto"l><"col-auto"i><"col"p>>`. +* `language`: A function that returns the localization text using the current language. + +## Other Data Grids + +You can use any library you like. For example, [see this article](https://community.abp.io/articles/using-devextreme-components-with-the-abp-framework-zb8z7yqv) to learn how to use DevExtreme Data Grid in your applications. \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 8b9a889974..978d40a5b5 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -414,6 +414,10 @@ "text": "Modals", "path": "UI/AspNetCore/Modals.md" }, + { + "text": "Data Tables", + "path": "UI/AspNetCore/Data-Tables.md" + }, { "text": "Page Alerts", "path": "UI/AspNetCore/Page-Alerts.md" diff --git a/docs/en/images/datatables-example.png b/docs/en/images/datatables-example.png new file mode 100644 index 0000000000000000000000000000000000000000..ef3e74576b3bd1641981115ec230fb6a06d3361c GIT binary patch literal 49745 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 literal 0 HcmV?d00001 From 871609988053b93885dad63e7146652630ba07cd Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 29 Oct 2020 22:25:59 +0800 Subject: [PATCH 045/108] Use user-defined menus in Blazor's LoginDisplay. Fix #5970 --- .../Themes/Basic/LoginDisplay.razor | 20 +++++--- .../Themes/Basic/LoginDisplay.razor.cs | 21 +++----- .../MyProjectNameBlazorModule.cs | 2 +- .../MyProjectNameMenuContributor.cs | 49 +++++++++++++++++-- 4 files changed, 66 insertions(+), 26 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor index e4767cc031..b76f11ec5f 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor @@ -1,6 +1,8 @@ @using Microsoft.AspNetCore.Components.WebAssembly.Authentication @using Volo.Abp.Users @using Volo.Abp.MultiTenancy +@using Volo.Abp.UI.Navigation +@inject IJSRuntime JsRuntime @inject ICurrentUser CurrentUser @inject ICurrentTenant CurrentTenant @inject NavigationManager Navigation @@ -23,12 +25,9 @@ { @foreach (var menuItem in Menu.Items) { - @menuItem.DisplayName + @menuItem.DisplayName } } - - @UiLocalizer["ManageYourAccount"] - Logout @@ -40,14 +39,21 @@ @code{ - private void NavigateTo(string uri) + private async Task NavigateToAsync(string uri, string target = "_self") { - Navigation.NavigateTo(uri); + if (target == "_blank") + { + await JsRuntime.InvokeVoidAsync("open", uri, "_blank"); + } + else + { + Navigation.NavigateTo(uri); + } } private async Task BeginSignOut() { await SignOutManager.SetSignOutState(); - NavigateTo("authentication/logout"); + await NavigateToAsync("authentication/logout"); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs index 17718dbcfb..c3737bafdb 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs @@ -12,39 +12,32 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic { public partial class LoginDisplay : IDisposable { - [Inject] + [Inject] protected IMenuManager MenuManager { get; set; } - + [Inject] protected IStringLocalizer UiLocalizer { get; set; } - + [Inject] protected IOptions RemoteServiceOptions { get; set; } - - protected ApplicationMenu Menu { get; set; } - protected string ServerUrl { get; set; } - protected string ServerAccountUrl { get; set; } + protected ApplicationMenu Menu { get; set; } protected override async Task OnInitializedAsync() { Menu = await MenuManager.GetAsync(StandardMenus.User); - - ServerUrl = RemoteServiceOptions.Value.RemoteServices.Default?.BaseUrl?.TrimEnd('/'); - ServerAccountUrl = ServerUrl + "/Account/Manage?returnUrl=" + Navigation.Uri; - + Navigation.LocationChanged += OnLocationChanged; } protected virtual void OnLocationChanged(object sender, LocationChangedEventArgs e) { - ServerAccountUrl = ServerUrl + "/Account/Manage?returnUrl=" + Navigation.Uri; StateHasChanged(); } - + public void Dispose() { Navigation.LocationChanged -= OnLocationChanged; } } -} \ No newline at end of file +} diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs index 8097475d64..f93193670b 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs @@ -55,7 +55,7 @@ namespace MyCompanyName.MyProjectName.Blazor { Configure(options => { - options.MenuContributors.Add(new MyProjectNameMenuContributor()); + options.MenuContributors.Add(new MyProjectNameMenuContributor(context.Services.GetConfiguration())); }); } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameMenuContributor.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameMenuContributor.cs index 9dda814d93..003d882da6 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameMenuContributor.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameMenuContributor.cs @@ -1,18 +1,37 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; using MyCompanyName.MyProjectName.Localization; +using Volo.Abp.Account.Localization; using Volo.Abp.UI.Navigation; +using Volo.Abp.Users; namespace MyCompanyName.MyProjectName.Blazor { public class MyProjectNameMenuContributor : IMenuContributor { - public Task ConfigureMenuAsync(MenuConfigurationContext context) + private readonly IConfiguration _configuration; + + public MyProjectNameMenuContributor(IConfiguration configuration) { - if(context.Menu.DisplayName != StandardMenus.Main) + _configuration = configuration; + } + + public async Task ConfigureMenuAsync(MenuConfigurationContext context) + { + if (context.Menu.Name == StandardMenus.Main) { - return Task.CompletedTask; + await ConfigureMainMenuAsync(context); } + else if (context.Menu.Name == StandardMenus.User) + { + await ConfigureUserMenuAsync(context); + } + } + private Task ConfigureMainMenuAsync(MenuConfigurationContext context) + { var l = context.GetLocalizer(); context.Menu.Items.Insert( @@ -27,5 +46,27 @@ namespace MyCompanyName.MyProjectName.Blazor return Task.CompletedTask; } + + private Task ConfigureUserMenuAsync(MenuConfigurationContext context) + { + var accountStringLocalizer = context.GetLocalizer(); + var currentUser = context.ServiceProvider.GetRequiredService(); + + var identityServerUrl = _configuration["AuthServer:Authority"] ?? ""; + + if (currentUser.IsAuthenticated) + { + context.Menu.AddItem(new ApplicationMenuItem( + "Account.Manage", + accountStringLocalizer["ManageYourProfile"], + $"{identityServerUrl.EnsureEndsWith('/')}Account/Manage", + icon: "fa fa-cog", + order: 1000, + null, + "_blank")); + } + + return Task.CompletedTask; + } } } From 8a143af6287424e4662295da545d4f23fa79c6c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 29 Oct 2020 17:44:56 +0300 Subject: [PATCH 046/108] Documented the Row Actions --- docs/en/UI/AspNetCore/Data-Tables.md | 78 ++++++++++++++++++ .../datatables-row-actions-confirmation.png | Bin 0 -> 42410 bytes docs/en/images/datatables-row-actions.png | Bin 0 -> 19872 bytes 3 files changed, 78 insertions(+) create mode 100644 docs/en/images/datatables-row-actions-confirmation.png create mode 100644 docs/en/images/datatables-row-actions.png diff --git a/docs/en/UI/AspNetCore/Data-Tables.md b/docs/en/UI/AspNetCore/Data-Tables.md index b7c4dd3b43..023c61ad87 100644 --- a/docs/en/UI/AspNetCore/Data-Tables.md +++ b/docs/en/UI/AspNetCore/Data-Tables.md @@ -97,6 +97,84 @@ Here, the all configuration options; * `dom`: Default value is `<"dataTable_filters"f>rt<"row dataTable_footer"<"col-auto"l><"col-auto"i><"col"p>>`. * `language`: A function that returns the localization text using the current language. +### Row Actions + +`rowAction` is an option defined by the ABP Framework to the column definitions to show a drop down button to take actions for a row in the table. + +The example screenshot below shows the actions for each user in the user management table: + +![datatables-example](../../images/datatables-row-actions.png) + +`rowAction` is defined as a part of a column definition: + +````csharp +{ + title: l('Actions'), + rowAction: { + //TODO: CONFIGURATION + } +}, +```` + +**Example: Show *Edit* and *Delete* actions for a book row** + +````js +{ + title: l('Actions'), + rowAction: { + items: + [ + { + text: l('Edit'), + action: function (data) { + //TODO: Open a modal to edit the book + } + }, + { + text: l('Delete'), + confirmMessage: function (data) { + return "Are you sure to delete the book " + data.record.name; + }, + action: function (data) { + acme.bookStore.books.book + .delete(data.record.id) + .then(function() { + abp.notify.info("Successfully deleted!"); + data.table.ajax.reload(); + }); + } + } + ] + } +}, +```` + +#### Action Items + +`items` is an array of action definitions. An action definition can have the following options; + +* `text`: The text (a `string`) for this action to be shown in the actions drop down. +* `action`: A `function` that is executed when the user clicks to the action. The function takes a `data` argument that has the following fields; + * `data.record`: This is the data object related to the row. You can access the data fields like `data.record.id`, `data.record.name`... etc. + * `data.table`: The DataTables instance. +* `confirmMessage`: A function (see the example above) that returns a message (`string`) to show a dialog to get a confirmation from the user before executing the `action`. Example confirmation dialog: + +![datatables-row-actions-confirmation](D:\Github\abp\docs\en\images\datatables-row-actions-confirmation.png) + +You can use the [localization](JavaScript-API/Localization.md) system to show a localized message. + +* `visible`: A `bool` or a `function` that returns a `bool`. If the result is `false`, then the action is not shown in the actions dropdown. This is generally combined by the [authorization](JavaScript-API/Auth.md) system to hide the action if the user has no permission to take this action. Example: + +````js +visible: abp.auth.isGranted('BookStore.Books.Delete'); +```` + +If you define a `function`, then the `function` has two arguments: `record` (the data object of the related row) and the `table` (the DataTable instance). So, you can decide to show/hide the action dynamically, based on the row data and other conditions. + +* `iconClass`: Can be used to show a font-icon, like a [Font-Awesome](https://fontawesome.com/) icon (ex: `fas fa-trash-alt`), near to the action text. +* `enabled`: A `function` that returns a `bool` to disable the action. The `function` takes a `data` object with two fields: `data.record` is the data object related to the row and `data.table` is the DataTables instance. +* `displayNameHtml`: An alternative to use `text` and/or `icon`. You can directly set an HTML content as the display name of the action. + ## Other Data Grids You can use any library you like. For example, [see this article](https://community.abp.io/articles/using-devextreme-components-with-the-abp-framework-zb8z7yqv) to learn how to use DevExtreme Data Grid in your applications. \ No newline at end of file diff --git a/docs/en/images/datatables-row-actions-confirmation.png b/docs/en/images/datatables-row-actions-confirmation.png new file mode 100644 index 0000000000000000000000000000000000000000..9be8433f9c451c60c4fd6993d33cc3f261aae01c GIT binary patch literal 42410 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 literal 0 HcmV?d00001 diff --git a/docs/en/images/datatables-row-actions.png b/docs/en/images/datatables-row-actions.png new file mode 100644 index 0000000000000000000000000000000000000000..4eae0f098af1fd42fb44b0f803c31f695b76d347 GIT binary patch literal 19872 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 Date: Thu, 29 Oct 2020 19:36:08 +0300 Subject: [PATCH 047/108] Update Data-Tables.md --- docs/en/UI/AspNetCore/Data-Tables.md | 11 +++++++---- docs/en/images/datatables-row-actions-icon.png | Bin 0 -> 12576 bytes 2 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 docs/en/images/datatables-row-actions-icon.png diff --git a/docs/en/UI/AspNetCore/Data-Tables.md b/docs/en/UI/AspNetCore/Data-Tables.md index 023c61ad87..f21d69fe51 100644 --- a/docs/en/UI/AspNetCore/Data-Tables.md +++ b/docs/en/UI/AspNetCore/Data-Tables.md @@ -157,9 +157,9 @@ The example screenshot below shows the actions for each user in the user managem * `action`: A `function` that is executed when the user clicks to the action. The function takes a `data` argument that has the following fields; * `data.record`: This is the data object related to the row. You can access the data fields like `data.record.id`, `data.record.name`... etc. * `data.table`: The DataTables instance. -* `confirmMessage`: A function (see the example above) that returns a message (`string`) to show a dialog to get a confirmation from the user before executing the `action`. Example confirmation dialog: +* `confirmMessage`: A `function` (see the example above) that returns a message (`string`) to show a dialog to get a confirmation from the user before executing the `action`. Example confirmation dialog: -![datatables-row-actions-confirmation](D:\Github\abp\docs\en\images\datatables-row-actions-confirmation.png) +![datatables-row-actions-confirmation](../../images/datatables-row-actions-confirmation.png) You can use the [localization](JavaScript-API/Localization.md) system to show a localized message. @@ -171,9 +171,12 @@ visible: abp.auth.isGranted('BookStore.Books.Delete'); If you define a `function`, then the `function` has two arguments: `record` (the data object of the related row) and the `table` (the DataTable instance). So, you can decide to show/hide the action dynamically, based on the row data and other conditions. -* `iconClass`: Can be used to show a font-icon, like a [Font-Awesome](https://fontawesome.com/) icon (ex: `fas fa-trash-alt`), near to the action text. +* `iconClass`: Can be used to show a font-icon, like a [Font-Awesome](https://fontawesome.com/) icon (ex: `fas fa-trash-alt`), near to the action text. Example screenshot: + +![datatables-row-actions-confirmation](../../images/datatables-row-actions-icon.png) + * `enabled`: A `function` that returns a `bool` to disable the action. The `function` takes a `data` object with two fields: `data.record` is the data object related to the row and `data.table` is the DataTables instance. -* `displayNameHtml`: An alternative to use `text` and/or `icon`. You can directly set an HTML content as the display name of the action. +* `displayNameHtml`: Set this to `true` is the `text` value contains HTML tags. ## Other Data Grids diff --git a/docs/en/images/datatables-row-actions-icon.png b/docs/en/images/datatables-row-actions-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..70111fc1ac181302c0d2ca3d8fd2e147b0c7895c GIT binary patch literal 12576 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 Dx0h|f literal 0 HcmV?d00001 From e1c754386992efc54a905fdff5c70ae45b9cb577 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 29 Oct 2020 20:21:49 +0300 Subject: [PATCH 048/108] Resolved #3300: Completed the datatables document. --- docs/en/UI/AspNetCore/Data-Tables.md | 80 ++++++++++++++++++ .../images/datatables-custom-render-date.png | Bin 0 -> 12093 bytes .../images/datatables-default-render-date.png | Bin 0 -> 16046 bytes 3 files changed, 80 insertions(+) create mode 100644 docs/en/images/datatables-custom-render-date.png create mode 100644 docs/en/images/datatables-default-render-date.png diff --git a/docs/en/UI/AspNetCore/Data-Tables.md b/docs/en/UI/AspNetCore/Data-Tables.md index f21d69fe51..79fd6a3be1 100644 --- a/docs/en/UI/AspNetCore/Data-Tables.md +++ b/docs/en/UI/AspNetCore/Data-Tables.md @@ -97,6 +97,14 @@ Here, the all configuration options; * `dom`: Default value is `<"dataTable_filters"f>rt<"row dataTable_footer"<"col-auto"l><"col-auto"i><"col"p>>`. * `language`: A function that returns the localization text using the current language. +### AJAX Adapter + +DataTables.Net has its own expected data format while getting results of an AJAX call to the server to get the table data. They are especially related how paging and sorting parameters are sent and received. ABP Framework also offers its own conventions for the client-server [AJAX](JavaScript-API/Ajax.md) communication. + +The `abp.libs.datatables.createAjax` method (used in the example above) adapts request and response data format and perfectly works with the [Dynamic JavaScript Client Proxy](Dynamic-JavaScript-Client-Proxies.md) system. + +This works automatically, so most of the times you don't need to know how it works. See the [DTO document](../../Data-Transfer-Objects.md) if you want to learn more about `IPagedAndSortedResultRequest`, `IPagedResult` and other standard interfaces and base DTO classes those are used in client to server communication. + ### Row Actions `rowAction` is an option defined by the ABP Framework to the column definitions to show a drop down button to take actions for a row in the table. @@ -178,6 +186,78 @@ If you define a `function`, then the `function` has two arguments: `record` (the * `enabled`: A `function` that returns a `bool` to disable the action. The `function` takes a `data` object with two fields: `data.record` is the data object related to the row and `data.table` is the DataTables instance. * `displayNameHtml`: Set this to `true` is the `text` value contains HTML tags. +There are some rules with the action items; + +* If none of the action items is visible then the actions column is not rendered. + +### Data Format + +#### The Problem + +See the *Creation Time* column in the example below: + +````js +{ + title: l('CreationTime'), + data: "creationTime", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(luxon.DateTime.DATETIME_SHORT); + } +} +```` + +The `render` is a standard DataTables option to render the column content by a custom function. This example uses the [luxon](https://moment.github.io/luxon/) library (which is installed by default) to write a human readable value of the `creationTime` in the current user's language. Example output of the column: + +![datatables-custom-render-date](../../images/datatables-custom-render-date.png) + +If you don't define the render option, then the result will be ugly and not user friendly: + +![datatables-custom-render-date](../../images/datatables-default-render-date.png) + +However, rendering a `DateTime` is almost same and repeating the same rendering logic everywhere is against to the DRY (Don't Repeat Yourself!) principle. + +#### dataFormat Option + +`dataFormat` column option specifies the data format that is used to render the column data. The same output could be accomplished using the following column definition: + +````js +{ + title: l('CreationTime'), + data: "creationTime", + dataFormat: 'datetime' +} +```` + +`dataFormat: 'datetime'` specifies the data format for this column. There are a few pre-defined `dataFormat`s: + +* `boolean`: Shows a `check` icon for `true` and `times` icon for `false` value and useful to render `bool` values. +* `date`: Shows date part of a `DateTime` value, formatted based on the current culture. +* `datetime`: Shows date & time (excluding seconds) of a `DateTime` value, formatted based on the current culture. + +### Default Renderers + +`abp.libs.datatables.defaultRenderers` option allows you to define new data formats and set renderers for them. + +**Example: Render male / female icons based on the gender** + +````js +abp.libs.datatables.defaultRenderers['gender'] = function(value) { + if (value === 'f') { + return ''; + } else { + return ''; + } +}; +```` + +Assuming that the possible values for a column data is `f` and `m`, the `gender` data format shows female/male icons instead of `f` and `m` texts. You can now set `dataFormat: 'gender'` for a column definition that has the proper data values. + +> You can write the default renderers in a single JavaScript file and add it to the [Global Script Bundle](Bundling-Minification.md), so you can reuse them in all the pages. + ## Other Data Grids You can use any library you like. For example, [see this article](https://community.abp.io/articles/using-devextreme-components-with-the-abp-framework-zb8z7yqv) to learn how to use DevExtreme Data Grid in your applications. \ No newline at end of file diff --git a/docs/en/images/datatables-custom-render-date.png b/docs/en/images/datatables-custom-render-date.png new file mode 100644 index 0000000000000000000000000000000000000000..344237aea7f85b1c6d385727b0baa553bd317107 GIT binary patch literal 12093 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 aAntK{`mOOCg*k_gB`c)_D*I^s{r>_iq>4iT literal 0 HcmV?d00001 From 65048eb45531d934e0f9562eb15511bd583ab528 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 29 Oct 2020 21:46:52 +0300 Subject: [PATCH 049/108] Added Page Header document --- docs/en/UI/AspNetCore/Branding.md | 3 ++ docs/en/UI/AspNetCore/Breadcrumbs.md | 3 -- docs/en/UI/AspNetCore/Layout-Hooks.md | 2 +- docs/en/UI/AspNetCore/Navigation-Menu.md | 2 +- docs/en/UI/AspNetCore/Page-Header.md | 58 ++++++++++++++++++++++++ docs/en/UI/AspNetCore/Theming.md | 2 + docs/en/docs-nav.json | 4 ++ 7 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 docs/en/UI/AspNetCore/Branding.md delete mode 100644 docs/en/UI/AspNetCore/Breadcrumbs.md create mode 100644 docs/en/UI/AspNetCore/Page-Header.md diff --git a/docs/en/UI/AspNetCore/Branding.md b/docs/en/UI/AspNetCore/Branding.md new file mode 100644 index 0000000000..b262c13d46 --- /dev/null +++ b/docs/en/UI/AspNetCore/Branding.md @@ -0,0 +1,3 @@ +# ASP.NET Core MVC / Razor Pages: Branding + +TODO \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Breadcrumbs.md b/docs/en/UI/AspNetCore/Breadcrumbs.md deleted file mode 100644 index 6147f71236..0000000000 --- a/docs/en/UI/AspNetCore/Breadcrumbs.md +++ /dev/null @@ -1,3 +0,0 @@ -# Breadcrumbs - -TODO \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Layout-Hooks.md b/docs/en/UI/AspNetCore/Layout-Hooks.md index 7039749142..168454a7c2 100644 --- a/docs/en/UI/AspNetCore/Layout-Hooks.md +++ b/docs/en/UI/AspNetCore/Layout-Hooks.md @@ -1,4 +1,4 @@ -# ASP.NET Core MVC / Razor Pages Layout Hooks +# ASP.NET Core MVC / Razor Pages: Layout Hooks ABP Framework theming system places the page layout into the [theme](Theming.md) NuGet packages. That means the final application doesn't include a `Layout.cshtml`, so you can't directly change the layout code to customize it. diff --git a/docs/en/UI/AspNetCore/Navigation-Menu.md b/docs/en/UI/AspNetCore/Navigation-Menu.md index ddbfbbd857..13a6e1678c 100644 --- a/docs/en/UI/AspNetCore/Navigation-Menu.md +++ b/docs/en/UI/AspNetCore/Navigation-Menu.md @@ -83,7 +83,7 @@ Here, a few notes on the menu contributors; There are more options of a menu item (the constructor of the `ApplicationMenuItem` class). Here, the list of all available options; -* `name` (`string`, required): The unique name of the menu item. +* `name` (`string`, required): The **unique name** of the menu item. * `displayName` (`string`, required): Display name/text of the menu item. You can [localize](../../Localization.md) this as shown before. * `url` (`string`): The URL of the menu item. * `icon` (`string`): An icon name. Free [Font Awesome](https://fontawesome.com/) icon classes are supported out of the box. Example: `fa fa-book`. You can use any CSS font icon class as long as you include the necessary CSS files to your application. diff --git a/docs/en/UI/AspNetCore/Page-Header.md b/docs/en/UI/AspNetCore/Page-Header.md new file mode 100644 index 0000000000..f6ec3074de --- /dev/null +++ b/docs/en/UI/AspNetCore/Page-Header.md @@ -0,0 +1,58 @@ +# ASP.NET Core MVC / Razor Pages: Page Header + +`IPageLayout` service can be used to set the page title, selected menu item and the breadcrumb items for a page. It's the [theme](Theming.md)'s responsibility to render these on the page. + +## IPageLayout + +`IPageLayout` can be injected in any page/view to set the page header properties. + +### Page Title + +Page Title can be set as shown in the example below: + +````csharp +@inject IPageLayout PageLayout +@{ + PageLayout.Content.Title = "Book List"; +} +```` + +* The Page Title is set to the HTML `title` tag (in addition to the [brand/application name](Branding.md)). +* The theme may render the Page Title before the Page Content (not implemented by the Basic Theme). + +### Breadcrumb + +> **The [Basic Theme](Basic-Theme.md) currently doesn't implement the breadcrumbs.** + +Breadcrumb items can be added to the `PageLayout.Content.BreadCrumb`. + +**Example: Add Language Management to the breadcrumb items.** + +```` +PageLayout.Content.BreadCrumb.Add("Language Management"); +```` + +The theme then renders the breadcrumb. An example render result can be: + +![breadcrumbs-example](../../images/breadcrumbs-example.png) + +* The Home icon is rendered by default. Set `PageLayout.Content.BreadCrumb.ShowHome` to `false` to hide it. +* Current Page name (got from the `PageLayout.Content.Title`) is added as the last by default. Set `PageLayout.Content.BreadCrumb.ShowCurrent` to `false` to hide it. + +Any item that you add is inserted between Home and Current Page items. You can add as many item as you need. `BreadCrumb.Add(...)` method gets three parameters: + +* `text`: The text to show for the breadcrumb item. +* `url` (optional): A URL to navigate to, if the user clicks to the breadcrumb item. +* `icon` (optional): An icon class (like `fas fa-user-tie` for Font-Awesome) to show with the `text`. + +### The Selected Menu Item + +> **The [Basic Theme](Basic-Theme.md) currently doesn't implement the selected menu item since it is not applicable to the top menu which is the only option for the Basic Theme for now.** + +You can set the Menu Item name related to this page: + +````csharp +PageLayout.Content.MenuItemName = "BookStore.Books"; +```` + +Menu item name should match a unique menu item name defined using the [Navigation / Menu](Navigation-Menu.md) system. In this case, it is expected from the theme to make the menu item "active" in the main menu. \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Theming.md b/docs/en/UI/AspNetCore/Theming.md index 69e6b33769..8c680973b8 100644 --- a/docs/en/UI/AspNetCore/Theming.md +++ b/docs/en/UI/AspNetCore/Theming.md @@ -406,6 +406,8 @@ The Basic Theme doesn't implement this service, but the Lepton Theme implements: ![breadcrumbs-example](../../images/breadcrumbs-example.png) +See the [Page Header](Page-Header.md) document for more. + #### Tenant Switch The Account Layout should allow the user to switch the current tenant if the application is multi-tenant and the tenant was resolved from the cookies. See the [Basic Theme Account Layout](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Account.cshtml) as an example implementation. diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 978d40a5b5..536c5d9a03 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -452,6 +452,10 @@ "text": "Toolbars", "path": "UI/AspNetCore/Toolbars.md" }, + { + "text": "Page Header", + "path": "UI/AspNetCore/Page-Header.md" + }, { "text": "Layout Hooks", "path": "UI/AspNetCore/Layout-Hooks.md" From 0b35024e533bd97bd8c764ab31052ed7f82b7731 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 30 Oct 2020 11:08:01 +0300 Subject: [PATCH 050/108] Documented ASP.NET Core MVC / Razor Pages: Branding --- docs/en/UI/AspNetCore/Branding.md | 44 +++++++++++++++++- .../Customization-User-Interface.md | 4 +- docs/en/docs-nav.json | 4 ++ docs/en/images/branding-appname.png | Bin 0 -> 28099 bytes docs/en/images/branding-nobrand.png | Bin 0 -> 33490 bytes 5 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 docs/en/images/branding-appname.png create mode 100644 docs/en/images/branding-nobrand.png diff --git a/docs/en/UI/AspNetCore/Branding.md b/docs/en/UI/AspNetCore/Branding.md index b262c13d46..ee19cd5845 100644 --- a/docs/en/UI/AspNetCore/Branding.md +++ b/docs/en/UI/AspNetCore/Branding.md @@ -1,3 +1,45 @@ # ASP.NET Core MVC / Razor Pages: Branding -TODO \ No newline at end of file +## IBrandingProvider + +`IBrandingProvider` is a simple interface that is used to show the application name and logo on the layout. + +The screenshot below shows *MyProject* as the application name: + +![branding-nobrand](../../images/branding-nobrand.png) + +You can implement the `IBrandingProvider` interface or inherit from the `DefaultBrandingProvider` to set the application name: + +````csharp +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Components; +using Volo.Abp.DependencyInjection; + +namespace MyProject.Web +{ + [Dependency(ReplaceServices = true)] + public class MyProjectBrandingProvider : DefaultBrandingProvider + { + public override string AppName => "Book Store"; + } +} +```` + +The result will be like shown below: + +![branding-appname](../../images/branding-appname.png) + +`IBrandingProvider` has the following properties: + +* `AppName`: The application name. +* `LogoUrl`: A URL to show the application logo. +* `LogoReverseUrl`: A URL to show the application logo on a reverse color theme (dark, for example). + +> **Tip**: `IBrandingProvider` is used in every page refresh. For a multi-tenant application, you can return a tenant specific application name to customize it per tenant. + +## Overriding the Branding Area + +The [Basic Theme](Basic-Theme.md) doesn't implement the logos. However, you can see the [UI Customization Guide](Customization-User-Interface.md) to learn how you can replace the branding area with a custom view component. + +An example screenshot with an image is used in the branding area: + +![bookstore-added-logo](../../images/bookstore-added-logo.png) \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Customization-User-Interface.md b/docs/en/UI/AspNetCore/Customization-User-Interface.md index d2a1193a53..ccb832ccc7 100644 --- a/docs/en/UI/AspNetCore/Customization-User-Interface.md +++ b/docs/en/UI/AspNetCore/Customization-User-Interface.md @@ -128,11 +128,11 @@ The ABP Framework, pre-built themes and modules define some **re-usable view com ### Example -The screenshot below was taken from the **basic theme** comes with the application startup template. +The screenshot below was taken from the [Basic Theme](Basic-Theme.md) comes with the application startup template. ![bookstore-brand-area-highlighted](../../images/bookstore-brand-area-highlighted.png) -[The basic theme](Basic-Theme.md) defines some view components for the layout. For example, the highlighted area with the red rectangle above is called **Brand component**. You probably want to customize this component by adding your **own application logo**. Let's see how to do it. +The [Basic Theme](Basic-Theme.md) defines some view components for the layout. For example, the highlighted area with the red rectangle above is called **Brand component**. You probably want to customize this component by adding your **own application logo**. Let's see how to do it. First, create your logo and place under a folder in your web application. We used `wwwroot/logos/bookstore-logo.png` path. Then copy the Brand component's view ([from here](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Brand/Default.cshtml)) from the basic theme files under the `Themes/Basic/Components/Brand` folder. The result should be similar the picture below: diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 536c5d9a03..f292226ae3 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -456,6 +456,10 @@ "text": "Page Header", "path": "UI/AspNetCore/Page-Header.md" }, + { + "text": "Branding", + "path": "UI/AspNetCore/Branding.md" + }, { "text": "Layout Hooks", "path": "UI/AspNetCore/Layout-Hooks.md" diff --git a/docs/en/images/branding-appname.png b/docs/en/images/branding-appname.png new file mode 100644 index 0000000000000000000000000000000000000000..9300ad2c7fe5255566d119320fd2fdb8d3b9382b GIT binary patch literal 28099 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 Kq~gxQ=l=mZkMnT= literal 0 HcmV?d00001 diff --git a/docs/en/images/branding-nobrand.png b/docs/en/images/branding-nobrand.png new file mode 100644 index 0000000000000000000000000000000000000000..1fdf78472be43e956b21609f1417d9a6750116ad GIT binary patch literal 33490 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%0A!}VA^ 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 literal 0 HcmV?d00001 From a8799bd6eb4a368d9edb2ce80622756d8812e578 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 30 Oct 2020 11:28:28 +0300 Subject: [PATCH 051/108] Account Blazor refactored Added AccountComponentBase: #5961 Replace Abstract Base: #5962 --- .../AbpAccountComponentBase.cs | 14 ++++++++++++++ .../{Manage.razor => AccountManage.razor} | 10 ++++++---- .../{Manage.razor.cs => AccountManage.razor.cs} | 17 +++-------------- .../Volo.Abp.Account.Blazor.csproj | 2 +- 4 files changed, 24 insertions(+), 19 deletions(-) create mode 100644 modules/account/src/Volo.Abp.Account.Blazor/AbpAccountComponentBase.cs rename modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/{Manage.razor => AccountManage.razor} (88%) rename modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/{Manage.razor.cs => AccountManage.razor.cs} (82%) diff --git a/modules/account/src/Volo.Abp.Account.Blazor/AbpAccountComponentBase.cs b/modules/account/src/Volo.Abp.Account.Blazor/AbpAccountComponentBase.cs new file mode 100644 index 0000000000..61e3890ffd --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Blazor/AbpAccountComponentBase.cs @@ -0,0 +1,14 @@ +using Volo.Abp.Account.Localization; +using Volo.Abp.AspNetCore.Components; + +namespace Volo.Abp.Account.Blazor +{ + public class AbpAccountComponentBase : AbpComponentBase + { + public AbpAccountComponentBase() + { + LocalizationResource = typeof(AccountResource); + ObjectMapperContext = typeof(AbpAccountBlazorModule); + } + } +} diff --git a/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/Manage.razor b/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/AccountManage.razor similarity index 88% rename from modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/Manage.razor rename to modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/AccountManage.razor index 3e101b38a4..e31cd25080 100644 --- a/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/Manage.razor +++ b/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/AccountManage.razor @@ -1,5 +1,7 @@ @page "/account/manage-profile" -@inherits AccountManageBase +@using Microsoft.AspNetCore.Components.Forms +@inherits AbpAccountComponentBase + @@ -14,15 +16,15 @@ @L["DisplayName:CurrentPassword"] - + @L["DisplayName:NewPassword"] - + @L["DisplayName:NewPasswordConfirm"] - + diff --git a/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/Manage.razor.cs b/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/AccountManage.razor.cs similarity index 82% rename from modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/Manage.razor.cs rename to modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/AccountManage.razor.cs index 7dfee0da53..63539db7f9 100644 --- a/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/Manage.razor.cs +++ b/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/AccountManage.razor.cs @@ -1,33 +1,22 @@ using System.Threading.Tasks; -using Localization.Resources.AbpUi; using Microsoft.AspNetCore.Components; -using Microsoft.Extensions.Localization; -using Volo.Abp.Account.Localization; using Volo.Abp.AspNetCore.Components.WebAssembly; using Volo.Abp.Identity; -using Volo.Abp.ObjectMapping; namespace Volo.Abp.Account.Blazor.Pages.Account { - public abstract class AccountManageBase : OwningComponentBase + public partial class AccountManage { - [Inject] protected IAccountAppService AccountAppService { get; set; } [Inject] protected IProfileAppService ProfileAppService { get; set; } - - [Inject] protected IObjectMapper ObjectMapper { get; set; } - + [Inject] protected IUiMessageService UiMessageService { get; set; } - [Inject] protected IStringLocalizer UiLocalizer { get; set; } - - [Inject] protected IStringLocalizer L { get; set; } - protected string SelectedTab = "Password"; protected ChangePasswordModel ChangePasswordModel; protected PersonalInfoModel PersonalInfoModel; - + protected override async Task OnInitializedAsync() { await GetUserInformations(); diff --git a/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.csproj b/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.csproj index 84d4e4a7f4..64633f0d25 100644 --- a/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.csproj +++ b/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.csproj @@ -18,7 +18,7 @@ - + true From e3bfda349280ae44e23a65e751562561645a9736 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 30 Oct 2020 11:34:15 +0300 Subject: [PATCH 052/108] FeatureManagement Blazor Refactored Added FeatureManagementComponentBase: #5961 --- .../AbpFeatureManagementComponentBase.cs | 13 +++++++++++++ .../Components/FeatureManagementModal.razor | 3 +++ .../Components/FeatureManagementModal.razor.cs | 2 -- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/AbpFeatureManagementComponentBase.cs diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/AbpFeatureManagementComponentBase.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/AbpFeatureManagementComponentBase.cs new file mode 100644 index 0000000000..dac2254ed0 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/AbpFeatureManagementComponentBase.cs @@ -0,0 +1,13 @@ +using Volo.Abp.AspNetCore.Components; +using Volo.Abp.FeatureManagement.Localization; + +namespace Volo.Abp.FeatureManagement.Blazor +{ + public class AbpFeatureManagementComponentBase : AbpComponentBase + { + public AbpFeatureManagementComponentBase() + { + LocalizationResource = typeof(AbpFeatureManagementResource); + } + } +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor index 90d2539841..5edd635564 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor @@ -1,5 +1,8 @@ @using Volo.Abp.Validation.StringValues @using Microsoft.Extensions.Localization +@using Microsoft.AspNetCore.Components.Forms + +@inherits AbpFeatureManagementComponentBase diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs index aed44df8bc..c91b7f3892 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs @@ -20,8 +20,6 @@ namespace Volo.Abp.FeatureManagement.Blazor.Components [Inject] protected IUiMessageService UiMessageService { get; set; } - [Inject] protected IStringLocalizer L { get; set; } - [Inject] protected IStringLocalizerFactory HtmlLocalizerFactory { get; set; } [Inject] protected IOptions LocalizationOptions { get; set; } From ed61188ec81622bc303c3fd1ccc0911a059ff527 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 30 Oct 2020 11:35:08 +0300 Subject: [PATCH 053/108] Update AccountManage.razor --- .../Pages/Account/AccountManage.razor | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/AccountManage.razor b/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/AccountManage.razor index e31cd25080..a6edb30a64 100644 --- a/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/AccountManage.razor +++ b/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/AccountManage.razor @@ -16,15 +16,15 @@ @L["DisplayName:CurrentPassword"] - + @L["DisplayName:NewPassword"] - + @L["DisplayName:NewPasswordConfirm"] - + @@ -38,25 +38,25 @@ @L["DisplayName:UserName"] - + @L["DisplayName:Name"] - + @L["DisplayName:Surname"] - + @L["DisplayName:Email"] - + @L["DisplayName:PhoneNumber"] - + From 7c52485c32090222c7b16e1dac8b07b5b18524cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 30 Oct 2020 11:50:29 +0300 Subject: [PATCH 054/108] Added Dynamic JavaScript API Client Proxies document --- docs/en/API/Dynamic-CSharp-API-Clients.md | 2 +- .../AspNetCore/Dynamic-JavaScript-Proxies.md | 92 ++++++++++++++++++- docs/en/docs-nav.json | 4 + 3 files changed, 95 insertions(+), 3 deletions(-) diff --git a/docs/en/API/Dynamic-CSharp-API-Clients.md b/docs/en/API/Dynamic-CSharp-API-Clients.md index 23ec336acf..d92846f5e8 100644 --- a/docs/en/API/Dynamic-CSharp-API-Clients.md +++ b/docs/en/API/Dynamic-CSharp-API-Clients.md @@ -1,4 +1,4 @@ -# Dynamic C# API Clients +# Dynamic C# API Client Proxies ABP can dynamically create C# API client proxies to call remote HTTP services (REST APIs). In this way, you don't need to deal with `HttpClient` and other low level HTTP features to call remote services and get results. diff --git a/docs/en/UI/AspNetCore/Dynamic-JavaScript-Proxies.md b/docs/en/UI/AspNetCore/Dynamic-JavaScript-Proxies.md index 391a63a910..3464d4bc68 100644 --- a/docs/en/UI/AspNetCore/Dynamic-JavaScript-Proxies.md +++ b/docs/en/UI/AspNetCore/Dynamic-JavaScript-Proxies.md @@ -1,3 +1,91 @@ -# Dynamic JavaScript HTTP API Proxies +# Dynamic JavaScript API Client Proxies -TODO \ No newline at end of file +It is typical to consume your HTTP APIs from your JavaScript code. To do that, you normally deal with low level AJAX calls, like $.ajax, or better [abp.ajax](JavaScript-API/Ajax.md). ABP Framework provides **a better way** to call your HTTP APIs from your JavaScript code: Dynamic JavaScript API Client Proxies! + +## A Quick Example + +Assume that you have an application service defined as shown below: + +````csharp +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; + +namespace Acme.BookStore.Authors +{ + public interface IAuthorAppService : IApplicationService + { + Task GetAsync(Guid id); + + Task> GetListAsync(GetAuthorListDto input); + + Task CreateAsync(CreateAuthorDto input); + + Task UpdateAsync(Guid id, UpdateAuthorDto input); + + Task DeleteAsync(Guid id); + } +} +```` + +> You can follow the [web application development tutorial](../../Tutorials/Part-1.md) to learn how to create [application services](../../Application-Services.md), expose them as [HTTP APIs](../../API/Auto-API-Controllers.md) and consume from the JavaScript code as a complete example. + +You can call any of the methods just like calling a JavaScript function. The JavaScript function has the identical function **name**, **parameters** and the **return value** with the C# method. + +**Example: Get the authors list** + +````js +acme.bookStore.authors.author.getList({ + maxResultCount: 10 +}).then(function(result){ + console.log(result.items); +}); +```` + +**Example: Delete an author** + +```js +acme.bookStore.authors.author + .delete('7245a066-5457-4941-8aa7-3004778775f0') //Get id from somewhere! + .then(function() { + abp.notify.info('Successfully deleted!'); + }); +``` + +## AJAX Details + +Dynamic JavaScript client proxy functions use the [abp.ajax](JavaScript-API/Ajax.md) under the hood. So, you have the same benefits like **automatic error handling**. Also, you can fully control the AJAX call by providing the options. + +### The Return Value + +Every function returns a [Deferred object](https://api.jquery.com/category/deferred-object/). That means you can chain with `then` to get the result, `catch` to handle the error, `always` to perform an action once the operation completes (success or failed). + +### AJAX Options + +Every function gets an additional **last parameter** after your own parameters. The last parameter is called as `ajaxParams`. It is an object that overrides the AJAX options. + +**Example: Set `type` and `dataType` AJAX options** + +````js +acme.bookStore.authors.author + .delete('7245a066-5457-4941-8aa7-3004778775f0', { + type: 'POST', + dataType: 'xml' + }) + .then(function() { + abp.notify.info('Successfully deleted!'); + }); +```` + +See the [jQuery.ajax](https://api.jquery.com/jQuery.ajax/) documentation for all the available options. + +## Service Proxy Script Endpoint + +The magic is done by the `/Abp/ServiceProxyScript` endpoint defined by the ABP Framework and automatically added to the layout. You can visit this endpoint in your application to see the client proxy function definitions. This script file is automatically generated by the ABP Framework based on the server side method definitions and the related HTTP endpoint details. + +## See Also + +* [Web Application Development Tutorial](../../Tutorials/Part-1.md) +* [Auto API Controllers](../../API/Auto-API-Controllers.md) +* [Dynamic C# API Client Proxies](../../API/Dynamic-CSharp-API-Clients.md) \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index f292226ae3..78b2e8d324 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -422,6 +422,10 @@ "text": "Page Alerts", "path": "UI/AspNetCore/Page-Alerts.md" }, + { + "text": "Dynamic JavaScript API Client Proxies", + "path": "UI/AspNetCore/Dynamic-JavaScript-Proxies.md" + }, { "text": "Client Side Package Management", "path": "UI/AspNetCore/Client-Side-Package-Management.md" From 4c76679941528ed55e86d006d1812fb040c6a52d Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Fri, 30 Oct 2020 12:39:32 +0300 Subject: [PATCH 055/108] Fixed double ')' --- docs/en/UI/AspNetCore/Tag-Helpers/Index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Index.md b/docs/en/UI/AspNetCore/Tag-Helpers/Index.md index 54c37af688..f85edb5142 100644 --- a/docs/en/UI/AspNetCore/Tag-Helpers/Index.md +++ b/docs/en/UI/AspNetCore/Tag-Helpers/Index.md @@ -13,7 +13,7 @@ ABP Framework also adds some **useful features** to the standard bootstrap compo Here, the list of components those are wrapped by the ABP Framework: * [Alerts](Alerts.md) -* [Badges](Badges.md)) +* [Badges](Badges.md) * [Blockquote](Blockquote.md) * [Borders](Borders.md) * [Breadcrumb](Breadcrumb.md) @@ -42,4 +42,4 @@ Here, the list of components those are wrapped by the ABP Framework: ## Dynamic Forms -**Abp Tag helpers** offer an easy way to build complete **Bootstrap forms**. See [Dynamic Forms documentation](Dynamic-Forms.md). \ No newline at end of file +**Abp Tag helpers** offer an easy way to build complete **Bootstrap forms**. See [Dynamic Forms documentation](Dynamic-Forms.md). From bb3152c0209578a0e45c3f70a1c86e9f880f4c2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 30 Oct 2020 13:14:59 +0300 Subject: [PATCH 056/108] Initial ASP.NET Core MVC / Razor Pages UI overall document. --- docs/en/UI/AspNetCore/Overall.md | 73 +++++++++++++++++++++++++++++++ docs/en/UI/AspNetCore/Toolbars.md | 2 +- 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 docs/en/UI/AspNetCore/Overall.md diff --git a/docs/en/UI/AspNetCore/Overall.md b/docs/en/UI/AspNetCore/Overall.md new file mode 100644 index 0000000000..11f8314e5f --- /dev/null +++ b/docs/en/UI/AspNetCore/Overall.md @@ -0,0 +1,73 @@ +# ASP.NET Core MVC / Razor Pages UI + +## Introduction + +ABP Framework provides a convenient and comfortable way of creating web applications using the ASP.NET Core MVC / Razor Pages as the User Interface framework. + +ABP doesn't offer a new/custom way of UI development. You can continue to use your current skills to create the UI. However, it offers a lot of features to make your development easier and have a more maintainable code base. + +### MVC vs Razor Pages + +ASP.NET Core provides two models for UI development: + +* **[MVC (Model-View-Controller)](https://docs.microsoft.com/en-us/aspnet/core/mvc/)** is the classic way that exists from the version 1.0. This model can be used to create UI pages/components and HTTP APIs. +* **[Razor Pages](https://docs.microsoft.com/en-us/aspnet/core/razor-pages/)** was introduced with the ASP.NET Core 2.0 as a new way to create web pages. + +**ABP Framework supports both** of the MVC and the Razor Pages models. However, it is suggested to create the **UI pages with Razor Pages** approach and use the **MVC model to build HTTP APIs**. So, all the pre-build modules, samples and the documentation is based on the Razor Pages for the UI development, while you can always apply the MVC pattern to create your own pages. + +### Modularity + +[Modularity](../../Module-Development-Basics.md) is one of the key goals of the ABP Framework. It is not different for the UI; It is possible to develop modular applications and reusable application modules with isolated and reusable UI pages and components. + +The [application startup template](../../Startup-Templates/Application.md) comes with some application modules pre-installed. These modules have their own UI pages embedded into their own NuGet packages. You don't see their code in your solution, but they work as expected on runtime. + +## Theme System + +ABP Framework provides a complete [Theming](Theming.md) system with the following goals: + +* Reusable [application modules](../../Modules/Index.md) are developed **theme-independent**, so they can work with any UI theme. +* UI theme is **decided by the final application**. +* The theme is distributed via NuGet/NPM packages, so it is **easily upgradable**. +* The final application can **customize** the selected theme. + +### Current Themes + +Currently, two themes are **officially provided**: + +* The [Basic Theme](Basic-Theme.md) is the minimalist theme with the plain Bootstrap style. It is **open source and free**. +* The [Lepton Theme](https://commercial.abp.io/themes) is a **commercial** theme developed by the core ABP team and is a part of the [ABP Commercial](https://commercial.abp.io/) license. + +There are also some community-driven themes for the ABP Framework (you can search on the web). + +### Base Libraries + +There are a set of standard JavaScript/CSS libraries that comes pre-installed and supported by all the themes: + +- [Twitter Bootstrap](https://getbootstrap.com/) as the fundamental HTML/CSS framework. +- [JQuery](https://jquery.com/) for DOM manipulation. +- [DataTables.Net](https://datatables.net/) for data grids. +- [JQuery Validation](https://jqueryvalidation.org/) for client side & [unobtrusive](https://github.com/aspnet/jquery-validation-unobtrusive) validation +- [FontAwesome](https://fontawesome.com/) as the fundamental CSS font library. +- [SweetAlert](https://sweetalert.js.org/) to show fancy alert message and confirmation dialogs. +- [Toastr](https://github.com/CodeSeven/toastr) to show toast notifications. +- [Lodesh](https://lodash.com/) as a utility library. +- [Luxon](https://moment.github.io/luxon/) for date/time operations. +- [JQuery Form](https://github.com/jquery-form/form) for AJAX forms. +- [bootstrap-datepicker](https://github.com/uxsolutions/bootstrap-datepicker) to show date pickers. +- [Select2](https://select2.org/) for better select/combo boxes. +- [Timeago](http://timeago.yarp.com/) to show automatically updating fuzzy timestamps. +- [malihu-custom-scrollbar-plugin](https://github.com/malihu/malihu-custom-scrollbar-plugin) for custom scrollbars. + +You can use these libraries directly in your applications, without needing to manually import your page. + +### Layouts + +The themes provide the standard layouts. So, you have responsive layouts with the standard features already implemented. The screenshot below has taken from the Application Layout of the [Basic Theme](Basic-Theme.md): + +![basic-theme-application-layout](../../images/basic-theme-application-layout.png) + +See the [Theming](Theming.md) document for more layout options and other details. + +## Features + +TODO \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Toolbars.md b/docs/en/UI/AspNetCore/Toolbars.md index 524ef3f18b..3f1185f61b 100644 --- a/docs/en/UI/AspNetCore/Toolbars.md +++ b/docs/en/UI/AspNetCore/Toolbars.md @@ -1,4 +1,4 @@ -# Toolbars +# ASP.NET Core MVC / Razor Pages UI: Toolbars The Toolbar system is used to define **toolbars** on the user interface. Modules (or your application) can add **items** to a toolbar, then the [theme](Theming.md) renders the toolbar on the **layout**. From 2ecee7e148648b3220d3de8d123f77efa09cb909 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Fri, 30 Oct 2020 11:38:31 +0100 Subject: [PATCH 057/108] Updated Blazorise version to 0.9.2-rc1 --- .../src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj index 1134821b78..47e8b32f00 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj +++ b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj @@ -12,8 +12,8 @@ - - + + From c4cc529f39ddaca7f7d76fa9222e0c05b1103d24 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Fri, 30 Oct 2020 11:39:22 +0100 Subject: [PATCH 058/108] Created AbpIdentityBlazorMessageLocalizerHelper instead of extension methods --- ...bpIdentityBlazorMessageLocalizerHelper.cs} | 17 ++++++++---- .../AbpIdentityBlazorModule.cs | 2 ++ .../Pages/Identity/RoleManagement.razor | 7 ++--- .../Pages/Identity/UserManagement.razor | 27 ++++++++++--------- 4 files changed, 32 insertions(+), 21 deletions(-) rename modules/identity/src/Volo.Abp.Identity.Blazor/{AbpIdentityBlazorMessageLocalizerExtensions.cs => AbpIdentityBlazorMessageLocalizerHelper.cs} (57%) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerHelper.cs similarity index 57% rename from modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs rename to modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerHelper.cs index 72328eb86d..5d858843b8 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerExtensions.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerHelper.cs @@ -1,18 +1,25 @@ using System.Collections.Generic; using System.Linq; -using Blazorise; +using JetBrains.Annotations; using Microsoft.Extensions.Localization; namespace Volo.Abp.Identity.Blazor { - public static class AbpIdentityBlazorMessageLocalizerExtensions + public class AbpIdentityBlazorMessageLocalizerHelper { - public static string Localize(this IStringLocalizer stringLocalizer, string message, IEnumerable arguments) + private readonly IStringLocalizer stringLocalizer; + + public AbpIdentityBlazorMessageLocalizerHelper(IStringLocalizer stringLocalizer) + { + this.stringLocalizer = stringLocalizer; + } + + public string Localize(string message, [CanBeNull] IEnumerable arguments) { try { return arguments?.Count() > 0 - ? stringLocalizer[message, LocalizeMessageArguments(stringLocalizer, arguments)?.ToArray()] + ? stringLocalizer[message, LocalizeMessageArguments(arguments)?.ToArray()] : stringLocalizer[message]; } catch @@ -21,7 +28,7 @@ namespace Volo.Abp.Identity.Blazor } } - private static IEnumerable LocalizeMessageArguments(IStringLocalizer stringLocalizer, IEnumerable arguments) + private IEnumerable LocalizeMessageArguments(IEnumerable arguments) { foreach (var argument in arguments) { diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorModule.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorModule.cs index cebde068c3..7f11267132 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorModule.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorModule.cs @@ -32,6 +32,8 @@ namespace Volo.Abp.Identity.Blazor { options.AdditionalAssemblies.Add(typeof(AbpIdentityBlazorModule).Assembly); }); + + context.Services.AddSingleton(typeof(AbpIdentityBlazorMessageLocalizerHelper<>)); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor index 97001ee6ec..4639f81be2 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor @@ -1,5 +1,5 @@ @page "/identity/roles" -@attribute [Authorize(IdentityPermissions.Roles.Default)] +@attribute [Authorize( IdentityPermissions.Roles.Default )] @using Volo.Abp.Identity @using Microsoft.AspNetCore.Authorization @using Microsoft.Extensions.Localization @@ -7,6 +7,7 @@ @using Volo.Abp.PermissionManagement.Blazor.Components @inherits RoleManagementBase @inject IStringLocalizer L +@inject AbpIdentityBlazorMessageLocalizerHelper LH @* ************************* PAGE HEADER ************************* *@ @@ -84,7 +85,7 @@ - + @L["DisplayName:RoleName"] @@ -120,7 +121,7 @@ - + @L["DisplayName:RoleName"] diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index 0a61fc70ab..93e0ccaa85 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -1,11 +1,12 @@ @page "/identity/users" -@attribute [Authorize(IdentityPermissions.Users.Default)] +@attribute [Authorize( IdentityPermissions.Users.Default )] @using Microsoft.AspNetCore.Authorization @using Microsoft.Extensions.Localization @using Volo.Abp.Identity.Localization @using Volo.Abp.PermissionManagement.Blazor.Components @inherits UserManagementBase @inject IStringLocalizer L +@inject AbpIdentityBlazorMessageLocalizerHelper LH @* ************************* PAGE HEADER ************************* *@ @@ -93,7 +94,7 @@ - + @L["DisplayName:UserName"] @@ -103,7 +104,7 @@ - + @L["DisplayName:Name"] @@ -113,7 +114,7 @@ - + @L["DisplayName:Surname"] @@ -123,7 +124,7 @@ - + @L["DisplayName:Password"] @@ -133,7 +134,7 @@ - + @L["DisplayName:Email"] @@ -143,7 +144,7 @@ - + @L["DisplayName:PhoneNumber"] @@ -202,7 +203,7 @@ - + @L["DisplayName:UserName"] @@ -212,7 +213,7 @@ - + @L["DisplayName:Name"] @@ -222,7 +223,7 @@ - + @L["DisplayName:Surname"] @@ -232,7 +233,7 @@ - + @L["DisplayName:Password"] @@ -242,7 +243,7 @@ - + @L["DisplayName:Email"] @@ -252,7 +253,7 @@ - + @L["DisplayName:PhoneNumber"] From 947e06aaead8bf1d160e6a2d1302cb9721924713 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Fri, 30 Oct 2020 12:20:51 +0100 Subject: [PATCH 059/108] OkButtonText converted to ILocalizableString --- .../Components/WebAssembly/UiNotificationOptions.cs | 6 ++++-- .../Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs | 1 - .../Components/UiNotificationAlert.razor.cs | 7 ++++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationOptions.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationOptions.cs index 2d51716cd9..ae8a400368 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationOptions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationOptions.cs @@ -1,4 +1,6 @@ -namespace Volo.Abp.AspNetCore.Components.WebAssembly +using Volo.Abp.Localization; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly { /// /// Options to override notification appearance. @@ -8,7 +10,7 @@ /// /// Custom text for the Ok button. /// - public string OkButtonText { get; set; } + public ILocalizableString OkButtonText { get; set; } /// /// Custom icon for the Ok button. diff --git a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs index be2d5c9d51..05c1cd5163 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs @@ -67,7 +67,6 @@ namespace Volo.Abp.BlazoriseUI { return new UiNotificationOptions { - OkButtonText = localizer["Ok"], }; } } diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor.cs index 691b6a7a1a..67c890f922 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using Blazorise.Snackbar; using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; using Volo.Abp.AspNetCore.Components.WebAssembly; namespace Volo.Abp.BlazoriseUI.Components @@ -24,6 +25,8 @@ namespace Volo.Abp.BlazoriseUI.Components [Inject] protected BlazoriseUiNotificationService UiNotificationService { get; set; } + [Inject] protected IStringLocalizerFactory StringLocalizerFactory { get; set; } + protected virtual SnackbarColor GetSnackbarColor(UiNotificationType notificationType) { return notificationType switch @@ -50,7 +53,9 @@ namespace Volo.Abp.BlazoriseUI.Components Title = e.Title; Options = e.Options; - SnackbarStack.Push(Message, GetSnackbarColor(e.NotificationType)); + var okButtonText = Options?.OkButtonText?.Localize(StringLocalizerFactory); + + SnackbarStack.Push(Message, GetSnackbarColor( e.NotificationType ), okButtonText); } public virtual void Dispose() From f55a80c569e59eee23031c8a7981e0f6d0972425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 30 Oct 2020 14:29:56 +0300 Subject: [PATCH 060/108] Created Overall AspNet Core documentation. --- .../UI/AspNetCore/Libraries/DatatablesNet.md | 3 - docs/en/UI/AspNetCore/Overall.md | 90 ++++++++++++++++++- docs/en/docs-nav.json | 6 +- 3 files changed, 93 insertions(+), 6 deletions(-) delete mode 100644 docs/en/UI/AspNetCore/Libraries/DatatablesNet.md diff --git a/docs/en/UI/AspNetCore/Libraries/DatatablesNet.md b/docs/en/UI/AspNetCore/Libraries/DatatablesNet.md deleted file mode 100644 index a5a66e9e19..0000000000 --- a/docs/en/UI/AspNetCore/Libraries/DatatablesNet.md +++ /dev/null @@ -1,3 +0,0 @@ -# ABP Datatables.Net Integration for ASP.NET Core UI - -TODO \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Overall.md b/docs/en/UI/AspNetCore/Overall.md index 11f8314e5f..a499cd93a3 100644 --- a/docs/en/UI/AspNetCore/Overall.md +++ b/docs/en/UI/AspNetCore/Overall.md @@ -4,7 +4,7 @@ ABP Framework provides a convenient and comfortable way of creating web applications using the ASP.NET Core MVC / Razor Pages as the User Interface framework. -ABP doesn't offer a new/custom way of UI development. You can continue to use your current skills to create the UI. However, it offers a lot of features to make your development easier and have a more maintainable code base. +> ABP doesn't offer a new/custom way of UI development. You can continue to use your current skills to create the UI. However, it offers a lot of features to make your development easier and have a more maintainable code base. ### MVC vs Razor Pages @@ -68,6 +68,92 @@ The themes provide the standard layouts. So, you have responsive layouts with th See the [Theming](Theming.md) document for more layout options and other details. +### Layout Parts + +A typical layout consists of multiple parts. The [Theming](Theming.md) system provides [menus](Navigation-Menu.md), [toolbars](Toolbars.md), [layout hooks](Layout-Hooks.md) and more to dynamically control the layout by your application and the modules you are using. + ## Features -TODO \ No newline at end of file +This section highlights some of the features provided by the ABP Framework for the ASP.NET Core MVC / Razor Pages UI. + +### Dynamic JavaScript API Client Proxies + +Dynamic JavaScript API Client Proxy system allows you to consume your server side HTTP APIs from your JavaScript client code, just like calling local functions. + +**Example: Get a list of authors from the server** + +````js +acme.bookStore.authors.author.getList({ + maxResultCount: 10 +}).then(function(result){ + console.log(result.items); +}); +```` + +`acme.bookStore.authors.author.getList` is an auto-generated function that internally makes an AJAX call to the server. + +See the [Dynamic JavaScript API Client Proxies](Dynamic-JavaScript-Proxies.md) document for more. + +### Bootstrap Tag Helpers + +ABP makes it easier & type safe to write Bootstrap HTML. + +**Example: Render a Bootstrap modal** + +````html + + + + Woohoo, you're reading this text in a modal! + + + +```` + +See the [Tag Helpers](Tag-Helpers/Index.md) document for more. + +### Forms & Validation + +ABP provides `abp-dynamic-form` and `abp-input` tag helpers to dramatically simplify to create a fully functional form that automates localization, validation and AJAX submission. + +**Example: Use `abp-dynamic-form` to create a complete form based on a model** + +````html + +```` + +See the [Forms & Validation](Forms-Validation.md) document for details. + +### Bundling & Minification / Client Side Libraries + +ABP provides a flexible and modular Bundling & Minification system to create bundles and minify style/script files on runtime. + +````html + + + + + + +```` + +Also, Client Side Package Management system offers a modular and consistent way of managing 3rd-party library dependencies. + +See the [Bundling & Minification](Bundling-Minification.md) and [Client Side Package Management](Client-Side-Package-Management.md) documents. + +### JavaScript APIs + +[JavaScript APIs](JavaScript-API/Index.md) provides a strong abstractions to the server side localization, settings, permissions, features... etc. They also provide a simple way to show messages and **notifications** to the user. + +### Modals, Alerts, Widgets and More + +ABP Framework provides a lot of built-in solutions to common application requirements; + +* [Widget System](Widgets.md) can be used to create reusable widgets & create dashboards. +* [Page Alerts](Page-Alerts.md) makes it easy to show alerts to the user. +* [Modal Manager](Modals.md) provides a simple way to build and use modals. +* [Data Tables](Data-Tables.md) integration makes straightforward to create data grids. + +## Customization + +There are a lot of ways to customize the theme and the UIs of the pre-built modules. You can override components, pages, static resources, bundles and more. See the [User Interface Customization Guide](Customization-User-Interface.md). \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 78b2e8d324..2c55767ecc 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -400,8 +400,12 @@ "text": "User Interface", "items": [ { - "text": "ASP.NET Core MVC / Razor Pages", + "text": "MVC / Razor Pages", "items": [ + { + "text": "Overall", + "path": "UI/AspNetCore/Overall.md" + }, { "text": "Navigation / Menus", "path": "UI/AspNetCore/Navigation-Menu.md" From 3f485a4cc7cc2dcf58943b402cb44a1382e7db12 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Fri, 30 Oct 2020 14:51:32 +0300 Subject: [PATCH 061/108] Update blazorise references to v0.9.2-rc1 --- .../MyCompanyName.MyProjectName.Blazor.csproj | 4 ++-- .../MyCompanyName.MyProjectName.Blazor.Host.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index 0da1f2822a..6a3f216d47 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj index ab9baf3b70..a72215c320 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj @@ -8,8 +8,8 @@ - - + + From 4a7addfa848644f8e76a28485777db37b8c86b39 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 30 Oct 2020 15:22:40 +0300 Subject: [PATCH 062/108] Identity Blazor Refactored Replace Abstract Base: #5962 --- .../Pages/Identity/RoleManagement.razor | 4 +++- .../Pages/Identity/RoleManagement.razor.cs | 8 +++----- .../Pages/Identity/UserManagement.razor | 4 +++- .../Pages/Identity/UserManagement.razor.cs | 5 ++--- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor index 67e7e9290c..7b9e047abb 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor @@ -2,8 +2,10 @@ @attribute [Authorize(IdentityPermissions.Roles.Default)] @using Volo.Abp.Identity @using Microsoft.AspNetCore.Authorization +@using Microsoft.AspNetCore.Components.Forms @using Volo.Abp.PermissionManagement.Blazor.Components -@inherits RoleManagementBase + +@inherits AbpCrudPageBase @* ************************* PAGE HEADER ************************* *@ diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs index 2a77f22a92..c2c9af510a 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs @@ -1,13 +1,11 @@ -using System; -using System.Threading.Tasks; +using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; -using Volo.Abp.BlazoriseUI; using Volo.Abp.Identity.Localization; using Volo.Abp.PermissionManagement.Blazor.Components; namespace Volo.Abp.Identity.Blazor.Pages.Identity { - public abstract class RoleManagementBase : AbpCrudPageBase + public partial class RoleManagement { protected const string PermissionProviderName = "R"; @@ -17,7 +15,7 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity protected bool ShouldShowEntityActions { get; set; } - public RoleManagementBase() + public RoleManagement() { ObjectMapperContext = typeof(AbpIdentityBlazorModule); LocalizationResource = typeof(IdentityResource); diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index 991b8d1606..255a6e4d05 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -1,8 +1,10 @@ @page "/identity/users" @attribute [Authorize(IdentityPermissions.Users.Default)] @using Microsoft.AspNetCore.Authorization +@using Microsoft.AspNetCore.Components.Forms @using Volo.Abp.PermissionManagement.Blazor.Components -@inherits UserManagementBase + +@inherits AbpCrudPageBase @* ************************* PAGE HEADER ************************* *@ diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs index 423f452cd8..cadd329f21 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs @@ -3,13 +3,12 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; -using Volo.Abp.BlazoriseUI; using Volo.Abp.Identity.Localization; using Volo.Abp.PermissionManagement.Blazor.Components; namespace Volo.Abp.Identity.Blazor.Pages.Identity { - public abstract class UserManagementBase : AbpCrudPageBase + public partial class UserManagement { protected const string PermissionProviderName = "U"; @@ -30,7 +29,7 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity protected string EditModalSelectedTab = DefaultSelectedTab; - public UserManagementBase() + public UserManagement() { ObjectMapperContext = typeof(AbpIdentityBlazorModule); LocalizationResource = typeof(IdentityResource); From 0f335da0e1712104d39197345f153cf103194171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 30 Oct 2020 16:42:55 +0300 Subject: [PATCH 063/108] Fix title --- docs/en/Domain-Services.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Domain-Services.md b/docs/en/Domain-Services.md index 7eb6c917cd..9f4a5ee544 100644 --- a/docs/en/Domain-Services.md +++ b/docs/en/Domain-Services.md @@ -1,3 +1,3 @@ -# ABP Documentation +# Domain Services -TODO! \ No newline at end of file +TODO \ No newline at end of file From 29473ae70e5464cc06d242e680add81bae85255d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 30 Oct 2020 16:43:07 +0300 Subject: [PATCH 064/108] Update Background-Workers-Quartz.md --- docs/en/Background-Workers-Quartz.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Background-Workers-Quartz.md b/docs/en/Background-Workers-Quartz.md index e1d8287019..ce82222c14 100644 --- a/docs/en/Background-Workers-Quartz.md +++ b/docs/en/Background-Workers-Quartz.md @@ -37,7 +37,7 @@ public class YourModule : AbpModule ```` > Quartz background worker integration provided `QuartzPeriodicBackgroundWorkerAdapter` to adapt `PeriodicBackgroundWorkerBase` and `AsyncPeriodicBackgroundWorkerBase` derived class. So, you can still fllow the [background workers document](Background-Workers.md) to define the background worker. -> `BackgroundJobWorker` checks todo jobs every 5 seconds, but quartz will not block when long time jobs are executing. So,after Added Quartz background worker integration, you also need to add [Quartz Background Jobs](Background-Jobs-Quartz.md) or [Hangfire Background Jobs](Background-Jobs-Hangfire.md) to avoid duplicate execution jobs. +> `BackgroundJobWorker` checks jobs every 5 seconds, but quartz will not block when long time jobs are executing. So,after Added Quartz background worker integration, you also need to add [Quartz Background Jobs](Background-Jobs-Quartz.md) or [Hangfire Background Jobs](Background-Jobs-Hangfire.md) to avoid duplicate execution jobs. ## Configuration From 73b376aa7a84f9b820cfc8a177de696ff44776a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 30 Oct 2020 16:56:12 +0300 Subject: [PATCH 065/108] Organize Blazor UI docs. --- docs/en/UI/Blazor/Localization.md | 2 +- docs/en/UI/Blazor/Message.md | 3 +++ docs/en/UI/Blazor/Notification.md | 3 +++ docs/en/UI/Blazor/Overall.md | 4 +++- docs/en/UI/Blazor/Services/Notification.md | 3 --- docs/en/UI/Blazor/Settings.md | 2 +- docs/en/docs-nav.json | 14 +++++++++++++- 7 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 docs/en/UI/Blazor/Message.md create mode 100644 docs/en/UI/Blazor/Notification.md delete mode 100644 docs/en/UI/Blazor/Services/Notification.md diff --git a/docs/en/UI/Blazor/Localization.md b/docs/en/UI/Blazor/Localization.md index e6cf761ce3..23b31a5a24 100644 --- a/docs/en/UI/Blazor/Localization.md +++ b/docs/en/UI/Blazor/Localization.md @@ -1,3 +1,3 @@ -# Blazor UI: Localization +# Blazor: Localization Blazor applications can reuse the same `IStringLocalizer` service that is explained in the [localization document](../../Localization.md). All the localization resources and texts available in the server side are usable in the Blazor application. \ No newline at end of file diff --git a/docs/en/UI/Blazor/Message.md b/docs/en/UI/Blazor/Message.md new file mode 100644 index 0000000000..8373bd1d82 --- /dev/null +++ b/docs/en/UI/Blazor/Message.md @@ -0,0 +1,3 @@ +# Blazor: UI Message Service + +TODO \ No newline at end of file diff --git a/docs/en/UI/Blazor/Notification.md b/docs/en/UI/Blazor/Notification.md new file mode 100644 index 0000000000..ef8945347b --- /dev/null +++ b/docs/en/UI/Blazor/Notification.md @@ -0,0 +1,3 @@ +# Blazor: Notification + +`UiNotificationService` is used to show toastr style notifications on the user interface. The documentation is in progress... \ No newline at end of file diff --git a/docs/en/UI/Blazor/Overall.md b/docs/en/UI/Blazor/Overall.md index 74c469e3c4..8af0e2fd0d 100644 --- a/docs/en/UI/Blazor/Overall.md +++ b/docs/en/UI/Blazor/Overall.md @@ -1,6 +1,8 @@ # Blazor UI for the ABP Framework -The detailed documentation for the Blazor UI is in progress. However, you can follow the documents below to start with the Blazor UI today. +## Getting Started + +You can follow the documents below to start with the ABP Framework and the Blazor UI: * [Get started](https://docs.abp.io/en/abp/latest/Getting-Started?UI=Blazor) with the Blazor UI for the ABP Framework. * [Web Application Development Tutorial](https://docs.abp.io/en/abp/latest/Tutorials/Part-1?UI=Blazor) with the Blazor UI. \ No newline at end of file diff --git a/docs/en/UI/Blazor/Services/Notification.md b/docs/en/UI/Blazor/Services/Notification.md deleted file mode 100644 index 0e5ababa0e..0000000000 --- a/docs/en/UI/Blazor/Services/Notification.md +++ /dev/null @@ -1,3 +0,0 @@ -# Blazor UI Notification - -`UiNotificationService` is used to show toastr style notifications on the user interface. The documentation is in progress... \ No newline at end of file diff --git a/docs/en/UI/Blazor/Settings.md b/docs/en/UI/Blazor/Settings.md index 276462c411..ad03dce5e2 100644 --- a/docs/en/UI/Blazor/Settings.md +++ b/docs/en/UI/Blazor/Settings.md @@ -1,3 +1,3 @@ -# Blazor UI: Settings +# Blazor: Settings Blazor applications can reuse the same `ISettingProvider` service that is explained in the [settings document](../../Settings.md). \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 2c55767ecc..2301e845a3 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -560,8 +560,20 @@ "text": "Services", "items": [ { - "text": "Overall", + "text": "Localization", + "path": "UI/Blazor/Services/Localization.md" + }, + { + "text": "Settings", + "path": "UI/Blazor/Services/Settings.md" + }, + { + "text": "Notification", "path": "UI/Blazor/Services/Notification.md" + }, + { + "text": "Message", + "path": "UI/Blazor/Services/Message.md" } ] } From 740fb05644d1097877bbb34446956958e4dc36bd Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 30 Oct 2020 16:57:52 +0300 Subject: [PATCH 066/108] Update CliHttpClient.cs --- .../src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs index bd3037d830..3712d0be13 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs @@ -17,7 +17,8 @@ namespace Volo.Abp.Cli.Http { public static TimeSpan DefaultTimeout { get; set; } = TimeSpan.FromMinutes(1); - public CliHttpClient(TimeSpan? timeout = null) : base(new CliHttpClientHandler()) + public CliHttpClient(TimeSpan? timeout = null) + : base(new CliHttpClientHandler()) { Timeout = timeout ?? DefaultTimeout; @@ -98,4 +99,4 @@ namespace Volo.Abp.Cli.Http } } -} \ No newline at end of file +} From ec72a386620bb517988e3aa17c214348e74a60cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 30 Oct 2020 17:22:41 +0300 Subject: [PATCH 067/108] Update docs-nav.json --- docs/en/docs-nav.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 2301e845a3..732e86bd41 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -561,19 +561,19 @@ "items": [ { "text": "Localization", - "path": "UI/Blazor/Services/Localization.md" + "path": "UI/Blazor/Localization.md" }, { "text": "Settings", - "path": "UI/Blazor/Services/Settings.md" + "path": "UI/Blazor/Settings.md" }, { "text": "Notification", - "path": "UI/Blazor/Services/Notification.md" + "path": "UI/Blazor/Notification.md" }, { "text": "Message", - "path": "UI/Blazor/Services/Message.md" + "path": "UI/Blazor/Message.md" } ] } From eef52e4eedbec7c2cb6d15101748db5520288166 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 30 Oct 2020 20:00:46 +0300 Subject: [PATCH 068/108] refactor identity blazor package --- .../Pages/Identity/RoleManagement.razor | 9 +++------ .../Pages/Identity/UserManagement.razor | 7 ++----- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor index 16021a1705..f9d2375dc5 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor @@ -4,15 +4,12 @@ @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Forms @using Volo.Abp.PermissionManagement.Blazor.Components - -@inherits AbpCrudPageBase - @using Microsoft.Extensions.Localization @using Volo.Abp.Identity.Localization -@using Volo.Abp.PermissionManagement.Blazor.Components -@inherits RoleManagementBase -@inject IStringLocalizer L @inject AbpIdentityBlazorMessageLocalizerHelper LH + +@inherits AbpCrudPageBase + @* ************************* PAGE HEADER ************************* *@ diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index d21c5acf2d..f8f6262c98 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -3,14 +3,11 @@ @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Forms @using Volo.Abp.PermissionManagement.Blazor.Components +@using Microsoft.Extensions.Localization +@using Volo.Abp.Identity.Localization @inherits AbpCrudPageBase -@using Microsoft.Extensions.Localization -@using Volo.Abp.Identity.Localization -@using Volo.Abp.PermissionManagement.Blazor.Components -@inherits UserManagementBase -@inject IStringLocalizer L @inject AbpIdentityBlazorMessageLocalizerHelper LH @* ************************* PAGE HEADER ************************* *@ From 2f469f50052f4437502f2c4e1186eebf0d52df3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 30 Oct 2020 20:54:18 +0300 Subject: [PATCH 069/108] Added empty global-styles.css to the startup templates. --- .../MyProjectNameHttpApiHostModule.cs | 19 ++++++++++++++++++- .../wwwroot/global-styles.css | 1 + .../MyProjectNameIdentityServerModule.cs | 13 +++++++++++++ .../wwwroot/libs/global-styles.css | 1 + .../MyProjectNameWebModule.cs | 17 +++++++++++++++++ .../wwwroot/global-styles.css | 1 + .../MyProjectNameWebModule.cs | 17 +++++++++++++++++ .../wwwroot/global-styles.css | 1 + 8 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/global-styles.css create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/global-styles.css create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/global-styles.css create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/global-styles.css diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs index 873f97d96a..2bc5c64d21 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs @@ -16,6 +16,8 @@ using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Authentication.JwtBearer; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; @@ -46,6 +48,7 @@ namespace MyCompanyName.MyProjectName var configuration = context.Services.GetConfiguration(); var hostingEnvironment = context.Services.GetHostingEnvironment(); + ConfigureBundles(); ConfigureUrls(configuration); ConfigureConventionalControllers(); ConfigureAuthentication(context, configuration); @@ -55,6 +58,20 @@ namespace MyCompanyName.MyProjectName ConfigureSwaggerServices(context); } + private void ConfigureBundles() + { + Configure(options => + { + options.StyleBundles.Configure( + BasicThemeBundles.Styles.Global, + bundle => + { + bundle.AddFiles("/global-styles.css"); + } + ); + }); + } + private void ConfigureUrls(IConfiguration configuration) { Configure(options => @@ -200,4 +217,4 @@ namespace MyCompanyName.MyProjectName app.UseConfiguredEndpoints(); } } -} \ No newline at end of file +} diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/global-styles.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/global-styles.css new file mode 100644 index 0000000000..e5d20ea346 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/global-styles.css @@ -0,0 +1 @@ +/* Your Global Styles */ diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index ee0d6d7473..e67b25769f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -16,7 +16,9 @@ using Volo.Abp.Account; using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Mvc.UI; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Auditing; @@ -70,6 +72,17 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); }); + Configure(options => + { + options.StyleBundles.Configure( + BasicThemeBundles.Styles.Global, + bundle => + { + bundle.AddFiles("/global-styles.css"); + } + ); + }); + Configure(options => { //options.IsEnabledForGetRequests = true; diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/global-styles.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/global-styles.css new file mode 100644 index 0000000000..e5d20ea346 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/global-styles.css @@ -0,0 +1 @@ +/* Your Global Styles */ diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs index 958f39ea0e..bbff4ef4a7 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs @@ -18,7 +18,9 @@ using Volo.Abp.AspNetCore.Mvc.Client; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars; using Volo.Abp.AspNetCore.Serilog; @@ -76,6 +78,7 @@ namespace MyCompanyName.MyProjectName.Web var hostingEnvironment = context.Services.GetHostingEnvironment(); var configuration = context.Services.GetConfiguration(); + ConfigureBundles(); ConfigureCache(configuration); ConfigureRedis(context, configuration, hostingEnvironment); ConfigureUrls(configuration); @@ -87,6 +90,20 @@ namespace MyCompanyName.MyProjectName.Web ConfigureSwaggerServices(context.Services); } + private void ConfigureBundles() + { + Configure(options => + { + options.StyleBundles.Configure( + BasicThemeBundles.Styles.Global, + bundle => + { + bundle.AddFiles("/global-styles.css"); + } + ); + }); + } + private void ConfigureCache(IConfiguration configuration) { Configure(options => diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/global-styles.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/global-styles.css new file mode 100644 index 0000000000..e5d20ea346 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/global-styles.css @@ -0,0 +1 @@ +/* Your Global Styles */ diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 5b7a147345..1483e94a57 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -17,8 +17,10 @@ using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; @@ -73,6 +75,7 @@ namespace MyCompanyName.MyProjectName.Web var configuration = context.Services.GetConfiguration(); ConfigureUrls(configuration); + ConfigureBundles(); ConfigureAuthentication(context, configuration); ConfigureAutoMapper(); ConfigureVirtualFileSystem(hostingEnvironment); @@ -90,6 +93,20 @@ namespace MyCompanyName.MyProjectName.Web }); } + private void ConfigureBundles() + { + Configure(options => + { + options.StyleBundles.Configure( + BasicThemeBundles.Styles.Global, + bundle => + { + bundle.AddFiles("/global-styles.css"); + } + ); + }); + } + private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration) { context.Services.AddAuthentication() diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/global-styles.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/global-styles.css new file mode 100644 index 0000000000..e5d20ea346 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/global-styles.css @@ -0,0 +1 @@ +/* Your Global Styles */ From a2409787fc53e779e0665a075767cbfabf3eed02 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 30 Oct 2020 21:03:36 +0300 Subject: [PATCH 070/108] Setting Management Blazor refactored Replace Abstract Base: #5962 --- .../Pages/SettingManagement/SettingManagement.razor | 2 +- .../Pages/SettingManagement/SettingManagement.razor.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor index ce854161ef..cce73cea1f 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor @@ -1,5 +1,5 @@ @page "/setting-management" -@inherits SettingManagementBase + @* ************************* PAGE HEADER ************************* *@ diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs index 3c4775fd02..edd34506a1 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs @@ -10,7 +10,7 @@ using Volo.Abp.SettingManagement.Localization; namespace Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement { - public abstract class SettingManagementBase : OwningComponentBase + public partial class SettingManagement { [Inject] protected IServiceProvider ServiceProvider { get; set; } @@ -44,7 +44,7 @@ namespace Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement BreadcrumbItems.Add(new BreadcrumbItem(L["Settings"])); } - protected string GetNormalizedString(string value) + protected virtual string GetNormalizedString(string value) { return value.Replace('.', '_'); } From fa03241d7553fc7d3a34124ad6559ffe093744d0 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 30 Oct 2020 21:09:14 +0300 Subject: [PATCH 071/108] Tenant Management Blazor refactored Replace Abstract Base: #5962 --- .../Pages/TenantManagement/TenantManagement.razor | 7 +++---- .../Pages/TenantManagement/TenantManagement.razor.cs | 7 ++++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor index 0b2f60d23b..49292b7720 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor @@ -1,11 +1,10 @@ @page "/tenant-management/tenants" @attribute [Authorize(TenantManagementPermissions.Tenants.Default)] @using Microsoft.AspNetCore.Authorization -@using Microsoft.Extensions.Localization -@using Volo.Abp.TenantManagement.Localization @using Volo.Abp.FeatureManagement.Blazor.Components -@inherits TenantManagementBase -@inject IStringLocalizer L +@using Microsoft.AspNetCore.Components.Forms + +@inherits AbpCrudPageBase @* ************************* PAGE HEADER ************************* *@ diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs index f9dd57422e..a3408a17d2 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs @@ -4,11 +4,11 @@ using Blazorise; using Microsoft.AspNetCore.Authorization; using Volo.Abp.BlazoriseUI; using Volo.Abp.FeatureManagement.Blazor.Components; +using Volo.Abp.TenantManagement.Localization; namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement { - public abstract class TenantManagementBase - : AbpCrudPageBase + public partial class TenantManagement { protected const string FeatureProviderName = "T"; @@ -22,8 +22,9 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement protected TenantInfoModel TenantInfo; - public TenantManagementBase() + public TenantManagement() { + LocalizationResource = typeof(AbpTenantManagementResource); ObjectMapperContext = typeof(AbpTenantManagementBlazorModule); CreatePolicyName = TenantManagementPermissions.Tenants.Create; From 47c98ce036a993549ce9857fcca82a86e02916a1 Mon Sep 17 00:00:00 2001 From: maliming Date: Sat, 31 Oct 2020 19:41:58 +0800 Subject: [PATCH 072/108] Update EmailSenderBase.cs https://github.com/abpframework/abp/pull/6000 --- .../src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs index b278d70d16..b0c572f0e4 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs @@ -69,7 +69,7 @@ namespace Volo.Abp.Emailing ); } - public async Task QueueAsync(string from, string to, string subject, string body, bool isBodyHtml = true) + public virtual async Task QueueAsync(string from, string to, string subject, string body, bool isBodyHtml = true) { if (!BackgroundJobManager.IsAvailable()) { From 58666f8dc31143f4b3a7edd6de51d614b6ad2d10 Mon Sep 17 00:00:00 2001 From: htlsmile Date: Sun, 1 Nov 2020 18:25:44 +0800 Subject: [PATCH 073/108] Update Part-1.md Fix formatting and url errors --- docs/zh-Hans/Tutorials/Part-1.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/zh-Hans/Tutorials/Part-1.md b/docs/zh-Hans/Tutorials/Part-1.md index 99a7e3d9fb..e459c8b960 100644 --- a/docs/zh-Hans/Tutorials/Part-1.md +++ b/docs/zh-Hans/Tutorials/Part-1.md @@ -84,7 +84,7 @@ namespace Acme.BookStore.Books } ```` -* ABP为实体提供了两个基本的基类: `AggregateRoot`和`Entity`. **Aggregate Root**是**[领域驱动设计](./Domain-Driven-Design.md)** 概念之一. 可以视为直接查询和处理的根实体(请参阅[实体文档](./Entities.md)). +* ABP为实体提供了两个基本的基类: `AggregateRoot`和`Entity`. **Aggregate Root**是[**领域驱动设计**](./Domain-Driven-Design.md) 概念之一. 可以视为直接查询和处理的根实体(请参阅[实体文档](./Entities.md)). * `Book`实体继承了`AuditedAggregateRoot`,`AuditedAggregateRoot`类在`AggregateRoot`类的基础上添加了一些审计属性(`CreationTime`, `CreatorId`, `LastModificationTime` 等). ABP框架自动为你管理这些属性. * `Guid`是`Book`实体的主键类型. @@ -185,7 +185,7 @@ namespace Acme.BookStore.EntityFrameworkCore ### 添加数据迁移 -启动模板使用[EF Core Code First Migrations](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/)创建和维护数据库架构. 打开菜单*工具 > NuGet包管理器*下的**程序包管理控制台 (PMC)**. +启动模板使用[EF Core Code First Migrations](https://docs.microsoft.com/zh-cn/ef/core/managing-schemas/migrations/)创建和维护数据库架构. 打开菜单*工具 > NuGet包管理器*下的**程序包管理控制台 (PMC)**. ![Open Package Manager Console](images/bookstore-open-package-manager-console.png) @@ -201,7 +201,7 @@ Add-Migration "Created_Book_Entity" 在更新数据库之前,请阅读下面的部分了解如何将一些初始数据插入到数据库. -> 如果你使用其他IDE而不是Visual Studio, 你可以使用 [`dotnet-ef]`(https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/?tabs=dotnet-core-cli#create-a-migration) 工具. +> 如果你使用其他IDE而不是Visual Studio, 你可以使用 [`dotnet-ef`](https://docs.microsoft.com/zh-cn/ef/core/managing-schemas/migrations/?tabs=dotnet-core-cli#create-a-migration) 工具. {{end}} @@ -262,7 +262,7 @@ namespace Acme.BookStore } ``` -* 如果数据库中当前没有图书,则此代码使用 `IRepository`(默认为[repository](../Repositories.md)将两本书插入数据库. +* 如果数据库中当前没有图书,则此代码使用 `IRepository`(默认为[repository](../Repositories.md))将两本书插入数据库. ### 更新数据库 @@ -276,7 +276,7 @@ namespace Acme.BookStore 应用程序层由两个分离的项目组成: -* `Acme.BookStore.Application.Contracts 包含你的[DTO](../Data-Transfer-Objects.md)和[应用服务](../Application-Services.md)接口. +* `Acme.BookStore.Application.Contracts` 包含你的[DTO](../Data-Transfer-Objects.md)和[应用服务](../Application-Services.md)接口. * `Acme.BookStore.Application` 包含你的应用服务实现. 在本部分中,你将创建一个应用程序服务,使用ABP Framework的 `CrudAppService` 基类来获取,创建,更新和删除书籍. From 8364cabfccf581b6c892b637462b000e3b39102b Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Sun, 1 Nov 2020 19:06:06 +0300 Subject: [PATCH 074/108] EntityActionsColumn added. --- framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index bec51fe149..2b7e8421b8 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -15,6 +15,7 @@ using Volo.Abp.Application.Services; using Volo.Abp.AspNetCore.Components; using Volo.Abp.AspNetCore.Components.WebAssembly; using Volo.Abp.Authorization; +using Volo.Abp.BlazoriseUI.Components; using Volo.Abp.ObjectMapping; namespace Volo.Abp.BlazoriseUI @@ -188,6 +189,7 @@ namespace Volo.Abp.BlazoriseUI protected Validations CreateValidationsRef; protected Validations EditValidationsRef; protected List BreadcrumbItems = new List(2); + protected DataGridEntityActionsColumn EntityActionsColumn; protected string CreatePolicyName { get; set; } protected string UpdatePolicyName { get; set; } From b1d622ea02e78cb8f2f8f66c7e8a0f4572a16c88 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Sun, 1 Nov 2020 19:31:27 +0300 Subject: [PATCH 075/108] make required policy optional --- .../Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs index 6e98865297..a7680edc81 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityAction.razor.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.BlazoriseUI.Components { public partial class EntityAction : ComponentBase { - internal bool IsVisible; + internal bool IsVisible = true; [Parameter] public string Text { get; set; } @@ -44,7 +44,10 @@ namespace Volo.Abp.BlazoriseUI.Components { await base.OnInitializedAsync(); await SetDefaultValuesAsync(); - IsVisible = await AuthorizationService.IsGrantedAsync(RequiredPolicy); + if (!RequiredPolicy.IsNullOrEmpty()) + { + IsVisible = await AuthorizationService.IsGrantedAsync(RequiredPolicy); + } ParentActions.AddAction(this); } From 7f519e8a758db4cf14287e8759e68ffb2b86533e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 1 Nov 2020 21:13:12 +0300 Subject: [PATCH 076/108] Update Domain-Driven-Design.md --- docs/en/Domain-Driven-Design.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/en/Domain-Driven-Design.md b/docs/en/Domain-Driven-Design.md index ce33295492..bbf22eab13 100644 --- a/docs/en/Domain-Driven-Design.md +++ b/docs/en/Domain-Driven-Design.md @@ -19,8 +19,12 @@ ABP follows DDD principles and patterns to achieve a layered application model w - **Domain Layer**: Includes business objects and the core (domain) business rules. This is the heart of the application. - **Infrastructure Layer**: Provides generic technical capabilities that support higher layers mostly using 3rd-party libraries. +DDD mostly interest in the **Domain** and the **Application** layers, rather than the Infrastructure and the Presentation layers. + ## Contents +See the following documents to learn what ABP Framework provides to you to implement DDD in your project. + * **Domain Layer** * [Entities & Aggregate Roots](Entities.md) * Value Objects @@ -30,4 +34,4 @@ ABP follows DDD principles and patterns to achieve a layered application model w * **Application Layer** * [Application Services](Application-Services.md) * [Data Transfer Objects (DTOs)](Data-Transfer-Objects.md) - * Unit of Work \ No newline at end of file + * [Unit of Work](Unit-Of-Work.md) \ No newline at end of file From 700946270af5df367b2bc62ef6a2d42695ca37e5 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Sun, 1 Nov 2020 21:29:54 +0300 Subject: [PATCH 077/108] use datagrid entity actions column usage in modules. --- .../Pages/Identity/RoleManagement.razor | 117 ++++++++---------- .../Pages/Identity/RoleManagement.razor.cs | 16 +-- .../Pages/Identity/UserManagement.razor | 62 ++++------ .../Pages/Identity/UserManagement.razor.cs | 22 ++-- .../Volo.Abp.Identity.Blazor/_Imports.razor | 1 + .../TenantManagement/TenantManagement.razor | 81 ++++++------ .../TenantManagement.razor.cs | 43 ++++--- .../_Imports.razor | 1 + 8 files changed, 154 insertions(+), 189 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor index 4639f81be2..353bfa3b6b 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor @@ -1,5 +1,5 @@ @page "/identity/roles" -@attribute [Authorize( IdentityPermissions.Roles.Default )] +@attribute [Authorize(IdentityPermissions.Roles.Default)] @using Volo.Abp.Identity @using Microsoft.AspNetCore.Authorization @using Microsoft.Extensions.Localization @@ -14,7 +14,7 @@ @L["Roles"] - @if ( HasCreatePermission ) + @if (HasCreatePermission) { @@ -31,40 +31,33 @@ ShowPager="true" PageSize="PageSize"> - @if ( ShouldShowEntityActions ) - { - - - - - @L["Actions"] - - - @if ( HasUpdatePermission ) - { - @L["Edit"] - } - @if ( HasManagePermissionsPermission ) - { - @L["Permissions"] - } - @if ( HasDeletePermission ) - { - @L["Delete"] - } - - - - - } + + + + + + + + + - @(context.As().Name) - @if ( context.As().IsDefault ) + @(context.Name) + @if (context.IsDefault) { @L["DisplayName:IsDefault"] } - @if ( context.As().IsPublic ) + @if (context.IsPublic) { @L["DisplayName:IsPublic"] } @@ -74,42 +67,42 @@ @* ************************* CREATE MODAL ************************* *@ -@if ( HasCreatePermission ) +@if (HasCreatePermission) { - - - - - @L["NewRole"] - - - - - - - @L["DisplayName:RoleName"] - - - - - - - + + + + + @L["NewRole"] + + + + + - @L["DisplayName:IsDefault"] - @L["DisplayName:IsPublic"] + @L["DisplayName:RoleName"] + + + + + - - - - - - - - + + + @L["DisplayName:IsDefault"] + @L["DisplayName:IsPublic"] + + + + + + + + + } @* ************************* EDIT MODAL ************************* *@ -@if ( HasUpdatePermission ) +@if (HasUpdatePermission) { diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs index 04b7a1011d..f64615c1f0 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs @@ -13,11 +13,10 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity protected const string PermissionProviderName = "R"; protected PermissionManagementModal PermissionManagementModal; + protected string ManagePermissionsPolicyName; protected bool HasManagePermissionsPermission { get; set; } - protected bool ShouldShowEntityActions { get; set; } - public RoleManagementBase() { ObjectMapperContext = typeof(AbpIdentityBlazorModule); @@ -26,19 +25,12 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity CreatePolicyName = IdentityPermissions.Roles.Create; UpdatePolicyName = IdentityPermissions.Roles.Update; DeletePolicyName = IdentityPermissions.Roles.Delete; + ManagePermissionsPolicyName = IdentityPermissions.Roles.ManagePermissions; } - protected override async Task SetPermissionsAsync() + protected override string GetDeleteConfirmationMessage(IdentityRoleDto entity) { - await base.SetPermissionsAsync(); - - HasManagePermissionsPermission = await AuthorizationService.IsGrantedAsync( - IdentityPermissions.Roles.ManagePermissions - ); - - ShouldShowEntityActions = HasUpdatePermission || - HasDeletePermission || - HasManagePermissionsPermission; + return string.Format(L["RoleDeletionConfirmationMessage"], entity.Name); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index 93e0ccaa85..e5ad942275 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -1,5 +1,5 @@ @page "/identity/users" -@attribute [Authorize( IdentityPermissions.Users.Default )] +@attribute [Authorize(IdentityPermissions.Users.Default)] @using Microsoft.AspNetCore.Authorization @using Microsoft.Extensions.Localization @using Volo.Abp.Identity.Localization @@ -13,7 +13,7 @@

@L["Users"]

- @if ( HasCreatePermission ) + @if (HasCreatePermission) { @@ -30,33 +30,25 @@ ShowPager="true" PageSize="PageSize"> - @if ( ShouldShowEntityActions ) - { - - - - - @L["Actions"] - - - @if ( HasUpdatePermission ) - { - @L["Edit"] - } - @if ( HasManagePermissionsPermission ) - { - @L["Permissions"] - } - @if ( HasDeletePermission ) - { - - @L["Delete"] - } - - - - - } + + + + + + + + + @(context.As().UserName) @@ -76,7 +68,7 @@ @* ************************* CREATE MODAL ************************* *@ -@if ( HasCreatePermission ) +@if (HasCreatePermission) { @@ -159,9 +151,9 @@ - @if ( NewUserRoles != null ) + @if (NewUserRoles != null) { - @foreach ( var role in NewUserRoles ) + @foreach (var role in NewUserRoles) { @@ -183,7 +175,7 @@ } @* ************************* EDIT MODAL ************************* *@ -@if ( HasUpdatePermission ) +@if (HasUpdatePermission) { @@ -268,9 +260,9 @@ - @if ( EditUserRoles != null ) + @if (EditUserRoles != null) { - @foreach ( var role in EditUserRoles ) + @foreach (var role in EditUserRoles) { diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs index 0265bf89d1..303c511b80 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs @@ -24,8 +24,7 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity protected AssignedRoleViewModel[] EditUserRoles; - protected bool ShouldShowEntityActions { get; set; } - protected bool HasManagePermissionsPermission { get; set; } + protected string ManagePermissionsPolicyName; protected string CreateModalSelectedTab = DefaultSelectedTab; @@ -39,6 +38,7 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity CreatePolicyName = IdentityPermissions.Users.Create; UpdatePolicyName = IdentityPermissions.Users.Update; DeletePolicyName = IdentityPermissions.Users.Delete; + ManagePermissionsPolicyName = IdentityPermissions.Users.ManagePermissions; } protected override async Task OnInitializedAsync() @@ -48,19 +48,6 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity Roles = (await AppService.GetAssignableRolesAsync()).Items; } - protected override async Task SetPermissionsAsync() - { - await base.SetPermissionsAsync(); - - HasManagePermissionsPermission = await AuthorizationService.IsGrantedAsync( - IdentityPermissions.Users.ManagePermissions - ); - - ShouldShowEntityActions = HasUpdatePermission || - HasDeletePermission || - HasManagePermissionsPermission; - } - protected override async Task OnOpeningCreateModalAsync() { CreateModalSelectedTab = DefaultSelectedTab; @@ -104,6 +91,11 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity return base.OnUpdatingEntityAsync(); } + + protected override string GetDeleteConfirmationMessage(IdentityUserDto entity) + { + return string.Format(L["UserDeletionConfirmationMessage"], entity.UserName); + } } public class AssignedRoleViewModel diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/_Imports.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/_Imports.razor index bcb4626f1f..51955030c9 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/_Imports.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/_Imports.razor @@ -2,5 +2,6 @@ @using Volo.Abp.AspNetCore.Components.WebAssembly @using Microsoft.AspNetCore.Components.Forms @using Volo.Abp.BlazoriseUI +@using Volo.Abp.BlazoriseUI.Components @using Blazorise @using Blazorise.DataGrid diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor index 0b2f60d23b..c777bcb50b 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor @@ -6,7 +6,6 @@ @using Volo.Abp.FeatureManagement.Blazor.Components @inherits TenantManagementBase @inject IStringLocalizer L - @* ************************* PAGE HEADER ************************* *@ @@ -30,40 +29,32 @@ ShowPager="true" PageSize="PageSize"> - @if (ShouldShowEntityActions) - { - - - - - @L["Actions"] - - - @if (HasUpdatePermission) - { - @L["Edit"] - } - @if (HasManageConnectionStringsPermission) - { - @L["ConnectionStrings"] - } - @if (HasManageFeaturesPermission) - { - @L["Features"] - } - @if (HasDeletePermission) - { - - @L["Delete"] - } - - - - - } + + + + + + + + + + - @(context.As().Name) + @(context.Name) @@ -73,25 +64,25 @@ @if (HasCreatePermission) { - + @L["NewTenant"] - + @L["TenantName"] - + @L["DisplayName:AdminEmailAddress"] - + @L["DisplayName:AdminPassword"] - + @@ -107,17 +98,17 @@ @if (HasUpdatePermission) { - + @L["Edit"] - + @L["TenantName"] - + @@ -133,11 +124,11 @@ @if (HasUpdatePermission) { - + @L["ConnectionStrings"] - + @@ -149,7 +140,7 @@ { @L["DisplayName:DefaultConnectionString"] - + } @@ -164,5 +155,5 @@ @if (HasManageFeaturesPermission) { - + } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs index f9dd57422e..9106c32c78 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs @@ -7,21 +7,22 @@ using Volo.Abp.FeatureManagement.Blazor.Components; namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement { - public abstract class TenantManagementBase + public abstract class TenantManagementBase : AbpCrudPageBase { protected const string FeatureProviderName = "T"; - - protected bool ShouldShowEntityActions; + protected bool HasManageConnectionStringsPermission; protected bool HasManageFeaturesPermission; + protected string ManageConnectionStringsPolicyName; + protected string ManageFeaturesPolicyName; protected FeatureManagementModal FeatureManagementModal; - + protected Modal ManageConnectionStringModal; protected TenantInfoModel TenantInfo; - + public TenantManagementBase() { ObjectMapperContext = typeof(AbpTenantManagementBlazorModule); @@ -29,37 +30,34 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement CreatePolicyName = TenantManagementPermissions.Tenants.Create; UpdatePolicyName = TenantManagementPermissions.Tenants.Update; DeletePolicyName = TenantManagementPermissions.Tenants.Delete; - + ManageConnectionStringsPolicyName = TenantManagementPermissions.Tenants.ManageConnectionStrings; + ManageFeaturesPolicyName = TenantManagementPermissions.Tenants.ManageFeatures; + TenantInfo = new TenantInfoModel(); } - + protected override async Task SetPermissionsAsync() { await base.SetPermissionsAsync(); - HasManageConnectionStringsPermission = await AuthorizationService.IsGrantedAsync(TenantManagementPermissions.Tenants.ManageConnectionStrings); - HasManageFeaturesPermission = await AuthorizationService.IsGrantedAsync(TenantManagementPermissions.Tenants.ManageFeatures); - - ShouldShowEntityActions = HasUpdatePermission || - HasDeletePermission || - HasManageConnectionStringsPermission || - HasManageFeaturesPermission; + HasManageConnectionStringsPermission = await AuthorizationService.IsGrantedAsync(ManageConnectionStringsPolicyName); + HasManageFeaturesPermission = await AuthorizationService.IsGrantedAsync(ManageFeaturesPolicyName); } protected virtual async Task OpenEditConnectionStringModalAsync(Guid id) { var tenantConnectionString = await AppService.GetDefaultConnectionStringAsync(id); - + TenantInfo = new TenantInfoModel { Id = id, DefaultConnectionString = tenantConnectionString, UseSharedDatabase = tenantConnectionString.IsNullOrWhiteSpace() }; - + ManageConnectionStringModal.Show(); } - + protected virtual Task CloseEditConnectionStringModal() { ManageConnectionStringModal.Hide(); @@ -68,7 +66,7 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement protected virtual async Task UpdateConnectionStringAsync() { - await CheckPolicyAsync(TenantManagementPermissions.Tenants.ManageConnectionStrings); + await CheckPolicyAsync(ManageConnectionStringsPolicyName); if (TenantInfo.UseSharedDatabase || TenantInfo.DefaultConnectionString.IsNullOrWhiteSpace()) { @@ -78,9 +76,14 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement { await AppService.UpdateDefaultConnectionStringAsync(TenantInfo.Id, TenantInfo.DefaultConnectionString); } - + ManageConnectionStringModal.Hide(); } + + protected override string GetDeleteConfirmationMessage(TenantDto entity) + { + return string.Format(L["TenantDeletionConfirmationMessage"], entity.Name); + } } public class TenantInfoModel @@ -88,7 +91,7 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement public Guid Id { get; set; } public bool UseSharedDatabase { get; set; } - + public string DefaultConnectionString { get; set; } } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/_Imports.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/_Imports.razor index bcb4626f1f..51955030c9 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/_Imports.razor +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/_Imports.razor @@ -2,5 +2,6 @@ @using Volo.Abp.AspNetCore.Components.WebAssembly @using Microsoft.AspNetCore.Components.Forms @using Volo.Abp.BlazoriseUI +@using Volo.Abp.BlazoriseUI.Components @using Blazorise @using Blazorise.DataGrid From abbfb3a6eec589fb9ffc0f0510a391c29a52643d Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Sun, 1 Nov 2020 21:37:51 +0300 Subject: [PATCH 078/108] blazorise.snackbar package added. --- .../MyCompanyName.MyProjectName.Blazor.csproj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index 6a3f216d47..b3da53f3a4 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -1,4 +1,4 @@ - + net5.0 @@ -9,6 +9,7 @@ + From 151414208fa7fd137313aa9ef76efa2ad2b717b6 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Sun, 1 Nov 2020 22:22:57 +0300 Subject: [PATCH 079/108] Remove EditForm from feature management modal --- .../Components/FeatureManagementModal.razor | 139 +++++++++--------- 1 file changed, 67 insertions(+), 72 deletions(-) diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor index 5edd635564..02fdd768a9 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor @@ -1,6 +1,5 @@ @using Volo.Abp.Validation.StringValues @using Microsoft.Extensions.Localization -@using Microsoft.AspNetCore.Components.Forms @inherits AbpFeatureManagementComponentBase @@ -12,84 +11,80 @@ - - @if (Groups == null) - { - @L["NoFeatureFoundMessage"] - } - else - { - - - @foreach (var group in Groups) - { - - @group.DisplayName - - } - - - @foreach (var group in Groups) - { - -

@group.DisplayName

- - @foreach (var feature in group.Features) + @if (Groups == null) + { + @L["NoFeatureFoundMessage"] + } + else + { + + + @foreach (var group in Groups) + { + + @group.DisplayName + + } + + + @foreach (var group in Groups) + { + +

@group.DisplayName

+ + @foreach (var feature in group.Features) + { + var disabled = IsDisabled(feature.Provider.Name); + + if (feature.ValueType is FreeTextStringValueType) + { + + @feature.DisplayName + + @if (feature.Description != null) + { + @feature.Description + } + + } + + if (feature.ValueType is SelectionStringValueType) { - var disabled = IsDisabled(feature.Provider.Name); - - if (feature.ValueType is FreeTextStringValueType) - { - - @feature.DisplayName - - @if (feature.Description != null) + var items = ((SelectionStringValueType)feature.ValueType).ItemSource.Items; + + + @feature.DisplayName + - @foreach (var item in items) - { - - @CreateStringLocalizer(item.DisplayText.ResourceName).GetString(item.DisplayText.Name) - - } - - - } - - if (feature.ValueType is ToggleStringValueType) - { - - @feature.DisplayName - - } + + + } + + if (feature.ValueType is ToggleStringValueType) + { + + @feature.DisplayName + } - -
- } -
-
- } -
+ } + +
+ } + + + } - +
\ No newline at end of file From 60d9f1c701e6708c143a7fd0f2411cc6bb3e6e2c Mon Sep 17 00:00:00 2001 From: Ahmet Date: Sun, 1 Nov 2020 23:13:00 +0300 Subject: [PATCH 080/108] Update TenantManagement.razor --- .../TenantManagement/TenantManagement.razor | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor index 49292b7720..107522c8e0 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor @@ -52,7 +52,7 @@ } @if (HasDeletePermission) { - + @L["Delete"] } @@ -72,25 +72,25 @@ @if (HasCreatePermission) { - + @L["NewTenant"] - + @L["TenantName"] - + @L["DisplayName:AdminEmailAddress"] - + @L["DisplayName:AdminPassword"] - + @@ -106,17 +106,17 @@ @if (HasUpdatePermission) { - + @L["Edit"] - + @L["TenantName"] - + @@ -132,11 +132,11 @@ @if (HasUpdatePermission) { - + @L["ConnectionStrings"] - + @@ -148,7 +148,7 @@ { @L["DisplayName:DefaultConnectionString"] - + } @@ -163,5 +163,5 @@ @if (HasManageFeaturesPermission) { - + } \ No newline at end of file From ce050cd71c550376279595d15f251b09407b5a18 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 2 Nov 2020 09:47:25 +0800 Subject: [PATCH 081/108] Change override async to async override --- docs/en/Application-Services.md | 6 +++--- docs/en/Background-Workers.md | 2 +- docs/en/Tutorials/Part-10.md | 2 +- docs/en/Tutorials/Part-5.md | 2 +- docs/en/Tutorials/Part-9.md | 2 +- docs/zh-Hans/Application-Services.md | 4 ++-- docs/zh-Hans/Background-Workers.md | 2 +- .../Themes/Basic/LanguageSwitch.razor | 2 +- .../Themes/Basic/LoginDisplay.razor.cs | 2 +- .../Themes/Basic/NavToolbar.razor.cs | 2 +- .../Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs | 2 +- .../Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs | 2 +- .../AspNetCore/SecurityLog/AspNetCoreSecurityLogManager.cs | 2 +- .../Volo/Abp/Authorization/PermissionRequirementHandler.cs | 2 +- .../Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs | 2 +- framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs | 2 +- .../Castle/DynamicProxy/CastleAsyncAbpInterceptorAdapter.cs | 4 ++-- .../Volo/Abp/Application/Services/CrudAppService.cs | 4 ++-- .../Volo/Abp/Application/Services/ReadOnlyAppService.cs | 2 +- .../Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs | 2 +- .../Volo/Abp/MailKit/MailKitSmtpEmailSender.cs | 2 +- .../Volo/Abp/TestApp/Application/DistrictAppService.cs | 4 ++-- .../Volo.Abp.Account.Blazor/Pages/Account/Manage.razor.cs | 2 +- .../Volo/Blogging/Comments/CommentAuthorizationHandler.cs | 2 +- .../Volo/Blogging/Posts/PostAuthorizationHandler.cs | 2 +- .../Pages/Identity/RoleManagement.razor.cs | 2 +- .../Pages/Identity/UserManagement.razor.cs | 6 +++--- .../IdentityServer/Tokens/TokenCleanupBackgroundWorker.cs | 2 +- .../Pages/SettingManagement/SettingManagement.razor.cs | 2 +- .../Pages/TenantManagement/TenantManagement.razor.cs | 2 +- .../Pages/Index.razor | 2 +- templates/wpf/src/MyCompanyName.MyProjectName/App.xaml.cs | 4 ++-- 32 files changed, 41 insertions(+), 41 deletions(-) diff --git a/docs/en/Application-Services.md b/docs/en/Application-Services.md index f48ff9cb5b..7fe9825f2a 100644 --- a/docs/en/Application-Services.md +++ b/docs/en/Application-Services.md @@ -342,12 +342,12 @@ public class DistrictAppService { } - protected override async Task DeleteByIdAsync(DistrictKey id) + protected async override Task DeleteByIdAsync(DistrictKey id) { await Repository.DeleteAsync(d => d.CityId == id.CityId && d.Name == id.Name); } - protected override async Task GetEntityByIdAsync(DistrictKey id) + protected async override Task GetEntityByIdAsync(DistrictKey id) { return await AsyncQueryableExecuter.FirstOrDefaultAsync( Repository.Where(d => d.CityId == id.CityId && d.Name == id.Name) @@ -400,7 +400,7 @@ public class MyPeopleAppService : CrudAppService { } - protected override async Task CheckDeletePolicyAsync() + protected async override Task CheckDeletePolicyAsync() { await AuthorizationService.CheckAsync("..."); } diff --git a/docs/en/Background-Workers.md b/docs/en/Background-Workers.md index c8a617efec..2e1b9d2a90 100644 --- a/docs/en/Background-Workers.md +++ b/docs/en/Background-Workers.md @@ -54,7 +54,7 @@ public class PassiveUserCheckerWorker : AsyncPeriodicBackgroundWorkerBase Timer.Period = 600000; //10 minutes } - protected override async Task DoWorkAsync( + protected async override Task DoWorkAsync( PeriodicBackgroundWorkerContext workerContext) { Logger.LogInformation("Starting: Setting status of inactive users..."); diff --git a/docs/en/Tutorials/Part-10.md b/docs/en/Tutorials/Part-10.md index 98c1aa91ac..e161a267cc 100644 --- a/docs/en/Tutorials/Part-10.md +++ b/docs/en/Tutorials/Part-10.md @@ -1100,7 +1100,7 @@ The final `@code` block should be the following: //ADDED A NEW FIELD IReadOnlyList authorList = Array.Empty(); - protected override async Task OnInitializedAsync() + protected async override Task OnInitializedAsync() { await base.OnInitializedAsync(); diff --git a/docs/en/Tutorials/Part-5.md b/docs/en/Tutorials/Part-5.md index a293ec586e..f07356e892 100644 --- a/docs/en/Tutorials/Part-5.md +++ b/docs/en/Tutorials/Part-5.md @@ -487,7 +487,7 @@ Add the following code block to the end of the `Books.razor` file: bool canEditBook; bool canDeleteBook; - protected override async Task OnInitializedAsync() + protected async override Task OnInitializedAsync() { await base.OnInitializedAsync(); diff --git a/docs/en/Tutorials/Part-9.md b/docs/en/Tutorials/Part-9.md index 374efff2b4..fce94633d2 100644 --- a/docs/en/Tutorials/Part-9.md +++ b/docs/en/Tutorials/Part-9.md @@ -1038,7 +1038,7 @@ namespace Acme.BookStore.Blazor.Pages EditingAuthor = new UpdateAuthorDto(); } - protected override async Task OnInitializedAsync() + protected async override Task OnInitializedAsync() { await SetPermissionsAsync(); await GetAuthorsAsync(); diff --git a/docs/zh-Hans/Application-Services.md b/docs/zh-Hans/Application-Services.md index 6bb18daa37..e68217a94d 100644 --- a/docs/zh-Hans/Application-Services.md +++ b/docs/zh-Hans/Application-Services.md @@ -353,12 +353,12 @@ public class DistrictAppService { } - protected override async Task DeleteByIdAsync(DistrictKey id) + protected async override Task DeleteByIdAsync(DistrictKey id) { await Repository.DeleteAsync(d => d.CityId == id.CityId && d.Name == id.Name); } - protected override async Task GetEntityByIdAsync(DistrictKey id) + protected async override Task GetEntityByIdAsync(DistrictKey id) { return await AsyncQueryableExecuter.FirstOrDefaultAsync( Repository.Where(d => d.CityId == id.CityId && d.Name == id.Name) diff --git a/docs/zh-Hans/Background-Workers.md b/docs/zh-Hans/Background-Workers.md index 1daedde384..26bafed2da 100644 --- a/docs/zh-Hans/Background-Workers.md +++ b/docs/zh-Hans/Background-Workers.md @@ -54,7 +54,7 @@ public class PassiveUserCheckerWorker : AsyncPeriodicBackgroundWorkerBase Timer.Period = 600000; //10 minutes } - protected override async Task DoWorkAsync( + protected async override Task DoWorkAsync( PeriodicBackgroundWorkerContext workerContext) { Logger.LogInformation("Starting: Setting status of inactive users..."); diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor index 8c7b348f7d..2f31e57cf7 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor @@ -21,7 +21,7 @@ private IReadOnlyList _otherLanguages; private LanguageInfo _currentLanguage; - protected override async Task OnInitializedAsync() + protected async override Task OnInitializedAsync() { var selectedLanguageName = await JsRuntime.InvokeAsync( "localStorage.getItem", diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs index 17718dbcfb..a16ae0c597 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic protected string ServerUrl { get; set; } protected string ServerAccountUrl { get; set; } - protected override async Task OnInitializedAsync() + protected async override Task OnInitializedAsync() { Menu = await MenuManager.GetAsync(StandardMenus.User); diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor.cs index 6fddf263b3..33044282f9 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic private List ToolbarItemRenders { get; set; } = new List(); - protected override async Task OnInitializedAsync() + protected async override Task OnInitializedAsync() { var toolbar = await ToolbarManager.GetAsync(StandardToolbars.Main); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs index 6efbb793e7..9e4e77a6dd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs @@ -38,7 +38,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers ); } - protected override async Task> GetBundleFilesAsync(string bundleName) + protected async override Task> GetBundleFilesAsync(string bundleName) { return await BundleManager.GetScriptBundleFilesAsync(bundleName); } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs index 8612e4f8b4..a9d9b54fca 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs @@ -38,7 +38,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers ); } - protected override async Task> GetBundleFilesAsync(string bundleName) + protected async override Task> GetBundleFilesAsync(string bundleName) { return await BundleManager.GetStyleBundleFilesAsync(bundleName); } diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/SecurityLog/AspNetCoreSecurityLogManager.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/SecurityLog/AspNetCoreSecurityLogManager.cs index f0fc0aa347..b518c5abbb 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/SecurityLog/AspNetCoreSecurityLogManager.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/SecurityLog/AspNetCoreSecurityLogManager.cs @@ -48,7 +48,7 @@ namespace Volo.Abp.AspNetCore.SecurityLog WebClientInfoProvider = webClientInfoProvider; } - protected override async Task CreateAsync() + protected async override Task CreateAsync() { var securityLogInfo = await base.CreateAsync(); diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/PermissionRequirementHandler.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/PermissionRequirementHandler.cs index d4ec7c1d3c..b0446f5602 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/PermissionRequirementHandler.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/PermissionRequirementHandler.cs @@ -13,7 +13,7 @@ namespace Volo.Abp.Authorization _permissionChecker = permissionChecker; } - protected override async Task HandleRequirementAsync( + protected async override Task HandleRequirementAsync( AuthorizationHandlerContext context, PermissionRequirement requirement) { diff --git a/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs b/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs index fdf0b8c90d..62e79010cc 100644 --- a/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs +++ b/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs @@ -30,7 +30,7 @@ namespace Volo.Abp.BackgroundJobs Timer.Period = WorkerOptions.JobPollPeriod; } - protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) + protected async override Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) { var store = workerContext.ServiceProvider.GetRequiredService(); diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index 5154c88cd1..a7c906f41c 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -202,7 +202,7 @@ namespace Volo.Abp.BlazoriseUI EditingEntity = new TUpdateViewModel(); } - protected override async Task OnInitializedAsync() + protected async override Task OnInitializedAsync() { await SetBreadcrumbItemsAsync(); await SetPermissionsAsync(); diff --git a/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAsyncAbpInterceptorAdapter.cs b/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAsyncAbpInterceptorAdapter.cs index 8a0c4fdd45..6d08e8f6a6 100644 --- a/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAsyncAbpInterceptorAdapter.cs +++ b/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAsyncAbpInterceptorAdapter.cs @@ -15,14 +15,14 @@ namespace Volo.Abp.Castle.DynamicProxy _abpInterceptor = abpInterceptor; } - protected override async Task InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func proceed) + protected async override Task InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func proceed) { await _abpInterceptor.InterceptAsync( new CastleAbpMethodInvocationAdapter(invocation, proceedInfo, proceed) ); } - protected override async Task InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func> proceed) + protected async override Task InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func> proceed) { var adapter = new CastleAbpMethodInvocationAdapterWithReturnValue(invocation, proceedInfo, proceed); diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/CrudAppService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/CrudAppService.cs index fffde41ba7..111359d7f3 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/CrudAppService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/CrudAppService.cs @@ -80,12 +80,12 @@ namespace Volo.Abp.Application.Services Repository = repository; } - protected override async Task DeleteByIdAsync(TKey id) + protected async override Task DeleteByIdAsync(TKey id) { await Repository.DeleteAsync(id); } - protected override async Task GetEntityByIdAsync(TKey id) + protected async override Task GetEntityByIdAsync(TKey id) { return await Repository.GetAsync(id); } diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ReadOnlyAppService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ReadOnlyAppService.cs index d99928126c..c585b2ac38 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ReadOnlyAppService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ReadOnlyAppService.cs @@ -46,7 +46,7 @@ namespace Volo.Abp.Application.Services Repository = repository; } - protected override async Task GetEntityByIdAsync(TKey id) + protected async override Task GetEntityByIdAsync(TKey id) { return await Repository.GetAsync(id); } diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs index 24ca7d6a34..710febff9d 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs @@ -67,7 +67,7 @@ namespace Volo.Abp.Emailing.Smtp } } - protected override async Task SendEmailAsync(MailMessage mail) + protected async override Task SendEmailAsync(MailMessage mail) { using (var smtpClient = await BuildClientAsync()) { diff --git a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs index 0fb93e8f40..d089f7b684 100644 --- a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs +++ b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.MailKit SmtpConfiguration = smtpConfiguration; } - protected override async Task SendEmailAsync(MailMessage mail) + protected async override Task SendEmailAsync(MailMessage mail) { using (var client = await BuildClientAsync()) { diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/DistrictAppService.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/DistrictAppService.cs index f7e7fde5e2..772db07e72 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/DistrictAppService.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/DistrictAppService.cs @@ -15,12 +15,12 @@ namespace Volo.Abp.TestApp.Application { } - protected override async Task DeleteByIdAsync(DistrictKey id) + protected async override Task DeleteByIdAsync(DistrictKey id) { await Repository.DeleteAsync(d => d.CityId == id.CityId && d.Name == id.Name); } - protected override async Task GetEntityByIdAsync(DistrictKey id) + protected async override Task GetEntityByIdAsync(DistrictKey id) { return await AsyncExecuter.FirstOrDefaultAsync( Repository.Where(d => d.CityId == id.CityId && d.Name == id.Name) diff --git a/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/Manage.razor.cs b/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/Manage.razor.cs index 7dfee0da53..4be9f9fbe7 100644 --- a/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/Manage.razor.cs +++ b/modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/Manage.razor.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.Account.Blazor.Pages.Account protected PersonalInfoModel PersonalInfoModel; - protected override async Task OnInitializedAsync() + protected async override Task OnInitializedAsync() { await GetUserInformations(); } diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Comments/CommentAuthorizationHandler.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Comments/CommentAuthorizationHandler.cs index bd6dcdf8c5..9771d136b3 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Comments/CommentAuthorizationHandler.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Comments/CommentAuthorizationHandler.cs @@ -15,7 +15,7 @@ namespace Volo.Blogging.Comments _permissionChecker = permissionChecker; } - protected override async Task HandleRequirementAsync( + protected async override Task HandleRequirementAsync( AuthorizationHandlerContext context, OperationAuthorizationRequirement requirement, Comment resource) diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAuthorizationHandler.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAuthorizationHandler.cs index 9d2d0e9e9f..7c6033f4b2 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAuthorizationHandler.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAuthorizationHandler.cs @@ -15,7 +15,7 @@ namespace Volo.Blogging.Posts _permissionChecker = permissionChecker; } - protected override async Task HandleRequirementAsync( + protected async override Task HandleRequirementAsync( AuthorizationHandlerContext context, OperationAuthorizationRequirement requirement, Post resource) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs index 2a77f22a92..c316125ad5 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs @@ -27,7 +27,7 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity DeletePolicyName = IdentityPermissions.Roles.Delete; } - protected override async Task SetPermissionsAsync() + protected async override Task SetPermissionsAsync() { await base.SetPermissionsAsync(); diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs index 423f452cd8..93f1536fca 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs @@ -40,14 +40,14 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity DeletePolicyName = IdentityPermissions.Users.Delete; } - protected override async Task OnInitializedAsync() + protected async override Task OnInitializedAsync() { await base.OnInitializedAsync(); Roles = (await AppService.GetAssignableRolesAsync()).Items; } - protected override async Task SetPermissionsAsync() + protected async override Task SetPermissionsAsync() { await base.SetPermissionsAsync(); @@ -80,7 +80,7 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity return base.CreateEntityAsync(); } - protected override async Task OpenEditModalAsync(Guid id) + protected async override Task OpenEditModalAsync(Guid id) { EditModalSelectedTab = DefaultSelectedTab; diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupBackgroundWorker.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupBackgroundWorker.cs index e910a3b30f..a7ad09d191 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupBackgroundWorker.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupBackgroundWorker.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.IdentityServer.Tokens timer.Period = Options.CleanupPeriod; } - protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) + protected async override Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) { await workerContext .ServiceProvider diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs index 3c4775fd02..749e1449a5 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs @@ -29,7 +29,7 @@ namespace Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement protected string SelectedGroup; protected List BreadcrumbItems = new List(); - protected override async Task OnInitializedAsync() + protected async override Task OnInitializedAsync() { SettingComponentCreationContext = new SettingComponentCreationContext(ServiceProvider); diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs index f9dd57422e..516dc26730 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs @@ -33,7 +33,7 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement TenantInfo = new TenantInfoModel(); } - protected override async Task SetPermissionsAsync() + protected async override Task SetPermissionsAsync() { await base.SetPermissionsAsync(); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/Pages/Index.razor b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/Pages/Index.razor index 66c4949ac9..1140cddeff 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/Pages/Index.razor +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/Pages/Index.razor @@ -49,7 +49,7 @@ { private IEnumerable _claims; - protected override async Task OnInitializedAsync() + protected async override Task OnInitializedAsync() { var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); if (authState.User.Identity.IsAuthenticated) diff --git a/templates/wpf/src/MyCompanyName.MyProjectName/App.xaml.cs b/templates/wpf/src/MyCompanyName.MyProjectName/App.xaml.cs index b76f8832e4..6ab1bd8c86 100644 --- a/templates/wpf/src/MyCompanyName.MyProjectName/App.xaml.cs +++ b/templates/wpf/src/MyCompanyName.MyProjectName/App.xaml.cs @@ -34,7 +34,7 @@ namespace MyCompanyName.MyProjectName _application = _host.Services.GetService(); } - protected override async void OnStartup(StartupEventArgs e) + protected async override void OnStartup(StartupEventArgs e) { Log.Logger = new LoggerConfiguration() #if DEBUG @@ -66,7 +66,7 @@ namespace MyCompanyName.MyProjectName } } - protected override async void OnExit(ExitEventArgs e) + protected async override void OnExit(ExitEventArgs e) { _application.Shutdown(); await _host.StopAsync(); From 199e930c749e50a932bab4a3550c752233a1dc07 Mon Sep 17 00:00:00 2001 From: Mehmet Erim <34455572+mehmet-erim@users.noreply.github.com> Date: Mon, 2 Nov 2020 08:42:13 +0300 Subject: [PATCH 082/108] docs: fix file name in Component-Replacement.md --- docs/en/UI/Angular/Component-Replacement.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/Angular/Component-Replacement.md b/docs/en/UI/Angular/Component-Replacement.md index 577129e139..cf0041ab72 100644 --- a/docs/en/UI/Angular/Component-Replacement.md +++ b/docs/en/UI/Angular/Component-Replacement.md @@ -45,7 +45,7 @@ Run the following command to generate a layout in `angular` folder: yarn ng generate component my-application-layout ``` -Add the following code in your layout template (`my-layout.component.html`) where you want the page to be loaded. +Add the following code in your layout template (`my-application-layout.component.html`) where you want the page to be loaded. ```html From 8a5e639a358a7baa48887a59f3d05ab8820795d0 Mon Sep 17 00:00:00 2001 From: Mehmet Erim <34455572+mehmet-erim@users.noreply.github.com> Date: Mon, 2 Nov 2020 08:43:25 +0300 Subject: [PATCH 083/108] Update Component-Replacement.md --- docs/zh-Hans/UI/Angular/Component-Replacement.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/zh-Hans/UI/Angular/Component-Replacement.md b/docs/zh-Hans/UI/Angular/Component-Replacement.md index 221ac6775a..2c37a5a2e7 100644 --- a/docs/zh-Hans/UI/Angular/Component-Replacement.md +++ b/docs/zh-Hans/UI/Angular/Component-Replacement.md @@ -49,7 +49,7 @@ export class AppComponent { yarn ng generate component my-application-layout ``` -在你的布局模板(`my-layout.component.html`)中添加以下代码: +在你的布局模板(`my-application-layout.component.html`)中添加以下代码: ```html @@ -543,4 +543,4 @@ export class AppComponent implements OnInit { ## 下一步是什么? -- [自定义设置页面](./Custom-Setting-Page.md) \ No newline at end of file +- [自定义设置页面](./Custom-Setting-Page.md) From d7c474f0242211e52727ef308f32bab905cc53df Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 2 Nov 2020 10:02:45 +0300 Subject: [PATCH 084/108] Update Volo.Abp.Account.Blazor.csproj --- .../Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.csproj | 6 ------ 1 file changed, 6 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.csproj b/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.csproj index 64633f0d25..727a49be5c 100644 --- a/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.csproj +++ b/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.csproj @@ -17,10 +17,4 @@ - - - true - - - From 4fbe8d34f10a7ed24ae349209323a0c75920c938 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Mon, 2 Nov 2020 10:01:32 +0100 Subject: [PATCH 085/108] Add null check for validations component --- .../Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs | 22 ++++--------------- 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index eb9cab5a73..18ff4bf7a1 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -281,9 +281,7 @@ namespace Volo.Abp.BlazoriseUI protected virtual async Task OpenCreateModalAsync() { - await OnOpeningCreateModalAsync(); - - CreateValidationsRef.ClearAll(); + CreateValidationsRef?.ClearAll(); await CheckCreatePolicyAsync(); @@ -296,11 +294,6 @@ namespace Volo.Abp.BlazoriseUI CreateModal.Show(); } - protected virtual Task OnOpeningCreateModalAsync() - { - return Task.CompletedTask; - } - protected virtual Task CloseCreateModalAsync() { CreateModal.Hide(); @@ -309,9 +302,7 @@ namespace Volo.Abp.BlazoriseUI protected virtual async Task OpenEditModalAsync(TKey id) { - await OnOpeningEditModalAsync(id); - - EditValidationsRef.ClearAll(); + EditValidationsRef?.ClearAll(); await CheckUpdatePolicyAsync(); @@ -325,11 +316,6 @@ namespace Volo.Abp.BlazoriseUI EditModal.Show(); } - protected virtual Task OnOpeningEditModalAsync(TKey id) - { - return Task.CompletedTask; - } - protected virtual TUpdateViewModel MapToEditingEntity(TGetOutputDto entityDto) { return ObjectMapper.Map(entityDto); @@ -363,7 +349,7 @@ namespace Volo.Abp.BlazoriseUI protected virtual async Task CreateEntityAsync() { - if (CreateValidationsRef.ValidateAll()) + if (CreateValidationsRef?.ValidateAll() ?? false) { await OnCreatingEntityAsync(); @@ -390,7 +376,7 @@ namespace Volo.Abp.BlazoriseUI protected virtual async Task UpdateEntityAsync() { - if (EditValidationsRef.ValidateAll()) + if (EditValidationsRef?.ValidateAll() ?? false) { await OnUpdatingEntityAsync(); From 895a94d15994a0c902f4e75ca81cd5b9e434e878 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Mon, 2 Nov 2020 10:01:57 +0100 Subject: [PATCH 086/108] Removed on OnOpeningCreateModalAsync and OnOpeningEditModalAsync --- .../Pages/Identity/UserManagement.razor.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs index b47998f55d..e905215616 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs @@ -61,7 +61,7 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity HasManagePermissionsPermission; } - protected override async Task OnOpeningCreateModalAsync() + protected override Task OpenCreateModalAsync() { CreateModalSelectedTab = DefaultSelectedTab; @@ -71,7 +71,7 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity IsAssigned = x.IsDefault }).ToArray(); - await base.OnOpeningCreateModalAsync(); + return base.OpenCreateModalAsync(); } protected override Task OnCreatingEntityAsync() @@ -94,7 +94,7 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity IsAssigned = userRoleNames.Contains(x.Name) }).ToArray(); - await base.OnOpeningEditModalAsync(id); + await base.OpenEditModalAsync(id); } protected override Task OnUpdatingEntityAsync() From 6b6ff5f6bc720108b79516872a8b21ecad299d4c Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Mon, 2 Nov 2020 12:46:14 +0300 Subject: [PATCH 087/108] build break fix. --- .../Pages/Identity/UserManagement.razor.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs index bd1ac19814..647246b954 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs @@ -48,7 +48,8 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity Roles = (await AppService.GetAssignableRolesAsync()).Items; } - protected override Task OnOpeningCreateModalAsync() + + protected override Task OpenCreateModalAsync() { CreateModalSelectedTab = DefaultSelectedTab; From acfccff7ce09c1b26d41cabbfb474cac77d57fbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 2 Nov 2020 13:45:08 +0300 Subject: [PATCH 088/108] Revert "Blazorise snackbar package added." --- .../MyCompanyName.MyProjectName.Blazor.csproj | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index b3da53f3a4..6a3f216d47 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -1,4 +1,4 @@ - + net5.0 @@ -9,7 +9,6 @@ - From f447295fb17b301f7847e0899572148fe8d8806d Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 2 Nov 2020 14:24:28 +0300 Subject: [PATCH 089/108] Update AbpFeatureManagementComponentBase.cs --- .../AbpFeatureManagementComponentBase.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/AbpFeatureManagementComponentBase.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/AbpFeatureManagementComponentBase.cs index dac2254ed0..5cb4961072 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/AbpFeatureManagementComponentBase.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/AbpFeatureManagementComponentBase.cs @@ -3,9 +3,9 @@ using Volo.Abp.FeatureManagement.Localization; namespace Volo.Abp.FeatureManagement.Blazor { - public class AbpFeatureManagementComponentBase : AbpComponentBase + public abstract class AbpFeatureManagementComponentBase : AbpComponentBase { - public AbpFeatureManagementComponentBase() + protected AbpFeatureManagementComponentBase() { LocalizationResource = typeof(AbpFeatureManagementResource); } From aaeaf84937a2029efd01f6ee9f0e762c436541a8 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 2 Nov 2020 14:25:03 +0300 Subject: [PATCH 090/108] Update AbpAccountComponentBase.cs --- .../src/Volo.Abp.Account.Blazor/AbpAccountComponentBase.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Blazor/AbpAccountComponentBase.cs b/modules/account/src/Volo.Abp.Account.Blazor/AbpAccountComponentBase.cs index 61e3890ffd..d41367d485 100644 --- a/modules/account/src/Volo.Abp.Account.Blazor/AbpAccountComponentBase.cs +++ b/modules/account/src/Volo.Abp.Account.Blazor/AbpAccountComponentBase.cs @@ -3,9 +3,9 @@ using Volo.Abp.AspNetCore.Components; namespace Volo.Abp.Account.Blazor { - public class AbpAccountComponentBase : AbpComponentBase + public abstract class AbpAccountComponentBase : AbpComponentBase { - public AbpAccountComponentBase() + protected AbpAccountComponentBase() { LocalizationResource = typeof(AccountResource); ObjectMapperContext = typeof(AbpAccountBlazorModule); From 2c36a37933c7824974c966d696048a6930047ddb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 2 Nov 2020 15:21:27 +0300 Subject: [PATCH 091/108] Move notification/message API to Volo.Abp.AspNetCore.Components --- .../WebAssembly/{ => Messages}/SimpleUiMessageService.cs | 2 +- .../Volo/Abp/AspNetCore/Components/AbpComponentBase.cs | 7 +++++++ .../AspNetCore/Components/Messages}/IUiMessageService.cs | 0 .../AspNetCore/Components/Messages}/UiMessageEventArgs.cs | 0 .../AspNetCore/Components/Messages}/UiMessageOptions.cs | 0 .../Abp/AspNetCore/Components/Messages}/UiMessageType.cs | 0 .../Components/Notifications}/IUiNotificationService.cs | 0 .../Components/Notifications}/NullUiNotificationService.cs | 0 .../Components/Notifications}/UiNotificationEventArgs.cs | 0 .../Components/Notifications}/UiNotificationOptions.cs | 0 .../Components/Notifications}/UiNotificationType.cs | 0 framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs | 1 - .../Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs | 1 - 13 files changed, 8 insertions(+), 3 deletions(-) rename framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/{ => Messages}/SimpleUiMessageService.cs (95%) rename framework/src/{Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly => Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Messages}/IUiMessageService.cs (100%) rename framework/src/{Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly => Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Messages}/UiMessageEventArgs.cs (100%) rename framework/src/{Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly => Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Messages}/UiMessageOptions.cs (100%) rename framework/src/{Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly => Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Messages}/UiMessageType.cs (100%) rename framework/src/{Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly => Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Notifications}/IUiNotificationService.cs (100%) rename framework/src/{Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly => Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Notifications}/NullUiNotificationService.cs (100%) rename framework/src/{Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly => Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Notifications}/UiNotificationEventArgs.cs (100%) rename framework/src/{Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly => Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Notifications}/UiNotificationOptions.cs (100%) rename framework/src/{Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly => Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Notifications}/UiNotificationType.cs (100%) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/SimpleUiMessageService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/Messages/SimpleUiMessageService.cs similarity index 95% rename from framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/SimpleUiMessageService.cs rename to framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/Messages/SimpleUiMessageService.cs index 8f43b3fdcd..4cf7aa5f09 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/SimpleUiMessageService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/Messages/SimpleUiMessageService.cs @@ -3,7 +3,7 @@ using System.Threading.Tasks; using Microsoft.JSInterop; using Volo.Abp.DependencyInjection; -namespace Volo.Abp.AspNetCore.Components.WebAssembly +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Messages { public class SimpleUiMessageService : IUiMessageService, ITransientDependency { diff --git a/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs index a4b4c7740e..b2ed4e5603 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs @@ -5,6 +5,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Volo.Abp.AspNetCore.Components.WebAssembly; using Volo.Abp.Localization; using Volo.Abp.ObjectMapping; using Volo.Abp.Users; @@ -53,6 +54,12 @@ namespace Volo.Abp.AspNetCore.Components protected ICurrentUser CurrentUser => LazyGetRequiredService(ref _currentUser); private ICurrentUser _currentUser; + protected IUiMessageService Message => LazyGetRequiredService(ref _message); + private IUiMessageService _message; + + protected IUiNotificationService Notify => LazyGetRequiredService(ref _notify); + private IUiNotificationService _notify; + protected IObjectMapper ObjectMapper { get diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiMessageService.cs b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Messages/IUiMessageService.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiMessageService.cs rename to framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Messages/IUiMessageService.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageEventArgs.cs b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Messages/UiMessageEventArgs.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageEventArgs.cs rename to framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Messages/UiMessageEventArgs.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageOptions.cs b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Messages/UiMessageOptions.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageOptions.cs rename to framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Messages/UiMessageOptions.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageType.cs b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Messages/UiMessageType.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageType.cs rename to framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Messages/UiMessageType.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Notifications/IUiNotificationService.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs rename to framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Notifications/IUiNotificationService.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Notifications/NullUiNotificationService.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs rename to framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Notifications/NullUiNotificationService.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationEventArgs.cs b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Notifications/UiNotificationEventArgs.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationEventArgs.cs rename to framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Notifications/UiNotificationEventArgs.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationOptions.cs b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Notifications/UiNotificationOptions.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationOptions.cs rename to framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Notifications/UiNotificationOptions.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationType.cs b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Notifications/UiNotificationType.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationType.cs rename to framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Notifications/UiNotificationType.cs diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index c9e8f23b1f..2caccb3f98 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -172,7 +172,6 @@ namespace Volo.Abp.BlazoriseUI { [Inject] protected TAppService AppService { get; set; } [Inject] protected IStringLocalizer UiLocalizer { get; set; } - [Inject] protected IAuthorizationService AuthorizationService { get; set; } protected virtual int PageSize { get; } = LimitedResultRequestDto.DefaultMaxResultCount; diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs index 0d058904c4..1785079cf0 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using System.Linq; -using System.Threading.Tasks; using Blazorise; using Localization.Resources.AbpUi; using Microsoft.AspNetCore.Components; From 3aa1430b8c6791043b7c0d29ae1394b4fc2873d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 2 Nov 2020 16:54:47 +0300 Subject: [PATCH 092/108] Removed not used localizer field. --- .../BlazoriseUiNotificationService.cs | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs index 05c1cd5163..ca79b02e98 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs @@ -1,7 +1,5 @@ using System; using System.Threading.Tasks; -using Localization.Resources.AbpUi; -using Microsoft.Extensions.Localization; using Volo.Abp.AspNetCore.Components.WebAssembly; using Volo.Abp.DependencyInjection; @@ -15,14 +13,6 @@ namespace Volo.Abp.BlazoriseUI ///
public event EventHandler NotificationReceived; - private readonly IStringLocalizer localizer; - - public BlazoriseUiNotificationService( - IStringLocalizer localizer) - { - this.localizer = localizer; - } - public Task Info(string message, string title = null, Action options = null) { var uiNotificationOptions = CreateDefaultOptions(); @@ -65,9 +55,7 @@ namespace Volo.Abp.BlazoriseUI protected virtual UiNotificationOptions CreateDefaultOptions() { - return new UiNotificationOptions - { - }; + return new UiNotificationOptions(); } } } From 0f9eb3add489122eae2add60b9eb9192c3325e60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 2 Nov 2020 17:44:39 +0300 Subject: [PATCH 093/108] AbpComponentBase should use non-scoped services for message and notification --- .../AspNetCore/Components/AbpComponentBase.cs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs index b2ed4e5603..006cc955fd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs @@ -54,10 +54,10 @@ namespace Volo.Abp.AspNetCore.Components protected ICurrentUser CurrentUser => LazyGetRequiredService(ref _currentUser); private ICurrentUser _currentUser; - protected IUiMessageService Message => LazyGetRequiredService(ref _message); + protected IUiMessageService Message => LazyGetNonScopedRequiredService(ref _message); private IUiMessageService _message; - protected IUiNotificationService Notify => LazyGetRequiredService(ref _notify); + protected IUiNotificationService Notify => LazyGetNonScopedRequiredService(ref _notify); private IUiNotificationService _notify; protected IObjectMapper ObjectMapper @@ -97,6 +97,21 @@ namespace Volo.Abp.AspNetCore.Components return reference; } + protected TService LazyGetNonScopedRequiredService(ref TService reference) => LazyGetNonScopedRequiredService(typeof(TService), ref reference); + + protected TRef LazyGetNonScopedRequiredService(Type serviceType, ref TRef reference) + { + if (reference == null) + { + reference = (TRef)NonScopedServices.GetRequiredService(serviceType); + } + + return reference; + } + + [Inject] + protected IServiceProvider NonScopedServices { get; set; } + protected virtual IStringLocalizer CreateLocalizer() { if (LocalizationResource != null) From 61012f9df8d36eb0760d83fde294c2aa7b27718b Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Mon, 2 Nov 2020 20:23:21 +0300 Subject: [PATCH 094/108] Add new article "How to add a new language to the ABP project" --- .../POST.md | 45 ++++++++++++++++++ .../add-to-languages.png | Bin 0 -> 25210 bytes .../database-table.png | Bin 0 -> 10198 bytes .../language-target.png | Bin 0 -> 9601 bytes .../website-new-language.png | Bin 0 -> 26859 bytes 5 files changed, 45 insertions(+) create mode 100644 docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/POST.md create mode 100644 docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/add-to-languages.png create mode 100644 docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/database-table.png create mode 100644 docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/language-target.png create mode 100644 docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/website-new-language.png diff --git a/docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/POST.md b/docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/POST.md new file mode 100644 index 0000000000..af452e1ae9 --- /dev/null +++ b/docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/POST.md @@ -0,0 +1,45 @@ +# How to add a new language to your ABP project? + +Adding a new language to your ABP project is pretty simple. Let's add the German language to our ABP project: + + + +1. Go to your solution's root folder and write the following CLI command. This command will generate an empty translation file from English. + ```bash + abp translate -c de-DE + ``` + + Check out for [the complete supported culture codes](https://docs.microsoft.com/en-us/bingmaps/rest-services/common-parameters-and-types/supported-culture-codes). + +2. Fill the `target` fields in your target language. + + ![Fill target fields](language-target.png) + +3. Copy `abp-translation.json` your solution's root folder (Do not change the filename!) + +4. Run the following command. This command will create the necessary `json` files. + ```bash + abp translate --apply + ``` + +5. Open your solution and add the new language to the language list. To do this; + + * open `MyProjectNameDomainModule.cs` and in `ConfigureServices` you'll find `Configure`. If you have `HttpApi.Host` project then you need to add this in `MyProjectNameHttpApiHostModule.cs` + + ``` + options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsche", "de")); + ``` + + ![Add to languages](add-to-languages.png) + + The last parameter is the flag icon. You can find the list of flag icons on https://flagicons.lipis.dev/ + + 6. The last step is running the DbMigrator project. It will seed the database for the new language. + ![The database table](database-table.png) + + + +Close the IIS Express / Kestrel to invalidate the language cache and run the project. You will see the new language on your website. + +![See the final result](website-new-language.png) + diff --git a/docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/add-to-languages.png b/docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/add-to-languages.png new file mode 100644 index 0000000000000000000000000000000000000000..1dda317685ee0e427b34ead485229a1fe18b54a8 GIT binary patch literal 25210 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 literal 0 HcmV?d00001 diff --git a/docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/language-target.png b/docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/language-target.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5f104003248f8e2a28ee4704cdedefa23bc6ee GIT binary patch literal 9601 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 JOw0bse*syxC`bSR literal 0 HcmV?d00001 diff --git a/docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/website-new-language.png b/docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/website-new-language.png new file mode 100644 index 0000000000000000000000000000000000000000..1e048419836e73c5dc2787b935682016581fbb1a GIT binary patch literal 26859 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 m@_ygx Date: Mon, 2 Nov 2020 21:49:47 +0300 Subject: [PATCH 095/108] Add MyProjectNameBrandingProvider --- .../MyProjectNameBrandingProvider.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameBrandingProvider.cs diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameBrandingProvider.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameBrandingProvider.cs new file mode 100644 index 0000000000..5680cd733d --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameBrandingProvider.cs @@ -0,0 +1,11 @@ +using Volo.Abp.DependencyInjection; +using Volo.Abp.Ui.Branding; + +namespace MyCompanyName.MyProjectName +{ + [Dependency(ReplaceServices = true)] + public class MyProjectNameBrandingProvider : DefaultBrandingProvider + { + public override string AppName => "MyProjectName"; + } +} From e8a2188398e80621177e99335bde1b835958fe39 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 3 Nov 2020 08:46:22 +0800 Subject: [PATCH 096/108] Open the profile management page in the same window. --- .../Themes/Basic/LoginDisplay.razor | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor index b76f11ec5f..38b0663f71 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor @@ -25,7 +25,7 @@ { @foreach (var menuItem in Menu.Items) { - @menuItem.DisplayName + @menuItem.DisplayName } } @@ -39,21 +39,14 @@ @code{ - private async Task NavigateToAsync(string uri, string target = "_self") + private void NavigateTo(string uri, string target = "_self") { - if (target == "_blank") - { - await JsRuntime.InvokeVoidAsync("open", uri, "_blank"); - } - else - { - Navigation.NavigateTo(uri); - } + Navigation.NavigateTo(uri); } private async Task BeginSignOut() { await SignOutManager.SetSignOutState(); - await NavigateToAsync("authentication/logout"); + NavigateTo("authentication/logout"); } } From 82dedbe17dd21670290199304a1109cb372f231a Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 3 Nov 2020 08:47:42 +0800 Subject: [PATCH 097/108] Remove target parameter. --- .../Themes/Basic/LoginDisplay.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor index 38b0663f71..d17add9281 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor @@ -39,7 +39,7 @@ @code{ - private void NavigateTo(string uri, string target = "_self") + private void NavigateTo(string uri) { Navigation.NavigateTo(uri); } From b059ccfd22a2a9f77b345ac53d997e0aeb6b8128 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 3 Nov 2020 09:08:44 +0800 Subject: [PATCH 098/108] Remove inject properties. --- .../Themes/Basic/LoginDisplay.razor.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs index c3737bafdb..71b3d7d6a4 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs @@ -15,12 +15,6 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic [Inject] protected IMenuManager MenuManager { get; set; } - [Inject] - protected IStringLocalizer UiLocalizer { get; set; } - - [Inject] - protected IOptions RemoteServiceOptions { get; set; } - protected ApplicationMenu Menu { get; set; } protected override async Task OnInitializedAsync() From 4a77eaac35d8f873daeec594ee0a7d09e0986426 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 3 Nov 2020 09:15:36 +0800 Subject: [PATCH 099/108] Remove unused namespaces. --- .../Themes/Basic/LoginDisplay.razor | 2 -- .../Themes/Basic/LoginDisplay.razor.cs | 4 ---- 2 files changed, 6 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor index d17add9281..58d4d5753e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor @@ -1,8 +1,6 @@ @using Microsoft.AspNetCore.Components.WebAssembly.Authentication @using Volo.Abp.Users @using Volo.Abp.MultiTenancy -@using Volo.Abp.UI.Navigation -@inject IJSRuntime JsRuntime @inject ICurrentUser CurrentUser @inject ICurrentTenant CurrentTenant @inject NavigationManager Navigation diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs index 71b3d7d6a4..3238483cfb 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs @@ -1,11 +1,7 @@ using System; using System.Threading.Tasks; -using Localization.Resources.AbpUi; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Routing; -using Microsoft.Extensions.Localization; -using Microsoft.Extensions.Options; -using Volo.Abp.Http.Client; using Volo.Abp.UI.Navigation; namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic From 831176a77d1d54402fa49e32c143f13b4cd0af10 Mon Sep 17 00:00:00 2001 From: Erol Arkat Date: Tue, 3 Nov 2020 09:48:59 +0300 Subject: [PATCH 100/108] version update --- common.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.props b/common.props index 5671a3fc31..2ce5f90380 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ latest - 3.3.0 + 3.3.1 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ From 3a64bee2ffc3cf84be97c10e487abbdf17342238 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Tue, 3 Nov 2020 10:18:35 +0300 Subject: [PATCH 101/108] Update POST.md --- .../2020-11-02-How-To-Add-New-Language/POST.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/POST.md b/docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/POST.md index af452e1ae9..b1b2d08c20 100644 --- a/docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/POST.md +++ b/docs/en/Community-Articles/2020-11-02-How-To-Add-New-Language/POST.md @@ -10,6 +10,7 @@ Adding a new language to your ABP project is pretty simple. Let's add the Germa ``` Check out for [the complete supported culture codes](https://docs.microsoft.com/en-us/bingmaps/rest-services/common-parameters-and-types/supported-culture-codes). + (For internal development `D:\Github\abp` and `D:\Github\volo\abp`) 2. Fill the `target` fields in your target language. From 47dd6b4a6c609a9a27a685f950dc4db40131c2b8 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Tue, 3 Nov 2020 09:20:13 +0100 Subject: [PATCH 102/108] Smaller fixes on top bar item alignment --- .../Themes/Basic/LanguageSwitch.razor | 14 ++++++------ .../Themes/Basic/LoginDisplay.razor | 22 +++++++++---------- .../Themes/Basic/NavToolbar.razor | 4 ++-- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor index 2f31e57cf7..6b93618f44 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor @@ -5,17 +5,17 @@ @inject IJSRuntime JsRuntime @if (_otherLanguages != null && _otherLanguages.Any()) { - - + + @_currentLanguage.DisplayName - - + + @foreach (var language in _otherLanguages) { - @language.DisplayName + @language.DisplayName } - - + + } @code { private IReadOnlyList _otherLanguages; diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor index e4767cc031..bdd03d89a2 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor @@ -7,8 +7,8 @@ @inject SignOutSessionStateManager SignOutManager - - + + @if (CurrentTenant.Name != null) { @CurrentTenant.Name\@CurrentUser.UserName @@ -17,25 +17,25 @@ { @CurrentUser.UserName } - - + + @if (Menu != null) { @foreach (var menuItem in Menu.Items) { - @menuItem.DisplayName + @menuItem.DisplayName } } - + @UiLocalizer["ManageYourAccount"] - + - Logout - - + Logout + + - Log in + Log in @code{ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor index 5eea07ea8f..ede8a54415 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor @@ -1,8 +1,8 @@  From bb0b6d61a375f65ad94130cdcf28aacc139e102c Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Tue, 3 Nov 2020 09:34:06 +0100 Subject: [PATCH 103/108] Validation need to pass if it's not defined --- framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index c9e8f23b1f..5d07183ae7 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -350,7 +350,7 @@ namespace Volo.Abp.BlazoriseUI protected virtual async Task CreateEntityAsync() { - if (CreateValidationsRef?.ValidateAll() ?? false) + if (CreateValidationsRef?.ValidateAll() ?? true) { await OnCreatingEntityAsync(); @@ -377,7 +377,7 @@ namespace Volo.Abp.BlazoriseUI protected virtual async Task UpdateEntityAsync() { - if (EditValidationsRef?.ValidateAll() ?? false) + if (EditValidationsRef?.ValidateAll() ?? true) { await OnUpdatingEntityAsync(); From 66cadb34ccd8467317541863b58ca57dd837639d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 3 Nov 2020 12:15:47 +0300 Subject: [PATCH 104/108] Resolved #4590: DynamicHttpProxyInterceptor mask real StatusCode. --- .../ExceptionHandling/UserExceptionInformer.cs | 1 - .../DefaultHttpExceptionStatusCodeFinder.cs | 14 ++++++++++---- .../Abp/ExceptionHandling/IHasHttpStatusCode.cs | 7 +++++++ .../Abp/Http/Client/AbpRemoteCallException.cs | 4 +++- .../DynamicHttpProxyInterceptor.cs | 16 ++++++++++++++-- 5 files changed, 34 insertions(+), 8 deletions(-) create mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/ExceptionHandling/IHasHttpStatusCode.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/ExceptionHandling/UserExceptionInformer.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/ExceptionHandling/UserExceptionInformer.cs index c409c38319..31388b7bad 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/ExceptionHandling/UserExceptionInformer.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/ExceptionHandling/UserExceptionInformer.cs @@ -1,5 +1,4 @@ using System; -using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.AspNetCore.ExceptionHandling; diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/DefaultHttpExceptionStatusCodeFinder.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/DefaultHttpExceptionStatusCodeFinder.cs index cf49642459..2e1ef471a2 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/DefaultHttpExceptionStatusCodeFinder.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/DefaultHttpExceptionStatusCodeFinder.cs @@ -22,7 +22,13 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling public virtual HttpStatusCode GetStatusCode(HttpContext httpContext, Exception exception) { - if (exception is IHasErrorCode exceptionWithErrorCode && + if (exception is IHasHttpStatusCode exceptionWithHttpStatusCode && + exceptionWithHttpStatusCode.HttpStatusCode > 0) + { + return (HttpStatusCode) exceptionWithHttpStatusCode.HttpStatusCode; + } + + if (exception is IHasErrorCode exceptionWithErrorCode && !exceptionWithErrorCode.Code.IsNullOrWhiteSpace()) { if (Options.ErrorCodeToHttpStatusCodeMappings.TryGetValue(exceptionWithErrorCode.Code, out var status)) @@ -39,7 +45,7 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling } //TODO: Handle SecurityException..? - + if (exception is AbpValidationException) { return HttpStatusCode.BadRequest; @@ -59,8 +65,8 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling { return HttpStatusCode.Forbidden; } - + return HttpStatusCode.InternalServerError; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/ExceptionHandling/IHasHttpStatusCode.cs b/framework/src/Volo.Abp.Core/Volo/Abp/ExceptionHandling/IHasHttpStatusCode.cs new file mode 100644 index 0000000000..a32e3fd45f --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/ExceptionHandling/IHasHttpStatusCode.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.ExceptionHandling +{ + public interface IHasHttpStatusCode + { + int HttpStatusCode { get; } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpRemoteCallException.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpRemoteCallException.cs index 19ecfba0ab..f9a6436715 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpRemoteCallException.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpRemoteCallException.cs @@ -5,8 +5,10 @@ using Volo.Abp.ExceptionHandling; namespace Volo.Abp.Http.Client { [Serializable] - public class AbpRemoteCallException : AbpException, IHasErrorCode, IHasErrorDetails + public class AbpRemoteCallException : AbpException, IHasErrorCode, IHasErrorDetails, IHasHttpStatusCode { + public int HttpStatusCode { get; set; } + public string Code => Error?.Code; public string Details => Error?.Details; diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs index 81c1d02d9b..59bb7d67b6 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs @@ -252,10 +252,22 @@ namespace Volo.Abp.Http.Client.DynamicProxying await response.Content.ReadAsStringAsync() ); - throw new AbpRemoteCallException(errorResponse.Error); + throw new AbpRemoteCallException(errorResponse.Error) + { + HttpStatusCode = (int) response.StatusCode + }; } - throw new AbpException($"Remote service returns error! HttpStatusCode: {response.StatusCode}, ReasonPhrase: {response.ReasonPhrase}"); + throw new AbpRemoteCallException( + new RemoteServiceErrorInfo + { + Message = response.ReasonPhrase, + Code = response.StatusCode.ToString() + } + ) + { + HttpStatusCode = (int) response.StatusCode + }; } protected virtual CancellationToken GetCancellationToken() From deb04d7a9efe2641f0e713b0bf9470a00bccdd5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 3 Nov 2020 13:11:49 +0300 Subject: [PATCH 105/108] Add PropertyApiDescriptionModel.IsRequired --- .../Volo/Abp/Http/Modeling/PropertyApiDescriptionModel.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/PropertyApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/PropertyApiDescriptionModel.cs index 610b6bd347..786ea32b76 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/PropertyApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/PropertyApiDescriptionModel.cs @@ -1,4 +1,5 @@ using System; +using System.ComponentModel.DataAnnotations; using System.Reflection; namespace Volo.Abp.Http.Modeling @@ -12,6 +13,8 @@ namespace Volo.Abp.Http.Modeling public string TypeSimple { get; set; } + public bool IsRequired { get; set; } + //TODO: Validation rules for this property public static PropertyApiDescriptionModel Create(PropertyInfo propertyInfo) { @@ -19,7 +22,8 @@ namespace Volo.Abp.Http.Modeling { Name = propertyInfo.Name, Type = ApiTypeNameHelper.GetTypeName(propertyInfo.PropertyType), - TypeSimple = ApiTypeNameHelper.GetSimpleTypeName(propertyInfo.PropertyType) + TypeSimple = ApiTypeNameHelper.GetSimpleTypeName(propertyInfo.PropertyType), + IsRequired = propertyInfo.IsDefined(typeof(RequiredAttribute), true) }; } } From ca7235c2e16a82e9cbc5f52ff14dc161e5d21ef1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 3 Nov 2020 14:50:02 +0300 Subject: [PATCH 106/108] Fixed #6011: RemoteLocalizationContributor is using ICachedApplicationConfigurationClient that will be released. --- .../Abp/Localization/AbpStringLocalizerFactory.cs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpStringLocalizerFactory.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpStringLocalizerFactory.cs index cd347d8437..ff40680034 100644 --- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpStringLocalizerFactory.cs +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpStringLocalizerFactory.cs @@ -58,14 +58,11 @@ namespace Volo.Abp.Localization resource.Contributors.Add((ILocalizationResourceContributor) Activator.CreateInstance(globalContributor)); } - using (var scope = ServiceProvider.CreateScope()) - { - var context = new LocalizationResourceInitializationContext(resource, scope.ServiceProvider); + var context = new LocalizationResourceInitializationContext(resource, ServiceProvider); - foreach (var contributor in resource.Contributors) - { - contributor.Initialize(context); - } + foreach (var contributor in resource.Contributors) + { + contributor.Initialize(context); } return new StringLocalizerCacheItem( @@ -109,4 +106,4 @@ namespace Volo.Abp.Localization return Create(AbpLocalizationOptions.DefaultResourceType); } } -} \ No newline at end of file +} From a319936d9c08c740db7db71a1cb7dec17d4af2e8 Mon Sep 17 00:00:00 2001 From: erolarkat Date: Tue, 3 Nov 2020 15:10:30 +0300 Subject: [PATCH 107/108] npm packages 3.3.1 --- .../package.json | 2 +- .../yarn.lock | 224 ++++++------ .../package.json | 4 +- .../yarn.lock | 260 +++++++------- .../app/Volo.BloggingTestApp/package.json | 4 +- .../app/Volo.BloggingTestApp/yarn.lock | 332 +++++++++--------- .../Volo.ClientSimulation.Demo/package.json | 2 +- .../demo/Volo.ClientSimulation.Demo/yarn.lock | 238 ++++++------- modules/cms-kit/angular/package.json | 10 +- .../angular/projects/cms-kit/package.json | 4 +- .../Volo.CmsKit.IdentityServer/package.json | 2 +- .../host/Volo.CmsKit.IdentityServer/yarn.lock | 238 ++++++------- .../host/Volo.CmsKit.Web.Host/package.json | 2 +- .../host/Volo.CmsKit.Web.Host/yarn.lock | 238 ++++++------- .../host/Volo.CmsKit.Web.Unified/package.json | 2 +- .../host/Volo.CmsKit.Web.Unified/yarn.lock | 238 ++++++------- modules/docs/app/VoloDocs.Web/package.json | 4 +- modules/docs/app/VoloDocs.Web/yarn.lock | 298 ++++++++-------- npm/lerna.json | 2 +- npm/ng-packs/lerna.version.json | 2 +- npm/ng-packs/package.json | 22 +- npm/ng-packs/packages/account/package.json | 4 +- npm/ng-packs/packages/components/package.json | 4 +- npm/ng-packs/packages/core/package.json | 4 +- .../packages/feature-management/package.json | 4 +- npm/ng-packs/packages/identity/package.json | 6 +- .../permission-management/package.json | 4 +- npm/ng-packs/packages/schematics/package.json | 2 +- .../packages/setting-management/package.json | 4 +- .../packages/tenant-management/package.json | 6 +- .../packages/theme-basic/package.json | 4 +- .../packages/theme-shared/package.json | 4 +- npm/ng-packs/yarn.lock | 110 +++--- npm/packs/anchor-js/package.json | 4 +- .../package.json | 4 +- .../package.json | 30 +- npm/packs/aspnetcore.mvc.ui/package.json | 2 +- npm/packs/blogging/package.json | 10 +- npm/packs/bootstrap-datepicker/package.json | 2 +- npm/packs/bootstrap/package.json | 4 +- npm/packs/chart.js/package.json | 2 +- npm/packs/clipboard/package.json | 4 +- npm/packs/codemirror/package.json | 4 +- npm/packs/core/package.json | 4 +- npm/packs/cropperjs/package.json | 4 +- npm/packs/datatables.net-bs4/package.json | 4 +- npm/packs/datatables.net/package.json | 4 +- npm/packs/docs/package.json | 12 +- npm/packs/flag-icon-css/package.json | 2 +- npm/packs/font-awesome/package.json | 4 +- npm/packs/highlight.js/package.json | 4 +- npm/packs/jquery-form/package.json | 4 +- .../package.json | 4 +- npm/packs/jquery-validation/package.json | 4 +- npm/packs/jquery/package.json | 4 +- npm/packs/jstree/package.json | 4 +- npm/packs/lodash/package.json | 4 +- npm/packs/luxon/package.json | 4 +- .../package.json | 4 +- npm/packs/markdown-it/package.json | 4 +- npm/packs/owl.carousel/package.json | 4 +- npm/packs/popper.js/package.json | 4 +- npm/packs/prismjs/package.json | 6 +- npm/packs/select2/package.json | 4 +- npm/packs/signalr/package.json | 4 +- npm/packs/star-rating-svg/package.json | 4 +- npm/packs/sweetalert/package.json | 4 +- npm/packs/timeago/package.json | 4 +- npm/packs/toastr/package.json | 4 +- npm/packs/tui-editor/package.json | 10 +- npm/packs/uppy/package.json | 4 +- npm/packs/utils/package.json | 2 +- npm/packs/virtual-file-explorer/package.json | 6 +- templates/app/angular/package.json | 12 +- .../package.json | 2 +- .../yarn.lock | 238 ++++++------- .../package.json | 2 +- .../yarn.lock | 238 ++++++------- .../package.json | 2 +- .../yarn.lock | 238 ++++++------- .../package.json | 2 +- .../MyCompanyName.MyProjectName.Web/yarn.lock | 238 ++++++------- templates/module/angular/package.json | 12 +- .../projects/my-project-name/package.json | 4 +- .../package.json | 2 +- .../yarn.lock | 238 ++++++------- .../package.json | 2 +- .../yarn.lock | 238 ++++++------- .../package.json | 2 +- .../yarn.lock | 238 ++++++------- 90 files changed, 2096 insertions(+), 2096 deletions(-) diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json index 9bd999dd53..a31363fe11 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json @@ -3,7 +3,7 @@ "name": "asp.net", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "^3.3.0", + "@abp/aspnetcore.mvc.ui.theme.shared": "^3.3.1", "highlight.js": "^9.13.1" }, "devDependencies": {} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock index ab68399880..c97c79ee81 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock @@ -2,30 +2,30 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.shared@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.0.tgz#6c998bad95e46905e5a1487ab2370905cdf4376a" - integrity sha512-Tt6SK3EUj8jfZKSzeIVkRuWyAGRoDTqeoS5VVkNZLoIfLzwiimHw2o2AlPRtCMa0jqLropHtaT/kNl+EU24AZw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.3.0" - "@abp/bootstrap" "~3.3.0" - "@abp/bootstrap-datepicker" "~3.3.0" - "@abp/datatables.net-bs4" "~3.3.0" - "@abp/font-awesome" "~3.3.0" - "@abp/jquery-form" "~3.3.0" - "@abp/jquery-validation-unobtrusive" "~3.3.0" - "@abp/lodash" "~3.3.0" - "@abp/luxon" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/select2" "~3.3.0" - "@abp/sweetalert" "~3.3.0" - "@abp/timeago" "~3.3.0" - "@abp/toastr" "~3.3.0" - -"@abp/aspnetcore.mvc.ui@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.0.tgz#07f7d0f7f689a3ac75a69e12681ebd3d08fa0644" - integrity sha512-EbUISgnR8qHYdu/tSro8QjUWj17M6gOkugMI7N0fiPNbtLHgKG2GHWxIsVEf5ic1O2j/PWKOQ+FPBLZ4v3jFrw== +"@abp/aspnetcore.mvc.ui.theme.shared@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.1.tgz#c3123ea8f6c8428d034d9ac2782aa1bff27bd740" + integrity sha512-j2uZapDTKSjH74uZcIR4y09hr6w+OAdybQhL1bx4fb0D3XlmOdOwRrsqXieJNwAggbUn00EX2Usiey3N/wV1rA== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.3.1" + "@abp/bootstrap" "~3.3.1" + "@abp/bootstrap-datepicker" "~3.3.1" + "@abp/datatables.net-bs4" "~3.3.1" + "@abp/font-awesome" "~3.3.1" + "@abp/jquery-form" "~3.3.1" + "@abp/jquery-validation-unobtrusive" "~3.3.1" + "@abp/lodash" "~3.3.1" + "@abp/luxon" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/select2" "~3.3.1" + "@abp/sweetalert" "~3.3.1" + "@abp/timeago" "~3.3.1" + "@abp/toastr" "~3.3.1" + +"@abp/aspnetcore.mvc.ui@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.1.tgz#946d5fb68d73842270e2553fba475163d2ca57a5" + integrity sha512-W/Yxe20Upkha0XaHPQwQ3+LxdUZI21BiARcbBUnIUzRUrFBpvjD0A9/T8bsi+KpIqOYLAwtrE1TJoSuZGscoIw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -34,145 +34,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.0.tgz#d7d11e591818a6ec654127d88602cfdfddf81b1f" - integrity sha512-PUsS48o5Cwufn8O8d34UBsjLF6/HrgdhsGTUzrVIhGapiyuYD/QrvqWYWRUj1Jeeb4nrsRVem2DnM1isy+CUCA== +"@abp/bootstrap-datepicker@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.1.tgz#c0f5763e0bfb1e293ef1b22f2a14014ec345dbc3" + integrity sha512-MnX2vI75gEDtlwnKhI6ptH657dh5TuXoin1XeaEhOa5rGbLwhSu4IFqRmlLBedFBOf+1zwcvFs30vsQlNKJ6Nw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.0.tgz#1314549e7a940c58fdff521a9ddf153f3414fffa" - integrity sha512-CVjSwbZPjio0VJWxdo+PRkvUYGtv51DgVrqjgHK7m7tGFwHAK38cDHAl+mqmIp7dgPG1Z+E0o41JteT3Za1Bkw== +"@abp/bootstrap@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.1.tgz#5b173918511b6ad1fb8ac570ea2e2fcb874970e0" + integrity sha512-CfnwXAV2XRK3gYpeEQjgVzEocU6pqdGZXwATwOKifHWBZNG8ubDyMgBed+oVCvJgRvLRrniR5jFK2vhm8Du+EQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.0.tgz#c88c28df19f96349b9a32b7ebe402e6d267c34e5" - integrity sha512-y9P86zPAm55fAyKwDaoxv+IrApA339aaGEpN9364upeeNBsO8mYf9hoM136VovQaWNIABFHRD7R+9KskwPAuNA== +"@abp/core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.1.tgz#b1da2160b0fc4a309dc4a65ee937c814de16b2de" + integrity sha512-6/6FHTLZrWh821O6xr4Sk1BlIt9gTAT19NnykQRV9U8S7rl4BQv2QF055R8Wg3lnVKWJ1ajiAbd3gerjH/pL6g== dependencies: - "@abp/utils" "^3.3.0" + "@abp/utils" "^3.3.1" -"@abp/datatables.net-bs4@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.0.tgz#e4cc85f3c1c195d9e8b07532eb7c53619f40a787" - integrity sha512-StuwT8jGfDWGNXmYgRELuErXxSE+qjVoiSAkd27mZqDbYSTipq4OZSAHr6WNmoqMgP6QlCgjGgXcz4Pr8Pxuaw== +"@abp/datatables.net-bs4@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.1.tgz#fd0f5f5579ff94d635d19c1bf46ac0593639e3f4" + integrity sha512-C9BUlbsk9liJ+hmFpTKoearJNZISDy5TInTbnixL8WfXfIaAWdZRs+ADvhKO9+oWMxkbxhGI8ueYQ29Z1UJzMg== dependencies: - "@abp/datatables.net" "~3.3.0" + "@abp/datatables.net" "~3.3.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.0.tgz#a2b2cedc06beb325e62ce6faba899c935564b9a7" - integrity sha512-y0RGrLxI7VgWFAFtHAraDnrEJ5pkUIJ3zxEScS43RUbArhxk+5pIpxQbmU0WgHpk72H7WXdqtL486Kw8PSj1Nw== +"@abp/datatables.net@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.1.tgz#2ec7406712607f08f0ae9a6ce0ee7bfd0cc73278" + integrity sha512-prsMkh//XCymCG/aYEEtzV/922RJIZ0+PcnRvhJzXvrX4DK2y3ZWM44QNR/9/rpkYUJqRcVoHqbt1DuxbHDLXQ== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.0.tgz#f9307334c34309456c47cc407fbe079821ace45e" - integrity sha512-7/uZ2qXooHQZG35F6ERKsjI8m0gn8/BgE2cOB7Zhu5KRtSTOHOOXX4YWEfoHYLEMuo3xKTTJ2gHM3jiCJEpVtg== +"@abp/font-awesome@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.1.tgz#268a21685a6b810b15848169b78c3dfb11d582c6" + integrity sha512-Eg2dwtcsyLo5E6PC21vK5R8YFe32UFSN4DpNrqAP9I85daR8ZbT0US8SbfCcI5nhiZlRi3EWj/cUgz2IEJHaaQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.0.tgz#43fc5655b4e3cac7c0558fb36dd9ef188fe64412" - integrity sha512-fH4IPf/cU3ojWtVsPZjtymzK0xWqqgmvnSk5zy4AB4MOCKyYtPrn5OAMUvq8A4uZ0mGIRAQ8Z72wPKZA1rws5A== +"@abp/jquery-form@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.1.tgz#4e8c2e50e711a7bbe4f40e74210472b21afd0ecf" + integrity sha512-HBic6SzOSprYAug/Qbgcd+MiPRwtXczS2/x9IUmPFeUhvuqJJoYPWrhI5xC6WKNcJ/5MjExiEbeEXMXp8PwJTA== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.0.tgz#0840f3114626a1d6efff54f4791776ebfdf56e76" - integrity sha512-foKM9FDAY2RZGz5EQ2FcQt/FiL8sMc+uwd+2KeAdIejLyPgeSH/lLio6agd2Xun4e/xlBJB185Ga1eKcdHIGAw== +"@abp/jquery-validation-unobtrusive@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.1.tgz#e42d61a172b6ef5cbdbb305ab5d93e3dad5159a1" + integrity sha512-SH8zmrR3HshCNP0zIgi4j6PMhgCzmCKk5xXxD+8kg+LAv+bm1iP0K5srgX4WlEffRma80QIeNKPpe/lW04EgFw== dependencies: - "@abp/jquery-validation" "~3.3.0" + "@abp/jquery-validation" "~3.3.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.0.tgz#2199968638d7bab9bfb6ba5e9f27d9d607c09a24" - integrity sha512-jxw274hx8i9+dkRrDz7aUpWSGESnJ2wuA6e3IAQIlubFf+7q0o4vosXD5bubinn4qaRGcSiYC15armfefgmFCw== +"@abp/jquery-validation@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.1.tgz#05164e342fdb83f40a17f000b40c27df2604c394" + integrity sha512-oKN3wQUY1PB7IhelFIJVjRqAZx/AVlpUF0GV6k/9eNBK+ZoLpW1ebE1q9tsLhXf7QS1N7S45aEHB8OpjRopDew== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.0.tgz#b99a9436bf3c2394917e761a2dcdfe4f1af9ff3d" - integrity sha512-WrjDQCBOi83kjtMYjXCJVWSbnFxKLW/KtDADkjTF7TxIGccsNWx6E8npzdCEnDnlOJ5Rk9+1QIu07pWedOjBSg== +"@abp/jquery@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.1.tgz#2e8431a52641ab85d1372a32518307bbf8fba1a0" + integrity sha512-mSAUYLzhJSvq8ixhAFkU5Q2LRDTkJAGHq47alb2nNEodZNr1q1i+875nP3dE/4MLT/foG0H+j+r4RGuYx4fGAA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" jquery "~3.5.1" -"@abp/lodash@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.0.tgz#5402a779ef1e8ecd585644a68607425587560305" - integrity sha512-QFm9hpWs0/J5TFFiE7vO5oxTsLgMcibmgg/CxYvmQZXhHGZpx3mdoAzC48CvRu8quxr6Xo8pIxlCyYXniR6/Dw== +"@abp/lodash@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.1.tgz#5c2602f03bde7fbf7841c01bb7178b3ca3429d87" + integrity sha512-5fitYkotzaXGaEbwctVYT4HcfKZ1ghAnvrQLYI+2MYgIQmtipBhXFEG030zIXWThEoIGKOBuwVzmOYtwiX7+8w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" lodash "^4.17.15" -"@abp/luxon@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.0.tgz#2d669786308df997c6738dd205363edaae670d15" - integrity sha512-1oSUuzgehSBxaxJLfD06ktXK4jisILPKFnEaKCBuPiKiQSDFvdQbepHAYJcpU1Jye6sVrheUKDUyJhnSwDb+0w== +"@abp/luxon@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.1.tgz#2e477be6a9f76394331399a762552bf610168e8e" + integrity sha512-bp74vBmObbqUXsOc4VRWml5ivEyIzwHLR4oycLvWG0bQZn65yt7db7DVYTQL1PCWbEAKf6eULlnF6JvZpSVgeg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.0.tgz#3bb48e0d68c0b76f3460eb19706927af2168a6c3" - integrity sha512-44JvJOfxJ5ihfNCPyc5U8D8N8CmLh8UBMkzjH7YJQZJO+7PGgjx+uEqbQhTtBDftUz5C5oFkGoQ7i2pil7YSYQ== +"@abp/malihu-custom-scrollbar-plugin@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.1.tgz#df833f2b8421f4dce681c13d2d5976680a27e4c8" + integrity sha512-bJRQTevunQulXo+EC1HWqYgV30RVmFcS218DtdZLm2x/xWFBhvr+2DLzLS2Gq8JJXNGQMFbHnCWixn5si4V/KA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.0.tgz#207460dd128a1620c332af5eea2df88bfdfd0520" - integrity sha512-dbOnzQVARBQp/ynJvNyJqE1ArtsWCV8nGMUablB1ILPonsJy+0ADJ+GXWa1nIsHdj3zPW0MLi8pdqpepRCTAFg== +"@abp/select2@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.1.tgz#65ac0ae3ac8783d4e0422717ce743d573bf559e4" + integrity sha512-efxhM/QxAmnyfGNcokZIK7vD6wYJkFGSnZEDj9QSrZ6DyUYf8H+jlK38JViDGe0RCMqts0R4B6IaKT0RbbIGmw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" select2 "^4.0.13" -"@abp/sweetalert@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.0.tgz#457a05af37819fc54082254022551ed0233c471e" - integrity sha512-6KXwPVC1zwNwlZBS9x0uPLTmieu3nmBp0G+ZH1aP+GTMphSa0ejI7nuPFqUeqfEMg+an1yj51SKKUfKtmlx6Zg== +"@abp/sweetalert@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.1.tgz#b6a41f8459d4407c4aee04e2f200b84e3fa8d534" + integrity sha512-olDU9Lh5o0sNCxRXROwt8QhHpuB5+fjojVWVUOiag0UMLVA9k/fp38diyn64qddSHWCafpqjeO32IXDKEQckZA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" sweetalert "^2.1.2" -"@abp/timeago@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.0.tgz#f0da23577630cec21255fc9c71dd2f7a3a3a3388" - integrity sha512-f5sb4vxgGPyIzTj6lxDzUx/qJiC8pAqWPasdxHDMzhKlkRuFWO+GfblR5DC/sj9fQPcyV8+yX/VQPY3JW8i62Q== +"@abp/timeago@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.1.tgz#9759e09728fea082d28cd430cdc1af5b93f14720" + integrity sha512-sIgSj3hZBl+oyO6rHc55YrIfqb4d2d2RlT6HU+OIsa2/BUAjTcW6WdPVUjXTreth2jyxEjXkfOKA3Sv5DvraGg== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" timeago "^1.6.7" -"@abp/toastr@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.0.tgz#c4f7d761eb4d93e993cb8e8cb54a0d670b20bdd3" - integrity sha512-GGqtVUCX8WalpkCnhiYUs+XxxBnhxGOLe87qFe/2tr0XNDJ3BSHXxiKynDetjlNAq/Qnf4U5P4Eg9FnHWFdWZg== +"@abp/toastr@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.1.tgz#06cf0b46e6430fae516aaff8707a5f5b16d6ed1d" + integrity sha512-LTf2NGwcG9ke571HMO7N4syhJijagnw/eIDl6ezflIQI/BnQqBKpXJ8xckCCqgryxfraBu4APMuSkPoDs2Ce5g== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" toastr "^2.1.4" -"@abp/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" - integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json index 028b3e8535..fbffc848eb 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json @@ -3,8 +3,8 @@ "name": "asp.net", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.0", - "@abp/prismjs": "^3.3.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.1", + "@abp/prismjs": "^3.3.1" }, "devDependencies": {} } \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock index 2e05ff90ce..51bb71f35d 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.0.tgz#5a83ad1010ede0647cc4bbe225f0ebf8f3ac90d8" - integrity sha512-b0Z/CO7nLixuceC2A/rx4m6OQPwe7ELym+ZZdurUxI42ciuoC5Cnnl3FH+HCt8P3JdFjOIWl2wOXvUcc6P16oQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.0.tgz#6c998bad95e46905e5a1487ab2370905cdf4376a" - integrity sha512-Tt6SK3EUj8jfZKSzeIVkRuWyAGRoDTqeoS5VVkNZLoIfLzwiimHw2o2AlPRtCMa0jqLropHtaT/kNl+EU24AZw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.3.0" - "@abp/bootstrap" "~3.3.0" - "@abp/bootstrap-datepicker" "~3.3.0" - "@abp/datatables.net-bs4" "~3.3.0" - "@abp/font-awesome" "~3.3.0" - "@abp/jquery-form" "~3.3.0" - "@abp/jquery-validation-unobtrusive" "~3.3.0" - "@abp/lodash" "~3.3.0" - "@abp/luxon" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/select2" "~3.3.0" - "@abp/sweetalert" "~3.3.0" - "@abp/timeago" "~3.3.0" - "@abp/toastr" "~3.3.0" - -"@abp/aspnetcore.mvc.ui@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.0.tgz#07f7d0f7f689a3ac75a69e12681ebd3d08fa0644" - integrity sha512-EbUISgnR8qHYdu/tSro8QjUWj17M6gOkugMI7N0fiPNbtLHgKG2GHWxIsVEf5ic1O2j/PWKOQ+FPBLZ4v3jFrw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.1.tgz#58ae88355b821ca72eccf1950bde544b8f0edcca" + integrity sha512-AUIJQIBb+5of0Na1cxmyacni6ToYBpmtU+NJH9/cTC3UUAPylj8TiAX9yobAPn8dbrcXTm+dh9T8i49rXTtxoA== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.1.tgz#c3123ea8f6c8428d034d9ac2782aa1bff27bd740" + integrity sha512-j2uZapDTKSjH74uZcIR4y09hr6w+OAdybQhL1bx4fb0D3XlmOdOwRrsqXieJNwAggbUn00EX2Usiey3N/wV1rA== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.3.1" + "@abp/bootstrap" "~3.3.1" + "@abp/bootstrap-datepicker" "~3.3.1" + "@abp/datatables.net-bs4" "~3.3.1" + "@abp/font-awesome" "~3.3.1" + "@abp/jquery-form" "~3.3.1" + "@abp/jquery-validation-unobtrusive" "~3.3.1" + "@abp/lodash" "~3.3.1" + "@abp/luxon" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/select2" "~3.3.1" + "@abp/sweetalert" "~3.3.1" + "@abp/timeago" "~3.3.1" + "@abp/toastr" "~3.3.1" + +"@abp/aspnetcore.mvc.ui@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.1.tgz#946d5fb68d73842270e2553fba475163d2ca57a5" + integrity sha512-W/Yxe20Upkha0XaHPQwQ3+LxdUZI21BiARcbBUnIUzRUrFBpvjD0A9/T8bsi+KpIqOYLAwtrE1TJoSuZGscoIw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,162 +41,162 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.0.tgz#d7d11e591818a6ec654127d88602cfdfddf81b1f" - integrity sha512-PUsS48o5Cwufn8O8d34UBsjLF6/HrgdhsGTUzrVIhGapiyuYD/QrvqWYWRUj1Jeeb4nrsRVem2DnM1isy+CUCA== +"@abp/bootstrap-datepicker@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.1.tgz#c0f5763e0bfb1e293ef1b22f2a14014ec345dbc3" + integrity sha512-MnX2vI75gEDtlwnKhI6ptH657dh5TuXoin1XeaEhOa5rGbLwhSu4IFqRmlLBedFBOf+1zwcvFs30vsQlNKJ6Nw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.0.tgz#1314549e7a940c58fdff521a9ddf153f3414fffa" - integrity sha512-CVjSwbZPjio0VJWxdo+PRkvUYGtv51DgVrqjgHK7m7tGFwHAK38cDHAl+mqmIp7dgPG1Z+E0o41JteT3Za1Bkw== +"@abp/bootstrap@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.1.tgz#5b173918511b6ad1fb8ac570ea2e2fcb874970e0" + integrity sha512-CfnwXAV2XRK3gYpeEQjgVzEocU6pqdGZXwATwOKifHWBZNG8ubDyMgBed+oVCvJgRvLRrniR5jFK2vhm8Du+EQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/clipboard@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.3.0.tgz#44029c7bac7fe4f693ab3963515d300c49aa2d5e" - integrity sha512-YZKqjwZGue7o39GiuZf8WPEjt4ydQCSCG109fkIJQgbwjqkseeWPExJcYnogMSA4qWr4Ip1m3CQ17Yqtl1n8JA== +"@abp/clipboard@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.3.1.tgz#057381ecb3f5fb0744f2a742a4aff54294800439" + integrity sha512-iLtmLD/HXpHVWmLvbt2zY0EjZPmRLneCsT/gw07RWvy8iu+Hk8Cta8CD/Ak8RP5NdZkoYTO3Ojxdm7JUH0XN2g== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" clipboard "^2.0.6" -"@abp/core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.0.tgz#c88c28df19f96349b9a32b7ebe402e6d267c34e5" - integrity sha512-y9P86zPAm55fAyKwDaoxv+IrApA339aaGEpN9364upeeNBsO8mYf9hoM136VovQaWNIABFHRD7R+9KskwPAuNA== +"@abp/core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.1.tgz#b1da2160b0fc4a309dc4a65ee937c814de16b2de" + integrity sha512-6/6FHTLZrWh821O6xr4Sk1BlIt9gTAT19NnykQRV9U8S7rl4BQv2QF055R8Wg3lnVKWJ1ajiAbd3gerjH/pL6g== dependencies: - "@abp/utils" "^3.3.0" + "@abp/utils" "^3.3.1" -"@abp/datatables.net-bs4@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.0.tgz#e4cc85f3c1c195d9e8b07532eb7c53619f40a787" - integrity sha512-StuwT8jGfDWGNXmYgRELuErXxSE+qjVoiSAkd27mZqDbYSTipq4OZSAHr6WNmoqMgP6QlCgjGgXcz4Pr8Pxuaw== +"@abp/datatables.net-bs4@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.1.tgz#fd0f5f5579ff94d635d19c1bf46ac0593639e3f4" + integrity sha512-C9BUlbsk9liJ+hmFpTKoearJNZISDy5TInTbnixL8WfXfIaAWdZRs+ADvhKO9+oWMxkbxhGI8ueYQ29Z1UJzMg== dependencies: - "@abp/datatables.net" "~3.3.0" + "@abp/datatables.net" "~3.3.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.0.tgz#a2b2cedc06beb325e62ce6faba899c935564b9a7" - integrity sha512-y0RGrLxI7VgWFAFtHAraDnrEJ5pkUIJ3zxEScS43RUbArhxk+5pIpxQbmU0WgHpk72H7WXdqtL486Kw8PSj1Nw== +"@abp/datatables.net@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.1.tgz#2ec7406712607f08f0ae9a6ce0ee7bfd0cc73278" + integrity sha512-prsMkh//XCymCG/aYEEtzV/922RJIZ0+PcnRvhJzXvrX4DK2y3ZWM44QNR/9/rpkYUJqRcVoHqbt1DuxbHDLXQ== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.0.tgz#f9307334c34309456c47cc407fbe079821ace45e" - integrity sha512-7/uZ2qXooHQZG35F6ERKsjI8m0gn8/BgE2cOB7Zhu5KRtSTOHOOXX4YWEfoHYLEMuo3xKTTJ2gHM3jiCJEpVtg== +"@abp/font-awesome@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.1.tgz#268a21685a6b810b15848169b78c3dfb11d582c6" + integrity sha512-Eg2dwtcsyLo5E6PC21vK5R8YFe32UFSN4DpNrqAP9I85daR8ZbT0US8SbfCcI5nhiZlRi3EWj/cUgz2IEJHaaQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.0.tgz#43fc5655b4e3cac7c0558fb36dd9ef188fe64412" - integrity sha512-fH4IPf/cU3ojWtVsPZjtymzK0xWqqgmvnSk5zy4AB4MOCKyYtPrn5OAMUvq8A4uZ0mGIRAQ8Z72wPKZA1rws5A== +"@abp/jquery-form@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.1.tgz#4e8c2e50e711a7bbe4f40e74210472b21afd0ecf" + integrity sha512-HBic6SzOSprYAug/Qbgcd+MiPRwtXczS2/x9IUmPFeUhvuqJJoYPWrhI5xC6WKNcJ/5MjExiEbeEXMXp8PwJTA== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.0.tgz#0840f3114626a1d6efff54f4791776ebfdf56e76" - integrity sha512-foKM9FDAY2RZGz5EQ2FcQt/FiL8sMc+uwd+2KeAdIejLyPgeSH/lLio6agd2Xun4e/xlBJB185Ga1eKcdHIGAw== +"@abp/jquery-validation-unobtrusive@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.1.tgz#e42d61a172b6ef5cbdbb305ab5d93e3dad5159a1" + integrity sha512-SH8zmrR3HshCNP0zIgi4j6PMhgCzmCKk5xXxD+8kg+LAv+bm1iP0K5srgX4WlEffRma80QIeNKPpe/lW04EgFw== dependencies: - "@abp/jquery-validation" "~3.3.0" + "@abp/jquery-validation" "~3.3.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.0.tgz#2199968638d7bab9bfb6ba5e9f27d9d607c09a24" - integrity sha512-jxw274hx8i9+dkRrDz7aUpWSGESnJ2wuA6e3IAQIlubFf+7q0o4vosXD5bubinn4qaRGcSiYC15armfefgmFCw== +"@abp/jquery-validation@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.1.tgz#05164e342fdb83f40a17f000b40c27df2604c394" + integrity sha512-oKN3wQUY1PB7IhelFIJVjRqAZx/AVlpUF0GV6k/9eNBK+ZoLpW1ebE1q9tsLhXf7QS1N7S45aEHB8OpjRopDew== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.0.tgz#b99a9436bf3c2394917e761a2dcdfe4f1af9ff3d" - integrity sha512-WrjDQCBOi83kjtMYjXCJVWSbnFxKLW/KtDADkjTF7TxIGccsNWx6E8npzdCEnDnlOJ5Rk9+1QIu07pWedOjBSg== +"@abp/jquery@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.1.tgz#2e8431a52641ab85d1372a32518307bbf8fba1a0" + integrity sha512-mSAUYLzhJSvq8ixhAFkU5Q2LRDTkJAGHq47alb2nNEodZNr1q1i+875nP3dE/4MLT/foG0H+j+r4RGuYx4fGAA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" jquery "~3.5.1" -"@abp/lodash@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.0.tgz#5402a779ef1e8ecd585644a68607425587560305" - integrity sha512-QFm9hpWs0/J5TFFiE7vO5oxTsLgMcibmgg/CxYvmQZXhHGZpx3mdoAzC48CvRu8quxr6Xo8pIxlCyYXniR6/Dw== +"@abp/lodash@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.1.tgz#5c2602f03bde7fbf7841c01bb7178b3ca3429d87" + integrity sha512-5fitYkotzaXGaEbwctVYT4HcfKZ1ghAnvrQLYI+2MYgIQmtipBhXFEG030zIXWThEoIGKOBuwVzmOYtwiX7+8w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" lodash "^4.17.15" -"@abp/luxon@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.0.tgz#2d669786308df997c6738dd205363edaae670d15" - integrity sha512-1oSUuzgehSBxaxJLfD06ktXK4jisILPKFnEaKCBuPiKiQSDFvdQbepHAYJcpU1Jye6sVrheUKDUyJhnSwDb+0w== +"@abp/luxon@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.1.tgz#2e477be6a9f76394331399a762552bf610168e8e" + integrity sha512-bp74vBmObbqUXsOc4VRWml5ivEyIzwHLR4oycLvWG0bQZn65yt7db7DVYTQL1PCWbEAKf6eULlnF6JvZpSVgeg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.0.tgz#3bb48e0d68c0b76f3460eb19706927af2168a6c3" - integrity sha512-44JvJOfxJ5ihfNCPyc5U8D8N8CmLh8UBMkzjH7YJQZJO+7PGgjx+uEqbQhTtBDftUz5C5oFkGoQ7i2pil7YSYQ== +"@abp/malihu-custom-scrollbar-plugin@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.1.tgz#df833f2b8421f4dce681c13d2d5976680a27e4c8" + integrity sha512-bJRQTevunQulXo+EC1HWqYgV30RVmFcS218DtdZLm2x/xWFBhvr+2DLzLS2Gq8JJXNGQMFbHnCWixn5si4V/KA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/prismjs@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.3.0.tgz#88381eb65612c68d13dac02eb7e177a264a025ff" - integrity sha512-YwVmPDtvWq8JwjZ4sGqnR2fhkzlcfhH2qO1RQsv9wpfFe61Mh/3mIC1QKFq5mW52cM3f8I51oC7z9HMbBo8n4A== +"@abp/prismjs@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.3.1.tgz#3abe550b34aa957248f6b1e4543aab990561351e" + integrity sha512-4+BHvKDcJa8A3yKccUqyfDgr1eqVMGt9e9ie8HPHOGTG2y1XMAYipZJ22E+T8QvUxaeBBkkmpQ4dyAOpndHJJw== dependencies: - "@abp/clipboard" "~3.3.0" - "@abp/core" "~3.3.0" + "@abp/clipboard" "~3.3.1" + "@abp/core" "~3.3.1" prismjs "^1.20.0" -"@abp/select2@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.0.tgz#207460dd128a1620c332af5eea2df88bfdfd0520" - integrity sha512-dbOnzQVARBQp/ynJvNyJqE1ArtsWCV8nGMUablB1ILPonsJy+0ADJ+GXWa1nIsHdj3zPW0MLi8pdqpepRCTAFg== +"@abp/select2@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.1.tgz#65ac0ae3ac8783d4e0422717ce743d573bf559e4" + integrity sha512-efxhM/QxAmnyfGNcokZIK7vD6wYJkFGSnZEDj9QSrZ6DyUYf8H+jlK38JViDGe0RCMqts0R4B6IaKT0RbbIGmw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" select2 "^4.0.13" -"@abp/sweetalert@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.0.tgz#457a05af37819fc54082254022551ed0233c471e" - integrity sha512-6KXwPVC1zwNwlZBS9x0uPLTmieu3nmBp0G+ZH1aP+GTMphSa0ejI7nuPFqUeqfEMg+an1yj51SKKUfKtmlx6Zg== +"@abp/sweetalert@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.1.tgz#b6a41f8459d4407c4aee04e2f200b84e3fa8d534" + integrity sha512-olDU9Lh5o0sNCxRXROwt8QhHpuB5+fjojVWVUOiag0UMLVA9k/fp38diyn64qddSHWCafpqjeO32IXDKEQckZA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" sweetalert "^2.1.2" -"@abp/timeago@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.0.tgz#f0da23577630cec21255fc9c71dd2f7a3a3a3388" - integrity sha512-f5sb4vxgGPyIzTj6lxDzUx/qJiC8pAqWPasdxHDMzhKlkRuFWO+GfblR5DC/sj9fQPcyV8+yX/VQPY3JW8i62Q== +"@abp/timeago@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.1.tgz#9759e09728fea082d28cd430cdc1af5b93f14720" + integrity sha512-sIgSj3hZBl+oyO6rHc55YrIfqb4d2d2RlT6HU+OIsa2/BUAjTcW6WdPVUjXTreth2jyxEjXkfOKA3Sv5DvraGg== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" timeago "^1.6.7" -"@abp/toastr@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.0.tgz#c4f7d761eb4d93e993cb8e8cb54a0d670b20bdd3" - integrity sha512-GGqtVUCX8WalpkCnhiYUs+XxxBnhxGOLe87qFe/2tr0XNDJ3BSHXxiKynDetjlNAq/Qnf4U5P4Eg9FnHWFdWZg== +"@abp/toastr@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.1.tgz#06cf0b46e6430fae516aaff8707a5f5b16d6ed1d" + integrity sha512-LTf2NGwcG9ke571HMO7N4syhJijagnw/eIDl6ezflIQI/BnQqBKpXJ8xckCCqgryxfraBu4APMuSkPoDs2Ce5g== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" toastr "^2.1.4" -"@abp/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" - integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" diff --git a/modules/blogging/app/Volo.BloggingTestApp/package.json b/modules/blogging/app/Volo.BloggingTestApp/package.json index 6adf8b1f41..3b5bdb2024 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/package.json +++ b/modules/blogging/app/Volo.BloggingTestApp/package.json @@ -3,7 +3,7 @@ "name": "volo.blogtestapp", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.0", - "@abp/blogging": "^3.3.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.1", + "@abp/blogging": "^3.3.1" } } \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock index 48bb4a8680..886914cc6d 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock +++ b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.0.tgz#5a83ad1010ede0647cc4bbe225f0ebf8f3ac90d8" - integrity sha512-b0Z/CO7nLixuceC2A/rx4m6OQPwe7ELym+ZZdurUxI42ciuoC5Cnnl3FH+HCt8P3JdFjOIWl2wOXvUcc6P16oQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.0.tgz#6c998bad95e46905e5a1487ab2370905cdf4376a" - integrity sha512-Tt6SK3EUj8jfZKSzeIVkRuWyAGRoDTqeoS5VVkNZLoIfLzwiimHw2o2AlPRtCMa0jqLropHtaT/kNl+EU24AZw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.3.0" - "@abp/bootstrap" "~3.3.0" - "@abp/bootstrap-datepicker" "~3.3.0" - "@abp/datatables.net-bs4" "~3.3.0" - "@abp/font-awesome" "~3.3.0" - "@abp/jquery-form" "~3.3.0" - "@abp/jquery-validation-unobtrusive" "~3.3.0" - "@abp/lodash" "~3.3.0" - "@abp/luxon" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/select2" "~3.3.0" - "@abp/sweetalert" "~3.3.0" - "@abp/timeago" "~3.3.0" - "@abp/toastr" "~3.3.0" - -"@abp/aspnetcore.mvc.ui@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.0.tgz#07f7d0f7f689a3ac75a69e12681ebd3d08fa0644" - integrity sha512-EbUISgnR8qHYdu/tSro8QjUWj17M6gOkugMI7N0fiPNbtLHgKG2GHWxIsVEf5ic1O2j/PWKOQ+FPBLZ4v3jFrw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.1.tgz#58ae88355b821ca72eccf1950bde544b8f0edcca" + integrity sha512-AUIJQIBb+5of0Na1cxmyacni6ToYBpmtU+NJH9/cTC3UUAPylj8TiAX9yobAPn8dbrcXTm+dh9T8i49rXTtxoA== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.1.tgz#c3123ea8f6c8428d034d9ac2782aa1bff27bd740" + integrity sha512-j2uZapDTKSjH74uZcIR4y09hr6w+OAdybQhL1bx4fb0D3XlmOdOwRrsqXieJNwAggbUn00EX2Usiey3N/wV1rA== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.3.1" + "@abp/bootstrap" "~3.3.1" + "@abp/bootstrap-datepicker" "~3.3.1" + "@abp/datatables.net-bs4" "~3.3.1" + "@abp/font-awesome" "~3.3.1" + "@abp/jquery-form" "~3.3.1" + "@abp/jquery-validation-unobtrusive" "~3.3.1" + "@abp/lodash" "~3.3.1" + "@abp/luxon" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/select2" "~3.3.1" + "@abp/sweetalert" "~3.3.1" + "@abp/timeago" "~3.3.1" + "@abp/toastr" "~3.3.1" + +"@abp/aspnetcore.mvc.ui@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.1.tgz#946d5fb68d73842270e2553fba475163d2ca57a5" + integrity sha512-W/Yxe20Upkha0XaHPQwQ3+LxdUZI21BiARcbBUnIUzRUrFBpvjD0A9/T8bsi+KpIqOYLAwtrE1TJoSuZGscoIw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,214 +41,214 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/blogging@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-3.3.0.tgz#144b0bfe15b70900f1bd99f4646f3d2c0bb89d52" - integrity sha512-Fc7/SUTBg8qAIzwgKVLu4bUZZlmyKXK55LS8NXbhw6E4H54QJWdXTssP5/ChaKZRbxF6DOh/yIiTnSfu2WuUaQ== +"@abp/blogging@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-3.3.1.tgz#37d10f8c9230c27dc2a25fbec66c216915236444" + integrity sha512-BhMGPd8O2XTl5XEU63QAe0o0f8o+64yhXyIs/Ax1OyG32Qf9pgbutlRBIWhqmqKQzP9N/pPWWskPyJZOrMeWcg== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.0" - "@abp/owl.carousel" "~3.3.0" - "@abp/prismjs" "~3.3.0" - "@abp/tui-editor" "~3.3.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.1" + "@abp/owl.carousel" "~3.3.1" + "@abp/prismjs" "~3.3.1" + "@abp/tui-editor" "~3.3.1" -"@abp/bootstrap-datepicker@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.0.tgz#d7d11e591818a6ec654127d88602cfdfddf81b1f" - integrity sha512-PUsS48o5Cwufn8O8d34UBsjLF6/HrgdhsGTUzrVIhGapiyuYD/QrvqWYWRUj1Jeeb4nrsRVem2DnM1isy+CUCA== +"@abp/bootstrap-datepicker@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.1.tgz#c0f5763e0bfb1e293ef1b22f2a14014ec345dbc3" + integrity sha512-MnX2vI75gEDtlwnKhI6ptH657dh5TuXoin1XeaEhOa5rGbLwhSu4IFqRmlLBedFBOf+1zwcvFs30vsQlNKJ6Nw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.0.tgz#1314549e7a940c58fdff521a9ddf153f3414fffa" - integrity sha512-CVjSwbZPjio0VJWxdo+PRkvUYGtv51DgVrqjgHK7m7tGFwHAK38cDHAl+mqmIp7dgPG1Z+E0o41JteT3Za1Bkw== +"@abp/bootstrap@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.1.tgz#5b173918511b6ad1fb8ac570ea2e2fcb874970e0" + integrity sha512-CfnwXAV2XRK3gYpeEQjgVzEocU6pqdGZXwATwOKifHWBZNG8ubDyMgBed+oVCvJgRvLRrniR5jFK2vhm8Du+EQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/clipboard@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.3.0.tgz#44029c7bac7fe4f693ab3963515d300c49aa2d5e" - integrity sha512-YZKqjwZGue7o39GiuZf8WPEjt4ydQCSCG109fkIJQgbwjqkseeWPExJcYnogMSA4qWr4Ip1m3CQ17Yqtl1n8JA== +"@abp/clipboard@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.3.1.tgz#057381ecb3f5fb0744f2a742a4aff54294800439" + integrity sha512-iLtmLD/HXpHVWmLvbt2zY0EjZPmRLneCsT/gw07RWvy8iu+Hk8Cta8CD/Ak8RP5NdZkoYTO3Ojxdm7JUH0XN2g== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" clipboard "^2.0.6" -"@abp/codemirror@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-3.3.0.tgz#a9ac33155a92241dc6f35c9de104639fdc2c199f" - integrity sha512-C5/L0Hv0F7fzQt14NAyL0QQhhPrUcLkgFSxja/SknrA9nSIMoTg+r37Ny436GEHqoj8Jjj8u3jqErYhrOqd9cA== +"@abp/codemirror@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-3.3.1.tgz#5f810ad81cb306dc7bf6078c79ec6878a556ab5d" + integrity sha512-SHhHaoHXnc+PT5sst+5gP9pvYu+Nx+5pBudAGOGtugSV7QmZffrD42iCi64/D8b+eYeU1QN/FxS3hRQ0IDt1DA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" codemirror "^5.54.0" -"@abp/core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.0.tgz#c88c28df19f96349b9a32b7ebe402e6d267c34e5" - integrity sha512-y9P86zPAm55fAyKwDaoxv+IrApA339aaGEpN9364upeeNBsO8mYf9hoM136VovQaWNIABFHRD7R+9KskwPAuNA== +"@abp/core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.1.tgz#b1da2160b0fc4a309dc4a65ee937c814de16b2de" + integrity sha512-6/6FHTLZrWh821O6xr4Sk1BlIt9gTAT19NnykQRV9U8S7rl4BQv2QF055R8Wg3lnVKWJ1ajiAbd3gerjH/pL6g== dependencies: - "@abp/utils" "^3.3.0" + "@abp/utils" "^3.3.1" -"@abp/datatables.net-bs4@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.0.tgz#e4cc85f3c1c195d9e8b07532eb7c53619f40a787" - integrity sha512-StuwT8jGfDWGNXmYgRELuErXxSE+qjVoiSAkd27mZqDbYSTipq4OZSAHr6WNmoqMgP6QlCgjGgXcz4Pr8Pxuaw== +"@abp/datatables.net-bs4@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.1.tgz#fd0f5f5579ff94d635d19c1bf46ac0593639e3f4" + integrity sha512-C9BUlbsk9liJ+hmFpTKoearJNZISDy5TInTbnixL8WfXfIaAWdZRs+ADvhKO9+oWMxkbxhGI8ueYQ29Z1UJzMg== dependencies: - "@abp/datatables.net" "~3.3.0" + "@abp/datatables.net" "~3.3.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.0.tgz#a2b2cedc06beb325e62ce6faba899c935564b9a7" - integrity sha512-y0RGrLxI7VgWFAFtHAraDnrEJ5pkUIJ3zxEScS43RUbArhxk+5pIpxQbmU0WgHpk72H7WXdqtL486Kw8PSj1Nw== +"@abp/datatables.net@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.1.tgz#2ec7406712607f08f0ae9a6ce0ee7bfd0cc73278" + integrity sha512-prsMkh//XCymCG/aYEEtzV/922RJIZ0+PcnRvhJzXvrX4DK2y3ZWM44QNR/9/rpkYUJqRcVoHqbt1DuxbHDLXQ== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.0.tgz#f9307334c34309456c47cc407fbe079821ace45e" - integrity sha512-7/uZ2qXooHQZG35F6ERKsjI8m0gn8/BgE2cOB7Zhu5KRtSTOHOOXX4YWEfoHYLEMuo3xKTTJ2gHM3jiCJEpVtg== +"@abp/font-awesome@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.1.tgz#268a21685a6b810b15848169b78c3dfb11d582c6" + integrity sha512-Eg2dwtcsyLo5E6PC21vK5R8YFe32UFSN4DpNrqAP9I85daR8ZbT0US8SbfCcI5nhiZlRi3EWj/cUgz2IEJHaaQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/highlight.js@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-3.3.0.tgz#94c773e66a75ffe5d62485c2e70c7300fad9a611" - integrity sha512-CMXMeEA262yOs/ip2qbXfl+Kh3tTaUlogHlypT0AZ8Q0aQGs0tJiPVtGRJQ9xng/QfOzv+XWpPgYB5UIuwU6SQ== +"@abp/highlight.js@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-3.3.1.tgz#284def87eba0601d24e9221166e12ee94e13998f" + integrity sha512-6e9lAGi6uld2zIchMF12JWEdWPHUpG+npikbRxO5z5nHQhwplNk05uLVtMh5+KJKEwpsHkHMqtP5yo68gkjZ9w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" -"@abp/jquery-form@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.0.tgz#43fc5655b4e3cac7c0558fb36dd9ef188fe64412" - integrity sha512-fH4IPf/cU3ojWtVsPZjtymzK0xWqqgmvnSk5zy4AB4MOCKyYtPrn5OAMUvq8A4uZ0mGIRAQ8Z72wPKZA1rws5A== +"@abp/jquery-form@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.1.tgz#4e8c2e50e711a7bbe4f40e74210472b21afd0ecf" + integrity sha512-HBic6SzOSprYAug/Qbgcd+MiPRwtXczS2/x9IUmPFeUhvuqJJoYPWrhI5xC6WKNcJ/5MjExiEbeEXMXp8PwJTA== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.0.tgz#0840f3114626a1d6efff54f4791776ebfdf56e76" - integrity sha512-foKM9FDAY2RZGz5EQ2FcQt/FiL8sMc+uwd+2KeAdIejLyPgeSH/lLio6agd2Xun4e/xlBJB185Ga1eKcdHIGAw== +"@abp/jquery-validation-unobtrusive@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.1.tgz#e42d61a172b6ef5cbdbb305ab5d93e3dad5159a1" + integrity sha512-SH8zmrR3HshCNP0zIgi4j6PMhgCzmCKk5xXxD+8kg+LAv+bm1iP0K5srgX4WlEffRma80QIeNKPpe/lW04EgFw== dependencies: - "@abp/jquery-validation" "~3.3.0" + "@abp/jquery-validation" "~3.3.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.0.tgz#2199968638d7bab9bfb6ba5e9f27d9d607c09a24" - integrity sha512-jxw274hx8i9+dkRrDz7aUpWSGESnJ2wuA6e3IAQIlubFf+7q0o4vosXD5bubinn4qaRGcSiYC15armfefgmFCw== +"@abp/jquery-validation@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.1.tgz#05164e342fdb83f40a17f000b40c27df2604c394" + integrity sha512-oKN3wQUY1PB7IhelFIJVjRqAZx/AVlpUF0GV6k/9eNBK+ZoLpW1ebE1q9tsLhXf7QS1N7S45aEHB8OpjRopDew== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.0.tgz#b99a9436bf3c2394917e761a2dcdfe4f1af9ff3d" - integrity sha512-WrjDQCBOi83kjtMYjXCJVWSbnFxKLW/KtDADkjTF7TxIGccsNWx6E8npzdCEnDnlOJ5Rk9+1QIu07pWedOjBSg== +"@abp/jquery@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.1.tgz#2e8431a52641ab85d1372a32518307bbf8fba1a0" + integrity sha512-mSAUYLzhJSvq8ixhAFkU5Q2LRDTkJAGHq47alb2nNEodZNr1q1i+875nP3dE/4MLT/foG0H+j+r4RGuYx4fGAA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" jquery "~3.5.1" -"@abp/lodash@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.0.tgz#5402a779ef1e8ecd585644a68607425587560305" - integrity sha512-QFm9hpWs0/J5TFFiE7vO5oxTsLgMcibmgg/CxYvmQZXhHGZpx3mdoAzC48CvRu8quxr6Xo8pIxlCyYXniR6/Dw== +"@abp/lodash@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.1.tgz#5c2602f03bde7fbf7841c01bb7178b3ca3429d87" + integrity sha512-5fitYkotzaXGaEbwctVYT4HcfKZ1ghAnvrQLYI+2MYgIQmtipBhXFEG030zIXWThEoIGKOBuwVzmOYtwiX7+8w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" lodash "^4.17.15" -"@abp/luxon@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.0.tgz#2d669786308df997c6738dd205363edaae670d15" - integrity sha512-1oSUuzgehSBxaxJLfD06ktXK4jisILPKFnEaKCBuPiKiQSDFvdQbepHAYJcpU1Jye6sVrheUKDUyJhnSwDb+0w== +"@abp/luxon@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.1.tgz#2e477be6a9f76394331399a762552bf610168e8e" + integrity sha512-bp74vBmObbqUXsOc4VRWml5ivEyIzwHLR4oycLvWG0bQZn65yt7db7DVYTQL1PCWbEAKf6eULlnF6JvZpSVgeg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.0.tgz#3bb48e0d68c0b76f3460eb19706927af2168a6c3" - integrity sha512-44JvJOfxJ5ihfNCPyc5U8D8N8CmLh8UBMkzjH7YJQZJO+7PGgjx+uEqbQhTtBDftUz5C5oFkGoQ7i2pil7YSYQ== +"@abp/malihu-custom-scrollbar-plugin@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.1.tgz#df833f2b8421f4dce681c13d2d5976680a27e4c8" + integrity sha512-bJRQTevunQulXo+EC1HWqYgV30RVmFcS218DtdZLm2x/xWFBhvr+2DLzLS2Gq8JJXNGQMFbHnCWixn5si4V/KA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/markdown-it@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-3.3.0.tgz#91395f9c6f98a69d955b4e5cb534e38c5f4902b9" - integrity sha512-Awt1SD6zgy72kfEbHVOBbVv/bB0o17lZBg4dNf11jqEbJMUpsW04pE5U1nc7FgsaJuTZFLm36cgnjdeGzlb/yw== +"@abp/markdown-it@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-3.3.1.tgz#efacc89e49f370f9d05eaea639188115e8b5da84" + integrity sha512-I/UlKUynF8awg7b/hyG4Tr3/yqT/vilD1vStxqsIYHmLaBYRbd6Av+FI2iiUH/DwdPexJGWjq8xmi5nxsC2vlg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" markdown-it "^11.0.0" -"@abp/owl.carousel@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-3.3.0.tgz#bc3b721770ac0c41066581d55228eca65fd95b07" - integrity sha512-wKWplt/zupf+q+iYjAEMoHo/Trjf5pPM5a9EhIb+6C1s7d+VJ8+FbxXHXA1F86MF5Eq4HVhuWFJITmEwOTqnMg== +"@abp/owl.carousel@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-3.3.1.tgz#246a524459e24f5f506c40ad0e89512f164a83d8" + integrity sha512-xoQXh+OpHlSOt36lcO1/B2j4WfjWLMB/mn1lx7AxTOPtGNfo9pF06o9Tks5jG3tCvyPvUIuLH3ZXJbmWLvptYw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" owl.carousel "^2.3.4" -"@abp/prismjs@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.3.0.tgz#88381eb65612c68d13dac02eb7e177a264a025ff" - integrity sha512-YwVmPDtvWq8JwjZ4sGqnR2fhkzlcfhH2qO1RQsv9wpfFe61Mh/3mIC1QKFq5mW52cM3f8I51oC7z9HMbBo8n4A== +"@abp/prismjs@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.3.1.tgz#3abe550b34aa957248f6b1e4543aab990561351e" + integrity sha512-4+BHvKDcJa8A3yKccUqyfDgr1eqVMGt9e9ie8HPHOGTG2y1XMAYipZJ22E+T8QvUxaeBBkkmpQ4dyAOpndHJJw== dependencies: - "@abp/clipboard" "~3.3.0" - "@abp/core" "~3.3.0" + "@abp/clipboard" "~3.3.1" + "@abp/core" "~3.3.1" prismjs "^1.20.0" -"@abp/select2@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.0.tgz#207460dd128a1620c332af5eea2df88bfdfd0520" - integrity sha512-dbOnzQVARBQp/ynJvNyJqE1ArtsWCV8nGMUablB1ILPonsJy+0ADJ+GXWa1nIsHdj3zPW0MLi8pdqpepRCTAFg== +"@abp/select2@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.1.tgz#65ac0ae3ac8783d4e0422717ce743d573bf559e4" + integrity sha512-efxhM/QxAmnyfGNcokZIK7vD6wYJkFGSnZEDj9QSrZ6DyUYf8H+jlK38JViDGe0RCMqts0R4B6IaKT0RbbIGmw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" select2 "^4.0.13" -"@abp/sweetalert@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.0.tgz#457a05af37819fc54082254022551ed0233c471e" - integrity sha512-6KXwPVC1zwNwlZBS9x0uPLTmieu3nmBp0G+ZH1aP+GTMphSa0ejI7nuPFqUeqfEMg+an1yj51SKKUfKtmlx6Zg== +"@abp/sweetalert@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.1.tgz#b6a41f8459d4407c4aee04e2f200b84e3fa8d534" + integrity sha512-olDU9Lh5o0sNCxRXROwt8QhHpuB5+fjojVWVUOiag0UMLVA9k/fp38diyn64qddSHWCafpqjeO32IXDKEQckZA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" sweetalert "^2.1.2" -"@abp/timeago@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.0.tgz#f0da23577630cec21255fc9c71dd2f7a3a3a3388" - integrity sha512-f5sb4vxgGPyIzTj6lxDzUx/qJiC8pAqWPasdxHDMzhKlkRuFWO+GfblR5DC/sj9fQPcyV8+yX/VQPY3JW8i62Q== +"@abp/timeago@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.1.tgz#9759e09728fea082d28cd430cdc1af5b93f14720" + integrity sha512-sIgSj3hZBl+oyO6rHc55YrIfqb4d2d2RlT6HU+OIsa2/BUAjTcW6WdPVUjXTreth2jyxEjXkfOKA3Sv5DvraGg== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" timeago "^1.6.7" -"@abp/toastr@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.0.tgz#c4f7d761eb4d93e993cb8e8cb54a0d670b20bdd3" - integrity sha512-GGqtVUCX8WalpkCnhiYUs+XxxBnhxGOLe87qFe/2tr0XNDJ3BSHXxiKynDetjlNAq/Qnf4U5P4Eg9FnHWFdWZg== +"@abp/toastr@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.1.tgz#06cf0b46e6430fae516aaff8707a5f5b16d6ed1d" + integrity sha512-LTf2NGwcG9ke571HMO7N4syhJijagnw/eIDl6ezflIQI/BnQqBKpXJ8xckCCqgryxfraBu4APMuSkPoDs2Ce5g== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" toastr "^2.1.4" -"@abp/tui-editor@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-3.3.0.tgz#3d8333df7e9bb4972c9fb4bba89b2f8f2aa905d0" - integrity sha512-AwQO3D/WtrqytVOFcaQpHf3GcEThJ8+UvL9h382tb5rVbmKVkxCemRPkLF7wS1RVCJwPoZYFPXp6VNWY3nZTiw== +"@abp/tui-editor@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-3.3.1.tgz#c1aa4891d0aba055dbaed05947c4c9e0a94cdd36" + integrity sha512-dpuJ8YPmdpostILYizPIRJx1B7utBJl+P7L80Hy0ACXcXdc9HuRPe1vLoRMQ/OKfI9nLF9AbjmCEXy3h7JXYbw== dependencies: - "@abp/codemirror" "~3.3.0" - "@abp/highlight.js" "~3.3.0" - "@abp/jquery" "~3.3.0" - "@abp/markdown-it" "~3.3.0" + "@abp/codemirror" "~3.3.1" + "@abp/highlight.js" "~3.3.1" + "@abp/jquery" "~3.3.1" + "@abp/markdown-it" "~3.3.1" tui-editor "^1.4.10" -"@abp/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" - integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json index 4b35db8c0f..945ff9a958 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json @@ -3,6 +3,6 @@ "name": "client-simulation-web", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.1" } } \ No newline at end of file diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock index 9a46ed73d8..b0e37066bd 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.0.tgz#5a83ad1010ede0647cc4bbe225f0ebf8f3ac90d8" - integrity sha512-b0Z/CO7nLixuceC2A/rx4m6OQPwe7ELym+ZZdurUxI42ciuoC5Cnnl3FH+HCt8P3JdFjOIWl2wOXvUcc6P16oQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.0.tgz#6c998bad95e46905e5a1487ab2370905cdf4376a" - integrity sha512-Tt6SK3EUj8jfZKSzeIVkRuWyAGRoDTqeoS5VVkNZLoIfLzwiimHw2o2AlPRtCMa0jqLropHtaT/kNl+EU24AZw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.3.0" - "@abp/bootstrap" "~3.3.0" - "@abp/bootstrap-datepicker" "~3.3.0" - "@abp/datatables.net-bs4" "~3.3.0" - "@abp/font-awesome" "~3.3.0" - "@abp/jquery-form" "~3.3.0" - "@abp/jquery-validation-unobtrusive" "~3.3.0" - "@abp/lodash" "~3.3.0" - "@abp/luxon" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/select2" "~3.3.0" - "@abp/sweetalert" "~3.3.0" - "@abp/timeago" "~3.3.0" - "@abp/toastr" "~3.3.0" - -"@abp/aspnetcore.mvc.ui@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.0.tgz#07f7d0f7f689a3ac75a69e12681ebd3d08fa0644" - integrity sha512-EbUISgnR8qHYdu/tSro8QjUWj17M6gOkugMI7N0fiPNbtLHgKG2GHWxIsVEf5ic1O2j/PWKOQ+FPBLZ4v3jFrw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.1.tgz#58ae88355b821ca72eccf1950bde544b8f0edcca" + integrity sha512-AUIJQIBb+5of0Na1cxmyacni6ToYBpmtU+NJH9/cTC3UUAPylj8TiAX9yobAPn8dbrcXTm+dh9T8i49rXTtxoA== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.1.tgz#c3123ea8f6c8428d034d9ac2782aa1bff27bd740" + integrity sha512-j2uZapDTKSjH74uZcIR4y09hr6w+OAdybQhL1bx4fb0D3XlmOdOwRrsqXieJNwAggbUn00EX2Usiey3N/wV1rA== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.3.1" + "@abp/bootstrap" "~3.3.1" + "@abp/bootstrap-datepicker" "~3.3.1" + "@abp/datatables.net-bs4" "~3.3.1" + "@abp/font-awesome" "~3.3.1" + "@abp/jquery-form" "~3.3.1" + "@abp/jquery-validation-unobtrusive" "~3.3.1" + "@abp/lodash" "~3.3.1" + "@abp/luxon" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/select2" "~3.3.1" + "@abp/sweetalert" "~3.3.1" + "@abp/timeago" "~3.3.1" + "@abp/toastr" "~3.3.1" + +"@abp/aspnetcore.mvc.ui@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.1.tgz#946d5fb68d73842270e2553fba475163d2ca57a5" + integrity sha512-W/Yxe20Upkha0XaHPQwQ3+LxdUZI21BiARcbBUnIUzRUrFBpvjD0A9/T8bsi+KpIqOYLAwtrE1TJoSuZGscoIw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.0.tgz#d7d11e591818a6ec654127d88602cfdfddf81b1f" - integrity sha512-PUsS48o5Cwufn8O8d34UBsjLF6/HrgdhsGTUzrVIhGapiyuYD/QrvqWYWRUj1Jeeb4nrsRVem2DnM1isy+CUCA== +"@abp/bootstrap-datepicker@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.1.tgz#c0f5763e0bfb1e293ef1b22f2a14014ec345dbc3" + integrity sha512-MnX2vI75gEDtlwnKhI6ptH657dh5TuXoin1XeaEhOa5rGbLwhSu4IFqRmlLBedFBOf+1zwcvFs30vsQlNKJ6Nw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.0.tgz#1314549e7a940c58fdff521a9ddf153f3414fffa" - integrity sha512-CVjSwbZPjio0VJWxdo+PRkvUYGtv51DgVrqjgHK7m7tGFwHAK38cDHAl+mqmIp7dgPG1Z+E0o41JteT3Za1Bkw== +"@abp/bootstrap@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.1.tgz#5b173918511b6ad1fb8ac570ea2e2fcb874970e0" + integrity sha512-CfnwXAV2XRK3gYpeEQjgVzEocU6pqdGZXwATwOKifHWBZNG8ubDyMgBed+oVCvJgRvLRrniR5jFK2vhm8Du+EQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.0.tgz#c88c28df19f96349b9a32b7ebe402e6d267c34e5" - integrity sha512-y9P86zPAm55fAyKwDaoxv+IrApA339aaGEpN9364upeeNBsO8mYf9hoM136VovQaWNIABFHRD7R+9KskwPAuNA== +"@abp/core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.1.tgz#b1da2160b0fc4a309dc4a65ee937c814de16b2de" + integrity sha512-6/6FHTLZrWh821O6xr4Sk1BlIt9gTAT19NnykQRV9U8S7rl4BQv2QF055R8Wg3lnVKWJ1ajiAbd3gerjH/pL6g== dependencies: - "@abp/utils" "^3.3.0" + "@abp/utils" "^3.3.1" -"@abp/datatables.net-bs4@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.0.tgz#e4cc85f3c1c195d9e8b07532eb7c53619f40a787" - integrity sha512-StuwT8jGfDWGNXmYgRELuErXxSE+qjVoiSAkd27mZqDbYSTipq4OZSAHr6WNmoqMgP6QlCgjGgXcz4Pr8Pxuaw== +"@abp/datatables.net-bs4@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.1.tgz#fd0f5f5579ff94d635d19c1bf46ac0593639e3f4" + integrity sha512-C9BUlbsk9liJ+hmFpTKoearJNZISDy5TInTbnixL8WfXfIaAWdZRs+ADvhKO9+oWMxkbxhGI8ueYQ29Z1UJzMg== dependencies: - "@abp/datatables.net" "~3.3.0" + "@abp/datatables.net" "~3.3.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.0.tgz#a2b2cedc06beb325e62ce6faba899c935564b9a7" - integrity sha512-y0RGrLxI7VgWFAFtHAraDnrEJ5pkUIJ3zxEScS43RUbArhxk+5pIpxQbmU0WgHpk72H7WXdqtL486Kw8PSj1Nw== +"@abp/datatables.net@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.1.tgz#2ec7406712607f08f0ae9a6ce0ee7bfd0cc73278" + integrity sha512-prsMkh//XCymCG/aYEEtzV/922RJIZ0+PcnRvhJzXvrX4DK2y3ZWM44QNR/9/rpkYUJqRcVoHqbt1DuxbHDLXQ== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.0.tgz#f9307334c34309456c47cc407fbe079821ace45e" - integrity sha512-7/uZ2qXooHQZG35F6ERKsjI8m0gn8/BgE2cOB7Zhu5KRtSTOHOOXX4YWEfoHYLEMuo3xKTTJ2gHM3jiCJEpVtg== +"@abp/font-awesome@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.1.tgz#268a21685a6b810b15848169b78c3dfb11d582c6" + integrity sha512-Eg2dwtcsyLo5E6PC21vK5R8YFe32UFSN4DpNrqAP9I85daR8ZbT0US8SbfCcI5nhiZlRi3EWj/cUgz2IEJHaaQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.0.tgz#43fc5655b4e3cac7c0558fb36dd9ef188fe64412" - integrity sha512-fH4IPf/cU3ojWtVsPZjtymzK0xWqqgmvnSk5zy4AB4MOCKyYtPrn5OAMUvq8A4uZ0mGIRAQ8Z72wPKZA1rws5A== +"@abp/jquery-form@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.1.tgz#4e8c2e50e711a7bbe4f40e74210472b21afd0ecf" + integrity sha512-HBic6SzOSprYAug/Qbgcd+MiPRwtXczS2/x9IUmPFeUhvuqJJoYPWrhI5xC6WKNcJ/5MjExiEbeEXMXp8PwJTA== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.0.tgz#0840f3114626a1d6efff54f4791776ebfdf56e76" - integrity sha512-foKM9FDAY2RZGz5EQ2FcQt/FiL8sMc+uwd+2KeAdIejLyPgeSH/lLio6agd2Xun4e/xlBJB185Ga1eKcdHIGAw== +"@abp/jquery-validation-unobtrusive@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.1.tgz#e42d61a172b6ef5cbdbb305ab5d93e3dad5159a1" + integrity sha512-SH8zmrR3HshCNP0zIgi4j6PMhgCzmCKk5xXxD+8kg+LAv+bm1iP0K5srgX4WlEffRma80QIeNKPpe/lW04EgFw== dependencies: - "@abp/jquery-validation" "~3.3.0" + "@abp/jquery-validation" "~3.3.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.0.tgz#2199968638d7bab9bfb6ba5e9f27d9d607c09a24" - integrity sha512-jxw274hx8i9+dkRrDz7aUpWSGESnJ2wuA6e3IAQIlubFf+7q0o4vosXD5bubinn4qaRGcSiYC15armfefgmFCw== +"@abp/jquery-validation@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.1.tgz#05164e342fdb83f40a17f000b40c27df2604c394" + integrity sha512-oKN3wQUY1PB7IhelFIJVjRqAZx/AVlpUF0GV6k/9eNBK+ZoLpW1ebE1q9tsLhXf7QS1N7S45aEHB8OpjRopDew== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.0.tgz#b99a9436bf3c2394917e761a2dcdfe4f1af9ff3d" - integrity sha512-WrjDQCBOi83kjtMYjXCJVWSbnFxKLW/KtDADkjTF7TxIGccsNWx6E8npzdCEnDnlOJ5Rk9+1QIu07pWedOjBSg== +"@abp/jquery@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.1.tgz#2e8431a52641ab85d1372a32518307bbf8fba1a0" + integrity sha512-mSAUYLzhJSvq8ixhAFkU5Q2LRDTkJAGHq47alb2nNEodZNr1q1i+875nP3dE/4MLT/foG0H+j+r4RGuYx4fGAA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" jquery "~3.5.1" -"@abp/lodash@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.0.tgz#5402a779ef1e8ecd585644a68607425587560305" - integrity sha512-QFm9hpWs0/J5TFFiE7vO5oxTsLgMcibmgg/CxYvmQZXhHGZpx3mdoAzC48CvRu8quxr6Xo8pIxlCyYXniR6/Dw== +"@abp/lodash@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.1.tgz#5c2602f03bde7fbf7841c01bb7178b3ca3429d87" + integrity sha512-5fitYkotzaXGaEbwctVYT4HcfKZ1ghAnvrQLYI+2MYgIQmtipBhXFEG030zIXWThEoIGKOBuwVzmOYtwiX7+8w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" lodash "^4.17.15" -"@abp/luxon@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.0.tgz#2d669786308df997c6738dd205363edaae670d15" - integrity sha512-1oSUuzgehSBxaxJLfD06ktXK4jisILPKFnEaKCBuPiKiQSDFvdQbepHAYJcpU1Jye6sVrheUKDUyJhnSwDb+0w== +"@abp/luxon@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.1.tgz#2e477be6a9f76394331399a762552bf610168e8e" + integrity sha512-bp74vBmObbqUXsOc4VRWml5ivEyIzwHLR4oycLvWG0bQZn65yt7db7DVYTQL1PCWbEAKf6eULlnF6JvZpSVgeg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.0.tgz#3bb48e0d68c0b76f3460eb19706927af2168a6c3" - integrity sha512-44JvJOfxJ5ihfNCPyc5U8D8N8CmLh8UBMkzjH7YJQZJO+7PGgjx+uEqbQhTtBDftUz5C5oFkGoQ7i2pil7YSYQ== +"@abp/malihu-custom-scrollbar-plugin@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.1.tgz#df833f2b8421f4dce681c13d2d5976680a27e4c8" + integrity sha512-bJRQTevunQulXo+EC1HWqYgV30RVmFcS218DtdZLm2x/xWFBhvr+2DLzLS2Gq8JJXNGQMFbHnCWixn5si4V/KA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.0.tgz#207460dd128a1620c332af5eea2df88bfdfd0520" - integrity sha512-dbOnzQVARBQp/ynJvNyJqE1ArtsWCV8nGMUablB1ILPonsJy+0ADJ+GXWa1nIsHdj3zPW0MLi8pdqpepRCTAFg== +"@abp/select2@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.1.tgz#65ac0ae3ac8783d4e0422717ce743d573bf559e4" + integrity sha512-efxhM/QxAmnyfGNcokZIK7vD6wYJkFGSnZEDj9QSrZ6DyUYf8H+jlK38JViDGe0RCMqts0R4B6IaKT0RbbIGmw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" select2 "^4.0.13" -"@abp/sweetalert@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.0.tgz#457a05af37819fc54082254022551ed0233c471e" - integrity sha512-6KXwPVC1zwNwlZBS9x0uPLTmieu3nmBp0G+ZH1aP+GTMphSa0ejI7nuPFqUeqfEMg+an1yj51SKKUfKtmlx6Zg== +"@abp/sweetalert@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.1.tgz#b6a41f8459d4407c4aee04e2f200b84e3fa8d534" + integrity sha512-olDU9Lh5o0sNCxRXROwt8QhHpuB5+fjojVWVUOiag0UMLVA9k/fp38diyn64qddSHWCafpqjeO32IXDKEQckZA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" sweetalert "^2.1.2" -"@abp/timeago@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.0.tgz#f0da23577630cec21255fc9c71dd2f7a3a3a3388" - integrity sha512-f5sb4vxgGPyIzTj6lxDzUx/qJiC8pAqWPasdxHDMzhKlkRuFWO+GfblR5DC/sj9fQPcyV8+yX/VQPY3JW8i62Q== +"@abp/timeago@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.1.tgz#9759e09728fea082d28cd430cdc1af5b93f14720" + integrity sha512-sIgSj3hZBl+oyO6rHc55YrIfqb4d2d2RlT6HU+OIsa2/BUAjTcW6WdPVUjXTreth2jyxEjXkfOKA3Sv5DvraGg== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" timeago "^1.6.7" -"@abp/toastr@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.0.tgz#c4f7d761eb4d93e993cb8e8cb54a0d670b20bdd3" - integrity sha512-GGqtVUCX8WalpkCnhiYUs+XxxBnhxGOLe87qFe/2tr0XNDJ3BSHXxiKynDetjlNAq/Qnf4U5P4Eg9FnHWFdWZg== +"@abp/toastr@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.1.tgz#06cf0b46e6430fae516aaff8707a5f5b16d6ed1d" + integrity sha512-LTf2NGwcG9ke571HMO7N4syhJijagnw/eIDl6ezflIQI/BnQqBKpXJ8xckCCqgryxfraBu4APMuSkPoDs2Ce5g== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" toastr "^2.1.4" -"@abp/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" - integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json index afb0c67fd0..35b92ec223 100644 --- a/modules/cms-kit/angular/package.json +++ b/modules/cms-kit/angular/package.json @@ -15,11 +15,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~3.3.0", - "@abp/ng.identity": "~3.3.0", - "@abp/ng.setting-management": "~3.3.0", - "@abp/ng.tenant-management": "~3.3.0", - "@abp/ng.theme.basic": "~3.3.0", + "@abp/ng.account": "~3.3.1", + "@abp/ng.identity": "~3.3.1", + "@abp/ng.setting-management": "~3.3.1", + "@abp/ng.tenant-management": "~3.3.1", + "@abp/ng.theme.basic": "~3.3.1", "@angular/animations": "~10.0.0", "@angular/common": "~10.0.0", "@angular/compiler": "~10.0.0", diff --git a/modules/cms-kit/angular/projects/cms-kit/package.json b/modules/cms-kit/angular/projects/cms-kit/package.json index 8acad00cff..034381b987 100644 --- a/modules/cms-kit/angular/projects/cms-kit/package.json +++ b/modules/cms-kit/angular/projects/cms-kit/package.json @@ -4,8 +4,8 @@ "peerDependencies": { "@angular/common": "^9.1.11", "@angular/core": "^9.1.11", - "@abp/ng.core": ">=3.3.0", - "@abp/ng.theme.shared": ">=3.3.0" + "@abp/ng.core": ">=3.3.1", + "@abp/ng.theme.shared": ">=3.3.1" }, "dependencies": { "tslib": "^2.0.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json index 8e9f71b33b..8718ef2557 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.1" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock index 7478ec439a..b6fb3e1d1e 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.0.tgz#5a83ad1010ede0647cc4bbe225f0ebf8f3ac90d8" - integrity sha512-b0Z/CO7nLixuceC2A/rx4m6OQPwe7ELym+ZZdurUxI42ciuoC5Cnnl3FH+HCt8P3JdFjOIWl2wOXvUcc6P16oQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.0.tgz#6c998bad95e46905e5a1487ab2370905cdf4376a" - integrity sha512-Tt6SK3EUj8jfZKSzeIVkRuWyAGRoDTqeoS5VVkNZLoIfLzwiimHw2o2AlPRtCMa0jqLropHtaT/kNl+EU24AZw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.3.0" - "@abp/bootstrap" "~3.3.0" - "@abp/bootstrap-datepicker" "~3.3.0" - "@abp/datatables.net-bs4" "~3.3.0" - "@abp/font-awesome" "~3.3.0" - "@abp/jquery-form" "~3.3.0" - "@abp/jquery-validation-unobtrusive" "~3.3.0" - "@abp/lodash" "~3.3.0" - "@abp/luxon" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/select2" "~3.3.0" - "@abp/sweetalert" "~3.3.0" - "@abp/timeago" "~3.3.0" - "@abp/toastr" "~3.3.0" - -"@abp/aspnetcore.mvc.ui@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.0.tgz#07f7d0f7f689a3ac75a69e12681ebd3d08fa0644" - integrity sha512-EbUISgnR8qHYdu/tSro8QjUWj17M6gOkugMI7N0fiPNbtLHgKG2GHWxIsVEf5ic1O2j/PWKOQ+FPBLZ4v3jFrw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.1.tgz#58ae88355b821ca72eccf1950bde544b8f0edcca" + integrity sha512-AUIJQIBb+5of0Na1cxmyacni6ToYBpmtU+NJH9/cTC3UUAPylj8TiAX9yobAPn8dbrcXTm+dh9T8i49rXTtxoA== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.1.tgz#c3123ea8f6c8428d034d9ac2782aa1bff27bd740" + integrity sha512-j2uZapDTKSjH74uZcIR4y09hr6w+OAdybQhL1bx4fb0D3XlmOdOwRrsqXieJNwAggbUn00EX2Usiey3N/wV1rA== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.3.1" + "@abp/bootstrap" "~3.3.1" + "@abp/bootstrap-datepicker" "~3.3.1" + "@abp/datatables.net-bs4" "~3.3.1" + "@abp/font-awesome" "~3.3.1" + "@abp/jquery-form" "~3.3.1" + "@abp/jquery-validation-unobtrusive" "~3.3.1" + "@abp/lodash" "~3.3.1" + "@abp/luxon" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/select2" "~3.3.1" + "@abp/sweetalert" "~3.3.1" + "@abp/timeago" "~3.3.1" + "@abp/toastr" "~3.3.1" + +"@abp/aspnetcore.mvc.ui@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.1.tgz#946d5fb68d73842270e2553fba475163d2ca57a5" + integrity sha512-W/Yxe20Upkha0XaHPQwQ3+LxdUZI21BiARcbBUnIUzRUrFBpvjD0A9/T8bsi+KpIqOYLAwtrE1TJoSuZGscoIw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.0.tgz#d7d11e591818a6ec654127d88602cfdfddf81b1f" - integrity sha512-PUsS48o5Cwufn8O8d34UBsjLF6/HrgdhsGTUzrVIhGapiyuYD/QrvqWYWRUj1Jeeb4nrsRVem2DnM1isy+CUCA== +"@abp/bootstrap-datepicker@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.1.tgz#c0f5763e0bfb1e293ef1b22f2a14014ec345dbc3" + integrity sha512-MnX2vI75gEDtlwnKhI6ptH657dh5TuXoin1XeaEhOa5rGbLwhSu4IFqRmlLBedFBOf+1zwcvFs30vsQlNKJ6Nw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.0.tgz#1314549e7a940c58fdff521a9ddf153f3414fffa" - integrity sha512-CVjSwbZPjio0VJWxdo+PRkvUYGtv51DgVrqjgHK7m7tGFwHAK38cDHAl+mqmIp7dgPG1Z+E0o41JteT3Za1Bkw== +"@abp/bootstrap@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.1.tgz#5b173918511b6ad1fb8ac570ea2e2fcb874970e0" + integrity sha512-CfnwXAV2XRK3gYpeEQjgVzEocU6pqdGZXwATwOKifHWBZNG8ubDyMgBed+oVCvJgRvLRrniR5jFK2vhm8Du+EQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.0.tgz#c88c28df19f96349b9a32b7ebe402e6d267c34e5" - integrity sha512-y9P86zPAm55fAyKwDaoxv+IrApA339aaGEpN9364upeeNBsO8mYf9hoM136VovQaWNIABFHRD7R+9KskwPAuNA== +"@abp/core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.1.tgz#b1da2160b0fc4a309dc4a65ee937c814de16b2de" + integrity sha512-6/6FHTLZrWh821O6xr4Sk1BlIt9gTAT19NnykQRV9U8S7rl4BQv2QF055R8Wg3lnVKWJ1ajiAbd3gerjH/pL6g== dependencies: - "@abp/utils" "^3.3.0" + "@abp/utils" "^3.3.1" -"@abp/datatables.net-bs4@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.0.tgz#e4cc85f3c1c195d9e8b07532eb7c53619f40a787" - integrity sha512-StuwT8jGfDWGNXmYgRELuErXxSE+qjVoiSAkd27mZqDbYSTipq4OZSAHr6WNmoqMgP6QlCgjGgXcz4Pr8Pxuaw== +"@abp/datatables.net-bs4@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.1.tgz#fd0f5f5579ff94d635d19c1bf46ac0593639e3f4" + integrity sha512-C9BUlbsk9liJ+hmFpTKoearJNZISDy5TInTbnixL8WfXfIaAWdZRs+ADvhKO9+oWMxkbxhGI8ueYQ29Z1UJzMg== dependencies: - "@abp/datatables.net" "~3.3.0" + "@abp/datatables.net" "~3.3.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.0.tgz#a2b2cedc06beb325e62ce6faba899c935564b9a7" - integrity sha512-y0RGrLxI7VgWFAFtHAraDnrEJ5pkUIJ3zxEScS43RUbArhxk+5pIpxQbmU0WgHpk72H7WXdqtL486Kw8PSj1Nw== +"@abp/datatables.net@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.1.tgz#2ec7406712607f08f0ae9a6ce0ee7bfd0cc73278" + integrity sha512-prsMkh//XCymCG/aYEEtzV/922RJIZ0+PcnRvhJzXvrX4DK2y3ZWM44QNR/9/rpkYUJqRcVoHqbt1DuxbHDLXQ== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.0.tgz#f9307334c34309456c47cc407fbe079821ace45e" - integrity sha512-7/uZ2qXooHQZG35F6ERKsjI8m0gn8/BgE2cOB7Zhu5KRtSTOHOOXX4YWEfoHYLEMuo3xKTTJ2gHM3jiCJEpVtg== +"@abp/font-awesome@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.1.tgz#268a21685a6b810b15848169b78c3dfb11d582c6" + integrity sha512-Eg2dwtcsyLo5E6PC21vK5R8YFe32UFSN4DpNrqAP9I85daR8ZbT0US8SbfCcI5nhiZlRi3EWj/cUgz2IEJHaaQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.0.tgz#43fc5655b4e3cac7c0558fb36dd9ef188fe64412" - integrity sha512-fH4IPf/cU3ojWtVsPZjtymzK0xWqqgmvnSk5zy4AB4MOCKyYtPrn5OAMUvq8A4uZ0mGIRAQ8Z72wPKZA1rws5A== +"@abp/jquery-form@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.1.tgz#4e8c2e50e711a7bbe4f40e74210472b21afd0ecf" + integrity sha512-HBic6SzOSprYAug/Qbgcd+MiPRwtXczS2/x9IUmPFeUhvuqJJoYPWrhI5xC6WKNcJ/5MjExiEbeEXMXp8PwJTA== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.0.tgz#0840f3114626a1d6efff54f4791776ebfdf56e76" - integrity sha512-foKM9FDAY2RZGz5EQ2FcQt/FiL8sMc+uwd+2KeAdIejLyPgeSH/lLio6agd2Xun4e/xlBJB185Ga1eKcdHIGAw== +"@abp/jquery-validation-unobtrusive@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.1.tgz#e42d61a172b6ef5cbdbb305ab5d93e3dad5159a1" + integrity sha512-SH8zmrR3HshCNP0zIgi4j6PMhgCzmCKk5xXxD+8kg+LAv+bm1iP0K5srgX4WlEffRma80QIeNKPpe/lW04EgFw== dependencies: - "@abp/jquery-validation" "~3.3.0" + "@abp/jquery-validation" "~3.3.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.0.tgz#2199968638d7bab9bfb6ba5e9f27d9d607c09a24" - integrity sha512-jxw274hx8i9+dkRrDz7aUpWSGESnJ2wuA6e3IAQIlubFf+7q0o4vosXD5bubinn4qaRGcSiYC15armfefgmFCw== +"@abp/jquery-validation@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.1.tgz#05164e342fdb83f40a17f000b40c27df2604c394" + integrity sha512-oKN3wQUY1PB7IhelFIJVjRqAZx/AVlpUF0GV6k/9eNBK+ZoLpW1ebE1q9tsLhXf7QS1N7S45aEHB8OpjRopDew== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.0.tgz#b99a9436bf3c2394917e761a2dcdfe4f1af9ff3d" - integrity sha512-WrjDQCBOi83kjtMYjXCJVWSbnFxKLW/KtDADkjTF7TxIGccsNWx6E8npzdCEnDnlOJ5Rk9+1QIu07pWedOjBSg== +"@abp/jquery@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.1.tgz#2e8431a52641ab85d1372a32518307bbf8fba1a0" + integrity sha512-mSAUYLzhJSvq8ixhAFkU5Q2LRDTkJAGHq47alb2nNEodZNr1q1i+875nP3dE/4MLT/foG0H+j+r4RGuYx4fGAA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" jquery "~3.5.1" -"@abp/lodash@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.0.tgz#5402a779ef1e8ecd585644a68607425587560305" - integrity sha512-QFm9hpWs0/J5TFFiE7vO5oxTsLgMcibmgg/CxYvmQZXhHGZpx3mdoAzC48CvRu8quxr6Xo8pIxlCyYXniR6/Dw== +"@abp/lodash@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.1.tgz#5c2602f03bde7fbf7841c01bb7178b3ca3429d87" + integrity sha512-5fitYkotzaXGaEbwctVYT4HcfKZ1ghAnvrQLYI+2MYgIQmtipBhXFEG030zIXWThEoIGKOBuwVzmOYtwiX7+8w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" lodash "^4.17.15" -"@abp/luxon@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.0.tgz#2d669786308df997c6738dd205363edaae670d15" - integrity sha512-1oSUuzgehSBxaxJLfD06ktXK4jisILPKFnEaKCBuPiKiQSDFvdQbepHAYJcpU1Jye6sVrheUKDUyJhnSwDb+0w== +"@abp/luxon@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.1.tgz#2e477be6a9f76394331399a762552bf610168e8e" + integrity sha512-bp74vBmObbqUXsOc4VRWml5ivEyIzwHLR4oycLvWG0bQZn65yt7db7DVYTQL1PCWbEAKf6eULlnF6JvZpSVgeg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.0.tgz#3bb48e0d68c0b76f3460eb19706927af2168a6c3" - integrity sha512-44JvJOfxJ5ihfNCPyc5U8D8N8CmLh8UBMkzjH7YJQZJO+7PGgjx+uEqbQhTtBDftUz5C5oFkGoQ7i2pil7YSYQ== +"@abp/malihu-custom-scrollbar-plugin@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.1.tgz#df833f2b8421f4dce681c13d2d5976680a27e4c8" + integrity sha512-bJRQTevunQulXo+EC1HWqYgV30RVmFcS218DtdZLm2x/xWFBhvr+2DLzLS2Gq8JJXNGQMFbHnCWixn5si4V/KA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.0.tgz#207460dd128a1620c332af5eea2df88bfdfd0520" - integrity sha512-dbOnzQVARBQp/ynJvNyJqE1ArtsWCV8nGMUablB1ILPonsJy+0ADJ+GXWa1nIsHdj3zPW0MLi8pdqpepRCTAFg== +"@abp/select2@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.1.tgz#65ac0ae3ac8783d4e0422717ce743d573bf559e4" + integrity sha512-efxhM/QxAmnyfGNcokZIK7vD6wYJkFGSnZEDj9QSrZ6DyUYf8H+jlK38JViDGe0RCMqts0R4B6IaKT0RbbIGmw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" select2 "^4.0.13" -"@abp/sweetalert@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.0.tgz#457a05af37819fc54082254022551ed0233c471e" - integrity sha512-6KXwPVC1zwNwlZBS9x0uPLTmieu3nmBp0G+ZH1aP+GTMphSa0ejI7nuPFqUeqfEMg+an1yj51SKKUfKtmlx6Zg== +"@abp/sweetalert@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.1.tgz#b6a41f8459d4407c4aee04e2f200b84e3fa8d534" + integrity sha512-olDU9Lh5o0sNCxRXROwt8QhHpuB5+fjojVWVUOiag0UMLVA9k/fp38diyn64qddSHWCafpqjeO32IXDKEQckZA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" sweetalert "^2.1.2" -"@abp/timeago@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.0.tgz#f0da23577630cec21255fc9c71dd2f7a3a3a3388" - integrity sha512-f5sb4vxgGPyIzTj6lxDzUx/qJiC8pAqWPasdxHDMzhKlkRuFWO+GfblR5DC/sj9fQPcyV8+yX/VQPY3JW8i62Q== +"@abp/timeago@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.1.tgz#9759e09728fea082d28cd430cdc1af5b93f14720" + integrity sha512-sIgSj3hZBl+oyO6rHc55YrIfqb4d2d2RlT6HU+OIsa2/BUAjTcW6WdPVUjXTreth2jyxEjXkfOKA3Sv5DvraGg== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" timeago "^1.6.7" -"@abp/toastr@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.0.tgz#c4f7d761eb4d93e993cb8e8cb54a0d670b20bdd3" - integrity sha512-GGqtVUCX8WalpkCnhiYUs+XxxBnhxGOLe87qFe/2tr0XNDJ3BSHXxiKynDetjlNAq/Qnf4U5P4Eg9FnHWFdWZg== +"@abp/toastr@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.1.tgz#06cf0b46e6430fae516aaff8707a5f5b16d6ed1d" + integrity sha512-LTf2NGwcG9ke571HMO7N4syhJijagnw/eIDl6ezflIQI/BnQqBKpXJ8xckCCqgryxfraBu4APMuSkPoDs2Ce5g== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" toastr "^2.1.4" -"@abp/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" - integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json index 34ca938f87..e415c0b911 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.1" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock index fdf6b928a6..9b9528ce1b 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.0.tgz#5a83ad1010ede0647cc4bbe225f0ebf8f3ac90d8" - integrity sha512-b0Z/CO7nLixuceC2A/rx4m6OQPwe7ELym+ZZdurUxI42ciuoC5Cnnl3FH+HCt8P3JdFjOIWl2wOXvUcc6P16oQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.0.tgz#6c998bad95e46905e5a1487ab2370905cdf4376a" - integrity sha512-Tt6SK3EUj8jfZKSzeIVkRuWyAGRoDTqeoS5VVkNZLoIfLzwiimHw2o2AlPRtCMa0jqLropHtaT/kNl+EU24AZw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.3.0" - "@abp/bootstrap" "~3.3.0" - "@abp/bootstrap-datepicker" "~3.3.0" - "@abp/datatables.net-bs4" "~3.3.0" - "@abp/font-awesome" "~3.3.0" - "@abp/jquery-form" "~3.3.0" - "@abp/jquery-validation-unobtrusive" "~3.3.0" - "@abp/lodash" "~3.3.0" - "@abp/luxon" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/select2" "~3.3.0" - "@abp/sweetalert" "~3.3.0" - "@abp/timeago" "~3.3.0" - "@abp/toastr" "~3.3.0" - -"@abp/aspnetcore.mvc.ui@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.0.tgz#07f7d0f7f689a3ac75a69e12681ebd3d08fa0644" - integrity sha512-EbUISgnR8qHYdu/tSro8QjUWj17M6gOkugMI7N0fiPNbtLHgKG2GHWxIsVEf5ic1O2j/PWKOQ+FPBLZ4v3jFrw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.1.tgz#58ae88355b821ca72eccf1950bde544b8f0edcca" + integrity sha512-AUIJQIBb+5of0Na1cxmyacni6ToYBpmtU+NJH9/cTC3UUAPylj8TiAX9yobAPn8dbrcXTm+dh9T8i49rXTtxoA== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.1.tgz#c3123ea8f6c8428d034d9ac2782aa1bff27bd740" + integrity sha512-j2uZapDTKSjH74uZcIR4y09hr6w+OAdybQhL1bx4fb0D3XlmOdOwRrsqXieJNwAggbUn00EX2Usiey3N/wV1rA== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.3.1" + "@abp/bootstrap" "~3.3.1" + "@abp/bootstrap-datepicker" "~3.3.1" + "@abp/datatables.net-bs4" "~3.3.1" + "@abp/font-awesome" "~3.3.1" + "@abp/jquery-form" "~3.3.1" + "@abp/jquery-validation-unobtrusive" "~3.3.1" + "@abp/lodash" "~3.3.1" + "@abp/luxon" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/select2" "~3.3.1" + "@abp/sweetalert" "~3.3.1" + "@abp/timeago" "~3.3.1" + "@abp/toastr" "~3.3.1" + +"@abp/aspnetcore.mvc.ui@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.1.tgz#946d5fb68d73842270e2553fba475163d2ca57a5" + integrity sha512-W/Yxe20Upkha0XaHPQwQ3+LxdUZI21BiARcbBUnIUzRUrFBpvjD0A9/T8bsi+KpIqOYLAwtrE1TJoSuZGscoIw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.0.tgz#d7d11e591818a6ec654127d88602cfdfddf81b1f" - integrity sha512-PUsS48o5Cwufn8O8d34UBsjLF6/HrgdhsGTUzrVIhGapiyuYD/QrvqWYWRUj1Jeeb4nrsRVem2DnM1isy+CUCA== +"@abp/bootstrap-datepicker@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.1.tgz#c0f5763e0bfb1e293ef1b22f2a14014ec345dbc3" + integrity sha512-MnX2vI75gEDtlwnKhI6ptH657dh5TuXoin1XeaEhOa5rGbLwhSu4IFqRmlLBedFBOf+1zwcvFs30vsQlNKJ6Nw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.0.tgz#1314549e7a940c58fdff521a9ddf153f3414fffa" - integrity sha512-CVjSwbZPjio0VJWxdo+PRkvUYGtv51DgVrqjgHK7m7tGFwHAK38cDHAl+mqmIp7dgPG1Z+E0o41JteT3Za1Bkw== +"@abp/bootstrap@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.1.tgz#5b173918511b6ad1fb8ac570ea2e2fcb874970e0" + integrity sha512-CfnwXAV2XRK3gYpeEQjgVzEocU6pqdGZXwATwOKifHWBZNG8ubDyMgBed+oVCvJgRvLRrniR5jFK2vhm8Du+EQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.0.tgz#c88c28df19f96349b9a32b7ebe402e6d267c34e5" - integrity sha512-y9P86zPAm55fAyKwDaoxv+IrApA339aaGEpN9364upeeNBsO8mYf9hoM136VovQaWNIABFHRD7R+9KskwPAuNA== +"@abp/core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.1.tgz#b1da2160b0fc4a309dc4a65ee937c814de16b2de" + integrity sha512-6/6FHTLZrWh821O6xr4Sk1BlIt9gTAT19NnykQRV9U8S7rl4BQv2QF055R8Wg3lnVKWJ1ajiAbd3gerjH/pL6g== dependencies: - "@abp/utils" "^3.3.0" + "@abp/utils" "^3.3.1" -"@abp/datatables.net-bs4@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.0.tgz#e4cc85f3c1c195d9e8b07532eb7c53619f40a787" - integrity sha512-StuwT8jGfDWGNXmYgRELuErXxSE+qjVoiSAkd27mZqDbYSTipq4OZSAHr6WNmoqMgP6QlCgjGgXcz4Pr8Pxuaw== +"@abp/datatables.net-bs4@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.1.tgz#fd0f5f5579ff94d635d19c1bf46ac0593639e3f4" + integrity sha512-C9BUlbsk9liJ+hmFpTKoearJNZISDy5TInTbnixL8WfXfIaAWdZRs+ADvhKO9+oWMxkbxhGI8ueYQ29Z1UJzMg== dependencies: - "@abp/datatables.net" "~3.3.0" + "@abp/datatables.net" "~3.3.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.0.tgz#a2b2cedc06beb325e62ce6faba899c935564b9a7" - integrity sha512-y0RGrLxI7VgWFAFtHAraDnrEJ5pkUIJ3zxEScS43RUbArhxk+5pIpxQbmU0WgHpk72H7WXdqtL486Kw8PSj1Nw== +"@abp/datatables.net@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.1.tgz#2ec7406712607f08f0ae9a6ce0ee7bfd0cc73278" + integrity sha512-prsMkh//XCymCG/aYEEtzV/922RJIZ0+PcnRvhJzXvrX4DK2y3ZWM44QNR/9/rpkYUJqRcVoHqbt1DuxbHDLXQ== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.0.tgz#f9307334c34309456c47cc407fbe079821ace45e" - integrity sha512-7/uZ2qXooHQZG35F6ERKsjI8m0gn8/BgE2cOB7Zhu5KRtSTOHOOXX4YWEfoHYLEMuo3xKTTJ2gHM3jiCJEpVtg== +"@abp/font-awesome@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.1.tgz#268a21685a6b810b15848169b78c3dfb11d582c6" + integrity sha512-Eg2dwtcsyLo5E6PC21vK5R8YFe32UFSN4DpNrqAP9I85daR8ZbT0US8SbfCcI5nhiZlRi3EWj/cUgz2IEJHaaQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.0.tgz#43fc5655b4e3cac7c0558fb36dd9ef188fe64412" - integrity sha512-fH4IPf/cU3ojWtVsPZjtymzK0xWqqgmvnSk5zy4AB4MOCKyYtPrn5OAMUvq8A4uZ0mGIRAQ8Z72wPKZA1rws5A== +"@abp/jquery-form@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.1.tgz#4e8c2e50e711a7bbe4f40e74210472b21afd0ecf" + integrity sha512-HBic6SzOSprYAug/Qbgcd+MiPRwtXczS2/x9IUmPFeUhvuqJJoYPWrhI5xC6WKNcJ/5MjExiEbeEXMXp8PwJTA== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.0.tgz#0840f3114626a1d6efff54f4791776ebfdf56e76" - integrity sha512-foKM9FDAY2RZGz5EQ2FcQt/FiL8sMc+uwd+2KeAdIejLyPgeSH/lLio6agd2Xun4e/xlBJB185Ga1eKcdHIGAw== +"@abp/jquery-validation-unobtrusive@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.1.tgz#e42d61a172b6ef5cbdbb305ab5d93e3dad5159a1" + integrity sha512-SH8zmrR3HshCNP0zIgi4j6PMhgCzmCKk5xXxD+8kg+LAv+bm1iP0K5srgX4WlEffRma80QIeNKPpe/lW04EgFw== dependencies: - "@abp/jquery-validation" "~3.3.0" + "@abp/jquery-validation" "~3.3.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.0.tgz#2199968638d7bab9bfb6ba5e9f27d9d607c09a24" - integrity sha512-jxw274hx8i9+dkRrDz7aUpWSGESnJ2wuA6e3IAQIlubFf+7q0o4vosXD5bubinn4qaRGcSiYC15armfefgmFCw== +"@abp/jquery-validation@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.1.tgz#05164e342fdb83f40a17f000b40c27df2604c394" + integrity sha512-oKN3wQUY1PB7IhelFIJVjRqAZx/AVlpUF0GV6k/9eNBK+ZoLpW1ebE1q9tsLhXf7QS1N7S45aEHB8OpjRopDew== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.0.tgz#b99a9436bf3c2394917e761a2dcdfe4f1af9ff3d" - integrity sha512-WrjDQCBOi83kjtMYjXCJVWSbnFxKLW/KtDADkjTF7TxIGccsNWx6E8npzdCEnDnlOJ5Rk9+1QIu07pWedOjBSg== +"@abp/jquery@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.1.tgz#2e8431a52641ab85d1372a32518307bbf8fba1a0" + integrity sha512-mSAUYLzhJSvq8ixhAFkU5Q2LRDTkJAGHq47alb2nNEodZNr1q1i+875nP3dE/4MLT/foG0H+j+r4RGuYx4fGAA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" jquery "~3.5.1" -"@abp/lodash@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.0.tgz#5402a779ef1e8ecd585644a68607425587560305" - integrity sha512-QFm9hpWs0/J5TFFiE7vO5oxTsLgMcibmgg/CxYvmQZXhHGZpx3mdoAzC48CvRu8quxr6Xo8pIxlCyYXniR6/Dw== +"@abp/lodash@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.1.tgz#5c2602f03bde7fbf7841c01bb7178b3ca3429d87" + integrity sha512-5fitYkotzaXGaEbwctVYT4HcfKZ1ghAnvrQLYI+2MYgIQmtipBhXFEG030zIXWThEoIGKOBuwVzmOYtwiX7+8w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" lodash "^4.17.15" -"@abp/luxon@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.0.tgz#2d669786308df997c6738dd205363edaae670d15" - integrity sha512-1oSUuzgehSBxaxJLfD06ktXK4jisILPKFnEaKCBuPiKiQSDFvdQbepHAYJcpU1Jye6sVrheUKDUyJhnSwDb+0w== +"@abp/luxon@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.1.tgz#2e477be6a9f76394331399a762552bf610168e8e" + integrity sha512-bp74vBmObbqUXsOc4VRWml5ivEyIzwHLR4oycLvWG0bQZn65yt7db7DVYTQL1PCWbEAKf6eULlnF6JvZpSVgeg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.0.tgz#3bb48e0d68c0b76f3460eb19706927af2168a6c3" - integrity sha512-44JvJOfxJ5ihfNCPyc5U8D8N8CmLh8UBMkzjH7YJQZJO+7PGgjx+uEqbQhTtBDftUz5C5oFkGoQ7i2pil7YSYQ== +"@abp/malihu-custom-scrollbar-plugin@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.1.tgz#df833f2b8421f4dce681c13d2d5976680a27e4c8" + integrity sha512-bJRQTevunQulXo+EC1HWqYgV30RVmFcS218DtdZLm2x/xWFBhvr+2DLzLS2Gq8JJXNGQMFbHnCWixn5si4V/KA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.0.tgz#207460dd128a1620c332af5eea2df88bfdfd0520" - integrity sha512-dbOnzQVARBQp/ynJvNyJqE1ArtsWCV8nGMUablB1ILPonsJy+0ADJ+GXWa1nIsHdj3zPW0MLi8pdqpepRCTAFg== +"@abp/select2@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.1.tgz#65ac0ae3ac8783d4e0422717ce743d573bf559e4" + integrity sha512-efxhM/QxAmnyfGNcokZIK7vD6wYJkFGSnZEDj9QSrZ6DyUYf8H+jlK38JViDGe0RCMqts0R4B6IaKT0RbbIGmw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" select2 "^4.0.13" -"@abp/sweetalert@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.0.tgz#457a05af37819fc54082254022551ed0233c471e" - integrity sha512-6KXwPVC1zwNwlZBS9x0uPLTmieu3nmBp0G+ZH1aP+GTMphSa0ejI7nuPFqUeqfEMg+an1yj51SKKUfKtmlx6Zg== +"@abp/sweetalert@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.1.tgz#b6a41f8459d4407c4aee04e2f200b84e3fa8d534" + integrity sha512-olDU9Lh5o0sNCxRXROwt8QhHpuB5+fjojVWVUOiag0UMLVA9k/fp38diyn64qddSHWCafpqjeO32IXDKEQckZA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" sweetalert "^2.1.2" -"@abp/timeago@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.0.tgz#f0da23577630cec21255fc9c71dd2f7a3a3a3388" - integrity sha512-f5sb4vxgGPyIzTj6lxDzUx/qJiC8pAqWPasdxHDMzhKlkRuFWO+GfblR5DC/sj9fQPcyV8+yX/VQPY3JW8i62Q== +"@abp/timeago@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.1.tgz#9759e09728fea082d28cd430cdc1af5b93f14720" + integrity sha512-sIgSj3hZBl+oyO6rHc55YrIfqb4d2d2RlT6HU+OIsa2/BUAjTcW6WdPVUjXTreth2jyxEjXkfOKA3Sv5DvraGg== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" timeago "^1.6.7" -"@abp/toastr@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.0.tgz#c4f7d761eb4d93e993cb8e8cb54a0d670b20bdd3" - integrity sha512-GGqtVUCX8WalpkCnhiYUs+XxxBnhxGOLe87qFe/2tr0XNDJ3BSHXxiKynDetjlNAq/Qnf4U5P4Eg9FnHWFdWZg== +"@abp/toastr@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.1.tgz#06cf0b46e6430fae516aaff8707a5f5b16d6ed1d" + integrity sha512-LTf2NGwcG9ke571HMO7N4syhJijagnw/eIDl6ezflIQI/BnQqBKpXJ8xckCCqgryxfraBu4APMuSkPoDs2Ce5g== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" toastr "^2.1.4" -"@abp/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" - integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json index 34ca938f87..e415c0b911 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.1" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock index 8a2cf41872..69bf261f91 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.0.tgz#5a83ad1010ede0647cc4bbe225f0ebf8f3ac90d8" - integrity sha512-b0Z/CO7nLixuceC2A/rx4m6OQPwe7ELym+ZZdurUxI42ciuoC5Cnnl3FH+HCt8P3JdFjOIWl2wOXvUcc6P16oQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.0.tgz#6c998bad95e46905e5a1487ab2370905cdf4376a" - integrity sha512-Tt6SK3EUj8jfZKSzeIVkRuWyAGRoDTqeoS5VVkNZLoIfLzwiimHw2o2AlPRtCMa0jqLropHtaT/kNl+EU24AZw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.3.0" - "@abp/bootstrap" "~3.3.0" - "@abp/bootstrap-datepicker" "~3.3.0" - "@abp/datatables.net-bs4" "~3.3.0" - "@abp/font-awesome" "~3.3.0" - "@abp/jquery-form" "~3.3.0" - "@abp/jquery-validation-unobtrusive" "~3.3.0" - "@abp/lodash" "~3.3.0" - "@abp/luxon" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/select2" "~3.3.0" - "@abp/sweetalert" "~3.3.0" - "@abp/timeago" "~3.3.0" - "@abp/toastr" "~3.3.0" - -"@abp/aspnetcore.mvc.ui@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.0.tgz#07f7d0f7f689a3ac75a69e12681ebd3d08fa0644" - integrity sha512-EbUISgnR8qHYdu/tSro8QjUWj17M6gOkugMI7N0fiPNbtLHgKG2GHWxIsVEf5ic1O2j/PWKOQ+FPBLZ4v3jFrw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.1.tgz#58ae88355b821ca72eccf1950bde544b8f0edcca" + integrity sha512-AUIJQIBb+5of0Na1cxmyacni6ToYBpmtU+NJH9/cTC3UUAPylj8TiAX9yobAPn8dbrcXTm+dh9T8i49rXTtxoA== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.1.tgz#c3123ea8f6c8428d034d9ac2782aa1bff27bd740" + integrity sha512-j2uZapDTKSjH74uZcIR4y09hr6w+OAdybQhL1bx4fb0D3XlmOdOwRrsqXieJNwAggbUn00EX2Usiey3N/wV1rA== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.3.1" + "@abp/bootstrap" "~3.3.1" + "@abp/bootstrap-datepicker" "~3.3.1" + "@abp/datatables.net-bs4" "~3.3.1" + "@abp/font-awesome" "~3.3.1" + "@abp/jquery-form" "~3.3.1" + "@abp/jquery-validation-unobtrusive" "~3.3.1" + "@abp/lodash" "~3.3.1" + "@abp/luxon" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/select2" "~3.3.1" + "@abp/sweetalert" "~3.3.1" + "@abp/timeago" "~3.3.1" + "@abp/toastr" "~3.3.1" + +"@abp/aspnetcore.mvc.ui@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.1.tgz#946d5fb68d73842270e2553fba475163d2ca57a5" + integrity sha512-W/Yxe20Upkha0XaHPQwQ3+LxdUZI21BiARcbBUnIUzRUrFBpvjD0A9/T8bsi+KpIqOYLAwtrE1TJoSuZGscoIw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.0.tgz#d7d11e591818a6ec654127d88602cfdfddf81b1f" - integrity sha512-PUsS48o5Cwufn8O8d34UBsjLF6/HrgdhsGTUzrVIhGapiyuYD/QrvqWYWRUj1Jeeb4nrsRVem2DnM1isy+CUCA== +"@abp/bootstrap-datepicker@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.1.tgz#c0f5763e0bfb1e293ef1b22f2a14014ec345dbc3" + integrity sha512-MnX2vI75gEDtlwnKhI6ptH657dh5TuXoin1XeaEhOa5rGbLwhSu4IFqRmlLBedFBOf+1zwcvFs30vsQlNKJ6Nw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.0.tgz#1314549e7a940c58fdff521a9ddf153f3414fffa" - integrity sha512-CVjSwbZPjio0VJWxdo+PRkvUYGtv51DgVrqjgHK7m7tGFwHAK38cDHAl+mqmIp7dgPG1Z+E0o41JteT3Za1Bkw== +"@abp/bootstrap@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.1.tgz#5b173918511b6ad1fb8ac570ea2e2fcb874970e0" + integrity sha512-CfnwXAV2XRK3gYpeEQjgVzEocU6pqdGZXwATwOKifHWBZNG8ubDyMgBed+oVCvJgRvLRrniR5jFK2vhm8Du+EQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.0.tgz#c88c28df19f96349b9a32b7ebe402e6d267c34e5" - integrity sha512-y9P86zPAm55fAyKwDaoxv+IrApA339aaGEpN9364upeeNBsO8mYf9hoM136VovQaWNIABFHRD7R+9KskwPAuNA== +"@abp/core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.1.tgz#b1da2160b0fc4a309dc4a65ee937c814de16b2de" + integrity sha512-6/6FHTLZrWh821O6xr4Sk1BlIt9gTAT19NnykQRV9U8S7rl4BQv2QF055R8Wg3lnVKWJ1ajiAbd3gerjH/pL6g== dependencies: - "@abp/utils" "^3.3.0" + "@abp/utils" "^3.3.1" -"@abp/datatables.net-bs4@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.0.tgz#e4cc85f3c1c195d9e8b07532eb7c53619f40a787" - integrity sha512-StuwT8jGfDWGNXmYgRELuErXxSE+qjVoiSAkd27mZqDbYSTipq4OZSAHr6WNmoqMgP6QlCgjGgXcz4Pr8Pxuaw== +"@abp/datatables.net-bs4@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.1.tgz#fd0f5f5579ff94d635d19c1bf46ac0593639e3f4" + integrity sha512-C9BUlbsk9liJ+hmFpTKoearJNZISDy5TInTbnixL8WfXfIaAWdZRs+ADvhKO9+oWMxkbxhGI8ueYQ29Z1UJzMg== dependencies: - "@abp/datatables.net" "~3.3.0" + "@abp/datatables.net" "~3.3.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.0.tgz#a2b2cedc06beb325e62ce6faba899c935564b9a7" - integrity sha512-y0RGrLxI7VgWFAFtHAraDnrEJ5pkUIJ3zxEScS43RUbArhxk+5pIpxQbmU0WgHpk72H7WXdqtL486Kw8PSj1Nw== +"@abp/datatables.net@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.1.tgz#2ec7406712607f08f0ae9a6ce0ee7bfd0cc73278" + integrity sha512-prsMkh//XCymCG/aYEEtzV/922RJIZ0+PcnRvhJzXvrX4DK2y3ZWM44QNR/9/rpkYUJqRcVoHqbt1DuxbHDLXQ== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.0.tgz#f9307334c34309456c47cc407fbe079821ace45e" - integrity sha512-7/uZ2qXooHQZG35F6ERKsjI8m0gn8/BgE2cOB7Zhu5KRtSTOHOOXX4YWEfoHYLEMuo3xKTTJ2gHM3jiCJEpVtg== +"@abp/font-awesome@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.1.tgz#268a21685a6b810b15848169b78c3dfb11d582c6" + integrity sha512-Eg2dwtcsyLo5E6PC21vK5R8YFe32UFSN4DpNrqAP9I85daR8ZbT0US8SbfCcI5nhiZlRi3EWj/cUgz2IEJHaaQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.0.tgz#43fc5655b4e3cac7c0558fb36dd9ef188fe64412" - integrity sha512-fH4IPf/cU3ojWtVsPZjtymzK0xWqqgmvnSk5zy4AB4MOCKyYtPrn5OAMUvq8A4uZ0mGIRAQ8Z72wPKZA1rws5A== +"@abp/jquery-form@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.1.tgz#4e8c2e50e711a7bbe4f40e74210472b21afd0ecf" + integrity sha512-HBic6SzOSprYAug/Qbgcd+MiPRwtXczS2/x9IUmPFeUhvuqJJoYPWrhI5xC6WKNcJ/5MjExiEbeEXMXp8PwJTA== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.0.tgz#0840f3114626a1d6efff54f4791776ebfdf56e76" - integrity sha512-foKM9FDAY2RZGz5EQ2FcQt/FiL8sMc+uwd+2KeAdIejLyPgeSH/lLio6agd2Xun4e/xlBJB185Ga1eKcdHIGAw== +"@abp/jquery-validation-unobtrusive@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.1.tgz#e42d61a172b6ef5cbdbb305ab5d93e3dad5159a1" + integrity sha512-SH8zmrR3HshCNP0zIgi4j6PMhgCzmCKk5xXxD+8kg+LAv+bm1iP0K5srgX4WlEffRma80QIeNKPpe/lW04EgFw== dependencies: - "@abp/jquery-validation" "~3.3.0" + "@abp/jquery-validation" "~3.3.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.0.tgz#2199968638d7bab9bfb6ba5e9f27d9d607c09a24" - integrity sha512-jxw274hx8i9+dkRrDz7aUpWSGESnJ2wuA6e3IAQIlubFf+7q0o4vosXD5bubinn4qaRGcSiYC15armfefgmFCw== +"@abp/jquery-validation@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.1.tgz#05164e342fdb83f40a17f000b40c27df2604c394" + integrity sha512-oKN3wQUY1PB7IhelFIJVjRqAZx/AVlpUF0GV6k/9eNBK+ZoLpW1ebE1q9tsLhXf7QS1N7S45aEHB8OpjRopDew== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.0.tgz#b99a9436bf3c2394917e761a2dcdfe4f1af9ff3d" - integrity sha512-WrjDQCBOi83kjtMYjXCJVWSbnFxKLW/KtDADkjTF7TxIGccsNWx6E8npzdCEnDnlOJ5Rk9+1QIu07pWedOjBSg== +"@abp/jquery@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.1.tgz#2e8431a52641ab85d1372a32518307bbf8fba1a0" + integrity sha512-mSAUYLzhJSvq8ixhAFkU5Q2LRDTkJAGHq47alb2nNEodZNr1q1i+875nP3dE/4MLT/foG0H+j+r4RGuYx4fGAA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" jquery "~3.5.1" -"@abp/lodash@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.0.tgz#5402a779ef1e8ecd585644a68607425587560305" - integrity sha512-QFm9hpWs0/J5TFFiE7vO5oxTsLgMcibmgg/CxYvmQZXhHGZpx3mdoAzC48CvRu8quxr6Xo8pIxlCyYXniR6/Dw== +"@abp/lodash@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.1.tgz#5c2602f03bde7fbf7841c01bb7178b3ca3429d87" + integrity sha512-5fitYkotzaXGaEbwctVYT4HcfKZ1ghAnvrQLYI+2MYgIQmtipBhXFEG030zIXWThEoIGKOBuwVzmOYtwiX7+8w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" lodash "^4.17.15" -"@abp/luxon@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.0.tgz#2d669786308df997c6738dd205363edaae670d15" - integrity sha512-1oSUuzgehSBxaxJLfD06ktXK4jisILPKFnEaKCBuPiKiQSDFvdQbepHAYJcpU1Jye6sVrheUKDUyJhnSwDb+0w== +"@abp/luxon@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.1.tgz#2e477be6a9f76394331399a762552bf610168e8e" + integrity sha512-bp74vBmObbqUXsOc4VRWml5ivEyIzwHLR4oycLvWG0bQZn65yt7db7DVYTQL1PCWbEAKf6eULlnF6JvZpSVgeg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.0.tgz#3bb48e0d68c0b76f3460eb19706927af2168a6c3" - integrity sha512-44JvJOfxJ5ihfNCPyc5U8D8N8CmLh8UBMkzjH7YJQZJO+7PGgjx+uEqbQhTtBDftUz5C5oFkGoQ7i2pil7YSYQ== +"@abp/malihu-custom-scrollbar-plugin@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.1.tgz#df833f2b8421f4dce681c13d2d5976680a27e4c8" + integrity sha512-bJRQTevunQulXo+EC1HWqYgV30RVmFcS218DtdZLm2x/xWFBhvr+2DLzLS2Gq8JJXNGQMFbHnCWixn5si4V/KA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.0.tgz#207460dd128a1620c332af5eea2df88bfdfd0520" - integrity sha512-dbOnzQVARBQp/ynJvNyJqE1ArtsWCV8nGMUablB1ILPonsJy+0ADJ+GXWa1nIsHdj3zPW0MLi8pdqpepRCTAFg== +"@abp/select2@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.1.tgz#65ac0ae3ac8783d4e0422717ce743d573bf559e4" + integrity sha512-efxhM/QxAmnyfGNcokZIK7vD6wYJkFGSnZEDj9QSrZ6DyUYf8H+jlK38JViDGe0RCMqts0R4B6IaKT0RbbIGmw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" select2 "^4.0.13" -"@abp/sweetalert@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.0.tgz#457a05af37819fc54082254022551ed0233c471e" - integrity sha512-6KXwPVC1zwNwlZBS9x0uPLTmieu3nmBp0G+ZH1aP+GTMphSa0ejI7nuPFqUeqfEMg+an1yj51SKKUfKtmlx6Zg== +"@abp/sweetalert@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.1.tgz#b6a41f8459d4407c4aee04e2f200b84e3fa8d534" + integrity sha512-olDU9Lh5o0sNCxRXROwt8QhHpuB5+fjojVWVUOiag0UMLVA9k/fp38diyn64qddSHWCafpqjeO32IXDKEQckZA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" sweetalert "^2.1.2" -"@abp/timeago@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.0.tgz#f0da23577630cec21255fc9c71dd2f7a3a3a3388" - integrity sha512-f5sb4vxgGPyIzTj6lxDzUx/qJiC8pAqWPasdxHDMzhKlkRuFWO+GfblR5DC/sj9fQPcyV8+yX/VQPY3JW8i62Q== +"@abp/timeago@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.1.tgz#9759e09728fea082d28cd430cdc1af5b93f14720" + integrity sha512-sIgSj3hZBl+oyO6rHc55YrIfqb4d2d2RlT6HU+OIsa2/BUAjTcW6WdPVUjXTreth2jyxEjXkfOKA3Sv5DvraGg== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" timeago "^1.6.7" -"@abp/toastr@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.0.tgz#c4f7d761eb4d93e993cb8e8cb54a0d670b20bdd3" - integrity sha512-GGqtVUCX8WalpkCnhiYUs+XxxBnhxGOLe87qFe/2tr0XNDJ3BSHXxiKynDetjlNAq/Qnf4U5P4Eg9FnHWFdWZg== +"@abp/toastr@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.1.tgz#06cf0b46e6430fae516aaff8707a5f5b16d6ed1d" + integrity sha512-LTf2NGwcG9ke571HMO7N4syhJijagnw/eIDl6ezflIQI/BnQqBKpXJ8xckCCqgryxfraBu4APMuSkPoDs2Ce5g== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" toastr "^2.1.4" -"@abp/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" - integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" diff --git a/modules/docs/app/VoloDocs.Web/package.json b/modules/docs/app/VoloDocs.Web/package.json index a23a6d8f89..fd4d07be82 100644 --- a/modules/docs/app/VoloDocs.Web/package.json +++ b/modules/docs/app/VoloDocs.Web/package.json @@ -3,7 +3,7 @@ "name": "volo.docstestapp", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.0", - "@abp/docs": "^3.3.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.1", + "@abp/docs": "^3.3.1" } } diff --git a/modules/docs/app/VoloDocs.Web/yarn.lock b/modules/docs/app/VoloDocs.Web/yarn.lock index 64515a90df..cd91877d1f 100644 --- a/modules/docs/app/VoloDocs.Web/yarn.lock +++ b/modules/docs/app/VoloDocs.Web/yarn.lock @@ -2,45 +2,45 @@ # yarn lockfile v1 -"@abp/anchor-js@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-3.3.0.tgz#a40489ee53865c5746297e014297ae7bbd6ada3b" - integrity sha512-885Ub6OFJvlv+EZNpQ642K79C63n2g4ogfhVIgAhUuhTYSjpP4Oq/WFOhUPIWyMHHphZemyqqV0UZRvFs0lqpQ== +"@abp/anchor-js@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-3.3.1.tgz#ba0843f55e324f0bc4714d8183c7f942865aa774" + integrity sha512-at2m281xksP5A9I9HykPai4WQK2UedrLXFSAWGpFhXx6zWvQ5YeUZliCS/eX1rX3fhMGKwcEL0CGXA03kMn72A== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" anchor-js "^4.2.2" -"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.0.tgz#5a83ad1010ede0647cc4bbe225f0ebf8f3ac90d8" - integrity sha512-b0Z/CO7nLixuceC2A/rx4m6OQPwe7ELym+ZZdurUxI42ciuoC5Cnnl3FH+HCt8P3JdFjOIWl2wOXvUcc6P16oQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.0.tgz#6c998bad95e46905e5a1487ab2370905cdf4376a" - integrity sha512-Tt6SK3EUj8jfZKSzeIVkRuWyAGRoDTqeoS5VVkNZLoIfLzwiimHw2o2AlPRtCMa0jqLropHtaT/kNl+EU24AZw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.3.0" - "@abp/bootstrap" "~3.3.0" - "@abp/bootstrap-datepicker" "~3.3.0" - "@abp/datatables.net-bs4" "~3.3.0" - "@abp/font-awesome" "~3.3.0" - "@abp/jquery-form" "~3.3.0" - "@abp/jquery-validation-unobtrusive" "~3.3.0" - "@abp/lodash" "~3.3.0" - "@abp/luxon" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/select2" "~3.3.0" - "@abp/sweetalert" "~3.3.0" - "@abp/timeago" "~3.3.0" - "@abp/toastr" "~3.3.0" - -"@abp/aspnetcore.mvc.ui@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.0.tgz#07f7d0f7f689a3ac75a69e12681ebd3d08fa0644" - integrity sha512-EbUISgnR8qHYdu/tSro8QjUWj17M6gOkugMI7N0fiPNbtLHgKG2GHWxIsVEf5ic1O2j/PWKOQ+FPBLZ4v3jFrw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.1.tgz#58ae88355b821ca72eccf1950bde544b8f0edcca" + integrity sha512-AUIJQIBb+5of0Na1cxmyacni6ToYBpmtU+NJH9/cTC3UUAPylj8TiAX9yobAPn8dbrcXTm+dh9T8i49rXTtxoA== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.1.tgz#c3123ea8f6c8428d034d9ac2782aa1bff27bd740" + integrity sha512-j2uZapDTKSjH74uZcIR4y09hr6w+OAdybQhL1bx4fb0D3XlmOdOwRrsqXieJNwAggbUn00EX2Usiey3N/wV1rA== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.3.1" + "@abp/bootstrap" "~3.3.1" + "@abp/bootstrap-datepicker" "~3.3.1" + "@abp/datatables.net-bs4" "~3.3.1" + "@abp/font-awesome" "~3.3.1" + "@abp/jquery-form" "~3.3.1" + "@abp/jquery-validation-unobtrusive" "~3.3.1" + "@abp/lodash" "~3.3.1" + "@abp/luxon" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/select2" "~3.3.1" + "@abp/sweetalert" "~3.3.1" + "@abp/timeago" "~3.3.1" + "@abp/toastr" "~3.3.1" + +"@abp/aspnetcore.mvc.ui@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.1.tgz#946d5fb68d73842270e2553fba475163d2ca57a5" + integrity sha512-W/Yxe20Upkha0XaHPQwQ3+LxdUZI21BiARcbBUnIUzRUrFBpvjD0A9/T8bsi+KpIqOYLAwtrE1TJoSuZGscoIw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -49,181 +49,181 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.0.tgz#d7d11e591818a6ec654127d88602cfdfddf81b1f" - integrity sha512-PUsS48o5Cwufn8O8d34UBsjLF6/HrgdhsGTUzrVIhGapiyuYD/QrvqWYWRUj1Jeeb4nrsRVem2DnM1isy+CUCA== +"@abp/bootstrap-datepicker@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.1.tgz#c0f5763e0bfb1e293ef1b22f2a14014ec345dbc3" + integrity sha512-MnX2vI75gEDtlwnKhI6ptH657dh5TuXoin1XeaEhOa5rGbLwhSu4IFqRmlLBedFBOf+1zwcvFs30vsQlNKJ6Nw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.0.tgz#1314549e7a940c58fdff521a9ddf153f3414fffa" - integrity sha512-CVjSwbZPjio0VJWxdo+PRkvUYGtv51DgVrqjgHK7m7tGFwHAK38cDHAl+mqmIp7dgPG1Z+E0o41JteT3Za1Bkw== +"@abp/bootstrap@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.1.tgz#5b173918511b6ad1fb8ac570ea2e2fcb874970e0" + integrity sha512-CfnwXAV2XRK3gYpeEQjgVzEocU6pqdGZXwATwOKifHWBZNG8ubDyMgBed+oVCvJgRvLRrniR5jFK2vhm8Du+EQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/clipboard@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.3.0.tgz#44029c7bac7fe4f693ab3963515d300c49aa2d5e" - integrity sha512-YZKqjwZGue7o39GiuZf8WPEjt4ydQCSCG109fkIJQgbwjqkseeWPExJcYnogMSA4qWr4Ip1m3CQ17Yqtl1n8JA== +"@abp/clipboard@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.3.1.tgz#057381ecb3f5fb0744f2a742a4aff54294800439" + integrity sha512-iLtmLD/HXpHVWmLvbt2zY0EjZPmRLneCsT/gw07RWvy8iu+Hk8Cta8CD/Ak8RP5NdZkoYTO3Ojxdm7JUH0XN2g== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" clipboard "^2.0.6" -"@abp/core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.0.tgz#c88c28df19f96349b9a32b7ebe402e6d267c34e5" - integrity sha512-y9P86zPAm55fAyKwDaoxv+IrApA339aaGEpN9364upeeNBsO8mYf9hoM136VovQaWNIABFHRD7R+9KskwPAuNA== +"@abp/core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.1.tgz#b1da2160b0fc4a309dc4a65ee937c814de16b2de" + integrity sha512-6/6FHTLZrWh821O6xr4Sk1BlIt9gTAT19NnykQRV9U8S7rl4BQv2QF055R8Wg3lnVKWJ1ajiAbd3gerjH/pL6g== dependencies: - "@abp/utils" "^3.3.0" + "@abp/utils" "^3.3.1" -"@abp/datatables.net-bs4@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.0.tgz#e4cc85f3c1c195d9e8b07532eb7c53619f40a787" - integrity sha512-StuwT8jGfDWGNXmYgRELuErXxSE+qjVoiSAkd27mZqDbYSTipq4OZSAHr6WNmoqMgP6QlCgjGgXcz4Pr8Pxuaw== +"@abp/datatables.net-bs4@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.1.tgz#fd0f5f5579ff94d635d19c1bf46ac0593639e3f4" + integrity sha512-C9BUlbsk9liJ+hmFpTKoearJNZISDy5TInTbnixL8WfXfIaAWdZRs+ADvhKO9+oWMxkbxhGI8ueYQ29Z1UJzMg== dependencies: - "@abp/datatables.net" "~3.3.0" + "@abp/datatables.net" "~3.3.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.0.tgz#a2b2cedc06beb325e62ce6faba899c935564b9a7" - integrity sha512-y0RGrLxI7VgWFAFtHAraDnrEJ5pkUIJ3zxEScS43RUbArhxk+5pIpxQbmU0WgHpk72H7WXdqtL486Kw8PSj1Nw== +"@abp/datatables.net@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.1.tgz#2ec7406712607f08f0ae9a6ce0ee7bfd0cc73278" + integrity sha512-prsMkh//XCymCG/aYEEtzV/922RJIZ0+PcnRvhJzXvrX4DK2y3ZWM44QNR/9/rpkYUJqRcVoHqbt1DuxbHDLXQ== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" datatables.net "^1.10.21" -"@abp/docs@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-3.3.0.tgz#65259049e6e891048bb2f9fb1606b9a8fe896555" - integrity sha512-zBlextUI0VI8mBFJjH91tRFDZDCpcVP3nvB68z08idRhronlc7nB1tzeNfG0rxMh8palZlZtQwPVYUTLY4oKUw== +"@abp/docs@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-3.3.1.tgz#97c07bb4a436c63dcb9208d3075f131ee1e90a89" + integrity sha512-ZUhm8ubt/zQQ9psp1dLTf4S1/DPo8rfc82nTH/EgRvbUsX3Qmwj+3McDFJNPzCqC7j/3162/j+flRZn9j0Vm3g== dependencies: - "@abp/anchor-js" "~3.3.0" - "@abp/clipboard" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/popper.js" "~3.3.0" - "@abp/prismjs" "~3.3.0" + "@abp/anchor-js" "~3.3.1" + "@abp/clipboard" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/popper.js" "~3.3.1" + "@abp/prismjs" "~3.3.1" -"@abp/font-awesome@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.0.tgz#f9307334c34309456c47cc407fbe079821ace45e" - integrity sha512-7/uZ2qXooHQZG35F6ERKsjI8m0gn8/BgE2cOB7Zhu5KRtSTOHOOXX4YWEfoHYLEMuo3xKTTJ2gHM3jiCJEpVtg== +"@abp/font-awesome@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.1.tgz#268a21685a6b810b15848169b78c3dfb11d582c6" + integrity sha512-Eg2dwtcsyLo5E6PC21vK5R8YFe32UFSN4DpNrqAP9I85daR8ZbT0US8SbfCcI5nhiZlRi3EWj/cUgz2IEJHaaQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.0.tgz#43fc5655b4e3cac7c0558fb36dd9ef188fe64412" - integrity sha512-fH4IPf/cU3ojWtVsPZjtymzK0xWqqgmvnSk5zy4AB4MOCKyYtPrn5OAMUvq8A4uZ0mGIRAQ8Z72wPKZA1rws5A== +"@abp/jquery-form@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.1.tgz#4e8c2e50e711a7bbe4f40e74210472b21afd0ecf" + integrity sha512-HBic6SzOSprYAug/Qbgcd+MiPRwtXczS2/x9IUmPFeUhvuqJJoYPWrhI5xC6WKNcJ/5MjExiEbeEXMXp8PwJTA== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.0.tgz#0840f3114626a1d6efff54f4791776ebfdf56e76" - integrity sha512-foKM9FDAY2RZGz5EQ2FcQt/FiL8sMc+uwd+2KeAdIejLyPgeSH/lLio6agd2Xun4e/xlBJB185Ga1eKcdHIGAw== +"@abp/jquery-validation-unobtrusive@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.1.tgz#e42d61a172b6ef5cbdbb305ab5d93e3dad5159a1" + integrity sha512-SH8zmrR3HshCNP0zIgi4j6PMhgCzmCKk5xXxD+8kg+LAv+bm1iP0K5srgX4WlEffRma80QIeNKPpe/lW04EgFw== dependencies: - "@abp/jquery-validation" "~3.3.0" + "@abp/jquery-validation" "~3.3.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.0.tgz#2199968638d7bab9bfb6ba5e9f27d9d607c09a24" - integrity sha512-jxw274hx8i9+dkRrDz7aUpWSGESnJ2wuA6e3IAQIlubFf+7q0o4vosXD5bubinn4qaRGcSiYC15armfefgmFCw== +"@abp/jquery-validation@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.1.tgz#05164e342fdb83f40a17f000b40c27df2604c394" + integrity sha512-oKN3wQUY1PB7IhelFIJVjRqAZx/AVlpUF0GV6k/9eNBK+ZoLpW1ebE1q9tsLhXf7QS1N7S45aEHB8OpjRopDew== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.0.tgz#b99a9436bf3c2394917e761a2dcdfe4f1af9ff3d" - integrity sha512-WrjDQCBOi83kjtMYjXCJVWSbnFxKLW/KtDADkjTF7TxIGccsNWx6E8npzdCEnDnlOJ5Rk9+1QIu07pWedOjBSg== +"@abp/jquery@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.1.tgz#2e8431a52641ab85d1372a32518307bbf8fba1a0" + integrity sha512-mSAUYLzhJSvq8ixhAFkU5Q2LRDTkJAGHq47alb2nNEodZNr1q1i+875nP3dE/4MLT/foG0H+j+r4RGuYx4fGAA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" jquery "~3.5.1" -"@abp/lodash@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.0.tgz#5402a779ef1e8ecd585644a68607425587560305" - integrity sha512-QFm9hpWs0/J5TFFiE7vO5oxTsLgMcibmgg/CxYvmQZXhHGZpx3mdoAzC48CvRu8quxr6Xo8pIxlCyYXniR6/Dw== +"@abp/lodash@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.1.tgz#5c2602f03bde7fbf7841c01bb7178b3ca3429d87" + integrity sha512-5fitYkotzaXGaEbwctVYT4HcfKZ1ghAnvrQLYI+2MYgIQmtipBhXFEG030zIXWThEoIGKOBuwVzmOYtwiX7+8w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" lodash "^4.17.15" -"@abp/luxon@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.0.tgz#2d669786308df997c6738dd205363edaae670d15" - integrity sha512-1oSUuzgehSBxaxJLfD06ktXK4jisILPKFnEaKCBuPiKiQSDFvdQbepHAYJcpU1Jye6sVrheUKDUyJhnSwDb+0w== +"@abp/luxon@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.1.tgz#2e477be6a9f76394331399a762552bf610168e8e" + integrity sha512-bp74vBmObbqUXsOc4VRWml5ivEyIzwHLR4oycLvWG0bQZn65yt7db7DVYTQL1PCWbEAKf6eULlnF6JvZpSVgeg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.0.tgz#3bb48e0d68c0b76f3460eb19706927af2168a6c3" - integrity sha512-44JvJOfxJ5ihfNCPyc5U8D8N8CmLh8UBMkzjH7YJQZJO+7PGgjx+uEqbQhTtBDftUz5C5oFkGoQ7i2pil7YSYQ== +"@abp/malihu-custom-scrollbar-plugin@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.1.tgz#df833f2b8421f4dce681c13d2d5976680a27e4c8" + integrity sha512-bJRQTevunQulXo+EC1HWqYgV30RVmFcS218DtdZLm2x/xWFBhvr+2DLzLS2Gq8JJXNGQMFbHnCWixn5si4V/KA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/popper.js@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-3.3.0.tgz#53ff96017e2dea348ede0390d605cfe4d2981fcd" - integrity sha512-SjADjLdKhUet2rM5oqr9VJcgIPBlxCQwYYUSZzB51Mwp30KFhx272rdww3J/khVbt6N7L/YTIL/FKC2iTqBGcQ== +"@abp/popper.js@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-3.3.1.tgz#4c7a7e0fee346d60a76dc50e82220b4e03bff839" + integrity sha512-rSegW12pPBk3PaBfPVz7tH5fxP48A06xVVRq5ztYicHIHq1lpTJeXXZJf4QFMBvFtdaMOPPtQEL8wFRUM3OJJw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" popper.js "^1.16.0" -"@abp/prismjs@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.3.0.tgz#88381eb65612c68d13dac02eb7e177a264a025ff" - integrity sha512-YwVmPDtvWq8JwjZ4sGqnR2fhkzlcfhH2qO1RQsv9wpfFe61Mh/3mIC1QKFq5mW52cM3f8I51oC7z9HMbBo8n4A== +"@abp/prismjs@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.3.1.tgz#3abe550b34aa957248f6b1e4543aab990561351e" + integrity sha512-4+BHvKDcJa8A3yKccUqyfDgr1eqVMGt9e9ie8HPHOGTG2y1XMAYipZJ22E+T8QvUxaeBBkkmpQ4dyAOpndHJJw== dependencies: - "@abp/clipboard" "~3.3.0" - "@abp/core" "~3.3.0" + "@abp/clipboard" "~3.3.1" + "@abp/core" "~3.3.1" prismjs "^1.20.0" -"@abp/select2@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.0.tgz#207460dd128a1620c332af5eea2df88bfdfd0520" - integrity sha512-dbOnzQVARBQp/ynJvNyJqE1ArtsWCV8nGMUablB1ILPonsJy+0ADJ+GXWa1nIsHdj3zPW0MLi8pdqpepRCTAFg== +"@abp/select2@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.1.tgz#65ac0ae3ac8783d4e0422717ce743d573bf559e4" + integrity sha512-efxhM/QxAmnyfGNcokZIK7vD6wYJkFGSnZEDj9QSrZ6DyUYf8H+jlK38JViDGe0RCMqts0R4B6IaKT0RbbIGmw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" select2 "^4.0.13" -"@abp/sweetalert@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.0.tgz#457a05af37819fc54082254022551ed0233c471e" - integrity sha512-6KXwPVC1zwNwlZBS9x0uPLTmieu3nmBp0G+ZH1aP+GTMphSa0ejI7nuPFqUeqfEMg+an1yj51SKKUfKtmlx6Zg== +"@abp/sweetalert@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.1.tgz#b6a41f8459d4407c4aee04e2f200b84e3fa8d534" + integrity sha512-olDU9Lh5o0sNCxRXROwt8QhHpuB5+fjojVWVUOiag0UMLVA9k/fp38diyn64qddSHWCafpqjeO32IXDKEQckZA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" sweetalert "^2.1.2" -"@abp/timeago@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.0.tgz#f0da23577630cec21255fc9c71dd2f7a3a3a3388" - integrity sha512-f5sb4vxgGPyIzTj6lxDzUx/qJiC8pAqWPasdxHDMzhKlkRuFWO+GfblR5DC/sj9fQPcyV8+yX/VQPY3JW8i62Q== +"@abp/timeago@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.1.tgz#9759e09728fea082d28cd430cdc1af5b93f14720" + integrity sha512-sIgSj3hZBl+oyO6rHc55YrIfqb4d2d2RlT6HU+OIsa2/BUAjTcW6WdPVUjXTreth2jyxEjXkfOKA3Sv5DvraGg== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" timeago "^1.6.7" -"@abp/toastr@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.0.tgz#c4f7d761eb4d93e993cb8e8cb54a0d670b20bdd3" - integrity sha512-GGqtVUCX8WalpkCnhiYUs+XxxBnhxGOLe87qFe/2tr0XNDJ3BSHXxiKynDetjlNAq/Qnf4U5P4Eg9FnHWFdWZg== +"@abp/toastr@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.1.tgz#06cf0b46e6430fae516aaff8707a5f5b16d6ed1d" + integrity sha512-LTf2NGwcG9ke571HMO7N4syhJijagnw/eIDl6ezflIQI/BnQqBKpXJ8xckCCqgryxfraBu4APMuSkPoDs2Ce5g== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" toastr "^2.1.4" -"@abp/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" - integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" diff --git a/npm/lerna.json b/npm/lerna.json index 3e94d9ced7..4dee7eb715 100644 --- a/npm/lerna.json +++ b/npm/lerna.json @@ -1,5 +1,5 @@ { - "version": "3.3.0", + "version": "3.3.1", "packages": [ "packs/*" ], diff --git a/npm/ng-packs/lerna.version.json b/npm/ng-packs/lerna.version.json index 13dbd74158..fb789685b7 100644 --- a/npm/ng-packs/lerna.version.json +++ b/npm/ng-packs/lerna.version.json @@ -1,5 +1,5 @@ { - "version": "3.3.0", + "version": "3.3.1", "packages": [ "packages/*" ], diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index f0feef1671..9ce382c01f 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -25,17 +25,17 @@ "postinstall": "npm run compile:ivy" }, "devDependencies": { - "@abp/ng.account": "~3.3.0", - "@abp/ng.core": "~3.3.0", - "@abp/ng.feature-management": "~3.3.0", - "@abp/ng.identity": "~3.3.0", - "@abp/ng.permission-management": "~3.3.0", - "@abp/ng.schematics": "~3.3.0", - "@abp/ng.setting-management": "~3.3.0", - "@abp/ng.tenant-management": "~3.3.0", - "@abp/ng.theme.basic": "~3.3.0", - "@abp/ng.theme.shared": "~3.3.0", - "@abp/utils": "^3.3.0", + "@abp/ng.account": "~3.3.1", + "@abp/ng.core": "~3.3.1", + "@abp/ng.feature-management": "~3.3.1", + "@abp/ng.identity": "~3.3.1", + "@abp/ng.permission-management": "~3.3.1", + "@abp/ng.schematics": "~3.3.1", + "@abp/ng.setting-management": "~3.3.1", + "@abp/ng.tenant-management": "~3.3.1", + "@abp/ng.theme.basic": "~3.3.1", + "@abp/ng.theme.shared": "~3.3.1", + "@abp/utils": "^3.3.1", "@angular-builders/jest": "^10.0.0", "@angular-devkit/build-angular": "~0.1001.2", "@angular-devkit/build-ng-packagr": "~0.1001.2", diff --git a/npm/ng-packs/packages/account/package.json b/npm/ng-packs/packages/account/package.json index 06c6edef4f..91471e4b28 100644 --- a/npm/ng-packs/packages/account/package.json +++ b/npm/ng-packs/packages/account/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.account", - "version": "3.3.0", + "version": "3.3.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.3.0", + "@abp/ng.theme.shared": "~3.3.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/components/package.json b/npm/ng-packs/packages/components/package.json index 58abc39e2e..0cb84a20e9 100644 --- a/npm/ng-packs/packages/components/package.json +++ b/npm/ng-packs/packages/components/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.components", - "version": "3.3.0", + "version": "3.3.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "peerDependencies": { - "@abp/ng.core": ">=3.3.0", + "@abp/ng.core": ">=3.3.1", "@ng-bootstrap/ng-bootstrap": ">=6.0.0" }, "dependencies": { diff --git a/npm/ng-packs/packages/core/package.json b/npm/ng-packs/packages/core/package.json index 761d596cae..3c2a3381ac 100644 --- a/npm/ng-packs/packages/core/package.json +++ b/npm/ng-packs/packages/core/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.core", - "version": "3.3.0", + "version": "3.3.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/utils": "^3.3.0", + "@abp/utils": "^3.3.1", "@angular/localize": "~10.0.10", "@ngxs/router-plugin": "^3.7.0", "@ngxs/storage-plugin": "^3.7.0", diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json index 84f86ca7e4..4326ed16cd 100644 --- a/npm/ng-packs/packages/feature-management/package.json +++ b/npm/ng-packs/packages/feature-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.feature-management", - "version": "3.3.0", + "version": "3.3.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.3.0", + "@abp/ng.theme.shared": "~3.3.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/identity/package.json b/npm/ng-packs/packages/identity/package.json index ec563b1534..df13e1b3ac 100644 --- a/npm/ng-packs/packages/identity/package.json +++ b/npm/ng-packs/packages/identity/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.identity", - "version": "3.3.0", + "version": "3.3.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.permission-management": "~3.3.0", - "@abp/ng.theme.shared": "~3.3.0", + "@abp/ng.permission-management": "~3.3.1", + "@abp/ng.theme.shared": "~3.3.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/permission-management/package.json b/npm/ng-packs/packages/permission-management/package.json index 4da96e3464..a349b47284 100644 --- a/npm/ng-packs/packages/permission-management/package.json +++ b/npm/ng-packs/packages/permission-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.permission-management", - "version": "3.3.0", + "version": "3.3.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.3.0", + "@abp/ng.theme.shared": "~3.3.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/schematics/package.json b/npm/ng-packs/packages/schematics/package.json index 27255df267..1773cbd756 100644 --- a/npm/ng-packs/packages/schematics/package.json +++ b/npm/ng-packs/packages/schematics/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.schematics", - "version": "3.3.0", + "version": "3.3.1", "description": "Schematics that works with ABP Backend", "keywords": [ "schematics" diff --git a/npm/ng-packs/packages/setting-management/package.json b/npm/ng-packs/packages/setting-management/package.json index 1a73f5055b..6748909cf9 100644 --- a/npm/ng-packs/packages/setting-management/package.json +++ b/npm/ng-packs/packages/setting-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.setting-management", - "version": "3.3.0", + "version": "3.3.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.3.0", + "@abp/ng.theme.shared": "~3.3.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/packages/tenant-management/package.json index 976a47b64f..09d283df2d 100644 --- a/npm/ng-packs/packages/tenant-management/package.json +++ b/npm/ng-packs/packages/tenant-management/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.tenant-management", - "version": "3.3.0", + "version": "3.3.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.feature-management": "~3.3.0", - "@abp/ng.theme.shared": "~3.3.0", + "@abp/ng.feature-management": "~3.3.1", + "@abp/ng.theme.shared": "~3.3.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/theme-basic/package.json b/npm/ng-packs/packages/theme-basic/package.json index 07e7782c04..4293784f58 100644 --- a/npm/ng-packs/packages/theme-basic/package.json +++ b/npm/ng-packs/packages/theme-basic/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.basic", - "version": "3.3.0", + "version": "3.3.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.3.0", + "@abp/ng.theme.shared": "~3.3.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/theme-shared/package.json b/npm/ng-packs/packages/theme-shared/package.json index 138c22371f..dc21a17793 100644 --- a/npm/ng-packs/packages/theme-shared/package.json +++ b/npm/ng-packs/packages/theme-shared/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.shared", - "version": "3.3.0", + "version": "3.3.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~3.3.0", + "@abp/ng.core": "~3.3.1", "@fortawesome/fontawesome-free": "^5.14.0", "@ng-bootstrap/ng-bootstrap": "^7.0.0", "@ngx-validate/core": "^0.0.12", diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index 6c687e6c64..c23b6f2c88 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -2,20 +2,20 @@ # yarn lockfile v1 -"@abp/ng.account@~3.3.0-rc.2": - version "3.3.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-3.3.0-rc.2.tgz#dbc2892f28476c0a7412c790268b81eb00af41a9" - integrity sha512-LRpOOOLqT5BXvlgG1Zwxi9j3Odk9AnSK/aKxM1wB34kjdBssuIakN2RVs0Xgz1gmrvQV9RBNe7+yQJuS86WuWw== +"@abp/ng.account@~3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-3.3.0.tgz#db36a62b9b3106096a95844c5f8c8df664dc68f0" + integrity sha512-jJuGUIsQL4rBgpr8TqnEKp9PKtrl4KooeizeQIQWrm4JwC0ZQRyo1PB+D3mDI6sPXQo4Uc2YA14nRSGJ9OSdXA== dependencies: - "@abp/ng.theme.shared" "~3.3.0-rc.2" + "@abp/ng.theme.shared" "~3.3.0" tslib "^2.0.0" -"@abp/ng.core@~3.3.0-rc.2": - version "3.3.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-3.3.0-rc.2.tgz#ad313a8cf9e01527b4af086fdd0906ec88c3694a" - integrity sha512-HpAX8HpC+Z/eOQpNKcLVhEylyCYSEVLSz0WHsuae9dQk7yfJikZJAPpQSS6VrNl1vpYwARtJoiWfK0jrjvwhMA== +"@abp/ng.core@~3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-3.3.0.tgz#dd013e171c18a66eede4b8404211d69f09a60533" + integrity sha512-ERH1XyAY1tviWctyYKL8w/9stGogcN5g2ty/6OdZf3dUPcN2MrjXt8o8nRdvA7yUfP4VFKH8xl7qAnSMO+5iCQ== dependencies: - "@abp/utils" "^3.3.0-rc.1" + "@abp/utils" "^3.3.0-rc.2" "@angular/localize" "~10.0.10" "@ngxs/router-plugin" "^3.7.0" "@ngxs/storage-plugin" "^3.7.0" @@ -27,35 +27,35 @@ ts-toolbelt "6.15.4" tslib "^2.0.0" -"@abp/ng.feature-management@~3.3.0-rc.2": - version "3.3.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-3.3.0-rc.2.tgz#9d2c3d02504a64f2196e2ae588a81e6d72d31172" - integrity sha512-d/M5t6rEy5k2hO8tjHdYgnT9AgBAb82JruxplyLM4kOti9Kox7W6thBokDfVpiCQQh+WMtZX/DK1wNZPyFjZ5Q== +"@abp/ng.feature-management@~3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-3.3.0.tgz#6f83895acd8cf2bb163cc5260404eab86d6d7a4d" + integrity sha512-XjCEDw1aiQ9zt8McEazqx+lgbtMicQn2KAq/Z45G3Pp138twvT7nDYKwEy3Zo/kzeaQcZYya9/xNP6r7aSnI4A== dependencies: - "@abp/ng.theme.shared" "~3.3.0-rc.2" + "@abp/ng.theme.shared" "~3.3.0" tslib "^2.0.0" -"@abp/ng.identity@~3.3.0-rc.2": - version "3.3.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-3.3.0-rc.2.tgz#18ec5dcb187fd5d8302e45fc40b5f937fb55e47b" - integrity sha512-ckN9gHvWQDuzhdP2xAgGmXNQo/16yulhQSFWgAFmNTbubPNyz/D41SvbaL1tGWDXGT20tl+CjpZXzDJH4R51Tw== +"@abp/ng.identity@~3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-3.3.0.tgz#587b81e806d35185bee0a72cc400969c0992a8bc" + integrity sha512-AzIMkWpiHSVdq4E8n6LNl/QXZHn0KNB3Ok6cfOVIPWWUl1NuTmdG3UdGOZAXGOm9bQmflbTKbBZcdhLOzHlLGw== dependencies: - "@abp/ng.permission-management" "~3.3.0-rc.2" - "@abp/ng.theme.shared" "~3.3.0-rc.2" + "@abp/ng.permission-management" "~3.3.0" + "@abp/ng.theme.shared" "~3.3.0" tslib "^2.0.0" -"@abp/ng.permission-management@~3.3.0-rc.2": - version "3.3.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-3.3.0-rc.2.tgz#f867a2f57c855594001cc8a5446cbb843339c7da" - integrity sha512-KOODyYlKdknVMDcpfjL1cKQQw4ZrcKiNs0WhNgIujt+J9CCsSCDl9yGcVGMlgqo+8PgKkVltRbW+bLlzKlMx9w== +"@abp/ng.permission-management@~3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-3.3.0.tgz#c686dca6d80fa5dafe9d940accf4b91853743ec1" + integrity sha512-jHVmgsZ06umNuMp9Uj1SWXm9dz7UNKMyDZjYrbWuG0S8ciwCCmykfOar0C+BK1kvycJXXJw2VKd0Kj36/57FxQ== dependencies: - "@abp/ng.theme.shared" "~3.3.0-rc.2" + "@abp/ng.theme.shared" "~3.3.0" tslib "^2.0.0" -"@abp/ng.schematics@~3.3.0-rc.2": - version "3.3.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-3.3.0-rc.2.tgz#911d6a55581f5afa7577de4d86dd4f53cdf04269" - integrity sha512-8ZpOrU+lCswB/o40K6eK9m38wkTWPOheE1mUn1sNxbsFs1y2WNV0BUTtkSt5QlrgSoHFkhGBgDZAZFxdVL9EFQ== +"@abp/ng.schematics@~3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-3.3.0.tgz#b2e05826e19fa8096ca11f2117ff81061fbde24f" + integrity sha512-WSIDGoxX2HGtIpLY6uMpX0r/vOClilN478sHKdzX4OL3yXetdvrRp8evB87EOteP4r5DbRIjpWk3GEbknlyeEg== dependencies: "@angular-devkit/core" "~10.0.3" "@angular-devkit/schematics" "~10.0.3" @@ -63,37 +63,37 @@ jsonc-parser "^2.3.0" typescript "~3.9.2" -"@abp/ng.setting-management@~3.3.0-rc.2": - version "3.3.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-3.3.0-rc.2.tgz#661e009d9edf6c5f1db7a3f93c79c863465650be" - integrity sha512-77Eza9dgnP6XsQYGsd3TQ8eZgvZYty9oOeQ+O2Sc9xP9gWn/8jdD8npjgfTDIQxOLpqOS1mHslaiF92BaAU4IA== +"@abp/ng.setting-management@~3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-3.3.0.tgz#a53a370e201760570945e9130c7e85bdfcb48ac8" + integrity sha512-54EhudWaXrN0e7bFXNBVkK3bwEM6A/y8OF79Q9//YCD7eB56KvNdP4XXdSRKUfH7P9bvxJn/bmSAZcRQ1uk9Ww== dependencies: - "@abp/ng.theme.shared" "~3.3.0-rc.2" + "@abp/ng.theme.shared" "~3.3.0" tslib "^2.0.0" -"@abp/ng.tenant-management@~3.3.0-rc.2": - version "3.3.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-3.3.0-rc.2.tgz#a4d7f017c3ee86a39b1783557eb346dad2476fc1" - integrity sha512-AycKXMwJmERThiKOU+ZX29vrifuc1WSE0+djKNd7xKzdu0PSKFYLsrHUeh4mTsjGJml/CsAUBsMV53HDywBjZg== +"@abp/ng.tenant-management@~3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-3.3.0.tgz#c5479c3d2b17a96308f8e2e87907dd405003fb5d" + integrity sha512-NPqTP2vU40IxZ0sQ8QNEgl5okptwf6J99Vkl1ELYwa8ztEnfBBo94gK/1q+I8CiQHp3fr//3ycrimPRszW/CCQ== dependencies: - "@abp/ng.feature-management" "~3.3.0-rc.2" - "@abp/ng.theme.shared" "~3.3.0-rc.2" + "@abp/ng.feature-management" "~3.3.0" + "@abp/ng.theme.shared" "~3.3.0" tslib "^2.0.0" -"@abp/ng.theme.basic@~3.3.0-rc.2": - version "3.3.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-3.3.0-rc.2.tgz#b1700d240f798b1687be6ba4b8f6693ce3e2bd15" - integrity sha512-ibrj49MkUHTqs321JXB4Mcuc0kJlk932bbcvzvXpa8nHW9DDH9/TKLttqOqTTeyN+6pnSWcnN5upW6n0bPusaQ== +"@abp/ng.theme.basic@~3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-3.3.0.tgz#c216c344273a2f816fa723ddcb3840e416dc5a5d" + integrity sha512-BiwpYd8C5ZL0ew8eVwtpC+nXoSNaP64tJkw1CJScvgJ0fPRiVPddFzgEd3PDFPjqeWtupN1Q8pyp5ng7vqOOpA== dependencies: - "@abp/ng.theme.shared" "~3.3.0-rc.2" + "@abp/ng.theme.shared" "~3.3.0" tslib "^2.0.0" -"@abp/ng.theme.shared@~3.3.0-rc.2": - version "3.3.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-3.3.0-rc.2.tgz#f676e10bbdde2a08cea1bb34211e7df9d63d795f" - integrity sha512-gGYDeea6LcorB2pXWB7uqQnE0+gefslWF3bErDSllPx0t4QLJiuNNiP/keQBU3H4uF8LPCmBIsQgcQFPjRz/yA== +"@abp/ng.theme.shared@~3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-3.3.0.tgz#08c6af4ca5877d5cad0a49e002889938b7904c70" + integrity sha512-2X1O+JAUQWlFmuTWm/bHypHEVN084g6w4cVWUuum7+X2Fk01LVRjnJPwCEIRklS3teFoTX/IbKZXG24wVC6liA== dependencies: - "@abp/ng.core" "~3.3.0-rc.2" + "@abp/ng.core" "~3.3.0" "@fortawesome/fontawesome-free" "^5.14.0" "@ng-bootstrap/ng-bootstrap" "^7.0.0" "@ngx-validate/core" "^0.0.12" @@ -102,10 +102,10 @@ chart.js "^2.9.3" tslib "^2.0.0" -"@abp/utils@^3.3.0-rc.1": - version "3.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0-rc.1.tgz#2ea2806a42d31dff246478497493e6a8735b3aa3" - integrity sha512-B58plJNC9UF9kigsGLd29qa9nyfIkgV7868NmNgsPwulAhcI1dKUgmSlymN1fBK4zPOVWbzReANVLKbQx13Z1Q== +"@abp/utils@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" + integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== dependencies: just-compare "^1.3.0" diff --git a/npm/packs/anchor-js/package.json b/npm/packs/anchor-js/package.json index b3807b082c..47a8db589e 100644 --- a/npm/packs/anchor-js/package.json +++ b/npm/packs/anchor-js/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/anchor-js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "anchor-js": "^4.2.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json index ed0314a0c2..1cb05b41fb 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/aspnetcore.mvc.ui.theme.basic", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~3.3.0" + "@abp/aspnetcore.mvc.ui.theme.shared": "~3.3.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json index ffbd1306a5..8c2deeb003 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json @@ -1,24 +1,24 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/aspnetcore.mvc.ui.theme.shared", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui": "~3.3.0", - "@abp/bootstrap": "~3.3.0", - "@abp/bootstrap-datepicker": "~3.3.0", - "@abp/datatables.net-bs4": "~3.3.0", - "@abp/font-awesome": "~3.3.0", - "@abp/jquery-form": "~3.3.0", - "@abp/jquery-validation-unobtrusive": "~3.3.0", - "@abp/lodash": "~3.3.0", - "@abp/luxon": "~3.3.0", - "@abp/malihu-custom-scrollbar-plugin": "~3.3.0", - "@abp/select2": "~3.3.0", - "@abp/sweetalert": "~3.3.0", - "@abp/timeago": "~3.3.0", - "@abp/toastr": "~3.3.0" + "@abp/aspnetcore.mvc.ui": "~3.3.1", + "@abp/bootstrap": "~3.3.1", + "@abp/bootstrap-datepicker": "~3.3.1", + "@abp/datatables.net-bs4": "~3.3.1", + "@abp/font-awesome": "~3.3.1", + "@abp/jquery-form": "~3.3.1", + "@abp/jquery-validation-unobtrusive": "~3.3.1", + "@abp/lodash": "~3.3.1", + "@abp/luxon": "~3.3.1", + "@abp/malihu-custom-scrollbar-plugin": "~3.3.1", + "@abp/select2": "~3.3.1", + "@abp/sweetalert": "~3.3.1", + "@abp/timeago": "~3.3.1", + "@abp/toastr": "~3.3.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/aspnetcore.mvc.ui/package.json b/npm/packs/aspnetcore.mvc.ui/package.json index b3870a1e1a..bc9a15759b 100644 --- a/npm/packs/aspnetcore.mvc.ui/package.json +++ b/npm/packs/aspnetcore.mvc.ui/package.json @@ -1,5 +1,5 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/aspnetcore.mvc.ui", "publishConfig": { "access": "public" diff --git a/npm/packs/blogging/package.json b/npm/packs/blogging/package.json index ac83158b94..56b77abd10 100644 --- a/npm/packs/blogging/package.json +++ b/npm/packs/blogging/package.json @@ -1,14 +1,14 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/blogging", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~3.3.0", - "@abp/owl.carousel": "~3.3.0", - "@abp/prismjs": "~3.3.0", - "@abp/tui-editor": "~3.3.0" + "@abp/aspnetcore.mvc.ui.theme.shared": "~3.3.1", + "@abp/owl.carousel": "~3.3.1", + "@abp/prismjs": "~3.3.1", + "@abp/tui-editor": "~3.3.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/bootstrap-datepicker/package.json b/npm/packs/bootstrap-datepicker/package.json index 713b82e1a0..b5cce6c658 100644 --- a/npm/packs/bootstrap-datepicker/package.json +++ b/npm/packs/bootstrap-datepicker/package.json @@ -1,5 +1,5 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/bootstrap-datepicker", "publishConfig": { "access": "public" diff --git a/npm/packs/bootstrap/package.json b/npm/packs/bootstrap/package.json index 117b72ec0e..8046c8bb3d 100644 --- a/npm/packs/bootstrap/package.json +++ b/npm/packs/bootstrap/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/bootstrap", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "bootstrap": "^4.5.0", "bootstrap-v4-rtl": "4.4.1-2" }, diff --git a/npm/packs/chart.js/package.json b/npm/packs/chart.js/package.json index a8c076f8b2..6b85e144a5 100644 --- a/npm/packs/chart.js/package.json +++ b/npm/packs/chart.js/package.json @@ -1,5 +1,5 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/chart.js", "publishConfig": { "access": "public" diff --git a/npm/packs/clipboard/package.json b/npm/packs/clipboard/package.json index 289c8a93d9..f71085d432 100644 --- a/npm/packs/clipboard/package.json +++ b/npm/packs/clipboard/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/clipboard", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "clipboard": "^2.0.6" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/codemirror/package.json b/npm/packs/codemirror/package.json index c12ab0cb09..486d134030 100644 --- a/npm/packs/codemirror/package.json +++ b/npm/packs/codemirror/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/codemirror", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "codemirror": "^5.54.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/core/package.json b/npm/packs/core/package.json index b0dc7695ac..26df88e58c 100644 --- a/npm/packs/core/package.json +++ b/npm/packs/core/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/core", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/utils": "^3.3.0" + "@abp/utils": "^3.3.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/cropperjs/package.json b/npm/packs/cropperjs/package.json index 552d783f3b..f4b72db405 100644 --- a/npm/packs/cropperjs/package.json +++ b/npm/packs/cropperjs/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/cropperjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "cropperjs": "^1.5.7" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/datatables.net-bs4/package.json b/npm/packs/datatables.net-bs4/package.json index 611fe61fb7..4385637bd1 100644 --- a/npm/packs/datatables.net-bs4/package.json +++ b/npm/packs/datatables.net-bs4/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/datatables.net-bs4", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/datatables.net": "~3.3.0", + "@abp/datatables.net": "~3.3.1", "datatables.net-bs4": "^1.10.21" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/datatables.net/package.json b/npm/packs/datatables.net/package.json index c7f30d2c8a..ae42612012 100644 --- a/npm/packs/datatables.net/package.json +++ b/npm/packs/datatables.net/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/datatables.net", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.3.0", + "@abp/jquery": "~3.3.1", "datatables.net": "^1.10.21" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/docs/package.json b/npm/packs/docs/package.json index a947c9e66b..a396c7d86e 100644 --- a/npm/packs/docs/package.json +++ b/npm/packs/docs/package.json @@ -1,15 +1,15 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/docs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/anchor-js": "~3.3.0", - "@abp/clipboard": "~3.3.0", - "@abp/malihu-custom-scrollbar-plugin": "~3.3.0", - "@abp/popper.js": "~3.3.0", - "@abp/prismjs": "~3.3.0" + "@abp/anchor-js": "~3.3.1", + "@abp/clipboard": "~3.3.1", + "@abp/malihu-custom-scrollbar-plugin": "~3.3.1", + "@abp/popper.js": "~3.3.1", + "@abp/prismjs": "~3.3.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/flag-icon-css/package.json b/npm/packs/flag-icon-css/package.json index 5da86806bc..3992c51894 100644 --- a/npm/packs/flag-icon-css/package.json +++ b/npm/packs/flag-icon-css/package.json @@ -1,5 +1,5 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/flag-icon-css", "publishConfig": { "access": "public" diff --git a/npm/packs/font-awesome/package.json b/npm/packs/font-awesome/package.json index f8e1391d3a..3a31752a73 100644 --- a/npm/packs/font-awesome/package.json +++ b/npm/packs/font-awesome/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/font-awesome", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "@fortawesome/fontawesome-free": "^5.13.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/highlight.js/package.json b/npm/packs/highlight.js/package.json index a7d7843dbb..501faa4cf8 100644 --- a/npm/packs/highlight.js/package.json +++ b/npm/packs/highlight.js/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/highlight.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0" + "@abp/core": "~3.3.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/jquery-form/package.json b/npm/packs/jquery-form/package.json index 037d82195e..3f3cc96851 100644 --- a/npm/packs/jquery-form/package.json +++ b/npm/packs/jquery-form/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/jquery-form", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.3.0", + "@abp/jquery": "~3.3.1", "jquery-form": "^4.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery-validation-unobtrusive/package.json b/npm/packs/jquery-validation-unobtrusive/package.json index 1663506ed6..f193d7e53e 100644 --- a/npm/packs/jquery-validation-unobtrusive/package.json +++ b/npm/packs/jquery-validation-unobtrusive/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/jquery-validation-unobtrusive", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery-validation": "~3.3.0", + "@abp/jquery-validation": "~3.3.1", "jquery-validation-unobtrusive": "^3.2.11" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery-validation/package.json b/npm/packs/jquery-validation/package.json index f3634601ef..bbb272c5c9 100644 --- a/npm/packs/jquery-validation/package.json +++ b/npm/packs/jquery-validation/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/jquery-validation", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.3.0", + "@abp/jquery": "~3.3.1", "jquery-validation": "^1.19.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery/package.json b/npm/packs/jquery/package.json index e3b1031903..4c1c45ed95 100644 --- a/npm/packs/jquery/package.json +++ b/npm/packs/jquery/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/jquery", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "jquery": "~3.5.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jstree/package.json b/npm/packs/jstree/package.json index 1d63bd6e1a..f1915651a4 100644 --- a/npm/packs/jstree/package.json +++ b/npm/packs/jstree/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/jstree", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.3.0", + "@abp/jquery": "~3.3.1", "jstree": "^3.3.9" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/lodash/package.json b/npm/packs/lodash/package.json index ce3947a300..d89dadde72 100644 --- a/npm/packs/lodash/package.json +++ b/npm/packs/lodash/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/lodash", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "lodash": "^4.17.15" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/luxon/package.json b/npm/packs/luxon/package.json index fcd0100e2a..6bd509732f 100644 --- a/npm/packs/luxon/package.json +++ b/npm/packs/luxon/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/luxon", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "luxon": "^1.24.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/malihu-custom-scrollbar-plugin/package.json b/npm/packs/malihu-custom-scrollbar-plugin/package.json index 2e82cf3cad..66c7aa4d48 100644 --- a/npm/packs/malihu-custom-scrollbar-plugin/package.json +++ b/npm/packs/malihu-custom-scrollbar-plugin/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/malihu-custom-scrollbar-plugin", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "malihu-custom-scrollbar-plugin": "^3.1.5" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/markdown-it/package.json b/npm/packs/markdown-it/package.json index b9019a5cac..efc287cc21 100644 --- a/npm/packs/markdown-it/package.json +++ b/npm/packs/markdown-it/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/markdown-it", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "markdown-it": "^11.0.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/owl.carousel/package.json b/npm/packs/owl.carousel/package.json index 8f9c60ad59..41137d1b99 100644 --- a/npm/packs/owl.carousel/package.json +++ b/npm/packs/owl.carousel/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/owl.carousel", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "owl.carousel": "^2.3.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/popper.js/package.json b/npm/packs/popper.js/package.json index bf98ca9f0f..751d96936e 100644 --- a/npm/packs/popper.js/package.json +++ b/npm/packs/popper.js/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/popper.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "popper.js": "^1.16.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/prismjs/package.json b/npm/packs/prismjs/package.json index 807604e6ee..205be331e3 100644 --- a/npm/packs/prismjs/package.json +++ b/npm/packs/prismjs/package.json @@ -1,12 +1,12 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/prismjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~3.3.0", - "@abp/core": "~3.3.0", + "@abp/clipboard": "~3.3.1", + "@abp/core": "~3.3.1", "prismjs": "^1.20.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/select2/package.json b/npm/packs/select2/package.json index af04bb4151..2b8ba0c241 100644 --- a/npm/packs/select2/package.json +++ b/npm/packs/select2/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/select2", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "select2": "^4.0.13" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/signalr/package.json b/npm/packs/signalr/package.json index 11167db4b7..f3affef301 100644 --- a/npm/packs/signalr/package.json +++ b/npm/packs/signalr/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/signalr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "@microsoft/signalr": "~3.1.5" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/star-rating-svg/package.json b/npm/packs/star-rating-svg/package.json index f2151ff820..47240f860e 100644 --- a/npm/packs/star-rating-svg/package.json +++ b/npm/packs/star-rating-svg/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/star-rating-svg", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.3.0", + "@abp/jquery": "~3.3.1", "star-rating-svg": "^3.5.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/sweetalert/package.json b/npm/packs/sweetalert/package.json index d748e1fc14..fee77631d3 100644 --- a/npm/packs/sweetalert/package.json +++ b/npm/packs/sweetalert/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/sweetalert", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "sweetalert": "^2.1.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/timeago/package.json b/npm/packs/timeago/package.json index ba8775428f..91fe6246e8 100644 --- a/npm/packs/timeago/package.json +++ b/npm/packs/timeago/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/timeago", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.3.0", + "@abp/jquery": "~3.3.1", "timeago": "^1.6.7" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/toastr/package.json b/npm/packs/toastr/package.json index 2dd6daa133..f4881faa83 100644 --- a/npm/packs/toastr/package.json +++ b/npm/packs/toastr/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/toastr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.3.0", + "@abp/jquery": "~3.3.1", "toastr": "^2.1.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/tui-editor/package.json b/npm/packs/tui-editor/package.json index 9b3a70d266..6c00d28c8b 100644 --- a/npm/packs/tui-editor/package.json +++ b/npm/packs/tui-editor/package.json @@ -1,14 +1,14 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/tui-editor", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/codemirror": "~3.3.0", - "@abp/highlight.js": "~3.3.0", - "@abp/jquery": "~3.3.0", - "@abp/markdown-it": "~3.3.0", + "@abp/codemirror": "~3.3.1", + "@abp/highlight.js": "~3.3.1", + "@abp/jquery": "~3.3.1", + "@abp/markdown-it": "~3.3.1", "tui-editor": "^1.4.10" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/uppy/package.json b/npm/packs/uppy/package.json index 997ad1df57..94a1a4496c 100644 --- a/npm/packs/uppy/package.json +++ b/npm/packs/uppy/package.json @@ -1,11 +1,11 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/uppy", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.3.0", + "@abp/core": "~3.3.1", "uppy": "^1.16.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index e167dea0c2..ae17ada535 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -1,6 +1,6 @@ { "name": "@abp/utils", - "version": "3.3.0", + "version": "3.3.1", "scripts": { "prepublish": "yarn install --ignore-scripts && node prepublish.js", "ng": "ng", diff --git a/npm/packs/virtual-file-explorer/package.json b/npm/packs/virtual-file-explorer/package.json index 5baeaa1874..bf9da1dd8e 100644 --- a/npm/packs/virtual-file-explorer/package.json +++ b/npm/packs/virtual-file-explorer/package.json @@ -1,12 +1,12 @@ { - "version": "3.3.0", + "version": "3.3.1", "name": "@abp/virtual-file-explorer", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~3.3.0", - "@abp/prismjs": "~3.3.0" + "@abp/clipboard": "~3.3.1", + "@abp/prismjs": "~3.3.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 7dce9897d1..d9bc893c2d 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -12,11 +12,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~3.3.0", - "@abp/ng.identity": "~3.3.0", - "@abp/ng.setting-management": "~3.3.0", - "@abp/ng.tenant-management": "~3.3.0", - "@abp/ng.theme.basic": "~3.3.0", + "@abp/ng.account": "~3.3.1", + "@abp/ng.identity": "~3.3.1", + "@abp/ng.setting-management": "~3.3.1", + "@abp/ng.tenant-management": "~3.3.1", + "@abp/ng.theme.basic": "~3.3.1", "@angular/animations": "~10.1.2", "@angular/common": "~10.1.2", "@angular/compiler": "~10.1.2", @@ -30,7 +30,7 @@ "zone.js": "~0.10.2" }, "devDependencies": { - "@abp/ng.schematics": "~3.3.0", + "@abp/ng.schematics": "~3.3.1", "@angular-devkit/build-angular": "~0.1001.2", "@angular-devkit/build-ng-packagr": "~0.1001.2", "@angular/cli": "~10.1.2", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json index 34ca938f87..e415c0b911 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.1" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock index f5e0422d9f..04166e32f1 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.0.tgz#5a83ad1010ede0647cc4bbe225f0ebf8f3ac90d8" - integrity sha512-b0Z/CO7nLixuceC2A/rx4m6OQPwe7ELym+ZZdurUxI42ciuoC5Cnnl3FH+HCt8P3JdFjOIWl2wOXvUcc6P16oQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.0.tgz#6c998bad95e46905e5a1487ab2370905cdf4376a" - integrity sha512-Tt6SK3EUj8jfZKSzeIVkRuWyAGRoDTqeoS5VVkNZLoIfLzwiimHw2o2AlPRtCMa0jqLropHtaT/kNl+EU24AZw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.3.0" - "@abp/bootstrap" "~3.3.0" - "@abp/bootstrap-datepicker" "~3.3.0" - "@abp/datatables.net-bs4" "~3.3.0" - "@abp/font-awesome" "~3.3.0" - "@abp/jquery-form" "~3.3.0" - "@abp/jquery-validation-unobtrusive" "~3.3.0" - "@abp/lodash" "~3.3.0" - "@abp/luxon" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/select2" "~3.3.0" - "@abp/sweetalert" "~3.3.0" - "@abp/timeago" "~3.3.0" - "@abp/toastr" "~3.3.0" - -"@abp/aspnetcore.mvc.ui@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.0.tgz#07f7d0f7f689a3ac75a69e12681ebd3d08fa0644" - integrity sha512-EbUISgnR8qHYdu/tSro8QjUWj17M6gOkugMI7N0fiPNbtLHgKG2GHWxIsVEf5ic1O2j/PWKOQ+FPBLZ4v3jFrw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.1.tgz#58ae88355b821ca72eccf1950bde544b8f0edcca" + integrity sha512-AUIJQIBb+5of0Na1cxmyacni6ToYBpmtU+NJH9/cTC3UUAPylj8TiAX9yobAPn8dbrcXTm+dh9T8i49rXTtxoA== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.1.tgz#c3123ea8f6c8428d034d9ac2782aa1bff27bd740" + integrity sha512-j2uZapDTKSjH74uZcIR4y09hr6w+OAdybQhL1bx4fb0D3XlmOdOwRrsqXieJNwAggbUn00EX2Usiey3N/wV1rA== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.3.1" + "@abp/bootstrap" "~3.3.1" + "@abp/bootstrap-datepicker" "~3.3.1" + "@abp/datatables.net-bs4" "~3.3.1" + "@abp/font-awesome" "~3.3.1" + "@abp/jquery-form" "~3.3.1" + "@abp/jquery-validation-unobtrusive" "~3.3.1" + "@abp/lodash" "~3.3.1" + "@abp/luxon" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/select2" "~3.3.1" + "@abp/sweetalert" "~3.3.1" + "@abp/timeago" "~3.3.1" + "@abp/toastr" "~3.3.1" + +"@abp/aspnetcore.mvc.ui@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.1.tgz#946d5fb68d73842270e2553fba475163d2ca57a5" + integrity sha512-W/Yxe20Upkha0XaHPQwQ3+LxdUZI21BiARcbBUnIUzRUrFBpvjD0A9/T8bsi+KpIqOYLAwtrE1TJoSuZGscoIw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.0.tgz#d7d11e591818a6ec654127d88602cfdfddf81b1f" - integrity sha512-PUsS48o5Cwufn8O8d34UBsjLF6/HrgdhsGTUzrVIhGapiyuYD/QrvqWYWRUj1Jeeb4nrsRVem2DnM1isy+CUCA== +"@abp/bootstrap-datepicker@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.1.tgz#c0f5763e0bfb1e293ef1b22f2a14014ec345dbc3" + integrity sha512-MnX2vI75gEDtlwnKhI6ptH657dh5TuXoin1XeaEhOa5rGbLwhSu4IFqRmlLBedFBOf+1zwcvFs30vsQlNKJ6Nw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.0.tgz#1314549e7a940c58fdff521a9ddf153f3414fffa" - integrity sha512-CVjSwbZPjio0VJWxdo+PRkvUYGtv51DgVrqjgHK7m7tGFwHAK38cDHAl+mqmIp7dgPG1Z+E0o41JteT3Za1Bkw== +"@abp/bootstrap@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.1.tgz#5b173918511b6ad1fb8ac570ea2e2fcb874970e0" + integrity sha512-CfnwXAV2XRK3gYpeEQjgVzEocU6pqdGZXwATwOKifHWBZNG8ubDyMgBed+oVCvJgRvLRrniR5jFK2vhm8Du+EQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.0.tgz#c88c28df19f96349b9a32b7ebe402e6d267c34e5" - integrity sha512-y9P86zPAm55fAyKwDaoxv+IrApA339aaGEpN9364upeeNBsO8mYf9hoM136VovQaWNIABFHRD7R+9KskwPAuNA== +"@abp/core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.1.tgz#b1da2160b0fc4a309dc4a65ee937c814de16b2de" + integrity sha512-6/6FHTLZrWh821O6xr4Sk1BlIt9gTAT19NnykQRV9U8S7rl4BQv2QF055R8Wg3lnVKWJ1ajiAbd3gerjH/pL6g== dependencies: - "@abp/utils" "^3.3.0" + "@abp/utils" "^3.3.1" -"@abp/datatables.net-bs4@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.0.tgz#e4cc85f3c1c195d9e8b07532eb7c53619f40a787" - integrity sha512-StuwT8jGfDWGNXmYgRELuErXxSE+qjVoiSAkd27mZqDbYSTipq4OZSAHr6WNmoqMgP6QlCgjGgXcz4Pr8Pxuaw== +"@abp/datatables.net-bs4@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.1.tgz#fd0f5f5579ff94d635d19c1bf46ac0593639e3f4" + integrity sha512-C9BUlbsk9liJ+hmFpTKoearJNZISDy5TInTbnixL8WfXfIaAWdZRs+ADvhKO9+oWMxkbxhGI8ueYQ29Z1UJzMg== dependencies: - "@abp/datatables.net" "~3.3.0" + "@abp/datatables.net" "~3.3.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.0.tgz#a2b2cedc06beb325e62ce6faba899c935564b9a7" - integrity sha512-y0RGrLxI7VgWFAFtHAraDnrEJ5pkUIJ3zxEScS43RUbArhxk+5pIpxQbmU0WgHpk72H7WXdqtL486Kw8PSj1Nw== +"@abp/datatables.net@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.1.tgz#2ec7406712607f08f0ae9a6ce0ee7bfd0cc73278" + integrity sha512-prsMkh//XCymCG/aYEEtzV/922RJIZ0+PcnRvhJzXvrX4DK2y3ZWM44QNR/9/rpkYUJqRcVoHqbt1DuxbHDLXQ== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.0.tgz#f9307334c34309456c47cc407fbe079821ace45e" - integrity sha512-7/uZ2qXooHQZG35F6ERKsjI8m0gn8/BgE2cOB7Zhu5KRtSTOHOOXX4YWEfoHYLEMuo3xKTTJ2gHM3jiCJEpVtg== +"@abp/font-awesome@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.1.tgz#268a21685a6b810b15848169b78c3dfb11d582c6" + integrity sha512-Eg2dwtcsyLo5E6PC21vK5R8YFe32UFSN4DpNrqAP9I85daR8ZbT0US8SbfCcI5nhiZlRi3EWj/cUgz2IEJHaaQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.0.tgz#43fc5655b4e3cac7c0558fb36dd9ef188fe64412" - integrity sha512-fH4IPf/cU3ojWtVsPZjtymzK0xWqqgmvnSk5zy4AB4MOCKyYtPrn5OAMUvq8A4uZ0mGIRAQ8Z72wPKZA1rws5A== +"@abp/jquery-form@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.1.tgz#4e8c2e50e711a7bbe4f40e74210472b21afd0ecf" + integrity sha512-HBic6SzOSprYAug/Qbgcd+MiPRwtXczS2/x9IUmPFeUhvuqJJoYPWrhI5xC6WKNcJ/5MjExiEbeEXMXp8PwJTA== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.0.tgz#0840f3114626a1d6efff54f4791776ebfdf56e76" - integrity sha512-foKM9FDAY2RZGz5EQ2FcQt/FiL8sMc+uwd+2KeAdIejLyPgeSH/lLio6agd2Xun4e/xlBJB185Ga1eKcdHIGAw== +"@abp/jquery-validation-unobtrusive@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.1.tgz#e42d61a172b6ef5cbdbb305ab5d93e3dad5159a1" + integrity sha512-SH8zmrR3HshCNP0zIgi4j6PMhgCzmCKk5xXxD+8kg+LAv+bm1iP0K5srgX4WlEffRma80QIeNKPpe/lW04EgFw== dependencies: - "@abp/jquery-validation" "~3.3.0" + "@abp/jquery-validation" "~3.3.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.0.tgz#2199968638d7bab9bfb6ba5e9f27d9d607c09a24" - integrity sha512-jxw274hx8i9+dkRrDz7aUpWSGESnJ2wuA6e3IAQIlubFf+7q0o4vosXD5bubinn4qaRGcSiYC15armfefgmFCw== +"@abp/jquery-validation@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.1.tgz#05164e342fdb83f40a17f000b40c27df2604c394" + integrity sha512-oKN3wQUY1PB7IhelFIJVjRqAZx/AVlpUF0GV6k/9eNBK+ZoLpW1ebE1q9tsLhXf7QS1N7S45aEHB8OpjRopDew== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.0.tgz#b99a9436bf3c2394917e761a2dcdfe4f1af9ff3d" - integrity sha512-WrjDQCBOi83kjtMYjXCJVWSbnFxKLW/KtDADkjTF7TxIGccsNWx6E8npzdCEnDnlOJ5Rk9+1QIu07pWedOjBSg== +"@abp/jquery@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.1.tgz#2e8431a52641ab85d1372a32518307bbf8fba1a0" + integrity sha512-mSAUYLzhJSvq8ixhAFkU5Q2LRDTkJAGHq47alb2nNEodZNr1q1i+875nP3dE/4MLT/foG0H+j+r4RGuYx4fGAA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" jquery "~3.5.1" -"@abp/lodash@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.0.tgz#5402a779ef1e8ecd585644a68607425587560305" - integrity sha512-QFm9hpWs0/J5TFFiE7vO5oxTsLgMcibmgg/CxYvmQZXhHGZpx3mdoAzC48CvRu8quxr6Xo8pIxlCyYXniR6/Dw== +"@abp/lodash@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.1.tgz#5c2602f03bde7fbf7841c01bb7178b3ca3429d87" + integrity sha512-5fitYkotzaXGaEbwctVYT4HcfKZ1ghAnvrQLYI+2MYgIQmtipBhXFEG030zIXWThEoIGKOBuwVzmOYtwiX7+8w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" lodash "^4.17.15" -"@abp/luxon@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.0.tgz#2d669786308df997c6738dd205363edaae670d15" - integrity sha512-1oSUuzgehSBxaxJLfD06ktXK4jisILPKFnEaKCBuPiKiQSDFvdQbepHAYJcpU1Jye6sVrheUKDUyJhnSwDb+0w== +"@abp/luxon@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.1.tgz#2e477be6a9f76394331399a762552bf610168e8e" + integrity sha512-bp74vBmObbqUXsOc4VRWml5ivEyIzwHLR4oycLvWG0bQZn65yt7db7DVYTQL1PCWbEAKf6eULlnF6JvZpSVgeg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.0.tgz#3bb48e0d68c0b76f3460eb19706927af2168a6c3" - integrity sha512-44JvJOfxJ5ihfNCPyc5U8D8N8CmLh8UBMkzjH7YJQZJO+7PGgjx+uEqbQhTtBDftUz5C5oFkGoQ7i2pil7YSYQ== +"@abp/malihu-custom-scrollbar-plugin@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.1.tgz#df833f2b8421f4dce681c13d2d5976680a27e4c8" + integrity sha512-bJRQTevunQulXo+EC1HWqYgV30RVmFcS218DtdZLm2x/xWFBhvr+2DLzLS2Gq8JJXNGQMFbHnCWixn5si4V/KA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.0.tgz#207460dd128a1620c332af5eea2df88bfdfd0520" - integrity sha512-dbOnzQVARBQp/ynJvNyJqE1ArtsWCV8nGMUablB1ILPonsJy+0ADJ+GXWa1nIsHdj3zPW0MLi8pdqpepRCTAFg== +"@abp/select2@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.1.tgz#65ac0ae3ac8783d4e0422717ce743d573bf559e4" + integrity sha512-efxhM/QxAmnyfGNcokZIK7vD6wYJkFGSnZEDj9QSrZ6DyUYf8H+jlK38JViDGe0RCMqts0R4B6IaKT0RbbIGmw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" select2 "^4.0.13" -"@abp/sweetalert@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.0.tgz#457a05af37819fc54082254022551ed0233c471e" - integrity sha512-6KXwPVC1zwNwlZBS9x0uPLTmieu3nmBp0G+ZH1aP+GTMphSa0ejI7nuPFqUeqfEMg+an1yj51SKKUfKtmlx6Zg== +"@abp/sweetalert@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.1.tgz#b6a41f8459d4407c4aee04e2f200b84e3fa8d534" + integrity sha512-olDU9Lh5o0sNCxRXROwt8QhHpuB5+fjojVWVUOiag0UMLVA9k/fp38diyn64qddSHWCafpqjeO32IXDKEQckZA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" sweetalert "^2.1.2" -"@abp/timeago@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.0.tgz#f0da23577630cec21255fc9c71dd2f7a3a3a3388" - integrity sha512-f5sb4vxgGPyIzTj6lxDzUx/qJiC8pAqWPasdxHDMzhKlkRuFWO+GfblR5DC/sj9fQPcyV8+yX/VQPY3JW8i62Q== +"@abp/timeago@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.1.tgz#9759e09728fea082d28cd430cdc1af5b93f14720" + integrity sha512-sIgSj3hZBl+oyO6rHc55YrIfqb4d2d2RlT6HU+OIsa2/BUAjTcW6WdPVUjXTreth2jyxEjXkfOKA3Sv5DvraGg== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" timeago "^1.6.7" -"@abp/toastr@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.0.tgz#c4f7d761eb4d93e993cb8e8cb54a0d670b20bdd3" - integrity sha512-GGqtVUCX8WalpkCnhiYUs+XxxBnhxGOLe87qFe/2tr0XNDJ3BSHXxiKynDetjlNAq/Qnf4U5P4Eg9FnHWFdWZg== +"@abp/toastr@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.1.tgz#06cf0b46e6430fae516aaff8707a5f5b16d6ed1d" + integrity sha512-LTf2NGwcG9ke571HMO7N4syhJijagnw/eIDl6ezflIQI/BnQqBKpXJ8xckCCqgryxfraBu4APMuSkPoDs2Ce5g== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" toastr "^2.1.4" -"@abp/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" - integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json index 8e9f71b33b..8718ef2557 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.1" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock index 7478ec439a..b6fb3e1d1e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.0.tgz#5a83ad1010ede0647cc4bbe225f0ebf8f3ac90d8" - integrity sha512-b0Z/CO7nLixuceC2A/rx4m6OQPwe7ELym+ZZdurUxI42ciuoC5Cnnl3FH+HCt8P3JdFjOIWl2wOXvUcc6P16oQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.0.tgz#6c998bad95e46905e5a1487ab2370905cdf4376a" - integrity sha512-Tt6SK3EUj8jfZKSzeIVkRuWyAGRoDTqeoS5VVkNZLoIfLzwiimHw2o2AlPRtCMa0jqLropHtaT/kNl+EU24AZw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.3.0" - "@abp/bootstrap" "~3.3.0" - "@abp/bootstrap-datepicker" "~3.3.0" - "@abp/datatables.net-bs4" "~3.3.0" - "@abp/font-awesome" "~3.3.0" - "@abp/jquery-form" "~3.3.0" - "@abp/jquery-validation-unobtrusive" "~3.3.0" - "@abp/lodash" "~3.3.0" - "@abp/luxon" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/select2" "~3.3.0" - "@abp/sweetalert" "~3.3.0" - "@abp/timeago" "~3.3.0" - "@abp/toastr" "~3.3.0" - -"@abp/aspnetcore.mvc.ui@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.0.tgz#07f7d0f7f689a3ac75a69e12681ebd3d08fa0644" - integrity sha512-EbUISgnR8qHYdu/tSro8QjUWj17M6gOkugMI7N0fiPNbtLHgKG2GHWxIsVEf5ic1O2j/PWKOQ+FPBLZ4v3jFrw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.1.tgz#58ae88355b821ca72eccf1950bde544b8f0edcca" + integrity sha512-AUIJQIBb+5of0Na1cxmyacni6ToYBpmtU+NJH9/cTC3UUAPylj8TiAX9yobAPn8dbrcXTm+dh9T8i49rXTtxoA== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.1.tgz#c3123ea8f6c8428d034d9ac2782aa1bff27bd740" + integrity sha512-j2uZapDTKSjH74uZcIR4y09hr6w+OAdybQhL1bx4fb0D3XlmOdOwRrsqXieJNwAggbUn00EX2Usiey3N/wV1rA== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.3.1" + "@abp/bootstrap" "~3.3.1" + "@abp/bootstrap-datepicker" "~3.3.1" + "@abp/datatables.net-bs4" "~3.3.1" + "@abp/font-awesome" "~3.3.1" + "@abp/jquery-form" "~3.3.1" + "@abp/jquery-validation-unobtrusive" "~3.3.1" + "@abp/lodash" "~3.3.1" + "@abp/luxon" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/select2" "~3.3.1" + "@abp/sweetalert" "~3.3.1" + "@abp/timeago" "~3.3.1" + "@abp/toastr" "~3.3.1" + +"@abp/aspnetcore.mvc.ui@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.1.tgz#946d5fb68d73842270e2553fba475163d2ca57a5" + integrity sha512-W/Yxe20Upkha0XaHPQwQ3+LxdUZI21BiARcbBUnIUzRUrFBpvjD0A9/T8bsi+KpIqOYLAwtrE1TJoSuZGscoIw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.0.tgz#d7d11e591818a6ec654127d88602cfdfddf81b1f" - integrity sha512-PUsS48o5Cwufn8O8d34UBsjLF6/HrgdhsGTUzrVIhGapiyuYD/QrvqWYWRUj1Jeeb4nrsRVem2DnM1isy+CUCA== +"@abp/bootstrap-datepicker@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.1.tgz#c0f5763e0bfb1e293ef1b22f2a14014ec345dbc3" + integrity sha512-MnX2vI75gEDtlwnKhI6ptH657dh5TuXoin1XeaEhOa5rGbLwhSu4IFqRmlLBedFBOf+1zwcvFs30vsQlNKJ6Nw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.0.tgz#1314549e7a940c58fdff521a9ddf153f3414fffa" - integrity sha512-CVjSwbZPjio0VJWxdo+PRkvUYGtv51DgVrqjgHK7m7tGFwHAK38cDHAl+mqmIp7dgPG1Z+E0o41JteT3Za1Bkw== +"@abp/bootstrap@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.1.tgz#5b173918511b6ad1fb8ac570ea2e2fcb874970e0" + integrity sha512-CfnwXAV2XRK3gYpeEQjgVzEocU6pqdGZXwATwOKifHWBZNG8ubDyMgBed+oVCvJgRvLRrniR5jFK2vhm8Du+EQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.0.tgz#c88c28df19f96349b9a32b7ebe402e6d267c34e5" - integrity sha512-y9P86zPAm55fAyKwDaoxv+IrApA339aaGEpN9364upeeNBsO8mYf9hoM136VovQaWNIABFHRD7R+9KskwPAuNA== +"@abp/core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.1.tgz#b1da2160b0fc4a309dc4a65ee937c814de16b2de" + integrity sha512-6/6FHTLZrWh821O6xr4Sk1BlIt9gTAT19NnykQRV9U8S7rl4BQv2QF055R8Wg3lnVKWJ1ajiAbd3gerjH/pL6g== dependencies: - "@abp/utils" "^3.3.0" + "@abp/utils" "^3.3.1" -"@abp/datatables.net-bs4@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.0.tgz#e4cc85f3c1c195d9e8b07532eb7c53619f40a787" - integrity sha512-StuwT8jGfDWGNXmYgRELuErXxSE+qjVoiSAkd27mZqDbYSTipq4OZSAHr6WNmoqMgP6QlCgjGgXcz4Pr8Pxuaw== +"@abp/datatables.net-bs4@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.1.tgz#fd0f5f5579ff94d635d19c1bf46ac0593639e3f4" + integrity sha512-C9BUlbsk9liJ+hmFpTKoearJNZISDy5TInTbnixL8WfXfIaAWdZRs+ADvhKO9+oWMxkbxhGI8ueYQ29Z1UJzMg== dependencies: - "@abp/datatables.net" "~3.3.0" + "@abp/datatables.net" "~3.3.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.0.tgz#a2b2cedc06beb325e62ce6faba899c935564b9a7" - integrity sha512-y0RGrLxI7VgWFAFtHAraDnrEJ5pkUIJ3zxEScS43RUbArhxk+5pIpxQbmU0WgHpk72H7WXdqtL486Kw8PSj1Nw== +"@abp/datatables.net@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.1.tgz#2ec7406712607f08f0ae9a6ce0ee7bfd0cc73278" + integrity sha512-prsMkh//XCymCG/aYEEtzV/922RJIZ0+PcnRvhJzXvrX4DK2y3ZWM44QNR/9/rpkYUJqRcVoHqbt1DuxbHDLXQ== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.0.tgz#f9307334c34309456c47cc407fbe079821ace45e" - integrity sha512-7/uZ2qXooHQZG35F6ERKsjI8m0gn8/BgE2cOB7Zhu5KRtSTOHOOXX4YWEfoHYLEMuo3xKTTJ2gHM3jiCJEpVtg== +"@abp/font-awesome@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.1.tgz#268a21685a6b810b15848169b78c3dfb11d582c6" + integrity sha512-Eg2dwtcsyLo5E6PC21vK5R8YFe32UFSN4DpNrqAP9I85daR8ZbT0US8SbfCcI5nhiZlRi3EWj/cUgz2IEJHaaQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.0.tgz#43fc5655b4e3cac7c0558fb36dd9ef188fe64412" - integrity sha512-fH4IPf/cU3ojWtVsPZjtymzK0xWqqgmvnSk5zy4AB4MOCKyYtPrn5OAMUvq8A4uZ0mGIRAQ8Z72wPKZA1rws5A== +"@abp/jquery-form@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.1.tgz#4e8c2e50e711a7bbe4f40e74210472b21afd0ecf" + integrity sha512-HBic6SzOSprYAug/Qbgcd+MiPRwtXczS2/x9IUmPFeUhvuqJJoYPWrhI5xC6WKNcJ/5MjExiEbeEXMXp8PwJTA== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.0.tgz#0840f3114626a1d6efff54f4791776ebfdf56e76" - integrity sha512-foKM9FDAY2RZGz5EQ2FcQt/FiL8sMc+uwd+2KeAdIejLyPgeSH/lLio6agd2Xun4e/xlBJB185Ga1eKcdHIGAw== +"@abp/jquery-validation-unobtrusive@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.1.tgz#e42d61a172b6ef5cbdbb305ab5d93e3dad5159a1" + integrity sha512-SH8zmrR3HshCNP0zIgi4j6PMhgCzmCKk5xXxD+8kg+LAv+bm1iP0K5srgX4WlEffRma80QIeNKPpe/lW04EgFw== dependencies: - "@abp/jquery-validation" "~3.3.0" + "@abp/jquery-validation" "~3.3.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.0.tgz#2199968638d7bab9bfb6ba5e9f27d9d607c09a24" - integrity sha512-jxw274hx8i9+dkRrDz7aUpWSGESnJ2wuA6e3IAQIlubFf+7q0o4vosXD5bubinn4qaRGcSiYC15armfefgmFCw== +"@abp/jquery-validation@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.1.tgz#05164e342fdb83f40a17f000b40c27df2604c394" + integrity sha512-oKN3wQUY1PB7IhelFIJVjRqAZx/AVlpUF0GV6k/9eNBK+ZoLpW1ebE1q9tsLhXf7QS1N7S45aEHB8OpjRopDew== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.0.tgz#b99a9436bf3c2394917e761a2dcdfe4f1af9ff3d" - integrity sha512-WrjDQCBOi83kjtMYjXCJVWSbnFxKLW/KtDADkjTF7TxIGccsNWx6E8npzdCEnDnlOJ5Rk9+1QIu07pWedOjBSg== +"@abp/jquery@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.1.tgz#2e8431a52641ab85d1372a32518307bbf8fba1a0" + integrity sha512-mSAUYLzhJSvq8ixhAFkU5Q2LRDTkJAGHq47alb2nNEodZNr1q1i+875nP3dE/4MLT/foG0H+j+r4RGuYx4fGAA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" jquery "~3.5.1" -"@abp/lodash@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.0.tgz#5402a779ef1e8ecd585644a68607425587560305" - integrity sha512-QFm9hpWs0/J5TFFiE7vO5oxTsLgMcibmgg/CxYvmQZXhHGZpx3mdoAzC48CvRu8quxr6Xo8pIxlCyYXniR6/Dw== +"@abp/lodash@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.1.tgz#5c2602f03bde7fbf7841c01bb7178b3ca3429d87" + integrity sha512-5fitYkotzaXGaEbwctVYT4HcfKZ1ghAnvrQLYI+2MYgIQmtipBhXFEG030zIXWThEoIGKOBuwVzmOYtwiX7+8w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" lodash "^4.17.15" -"@abp/luxon@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.0.tgz#2d669786308df997c6738dd205363edaae670d15" - integrity sha512-1oSUuzgehSBxaxJLfD06ktXK4jisILPKFnEaKCBuPiKiQSDFvdQbepHAYJcpU1Jye6sVrheUKDUyJhnSwDb+0w== +"@abp/luxon@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.1.tgz#2e477be6a9f76394331399a762552bf610168e8e" + integrity sha512-bp74vBmObbqUXsOc4VRWml5ivEyIzwHLR4oycLvWG0bQZn65yt7db7DVYTQL1PCWbEAKf6eULlnF6JvZpSVgeg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.0.tgz#3bb48e0d68c0b76f3460eb19706927af2168a6c3" - integrity sha512-44JvJOfxJ5ihfNCPyc5U8D8N8CmLh8UBMkzjH7YJQZJO+7PGgjx+uEqbQhTtBDftUz5C5oFkGoQ7i2pil7YSYQ== +"@abp/malihu-custom-scrollbar-plugin@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.1.tgz#df833f2b8421f4dce681c13d2d5976680a27e4c8" + integrity sha512-bJRQTevunQulXo+EC1HWqYgV30RVmFcS218DtdZLm2x/xWFBhvr+2DLzLS2Gq8JJXNGQMFbHnCWixn5si4V/KA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.0.tgz#207460dd128a1620c332af5eea2df88bfdfd0520" - integrity sha512-dbOnzQVARBQp/ynJvNyJqE1ArtsWCV8nGMUablB1ILPonsJy+0ADJ+GXWa1nIsHdj3zPW0MLi8pdqpepRCTAFg== +"@abp/select2@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.1.tgz#65ac0ae3ac8783d4e0422717ce743d573bf559e4" + integrity sha512-efxhM/QxAmnyfGNcokZIK7vD6wYJkFGSnZEDj9QSrZ6DyUYf8H+jlK38JViDGe0RCMqts0R4B6IaKT0RbbIGmw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" select2 "^4.0.13" -"@abp/sweetalert@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.0.tgz#457a05af37819fc54082254022551ed0233c471e" - integrity sha512-6KXwPVC1zwNwlZBS9x0uPLTmieu3nmBp0G+ZH1aP+GTMphSa0ejI7nuPFqUeqfEMg+an1yj51SKKUfKtmlx6Zg== +"@abp/sweetalert@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.1.tgz#b6a41f8459d4407c4aee04e2f200b84e3fa8d534" + integrity sha512-olDU9Lh5o0sNCxRXROwt8QhHpuB5+fjojVWVUOiag0UMLVA9k/fp38diyn64qddSHWCafpqjeO32IXDKEQckZA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" sweetalert "^2.1.2" -"@abp/timeago@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.0.tgz#f0da23577630cec21255fc9c71dd2f7a3a3a3388" - integrity sha512-f5sb4vxgGPyIzTj6lxDzUx/qJiC8pAqWPasdxHDMzhKlkRuFWO+GfblR5DC/sj9fQPcyV8+yX/VQPY3JW8i62Q== +"@abp/timeago@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.1.tgz#9759e09728fea082d28cd430cdc1af5b93f14720" + integrity sha512-sIgSj3hZBl+oyO6rHc55YrIfqb4d2d2RlT6HU+OIsa2/BUAjTcW6WdPVUjXTreth2jyxEjXkfOKA3Sv5DvraGg== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" timeago "^1.6.7" -"@abp/toastr@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.0.tgz#c4f7d761eb4d93e993cb8e8cb54a0d670b20bdd3" - integrity sha512-GGqtVUCX8WalpkCnhiYUs+XxxBnhxGOLe87qFe/2tr0XNDJ3BSHXxiKynDetjlNAq/Qnf4U5P4Eg9FnHWFdWZg== +"@abp/toastr@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.1.tgz#06cf0b46e6430fae516aaff8707a5f5b16d6ed1d" + integrity sha512-LTf2NGwcG9ke571HMO7N4syhJijagnw/eIDl6ezflIQI/BnQqBKpXJ8xckCCqgryxfraBu4APMuSkPoDs2Ce5g== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" toastr "^2.1.4" -"@abp/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" - integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json index 34ca938f87..e415c0b911 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.1" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock index 7478ec439a..b6fb3e1d1e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.0.tgz#5a83ad1010ede0647cc4bbe225f0ebf8f3ac90d8" - integrity sha512-b0Z/CO7nLixuceC2A/rx4m6OQPwe7ELym+ZZdurUxI42ciuoC5Cnnl3FH+HCt8P3JdFjOIWl2wOXvUcc6P16oQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.0.tgz#6c998bad95e46905e5a1487ab2370905cdf4376a" - integrity sha512-Tt6SK3EUj8jfZKSzeIVkRuWyAGRoDTqeoS5VVkNZLoIfLzwiimHw2o2AlPRtCMa0jqLropHtaT/kNl+EU24AZw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.3.0" - "@abp/bootstrap" "~3.3.0" - "@abp/bootstrap-datepicker" "~3.3.0" - "@abp/datatables.net-bs4" "~3.3.0" - "@abp/font-awesome" "~3.3.0" - "@abp/jquery-form" "~3.3.0" - "@abp/jquery-validation-unobtrusive" "~3.3.0" - "@abp/lodash" "~3.3.0" - "@abp/luxon" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/select2" "~3.3.0" - "@abp/sweetalert" "~3.3.0" - "@abp/timeago" "~3.3.0" - "@abp/toastr" "~3.3.0" - -"@abp/aspnetcore.mvc.ui@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.0.tgz#07f7d0f7f689a3ac75a69e12681ebd3d08fa0644" - integrity sha512-EbUISgnR8qHYdu/tSro8QjUWj17M6gOkugMI7N0fiPNbtLHgKG2GHWxIsVEf5ic1O2j/PWKOQ+FPBLZ4v3jFrw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.1.tgz#58ae88355b821ca72eccf1950bde544b8f0edcca" + integrity sha512-AUIJQIBb+5of0Na1cxmyacni6ToYBpmtU+NJH9/cTC3UUAPylj8TiAX9yobAPn8dbrcXTm+dh9T8i49rXTtxoA== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.1.tgz#c3123ea8f6c8428d034d9ac2782aa1bff27bd740" + integrity sha512-j2uZapDTKSjH74uZcIR4y09hr6w+OAdybQhL1bx4fb0D3XlmOdOwRrsqXieJNwAggbUn00EX2Usiey3N/wV1rA== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.3.1" + "@abp/bootstrap" "~3.3.1" + "@abp/bootstrap-datepicker" "~3.3.1" + "@abp/datatables.net-bs4" "~3.3.1" + "@abp/font-awesome" "~3.3.1" + "@abp/jquery-form" "~3.3.1" + "@abp/jquery-validation-unobtrusive" "~3.3.1" + "@abp/lodash" "~3.3.1" + "@abp/luxon" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/select2" "~3.3.1" + "@abp/sweetalert" "~3.3.1" + "@abp/timeago" "~3.3.1" + "@abp/toastr" "~3.3.1" + +"@abp/aspnetcore.mvc.ui@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.1.tgz#946d5fb68d73842270e2553fba475163d2ca57a5" + integrity sha512-W/Yxe20Upkha0XaHPQwQ3+LxdUZI21BiARcbBUnIUzRUrFBpvjD0A9/T8bsi+KpIqOYLAwtrE1TJoSuZGscoIw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.0.tgz#d7d11e591818a6ec654127d88602cfdfddf81b1f" - integrity sha512-PUsS48o5Cwufn8O8d34UBsjLF6/HrgdhsGTUzrVIhGapiyuYD/QrvqWYWRUj1Jeeb4nrsRVem2DnM1isy+CUCA== +"@abp/bootstrap-datepicker@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.1.tgz#c0f5763e0bfb1e293ef1b22f2a14014ec345dbc3" + integrity sha512-MnX2vI75gEDtlwnKhI6ptH657dh5TuXoin1XeaEhOa5rGbLwhSu4IFqRmlLBedFBOf+1zwcvFs30vsQlNKJ6Nw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.0.tgz#1314549e7a940c58fdff521a9ddf153f3414fffa" - integrity sha512-CVjSwbZPjio0VJWxdo+PRkvUYGtv51DgVrqjgHK7m7tGFwHAK38cDHAl+mqmIp7dgPG1Z+E0o41JteT3Za1Bkw== +"@abp/bootstrap@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.1.tgz#5b173918511b6ad1fb8ac570ea2e2fcb874970e0" + integrity sha512-CfnwXAV2XRK3gYpeEQjgVzEocU6pqdGZXwATwOKifHWBZNG8ubDyMgBed+oVCvJgRvLRrniR5jFK2vhm8Du+EQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.0.tgz#c88c28df19f96349b9a32b7ebe402e6d267c34e5" - integrity sha512-y9P86zPAm55fAyKwDaoxv+IrApA339aaGEpN9364upeeNBsO8mYf9hoM136VovQaWNIABFHRD7R+9KskwPAuNA== +"@abp/core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.1.tgz#b1da2160b0fc4a309dc4a65ee937c814de16b2de" + integrity sha512-6/6FHTLZrWh821O6xr4Sk1BlIt9gTAT19NnykQRV9U8S7rl4BQv2QF055R8Wg3lnVKWJ1ajiAbd3gerjH/pL6g== dependencies: - "@abp/utils" "^3.3.0" + "@abp/utils" "^3.3.1" -"@abp/datatables.net-bs4@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.0.tgz#e4cc85f3c1c195d9e8b07532eb7c53619f40a787" - integrity sha512-StuwT8jGfDWGNXmYgRELuErXxSE+qjVoiSAkd27mZqDbYSTipq4OZSAHr6WNmoqMgP6QlCgjGgXcz4Pr8Pxuaw== +"@abp/datatables.net-bs4@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.1.tgz#fd0f5f5579ff94d635d19c1bf46ac0593639e3f4" + integrity sha512-C9BUlbsk9liJ+hmFpTKoearJNZISDy5TInTbnixL8WfXfIaAWdZRs+ADvhKO9+oWMxkbxhGI8ueYQ29Z1UJzMg== dependencies: - "@abp/datatables.net" "~3.3.0" + "@abp/datatables.net" "~3.3.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.0.tgz#a2b2cedc06beb325e62ce6faba899c935564b9a7" - integrity sha512-y0RGrLxI7VgWFAFtHAraDnrEJ5pkUIJ3zxEScS43RUbArhxk+5pIpxQbmU0WgHpk72H7WXdqtL486Kw8PSj1Nw== +"@abp/datatables.net@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.1.tgz#2ec7406712607f08f0ae9a6ce0ee7bfd0cc73278" + integrity sha512-prsMkh//XCymCG/aYEEtzV/922RJIZ0+PcnRvhJzXvrX4DK2y3ZWM44QNR/9/rpkYUJqRcVoHqbt1DuxbHDLXQ== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.0.tgz#f9307334c34309456c47cc407fbe079821ace45e" - integrity sha512-7/uZ2qXooHQZG35F6ERKsjI8m0gn8/BgE2cOB7Zhu5KRtSTOHOOXX4YWEfoHYLEMuo3xKTTJ2gHM3jiCJEpVtg== +"@abp/font-awesome@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.1.tgz#268a21685a6b810b15848169b78c3dfb11d582c6" + integrity sha512-Eg2dwtcsyLo5E6PC21vK5R8YFe32UFSN4DpNrqAP9I85daR8ZbT0US8SbfCcI5nhiZlRi3EWj/cUgz2IEJHaaQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.0.tgz#43fc5655b4e3cac7c0558fb36dd9ef188fe64412" - integrity sha512-fH4IPf/cU3ojWtVsPZjtymzK0xWqqgmvnSk5zy4AB4MOCKyYtPrn5OAMUvq8A4uZ0mGIRAQ8Z72wPKZA1rws5A== +"@abp/jquery-form@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.1.tgz#4e8c2e50e711a7bbe4f40e74210472b21afd0ecf" + integrity sha512-HBic6SzOSprYAug/Qbgcd+MiPRwtXczS2/x9IUmPFeUhvuqJJoYPWrhI5xC6WKNcJ/5MjExiEbeEXMXp8PwJTA== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.0.tgz#0840f3114626a1d6efff54f4791776ebfdf56e76" - integrity sha512-foKM9FDAY2RZGz5EQ2FcQt/FiL8sMc+uwd+2KeAdIejLyPgeSH/lLio6agd2Xun4e/xlBJB185Ga1eKcdHIGAw== +"@abp/jquery-validation-unobtrusive@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.1.tgz#e42d61a172b6ef5cbdbb305ab5d93e3dad5159a1" + integrity sha512-SH8zmrR3HshCNP0zIgi4j6PMhgCzmCKk5xXxD+8kg+LAv+bm1iP0K5srgX4WlEffRma80QIeNKPpe/lW04EgFw== dependencies: - "@abp/jquery-validation" "~3.3.0" + "@abp/jquery-validation" "~3.3.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.0.tgz#2199968638d7bab9bfb6ba5e9f27d9d607c09a24" - integrity sha512-jxw274hx8i9+dkRrDz7aUpWSGESnJ2wuA6e3IAQIlubFf+7q0o4vosXD5bubinn4qaRGcSiYC15armfefgmFCw== +"@abp/jquery-validation@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.1.tgz#05164e342fdb83f40a17f000b40c27df2604c394" + integrity sha512-oKN3wQUY1PB7IhelFIJVjRqAZx/AVlpUF0GV6k/9eNBK+ZoLpW1ebE1q9tsLhXf7QS1N7S45aEHB8OpjRopDew== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.0.tgz#b99a9436bf3c2394917e761a2dcdfe4f1af9ff3d" - integrity sha512-WrjDQCBOi83kjtMYjXCJVWSbnFxKLW/KtDADkjTF7TxIGccsNWx6E8npzdCEnDnlOJ5Rk9+1QIu07pWedOjBSg== +"@abp/jquery@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.1.tgz#2e8431a52641ab85d1372a32518307bbf8fba1a0" + integrity sha512-mSAUYLzhJSvq8ixhAFkU5Q2LRDTkJAGHq47alb2nNEodZNr1q1i+875nP3dE/4MLT/foG0H+j+r4RGuYx4fGAA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" jquery "~3.5.1" -"@abp/lodash@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.0.tgz#5402a779ef1e8ecd585644a68607425587560305" - integrity sha512-QFm9hpWs0/J5TFFiE7vO5oxTsLgMcibmgg/CxYvmQZXhHGZpx3mdoAzC48CvRu8quxr6Xo8pIxlCyYXniR6/Dw== +"@abp/lodash@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.1.tgz#5c2602f03bde7fbf7841c01bb7178b3ca3429d87" + integrity sha512-5fitYkotzaXGaEbwctVYT4HcfKZ1ghAnvrQLYI+2MYgIQmtipBhXFEG030zIXWThEoIGKOBuwVzmOYtwiX7+8w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" lodash "^4.17.15" -"@abp/luxon@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.0.tgz#2d669786308df997c6738dd205363edaae670d15" - integrity sha512-1oSUuzgehSBxaxJLfD06ktXK4jisILPKFnEaKCBuPiKiQSDFvdQbepHAYJcpU1Jye6sVrheUKDUyJhnSwDb+0w== +"@abp/luxon@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.1.tgz#2e477be6a9f76394331399a762552bf610168e8e" + integrity sha512-bp74vBmObbqUXsOc4VRWml5ivEyIzwHLR4oycLvWG0bQZn65yt7db7DVYTQL1PCWbEAKf6eULlnF6JvZpSVgeg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.0.tgz#3bb48e0d68c0b76f3460eb19706927af2168a6c3" - integrity sha512-44JvJOfxJ5ihfNCPyc5U8D8N8CmLh8UBMkzjH7YJQZJO+7PGgjx+uEqbQhTtBDftUz5C5oFkGoQ7i2pil7YSYQ== +"@abp/malihu-custom-scrollbar-plugin@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.1.tgz#df833f2b8421f4dce681c13d2d5976680a27e4c8" + integrity sha512-bJRQTevunQulXo+EC1HWqYgV30RVmFcS218DtdZLm2x/xWFBhvr+2DLzLS2Gq8JJXNGQMFbHnCWixn5si4V/KA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.0.tgz#207460dd128a1620c332af5eea2df88bfdfd0520" - integrity sha512-dbOnzQVARBQp/ynJvNyJqE1ArtsWCV8nGMUablB1ILPonsJy+0ADJ+GXWa1nIsHdj3zPW0MLi8pdqpepRCTAFg== +"@abp/select2@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.1.tgz#65ac0ae3ac8783d4e0422717ce743d573bf559e4" + integrity sha512-efxhM/QxAmnyfGNcokZIK7vD6wYJkFGSnZEDj9QSrZ6DyUYf8H+jlK38JViDGe0RCMqts0R4B6IaKT0RbbIGmw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" select2 "^4.0.13" -"@abp/sweetalert@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.0.tgz#457a05af37819fc54082254022551ed0233c471e" - integrity sha512-6KXwPVC1zwNwlZBS9x0uPLTmieu3nmBp0G+ZH1aP+GTMphSa0ejI7nuPFqUeqfEMg+an1yj51SKKUfKtmlx6Zg== +"@abp/sweetalert@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.1.tgz#b6a41f8459d4407c4aee04e2f200b84e3fa8d534" + integrity sha512-olDU9Lh5o0sNCxRXROwt8QhHpuB5+fjojVWVUOiag0UMLVA9k/fp38diyn64qddSHWCafpqjeO32IXDKEQckZA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" sweetalert "^2.1.2" -"@abp/timeago@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.0.tgz#f0da23577630cec21255fc9c71dd2f7a3a3a3388" - integrity sha512-f5sb4vxgGPyIzTj6lxDzUx/qJiC8pAqWPasdxHDMzhKlkRuFWO+GfblR5DC/sj9fQPcyV8+yX/VQPY3JW8i62Q== +"@abp/timeago@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.1.tgz#9759e09728fea082d28cd430cdc1af5b93f14720" + integrity sha512-sIgSj3hZBl+oyO6rHc55YrIfqb4d2d2RlT6HU+OIsa2/BUAjTcW6WdPVUjXTreth2jyxEjXkfOKA3Sv5DvraGg== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" timeago "^1.6.7" -"@abp/toastr@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.0.tgz#c4f7d761eb4d93e993cb8e8cb54a0d670b20bdd3" - integrity sha512-GGqtVUCX8WalpkCnhiYUs+XxxBnhxGOLe87qFe/2tr0XNDJ3BSHXxiKynDetjlNAq/Qnf4U5P4Eg9FnHWFdWZg== +"@abp/toastr@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.1.tgz#06cf0b46e6430fae516aaff8707a5f5b16d6ed1d" + integrity sha512-LTf2NGwcG9ke571HMO7N4syhJijagnw/eIDl6ezflIQI/BnQqBKpXJ8xckCCqgryxfraBu4APMuSkPoDs2Ce5g== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" toastr "^2.1.4" -"@abp/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" - integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json index 34ca938f87..e415c0b911 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.1" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock index f5e0422d9f..04166e32f1 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.0.tgz#5a83ad1010ede0647cc4bbe225f0ebf8f3ac90d8" - integrity sha512-b0Z/CO7nLixuceC2A/rx4m6OQPwe7ELym+ZZdurUxI42ciuoC5Cnnl3FH+HCt8P3JdFjOIWl2wOXvUcc6P16oQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.0.tgz#6c998bad95e46905e5a1487ab2370905cdf4376a" - integrity sha512-Tt6SK3EUj8jfZKSzeIVkRuWyAGRoDTqeoS5VVkNZLoIfLzwiimHw2o2AlPRtCMa0jqLropHtaT/kNl+EU24AZw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.3.0" - "@abp/bootstrap" "~3.3.0" - "@abp/bootstrap-datepicker" "~3.3.0" - "@abp/datatables.net-bs4" "~3.3.0" - "@abp/font-awesome" "~3.3.0" - "@abp/jquery-form" "~3.3.0" - "@abp/jquery-validation-unobtrusive" "~3.3.0" - "@abp/lodash" "~3.3.0" - "@abp/luxon" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/select2" "~3.3.0" - "@abp/sweetalert" "~3.3.0" - "@abp/timeago" "~3.3.0" - "@abp/toastr" "~3.3.0" - -"@abp/aspnetcore.mvc.ui@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.0.tgz#07f7d0f7f689a3ac75a69e12681ebd3d08fa0644" - integrity sha512-EbUISgnR8qHYdu/tSro8QjUWj17M6gOkugMI7N0fiPNbtLHgKG2GHWxIsVEf5ic1O2j/PWKOQ+FPBLZ4v3jFrw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.1.tgz#58ae88355b821ca72eccf1950bde544b8f0edcca" + integrity sha512-AUIJQIBb+5of0Na1cxmyacni6ToYBpmtU+NJH9/cTC3UUAPylj8TiAX9yobAPn8dbrcXTm+dh9T8i49rXTtxoA== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.1.tgz#c3123ea8f6c8428d034d9ac2782aa1bff27bd740" + integrity sha512-j2uZapDTKSjH74uZcIR4y09hr6w+OAdybQhL1bx4fb0D3XlmOdOwRrsqXieJNwAggbUn00EX2Usiey3N/wV1rA== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.3.1" + "@abp/bootstrap" "~3.3.1" + "@abp/bootstrap-datepicker" "~3.3.1" + "@abp/datatables.net-bs4" "~3.3.1" + "@abp/font-awesome" "~3.3.1" + "@abp/jquery-form" "~3.3.1" + "@abp/jquery-validation-unobtrusive" "~3.3.1" + "@abp/lodash" "~3.3.1" + "@abp/luxon" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/select2" "~3.3.1" + "@abp/sweetalert" "~3.3.1" + "@abp/timeago" "~3.3.1" + "@abp/toastr" "~3.3.1" + +"@abp/aspnetcore.mvc.ui@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.1.tgz#946d5fb68d73842270e2553fba475163d2ca57a5" + integrity sha512-W/Yxe20Upkha0XaHPQwQ3+LxdUZI21BiARcbBUnIUzRUrFBpvjD0A9/T8bsi+KpIqOYLAwtrE1TJoSuZGscoIw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.0.tgz#d7d11e591818a6ec654127d88602cfdfddf81b1f" - integrity sha512-PUsS48o5Cwufn8O8d34UBsjLF6/HrgdhsGTUzrVIhGapiyuYD/QrvqWYWRUj1Jeeb4nrsRVem2DnM1isy+CUCA== +"@abp/bootstrap-datepicker@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.1.tgz#c0f5763e0bfb1e293ef1b22f2a14014ec345dbc3" + integrity sha512-MnX2vI75gEDtlwnKhI6ptH657dh5TuXoin1XeaEhOa5rGbLwhSu4IFqRmlLBedFBOf+1zwcvFs30vsQlNKJ6Nw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.0.tgz#1314549e7a940c58fdff521a9ddf153f3414fffa" - integrity sha512-CVjSwbZPjio0VJWxdo+PRkvUYGtv51DgVrqjgHK7m7tGFwHAK38cDHAl+mqmIp7dgPG1Z+E0o41JteT3Za1Bkw== +"@abp/bootstrap@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.1.tgz#5b173918511b6ad1fb8ac570ea2e2fcb874970e0" + integrity sha512-CfnwXAV2XRK3gYpeEQjgVzEocU6pqdGZXwATwOKifHWBZNG8ubDyMgBed+oVCvJgRvLRrniR5jFK2vhm8Du+EQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.0.tgz#c88c28df19f96349b9a32b7ebe402e6d267c34e5" - integrity sha512-y9P86zPAm55fAyKwDaoxv+IrApA339aaGEpN9364upeeNBsO8mYf9hoM136VovQaWNIABFHRD7R+9KskwPAuNA== +"@abp/core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.1.tgz#b1da2160b0fc4a309dc4a65ee937c814de16b2de" + integrity sha512-6/6FHTLZrWh821O6xr4Sk1BlIt9gTAT19NnykQRV9U8S7rl4BQv2QF055R8Wg3lnVKWJ1ajiAbd3gerjH/pL6g== dependencies: - "@abp/utils" "^3.3.0" + "@abp/utils" "^3.3.1" -"@abp/datatables.net-bs4@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.0.tgz#e4cc85f3c1c195d9e8b07532eb7c53619f40a787" - integrity sha512-StuwT8jGfDWGNXmYgRELuErXxSE+qjVoiSAkd27mZqDbYSTipq4OZSAHr6WNmoqMgP6QlCgjGgXcz4Pr8Pxuaw== +"@abp/datatables.net-bs4@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.1.tgz#fd0f5f5579ff94d635d19c1bf46ac0593639e3f4" + integrity sha512-C9BUlbsk9liJ+hmFpTKoearJNZISDy5TInTbnixL8WfXfIaAWdZRs+ADvhKO9+oWMxkbxhGI8ueYQ29Z1UJzMg== dependencies: - "@abp/datatables.net" "~3.3.0" + "@abp/datatables.net" "~3.3.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.0.tgz#a2b2cedc06beb325e62ce6faba899c935564b9a7" - integrity sha512-y0RGrLxI7VgWFAFtHAraDnrEJ5pkUIJ3zxEScS43RUbArhxk+5pIpxQbmU0WgHpk72H7WXdqtL486Kw8PSj1Nw== +"@abp/datatables.net@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.1.tgz#2ec7406712607f08f0ae9a6ce0ee7bfd0cc73278" + integrity sha512-prsMkh//XCymCG/aYEEtzV/922RJIZ0+PcnRvhJzXvrX4DK2y3ZWM44QNR/9/rpkYUJqRcVoHqbt1DuxbHDLXQ== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.0.tgz#f9307334c34309456c47cc407fbe079821ace45e" - integrity sha512-7/uZ2qXooHQZG35F6ERKsjI8m0gn8/BgE2cOB7Zhu5KRtSTOHOOXX4YWEfoHYLEMuo3xKTTJ2gHM3jiCJEpVtg== +"@abp/font-awesome@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.1.tgz#268a21685a6b810b15848169b78c3dfb11d582c6" + integrity sha512-Eg2dwtcsyLo5E6PC21vK5R8YFe32UFSN4DpNrqAP9I85daR8ZbT0US8SbfCcI5nhiZlRi3EWj/cUgz2IEJHaaQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.0.tgz#43fc5655b4e3cac7c0558fb36dd9ef188fe64412" - integrity sha512-fH4IPf/cU3ojWtVsPZjtymzK0xWqqgmvnSk5zy4AB4MOCKyYtPrn5OAMUvq8A4uZ0mGIRAQ8Z72wPKZA1rws5A== +"@abp/jquery-form@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.1.tgz#4e8c2e50e711a7bbe4f40e74210472b21afd0ecf" + integrity sha512-HBic6SzOSprYAug/Qbgcd+MiPRwtXczS2/x9IUmPFeUhvuqJJoYPWrhI5xC6WKNcJ/5MjExiEbeEXMXp8PwJTA== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.0.tgz#0840f3114626a1d6efff54f4791776ebfdf56e76" - integrity sha512-foKM9FDAY2RZGz5EQ2FcQt/FiL8sMc+uwd+2KeAdIejLyPgeSH/lLio6agd2Xun4e/xlBJB185Ga1eKcdHIGAw== +"@abp/jquery-validation-unobtrusive@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.1.tgz#e42d61a172b6ef5cbdbb305ab5d93e3dad5159a1" + integrity sha512-SH8zmrR3HshCNP0zIgi4j6PMhgCzmCKk5xXxD+8kg+LAv+bm1iP0K5srgX4WlEffRma80QIeNKPpe/lW04EgFw== dependencies: - "@abp/jquery-validation" "~3.3.0" + "@abp/jquery-validation" "~3.3.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.0.tgz#2199968638d7bab9bfb6ba5e9f27d9d607c09a24" - integrity sha512-jxw274hx8i9+dkRrDz7aUpWSGESnJ2wuA6e3IAQIlubFf+7q0o4vosXD5bubinn4qaRGcSiYC15armfefgmFCw== +"@abp/jquery-validation@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.1.tgz#05164e342fdb83f40a17f000b40c27df2604c394" + integrity sha512-oKN3wQUY1PB7IhelFIJVjRqAZx/AVlpUF0GV6k/9eNBK+ZoLpW1ebE1q9tsLhXf7QS1N7S45aEHB8OpjRopDew== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.0.tgz#b99a9436bf3c2394917e761a2dcdfe4f1af9ff3d" - integrity sha512-WrjDQCBOi83kjtMYjXCJVWSbnFxKLW/KtDADkjTF7TxIGccsNWx6E8npzdCEnDnlOJ5Rk9+1QIu07pWedOjBSg== +"@abp/jquery@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.1.tgz#2e8431a52641ab85d1372a32518307bbf8fba1a0" + integrity sha512-mSAUYLzhJSvq8ixhAFkU5Q2LRDTkJAGHq47alb2nNEodZNr1q1i+875nP3dE/4MLT/foG0H+j+r4RGuYx4fGAA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" jquery "~3.5.1" -"@abp/lodash@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.0.tgz#5402a779ef1e8ecd585644a68607425587560305" - integrity sha512-QFm9hpWs0/J5TFFiE7vO5oxTsLgMcibmgg/CxYvmQZXhHGZpx3mdoAzC48CvRu8quxr6Xo8pIxlCyYXniR6/Dw== +"@abp/lodash@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.1.tgz#5c2602f03bde7fbf7841c01bb7178b3ca3429d87" + integrity sha512-5fitYkotzaXGaEbwctVYT4HcfKZ1ghAnvrQLYI+2MYgIQmtipBhXFEG030zIXWThEoIGKOBuwVzmOYtwiX7+8w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" lodash "^4.17.15" -"@abp/luxon@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.0.tgz#2d669786308df997c6738dd205363edaae670d15" - integrity sha512-1oSUuzgehSBxaxJLfD06ktXK4jisILPKFnEaKCBuPiKiQSDFvdQbepHAYJcpU1Jye6sVrheUKDUyJhnSwDb+0w== +"@abp/luxon@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.1.tgz#2e477be6a9f76394331399a762552bf610168e8e" + integrity sha512-bp74vBmObbqUXsOc4VRWml5ivEyIzwHLR4oycLvWG0bQZn65yt7db7DVYTQL1PCWbEAKf6eULlnF6JvZpSVgeg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.0.tgz#3bb48e0d68c0b76f3460eb19706927af2168a6c3" - integrity sha512-44JvJOfxJ5ihfNCPyc5U8D8N8CmLh8UBMkzjH7YJQZJO+7PGgjx+uEqbQhTtBDftUz5C5oFkGoQ7i2pil7YSYQ== +"@abp/malihu-custom-scrollbar-plugin@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.1.tgz#df833f2b8421f4dce681c13d2d5976680a27e4c8" + integrity sha512-bJRQTevunQulXo+EC1HWqYgV30RVmFcS218DtdZLm2x/xWFBhvr+2DLzLS2Gq8JJXNGQMFbHnCWixn5si4V/KA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.0.tgz#207460dd128a1620c332af5eea2df88bfdfd0520" - integrity sha512-dbOnzQVARBQp/ynJvNyJqE1ArtsWCV8nGMUablB1ILPonsJy+0ADJ+GXWa1nIsHdj3zPW0MLi8pdqpepRCTAFg== +"@abp/select2@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.1.tgz#65ac0ae3ac8783d4e0422717ce743d573bf559e4" + integrity sha512-efxhM/QxAmnyfGNcokZIK7vD6wYJkFGSnZEDj9QSrZ6DyUYf8H+jlK38JViDGe0RCMqts0R4B6IaKT0RbbIGmw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" select2 "^4.0.13" -"@abp/sweetalert@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.0.tgz#457a05af37819fc54082254022551ed0233c471e" - integrity sha512-6KXwPVC1zwNwlZBS9x0uPLTmieu3nmBp0G+ZH1aP+GTMphSa0ejI7nuPFqUeqfEMg+an1yj51SKKUfKtmlx6Zg== +"@abp/sweetalert@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.1.tgz#b6a41f8459d4407c4aee04e2f200b84e3fa8d534" + integrity sha512-olDU9Lh5o0sNCxRXROwt8QhHpuB5+fjojVWVUOiag0UMLVA9k/fp38diyn64qddSHWCafpqjeO32IXDKEQckZA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" sweetalert "^2.1.2" -"@abp/timeago@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.0.tgz#f0da23577630cec21255fc9c71dd2f7a3a3a3388" - integrity sha512-f5sb4vxgGPyIzTj6lxDzUx/qJiC8pAqWPasdxHDMzhKlkRuFWO+GfblR5DC/sj9fQPcyV8+yX/VQPY3JW8i62Q== +"@abp/timeago@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.1.tgz#9759e09728fea082d28cd430cdc1af5b93f14720" + integrity sha512-sIgSj3hZBl+oyO6rHc55YrIfqb4d2d2RlT6HU+OIsa2/BUAjTcW6WdPVUjXTreth2jyxEjXkfOKA3Sv5DvraGg== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" timeago "^1.6.7" -"@abp/toastr@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.0.tgz#c4f7d761eb4d93e993cb8e8cb54a0d670b20bdd3" - integrity sha512-GGqtVUCX8WalpkCnhiYUs+XxxBnhxGOLe87qFe/2tr0XNDJ3BSHXxiKynDetjlNAq/Qnf4U5P4Eg9FnHWFdWZg== +"@abp/toastr@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.1.tgz#06cf0b46e6430fae516aaff8707a5f5b16d6ed1d" + integrity sha512-LTf2NGwcG9ke571HMO7N4syhJijagnw/eIDl6ezflIQI/BnQqBKpXJ8xckCCqgryxfraBu4APMuSkPoDs2Ce5g== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" toastr "^2.1.4" -"@abp/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" - integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 2403fba4b8..4f4cd9722a 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -15,11 +15,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~3.3.0", - "@abp/ng.identity": "~3.3.0", - "@abp/ng.setting-management": "~3.3.0", - "@abp/ng.tenant-management": "~3.3.0", - "@abp/ng.theme.basic": "~3.3.0", + "@abp/ng.account": "~3.3.1", + "@abp/ng.identity": "~3.3.1", + "@abp/ng.setting-management": "~3.3.1", + "@abp/ng.tenant-management": "~3.3.1", + "@abp/ng.theme.basic": "~3.3.1", "@angular/animations": "~10.1.2", "@angular/common": "~10.1.2", "@angular/compiler": "~10.1.2", @@ -33,7 +33,7 @@ "zone.js": "~0.10.2" }, "devDependencies": { - "@abp/ng.schematics": "~3.3.0", + "@abp/ng.schematics": "~3.3.1", "@angular-devkit/build-angular": "~0.1001.2", "@angular-devkit/build-ng-packagr": "~0.1001.2", "@angular/cli": "~10.1.2", diff --git a/templates/module/angular/projects/my-project-name/package.json b/templates/module/angular/projects/my-project-name/package.json index 41586bcf5b..3627232e44 100644 --- a/templates/module/angular/projects/my-project-name/package.json +++ b/templates/module/angular/projects/my-project-name/package.json @@ -4,8 +4,8 @@ "peerDependencies": { "@angular/common": "^9.1.11", "@angular/core": "^9.1.11", - "@abp/ng.core": ">=3.3.0", - "@abp/ng.theme.shared": ">=3.3.0" + "@abp/ng.core": ">=3.3.1", + "@abp/ng.theme.shared": ">=3.3.1" }, "dependencies": { "tslib": "^2.0.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json index 8e9f71b33b..8718ef2557 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.1" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock index 7478ec439a..b6fb3e1d1e 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.0.tgz#5a83ad1010ede0647cc4bbe225f0ebf8f3ac90d8" - integrity sha512-b0Z/CO7nLixuceC2A/rx4m6OQPwe7ELym+ZZdurUxI42ciuoC5Cnnl3FH+HCt8P3JdFjOIWl2wOXvUcc6P16oQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.0.tgz#6c998bad95e46905e5a1487ab2370905cdf4376a" - integrity sha512-Tt6SK3EUj8jfZKSzeIVkRuWyAGRoDTqeoS5VVkNZLoIfLzwiimHw2o2AlPRtCMa0jqLropHtaT/kNl+EU24AZw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.3.0" - "@abp/bootstrap" "~3.3.0" - "@abp/bootstrap-datepicker" "~3.3.0" - "@abp/datatables.net-bs4" "~3.3.0" - "@abp/font-awesome" "~3.3.0" - "@abp/jquery-form" "~3.3.0" - "@abp/jquery-validation-unobtrusive" "~3.3.0" - "@abp/lodash" "~3.3.0" - "@abp/luxon" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/select2" "~3.3.0" - "@abp/sweetalert" "~3.3.0" - "@abp/timeago" "~3.3.0" - "@abp/toastr" "~3.3.0" - -"@abp/aspnetcore.mvc.ui@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.0.tgz#07f7d0f7f689a3ac75a69e12681ebd3d08fa0644" - integrity sha512-EbUISgnR8qHYdu/tSro8QjUWj17M6gOkugMI7N0fiPNbtLHgKG2GHWxIsVEf5ic1O2j/PWKOQ+FPBLZ4v3jFrw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.1.tgz#58ae88355b821ca72eccf1950bde544b8f0edcca" + integrity sha512-AUIJQIBb+5of0Na1cxmyacni6ToYBpmtU+NJH9/cTC3UUAPylj8TiAX9yobAPn8dbrcXTm+dh9T8i49rXTtxoA== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.1.tgz#c3123ea8f6c8428d034d9ac2782aa1bff27bd740" + integrity sha512-j2uZapDTKSjH74uZcIR4y09hr6w+OAdybQhL1bx4fb0D3XlmOdOwRrsqXieJNwAggbUn00EX2Usiey3N/wV1rA== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.3.1" + "@abp/bootstrap" "~3.3.1" + "@abp/bootstrap-datepicker" "~3.3.1" + "@abp/datatables.net-bs4" "~3.3.1" + "@abp/font-awesome" "~3.3.1" + "@abp/jquery-form" "~3.3.1" + "@abp/jquery-validation-unobtrusive" "~3.3.1" + "@abp/lodash" "~3.3.1" + "@abp/luxon" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/select2" "~3.3.1" + "@abp/sweetalert" "~3.3.1" + "@abp/timeago" "~3.3.1" + "@abp/toastr" "~3.3.1" + +"@abp/aspnetcore.mvc.ui@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.1.tgz#946d5fb68d73842270e2553fba475163d2ca57a5" + integrity sha512-W/Yxe20Upkha0XaHPQwQ3+LxdUZI21BiARcbBUnIUzRUrFBpvjD0A9/T8bsi+KpIqOYLAwtrE1TJoSuZGscoIw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.0.tgz#d7d11e591818a6ec654127d88602cfdfddf81b1f" - integrity sha512-PUsS48o5Cwufn8O8d34UBsjLF6/HrgdhsGTUzrVIhGapiyuYD/QrvqWYWRUj1Jeeb4nrsRVem2DnM1isy+CUCA== +"@abp/bootstrap-datepicker@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.1.tgz#c0f5763e0bfb1e293ef1b22f2a14014ec345dbc3" + integrity sha512-MnX2vI75gEDtlwnKhI6ptH657dh5TuXoin1XeaEhOa5rGbLwhSu4IFqRmlLBedFBOf+1zwcvFs30vsQlNKJ6Nw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.0.tgz#1314549e7a940c58fdff521a9ddf153f3414fffa" - integrity sha512-CVjSwbZPjio0VJWxdo+PRkvUYGtv51DgVrqjgHK7m7tGFwHAK38cDHAl+mqmIp7dgPG1Z+E0o41JteT3Za1Bkw== +"@abp/bootstrap@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.1.tgz#5b173918511b6ad1fb8ac570ea2e2fcb874970e0" + integrity sha512-CfnwXAV2XRK3gYpeEQjgVzEocU6pqdGZXwATwOKifHWBZNG8ubDyMgBed+oVCvJgRvLRrniR5jFK2vhm8Du+EQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.0.tgz#c88c28df19f96349b9a32b7ebe402e6d267c34e5" - integrity sha512-y9P86zPAm55fAyKwDaoxv+IrApA339aaGEpN9364upeeNBsO8mYf9hoM136VovQaWNIABFHRD7R+9KskwPAuNA== +"@abp/core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.1.tgz#b1da2160b0fc4a309dc4a65ee937c814de16b2de" + integrity sha512-6/6FHTLZrWh821O6xr4Sk1BlIt9gTAT19NnykQRV9U8S7rl4BQv2QF055R8Wg3lnVKWJ1ajiAbd3gerjH/pL6g== dependencies: - "@abp/utils" "^3.3.0" + "@abp/utils" "^3.3.1" -"@abp/datatables.net-bs4@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.0.tgz#e4cc85f3c1c195d9e8b07532eb7c53619f40a787" - integrity sha512-StuwT8jGfDWGNXmYgRELuErXxSE+qjVoiSAkd27mZqDbYSTipq4OZSAHr6WNmoqMgP6QlCgjGgXcz4Pr8Pxuaw== +"@abp/datatables.net-bs4@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.1.tgz#fd0f5f5579ff94d635d19c1bf46ac0593639e3f4" + integrity sha512-C9BUlbsk9liJ+hmFpTKoearJNZISDy5TInTbnixL8WfXfIaAWdZRs+ADvhKO9+oWMxkbxhGI8ueYQ29Z1UJzMg== dependencies: - "@abp/datatables.net" "~3.3.0" + "@abp/datatables.net" "~3.3.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.0.tgz#a2b2cedc06beb325e62ce6faba899c935564b9a7" - integrity sha512-y0RGrLxI7VgWFAFtHAraDnrEJ5pkUIJ3zxEScS43RUbArhxk+5pIpxQbmU0WgHpk72H7WXdqtL486Kw8PSj1Nw== +"@abp/datatables.net@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.1.tgz#2ec7406712607f08f0ae9a6ce0ee7bfd0cc73278" + integrity sha512-prsMkh//XCymCG/aYEEtzV/922RJIZ0+PcnRvhJzXvrX4DK2y3ZWM44QNR/9/rpkYUJqRcVoHqbt1DuxbHDLXQ== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.0.tgz#f9307334c34309456c47cc407fbe079821ace45e" - integrity sha512-7/uZ2qXooHQZG35F6ERKsjI8m0gn8/BgE2cOB7Zhu5KRtSTOHOOXX4YWEfoHYLEMuo3xKTTJ2gHM3jiCJEpVtg== +"@abp/font-awesome@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.1.tgz#268a21685a6b810b15848169b78c3dfb11d582c6" + integrity sha512-Eg2dwtcsyLo5E6PC21vK5R8YFe32UFSN4DpNrqAP9I85daR8ZbT0US8SbfCcI5nhiZlRi3EWj/cUgz2IEJHaaQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.0.tgz#43fc5655b4e3cac7c0558fb36dd9ef188fe64412" - integrity sha512-fH4IPf/cU3ojWtVsPZjtymzK0xWqqgmvnSk5zy4AB4MOCKyYtPrn5OAMUvq8A4uZ0mGIRAQ8Z72wPKZA1rws5A== +"@abp/jquery-form@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.1.tgz#4e8c2e50e711a7bbe4f40e74210472b21afd0ecf" + integrity sha512-HBic6SzOSprYAug/Qbgcd+MiPRwtXczS2/x9IUmPFeUhvuqJJoYPWrhI5xC6WKNcJ/5MjExiEbeEXMXp8PwJTA== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.0.tgz#0840f3114626a1d6efff54f4791776ebfdf56e76" - integrity sha512-foKM9FDAY2RZGz5EQ2FcQt/FiL8sMc+uwd+2KeAdIejLyPgeSH/lLio6agd2Xun4e/xlBJB185Ga1eKcdHIGAw== +"@abp/jquery-validation-unobtrusive@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.1.tgz#e42d61a172b6ef5cbdbb305ab5d93e3dad5159a1" + integrity sha512-SH8zmrR3HshCNP0zIgi4j6PMhgCzmCKk5xXxD+8kg+LAv+bm1iP0K5srgX4WlEffRma80QIeNKPpe/lW04EgFw== dependencies: - "@abp/jquery-validation" "~3.3.0" + "@abp/jquery-validation" "~3.3.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.0.tgz#2199968638d7bab9bfb6ba5e9f27d9d607c09a24" - integrity sha512-jxw274hx8i9+dkRrDz7aUpWSGESnJ2wuA6e3IAQIlubFf+7q0o4vosXD5bubinn4qaRGcSiYC15armfefgmFCw== +"@abp/jquery-validation@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.1.tgz#05164e342fdb83f40a17f000b40c27df2604c394" + integrity sha512-oKN3wQUY1PB7IhelFIJVjRqAZx/AVlpUF0GV6k/9eNBK+ZoLpW1ebE1q9tsLhXf7QS1N7S45aEHB8OpjRopDew== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.0.tgz#b99a9436bf3c2394917e761a2dcdfe4f1af9ff3d" - integrity sha512-WrjDQCBOi83kjtMYjXCJVWSbnFxKLW/KtDADkjTF7TxIGccsNWx6E8npzdCEnDnlOJ5Rk9+1QIu07pWedOjBSg== +"@abp/jquery@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.1.tgz#2e8431a52641ab85d1372a32518307bbf8fba1a0" + integrity sha512-mSAUYLzhJSvq8ixhAFkU5Q2LRDTkJAGHq47alb2nNEodZNr1q1i+875nP3dE/4MLT/foG0H+j+r4RGuYx4fGAA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" jquery "~3.5.1" -"@abp/lodash@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.0.tgz#5402a779ef1e8ecd585644a68607425587560305" - integrity sha512-QFm9hpWs0/J5TFFiE7vO5oxTsLgMcibmgg/CxYvmQZXhHGZpx3mdoAzC48CvRu8quxr6Xo8pIxlCyYXniR6/Dw== +"@abp/lodash@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.1.tgz#5c2602f03bde7fbf7841c01bb7178b3ca3429d87" + integrity sha512-5fitYkotzaXGaEbwctVYT4HcfKZ1ghAnvrQLYI+2MYgIQmtipBhXFEG030zIXWThEoIGKOBuwVzmOYtwiX7+8w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" lodash "^4.17.15" -"@abp/luxon@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.0.tgz#2d669786308df997c6738dd205363edaae670d15" - integrity sha512-1oSUuzgehSBxaxJLfD06ktXK4jisILPKFnEaKCBuPiKiQSDFvdQbepHAYJcpU1Jye6sVrheUKDUyJhnSwDb+0w== +"@abp/luxon@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.1.tgz#2e477be6a9f76394331399a762552bf610168e8e" + integrity sha512-bp74vBmObbqUXsOc4VRWml5ivEyIzwHLR4oycLvWG0bQZn65yt7db7DVYTQL1PCWbEAKf6eULlnF6JvZpSVgeg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.0.tgz#3bb48e0d68c0b76f3460eb19706927af2168a6c3" - integrity sha512-44JvJOfxJ5ihfNCPyc5U8D8N8CmLh8UBMkzjH7YJQZJO+7PGgjx+uEqbQhTtBDftUz5C5oFkGoQ7i2pil7YSYQ== +"@abp/malihu-custom-scrollbar-plugin@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.1.tgz#df833f2b8421f4dce681c13d2d5976680a27e4c8" + integrity sha512-bJRQTevunQulXo+EC1HWqYgV30RVmFcS218DtdZLm2x/xWFBhvr+2DLzLS2Gq8JJXNGQMFbHnCWixn5si4V/KA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.0.tgz#207460dd128a1620c332af5eea2df88bfdfd0520" - integrity sha512-dbOnzQVARBQp/ynJvNyJqE1ArtsWCV8nGMUablB1ILPonsJy+0ADJ+GXWa1nIsHdj3zPW0MLi8pdqpepRCTAFg== +"@abp/select2@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.1.tgz#65ac0ae3ac8783d4e0422717ce743d573bf559e4" + integrity sha512-efxhM/QxAmnyfGNcokZIK7vD6wYJkFGSnZEDj9QSrZ6DyUYf8H+jlK38JViDGe0RCMqts0R4B6IaKT0RbbIGmw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" select2 "^4.0.13" -"@abp/sweetalert@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.0.tgz#457a05af37819fc54082254022551ed0233c471e" - integrity sha512-6KXwPVC1zwNwlZBS9x0uPLTmieu3nmBp0G+ZH1aP+GTMphSa0ejI7nuPFqUeqfEMg+an1yj51SKKUfKtmlx6Zg== +"@abp/sweetalert@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.1.tgz#b6a41f8459d4407c4aee04e2f200b84e3fa8d534" + integrity sha512-olDU9Lh5o0sNCxRXROwt8QhHpuB5+fjojVWVUOiag0UMLVA9k/fp38diyn64qddSHWCafpqjeO32IXDKEQckZA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" sweetalert "^2.1.2" -"@abp/timeago@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.0.tgz#f0da23577630cec21255fc9c71dd2f7a3a3a3388" - integrity sha512-f5sb4vxgGPyIzTj6lxDzUx/qJiC8pAqWPasdxHDMzhKlkRuFWO+GfblR5DC/sj9fQPcyV8+yX/VQPY3JW8i62Q== +"@abp/timeago@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.1.tgz#9759e09728fea082d28cd430cdc1af5b93f14720" + integrity sha512-sIgSj3hZBl+oyO6rHc55YrIfqb4d2d2RlT6HU+OIsa2/BUAjTcW6WdPVUjXTreth2jyxEjXkfOKA3Sv5DvraGg== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" timeago "^1.6.7" -"@abp/toastr@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.0.tgz#c4f7d761eb4d93e993cb8e8cb54a0d670b20bdd3" - integrity sha512-GGqtVUCX8WalpkCnhiYUs+XxxBnhxGOLe87qFe/2tr0XNDJ3BSHXxiKynDetjlNAq/Qnf4U5P4Eg9FnHWFdWZg== +"@abp/toastr@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.1.tgz#06cf0b46e6430fae516aaff8707a5f5b16d6ed1d" + integrity sha512-LTf2NGwcG9ke571HMO7N4syhJijagnw/eIDl6ezflIQI/BnQqBKpXJ8xckCCqgryxfraBu4APMuSkPoDs2Ce5g== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" toastr "^2.1.4" -"@abp/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" - integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json index 34ca938f87..e415c0b911 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.1" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock index 7478ec439a..b6fb3e1d1e 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.0.tgz#5a83ad1010ede0647cc4bbe225f0ebf8f3ac90d8" - integrity sha512-b0Z/CO7nLixuceC2A/rx4m6OQPwe7ELym+ZZdurUxI42ciuoC5Cnnl3FH+HCt8P3JdFjOIWl2wOXvUcc6P16oQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.0.tgz#6c998bad95e46905e5a1487ab2370905cdf4376a" - integrity sha512-Tt6SK3EUj8jfZKSzeIVkRuWyAGRoDTqeoS5VVkNZLoIfLzwiimHw2o2AlPRtCMa0jqLropHtaT/kNl+EU24AZw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.3.0" - "@abp/bootstrap" "~3.3.0" - "@abp/bootstrap-datepicker" "~3.3.0" - "@abp/datatables.net-bs4" "~3.3.0" - "@abp/font-awesome" "~3.3.0" - "@abp/jquery-form" "~3.3.0" - "@abp/jquery-validation-unobtrusive" "~3.3.0" - "@abp/lodash" "~3.3.0" - "@abp/luxon" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/select2" "~3.3.0" - "@abp/sweetalert" "~3.3.0" - "@abp/timeago" "~3.3.0" - "@abp/toastr" "~3.3.0" - -"@abp/aspnetcore.mvc.ui@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.0.tgz#07f7d0f7f689a3ac75a69e12681ebd3d08fa0644" - integrity sha512-EbUISgnR8qHYdu/tSro8QjUWj17M6gOkugMI7N0fiPNbtLHgKG2GHWxIsVEf5ic1O2j/PWKOQ+FPBLZ4v3jFrw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.1.tgz#58ae88355b821ca72eccf1950bde544b8f0edcca" + integrity sha512-AUIJQIBb+5of0Na1cxmyacni6ToYBpmtU+NJH9/cTC3UUAPylj8TiAX9yobAPn8dbrcXTm+dh9T8i49rXTtxoA== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.1.tgz#c3123ea8f6c8428d034d9ac2782aa1bff27bd740" + integrity sha512-j2uZapDTKSjH74uZcIR4y09hr6w+OAdybQhL1bx4fb0D3XlmOdOwRrsqXieJNwAggbUn00EX2Usiey3N/wV1rA== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.3.1" + "@abp/bootstrap" "~3.3.1" + "@abp/bootstrap-datepicker" "~3.3.1" + "@abp/datatables.net-bs4" "~3.3.1" + "@abp/font-awesome" "~3.3.1" + "@abp/jquery-form" "~3.3.1" + "@abp/jquery-validation-unobtrusive" "~3.3.1" + "@abp/lodash" "~3.3.1" + "@abp/luxon" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/select2" "~3.3.1" + "@abp/sweetalert" "~3.3.1" + "@abp/timeago" "~3.3.1" + "@abp/toastr" "~3.3.1" + +"@abp/aspnetcore.mvc.ui@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.1.tgz#946d5fb68d73842270e2553fba475163d2ca57a5" + integrity sha512-W/Yxe20Upkha0XaHPQwQ3+LxdUZI21BiARcbBUnIUzRUrFBpvjD0A9/T8bsi+KpIqOYLAwtrE1TJoSuZGscoIw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.0.tgz#d7d11e591818a6ec654127d88602cfdfddf81b1f" - integrity sha512-PUsS48o5Cwufn8O8d34UBsjLF6/HrgdhsGTUzrVIhGapiyuYD/QrvqWYWRUj1Jeeb4nrsRVem2DnM1isy+CUCA== +"@abp/bootstrap-datepicker@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.1.tgz#c0f5763e0bfb1e293ef1b22f2a14014ec345dbc3" + integrity sha512-MnX2vI75gEDtlwnKhI6ptH657dh5TuXoin1XeaEhOa5rGbLwhSu4IFqRmlLBedFBOf+1zwcvFs30vsQlNKJ6Nw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.0.tgz#1314549e7a940c58fdff521a9ddf153f3414fffa" - integrity sha512-CVjSwbZPjio0VJWxdo+PRkvUYGtv51DgVrqjgHK7m7tGFwHAK38cDHAl+mqmIp7dgPG1Z+E0o41JteT3Za1Bkw== +"@abp/bootstrap@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.1.tgz#5b173918511b6ad1fb8ac570ea2e2fcb874970e0" + integrity sha512-CfnwXAV2XRK3gYpeEQjgVzEocU6pqdGZXwATwOKifHWBZNG8ubDyMgBed+oVCvJgRvLRrniR5jFK2vhm8Du+EQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.0.tgz#c88c28df19f96349b9a32b7ebe402e6d267c34e5" - integrity sha512-y9P86zPAm55fAyKwDaoxv+IrApA339aaGEpN9364upeeNBsO8mYf9hoM136VovQaWNIABFHRD7R+9KskwPAuNA== +"@abp/core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.1.tgz#b1da2160b0fc4a309dc4a65ee937c814de16b2de" + integrity sha512-6/6FHTLZrWh821O6xr4Sk1BlIt9gTAT19NnykQRV9U8S7rl4BQv2QF055R8Wg3lnVKWJ1ajiAbd3gerjH/pL6g== dependencies: - "@abp/utils" "^3.3.0" + "@abp/utils" "^3.3.1" -"@abp/datatables.net-bs4@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.0.tgz#e4cc85f3c1c195d9e8b07532eb7c53619f40a787" - integrity sha512-StuwT8jGfDWGNXmYgRELuErXxSE+qjVoiSAkd27mZqDbYSTipq4OZSAHr6WNmoqMgP6QlCgjGgXcz4Pr8Pxuaw== +"@abp/datatables.net-bs4@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.1.tgz#fd0f5f5579ff94d635d19c1bf46ac0593639e3f4" + integrity sha512-C9BUlbsk9liJ+hmFpTKoearJNZISDy5TInTbnixL8WfXfIaAWdZRs+ADvhKO9+oWMxkbxhGI8ueYQ29Z1UJzMg== dependencies: - "@abp/datatables.net" "~3.3.0" + "@abp/datatables.net" "~3.3.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.0.tgz#a2b2cedc06beb325e62ce6faba899c935564b9a7" - integrity sha512-y0RGrLxI7VgWFAFtHAraDnrEJ5pkUIJ3zxEScS43RUbArhxk+5pIpxQbmU0WgHpk72H7WXdqtL486Kw8PSj1Nw== +"@abp/datatables.net@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.1.tgz#2ec7406712607f08f0ae9a6ce0ee7bfd0cc73278" + integrity sha512-prsMkh//XCymCG/aYEEtzV/922RJIZ0+PcnRvhJzXvrX4DK2y3ZWM44QNR/9/rpkYUJqRcVoHqbt1DuxbHDLXQ== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.0.tgz#f9307334c34309456c47cc407fbe079821ace45e" - integrity sha512-7/uZ2qXooHQZG35F6ERKsjI8m0gn8/BgE2cOB7Zhu5KRtSTOHOOXX4YWEfoHYLEMuo3xKTTJ2gHM3jiCJEpVtg== +"@abp/font-awesome@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.1.tgz#268a21685a6b810b15848169b78c3dfb11d582c6" + integrity sha512-Eg2dwtcsyLo5E6PC21vK5R8YFe32UFSN4DpNrqAP9I85daR8ZbT0US8SbfCcI5nhiZlRi3EWj/cUgz2IEJHaaQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.0.tgz#43fc5655b4e3cac7c0558fb36dd9ef188fe64412" - integrity sha512-fH4IPf/cU3ojWtVsPZjtymzK0xWqqgmvnSk5zy4AB4MOCKyYtPrn5OAMUvq8A4uZ0mGIRAQ8Z72wPKZA1rws5A== +"@abp/jquery-form@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.1.tgz#4e8c2e50e711a7bbe4f40e74210472b21afd0ecf" + integrity sha512-HBic6SzOSprYAug/Qbgcd+MiPRwtXczS2/x9IUmPFeUhvuqJJoYPWrhI5xC6WKNcJ/5MjExiEbeEXMXp8PwJTA== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.0.tgz#0840f3114626a1d6efff54f4791776ebfdf56e76" - integrity sha512-foKM9FDAY2RZGz5EQ2FcQt/FiL8sMc+uwd+2KeAdIejLyPgeSH/lLio6agd2Xun4e/xlBJB185Ga1eKcdHIGAw== +"@abp/jquery-validation-unobtrusive@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.1.tgz#e42d61a172b6ef5cbdbb305ab5d93e3dad5159a1" + integrity sha512-SH8zmrR3HshCNP0zIgi4j6PMhgCzmCKk5xXxD+8kg+LAv+bm1iP0K5srgX4WlEffRma80QIeNKPpe/lW04EgFw== dependencies: - "@abp/jquery-validation" "~3.3.0" + "@abp/jquery-validation" "~3.3.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.0.tgz#2199968638d7bab9bfb6ba5e9f27d9d607c09a24" - integrity sha512-jxw274hx8i9+dkRrDz7aUpWSGESnJ2wuA6e3IAQIlubFf+7q0o4vosXD5bubinn4qaRGcSiYC15armfefgmFCw== +"@abp/jquery-validation@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.1.tgz#05164e342fdb83f40a17f000b40c27df2604c394" + integrity sha512-oKN3wQUY1PB7IhelFIJVjRqAZx/AVlpUF0GV6k/9eNBK+ZoLpW1ebE1q9tsLhXf7QS1N7S45aEHB8OpjRopDew== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.0.tgz#b99a9436bf3c2394917e761a2dcdfe4f1af9ff3d" - integrity sha512-WrjDQCBOi83kjtMYjXCJVWSbnFxKLW/KtDADkjTF7TxIGccsNWx6E8npzdCEnDnlOJ5Rk9+1QIu07pWedOjBSg== +"@abp/jquery@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.1.tgz#2e8431a52641ab85d1372a32518307bbf8fba1a0" + integrity sha512-mSAUYLzhJSvq8ixhAFkU5Q2LRDTkJAGHq47alb2nNEodZNr1q1i+875nP3dE/4MLT/foG0H+j+r4RGuYx4fGAA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" jquery "~3.5.1" -"@abp/lodash@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.0.tgz#5402a779ef1e8ecd585644a68607425587560305" - integrity sha512-QFm9hpWs0/J5TFFiE7vO5oxTsLgMcibmgg/CxYvmQZXhHGZpx3mdoAzC48CvRu8quxr6Xo8pIxlCyYXniR6/Dw== +"@abp/lodash@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.1.tgz#5c2602f03bde7fbf7841c01bb7178b3ca3429d87" + integrity sha512-5fitYkotzaXGaEbwctVYT4HcfKZ1ghAnvrQLYI+2MYgIQmtipBhXFEG030zIXWThEoIGKOBuwVzmOYtwiX7+8w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" lodash "^4.17.15" -"@abp/luxon@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.0.tgz#2d669786308df997c6738dd205363edaae670d15" - integrity sha512-1oSUuzgehSBxaxJLfD06ktXK4jisILPKFnEaKCBuPiKiQSDFvdQbepHAYJcpU1Jye6sVrheUKDUyJhnSwDb+0w== +"@abp/luxon@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.1.tgz#2e477be6a9f76394331399a762552bf610168e8e" + integrity sha512-bp74vBmObbqUXsOc4VRWml5ivEyIzwHLR4oycLvWG0bQZn65yt7db7DVYTQL1PCWbEAKf6eULlnF6JvZpSVgeg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.0.tgz#3bb48e0d68c0b76f3460eb19706927af2168a6c3" - integrity sha512-44JvJOfxJ5ihfNCPyc5U8D8N8CmLh8UBMkzjH7YJQZJO+7PGgjx+uEqbQhTtBDftUz5C5oFkGoQ7i2pil7YSYQ== +"@abp/malihu-custom-scrollbar-plugin@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.1.tgz#df833f2b8421f4dce681c13d2d5976680a27e4c8" + integrity sha512-bJRQTevunQulXo+EC1HWqYgV30RVmFcS218DtdZLm2x/xWFBhvr+2DLzLS2Gq8JJXNGQMFbHnCWixn5si4V/KA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.0.tgz#207460dd128a1620c332af5eea2df88bfdfd0520" - integrity sha512-dbOnzQVARBQp/ynJvNyJqE1ArtsWCV8nGMUablB1ILPonsJy+0ADJ+GXWa1nIsHdj3zPW0MLi8pdqpepRCTAFg== +"@abp/select2@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.1.tgz#65ac0ae3ac8783d4e0422717ce743d573bf559e4" + integrity sha512-efxhM/QxAmnyfGNcokZIK7vD6wYJkFGSnZEDj9QSrZ6DyUYf8H+jlK38JViDGe0RCMqts0R4B6IaKT0RbbIGmw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" select2 "^4.0.13" -"@abp/sweetalert@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.0.tgz#457a05af37819fc54082254022551ed0233c471e" - integrity sha512-6KXwPVC1zwNwlZBS9x0uPLTmieu3nmBp0G+ZH1aP+GTMphSa0ejI7nuPFqUeqfEMg+an1yj51SKKUfKtmlx6Zg== +"@abp/sweetalert@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.1.tgz#b6a41f8459d4407c4aee04e2f200b84e3fa8d534" + integrity sha512-olDU9Lh5o0sNCxRXROwt8QhHpuB5+fjojVWVUOiag0UMLVA9k/fp38diyn64qddSHWCafpqjeO32IXDKEQckZA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" sweetalert "^2.1.2" -"@abp/timeago@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.0.tgz#f0da23577630cec21255fc9c71dd2f7a3a3a3388" - integrity sha512-f5sb4vxgGPyIzTj6lxDzUx/qJiC8pAqWPasdxHDMzhKlkRuFWO+GfblR5DC/sj9fQPcyV8+yX/VQPY3JW8i62Q== +"@abp/timeago@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.1.tgz#9759e09728fea082d28cd430cdc1af5b93f14720" + integrity sha512-sIgSj3hZBl+oyO6rHc55YrIfqb4d2d2RlT6HU+OIsa2/BUAjTcW6WdPVUjXTreth2jyxEjXkfOKA3Sv5DvraGg== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" timeago "^1.6.7" -"@abp/toastr@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.0.tgz#c4f7d761eb4d93e993cb8e8cb54a0d670b20bdd3" - integrity sha512-GGqtVUCX8WalpkCnhiYUs+XxxBnhxGOLe87qFe/2tr0XNDJ3BSHXxiKynDetjlNAq/Qnf4U5P4Eg9FnHWFdWZg== +"@abp/toastr@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.1.tgz#06cf0b46e6430fae516aaff8707a5f5b16d6ed1d" + integrity sha512-LTf2NGwcG9ke571HMO7N4syhJijagnw/eIDl6ezflIQI/BnQqBKpXJ8xckCCqgryxfraBu4APMuSkPoDs2Ce5g== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" toastr "^2.1.4" -"@abp/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" - integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json index 34ca938f87..e415c0b911 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.3.1" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock index 8a2cf41872..69bf261f91 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.0.tgz#5a83ad1010ede0647cc4bbe225f0ebf8f3ac90d8" - integrity sha512-b0Z/CO7nLixuceC2A/rx4m6OQPwe7ELym+ZZdurUxI42ciuoC5Cnnl3FH+HCt8P3JdFjOIWl2wOXvUcc6P16oQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.0.tgz#6c998bad95e46905e5a1487ab2370905cdf4376a" - integrity sha512-Tt6SK3EUj8jfZKSzeIVkRuWyAGRoDTqeoS5VVkNZLoIfLzwiimHw2o2AlPRtCMa0jqLropHtaT/kNl+EU24AZw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.3.0" - "@abp/bootstrap" "~3.3.0" - "@abp/bootstrap-datepicker" "~3.3.0" - "@abp/datatables.net-bs4" "~3.3.0" - "@abp/font-awesome" "~3.3.0" - "@abp/jquery-form" "~3.3.0" - "@abp/jquery-validation-unobtrusive" "~3.3.0" - "@abp/lodash" "~3.3.0" - "@abp/luxon" "~3.3.0" - "@abp/malihu-custom-scrollbar-plugin" "~3.3.0" - "@abp/select2" "~3.3.0" - "@abp/sweetalert" "~3.3.0" - "@abp/timeago" "~3.3.0" - "@abp/toastr" "~3.3.0" - -"@abp/aspnetcore.mvc.ui@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.0.tgz#07f7d0f7f689a3ac75a69e12681ebd3d08fa0644" - integrity sha512-EbUISgnR8qHYdu/tSro8QjUWj17M6gOkugMI7N0fiPNbtLHgKG2GHWxIsVEf5ic1O2j/PWKOQ+FPBLZ4v3jFrw== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.3.1.tgz#58ae88355b821ca72eccf1950bde544b8f0edcca" + integrity sha512-AUIJQIBb+5of0Na1cxmyacni6ToYBpmtU+NJH9/cTC3UUAPylj8TiAX9yobAPn8dbrcXTm+dh9T8i49rXTtxoA== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.3.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.3.1.tgz#c3123ea8f6c8428d034d9ac2782aa1bff27bd740" + integrity sha512-j2uZapDTKSjH74uZcIR4y09hr6w+OAdybQhL1bx4fb0D3XlmOdOwRrsqXieJNwAggbUn00EX2Usiey3N/wV1rA== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.3.1" + "@abp/bootstrap" "~3.3.1" + "@abp/bootstrap-datepicker" "~3.3.1" + "@abp/datatables.net-bs4" "~3.3.1" + "@abp/font-awesome" "~3.3.1" + "@abp/jquery-form" "~3.3.1" + "@abp/jquery-validation-unobtrusive" "~3.3.1" + "@abp/lodash" "~3.3.1" + "@abp/luxon" "~3.3.1" + "@abp/malihu-custom-scrollbar-plugin" "~3.3.1" + "@abp/select2" "~3.3.1" + "@abp/sweetalert" "~3.3.1" + "@abp/timeago" "~3.3.1" + "@abp/toastr" "~3.3.1" + +"@abp/aspnetcore.mvc.ui@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.3.1.tgz#946d5fb68d73842270e2553fba475163d2ca57a5" + integrity sha512-W/Yxe20Upkha0XaHPQwQ3+LxdUZI21BiARcbBUnIUzRUrFBpvjD0A9/T8bsi+KpIqOYLAwtrE1TJoSuZGscoIw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.0.tgz#d7d11e591818a6ec654127d88602cfdfddf81b1f" - integrity sha512-PUsS48o5Cwufn8O8d34UBsjLF6/HrgdhsGTUzrVIhGapiyuYD/QrvqWYWRUj1Jeeb4nrsRVem2DnM1isy+CUCA== +"@abp/bootstrap-datepicker@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.3.1.tgz#c0f5763e0bfb1e293ef1b22f2a14014ec345dbc3" + integrity sha512-MnX2vI75gEDtlwnKhI6ptH657dh5TuXoin1XeaEhOa5rGbLwhSu4IFqRmlLBedFBOf+1zwcvFs30vsQlNKJ6Nw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.0.tgz#1314549e7a940c58fdff521a9ddf153f3414fffa" - integrity sha512-CVjSwbZPjio0VJWxdo+PRkvUYGtv51DgVrqjgHK7m7tGFwHAK38cDHAl+mqmIp7dgPG1Z+E0o41JteT3Za1Bkw== +"@abp/bootstrap@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.3.1.tgz#5b173918511b6ad1fb8ac570ea2e2fcb874970e0" + integrity sha512-CfnwXAV2XRK3gYpeEQjgVzEocU6pqdGZXwATwOKifHWBZNG8ubDyMgBed+oVCvJgRvLRrniR5jFK2vhm8Du+EQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.0.tgz#c88c28df19f96349b9a32b7ebe402e6d267c34e5" - integrity sha512-y9P86zPAm55fAyKwDaoxv+IrApA339aaGEpN9364upeeNBsO8mYf9hoM136VovQaWNIABFHRD7R+9KskwPAuNA== +"@abp/core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.3.1.tgz#b1da2160b0fc4a309dc4a65ee937c814de16b2de" + integrity sha512-6/6FHTLZrWh821O6xr4Sk1BlIt9gTAT19NnykQRV9U8S7rl4BQv2QF055R8Wg3lnVKWJ1ajiAbd3gerjH/pL6g== dependencies: - "@abp/utils" "^3.3.0" + "@abp/utils" "^3.3.1" -"@abp/datatables.net-bs4@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.0.tgz#e4cc85f3c1c195d9e8b07532eb7c53619f40a787" - integrity sha512-StuwT8jGfDWGNXmYgRELuErXxSE+qjVoiSAkd27mZqDbYSTipq4OZSAHr6WNmoqMgP6QlCgjGgXcz4Pr8Pxuaw== +"@abp/datatables.net-bs4@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.3.1.tgz#fd0f5f5579ff94d635d19c1bf46ac0593639e3f4" + integrity sha512-C9BUlbsk9liJ+hmFpTKoearJNZISDy5TInTbnixL8WfXfIaAWdZRs+ADvhKO9+oWMxkbxhGI8ueYQ29Z1UJzMg== dependencies: - "@abp/datatables.net" "~3.3.0" + "@abp/datatables.net" "~3.3.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.0.tgz#a2b2cedc06beb325e62ce6faba899c935564b9a7" - integrity sha512-y0RGrLxI7VgWFAFtHAraDnrEJ5pkUIJ3zxEScS43RUbArhxk+5pIpxQbmU0WgHpk72H7WXdqtL486Kw8PSj1Nw== +"@abp/datatables.net@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.3.1.tgz#2ec7406712607f08f0ae9a6ce0ee7bfd0cc73278" + integrity sha512-prsMkh//XCymCG/aYEEtzV/922RJIZ0+PcnRvhJzXvrX4DK2y3ZWM44QNR/9/rpkYUJqRcVoHqbt1DuxbHDLXQ== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" datatables.net "^1.10.21" -"@abp/font-awesome@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.0.tgz#f9307334c34309456c47cc407fbe079821ace45e" - integrity sha512-7/uZ2qXooHQZG35F6ERKsjI8m0gn8/BgE2cOB7Zhu5KRtSTOHOOXX4YWEfoHYLEMuo3xKTTJ2gHM3jiCJEpVtg== +"@abp/font-awesome@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.3.1.tgz#268a21685a6b810b15848169b78c3dfb11d582c6" + integrity sha512-Eg2dwtcsyLo5E6PC21vK5R8YFe32UFSN4DpNrqAP9I85daR8ZbT0US8SbfCcI5nhiZlRi3EWj/cUgz2IEJHaaQ== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.0.tgz#43fc5655b4e3cac7c0558fb36dd9ef188fe64412" - integrity sha512-fH4IPf/cU3ojWtVsPZjtymzK0xWqqgmvnSk5zy4AB4MOCKyYtPrn5OAMUvq8A4uZ0mGIRAQ8Z72wPKZA1rws5A== +"@abp/jquery-form@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.3.1.tgz#4e8c2e50e711a7bbe4f40e74210472b21afd0ecf" + integrity sha512-HBic6SzOSprYAug/Qbgcd+MiPRwtXczS2/x9IUmPFeUhvuqJJoYPWrhI5xC6WKNcJ/5MjExiEbeEXMXp8PwJTA== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.0.tgz#0840f3114626a1d6efff54f4791776ebfdf56e76" - integrity sha512-foKM9FDAY2RZGz5EQ2FcQt/FiL8sMc+uwd+2KeAdIejLyPgeSH/lLio6agd2Xun4e/xlBJB185Ga1eKcdHIGAw== +"@abp/jquery-validation-unobtrusive@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.3.1.tgz#e42d61a172b6ef5cbdbb305ab5d93e3dad5159a1" + integrity sha512-SH8zmrR3HshCNP0zIgi4j6PMhgCzmCKk5xXxD+8kg+LAv+bm1iP0K5srgX4WlEffRma80QIeNKPpe/lW04EgFw== dependencies: - "@abp/jquery-validation" "~3.3.0" + "@abp/jquery-validation" "~3.3.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.0.tgz#2199968638d7bab9bfb6ba5e9f27d9d607c09a24" - integrity sha512-jxw274hx8i9+dkRrDz7aUpWSGESnJ2wuA6e3IAQIlubFf+7q0o4vosXD5bubinn4qaRGcSiYC15armfefgmFCw== +"@abp/jquery-validation@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.3.1.tgz#05164e342fdb83f40a17f000b40c27df2604c394" + integrity sha512-oKN3wQUY1PB7IhelFIJVjRqAZx/AVlpUF0GV6k/9eNBK+ZoLpW1ebE1q9tsLhXf7QS1N7S45aEHB8OpjRopDew== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" jquery-validation "^1.19.2" -"@abp/jquery@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.0.tgz#b99a9436bf3c2394917e761a2dcdfe4f1af9ff3d" - integrity sha512-WrjDQCBOi83kjtMYjXCJVWSbnFxKLW/KtDADkjTF7TxIGccsNWx6E8npzdCEnDnlOJ5Rk9+1QIu07pWedOjBSg== +"@abp/jquery@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.3.1.tgz#2e8431a52641ab85d1372a32518307bbf8fba1a0" + integrity sha512-mSAUYLzhJSvq8ixhAFkU5Q2LRDTkJAGHq47alb2nNEodZNr1q1i+875nP3dE/4MLT/foG0H+j+r4RGuYx4fGAA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" jquery "~3.5.1" -"@abp/lodash@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.0.tgz#5402a779ef1e8ecd585644a68607425587560305" - integrity sha512-QFm9hpWs0/J5TFFiE7vO5oxTsLgMcibmgg/CxYvmQZXhHGZpx3mdoAzC48CvRu8quxr6Xo8pIxlCyYXniR6/Dw== +"@abp/lodash@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.3.1.tgz#5c2602f03bde7fbf7841c01bb7178b3ca3429d87" + integrity sha512-5fitYkotzaXGaEbwctVYT4HcfKZ1ghAnvrQLYI+2MYgIQmtipBhXFEG030zIXWThEoIGKOBuwVzmOYtwiX7+8w== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" lodash "^4.17.15" -"@abp/luxon@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.0.tgz#2d669786308df997c6738dd205363edaae670d15" - integrity sha512-1oSUuzgehSBxaxJLfD06ktXK4jisILPKFnEaKCBuPiKiQSDFvdQbepHAYJcpU1Jye6sVrheUKDUyJhnSwDb+0w== +"@abp/luxon@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.3.1.tgz#2e477be6a9f76394331399a762552bf610168e8e" + integrity sha512-bp74vBmObbqUXsOc4VRWml5ivEyIzwHLR4oycLvWG0bQZn65yt7db7DVYTQL1PCWbEAKf6eULlnF6JvZpSVgeg== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.0.tgz#3bb48e0d68c0b76f3460eb19706927af2168a6c3" - integrity sha512-44JvJOfxJ5ihfNCPyc5U8D8N8CmLh8UBMkzjH7YJQZJO+7PGgjx+uEqbQhTtBDftUz5C5oFkGoQ7i2pil7YSYQ== +"@abp/malihu-custom-scrollbar-plugin@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.3.1.tgz#df833f2b8421f4dce681c13d2d5976680a27e4c8" + integrity sha512-bJRQTevunQulXo+EC1HWqYgV30RVmFcS218DtdZLm2x/xWFBhvr+2DLzLS2Gq8JJXNGQMFbHnCWixn5si4V/KA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.0.tgz#207460dd128a1620c332af5eea2df88bfdfd0520" - integrity sha512-dbOnzQVARBQp/ynJvNyJqE1ArtsWCV8nGMUablB1ILPonsJy+0ADJ+GXWa1nIsHdj3zPW0MLi8pdqpepRCTAFg== +"@abp/select2@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.3.1.tgz#65ac0ae3ac8783d4e0422717ce743d573bf559e4" + integrity sha512-efxhM/QxAmnyfGNcokZIK7vD6wYJkFGSnZEDj9QSrZ6DyUYf8H+jlK38JViDGe0RCMqts0R4B6IaKT0RbbIGmw== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" select2 "^4.0.13" -"@abp/sweetalert@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.0.tgz#457a05af37819fc54082254022551ed0233c471e" - integrity sha512-6KXwPVC1zwNwlZBS9x0uPLTmieu3nmBp0G+ZH1aP+GTMphSa0ejI7nuPFqUeqfEMg+an1yj51SKKUfKtmlx6Zg== +"@abp/sweetalert@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.3.1.tgz#b6a41f8459d4407c4aee04e2f200b84e3fa8d534" + integrity sha512-olDU9Lh5o0sNCxRXROwt8QhHpuB5+fjojVWVUOiag0UMLVA9k/fp38diyn64qddSHWCafpqjeO32IXDKEQckZA== dependencies: - "@abp/core" "~3.3.0" + "@abp/core" "~3.3.1" sweetalert "^2.1.2" -"@abp/timeago@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.0.tgz#f0da23577630cec21255fc9c71dd2f7a3a3a3388" - integrity sha512-f5sb4vxgGPyIzTj6lxDzUx/qJiC8pAqWPasdxHDMzhKlkRuFWO+GfblR5DC/sj9fQPcyV8+yX/VQPY3JW8i62Q== +"@abp/timeago@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.3.1.tgz#9759e09728fea082d28cd430cdc1af5b93f14720" + integrity sha512-sIgSj3hZBl+oyO6rHc55YrIfqb4d2d2RlT6HU+OIsa2/BUAjTcW6WdPVUjXTreth2jyxEjXkfOKA3Sv5DvraGg== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" timeago "^1.6.7" -"@abp/toastr@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.0.tgz#c4f7d761eb4d93e993cb8e8cb54a0d670b20bdd3" - integrity sha512-GGqtVUCX8WalpkCnhiYUs+XxxBnhxGOLe87qFe/2tr0XNDJ3BSHXxiKynDetjlNAq/Qnf4U5P4Eg9FnHWFdWZg== +"@abp/toastr@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.3.1.tgz#06cf0b46e6430fae516aaff8707a5f5b16d6ed1d" + integrity sha512-LTf2NGwcG9ke571HMO7N4syhJijagnw/eIDl6ezflIQI/BnQqBKpXJ8xckCCqgryxfraBu4APMuSkPoDs2Ce5g== dependencies: - "@abp/jquery" "~3.3.0" + "@abp/jquery" "~3.3.1" toastr "^2.1.4" -"@abp/utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0.tgz#44ccacf4c415227e94981d907017de1c6f7225bb" - integrity sha512-/JIcygVJu/Ob1G5IicL2XgOVjIIePC2t3QzgEbwaq6NDGMHiOm2quyS8Lj7TfjBeUFTJhCFEbXJMq0lGQ+KMww== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" From 06e37d703b8ac3494c900c3ff8a0584588100202 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 3 Nov 2020 15:44:31 +0300 Subject: [PATCH 108/108] Fix global-styles path --- .../wwwroot/{libs => }/global-styles.css | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/{libs => }/global-styles.css (100%) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/global-styles.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/global-styles.css similarity index 100% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/global-styles.css rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/global-styles.css