diff --git a/docs/en/UI/AspNetCore/Page-Alerts.md b/docs/en/UI/AspNetCore/Page-Alerts.md new file mode 100644 index 0000000000..cbf6eb493d --- /dev/null +++ b/docs/en/UI/AspNetCore/Page-Alerts.md @@ -0,0 +1,84 @@ +# ASP.NET Core MVC / Razor Pages: Page Alerts + +It is common to show error, warning or information alerts to inform the user. An example *Service Interruption* alert is shown below: + +![page-alert-example](../../images/page-alert-example.png) + +## Basic Usage + +If you directly or indirectly inherit from `AbpPageModel`, you can use the `Alerts` property to add alerts to be rendered after the request completes. + +**Example: Show a Warning alert** + +```csharp +namespace MyProject.Web.Pages +{ + public class IndexModel : MyProjectPageModel //or inherit from AbpPageModel + { + public void OnGet() + { + Alerts.Warning( + text: "We will have a service interruption between 02:00 AM and 04:00 AM at October 23, 2023!", + title: "Service Interruption" + ); + } + } +} +``` + +This usage renders an alert that was shown above. If you need to localize the messages, you can always use the standard [localization](../../Localization.md) system. + +### Exceptions / Invalid Model States + +It is typical to show alerts when you manually handle exceptions (with try/catch statements) or want to handle `!ModelState.IsValid` case and warn the user. For example, the Account Module shows a warning if user enters an incorrect username or password: + +![page-alert-account-layout](../../images/page-alert-account-layout.png) + +> Note that you generally don't need to manually handle exceptions since ABP Framework provides an automatic [exception handling](../../Exception-Handling.md) system. + +### Alert Types + +`Warning` is used to show a warning alert. Other common methods are `Info`, `Danger` and `Success`. + +Beside the standard methods, you can use the `Alerts.Add` method by passing an `AlertType` `enum` with one of these values: `Default`, `Primary`, `Secondary`, `Success`, `Danger`, `Warning`, `Info`, `Light`, `Dark`. + +### Dismissible + +All alert methods gets an optional `dismissible` parameter. Default value is `true` which makes the alert box dismissible. Set it to `false` to create a sticky alert box. + +## IAlertManager + +If you need to add alert messages from another part of your code, you can inject the `IAlertManager` service and use its `Alerts` list. + +**Example: Inject the `IAlertManager`** + +```csharp +using Volo.Abp.AspNetCore.Mvc.UI.Alerts; +using Volo.Abp.DependencyInjection; + +namespace MyProject.Web.Pages +{ + public class MyService : ITransientDependency + { + private readonly IAlertManager _alertManager; + + public MyService(IAlertManager alertManager) + { + _alertManager = alertManager; + } + + public void Test() + { + _alertManager.Alerts.Add(AlertType.Danger, "Test message!"); + } + } +} +``` + +## Notes + +### AJAX Requests + +Page Alert system was designed to be used in a regular full page request. It is not for AJAX/partial requests. The alerts are rendered in the page layout, so a full page refresh is needed. + +For AJAX requests, it is more proper to throw exceptions (e.g. `UserFriendlyException`). See the [exception handling](../../Exception-Handling.md) document. \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 45c9c46407..7531d4e9f1 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -402,6 +402,10 @@ "text": "Navigation / Menus", "path": "UI/AspNetCore/Navigation-Menu.md" }, + { + "text": "Page Alerts", + "path": "UI/AspNetCore/Page-Alerts.md" + }, { "text": "Client Side Package Management", "path": "UI/AspNetCore/Client-Side-Package-Management.md" diff --git a/docs/en/images/page-alert-account-layout.png b/docs/en/images/page-alert-account-layout.png new file mode 100644 index 0000000000..2442cb5d14 Binary files /dev/null and b/docs/en/images/page-alert-account-layout.png differ diff --git a/docs/en/images/page-alert-example.png b/docs/en/images/page-alert-example.png new file mode 100644 index 0000000000..266671757a Binary files /dev/null and b/docs/en/images/page-alert-example.png differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs index ef5ee76722..5622d99cfb 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Globalization; using System.Reflection; using System.Threading.Tasks; using JetBrains.Annotations; @@ -6,6 +7,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Volo.Abp; using Volo.Abp.AspNetCore.Components.WebAssembly; +using Volo.Abp.AspNetCore.Mvc.Client; using Volo.Abp.Modularity; namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting @@ -30,7 +32,7 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting return application; } - public static async Task InitializeAsync( + public async static Task InitializeAsync( [NotNull] this IAbpApplicationWithExternalServiceProvider application, [NotNull] IServiceProvider serviceProvider) { @@ -41,10 +43,29 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting using (var scope = serviceProvider.CreateScope()) { - foreach (var service in scope.ServiceProvider.GetServices()) - { - await service.InitializeAsync(); - } + await InitializeModulesAsync(scope.ServiceProvider); + SetCurrentLanguage(scope); + } + } + + private async static Task InitializeModulesAsync(IServiceProvider serviceProvider) + { + foreach (var service in serviceProvider.GetServices()) + { + await service.InitializeAsync(); + } + } + + private static void SetCurrentLanguage(IServiceScope scope) + { + var configurationClient = scope.ServiceProvider.GetRequiredService(); + var configuration = configurationClient.Get(); + var cultureName = configuration.Localization?.CurrentCulture?.CultureName; + if (!cultureName.IsNullOrEmpty()) + { + var culture = new CultureInfo(cultureName); + CultureInfo.DefaultThreadCurrentCulture = culture; + CultureInfo.DefaultThreadCurrentUICulture = culture; } } } diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css index 340c7c1169..1a404e7b86 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.15.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.15.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ .fa, diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css index 1afddf9fb1..bcbee61ddd 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.15.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.15.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ .fa.fa-glass:before { diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.eot b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.eot index 7244443d5f..958684e26a 100644 Binary files a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.eot and b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.eot differ diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.svg b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.svg index 838ad77101..2b7cf17b9a 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.svg +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.svg @@ -2,11 +2,11 @@ -Created by FontForge 20200314 at Mon Sep 28 13:16:03 2020 +Created by FontForge 20200314 at Mon Oct 5 09:50:45 2020 By Robert Madole Copyright (c) Font Awesome - + +d="M498.252 213.777c0.129883 -0.613281 0.322266 -1.21777 0.561523 -1.78223v-37.0557c-0.194336 -0.300781 -0.516602 -0.583008 -0.552734 -0.900391c-0.619141 -5.36426 -0.837891 -10.8076 -1.87012 -16.0869c-2.06934 -10.6074 -4.15723 -21.2393 -7.0166 -31.6523 +c-4.94531 -18.0205 -12.7578 -34.8809 -22.2998 -50.9258c-8.94336 -15.126 -19.4043 -28.9668 -31.4268 -41.6387c-3.74609 -3.92188 -7.54688 -7.80078 -11.5107 -11.5c-5.31152 -4.95703 -10.5146 -10.1094 -16.2998 -14.457 +c-9.3418 -7.02344 -18.9883 -13.6533 -28.7373 -20.1006c-15.083 -9.81543 -31.6211 -17.9053 -48.9512 -23.8174c-15.3828 -5.38281 -31.1533 -9.38574 -47.4893 -10.7178c-2.52734 -0.206055 -5.02051 -0.753906 -7.52734 -1.14258h-32.2891 +c-0.358398 0.245117 -0.762695 0.436523 -1.18945 0.55957c-6.1377 0.620117 -12.3418 0.863281 -18.4121 1.87305c-13.8301 2.22949 -27.5977 5.58398 -40.6416 9.83496c-19.5498 6.43359 -38.4463 15.0176 -55.8994 25.2773 +c-15.0488 8.79004 -28.9365 18.9688 -41.7871 30.5859c-9.6875 8.70605 -18.3936 18.0898 -26.3584 28.416c-9.38184 12.1963 -17.4385 25.4316 -24 39.5283c-7.5918 16.6592 -13.3467 34.7812 -16.7295 53.2998c-2.35547 13.1611 -3.85059 26.5459 -4.4248 40.2402 +c-0.136719 3.0332 -0.209961 5.74121 -0.209961 8.80859c0 9.05566 0.599609 17.9717 1.76172 26.7119c1.52637 11.874 4.15625 23.6367 7.69043 34.7588c5.05762 15.7021 12.0283 30.7871 20.4941 44.6006c9.58203 15.9961 20.7793 30.6025 33.6484 43.9502 +c9.55469 9.83496 19.7539 19.0605 29.9268 28.2676c5.70605 5.1582 11.8066 9.9082 17.9736 14.5186c12.0029 9.04004 24.6963 17.1025 38.0801 24.1572c12.5137 6.63281 25.9795 12.1963 39.7686 16.3555c10.9453 3.41016 22.5254 5.84375 34.2559 7.09961 +c2.42773 0.225586 4.82617 0.761719 7.23633 1.15039c10.7627 -0.00195312 21.5254 0 32.2881 0.00585938c0.299805 -0.195312 0.583984 -0.516602 0.899414 -0.552734c6.87793 -0.81543 13.8467 -1.16797 20.627 -2.48242 +c11.2432 -2.18359 22.4971 -4.51465 33.5156 -7.61523c19.999 -5.78125 39.2266 -14.2031 56.7227 -24.668c17.2832 -10.0947 32.9639 -22.1357 47.1133 -36.1152c6.71973 -6.90527 12.9209 -14.0508 18.8174 -21.6895c13.4639 -16.959 24.0283 -36.4561 30.874 -57.5 +c3.88867 -11.8086 7.16211 -24.2148 9.62207 -36.5996c2.0459 -10.1748 2.53809 -20.6602 3.74609 -31zM337.135 214.927l0.00488281 67.2695c-35.2686 0 -53.1152 -9.36719 -62.04 -36.1895v31.9316h-73.5176v-190.738h73.5127v93.667 +c0 22.1396 6.37012 37.04 33.5703 37.04c11.8984 0 28.4697 -2.98047 28.4697 -2.98047z" /> - - \ No newline at end of file diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf index 9c46cb3f91..f071825144 100644 Binary files a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf and b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf differ diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff index 925cb19009..277ab65bb4 100644 Binary files a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff and b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff differ diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2 b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2 index 0d143126e8..47805d4713 100644 Binary files a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2 and b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2 differ diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.eot b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.eot index 4edf298885..bef9f7226c 100644 Binary files a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.eot and b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.eot differ diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.svg b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.svg index 357f5c9df8..bccc256b91 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.svg +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.svg @@ -2,11 +2,11 @@ -Created by FontForge 20200314 at Mon Sep 28 13:16:03 2020 +Created by FontForge 20200314 at Mon Oct 5 09:50:45 2020 By Robert Madole Copyright (c) Font Awesome - + - - \ No newline at end of file diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.ttf b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.ttf index ee60bb59df..659527a68a 100644 Binary files a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.ttf and b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.ttf differ diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff index 11a86683bd..31f44b2d46 100644 Binary files a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff and b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff differ diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff2 b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff2 index f385ea8d16..0332a9bf97 100644 Binary files a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff2 and b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff2 differ diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.eot b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.eot index 12216b7610..5da4fa001b 100644 Binary files a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.eot and b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.eot differ diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.svg b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.svg index 2ca9cd2131..313b31188f 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.svg +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.svg @@ -2,11 +2,11 @@ -Created by FontForge 20200314 at Mon Sep 28 13:16:03 2020 +Created by FontForge 20200314 at Mon Oct 5 09:50:45 2020 By Robert Madole Copyright (c) Font Awesome - + - - \ No newline at end of file diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf index f3fdc10cc1..e074608433 100644 Binary files a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf and b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf differ diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff index 60cd73886a..ef6b447443 100644 Binary files a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff and b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff differ diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2 b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2 index 8f18600606..120b3007e1 100644 Binary files a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2 and b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2 differ diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock index 171e50ba4e..09eb756e2b 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock @@ -209,9 +209,9 @@ "@abp/prismjs" "~3.2.0" "@fortawesome/fontawesome-free@^5.13.0": - version "5.15.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.0.tgz#631b04d6301fee06d4bd7a9824fe7157735cbdb6" - integrity sha512-wXetjQBNMTP59MAYNR1tdahMDOLx3FYj3PKdso7PLFLDpTvmAIqhSSEqnSTmWKahRjD+Sh5I5635+5qaoib5lw== + version "5.15.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.1.tgz#ccfef6ddbe59f8fe8f694783e1d3eb88902dc5eb" + integrity sha512-OEdH7SyC1suTdhBGW91/zBfR6qaIhThbcN8PUXtXilY4GYnSBbVqOntdHbC1vXwsDnX0Qix2m2+DSU1J51ybOQ== ansi-colors@^1.0.1: version "1.1.0" diff --git a/npm/ng-packs/packages/account/src/lib/account-routing.module.ts b/npm/ng-packs/packages/account/src/lib/account-routing.module.ts index 6883921202..0b80242aab 100644 --- a/npm/ng-packs/packages/account/src/lib/account-routing.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account-routing.module.ts @@ -11,6 +11,7 @@ import { ManageProfileComponent } from './components/manage-profile/manage-profi import { RegisterComponent } from './components/register/register.component'; import { eAccountComponents } from './enums/components'; import { AuthenticationFlowGuard } from './guards/authentication-flow.guard'; +import { ManageProfileGuard } from './guards/manage-profile.guard'; const routes: Routes = [ { path: '', pathMatch: 'full', redirectTo: 'login' }, @@ -43,7 +44,7 @@ const routes: Routes = [ { path: 'manage-profile', component: ReplaceableRouteContainerComponent, - canActivate: [AuthGuard], + canActivate: [AuthGuard, ManageProfileGuard], data: { replaceableComponent: { key: eAccountComponents.ManageProfile, diff --git a/npm/ng-packs/packages/account/src/lib/account.module.ts b/npm/ng-packs/packages/account/src/lib/account.module.ts index 7f2151dfd1..ac99aefdf6 100644 --- a/npm/ng-packs/packages/account/src/lib/account.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account.module.ts @@ -15,6 +15,7 @@ import { Options } from './models/options'; import { ACCOUNT_OPTIONS } from './tokens/options.token'; import { accountOptionsFactory } from './utils/factory-utils'; import { AuthenticationFlowGuard } from './guards/authentication-flow.guard'; +import { ManageProfileGuard } from './guards/manage-profile.guard'; @NgModule({ declarations: [ @@ -41,6 +42,7 @@ export class AccountModule { ngModule: AccountModule, providers: [ AuthenticationFlowGuard, + ManageProfileGuard, { provide: ACCOUNT_OPTIONS, useValue: options }, { provide: 'ACCOUNT_OPTIONS', diff --git a/npm/ng-packs/packages/account/src/lib/guards/index.ts b/npm/ng-packs/packages/account/src/lib/guards/index.ts index 382170b2b1..a8b9edd4d5 100644 --- a/npm/ng-packs/packages/account/src/lib/guards/index.ts +++ b/npm/ng-packs/packages/account/src/lib/guards/index.ts @@ -1 +1,2 @@ export * from './authentication-flow.guard'; +export * from './manage-profile.guard'; diff --git a/npm/ng-packs/packages/account/src/lib/guards/manage-profile.guard.ts b/npm/ng-packs/packages/account/src/lib/guards/manage-profile.guard.ts new file mode 100644 index 0000000000..ca840bd913 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/guards/manage-profile.guard.ts @@ -0,0 +1,18 @@ +import { Injectable } from '@angular/core'; +import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; +import { ConfigStateService } from '@abp/ng.core'; + +@Injectable() +export class ManageProfileGuard implements CanActivate { + constructor(private configState: ConfigStateService) {} + + canActivate(_: ActivatedRouteSnapshot, __: RouterStateSnapshot) { + const env = this.configState.getEnvironment(); + if (env.oAuthConfig.responseType === 'code') { + window.open(`${env.oAuthConfig.issuer}/Account/Manage`, '_blank'); + return false; + } else { + return true; + } + } +} diff --git a/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts b/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts index dd7abf929e..ee3f49e17a 100644 --- a/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts @@ -17,6 +17,10 @@ export class ConfigStateService { return this.store.selectSnapshot(ConfigState.getApplicationInfo); } + getEnvironment() { + return this.store.selectSnapshot(ConfigState.getEnvironment); + } + getOne(...args: Parameters) { return this.store.selectSnapshot(ConfigState.getOne(...args)); } diff --git a/npm/ng-packs/packages/core/src/lib/states/config.state.ts b/npm/ng-packs/packages/core/src/lib/states/config.state.ts index 4e686dbe62..2953c5212f 100644 --- a/npm/ng-packs/packages/core/src/lib/states/config.state.ts +++ b/npm/ng-packs/packages/core/src/lib/states/config.state.ts @@ -28,6 +28,11 @@ export class ConfigState { return state.environment.application || ({} as Config.Application); } + @Selector() + static getEnvironment(state: Config.State): Config.Environment { + return state.environment; + } + static getOne(key: string) { const selector = createSelector([ConfigState], (state: Config.State) => { return state[key]; diff --git a/npm/ng-packs/packages/schematics/src/models/method.ts b/npm/ng-packs/packages/schematics/src/models/method.ts index 036392e0a1..c2833a7bfd 100644 --- a/npm/ng-packs/packages/schematics/src/models/method.ts +++ b/npm/ng-packs/packages/schematics/src/models/method.ts @@ -1,5 +1,5 @@ -import { strings } from '@angular-devkit/core'; import { eBindingSourceId, eMethodModifier } from '../enums'; +import { camel } from '../utils'; import { ParameterInBody } from './api-definition'; import { Property } from './model'; import { Omissible } from './util'; @@ -42,7 +42,7 @@ export class Body { registerActionParameter = (param: ParameterInBody) => { const { bindingSourceId, descriptorName, name, nameOnMethod } = param; - const camelName = strings.camelize(name); + const camelName = camel(name); const value = descriptorName ? `${descriptorName}.${camelName}` : nameOnMethod; switch (bindingSourceId) { diff --git a/npm/ng-packs/packages/schematics/src/utils/model.ts b/npm/ng-packs/packages/schematics/src/utils/model.ts index 0e472e64d3..f68aa9b181 100644 --- a/npm/ng-packs/packages/schematics/src/utils/model.ts +++ b/npm/ng-packs/packages/schematics/src/utils/model.ts @@ -1,8 +1,8 @@ -import { strings } from '@angular-devkit/core'; import { VOLO_NAME_VALUE, VOLO_REGEX } from '../constants'; import { Interface, Model, Property, Type, TypeWithEnum } from '../models'; import { parseNamespace } from './namespace'; import { relativePathToModel } from './path'; +import { camel } from './text'; import { parseGenerics } from './tree'; import { createTypeParser, @@ -118,7 +118,7 @@ export function createImportRefToInterfaceReducerCreator(params: ModelGeneratorP const _interface = new Interface({ identifier, base, namespace, ref }); typeDef.properties?.forEach(prop => { - const name = strings.camelize(prop.name); + const name = camel(prop.name); const optional = prop.typeSimple.endsWith('?') ? '?' : ''; const type = simplifyType(prop.typeSimple); const refs = parseType(prop.type).reduce( diff --git a/npm/ng-packs/packages/schematics/src/utils/text.ts b/npm/ng-packs/packages/schematics/src/utils/text.ts index a3c177c1a4..379ea78601 100644 --- a/npm/ng-packs/packages/schematics/src/utils/text.ts +++ b/npm/ng-packs/packages/schematics/src/utils/text.ts @@ -2,7 +2,7 @@ import { strings } from '@angular-devkit/core'; export const lower = (text: string) => text.toLowerCase(); export const upper = (text: string) => text.toUpperCase(); -export const camel = (text: string) => strings.camelize(_(text)); +export const camel = (text: string) => toCamelCase(_(text)); export const pascal = (text: string) => strings.classify(_(text)); export const kebab = (text: string) => strings.dasherize(_(text)); export const snake = (text: string) => strings.underscore(_(text)); @@ -13,3 +13,41 @@ export const dir = (text: string) => function _(text: string): string { return text.replace(/\./g, '_'); } + +// https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Utilities/StringUtils.cs#L155 +function toCamelCase(str: string) { + if (!str || !isUpperCase(str[0])) return str; + + const chars = str.split(''); + const { length } = chars; + + for (let i = 0; i < length; i++) { + if (i === 1 && !isUpperCase(chars[i])) break; + + const hasNext = i + 1 < length; + + if (i > 0 && hasNext && !isUpperCase(chars[i + 1])) { + if (isSeparator(chars[i + 1])) { + chars[i] = toLowerCase(chars[i]); + } + + break; + } + + chars[i] = toLowerCase(chars[i]); + } + + return chars.join(''); +} + +function isSeparator(str = '') { + return /[\s\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]+/.test(str); +} + +function isUpperCase(str = '') { + return /[A-Z]+/.test(str); +} + +function toLowerCase(str = '') { + return str.toLowerCase(); +} diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index e66942e04f..76817d94b3 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -2,20 +2,20 @@ # yarn lockfile v1 -"@abp/ng.account@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-3.2.0-rc.2.tgz#30ec416a9d05f87fe2664943d72f051d1b84aaad" - integrity sha512-iobXZEJh/pXz4dxFjN407KTFJnFcaUBH4Bx5pwUAPV1HIXwNQzANWHe4389GEZjUohV+0WVhdRI85bffGFCOQA== +"@abp/ng.account@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-3.2.0.tgz#95323fe873a91ed96f5604d0791dbf78b4245f31" + integrity sha512-0OKVYJ1uB33VCa+IReyz0VSb9ku4OJYG+6b1hrqCJcJCzqzbltCxCVVJ31FvrYDoEah3E1TNQIzTxvbCuoG8YA== dependencies: - "@abp/ng.theme.shared" "~3.2.0-rc.2" + "@abp/ng.theme.shared" "~3.2.0" tslib "^2.0.0" -"@abp/ng.core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-3.2.0-rc.2.tgz#51ecd1884e99bb9a17802f786a25263f4d6fbfff" - integrity sha512-7zKejXr6Y75AlsrPsuBsmHmv2t4qCAfPhrgQ+/YHuqAd8h3XZcSWn75vKm8405KEe2pTTY8+mA+aUT8Mmc9HMg== +"@abp/ng.core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-3.2.0.tgz#6970a9a483c3796af7b7db2af3d5c3c6cfd7410c" + integrity sha512-AYNrWi41hFpM6zOc2K/l13r6gmLu99QUbHr1dwsp+goGXo0UZ1dLJ3HtxNnwte4Wx2U2DmkLPvVovCHxcXbXAA== dependencies: - "@abp/utils" "^3.2.0-rc.1" + "@abp/utils" "^3.2.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.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-3.2.0-rc.2.tgz#a46f8ba30341249d091887c7588fce0ecd62b624" - integrity sha512-9ILmEboRKqHdCjVS/uYR8wHXJrC+8n8zEdtDu6mwbMoGG5G2iGWUbL0coQrFhkXXWetCq8M1KqEnBATTW9r0ng== +"@abp/ng.feature-management@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-3.2.0.tgz#0ebe620f84b206ea87d876b791359b9d97e46c92" + integrity sha512-Up7BuPmp24/zmwllHAe6AqnbgwtiV2YnMQApsEnh2Mv+d8LfvGQEeqSILIYebovHod6rkEvIWrpXQBAwOF8O6Q== dependencies: - "@abp/ng.theme.shared" "~3.2.0-rc.2" + "@abp/ng.theme.shared" "~3.2.0" tslib "^2.0.0" -"@abp/ng.identity@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-3.2.0-rc.2.tgz#075a119bb585753231195ba1a71a3484a8e157fa" - integrity sha512-RivOj97jGbJgS9dKA3HWfm3VOHPQZan+l33B6F6lR9W5z7PX454h7a/dEtVcBa1B4tsyELP48IUv6hNx7iw1KA== +"@abp/ng.identity@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-3.2.0.tgz#3ab2e8d1813c6ddbceb4e7edb1de5fe28d4b1e39" + integrity sha512-7dP6Hbkr6lML1R2hjGxzZI65cjTvKPdOR2/OCYw2UxoCshQLqj0aiMxzzul+sMX2EFQCb5dLDuSJouK0CveyJg== dependencies: - "@abp/ng.permission-management" "~3.2.0-rc.2" - "@abp/ng.theme.shared" "~3.2.0-rc.2" + "@abp/ng.permission-management" "~3.2.0" + "@abp/ng.theme.shared" "~3.2.0" tslib "^2.0.0" -"@abp/ng.permission-management@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-3.2.0-rc.2.tgz#cf0f74759a930b778b104d2e85dd9345b08a969d" - integrity sha512-7HKq0JcWcqSyOOfrP+ud3tTjrn+3STEOgjfAcTF6Xg0l6DxXlwVnEa653qE51GH0JfWp9iaOtXChmt6e0VMHqg== +"@abp/ng.permission-management@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-3.2.0.tgz#43f7b3c2dca3c066c4ade8d137e3705a0480a55e" + integrity sha512-iPbAhYx8arAwMQ88hxTGSWFwv1UXxxrxSA0IefjCUAX2sdvIC/2WVcfo7UcS5DxM4TIu/+9TKsWC4gRR/8bHsQ== dependencies: - "@abp/ng.theme.shared" "~3.2.0-rc.2" + "@abp/ng.theme.shared" "~3.2.0" tslib "^2.0.0" -"@abp/ng.schematics@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-3.2.0-rc.2.tgz#22f4a7d00abbde7b03d4bca179ca235efed3e6d1" - integrity sha512-QewJMq7AYOQomvtXT0O/v+KQ+AxF8Crfx6uKvInCQ3o/ne+fcwrWITgUTdjn78Eb+hRj9kBLux0PHJF1IOGLZQ== +"@abp/ng.schematics@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-3.2.0.tgz#de45bddf14639b5cc2f39cd34f3b8250620aadaf" + integrity sha512-TV6jElMI4W7P/CmLkbhjzR9BsGdSx6C1SC4rlVvbKfwrpcTQ4jv4YJNOXHyk36EnwNMRu+TkUj+45MlOfEAQkw== 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.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-3.2.0-rc.2.tgz#f4586190a57bb06bc675c30484adea7b598f3663" - integrity sha512-lRkBeh7evzbeg1aBX2b1X0rwzjfnbrNllIk3gHadnbeRKts+cy7njENzSfoMjBAxUUh5I1Pd5vwK6syz1nJ+0Q== +"@abp/ng.setting-management@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-3.2.0.tgz#f0e4cb4deba76cbe4b49f54977bf260b6f41f4d7" + integrity sha512-cEuVjljCE9N+lLZP3ZOhhnShvRCck0yeAXELzvG/GTsAlJkw99jWUQxG+UI7Dh7lBVhFg9oF4qyr0zzM8Wf/PA== dependencies: - "@abp/ng.theme.shared" "~3.2.0-rc.2" + "@abp/ng.theme.shared" "~3.2.0" tslib "^2.0.0" -"@abp/ng.tenant-management@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-3.2.0-rc.2.tgz#df82ff2c28680ea001bc7e4e9b84433c8d87f082" - integrity sha512-Rwh0UVzpk2ItGwjv/ftJ9U6ZEAeAeDpl5jr4xzFm4sa7H5hWVKFCOxjL1DZOrcI9dk6b6DUifsIvqHPy0KxURA== +"@abp/ng.tenant-management@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-3.2.0.tgz#7402347ab45e11437838d4a1d5b4f52f908630f7" + integrity sha512-J0ma1fE/q/jDSoZpgV3eCZtd6NA9HrNHXkCi18QprfTAOCTqLipOvit60ed5rrPcZVbxdv8mnVTRtAaP/FnWLA== dependencies: - "@abp/ng.feature-management" "~3.2.0-rc.2" - "@abp/ng.theme.shared" "~3.2.0-rc.2" + "@abp/ng.feature-management" "~3.2.0" + "@abp/ng.theme.shared" "~3.2.0" tslib "^2.0.0" -"@abp/ng.theme.basic@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-3.2.0-rc.2.tgz#909e6d5a8da4acd04517eb974a631341195d47ee" - integrity sha512-DEebOMR7DSLF3iIVBBwb08EbZwn1jVc6lAvJIl4yttLbYjxmYc3ra5TXNSYJit0jeknmnibCo2rNDG6sFPeidg== +"@abp/ng.theme.basic@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-3.2.0.tgz#9a1a80050e37a2d029b0ec0b070f28c7afe06484" + integrity sha512-1z277I8mamzeSzYvJIwgwKXIPreH9CqQq0l+2tGu98HaivOxpkpWeWkviT3Xu6wGHILaTXtwBQMoae2AGEDL7A== dependencies: - "@abp/ng.theme.shared" "~3.2.0-rc.2" + "@abp/ng.theme.shared" "~3.2.0" tslib "^2.0.0" -"@abp/ng.theme.shared@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-3.2.0-rc.2.tgz#4f8b1a44488be59888d6d458d356d436198404e5" - integrity sha512-WtYYo9dO+LGCUjkiZpgTN44oOA6r1O5Y+6XDxqoBGhzvhlN/Uz+t87cLkurhShRnqXAAd15DLW4Q/+y/F81tGQ== +"@abp/ng.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-3.2.0.tgz#0587daa9b88e274656ed7288c3280a80d90d17e0" + integrity sha512-DazYqnJGy5dfDZHQY0kfZF5hANHX+xSc25EFAkteEO4e9Y0XAM5Z3YPn/pdIkxmfBoXAeTiMOjkVeuhyHlgDew== dependencies: - "@abp/ng.core" "~3.2.0-rc.2" + "@abp/ng.core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.14.0" "@ng-bootstrap/ng-bootstrap" "^7.0.0" "@ngx-validate/core" "^0.0.11" @@ -102,7 +102,14 @@ chart.js "^2.9.3" tslib "^2.0.0" -"@abp/utils@^3.2.0-rc.1", "@abp/utils@^3.2.0-rc.2": +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== + dependencies: + just-compare "^1.3.0" + +"@abp/utils@^3.2.0-rc.2": version "3.2.0-rc.2" resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA==