diff --git a/Directory.Build.props b/Directory.Build.props index dea0a6c6f7..d888f2a60a 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -2,16 +2,16 @@ - 5.0.0 + 5.0.* - 16.6.1 + 16.8.3 4.2.2 - 3.0.2 + 4.0.1 2.4.1 @@ -20,7 +20,7 @@ 2.4.1 - 2.4.2 + 2.4.3 2.2.14 diff --git a/common.props b/common.props index 1528abbcc6..dee2c22cdc 100644 --- a/common.props +++ b/common.props @@ -9,8 +9,16 @@ git https://github.com/abpframework/abp/ true + + + true + snupkg + - + + all + runtime; build; native; contentfiles; analyzers + \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-04-27-Use-Azure-Active-Directory-Authentication-for-MVC-Razor-Page-Applications/POST.md b/docs/en/Community-Articles/2020-04-27-Use-Azure-Active-Directory-Authentication-for-MVC-Razor-Page-Applications/POST.md index c7b0258d55..417fa7da3e 100644 --- a/docs/en/Community-Articles/2020-04-27-Use-Azure-Active-Directory-Authentication-for-MVC-Razor-Page-Applications/POST.md +++ b/docs/en/Community-Articles/2020-04-27-Use-Azure-Active-Directory-Authentication-for-MVC-Razor-Page-Applications/POST.md @@ -6,9 +6,9 @@ Adding Azure Active Directory is pretty straightforward in ABP framework. Couple Two different **alternative approaches** for AzureAD integration will be demonstrated for better coverage. -1. **AddAzureAD**: This approach uses Microsoft [AzureAD UI nuget package](https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.AzureAD.UI/) which is very popular when users search the web about how to integrate AzureAD to their web application. - +1. ~~**AddAzureAD**: This approach uses Microsoft [AzureAD UI nuget package](https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.AzureAD.UI/) which is very popular when users search the web about how to integrate AzureAD to their web application.~~ Now marked **Obsolete** (see https://github.com/aspnet/Announcements/issues/439). 2. **AddOpenIdConnect**: This approach uses default [OpenIdConnect](https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.OpenIdConnect/) which can be used for not only AzureAD but for all OpenId connections. +3. **AddMicrosoftIdentityWebAppAuthentication:** This approach uses newly introduced [Microsoft.Identity.Web nuget package](https://www.nuget.org/packages/Microsoft.Identity.Web/) to replace AddAzureAD. > There is **no difference** in functionality between these approaches. AddAzureAD is an abstracted way of OpenIdConnection ([source](https://github.com/dotnet/aspnetcore/blob/c56aa320c32ee5429d60647782c91d53ac765865/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADAuthenticationBuilderExtensions.cs#L122)) with predefined cookie settings. > @@ -134,13 +134,50 @@ private void ConfigureAuthentication(ServiceConfigurationContext context, IConfi And that's it, integration is completed. Keep on mind that you can connect any other external authentication providers. +## 3. AddMicrosoftIdentityWebAppAuthentication + +With .Net 5.0, AzureAd is marked [obsolute](https://github.com/dotnet/aspnetcore/issues/25807) and will not be supported in the near future. However its expanded functionality is available in [microsoft-identity-web](https://github.com/AzureAD/microsoft-identity-web/wiki) packages. + +Add (or replace with) the new nuget package Microsoft.Identity.Web nuget package](https://www.nuget.org/packages/Microsoft.Identity.Web/). + +In your **.Web** project; you update the `ConfigureAuthentication` method located in your **ApplicationWebModule** with the following while having the AzureAd appsettings section as defined before: + +````csharp +private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration) + { + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Add("sub", ClaimTypes.NameIdentifier); + context.Services.AddAuthentication() + .AddIdentityServerAuthentication(options => + { + options.Authority = configuration["AuthServer:Authority"]; + options.RequireHttpsMetadata = false; + options.ApiName = "Acme.BookStore"; + }); + + context.Services.AddMicrosoftIdentityWebAppAuthentication( + configuration: configuration, + configSectionName: "AzureAd", + openIdConnectScheme:"AzureAD", + cookieScheme:null); + } +```` + +And that's all to add new Microsoft-Identity-Web. + +> **Don't forget to:** +> +> * Pass **cookieScheme** parameter as **null** or your [*GetExternalLoginInfoAsync* method will always return null](https://github.com/AzureAD/microsoft-identity-web/issues/133#). + +Keep in mind that [Microsoft-Identity-Web](https://github.com/AzureAD/microsoft-identity-web) is relatively new and keeps getting new enhancements, features and documentation. + ## The Source Code You can find the source code of the completed example [here](https://github.com/abpframework/abp-samples/tree/master/Authentication-Customization). # FAQ -* Help! `GetExternalLoginInfoAsync` returns `null`! +* Help! `GetExternalLoginInfoAsync` returns `null`! (Using obsolute **AddAzureAD**) * There can be 2 reasons for this; @@ -158,6 +195,11 @@ You can find the source code of the completed example [here](https://github.com/ ```` +* Help! `GetExternalLoginInfoAsync` returns `null`! (Using **AddMicrosoftIdentityWebAppAuthentication**) + + + * Pass cookieScheme parameter as **null**. (See [this issue](https://github.com/AzureAD/microsoft-identity-web/issues/133)). + * Help! I am getting ***System.ArgumentNullException: Value cannot be null. (Parameter 'userName')*** error! diff --git a/docs/en/Community-Articles/2020-09-16-How-to-Setup-Azure-Active-Directory-and-Integrate-Abp-Angular-Application/POST.md b/docs/en/Community-Articles/2020-09-16-How-to-Setup-Azure-Active-Directory-and-Integrate-Abp-Angular-Application/POST.md index b286bb509d..c7f4f40917 100644 --- a/docs/en/Community-Articles/2020-09-16-How-to-Setup-Azure-Active-Directory-and-Integrate-Abp-Angular-Application/POST.md +++ b/docs/en/Community-Articles/2020-09-16-How-to-Setup-Azure-Active-Directory-and-Integrate-Abp-Angular-Application/POST.md @@ -1,22 +1,22 @@ -# How to Setup Azure Active Directory and Integrate Abp Angular Application +# How to Setup Azure Active Directory and Integrate ABP Angular Application -This guide demonstrates how to register an application to Azure Active Directory and integrate AzureAD to an ABP angular application that enables users to sign in using OAuth 2.0 with credentials from **Azure Active Directory**. +This guide demonstrates how to register an application to Azure Active Directory and integrate AzureAD to an ABP Angular application that enables users to sign in using OAuth 2.0 with credentials from **Azure Active Directory**. ## Authentication Flow -Abp angular applications use **Authentication Code with PKCE** (specs [here](https://tools.ietf.org/html/rfc7636)) which is the most suitable flow for spa applications by the time this article is written since implicit flow is deprecated. +ABP Angular application uses **Authentication Code with PKCE** (specs [here](https://tools.ietf.org/html/rfc7636)) which is the most suitable flow for SPA applications by the time this article is written since implicit flow is deprecated. The most common question is; -> Where to put OpenId connection code in angular project? +> Where to put OpenId connection code in the Angular project? -The answer is, **you don't**. Abp angular application is integrated with backend code (HttpApi.Host project) where it loads the configurations, **permissions** etc. For none-tiered angular applications, **HttpApi.Host** project also has IdentityServer4 embedded; also serving as **Authorization Server**. Angular application authentication flow is shown below. +The answer is, **you don't**. ABP Angular application is integrated with the backend (HttpApi.Host project) where it loads the configurations, **permissions** etc. For none-tiered angular applications, **HttpApi.Host** project also has IdentityServer4 embedded; also serving as **Authorization Server**. Angular application authentication flow is shown below. auth-diagram > What if I want Azure AD as my authorization server and not IdentityServer? -This means your application will be using AzureAD user store for authentication. By registering both angular app and HttpApi to AzureAD, authentication might work but **authorization won't**. Users need to be registered to Abp identity system for auditing, permissions etc. So the flow should be 3rd party registration. +This means your application will be using AzureAD user store for authentication. By registering both Angular app and HttpApi to AzureAD, authentication might work but **authorization won't**. Users need to be registered to ABP identity system for auditing, permissions etc. So the flow should be 3rd party registration. ## Setting up OpenId Connection diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/POST.md b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/POST.md new file mode 100644 index 0000000000..4f2f5556eb --- /dev/null +++ b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/POST.md @@ -0,0 +1,110 @@ +## Using DevExpress Blazor UI Components With the ABP Framework + +Hi, in this step by step article, I will show you how to integrate [DevExpress](https://demos.devexpress.com/blazor/) blazor UI components into ABP Framework-based applications. + +![both-example-result](both-example-result.png) + +*(A screenshot from the example application developed in this article)* + +## Create the Project + +> ABP Framework offers startup templates to get into business faster. + +In this article, I will create a new startup template with EF Core as a database provider and Blazor for UI framework. But if you already have a project with Blazor UI, you don't need to create a new startup template, you can directly implement the following steps to your existing project. + +> If you already have a project with the Blazor UI, you can skip this section. + +* Before starting to development, we will create a solution named `DevExpressSample` (or whatever you want). We will create a new startup template with EF Core as a database provider and Blazor for UI framework by using [ABP CLI](https://docs.abp.io/en/abp/latest/CLI): + +````bash +abp new DevExpressSample -u blazor +```` + +![initial-project](initial-project.png) + +* Our project boilerplate will be ready after the download is finished. Then, we can open the solution in the Visual Studio (or any other IDE) and run the `DevExpressSample.DbMigrator` to create the database and seed initial data (which creates the admin user, admin role, permissions etc.) + +* After database and initial data created, +* Run the `DevExpressSample.HttpApi.Host` to see our server side working and +* Run the `DevExpressSample.Blazor` to see our UI working properly. + +> _Default login credentials for admin: username is **admin** and password is **1q2w3E\***_ + +## Install DevExpress + +You can follow [this documentation](https://docs.devexpress.com/Blazor/401986/getting-started/install-components-and-create-an-application/without-devexpress-installer/microsoft-templates) to install DevExpress packages into your computer. + +> Don't forget to add _"DevExpress NuGet Feed"_ to your **Nuget Package Sources**. + +### Adding DevExpress NuGet Packages + +Add the `DevExpress.Blazor` NuGet package to the `DevExpressSample.Blazor` project. + +``` +Install-Package DevExpress.Blazor +``` + +### Register DevExpress Resources + +1. Add the following line to the HEAD section of the `wwwroot/index.html` file within the `DevExpressSample.Blazor` project: + + ```Razor + + + + + ``` + +2. In the `DevExpressSampleBlazorModule` class, call the `AddDevExpressBlazor()` method from your project's `ConfigureServices()` method: + + ```csharp + public override void ConfigureServices(ServiceConfigurationContext context) + { + var environment = context.Services.GetSingletonInstance(); + var builder = context.Services.GetSingletonInstance(); + // ... + builder.Services.AddDevExpressBlazor(); + } + ``` + +3. Register the **DevExpressSample.Blazor** namespace in the `_Imports.razor` file: + + ```Razor + @using DevExpress.Blazor + ``` + +### Result + +The installation step was done. You can use any DevExpress Blazor UI component in your application: + +Example: A Scheduler: + +![sample-appointment](sample-appointment.gif) + +This example has been created by following [this documentation](https://demos.devexpress.com/blazor/SchedulerViewTypes). + +## The Sample Application + +We have created a sample application with [Data Grid](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxDataGrid-1) example. + +### The Source Code + +You can download the source code from [here](https://github.com/abpframework/abp-samples/tree/master/DevExpress-Blazor). + +The related files for this example are marked in the following screenshots. + +![data-grid-app-contract](data-grid-app-contract.png) + +![data-grid-application](data-grid-application.png) + +![data-grid-web](data-grid-blazor.png) + +### Additional Notes + +#### Data Storage + +I've used an in-memory list to store data for this example, instead of a real database. Because it is not related to DevExpress usage. There is a `SampleDataService.cs` file in `Data` folder at `DevExpressSample.Application.Contracts` project. All the data is stored here. + +## Conclusion + +In this article, I've explained how to use [DevExpress](https://www.devexpress.com/blazor/) components in your application. ABP Framework is designed so that it can work with any UI library/framework. diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/both-example-result.png b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/both-example-result.png new file mode 100644 index 0000000000..cc437ed6e7 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/both-example-result.png differ diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/cover-image.png b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/cover-image.png new file mode 100644 index 0000000000..2dc0aed011 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/cover-image.png differ diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/data-grid-app-contract.png b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/data-grid-app-contract.png new file mode 100644 index 0000000000..536251b7b9 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/data-grid-app-contract.png differ diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/data-grid-application.png b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/data-grid-application.png new file mode 100644 index 0000000000..a169b9f9f7 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/data-grid-application.png differ diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/data-grid-blazor.png b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/data-grid-blazor.png new file mode 100644 index 0000000000..af1857a4e0 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/data-grid-blazor.png differ diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/initial-project.png b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/initial-project.png new file mode 100644 index 0000000000..c2a2af265e Binary files /dev/null and b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/initial-project.png differ diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/sample-appointment.gif b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/sample-appointment.gif new file mode 100644 index 0000000000..cde15e8f74 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-DevExpress-Blazor-Component/sample-appointment.gif differ diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/POST.md b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/POST.md new file mode 100644 index 0000000000..4bdebb6234 --- /dev/null +++ b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/POST.md @@ -0,0 +1,534 @@ +# How to Integrate the Telerik Blazor Components to the ABP Blazor UI? + +## Introduction + +Hi, in this step by step article, we will see how we can integrate the Telerik Blazor Components to our Blazor UI. + +## Creating the Solution + +> ABP Framework offers startup templates to get into business faster. + +In this article, I will create a new startup template with EF Core as a database provider and Blazor for UI framework. But if you already have a project with Blazor UI, you don't need to create a new startup template, you can directly implement the following steps to your existing project. + +> If you already have a project with the Blazor UI, you can skip this section. + +* Before starting to development, we will create a solution named `TelerikComponents` (or whatever you want). We will create a new startup template with EF Core as a database provider and Blazor for UI framework by using [ABP CLI](https://docs.abp.io/en/abp/latest/CLI): + +```bash +abp new TelerikComponents --ui blazor --database-provider ef +``` + +* Our project boilerplate will be ready after the download is finished. Then, we can open the solution in the Visual Studio (or any other IDE) and run the `TelerikComponents.DbMigrator` to create the database and seed initial data (which creates the admin user, admin role, permissions, etc.) + +* After the database and initial data created, +* Run the `TelerikComponents.HttpApi.Host` to see our server-side working and +* Run the `TelerikComponents.Blazor` to see our UI working. + +> _Default login credentials for admin: username is **admin** and password is **1q2w3E\***_ + +## Starting the Development + +### Pre-requisite + +* First thing we need to do is downloading the [Progress Control Panel](https://www.telerik.com/download-trial-file/v2/control-panel?_ga=2.212029332.1667119438.1607582144-1944255175.1605161949) to get Telerik Blazor Components on our development machine. + +* If you will use the Telerik Blazor Components for the first time or you don't have an active license you can click [here](https://www.telerik.com/login/v2/download-b?ReturnUrl=https%3a%2f%2fwww.telerik.com%2fdownload-trial-file%2fv2-b%2fui-for-blazor%3f_ga%3d2.212029332.1667119438.1607582144-1944255175.1605161949#register) to download free trial. + +> You can find the more installation details from [here](https://docs.telerik.com/blazor-ui/getting-started/client-blazor?_ga=2.55603115.1667119438.1607582144-1944255175.1605161949&_gac=1.261851647.1607669357.CjwKCAiAq8f-BRBtEiwAGr3DgUDhBT25rs7hU0EQ8K-AfeUVxs3hSoIuIAuBOZ17CNPI4ZEArORPExoCyd4QAvD_BwE#step-0---download-the-components). + +>**Notes:** To download Telerik Blazor packages via NuGet, we need to setup Telerik NuGet package source. We can state it in the installer as below. In this way, we can download the required Telerik Blazor packages via NuGet. + +![setup-nuget-package-source](./automated-nuget-feed-setup.png) + +### Step 1 (Configurations) + +* We need to install the `Telerik.UI.for.Blazor` Nuget package to our Blazor project (`*.Blazor`). We need to choose package source to **telerik.com** for Visual Studio to see this package. + +* If you use trial version of Telerik, you can download **Telerik.UI.for.Blazor.Trial** package via NuGet. + +* After the installation finished, we need to open **index.html** (it's under *wwwroot* folder) to add css and js files in our application. + +* Add the following lines just before the closing head tag (**/head**). + +```html + ... + + + + +``` + +* After that, we need to add the Telerik Blazor Components to our application's service collection. So just open the `TelerikComponentsBlazorModule` and update the `ConfigureServices` method with the following content. + +```csharp +public override void ConfigureServices(ServiceConfigurationContext context) +{ + var environment = context.Services.GetSingletonInstance(); + var builder = context.Services.GetSingletonInstance(); + + ConfigureAuthentication(builder); + ConfigureHttpClient(context, environment); + ConfigureBlazorise(context); + ConfigureRouter(context); + ConfigureUI(builder); + ConfigureMenu(context); + ConfigureAutoMapper(context); + + //add this line to be able to use the components + builder.Services.AddTelerikBlazor(); +} +``` + +* After the service added we will continue by opening **_Imports.razor** file and add the global using statements as below. This will bring our Telerik components into scope throughout the application. + +![telerik-blazor-component-1](./telerik-blazor-component-1.jpg) + +* After all of these steps, the Telerik UI Components are ready to be used anywhere in our application. We can use the Telerik Blazor Components by wrapping our components or pages between `` and `` tags. + +### Step 2 - Checking Configurations + +* We should check, have we done the right configurations or not. For that, we can open the **Index.razor** file and we can update the component with the following content. + +```razor +@page "/" +@using Volo.Abp.MultiTenancy +@inherits TelerikComponentsComponentBase +@inject ICurrentTenant CurrentTenant +@inject AuthenticationStateProvider AuthenticationStateProvider +@using System.Timers + +@implements IDisposable + + +
+
Telerik Progress Bar Component
+ +
+
+ +@code { + private const int TimerInterval = 1000; + private const int TotalTime = 10 * TimerInterval; + private double ProgressValue = 0; + private int ProgressStep = 100 / (TotalTime / TimerInterval); + private Timer Timer { get; set; } = new Timer(); + + private void Dispose() + { + StopProgress(); + Timer?.Close(); + } + + protected override void OnAfterRender(bool firstRender) + { + if (Timer.Enabled == false) + { + Timer.Interval = TimerInterval; + Timer.Elapsed -= OnTimerElapsed; + Timer.Elapsed += OnTimerElapsed; + Timer.AutoReset = true; + Timer.Start(); + } + } + + private void OnTimerElapsed(Object source, ElapsedEventArgs e) + { + if (ProgressValue < 100) + { + UpdateProgress(); + } + else + { + StopProgress(); + } + } + + private void UpdateProgress() + { + ProgressValue += ProgressStep; + + InvokeAsync(StateHasChanged); + } + + private void StopProgress() + { + Timer?.Stop(); + } +} + + +``` + +* In here, we've just added the `TelerikProgressBar` component to check the integration configured properly. + +* When we run `*.HttpApi.Host` and `*.Blazor` projects, we should see that the `TelerikProgressBar` component works and has similar view as the below gif. + +![telerik-progress-bar](./telerik-progress-bar.gif) + +* If you haven't seen this component like above, you should check the above configurations and be assure every step done as stated. + +### Step 3 - Using The Telerik Blazor Components (Sample Application) + +* Let's create a sample application for use other Telerik Blazor Components (like DataGrid). + +* We will use [jsonplaceholder](https://jsonplaceholder.typicode.com/) as **mock data** to the listing, adding, updating and deleting posts. + +* Firstly, we can create a folder named `Posts` and inside this folder, we can create the classes which are highlighted in the following screenshot. + +![sample-application](./sample-application.jpg) + +* After classes created we can fill the classes with the following contents. + +**Post.cs** +```csharp +using System; + +namespace TelerikComponents.Posts +{ + [Serializable] + public class Post + { + public int Id { get; set; } + + public string Title { get; set; } + + public string Body { get; set; } + + public int UserId { get; set; } + } +} +``` + +**Comment.cs** +```csharp +using System; + +namespace TelerikComponents.Posts +{ + [Serializable] + public class Comment + { + public int PostId { get; set; } + + public int Id { get; set; } + + public string Name { get; set; } + + public string Email { get; set; } + + public string Body { get; set; } + } +} +``` + +**IPostAppService.cs** +```csharp +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; + +namespace TelerikComponents.Posts +{ + public interface IPostAppService : IApplicationService + { + Task> GetPostsAsync(); + + Task AddPostAsync(Post post); + + Task UpdatePostAsync(int postId, Post post); + + Task DeletePostAsync(int postId); + + Task GetFirstCommentByPostIdAsync(int postId); + } +} +``` +* In here, we basically created two class (which are **Post** and **Comment**). These classes are used to hold data returned as JSON. + +* After that, we need to implement `IPostAppService`. For achieve this, we can create a folder named `Posts` in **\*.Application** layer and inside this folder we can create a class named `PostAppService` with the following content. + +**PostAppService.cs** +```csharp +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; + +namespace TelerikComponents.Posts +{ + public class PostAppService : ApplicationService, IPostAppService + { + private JsonSerializerOptions _options = new JsonSerializerOptions + { + IncludeFields = true, + PropertyNameCaseInsensitive = true + }; + + public async Task> GetPostsAsync() + { + var url = "https://jsonplaceholder.typicode.com/posts"; + List _posts = new List(); + + using (var client = new HttpClient()) + { + var result = await client.GetAsync(url); + + if (result.IsSuccessStatusCode) + { + var content = await result.Content.ReadAsStringAsync(); + var deserializedPosts = JsonSerializer.Deserialize>(content, _options); + + _posts = deserializedPosts; + } + } + + return _posts; + } + + public async Task AddPostAsync(Post post) + { + var url = "https://jsonplaceholder.typicode.com/posts"; + Post addedPost = null; + + using (var client = new HttpClient()) + { + var serializePost = JsonSerializer.Serialize(post); + var content = new StringContent(serializePost, Encoding.UTF8, "application/json"); + var result = await client.PostAsync(url, content); + + if (result.IsSuccessStatusCode) + { + var response = await result.Content.ReadAsStringAsync(); + addedPost = JsonSerializer.Deserialize(response); + } + } + + return addedPost; + } + + public async Task UpdatePostAsync(int postId, Post post) + { + var url = $"https://jsonplaceholder.typicode.com/posts/{postId}"; + Post updatedPost = null; + + using (var client = new HttpClient()) + { + var serializePost = JsonSerializer.Serialize(post); + var content = new StringContent(serializePost, Encoding.UTF8, "application/json"); + var result = await client.PutAsync(url, content); + + if (result.IsSuccessStatusCode) + { + var response = await result.Content.ReadAsStringAsync(); + updatedPost = JsonSerializer.Deserialize(response); + } + } + + return updatedPost; + } + + public async Task DeletePostAsync(int postId) + { + var url = $"https://jsonplaceholder.typicode.com/posts/{postId}"; + + using (var client = new HttpClient()) + { + await client.DeleteAsync(url); + } + } + + public async Task GetFirstCommentByPostIdAsync(int postId) + { + var url = $"https://jsonplaceholder.typicode.com/posts/{postId}/comments"; + + List _comments = new List(); + + using (var client = new HttpClient()) + { + var result = await client.GetAsync(url); + + if (result.IsSuccessStatusCode) + { + var content = await result.Content.ReadAsStringAsync(); + var deserializedPosts = JsonSerializer.Deserialize>(content, _options); + + _comments = deserializedPosts; + } + } + + return _comments[0]; + } + } +} +``` + +* In here, we've implemented `IPostAppService` methods by using [jsonplaceholder](https://jsonplaceholder.typicode.co) API. These endpoints provide us basic crud functionallity. + +* After the implemenation, we can start to create the user interface. + +#### Blazor UI + +* We can create **/Posts** page for listing, updating, deleting and creating our posts. So, create a razor page named `Posts.razor` under **Pages** folder in `*.Blazor` project. + +**Posts.razor** +```razor +@page "/Posts" +@using TelerikComponents.Posts +@using IconName = Telerik.Blazor.IconName +@inject IPostAppService PostAppService + +

Posts

+ + + + + + + + Update + Edit + Delete + Display Comment + Cancel + + + + Add Post + + + + @* Modal *@ + + + Comment + + + + + +

Email: @Comment.Email

+

+ Message: @Comment.Body +

+
+
+
+``` + +**Post.razor.cs** +```csharp +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Telerik.Blazor.Components; +using TelerikComponents.Posts; + +namespace TelerikComponents.Blazor.Pages +{ + public partial class Posts + { + private List GridData { get; set; } + private TelerikGrid Grid { get; set; } + private bool ModalVisible { get; set; } = false; + private Comment Comment { get; set; } + + public Posts() + { + Comment = new Comment(); + } + + protected override async Task OnInitializedAsync() + { + await LoadDataAsync(); + } + + private async Task LoadDataAsync() + { + GridData = await PostAppService.GetPostsAsync(); + } + + private async Task UpdateHandler(GridCommandEventArgs args) + { + var post = (Post) args.Item; + + await PostAppService.UpdatePostAsync(post.Id, post); + + var matchingPost = GridData.FirstOrDefault(x => x.Id == post.Id); + + if (matchingPost != null) + { + matchingPost.Body = post.Body; + matchingPost.Title = post.Title; + } + } + + private async Task DeleteHandler(GridCommandEventArgs args) + { + var post = (Post) args.Item; + + GridData.Remove(post); + } + + private async Task CreateHandler(GridCommandEventArgs args) + { + var post = (Post) args.Item; + + var addedPost = await PostAppService.AddPostAsync(post); + + GridData.Insert(0, addedPost); + } + + private async Task PostDetailAsync(GridCommandEventArgs args) + { + var post = (Post) args.Item; + + Comment = await PostAppService.GetFirstCommentByPostIdAsync(post.Id); + + ModalVisible = true; + } + } +} +``` + +* In here, we've used `TelerikGrid` component. + +* The `Telerik Grid` is a powerful component, which allows you to visualize and edit data via its table representation. It provides a variety of options about how to present and perform operations over the underlying data, such as paging, sorting, filtering and editing. + +* The Blazor UI Grid allows flexible customization of its items exposing rows, columns and edit templates for this purpose. + +### Final Result + +* After all of these steps, we can finally run our application. + * Run `*.HttpApi.Host` project for use the required endpoints, + * Run `*.Blazor` project for see the Blazor UI. + +* When we navigate to `Posts` route, we should see the following screenshot in this page. + +![final-result](./final-result.jpg) + +## Conclusion + +In this article, I've tried to explain how we can integrate [Telerik Blazor Component](https://www.telerik.com/blazor-ui) to our Blazor UI. ABP Framework designed as modular, so that it can work with any UI library/framework. \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/automated-nuget-feed-setup.png b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/automated-nuget-feed-setup.png new file mode 100644 index 0000000000..236135b30f Binary files /dev/null and b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/automated-nuget-feed-setup.png differ diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/final-result.jpg b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/final-result.jpg new file mode 100644 index 0000000000..244711a962 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/final-result.jpg differ diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/sample-application.jpg b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/sample-application.jpg new file mode 100644 index 0000000000..27e9dbe9fc Binary files /dev/null and b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/sample-application.jpg differ diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/telerik-blazor-component-1.jpg b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/telerik-blazor-component-1.jpg new file mode 100644 index 0000000000..7a204d97f3 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/telerik-blazor-component-1.jpg differ diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/telerik-progress-bar.gif b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/telerik-progress-bar.gif new file mode 100644 index 0000000000..e1eff85986 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/telerik-progress-bar.gif differ diff --git a/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/POST.md b/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/POST.md new file mode 100644 index 0000000000..7b1ae846af --- /dev/null +++ b/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/POST.md @@ -0,0 +1,1581 @@ +# Using Angular Material Components With the ABP Framework + +## Introduction + +Angular Material library is a popular and well-known library in the community. We will implement Angular Material components with the ABP framework in this article. We will follow the Book Store tutorial which documented in [ABP Documentation](https://docs.abp.io/en/abp/latest/Tutorials/Part-1) + +> This article doesn't include server-side parts except the **Author With Books Form** +> section. Please follow the tutorial for server-side parts. + +## Installation + +Create a project with ABP CLI. Run following command in terminal: + +```bash + abp new Acme.BookStore.AngularMaterial -u angular -o AcmeBookStoreAngularMaterial +``` + +Add Angular Material package to the created project. Run this command in the terminal at the `angular` directory: + +``` + ng add @angular/material +``` + +## Book CRUD Actions + +> Please complete the following steps before starting this section: +> +> - Follow the server-side steps at [Web Application Development Tutorial - Part 1: Creating the Server Side](https://docs.abp.io/en/abp/latest/Tutorials/Part-1) with remembering our application name is **Acme.BookStore.AngularMaterial** +> - Follow the localization part of [Web Application Development Tutorial - Part 2: The Book List Page](https://docs.abp.io/en/abp/latest/Tutorials/Part-2?UI=NG&DB=EF#localization) +> - Run following command in terminal at `angular` directory  +> `abp generate-proxy` + +In this section, we will create the book list page, book create and update dialog using the Angular Material Modules. + +Add material modules to `SharedModule`'s imports and exports arrays which placed in `angular/src/app/shared/shared.module.ts`: + +```typescript +import { MatCardModule } from "@angular/material/card"; +import { MatTableModule } from "@angular/material/table"; +import { MatPaginatorModule } from "@angular/material/paginator"; +import { MatSortModule } from "@angular/material/sort"; +import { MatButtonModule } from "@angular/material/button"; + +@NgModule({ + imports: [ + CoreModule, + ThemeSharedModule, + ThemeBasicModule, + NgbDropdownModule, + NgxValidateCoreModule, + + MatCardModule, // added this line + MatTableModule, // added this line + MatPaginatorModule, // added this line + MatSortModule, // added this line + MatButtonModule, // added this line + ], + exports: [ + CoreModule, + ThemeSharedModule, + ThemeBasicModule, + NgbDropdownModule, + NgxValidateCoreModule, + + MatCardModule, // added this line + MatTableModule, // added this line + MatPaginatorModule, // added this line + MatSortModule, // added this line + MatButtonModule, // added this line + ], +}) +export class SharedModule {} +``` + +Run the following command in the terminal at the `angular` directory to create the book module: + +``` +yarn ng generate module book --module app --routing --route books +``` + +Remove `CommonModule` form and import `SharedModule` from imports array at `book.module.ts`: + +```typescript +import { NgModule } from "@angular/core"; +import { BookRoutingModule } from "./book-routing.module"; +import { BookComponent } from "./book.component"; +import { SharedModule } from "../shared/shared.module"; + +@NgModule({ + declarations: [BookComponent], + imports: [ + BookRoutingModule, + SharedModule, // this line added + ], +}) +export class BookModule {} +``` + +> We deleted the `CommonModule` because `CommonModule` in `CoreModule`'s exports array and `CoreModule` in `SharedModule`'s exports array. + +We will add routes by adding items to the return array of the `routesProvider` created when creating a project for adding navigation elements for books route. For more information, see the [`RoutesService` document](https://docs.abp.io/en/abp/latest/UI/Angular/Modifying-the-Menu#via-routesservice). + +Open the `src/app/route.provider.ts` file replace the `configureRoutes` function declaration as shown below: + +```typescript +import { eLayoutType, RoutesService } from "@abp/ng.core"; + +function configureRoutes(routes: RoutesService) { + return () => { + routes.add([ + { + path: "/", + name: "::Menu:Home", + iconClass: "fas fa-home", + order: 1, + layout: eLayoutType.application, + }, + { + path: "/book-store", + name: "::Menu:BookStore", + iconClass: "fas fa-book", + order: 2, + layout: eLayoutType.application, + }, + { + path: "/books", + name: "::Menu:Books", + parentName: "::Menu:BookStore", + layout: eLayoutType.application, + }, + ]); + }; +} +``` + +### Book List + +Replace `BookComponent` with the following code placed at `angular/src/book/book.component.ts` : + +```typescript +import { Component, OnInit } from "@angular/core"; +import { ListService, PagedResultDto } from "@abp/ng.core"; +import { BookDto, BookService } from "@proxy/books"; +import { PageEvent } from "@angular/material/paginator"; +import { Sort } from "@angular/material/sort"; + +@Component({ + selector: "app-book", + templateUrl: "./book.component.html", + styleUrls: ["./book.component.scss"], + providers: [ListService], +}) +export class BookComponent implements OnInit { + book = { items: [], totalCount: 0 } as PagedResultDto; + columns: string[] = ["name", "type", "price"]; + + constructor( + public readonly list: ListService, + private bookService: BookService + ) { + this.list.maxResultCount = 2; + } + + ngOnInit() { + const bookStreamCreator = (query) => this.bookService.getList(query); + + this.list.hookToQuery(bookStreamCreator).subscribe((response) => { + this.book = response; + }); + } + + changePage(pageEvent: PageEvent) { + this.list.page = pageEvent.pageIndex; + } + + changeSort(sort: Sort) { + this.list.sortKey = sort.active; + this.list.sortOrder = sort.direction; + } +} +``` + +- We imported and injected the generated `BookService`. +- We used the [ListService](https://docs.abp.io/en/abp/latest/UI/Angular/List-Service), a utility service of the ABP Framework which provides easy pagination, sorting and searching. +- We set `this.list.maxResultCount` to 2 in the constructor, it can be changed programmatically for example changing value with the dropdown in the template + +Replace the `book.component.html` in the `angular/src/book/` with following code: + +```html + + + + {{ '::Menu:Books' | abpLocalization }} + + + + + + + + + + + + + + + +
+ {{'::Name' | abpLocalization}} + {{element.name}} + {{'::Type' | abpLocalization}} + + {{ '::Enum:BookType:' + element.type | abpLocalization }} +
+ +
+
+``` + +- We used the [Material Card](https://material.angular.io/components/card/overview) component as a container +- We used [Material Table](https://material.angular.io/components/table/overview) and we made `name` and `type` columns sortable. `changeSort` method executes when sorting change. +- We used the [Material Pagination](https://material.angular.io/components/paginator/overview). `changePage` method executes when the page changed + +![Book List](book-list.gif) + +### Book Create + +In this section, we will create `BookDialogComponent` and we will display this component via [`Material Dialog`](https://material.angular.io/components/dialog/overview). We will use also [Material Input](https://material.angular.io/components/input/overview), [Material Select](https://material.angular.io/components/select/overview), [Material DatePicker](https://material.angular.io/components/datepicker/overview) modules in this component for book form. + +Create a new component named `BookDialogComponent` in the `angular/src/book/components` folder with the following command: + +``` +yarn ng generate component book/components/BookDialog --module book +``` + +> We used --module option for declaring in the component to a specific module. + +Add Material modules to `SharedModule`'s imports and exports arrays: + +```typescript +import { MatDialogModule } from "@angular/material/dialog"; +import { MatDatepickerModule } from "@angular/material/datepicker"; +import { MatFormFieldModule } from "@angular/material/form-field"; +import { MatInputModule } from "@angular/material/input"; +import { MatSelectModule } from "@angular/material/select"; +import { MatIconModule } from "@angular/material/icon"; +import { MatNativeDateModule } from '@angular/material/core'; + +@NgModule({ + imports: [ + // other imports + MatDialogModule, + MatDatepickerModule, + MatNativeDateModule, + MatFormFieldModule, + MatInputModule, + MatSelectModule, + MatIconModule, + ], + exports: [ + // other exports + MatDialogModule, + MatDatepickerModule, + MatFormFieldModule, + MatInputModule, + MatSelectModule, + MatIconModule, + ], +}) +export class SharedModule {} +``` + +Replace `book-dialog.component.ts` in `angular/src/book/` with following code: + +```typescript +import { Component, Inject, OnInit } from "@angular/core"; +import { + MAT_DIALOG_DATA, + MAT_DIALOG_DEFAULT_OPTIONS, +} from "@angular/material/dialog"; +import { FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { bookTypeOptions } from "@proxy/books"; + +@Component({ + selector: "app-book-dialog", + templateUrl: "./book-dialog.component.html", + styleUrls: ["./book-dialog.component.scss"], + providers: [ + { + provide: MAT_DIALOG_DEFAULT_OPTIONS, + useValue: { hasBackdrop: true, width: "50vw" }, + }, + ], +}) +export class BookDialogComponent implements OnInit { + form: FormGroup; + + bookTypes = bookTypeOptions; + + constructor(private fb: FormBuilder) {} + + ngOnInit(): void { + this.buildForm(); + } + + buildForm() { + this.form = this.fb.group({ + name: [null, Validators.required], + type: [null, Validators.required], + publishDate: [null, Validators.required], + price: [null, Validators.required], + }); + } + + getFormValue() { + const { publishDate } = this.form.value; + return { + ...this.form.value, + publishDate: `${publishDate?.getFullYear()}-${ + publishDate?.getMonth() + 1 + }-${publishDate?.getDate()}`, + }; + } +} +``` + +- We made a form which form controls' names are the same as BookDto +- We provided the `MAT_DIALOG_DEFAULT_OPTIONS` token to change Material Dialog options for this component. Provided options are only available for this component. + +Replace the `book-dialog.component.html` with following code: + +```html +

{{ '::NewBook' | abpLocalization }}

+ +
+ + {{'::Name' | abpLocalization}} * + + + + + {{'::Price' | abpLocalization}} * + + + + + {{'::Type' | abpLocalization}} * + + {{ '::Enum:BookType:' + type.value | abpLocalization }} + + + + + {{'::PublishDate' | abpLocalization}} * + + + + +
+
+ + + + +``` + +- We created a form with material form field components. +- We added 2 buttons for closing dialog and saving form in the `mat-dialog-actions` element. + +Create the `createBook` method and inject `MatDialog` in `book.component.ts`. Then use the material dialog's `open` method inside the `createBook` method: + +```typescript +import { BookDialogComponent } from "./components/book-dialog"; + +export class BookComponent { + constructor( + // ... + // inject dialog + public dialog: MatDialog + ) { + //... + } + //... other methods + createBook() { + const dialogRef = this.dialog.open(BookDialogComponent); + dialogRef.afterClosed().subscribe((result) => { + if (result) { + this.bookService.create(result).subscribe(() => { + this.list.get(); + }); + } + }); + } +} +``` + +- We displayed BookDialogComponent via Material Dialog. If the result has data after the dialog closes we made 2 HTTP requests for creating a book and refreshing the book list. + +Add create book button near the `mat-card-title` element in `book.component.html`: + +```html +{{ '::Menu:Books' | abpLocalization }} + +``` + +The final UI looks like below: + +![Book Create](./book-create.gif) + +### Edit Book + +We will use the same dialog component for editing the book. And we will add the `actions` column to the book list table. The actions column is a simple dropdown. We will use [Material Menu](https://material.angular.io/components/menu/overview) for creating dropdown + +Add `MatMenuModule` to `SharedModule` metadata's imports and exports array like this: + +```typescript +import { MatMenuModule } from "@angular/material/menu"; + +@NgModule({ + imports: [ + // other imports + MatMenuModule, + ], + exports: [ + // other exports + MatMenuModule, + ], +}) +export class SharedModule {} +``` + +Edit `columns` array and add `editBook` method in `book.component.ts` as shown below: + +```typescript +columns: string[] = ['actions', /* ... other columns*/]; + +editBook(id: string) { + this.bookService.get(id).subscribe((book) => { + const dialogRef = this.dialog.open(BookDialogComponent, { + data: book + }); + dialogRef.afterClosed().subscribe(result => { + if (result) { + this.bookService.update(id, result).subscribe(() => { + this.list.get(); + }); + } + }); + }); +} +``` + +- We passed the data to `BookDialogComponent` with passing the data property `open` method of the material dialog. +- We checked data after closing the dialog for sending HTTP requests as in the `Create Book` section. + +Add actions column before name column and add `mat-menu` end of file in the `book.component.html` as shown below: + +```html + + + + {{'::Actions' | abpLocalization}} + + + + + + + + + + + + + + +``` + +Get passed data which passed with material dialog's `open` method and use this data to create a form with initial values in `book-dialog.component.ts` as shown below: + +```typescript + constructor( + //inject data + @Inject(MAT_DIALOG_DATA) public data: BookDto, + ) { + } + + buildForm() { + this.form = this.fb.group({ + name: [this.data?.name /*modified*/, Validators.required], + type: [this.data?.type /*modified*/, Validators.required], + publishDate: [this.data?.publishDate ? new Date(this.data.publishDate) : null, /*modified*/, Validators.required], + price: [this.data?.price /*modified*/, Validators.required], + }); + } +``` + +Edit the dialog title if component has data, display **Edit Book** text otherwise **New Book** in `book-dialog.component.html`: + +```html +

+ {{ (data ? '::EditBook' : '::NewBook' )| abpLocalization }} +

+``` + +![Book Edit](book-edit.gif) + +### Delete Book + +In the ABP Framework, a confirmation popup displays when the delete button is clicked. We will create a Confirmation Dialog and display this dialog with Material Dialog. + +Create `ConfirmationDialogComponent` in `angular/src/shared/components` directory with following command: + +``` +yarn ng generate component shared/components/ConfirmationDialog --module shared +``` + +Replace `ConfirmationDialogComponent` with following code: + +```typescript +import { Component, Inject } from "@angular/core"; +import { + MAT_DIALOG_DATA, + MAT_DIALOG_DEFAULT_OPTIONS, +} from "@angular/material/dialog"; + +export interface ConfirmationDialogData { + title: string; + description: string; +} +@Component({ + selector: "app-confirmation-dialog", + templateUrl: "./confirmation-dialog.component.html", + styleUrls: ["./confirmation-dialog.component.scss"], + providers: [ + { + provide: MAT_DIALOG_DEFAULT_OPTIONS, + useValue: { hasBackdrop: true, width: "450px" }, + }, + ], +}) +export class ConfirmationDialogComponent { + constructor(@Inject(MAT_DIALOG_DATA) public data: ConfirmationDialogData) {} +} +``` + +Replace `confirmation-dialog.component.html` with the following code: + +```html + +
+ warning +

{{ data.title | abpLocalization }}

+

{{ data.description | abpLocalization }}

+
+
+ + + + +``` + +Replace `confirmation-dialog.component.scss` with following code: + +```scss +:host { + .dialog-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + mat-icon.warn-icon { + font-size: 100px; + height: 100px; + width: 100px; + line-height: 100px; + } + p { + color: #777; + font-size: 16px; + } +} +``` + +Add `deleteBook` method to `BookComponent`: + +```typescript +import { BookDialogComponent } from './components/book-dialog/book-dialog.component'; +import { ConfirmationDialogComponent } from '../shared/components/confirmation-dialog/confirmation-dialog.component'; + +deleteBook(id: string) { + const confirmationDialogRef = this.dialog.open(ConfirmationDialogComponent, { + data: { + title: '::AreYouSure', + description: '::AreYouSureToDelete' + } + }); + confirmationDialogRef.afterClosed().subscribe(confirmationResult => { + if (confirmationResult) { + this.bookService.delete(id).subscribe(() => this.list.get()); + } + }); +} +``` + +Add delete button to actions' button menu template in `book.component.html`: + +```html + + + + + + + + +``` + +![Book Delete](./book-delete.gif) + +## Authorization + +You can follow steps for authorization at the [Web Application Development Tutorial - Part 5: Authorization](https://docs.abp.io/en/abp/latest/Tutorials/Part-5?UI=NG&DB=EF) + +## Author CRUD Actions + +> Please complete the following steps before starting this section +> +> - [Web Application Development Tutorial - Part 6: Authors: Domain Layer](https://docs.abp.io/en/abp/latest/Tutorials/Part-6) +> - [Web Application Development Tutorial - Part 7: Authors: Database Integration](https://docs.abp.io/en/abp/latest/Tutorials/Part-7) +> - [Web Application Development Tutorial - Part 8: Authors: Application Layer](https://docs.abp.io/en/abp/latest/Tutorials/Part-8) +> - Run following command in terminal at `angular` directory: +> `abp generate-proxy` + +In this section, we will create an author list page and author create/update dialog by following the same steps in the `Book CRUD Actions` section + +Run the following command in the terminal for creating author module and components: + +``` +yarn ng generate module author --module app --routing --route authors +``` + +Create `AuthorDialogComponent` in `angular/src/app/author/components` directory with following command: + +``` +yarn ng generate component author/components/AuthorDialog -m author +``` + +Add `SharedModule` to `AuthorModule`'s imports array: + +```typescript +import { NgModule } from "@angular/core"; +import { AuthorWithBooksRoutingModule } from "./author-with-books-routing.module"; +import { AuthorWithBooksComponent } from "./author-with-books.component"; +import { SharedModule } from "../shared/shared.module"; + +@NgModule({ + declarations: [AuthorComponent, AuthorDialogComponent], + imports: [SharedModule, AuthorRoutingModule], +}) +export class AuthorModule {} +``` + +Open the `src/app/route.provider.ts` file replace the `configureRoutes` function declaration as shown below: + +```typescript +function configureRoutes(routes: RoutesService) { + return () => { + routes.add([ + // other routes + { + path: "/authors", + name: "::Menu:Authors", + parentName: "::Menu:BookStore", + layout: eLayoutType.application, + }, + ]); + }; +} +``` + +Replace `AuthorDialogComponent` with following code below: + +```typescript +import { Component, Inject, OnInit } from "@angular/core"; +import { + MAT_DIALOG_DATA, + MAT_DIALOG_DEFAULT_OPTIONS, +} from "@angular/material/dialog"; +import { AuthorDto } from "@proxy/authors"; +import { FormBuilder, FormGroup, Validators } from "@angular/forms"; + +@Component({ + selector: "app-author-dialog", + templateUrl: "./author-dialog.component.html", + styleUrls: ["./author-dialog.component.scss"], + providers: [ + { + provide: MAT_DIALOG_DEFAULT_OPTIONS, + useValue: { hasBackdrop: true, width: "50vw" }, + }, + ], +}) +export class AuthorDialogComponent implements OnInit { + form: FormGroup; + + constructor( + @Inject(MAT_DIALOG_DATA) public data: AuthorDto, + private fb: FormBuilder + ) {} + ngOnInit(): void { + this.buildForm(); + } + + buildForm() { + this.form = this.fb.group({ + name: [this.data?.name, Validators.required], + birthDate: [ + this.data?.birthDate ? new Date(this.data.birthDate) : null, + Validators.required, + ], + }); + } + + getFormValue() { + const { birthDate } = this.form.value; + return { + ...this.form.value, + publishDate: `${birthDate?.getFullYear()}-${ + birthDate?.getMonth() + 1 + }-${birthDate?.getDate()}`, + }; + } +} +``` + +Replace `author-dialog.component.html` with the following code below: + +```html +

+ {{ (data ? '::EditAuthor' : '::NewAuthor' )| abpLocalization }} +

+ +
+ + {{'::Name' | abpLocalization}} * + + + + + {{'::BirthDate' | abpLocalization}} * + + + + +
+
+ + + + +``` + +Replace `author.component.ts` with following code below: + +```typescript +import { Component, OnInit } from "@angular/core"; +import { ListService, PagedResultDto } from "@abp/ng.core"; +import { AuthorDto, AuthorService } from "@proxy/authors"; +import { FormGroup } from "@angular/forms"; +import { PageEvent } from "@angular/material/paginator"; +import { Sort } from "@angular/material/sort"; +import { MatDialog } from "@angular/material/dialog"; +import { AuthorDialogComponent } from "./components/author-dialog/author-dialog.component"; +import { ConfirmationDialogComponent } from "../shared/components/confirmation-dialog/confirmation-dialog.component"; + +@Component({ + selector: "app-author", + templateUrl: "./author.component.html", + styleUrls: ["./author.component.scss"], + providers: [ListService], +}) +export class AuthorComponent implements OnInit { + author = { items: [], totalCount: 0 } as PagedResultDto; + + form: FormGroup; + + columns = ["actions", "name", "birthDate"]; + + constructor( + public readonly list: ListService, + private authorService: AuthorService, + public dialog: MatDialog + ) {} + + ngOnInit(): void { + const authorStreamCreator = (query) => this.authorService.getList(query); + + this.list.hookToQuery(authorStreamCreator).subscribe((response) => { + this.author = response; + }); + } + + changePage(pageEvent: PageEvent) { + this.list.page = pageEvent.pageIndex; + } + + changeSort(sort: Sort) { + this.list.sortKey = sort.active; + this.list.sortOrder = sort.direction; + } + + createAuthor() { + const dialogRef = this.dialog.open(AuthorDialogComponent); + dialogRef.afterClosed().subscribe((result) => { + if (result) { + this.authorService.create(result).subscribe(() => { + this.list.get(); + }); + } + }); + } + + editAuthor(id: any) { + this.authorService.get(id).subscribe((author) => { + const dialogRef = this.dialog.open(AuthorDialogComponent, { + data: author, + }); + dialogRef.afterClosed().subscribe((result) => { + if (result) { + this.authorService.update(id, result).subscribe(() => { + this.list.get(); + }); + } + }); + }); + } + + deleteAuthor(id: string) { + const confirmationDialogRef = this.dialog.open( + ConfirmationDialogComponent, + { + data: { + title: "::AreYouSure", + description: "::AreYouSureToDelete", + }, + } + ); + confirmationDialogRef.afterClosed().subscribe((confirmationResult) => { + if (confirmationResult) { + this.authorService.delete(id).subscribe(() => this.list.get()); + } + }); + } +} +``` + +Replace `author.component.html` with the following code: + +```html + + + + {{ '::Menu:Authors' | abpLocalization }} +
+ +
+
+
+ + + + + + + + + + + + + + +
+ {{'::Actions' | abpLocalization}} + + + + {{'::Name' | abpLocalization}} + {{element.name}} + {{'::BirthDate' | abpLocalization}} + + {{ element.birthDate | date }} +
+ +
+
+ + + + + + +``` + +Open the `en.json` file under the `Localization/BookStore` folder of the `Acme.BookStore.AngularMaterial.Domain.Shared project` and add the following entries: + +```json + "Menu:Authors": "Authors", + "Authors": "Authors", + "AuthorDeletionConfirmationMessage": "Are you sure to delete the author '{0}'?", + "BirthDate": "Birth date", + "NewAuthor": "New author", + "EditAuthor": "Edit Author" +``` + +![Author](./author-crud.gif) + +## Author And Book Relation + +> Please complete the following steps before starting this section +> +> - Complete server-side parts [Web Application Development Tutorial - Part 10: Book to Author Relation](https://docs.abp.io/en/abp/latest/Tutorials/Part-10) until [The User Interface](https://docs.abp.io/en/abp/latest/Tutorials/Part-10?UI=NG&DB=EF#the-user-interface) section +> - Run following command in terminal at `angular` directory: +> `abp generate-proxy` + +In this section, we will add author selection to the book creation form, create one form for adding an author with books using Material Stepper and display the author's name in the book list page. + +### Author Selection + +We will add the author select box using Material Select and we will get authors from the server in `BookDialogComponent`. + +Replace `book-dialog.component.ts` in `app/src/book/components/book-dialog` with following code: + +```typescript +import { Component, Inject, OnInit } from "@angular/core"; +import { + MAT_DIALOG_DATA, + MAT_DIALOG_DEFAULT_OPTIONS, +} from "@angular/material/dialog"; +import { FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { + AuthorLookupDto, + BookDto, + BookService, + bookTypeOptions, +} from "@proxy/books"; +import { Observable } from "rxjs"; +import { map } from "rxjs/operators"; + +@Component({ + selector: "app-book-dialog", + templateUrl: "./book-dialog.component.html", + styleUrls: ["./book-dialog.component.scss"], + providers: [ + { + provide: MAT_DIALOG_DEFAULT_OPTIONS, + useValue: { hasBackdrop: true, width: "50vw" }, + }, + ], +}) +export class BookDialogComponent implements OnInit { + form: FormGroup; + + bookTypes = bookTypeOptions; + + authors$: Observable; // this line added + + constructor( + private fb: FormBuilder, + @Inject(MAT_DIALOG_DATA) public data: BookDto, + bookService: BookService // inject bookService + ) { + this.authors$ = bookService.getAuthorLookup().pipe(map((r) => r.items)); // this line added + } + + ngOnInit(): void { + this.buildForm(); + } + + buildForm() { + this.form = this.fb.group({ + name: [this.data?.name, Validators.required], + type: [this.data?.type, Validators.required], + publishDate: [this.data?.publishDate, Validators.required], + price: [this.data?.price, Validators.required], + authorId: [this.data?.authorId, Validators.required], // this line added + }); + } +} +``` + +Add author select box before name field in `book-dialog.component.html` as shown below: + +```html + + + {{'::Author' | abpLocalization}} * + + {{ author.name }} + + + + + {{'::Name' | abpLocalization}} * + + +``` + +### Author Name Column + +Add the `authorName` item to columns array in `BookComponent`: + +```typescript +columns: string[] = [/* ...other columns*/, 'authorName']; +``` + +Add the `authorName` column after price column in `book.component.html`: + +```html + + + + +``` + +### Author With Books Form + +In this section, we will create an endpoint that takes author information and book list in the request body for creating an author and books by one request. + +Create a class named `CreateBookDto` in `Application.Contracts/Books` folder: + +```csharp +using System; +using System.ComponentModel.DataAnnotations; +using Acme.BookStore.Books; +using Volo.Abp.Application.Dtos; + +namespace Acme.BookStore.AngularMaterial.Books +{ + public class CreateBookDto: AuditedEntityDto + { + [Required] + [StringLength(128)] + public string Name { get; set; } + + [Required] + public BookType Type { get; set; } = BookType.Undefined; + + [Required] + [DataType(DataType.Date)] + public DateTime PublishDate { get; set; } = DateTime.Now; + + [Required] + public float Price { get; set; } + } +} +``` + +Create a class named `CreateAuthorWithBookDto` in `Application.Contracts/Books` folder: + +```csharp +using System.Collections.Generic; +using Acme.BookStore.AngularMaterial.Authors; + +namespace Acme.BookStore.AngularMaterial.Books +{ + public class CreateAuthorWithBookDto: CreateAuthorDto + { + public List Books { get; set; } + + public CreateAuthorWithBookDto() + { + Books = new List(); + } + } +} +``` + +Create a class named `AuthorWithDetailsDto` in `Application.Contracts/Books` folder: + +```csharp +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using Acme.BookStore.AngularMaterial.Authors; + +namespace Acme.BookStore.AngularMaterial.Books +{ + public class AuthorWithDetailsDto: AuthorDto + { + [Required] + public List Books { get; set; } + + public AuthorWithDetailsDto() + { + Books = new List(); + } + } +} +``` + +Add following line to `IBookAppService` interface which placed in `Application.Contracts/Books`: + +```csharp +Task CreateAuthorWithBooksAsync(CreateAuthorWithBookDto input); +``` + +Add mappings for the above DTO's lines to `AngularMaterialApplicationAutoMapperProfile.cs` + +```csharp +CreateMap(); +CreateMap(); +CreateMap(); +``` + +Inject `AuthorManager` and add `CreateAuthorWithBooksAsync` method to `BookAppService.cs`: + +```csharp +namespace Acme.BookStore.AngularMaterial.Books +{ + [Authorize(AngularMaterialPermissions.Books.Default)] + public class BookAppService: + CrudAppService< + Book, + BookDto, + Guid, + PagedAndSortedResultRequestDto, + CreateUpdateBookDto>, + IBookAppService + { + private readonly IAuthorRepository _authorRepository; + private readonly AuthorManager _authorManager; // this line added + public BookAppService( + IRepository repository, + IAuthorRepository authorRepository, + // inject AuthorManager + AuthorManager authorManager) + : base(repository) + { + _authorRepository = authorRepository; + _authorManager = authorManager;// this line added + GetPolicyName = AngularMaterialPermissions.Books.Default; + GetListPolicyName = AngularMaterialPermissions.Books.Default; + CreatePolicyName = AngularMaterialPermissions.Books.Create; + UpdatePolicyName = AngularMaterialPermissions.Books.Edit; + DeletePolicyName = AngularMaterialPermissions.Books.Delete; + } + + // Other class methods + + // This method added + public async Task CreateAuthorWithBooksAsync(CreateAuthorWithBookDto input) + { + var author = await _authorManager.CreateAsync( + input.Name, + input.BirthDate, + input.ShortBio + ); + + var createdAuthor = await _authorRepository.InsertAsync(author); + var authorWithBooks = ObjectMapper.Map(createdAuthor); + foreach (var book in input.Books) + { + var bookEntity = ObjectMapper.Map(book); + bookEntity.AuthorId = author.Id; + var createdBook = await Repository.InsertAsync(bookEntity); + var bookDto = ObjectMapper.Map(createdBook); + bookDto.AuthorName = author.Name; + authorWithBooks.Books.Add(bookDto); + } + + return authorWithBooks; + } + } +} +``` + +Open the `en.json` file under the `Localization/BookStore` folder of the `Acme.BookStore.AngularMaterial.Domain.Shared project` and add the following entries: + +```json + "AuthorInfo": "Author Info", + "BookInfo": "Book Info", + "AddBook": "Add Book", + "NewAuthorWithBook": "New Author With Book", + "AuthorWithBook:Success": "{0} added with books successfully" +``` + +Run generate-proxy command in the terminal at `angular` directory: + +``` +abp generate-proxy +``` + +We will create `AuthorWithBooksModule` with components and we will use Material Stepper inside the component. + +Run the following command for creating `AuthorWithBooksModule`: + +``` +yarn ng generate module author-with-books --module app --routing --route author-with-books +``` + +Add `SharedModule` to `AuthorWithBooksModule`'s imports array as shown below: + +```typescript +import { SharedModule } from "../shared/shared.module"; + +@NgModule({ + declarations: [AuthorWithBooksComponent], + imports: [ + SharedModule, // this line added + AuthorWithBooksRoutingModule, + ], +}) +export class AuthorWithBooksModule {} +``` + +Add `MatStepperModule` to `SharedModule`'s imports array as shown below: + +```typescript +import { MatStepperModule } from "@angular/material/stepper"; + +@NgModule({ + imports: [ + // other imports + MatStepperModule, + ], + exports: [ + // other exports + MatStepperModule, + ], +}) +export class SharedModule {} +``` + +We will create one form which includes author form group and book form array. We will use these form elements at the [Material Stepper](https://material.angular.io/components/stepper/overview) integration. + +Replace `author-with-books.component.ts` with the following code: + +```typescript +import { Component, OnInit } from "@angular/core"; +import { bookTypeOptions } from "@proxy/books"; +import { FormArray, FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { STEPPER_GLOBAL_OPTIONS } from "@angular/cdk/stepper"; + +@Component({ + selector: "app-author-with-book", + templateUrl: "./author-with-book.component.html", + styleUrls: ["./author-with-book.component.scss"], + providers: [ + { + provide: STEPPER_GLOBAL_OPTIONS, + useValue: { displayDefaultIndicatorType: false }, + }, + ], +}) +export class AuthorWithBooksComponent implements OnInit { + form: FormGroup; + + bookTypes = bookTypeOptions; + + get bookFormArray(): FormArray { + return this.form.get("books") as FormArray; + } + + constructor( + private fb: FormBuilder, + private bookService: BookService, + private toasterService: ToasterService + ) {} + + ngOnInit(): void { + this.form = this.fb.group({ + author: this.fb.group({ + name: [null, Validators.required], + birthDate: [null, Validators.required], + }), + books: this.fb.array([this.getBookForm()]), + }); + } + + getBookForm() { + return this.fb.group({ + name: [null, Validators.required], + type: [null, Validators.required], + publishDate: [null, Validators.required], + price: [null, Validators.required], + }); + } + + addBook() { + this.bookFormArray.push(this.getBookForm()); + } + + deleteBook(i: number) { + this.bookFormArray.removeAt(i); + } + + save() { + if (this.form.invalid) { + return; + } + const authorWithBook: CreateAuthorWithBookDto = { + ...this.form.value.author, + books: this.form.value.books, + }; + this.bookService.createAuthorWithBooks(authorWithBook).subscribe((res) => { + this.toasterService.success("::AuthorWithBook:Success", "", { + messageLocalizationParams: [res.name], + }); + }); + } +} +``` + +- We created form until component initialization in the `ngOnInit` method +- In the `getBookForm` method, returned +- In the `addBook` method, we pushed a form group instance created in the `getBookForm` method to the book form array. We will execute this method when clicked on the **Add Book** button +- We deleted a form group instance by index from the book form array in the `deleteBook` method +- In the `save` method, we send an HTTP request for creating author and books if creation will be successful toaster message will be display + +Replace the `author-with-books.component.html` content with following code: + +```html + + +
+ + {{'::Name' | abpLocalization}} * + + + + + {{'::BirthDate' | abpLocalization}} * + + + + +
+
+ + +
+ + {{'::Name' | abpLocalization}} * + + + + + {{'::Price' | abpLocalization}} * + + + + + {{'::Type' | abpLocalization}} * + + {{'::SelectBookType' | abpLocalization}} + {{ '::Enum:BookType:' + type.value | abpLocalization + }} + + + + + {{'::PublishDate' | abpLocalization}} * + + + + +
+ +
+
+ + +
+
+ + person + + + book + +
+``` + +- We created the same author form where we created in `AuthorDialogComponent` and we gave the author form group to mat-step's stepConrol input +- We created the same book form which we created at `BookDialogComponent` except the author selection + +Replace `author-with-books.component.scss` content with following code: + +```scss +.book-form { + margin-top: 20px; +} +.button-container { + display: flex; + width: 100%; + justify-content: space-between; + margin-top: 25px; +} +``` + +Finally add Create Author With Books button near the Create Author button in `author.component.html`: + +```html +
+ + +
+``` + +Final UI looks as shown below: + +![Author With Books](./author-with-books.gif) + +## Conclusion + +We implemented Angular Material Components to our angular application which was created with ABP Framework. There is no blocker case of using angular libraries with the ABP framework. diff --git a/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/author-crud.gif b/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/author-crud.gif new file mode 100644 index 0000000000..be7e2246ed Binary files /dev/null and b/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/author-crud.gif differ diff --git a/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/author-with-books.gif b/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/author-with-books.gif new file mode 100644 index 0000000000..698507f780 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/author-with-books.gif differ diff --git a/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/book-create.gif b/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/book-create.gif new file mode 100644 index 0000000000..613ccf4a45 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/book-create.gif differ diff --git a/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/book-delete.gif b/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/book-delete.gif new file mode 100644 index 0000000000..a10d8a3536 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/book-delete.gif differ diff --git a/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/book-edit.gif b/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/book-edit.gif new file mode 100644 index 0000000000..387274aa38 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/book-edit.gif differ diff --git a/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/book-list.gif b/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/book-list.gif new file mode 100644 index 0000000000..1a88413e40 Binary files /dev/null and b/docs/en/Community-Articles/2020-12-11-Using-Angular-Material-Components-With-ABP-Framework/book-list.gif differ diff --git a/docs/en/Module-Entity-Extensions.md b/docs/en/Module-Entity-Extensions.md index 61a7093dc5..042c10b815 100644 --- a/docs/en/Module-Entity-Extensions.md +++ b/docs/en/Module-Entity-Extensions.md @@ -1,3 +1,393 @@ # Module Entity Extensions -See https://docs.abp.io/en/commercial/latest/guides/module-entity-extensions (it will be moved here soon). \ No newline at end of file +## Introduction + +Module entity extension system is a **high level** extension system that allows you to **define new properties** for existing entities of the depended modules. It automatically **adds properties to the entity, database, HTTP API and the user interface** in a single point. + +> The module must be developed the *Module Entity Extensions* system in mind. All the **official modules** supports this system wherever possible. + +## Quick Example + +Open the *YourProjectNameModuleExtensionConfigurator* class inside the `Domain.Shared` project of your solution and change the `ConfigureExtraProperties`method as shown below to add a `SocialSecurityNumber` property to the `IdentityUser` entity of the [Identity Module](Modules/Identity.md). + +````csharp +public static void ConfigureExtraProperties() +{ + OneTimeRunner.Run(() => + { + ObjectExtensionManager.Instance.Modules() + .ConfigureIdentity(identity => + { + identity.ConfigureUser(user => + { + user.AddOrUpdateProperty( //property type: string + "SocialSecurityNumber", //property name + property => + { + //validation rules + property.Attributes.Add(new RequiredAttribute()); + property.Attributes.Add( + new StringLengthAttribute(64) { + MinimumLength = 4 + } + ); + + //...other configurations for this property + } + ); + }); + }); + }); +} +```` + +>This method is called inside the `YourProjectNameDomainSharedModule` at the beginning of the application. `OneTimeRunner` is a utility class that guarantees to execute this code only one time per application, since multiple calls are unnecessary. + +* `ObjectExtensionManager.Instance.Modules()` is the starting point to configure a module. `ConfigureIdentity(...)` method is used to configure the entities of the Identity Module. +* `identity.ConfigureUser(...)` is used to configure the user entity of the identity module. Not all entities are designed to be extensible (since it is not needed). Use the intellisense to discover the extensible modules and entities. +* `user.AddOrUpdateProperty(...)` is used to add a new property to the user entity with the `string` type (`AddOrUpdateProperty` method can be called multiple times for the same property of the same entity. Each call can configure the options of the same property, but only one property is added to the entity with the same property name). You can call this method with different property names to add more properties. +* `SocialSecurityNumber` is the name of the new property. +* `AddOrUpdateProperty` gets a second argument (the `property =>` lambda expression) to configure additional options for the new property. + * We can add data annotation attributes like shown here, just like adding a data annotation attribute to a class property. + +#### Create & Update Forms + +Once you define a property, it appears in the create and update forms of the related entity: + +![add-new-property-to-user-form](images/add-new-property-to-user-form.png) + +`SocialSecurityNumber` field comes into the form. Next sections will explain the localization and the validation for this new property. + +### Data Table + +New properties also appear in the data table of the related page: + +![add-new-property-to-user-form](images/add-new-property-to-user-table.png) + +`SocialSecurityNumber` column comes into the table. Next sections will explain the option to hide this column from the data table. + +## Property Options + +There are some options that you can configure while defining a new property. + +### Display Name + +You probably want to set a different (human readable) display name for the property that is shown on the user interface. + +#### Don't Want to Localize? + +If your application is not localized, you can directly set the `DisplayName` for the property to a `FixedLocalizableString` object. Example: + +````csharp +property => +{ + property.DisplayName = new FixedLocalizableString("Social security no"); +} +```` + +#### Localizing the Display Name + +If you want to localize the display name, you have two options. + +##### Localize by Convention + +Instead of setting the `property.DisplayName`, you can directly open your localization file (like `en.json`) and add the following entry to the `texts` section: + +````json +"SocialSecurityNumber": "Social security no" +```` + +Define the same `SocialSecurityNumber` key (the property name you've defined before) in your localization file for each language you support. That's all! + +In some cases, the localization key may conflict with other keys in your localization files. In such cases, you can use the `DisplayName:` prefix for display names in the localization file (`DisplayName:SocialSecurityNumber` as the localization key for this example). Extension system looks for prefixed version first, then fallbacks to the non prefixed name (it then fallbacks to the property name if you haven't localized it). + +> This approach is recommended since it is simple and suitable for most scenarios. + +##### Localize using the `DisplayName` Property + +If you want to specify the localization key or the localization resource, you can still set the `DisplayName` option: + +````csharp +property => +{ + property.DisplayName = + LocalizableString.Create( + "UserSocialSecurityNumberDisplayName" + ); +} +```` + +* `MyProjectNameResource` is the localization resource and `UserSocialSecurityNumberDisplayName` is the localization key in the localization resource. + +> See [the localization document](Localization.md) if you want to learn more about the localization system. + +#### Default Value + +A default value is automatically set for the new property, which is the natural default value for the property type, like `null` for `string`, `false` for `bool` or `0` for `int`. + +There are two ways to override the default value: + +##### DefaultValue Option + +`DefaultValue` option can be set to any value: + +````csharp +property => +{ + property.DefaultValue = 42; +} +```` + +##### DefaultValueFactory Options + +`DefaultValueFactory` can be set to a function that returns the default value: + +````csharp +property => +{ + property.DefaultValueFactory = () => DateTime.Now; +} +```` + +`options.DefaultValueFactory` has a higher priority than the `options.DefaultValue` . + +> Tip: Use `DefaultValueFactory` option only if the default value may change over the time (like `DateTime.Now` in this example). If it is a constant value, then use the `DefaultValue` option. + +### Validation + +Entity extension system allows you to define validation for extension properties in a few ways. + +#### Data Annotation Attributes + +`Attributes` is a list of attributes associated to this property. The example code below adds two [data annotation validation attributes](https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation) to the property: + +````csharp +property => +{ + property.Attributes.Add(new RequiredAttribute()); + property.Attributes.Add(new StringLengthAttribute(64) {MinimumLength = 4}); +} +```` + +When you run the application, you see that the validation works out of the box: + +![add-new-propert-to-user-form](images/add-new-property-to-user-form-validation-error.png) + +Since we've added the `RequiredAttribute`, it doesn't allow to left it blank. The validation system works; + +* On the user interface (with automatic localization). +* On the HTTP API. Even if you directly perform an HTTP request, you get validation errors with a proper HTTP status code. +* On the `SetProperty(...)` method on the entity (see [the document](Entities.md) if you wonder what is the `SetProperty()` method). + +So, it automatically makes a full stack validation. + +> See the [ASP.NET Core MVC Validation document](https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation) to learn more about the attribute based validation. + +##### Default Validation Attributes + +There are some attributes **automatically added** when you create certain type of properties; + +* `RequiredAttribute` is added for **non nullable** primitive property types (e.g. `int`, `bool`, `DateTime`...) and `enum` types. If you want to allow nulls, make the property nullable (e.g. `int?`). +* `EnumDataTypeAttribute` is added for **enum types**, to prevent to set invalid enum values. + +Use `property.Attributes.Clear();` if you don't want these attributes. + +#### Validation Actions + +Validation actions allows you to execute a custom code to perform the validation. The example below checks if the `SocialSecurityNumber` starts with `B` and adds a validation error if so: + +````csharp +property => +{ + property.Attributes.Add(new RequiredAttribute()); + property.Attributes.Add(new StringLengthAttribute(64) {MinimumLength = 4}); + + property.Validators.Add(context => + { + if (((string) context.Value).StartsWith("B")) + { + context.ValidationErrors.Add( + new ValidationResult( + "Social security number can not start with the letter 'B', sorry!", + new[] {"extraProperties.SocialSecurityNumber"} + ) + ); + } + }); + +} +```` + +Using a `RegularExpressionAttribute` might be better in this case, but this is just an example. Anyway, if you enter a value starts with the letter `B` you get the following error **while saving the form**: + +![add-new-propert-to-user-form](images/add-new-property-to-user-form-validation-error-custom.png) + +##### The Context Object + +The `context` object has useful properties that can be used in your custom validation action. For example, you can use the `context.ServiceProvider` to resolve services from the [dependency injection system](Dependency-Injection.md). The example below gets the localizer and adds a localized error message: + +````csharp +if (((string) context.Value).StartsWith("B")) +{ + var localizer = context.ServiceProvider + .GetRequiredService>(); + + context.ValidationErrors.Add( + new ValidationResult( + localizer["SocialSecurityNumberCanNotStartWithB"], + new[] {"extraProperties.SocialSecurityNumber"} + ) + ); +} +```` + +>`context.ServiceProvider` is nullable! It can be `null` only if you use the `SetProperty(...)` method on the object. Because DI system is not available on this time. While this is a rare case, you should perform a fallback logic when `context.ServiceProvider` is `null`. For this example, you would add a non-localized error message. This is not a problem since setting an invalid value to a property generally is a programmer mistake and you mostly don't need to localization in this case. In any way, you would not be able to use localization even in a regular property setter. But, if you are serious about localization, you can throw a business exception (see the [exception handling document](https://docs.abp.io/en/abp/latest/Exception-Handling) to learn how to localize a business exception). + +### UI Visibility + +When you define a property, it appears on the data table, create and edit forms on the related UI page. However, you can control each one individually. Example: + +````csharp +property => +{ + property.UI.OnTable.IsVisible = false; + //...other configurations +} +```` + +Use `property.UI.OnCreateForm` and `property.UI.OnEditForm` to control forms too. If a property is required, but not added to the create form, you definitely get a validation exception, so use this option carefully. But a required property may not be in the edit form if that's your requirement. + +### HTTP API Availability + +Even if you disable a property on UI, it can be still available through the HTTP API. By default, a property is available on all APIs. + +Use the `property.Api` options to make a property unavailable in some API endpoints. + +````csharp +property => +{ + property.Api.OnUpdate.IsAvailable = false; +} +```` + +In this example, Update HTTP API will not allow to set a new value to this property. In this case, you also want to disable this property on the edit form: + +````csharp +property => +{ + property.Api.OnUpdate.IsAvailable = false; + property.UI.OnEditForm.IsVisible = false; +} +```` + +In addition to the `property.Api.OnUpdate`, you can set `property.Api.OnCreate` and `property.Api.OnGet` for a fine control the API endpoint. + +## Special Types + +### Enum + +Module extension system naturally supports the `enum` types. + +An example enum type: + +````csharp +public enum UserType +{ + Regular, + Moderator, + SuperUser +} +```` + +You can add enum properties just like others: + +````csharp +user.AddOrUpdateProperty("Type"); +```` + +An enum properties is shown as combobox (select) in the create/edit forms: + +![add-new-property-enum](images/add-new-property-enum.png) + +#### Localization + +Enum member name is shown on the table and forms by default. If you want to localize it, just create a new entry on your [localization](https://docs.abp.io/en/abp/latest/Localization) file: + +````json +"UserType.SuperUser": "Super user" +```` + +One of the following names can be used as the localization key: + +* `Enum:UserType.SuperUser` +* `UserType.SuperUser` +* `SuperUser` + +Localization system searches for the key with the given order. Localized text are used on the table and the create/edit forms. + +## Database Mapping + +For relational databases, all extension property values are stored in a single field in the table: + +![add-new-propert-to-user-database-extra-properties](images/add-new-propert-to-user-database-extra-properties.png) + +`ExtraProperties` field stores the properties as a JSON object. While that's fine for some scenarios, you may want to create a dedicated field for your new property. Fortunately, it is very easy to configure. + +If you are using the Entity Framework Core database provider, you can configure the database mapping as shown below: + +````csharp +ObjectExtensionManager.Instance + .MapEfCoreProperty( + "SocialSecurityNumber", + (entityBuilder, propertyBuilder) => + { + propertyBuilder.HasMaxLength(64); + } + ); +```` + +Write this inside the `YourProjectNameEfCoreEntityExtensionMappings` class in your `.EntityFrameworkCore` project. Then you need to use the standard `Add-Migration` and `Update-Database` commands to create a new database migration and apply the change to your database. + +Add-Migration create a new migration as shown below: + +````csharp +public partial class Added_SocialSecurityNumber_To_IdentityUser : Migration +{ + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "SocialSecurityNumber", + table: "AbpUsers", + maxLength: 128, + nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "SocialSecurityNumber", + table: "AbpUsers"); + } +} +```` + +Once you update your database, you will see that the `AbpUsers` table has the new property as a standard table field: + +![add-new-propert-to-user-database-extra-properties](images/add-new-propert-to-user-database-field.png) + +> If you first created a property without a database table field, then you later needed to move this property to a database table field, it is suggested to execute an SQL command in your migration to copy the old values to the new field. +> +> However, if you don't make it, the ABP Framework seamlessly manages it. It uses the new database field, but fallbacks to the `ExtraProperties` field if it is null. When you save the entity, it moves the value to the new field. + +See the [Extending Entities](Customizing-Application-Modules-Extending-Entities.md) document for more. + +## More + +See the [Customizing the Modules](Customizing-Application-Modules-Guide.md) guide for an overall index for all the extensibility options. + +Here, a few things you can do: + +* You can create a second entity that maps to the same database table with the extra property as a standard class property (if you've defined the EF Core mapping). For the example above, you can add a `public string SocialSecurityNumber {get; set;}` property to the `AppUser` entity in your application, since the `AppUser` entity is mapped to the same `AbpUser` table. Do this only if you need it, since it brings more complexity to your application. +* You can override a domain or application service to perform custom logics with your new property. +* You can low level control how to add/render a field in the data table on the UI. + diff --git a/docs/en/Modules/Identity.md b/docs/en/Modules/Identity.md index a88087eaa8..8cd7bf3966 100644 --- a/docs/en/Modules/Identity.md +++ b/docs/en/Modules/Identity.md @@ -1,6 +1,6 @@ # Identity Management Module -Identity module is used to manage [organization units](Organization-Units.md), roles, users and their permissions, based on the Microsoft Identity library. +Identity module is used to manage organization units, roles, users and their permissions, based on the Microsoft Identity library. > **See [the source code](https://github.com/abpframework/abp/tree/dev/modules/identity). Documentation will come soon...** diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index 2106e82069..e58857ec89 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -1386,7 +1386,7 @@ Open the `Books.razor` page and add the following `EntityAction` under the "Edit + ConfirmationMessage="() => GetDeleteConfirmationMessage(context)" /> ```` * `DeleteEntityAsync` is defined in the base class that deletes the entity by performing a call to the server. @@ -1429,6 +1429,7 @@ Here the complete code to create the book management CRUD page, that has been de diff --git a/docs/en/Tutorials/Part-4.md b/docs/en/Tutorials/Part-4.md index 8dab28a8db..2262598544 100644 --- a/docs/en/Tutorials/Part-4.md +++ b/docs/en/Tutorials/Part-4.md @@ -53,7 +53,7 @@ This part covers the **server side** tests. There are several test projects in t Each project is used to test the related project. Test projects use the following libraries for testing: * [Xunit](https://xunit.github.io/) as the main test framework. -* [Shoudly](http://shouldly.readthedocs.io/en/latest/) as the assertion library. +* [Shoudly](https://github.com/shouldly/shouldly) as the assertion library. * [NSubstitute](http://nsubstitute.github.io/) as the mocking library. {{if DB=="EF"}} diff --git a/docs/en/Tutorials/Part-7.md b/docs/en/Tutorials/Part-7.md index 5cae52a4b1..97d28691ae 100644 --- a/docs/en/Tutorials/Part-7.md +++ b/docs/en/Tutorials/Part-7.md @@ -150,7 +150,7 @@ namespace Acme.BookStore.Authors } ```` -* Inherited from the `EfCoreAuthorRepository`, so it inherits the standard repository method implementations. +* Inherited from the `EfCoreRepository`, so it inherits the standard repository method implementations. * `WhereIf` is a shortcut extension method of the ABP Framework. It adds the `Where` condition only if the first condition meets (it filters by name, only if the filter was provided). You could do the same yourself, but these type of shortcut methods makes our life easier. * `sorting` can be a string like `Name`, `Name ASC` or `Name DESC`. It is possible by using the [System.Linq.Dynamic.Core](https://www.nuget.org/packages/System.Linq.Dynamic.Core) NuGet package. @@ -211,7 +211,7 @@ namespace Acme.BookStore.Authors } ``` -* Inherited from the `MongoDbAuthorRepository`, so it inherits the standard repository method implementations. +* Inherited from the `MongoDbRepository`, so it inherits the standard repository method implementations. * `WhereIf` is a shortcut extension method of the ABP Framework. It adds the `Where` condition only if the first condition meets (it filters by name, only if the filter was provided). You could do the same yourself, but these type of shortcut methods makes our life easier. * `sorting` can be a string like `Name`, `Name ASC` or `Name DESC`. It is possible by using the [System.Linq.Dynamic.Core](https://www.nuget.org/packages/System.Linq.Dynamic.Core) NuGet package. @@ -221,4 +221,4 @@ namespace Acme.BookStore.Authors ## The Next Part -See the [next part](Part-8.md) of this tutorial. \ No newline at end of file +See the [next part](Part-8.md) of this tutorial. diff --git a/docs/en/Tutorials/Part-9.md b/docs/en/Tutorials/Part-9.md index 65a59f39e1..a1b4b03e21 100644 --- a/docs/en/Tutorials/Part-9.md +++ b/docs/en/Tutorials/Part-9.md @@ -1188,4 +1188,4 @@ That's all! This is a fully working CRUD page, you can create, edit and delete t ## The Next Part -See the [next part](Part-10.md) of this tutorial. \ No newline at end of file +See the [next part](Part-10.md) of this tutorial. diff --git a/docs/en/UI/Angular/List-Service.md b/docs/en/UI/Angular/List-Service.md index 7cc31a46fd..016b891159 100644 --- a/docs/en/UI/Angular/List-Service.md +++ b/docs/en/UI/Angular/List-Service.md @@ -68,6 +68,50 @@ Bind `ListService` to ngx-datatable like this: ``` +## Extending query with custom variables + +You can extend the query parameter of the `ListService`'s `hookToQuery` method. + +Firstly, you should pass your own type to `ListService` as shown below: + +```typescript +constructor(public readonly list: ListService) { } +``` + +Then update the `bookStreamCreator` constant like following: + +```typescript +const bookStreamCreator = (query) => this.bookService.getList({...query, name: 'name here'}); +``` + +You can also create your params object. + +Define a variable like this: + +```typescript +booksSearchParams = {} as BooksSearchParamsDto; +``` + +Update the `bookStreamCreator` constant: + +```typescript +const bookStreamCreator = (query) => this.bookService.getList({...query, ...this.booksSearchParams}); +``` + +Then you can place inputs to the HTML: + +```html +
+ +
+``` + +`ListService` emits the hookToQuery stream when you call the `this.list.get()` method. ## Usage with Observables diff --git a/docs/en/UI/AspNetCore/Data-Table-Column-Extensions.md b/docs/en/UI/AspNetCore/Data-Table-Column-Extensions.md new file mode 100644 index 0000000000..fec0ac71fb --- /dev/null +++ b/docs/en/UI/AspNetCore/Data-Table-Column-Extensions.md @@ -0,0 +1,161 @@ +# Data Table Column Extensions for ASP.NET Core UI + +## Introduction + +Data table column extension system allows you to add a **new table column** on the user interface. The example below adds a new column with the "Social security no" title: + +![user-action-extension-click-me](../../images/table-column-extension-example.png) + +You can use the standard column options to fine control the table column. + +> Note that this is a low level API to find control the table column. If you want to show an extension property on the table, see the [module entity extension](../../Module-Entity-Extensions.md) document. + +## How to Set Up + +### Create a JavaScript File + +First, add a new JavaScript file to your solution. We added inside the `/Pages/Identity/Users` folder of the `.Web` project: + +![user-action-extension-on-solution](../../images/user-action-extension-on-solution.png) + +Here, the content of this JavaScript file: + +```js +abp.ui.extensions.tableColumns + .get('identity.user') + .addContributor(function (columnList) { + columnList.addTail({ //add as the last column + title: 'Social security no', + data: 'extraProperties.SocialSecurityNumber', + orderable: false, + render: function (data, type, row) { + if (row.extraProperties.SocialSecurityNumber) { + return '' + + row.extraProperties.SocialSecurityNumber + + ''; + } else { + return 'undefined'; + } + } + }); + }); +``` + +This example defines a custom `render` function to return a custom HTML to render in the column. + +### Add the File to the User Management Page + +Then you need to add this JavaScript file to the user management page. You can take the power of the [Bundling & Minification system](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Bundling-Minification). + +Write the following code inside the `ConfigureServices` of your module class: + +```csharp +Configure(options => +{ + options.ScriptBundles.Configure( + typeof(Volo.Abp.Identity.Web.Pages.Identity.Users.IndexModel).FullName, + bundleConfiguration => + { + bundleConfiguration.AddFiles( + "/Pages/Identity/Users/my-user-extensions.js" + ); + }); +}); +``` + +This configuration adds `my-user-extensions.js` to the user management page of the Identity Module. `typeof(Volo.Abp.Identity.Web.Pages.Identity.Users.IndexModel).FullName` is the name of the bundle in the user management page. This is a common convention used for all the ABP Commercial modules. + +### Rendering the Column + +This example assumes that you've defined a `SocialSecurityNumber` extra property using the [module entity extension](../../Module-Entity-Extensions.md) system. However; + +* You can add a new column that is related to an existing property of the user (that was not added to the table by default). Example: + +````js +abp.ui.extensions.tableColumns + .get('identity.user') + .addContributor(function (columnList) { + columnList.addTail({ + title: 'Phone confirmed?', + data: 'phoneNumberConfirmed', + render: function (data, type, row) { + if (row.phoneNumberConfirmed) { + return 'YES'; + } else { + return 'NO'; + } + } + }); + }); +```` + +* You can add a new custom column that is not related to any entity property, but a completely custom information. Example: + +````js +abp.ui.extensions.tableColumns + .get('identity.user') + .addContributor(function (columnList) { + columnList.addTail({ + title: 'Custom column', + data: {}, + orderable: false, + render: function (data) { + if (data.phoneNumber) { + return "call: " + data.phoneNumber; + } else { + return ''; + } + } + }); + }); +```` + +## API + +This section explains details of the `abp.ui.extensions.tableColumns` JavaScript API. + +### abp.ui.extensions.tableColumns.get(entityName) + +This method is used to access the table columns for an entity of a specific module. It takes one parameter: + +* **entityName**: The name of the entity defined by the related module. + +### abp.ui.extensions.tableColumns.get(entityName).columns + +The `columns` property is used to retrieve a [doubly linked list](../Common/Utils/Linked-List.md) of previously defined columns for a table. All contributors are executed in order to prepare the final column list. This is normally called by the modules to show the columns in the table. However, you can use it if you are building your own extensible UIs. + +### abp.ui.extensions.tableColumns.get(entityName).addContributor(contributeCallback [, order]) + +The `addContributor` method covers all scenarios, e.g. you want to add your column in a different position in the list, change or remove an existing column. `addContributor` has the following parameters: + +* **contributeCallback**: A callback function that is called whenever the column list should be created. You can freely modify the column list inside this callback method. +* **order** (optional): The order of the callback in the callback list. Your callback is added to the end of the list (so, you have opportunity to modify columns added by the previous contributors). You can set it `0` to add your contributor as the first item. + +#### Example + +```js +var myColumnDefinition = { + title: 'Custom column', + data: {}, + orderable: false, + render: function(data) { + if (data.phoneNumber) { + return "call: " + data.phoneNumber; + } else { + return ''; + } + } +}; + +abp.ui.extensions.tableColumns + .get('identity.user') + .addContributor(function (columnList) { + // Remove an item from actionList + columnList.dropHead(); + + // Add a new item to the actionList + columnList.addHead(myColumnDefinition); + }); +``` + +> `columnList` is [linked list](../Common/Utils/Linked-List.md). You can use its methods to build a list of columns however you need. diff --git a/docs/en/UI/AspNetCore/Entity-Action-Extensions.md b/docs/en/UI/AspNetCore/Entity-Action-Extensions.md new file mode 100644 index 0000000000..f6e865375d --- /dev/null +++ b/docs/en/UI/AspNetCore/Entity-Action-Extensions.md @@ -0,0 +1,108 @@ +# Entity Action Extensions for ASP.NET Core UI + +## Introduction + +Entity action extension system allows you to add a **new action** to the action menu for an entity. A **Click Me** action was added to the *User Management* page below: + +![user-action-extension-click-me](../../images/user-action-extension-click-me.png) + +You can take any action (open a modal, make an HTTP API call, redirect to another page... etc) by writing your custom code. You can access to the current entity in your code. + +## How to Set Up + +In this example, we will add a "Click Me!" action and execute a JavaScript code for the user management page of the [Identity Module](../../Modules/Identity.md). + +### Create a JavaScript File + +First, add a new JavaScript file to your solution. We added inside the `/Pages/Identity/Users` folder of the `.Web` project: + +![user-action-extension-on-solution](../../images/user-action-extension-on-solution.png) + +Here, the content of this JavaScript file: + +```js +var clickMeAction = { + text: 'Click Me!', + action: function(data) { + //TODO: Write your custom code + alert(data.record.userName); + } +}; + +abp.ui.extensions.entityActions + .get('identity.user') + .addContributor(function(actionList) { + actionList.addTail(clickMeAction); + }); +``` + +In the `action` function, you can do anything you need. See the API section for a detailed usage. + +### Add the File to the User Management Page + +Then you need to add this JavaScript file to the user management page. You can take the power of the [Bundling & Minification System](Bundling-Minification.md). + +Write the following code inside the `ConfigureServices` of your module class: + +```csharp +Configure(options => +{ + options.ScriptBundles.Configure( + typeof(Volo.Abp.Identity.Web.Pages.Identity.Users.IndexModel).FullName, + bundleConfiguration => + { + bundleConfiguration.AddFiles( + "/Pages/Identity/Users/my-user-extensions.js" + ); + }); +}); +``` + +This configuration adds `my-user-extensions.js` to the user management page of the Identity Module. `typeof(Volo.Abp.Identity.Web.Pages.Identity.Users.IndexModel).FullName` is the name of the bundle in the user management page. This is a common convention used for all the ABP Commercial modules. + +That's all. Run your application to see the result. + +## API + +This section explains details of the `abp.ui.extensions.entityActions` JavaScript API. + +### abp.ui.extensions.entityActions.get(entityName) + +This method is used to access the entity actions of a specific module. It takes one parameter: + +* **entityName**: The name of the entity defined by the related module. + +### abp.ui.extensions.entityActions.get(entityName).actions + +The `actions` property is used to retrieve a [doubly linked list](../Common/Utils/Linked-List.md) of previously defined actions for an entity. All contributors are executed in order to prepare the final actions list. This is normally called by the modules to show the actions in the grid. However, you can use it if you are building your own extensible UIs. + +### abp.ui.extensions.entityActions.get(entityName).addContributor(contributeCallback) + +The `addContributor` method covers all scenarios, e.g. you want to add your action in a different position in the list, change or remove an existing action item. `addContributor` with the following parameter: + +* **contributeCallback**: A callback function that is called whenever the action list should be created. You can freely modify the action list inside this callback method. + +#### Example + +```js +var clickMe2Action = { + text: 'Click Me 2!', + icon: 'fas fa-hand-point-right', + action: function(data) { + //TODO: Write your custom code + alert(data.record.userName); + } +}; + +abp.ui.extensions.entityActions + .get('identity.user') + .addContributor(function(actionList) { + // Remove an item from actionList + actionList.dropHead(); + + // Add the new item to the actionList + actionList.addHead(clickMe2Action); + }); +``` + +> `actionList` is [linked list](../Common/Utils/Linked-List.md). You can use its methods to build a list of columns however you need. diff --git a/docs/en/UI/AspNetCore/Theming.md b/docs/en/UI/AspNetCore/Theming.md index 8c680973b8..85acf65433 100644 --- a/docs/en/UI/AspNetCore/Theming.md +++ b/docs/en/UI/AspNetCore/Theming.md @@ -32,7 +32,7 @@ All the themes must depend on the [@abp/aspnetcore.mvc.ui.theme.shared](https:// * [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 +* [JQuery Validation](https://github.com/jquery-validation/jquery-validation) 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. diff --git a/docs/en/UI/Blazor/Testing.md b/docs/en/UI/Blazor/Testing.md new file mode 100644 index 0000000000..08562c5861 --- /dev/null +++ b/docs/en/UI/Blazor/Testing.md @@ -0,0 +1,3 @@ +# Blazor: Testing + +Coming soon. \ No newline at end of file diff --git a/docs/en/images/add-new-propert-to-user-database-extra-properties.png b/docs/en/images/add-new-propert-to-user-database-extra-properties.png new file mode 100644 index 0000000000..90c697461e Binary files /dev/null and b/docs/en/images/add-new-propert-to-user-database-extra-properties.png differ diff --git a/docs/en/images/add-new-propert-to-user-database-field.png b/docs/en/images/add-new-propert-to-user-database-field.png new file mode 100644 index 0000000000..334ba0aa35 Binary files /dev/null and b/docs/en/images/add-new-propert-to-user-database-field.png differ diff --git a/docs/en/images/add-new-property-enum.png b/docs/en/images/add-new-property-enum.png new file mode 100644 index 0000000000..34a14b1bfb Binary files /dev/null and b/docs/en/images/add-new-property-enum.png differ diff --git a/docs/en/images/add-new-property-to-user-form-validation-error-custom.png b/docs/en/images/add-new-property-to-user-form-validation-error-custom.png new file mode 100644 index 0000000000..6bb1799e19 Binary files /dev/null and b/docs/en/images/add-new-property-to-user-form-validation-error-custom.png differ diff --git a/docs/en/images/add-new-property-to-user-form-validation-error.png b/docs/en/images/add-new-property-to-user-form-validation-error.png new file mode 100644 index 0000000000..dd2eb8ad1d Binary files /dev/null and b/docs/en/images/add-new-property-to-user-form-validation-error.png differ diff --git a/docs/en/images/add-new-property-to-user-form.png b/docs/en/images/add-new-property-to-user-form.png new file mode 100644 index 0000000000..bc12a6d5ad Binary files /dev/null and b/docs/en/images/add-new-property-to-user-form.png differ diff --git a/docs/en/images/add-new-property-to-user-table.png b/docs/en/images/add-new-property-to-user-table.png new file mode 100644 index 0000000000..a2a15087cc Binary files /dev/null and b/docs/en/images/add-new-property-to-user-table.png differ diff --git a/docs/en/images/table-column-extension-example.png b/docs/en/images/table-column-extension-example.png new file mode 100644 index 0000000000..84d87bf46c Binary files /dev/null and b/docs/en/images/table-column-extension-example.png differ diff --git a/docs/en/images/user-action-extension-click-me.png b/docs/en/images/user-action-extension-click-me.png new file mode 100644 index 0000000000..4046630f48 Binary files /dev/null and b/docs/en/images/user-action-extension-click-me.png differ diff --git a/docs/en/images/user-action-extension-on-solution.png b/docs/en/images/user-action-extension-on-solution.png new file mode 100644 index 0000000000..5f58d3f302 Binary files /dev/null and b/docs/en/images/user-action-extension-on-solution.png differ 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 10208aa5e9..e24aa6d37b 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 @@ -86,12 +86,13 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { selectTagHelper.Items = GetSelectItems(context, output); } - else + else if(!TagHelper.AutocompleteSelectedItemName.IsNullOrEmpty()) { - selectTagHelper.Items = new SelectListItem[] - { - new SelectListItem(TagHelper.AutocompleteSelectedItemName,TagHelper.AutocompleteSelectedItemValue,true) - }; + selectTagHelper.Items = new[] + { + new SelectListItem(TagHelper.AutocompleteSelectedItemName, + TagHelper.AutocompleteSelectedItemValue, false) + }; } var selectTagHelperOutput = await selectTagHelper.ProcessAndGetOutputAsync(GetInputAttributes(context, output), context, "select", TagMode.StartTagAndEndTag); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/tenant-switch.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/tenant-switch.js index 6b9e348f1d..63b9d577d1 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/tenant-switch.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/tenant-switch.js @@ -9,7 +9,7 @@ }); tenantSwitchModal.onResult(function() { - location.reload(); + location.assign(location.href); }); }); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/CmsKit/CmsKitScriptContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/CmsKit/CmsKitScriptContributor.cs new file mode 100644 index 0000000000..9d022fb85e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/CmsKit/CmsKitScriptContributor.cs @@ -0,0 +1,11 @@ +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; +using Volo.Abp.AspNetCore.Mvc.UI.Packages.StarRatingSvg; +using Volo.Abp.Modularity; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.CmsKit +{ + [DependsOn(typeof(StarRatingSvgScriptContributor))] + public class CmsKitScriptContributor : BundleContributor + { + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/CmsKit/CmsKitStyleContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/CmsKit/CmsKitStyleContributor.cs new file mode 100644 index 0000000000..e2654827e4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/CmsKit/CmsKitStyleContributor.cs @@ -0,0 +1,11 @@ +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; +using Volo.Abp.AspNetCore.Mvc.UI.Packages.StarRatingSvg; +using Volo.Abp.Modularity; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.CmsKit +{ + [DependsOn(typeof(StarRatingSvgStyleContributor))] + public class CmsKitStyleContributor : BundleContributor + { + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj index 208cfa1376..ad0066db55 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/Theming/StandardLayouts.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/Theming/StandardLayouts.cs index 3e1b751262..338d12f531 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/Theming/StandardLayouts.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/Theming/StandardLayouts.cs @@ -4,6 +4,7 @@ { public const string Application = "Application"; public const string Account = "Account"; + public const string Public = "Public"; public const string Empty = "Empty"; } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/Theming/ThemeExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/Theming/ThemeExtensions.cs index ad6e5f49d1..9583fd57cf 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/Theming/ThemeExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/Theming/ThemeExtensions.cs @@ -12,9 +12,14 @@ return theme.GetLayout(StandardLayouts.Account, fallbackToDefault); } + public static string GetPublicLayout(this ITheme theme, bool fallbackToDefault = true) + { + return theme.GetLayout(StandardLayouts.Public, fallbackToDefault); + } + public static string GetEmptyLayout(this ITheme theme, bool fallbackToDefault = true) { return theme.GetLayout(StandardLayouts.Empty, fallbackToDefault); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj index fde96ac65c..53e3c7f503 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj @@ -29,7 +29,7 @@ - + diff --git a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj index bd5cffe848..9f028d31ee 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj +++ b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj @@ -21,7 +21,7 @@ - + diff --git a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs b/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs index 024fc3a258..e0f7ec50ad 100644 --- a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs +++ b/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs @@ -27,6 +27,7 @@ using System; using System.Reflection; using Autofac.Builder; using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Autofac; using Volo.Abp.Modularity; namespace Autofac.Extensions.DependencyInjection @@ -116,6 +117,7 @@ namespace Autofac.Extensions.DependencyInjection .RegisterGeneric(service.ImplementationType) .As(service.ServiceType) .ConfigureLifecycle(service.Lifetime) + .FindConstructorsWith(new AbpAutofacConstructorFinder()) .ConfigureAbpConventions(moduleContainer, registrationActionList); } else @@ -124,6 +126,7 @@ namespace Autofac.Extensions.DependencyInjection .RegisterType(service.ImplementationType) .As(service.ServiceType) .ConfigureLifecycle(service.Lifetime) + .FindConstructorsWith(new AbpAutofacConstructorFinder()) .ConfigureAbpConventions(moduleContainer, registrationActionList); } } diff --git a/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj b/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj index 2032464676..ec9e4c0364 100644 --- a/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj +++ b/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj @@ -15,8 +15,8 @@ - - + + diff --git a/framework/src/Volo.Abp.Autofac/Volo/Abp/Autofac/AbpAutofacConstructorFinder.cs b/framework/src/Volo.Abp.Autofac/Volo/Abp/Autofac/AbpAutofacConstructorFinder.cs new file mode 100644 index 0000000000..a9d0b736a2 --- /dev/null +++ b/framework/src/Volo.Abp.Autofac/Volo/Abp/Autofac/AbpAutofacConstructorFinder.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Concurrent; +using System.Reflection; +using Autofac.Core.Activators.Reflection; + +namespace Volo.Abp.Autofac +{ + public class AbpAutofacConstructorFinder : IConstructorFinder + { + private const BindingFlags DeclaredOnlyPublicFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly; //Remove static constructor, BindingFlags.Static + + private readonly Func _finder; + + private static readonly ConcurrentDictionary DefaultPublicConstructorsCache = new ConcurrentDictionary(); + + public AbpAutofacConstructorFinder() + : this(GetDefaultPublicConstructors) + { + } + + public AbpAutofacConstructorFinder(Func finder) + { + _finder = finder ?? throw new ArgumentNullException(nameof(finder)); + } + + public ConstructorInfo[] FindConstructors(Type targetType) + { + return _finder(targetType); + } + + private static ConstructorInfo[] GetDefaultPublicConstructors(Type type) + { + var retval = DefaultPublicConstructorsCache.GetOrAdd(type, t => t.GetConstructors(DeclaredOnlyPublicFlags)); + + if (retval.Length == 0) + { + throw new NoConstructorsFoundException(type); + } + + return retval; + } + } +} diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index 59070f32b0..3d6a1df7f8 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -176,7 +176,7 @@ namespace Volo.Abp.BlazoriseUI protected virtual int PageSize { get; } = LimitedResultRequestDto.DefaultMaxResultCount; - protected int CurrentPage; + protected int CurrentPage = 1; protected string CurrentSorting; protected int? TotalCount; protected TGetListInput GetListInput = new TGetListInput(); @@ -259,7 +259,7 @@ namespace Volo.Abp.BlazoriseUI if (GetListInput is IPagedResultRequest pagedResultRequestInput) { - pagedResultRequestInput.SkipCount = CurrentPage * PageSize; + pagedResultRequestInput.SkipCount = (CurrentPage - 1) * PageSize; } if (GetListInput is ILimitedResultRequest limitedResultRequestInput) @@ -270,13 +270,22 @@ namespace Volo.Abp.BlazoriseUI return Task.CompletedTask; } + protected virtual async Task SearchEntitiesAsync() + { + CurrentPage = 1; + + await GetEntitiesAsync(); + + StateHasChanged(); + } + protected virtual async Task OnDataGridReadAsync(DataGridReadDataEventArgs e) { CurrentSorting = e.Columns .Where(c => c.Direction != SortDirection.None) .Select(c => c.Field + (c.Direction == SortDirection.Descending ? " DESC" : "")) .JoinAsString(","); - CurrentPage = e.Page - 1; + CurrentPage = e.Page; await GetEntitiesAsync(); diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/SubmitButton.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/SubmitButton.razor new file mode 100644 index 0000000000..140aa6502e --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/SubmitButton.razor @@ -0,0 +1,10 @@ + diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/SubmitButton.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/SubmitButton.razor.cs new file mode 100644 index 0000000000..95cbdedd20 --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/SubmitButton.razor.cs @@ -0,0 +1,73 @@ +using System; +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 SubmitButton : ComponentBase + { + protected bool Submiting { get; set; } + + [Parameter] + public string Form { get; set; } + + [Parameter] + public ButtonType Type { get; set; } = ButtonType.Submit; + + [Parameter] + public Color Color { get; set; } = Color.Primary; + + [Parameter] + public bool PreventDefaultOnSubmit { get; set; } = true; + + [Parameter] + public bool Block { get; set; } + + [Parameter] + public bool? Disabled { get; set; } + + [Parameter] + public string SaveResourceKey { get; set; } = "Save"; + + [Parameter] + public EventCallback Clicked { get; set; } + + [Parameter] + public RenderFragment ChildContent { get; set; } + + [Inject] + protected IStringLocalizer StringLocalizer { get; set; } + + protected bool IsDisabled + => Disabled == true || Submiting; + + protected bool IsLoading + => Submiting; + + protected string SaveString + => StringLocalizer[SaveResourceKey]; + + protected virtual async Task OnClickedHandler() + { + try + { + Submiting = true; + + await Clicked.InvokeAsync(null); + } + catch (Exception) + { + throw; + } + finally + { + Submiting = false; + + await InvokeAsync(StateHasChanged); + } + } + } +} diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo.Abp.BlobStoring.Aliyun.csproj b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo.Abp.BlobStoring.Aliyun.csproj index f3f8249f50..25c486d79f 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo.Abp.BlobStoring.Aliyun.csproj +++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo.Abp.BlobStoring.Aliyun.csproj @@ -16,7 +16,7 @@ - + diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/Volo.Abp.BlobStoring.Aws.csproj b/framework/src/Volo.Abp.BlobStoring.Aws/Volo.Abp.BlobStoring.Aws.csproj index 796da8aa26..d36d2bfbf3 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aws/Volo.Abp.BlobStoring.Aws.csproj +++ b/framework/src/Volo.Abp.BlobStoring.Aws/Volo.Abp.BlobStoring.Aws.csproj @@ -17,8 +17,8 @@ - - + + diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/Volo.Abp.BlobStoring.Azure.csproj b/framework/src/Volo.Abp.BlobStoring.Azure/Volo.Abp.BlobStoring.Azure.csproj index 6434e1d43c..73a8116e46 100644 --- a/framework/src/Volo.Abp.BlobStoring.Azure/Volo.Abp.BlobStoring.Azure.csproj +++ b/framework/src/Volo.Abp.BlobStoring.Azure/Volo.Abp.BlobStoring.Azure.csproj @@ -16,7 +16,7 @@ - + diff --git a/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj b/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj index ea4a0dc73e..df72953a10 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj +++ b/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj @@ -15,10 +15,10 @@ - - - - + + + + diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs index 664ffd182b..ef8385d479 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs @@ -39,6 +39,11 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.Module "MyCompanyName.MyProjectName.Blazor" )); + steps.Add(new RemoveProjectFromSolutionStep( + "MyCompanyName.MyProjectName.Blazor.Host", + projectFolderPath: "/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host" + )); + steps.Add(new RemoveProjectFromSolutionStep( "MyCompanyName.MyProjectName.Web.Host", projectFolderPath: "/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host" diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs index de25b11da7..ee736f3aa0 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs @@ -7,6 +7,8 @@ using System.Threading.Tasks; using System.Xml; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Volo.Abp.Cli.Args; +using Volo.Abp.Cli.Commands; using Volo.Abp.Cli.Http; using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.Cli.Utils; @@ -25,19 +27,22 @@ namespace Volo.Abp.Cli.ProjectModification protected DerivedClassFinder ModuleClassFinder { get; } protected ModuleClassDependcyAdder ModuleClassDependcyAdder { get; } protected IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } + public BundleCommand BundleCommand { get; } public ProjectNugetPackageAdder( IJsonSerializer jsonSerializer, ProjectNpmPackageAdder npmPackageAdder, DerivedClassFinder moduleClassFinder, ModuleClassDependcyAdder moduleClassDependcyAdder, - IRemoteServiceExceptionHandler remoteServiceExceptionHandler) + IRemoteServiceExceptionHandler remoteServiceExceptionHandler, + BundleCommand bundleCommand) { JsonSerializer = jsonSerializer; NpmPackageAdder = npmPackageAdder; ModuleClassFinder = moduleClassFinder; ModuleClassDependcyAdder = moduleClassDependcyAdder; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; + BundleCommand = bundleCommand; Logger = NullLogger.Instance; } @@ -50,14 +55,14 @@ namespace Volo.Abp.Cli.ProjectModification ); } - public Task AddAsync(string projectFile, NugetPackageInfo package, string version = null, + public async Task AddAsync(string projectFile, NugetPackageInfo package, string version = null, bool useDotnetCliToInstall = true) { var projectFileContent = File.ReadAllText(projectFile); if (projectFileContent.Contains($"\"{package.Name}\"")) { - return Task.CompletedTask; + return; } if (version == null) @@ -94,11 +99,14 @@ namespace Volo.Abp.Cli.ProjectModification } ModuleClassDependcyAdder.Add(moduleFiles.First(), package.ModuleClass); + } - Logger.LogInformation("Successfully installed."); + if (package.Target == NuGetPackageTarget.Blazor) + { + await RunBundleForBlazorAsync(projectFile); } - return Task.CompletedTask; + Logger.LogInformation("Successfully installed."); } private Task AddUsingDotnetCli(NugetPackageInfo package, string version = null) @@ -185,5 +193,15 @@ namespace Volo.Abp.Cli.ProjectModification return JsonSerializer.Deserialize(responseContent); } } + + protected virtual async Task RunBundleForBlazorAsync(string projectFile) + { + var args = new CommandLineArgs("bundle"); + + args.Options.Add(BundleCommand.Options.WorkingDirectory.Short, Path.GetDirectoryName(projectFile)); + args.Options.Add(BundleCommand.Options.ForceBuild.Short, string.Empty); + + await BundleCommand.ExecuteAsync(args); + } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index 3bcdc34bc9..dc13511896 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Net; using System.Threading.Tasks; using Volo.Abp.Cli.Args; +using Volo.Abp.Cli.Bundling; using Volo.Abp.Cli.Commands; using Volo.Abp.Cli.Commands.Services; using Volo.Abp.Cli.Http; @@ -35,6 +36,7 @@ namespace Volo.Abp.Cli.ProjectModification public NugetPackageToLocalReferenceConverter NugetPackageToLocalReferenceConverter { get; } public AngularModuleSourceCodeAdder AngularModuleSourceCodeAdder { get; } public NewCommand NewCommand { get; } + public BundleCommand BundleCommand { get; } public SolutionModuleAdder( IJsonSerializer jsonSerializer, @@ -49,7 +51,8 @@ namespace Volo.Abp.Cli.ProjectModification SolutionFileModifier solutionFileModifier, NugetPackageToLocalReferenceConverter nugetPackageToLocalReferenceConverter, AngularModuleSourceCodeAdder angularModuleSourceCodeAdder, - NewCommand newCommand) + NewCommand newCommand, + BundleCommand bundleCommand) { JsonSerializer = jsonSerializer; ProjectNugetPackageAdder = projectNugetPackageAdder; @@ -64,6 +67,7 @@ namespace Volo.Abp.Cli.ProjectModification NugetPackageToLocalReferenceConverter = nugetPackageToLocalReferenceConverter; AngularModuleSourceCodeAdder = angularModuleSourceCodeAdder; NewCommand = newCommand; + BundleCommand = bundleCommand; Logger = NullLogger.Instance; } @@ -118,15 +122,33 @@ namespace Volo.Abp.Cli.ProjectModification await AddAngularPackages(solutionFile, module); } + await RunBundleForBlazorAsync(projectFiles, module); + ModifyDbContext(projectFiles, module, startupProject, skipDbMigrations); } + private async Task RunBundleForBlazorAsync(string[] projectFiles, ModuleWithMastersInfo module) + { + var blazorProject = projectFiles.FirstOrDefault(f => f.EndsWith(".Blazor.csproj")); + + if (blazorProject == null || !module.NugetPackages.Any(np=> np.Target == NuGetPackageTarget.Blazor)) + { + return; + } + + var args = new CommandLineArgs("bundle"); + + args.Options.Add(BundleCommand.Options.WorkingDirectory.Short, Path.GetDirectoryName(blazorProject)); + args.Options.Add(BundleCommand.Options.ForceBuild.Short, string.Empty); + + await BundleCommand.ExecuteAsync(args); + } + private async Task RemoveUnnecessaryProjectsAsync(string solutionDirectory, ModuleWithMastersInfo module, string[] projectFiles) { var moduleDirectory = Path.Combine(solutionDirectory, "modules", module.Name); - var moduleSolutionFile = - Directory.GetFiles(moduleDirectory, "*.sln", SearchOption.TopDirectoryOnly).First(); + var moduleSolutionFile = Directory.GetFiles(moduleDirectory, "*.sln", SearchOption.TopDirectoryOnly).First(); var isProjectTiered = await IsProjectTiered(projectFiles); if (!projectFiles.Any(p => p.EndsWith(".Blazor.csproj"))) @@ -149,6 +171,7 @@ namespace Volo.Abp.Cli.ProjectModification { await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.EntityFrameworkCore, isProjectTiered); await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".EntityFrameworkCore.Tests"); + await ChangeDomainTestReferenceToMongoDB(module, moduleSolutionFile); } } @@ -163,6 +186,11 @@ namespace Volo.Abp.Cli.ProjectModification foreach (var package in packages) { + if (target == NuGetPackageTarget.Web && package.Name.StartsWith("Volo.Abp.Account")) + { + continue; + } + await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, package.Name); var projectPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), "src", package.Name); @@ -178,12 +206,27 @@ namespace Volo.Abp.Cli.ProjectModification { var srcPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), targetFolder); var projectFolderPath = Directory.GetDirectories(srcPath).FirstOrDefault(d=> d.EndsWith(postFix)); - await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, Path.GetDirectoryName(projectFolderPath)); + await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, new DirectoryInfo(projectFolderPath).Name); if (Directory.Exists(projectFolderPath)) { Directory.Delete(projectFolderPath, true); } + + } + + private async Task ChangeDomainTestReferenceToMongoDB(ModuleWithMastersInfo module, string moduleSolutionFile) + { + var srcPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), "test"); + var projectFolderPath = Directory.GetDirectories(srcPath).FirstOrDefault(d=> d.EndsWith("Domain.Tests")); + + var csprojFile = Directory.GetFiles(projectFolderPath).First(p => p.EndsWith(".csproj")); + var moduleFile = Directory.GetFiles(projectFolderPath).First(p => p.EndsWith("DomainTestModule.cs")); + + File.WriteAllText(csprojFile, File.ReadAllText(csprojFile).Replace("EntityFrameworkCore","MongoDB")); + File.WriteAllText(moduleFile, File.ReadAllText(moduleFile) + .Replace(".EntityFrameworkCore;",".MongoDB;") + .Replace("EntityFrameworkCoreTestModule","MongoDbTestModule")); } private async Task AddAngularPackages(string solutionFilePath, ModuleWithMastersInfo module) @@ -256,7 +299,9 @@ namespace Volo.Abp.Cli.ProjectModification ); } - await DeleteAppAndDemoFolderAsync(targetModuleFolder); + await DeleteRedundantHostProjects(targetModuleFolder,"app"); + await DeleteRedundantHostProjects(targetModuleFolder,"demo"); + await DeleteRedundantHostProjects(targetModuleFolder,"host"); if (module.MasterModuleInfos == null) { @@ -281,24 +326,22 @@ namespace Volo.Abp.Cli.ProjectModification await NewCommand.ExecuteAsync(args); } - private async Task DeleteAppAndDemoFolderAsync(string targetModuleFolder) + private async Task DeleteRedundantHostProjects(string targetModuleFolder, string folderName) { - var appFolder = Path.Combine(targetModuleFolder, "app"); - if (Directory.Exists(appFolder)) - { - Directory.Delete(appFolder, true); - } + var moduleSolutionFile = Directory.GetFiles(targetModuleFolder, "*.sln", SearchOption.TopDirectoryOnly).First(); - var demoFolder = Path.Combine(targetModuleFolder, "demo"); - if (Directory.Exists(demoFolder)) + var folder = Path.Combine(targetModuleFolder, folderName); + if (Directory.Exists(folder)) { - Directory.Delete(demoFolder, true); - } + var projects = Directory.GetDirectories(folder); - var hostFolder = Path.Combine(targetModuleFolder, "host"); - if (Directory.Exists(hostFolder)) - { - Directory.Delete(hostFolder, true); + foreach (var project in projects) + { + await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, + new DirectoryInfo(project).Name); + } + + Directory.Delete(folder, true); } } @@ -444,73 +487,76 @@ namespace Volo.Abp.Cli.ProjectModification private async Task GetEmptyModuleProjectInfoAsync(string moduleName, bool newProTemplate = false) { - var module = new ModuleWithMastersInfo(); + var module = new ModuleWithMastersInfo + { + Name = moduleName, + DisplayName = moduleName, + MasterModuleInfos = new List() + }; - module.Name = moduleName; - module.DisplayName = moduleName; - module.EfCoreConfigureMethodName = $"{module.Name}.EntityFrameworkCore:Configure{module.Name}"; - module.MasterModuleInfos = new List(); + var moduleProjectName = module.Name.Split('.').Last(); + module.EfCoreConfigureMethodName = $"{module.Name}.EntityFrameworkCore:Configure{moduleProjectName}"; module.NugetPackages = new List { new NugetPackageInfo { Name = $"{module.Name}.Application", - ModuleClass = $"{module.Name}.{module.Name}ApplicationModule", + ModuleClass = $"{module.Name}.{moduleProjectName}ApplicationModule", Target = NuGetPackageTarget.Application }, new NugetPackageInfo { Name = $"{module.Name}.Application.Contracts", - ModuleClass = $"{module.Name}.{module.Name}ApplicationContractsModule", + ModuleClass = $"{module.Name}.{moduleProjectName}ApplicationContractsModule", Target = NuGetPackageTarget.ApplicationContracts }, new NugetPackageInfo { Name = $"{module.Name}.Blazor", - ModuleClass = $"{module.Name}.Blazor.{module.Name}BlazorModule", + ModuleClass = $"{module.Name}.Blazor.{moduleProjectName}BlazorModule", Target = NuGetPackageTarget.Blazor }, new NugetPackageInfo { Name = $"{module.Name}.Domain", - ModuleClass = $"{module.Name}.{module.Name}DomainModule", + ModuleClass = $"{module.Name}.{moduleProjectName}DomainModule", Target = NuGetPackageTarget.Domain }, new NugetPackageInfo { Name = $"{module.Name}.Domain.Shared", - ModuleClass = $"{module.Name}.{module.Name}DomainSharedModule", + ModuleClass = $"{module.Name}.{moduleProjectName}DomainSharedModule", Target = NuGetPackageTarget.DomainShared }, new NugetPackageInfo { Name = $"{module.Name}.EntityFrameworkCore", - ModuleClass = $"{module.Name}.EntityFrameworkCore.{module.Name}EntityFrameworkCoreModule", + ModuleClass = $"{module.Name}.EntityFrameworkCore.{moduleProjectName}EntityFrameworkCoreModule", Target = NuGetPackageTarget.EntityFrameworkCore }, new NugetPackageInfo { Name = $"{module.Name}.HttpApi", - ModuleClass = $"{module.Name}.{module.Name}HttpApiModule", + ModuleClass = $"{module.Name}.{moduleProjectName}HttpApiModule", Target = NuGetPackageTarget.HttpApi }, new NugetPackageInfo { Name = $"{module.Name}.HttpApi.Client", - ModuleClass = $"{module.Name}.{module.Name}HttpApiClientModule", + ModuleClass = $"{module.Name}.{moduleProjectName}HttpApiClientModule", Target = NuGetPackageTarget.HttpApiClient }, new NugetPackageInfo { Name = $"{module.Name}.MongoDB", - ModuleClass = $"{module.Name}.MongoDB.{module.Name}MongoDbModule", + ModuleClass = $"{module.Name}.MongoDB.{moduleProjectName}MongoDbModule", Target = NuGetPackageTarget.MongoDB }, new NugetPackageInfo { Name = $"{module.Name}.Web", - ModuleClass = $"{module.Name}.Web.{module.Name}WebModule", + ModuleClass = $"{module.Name}.Web.{moduleProjectName}WebModule", Target = NuGetPackageTarget.Web }, }; @@ -523,7 +569,9 @@ namespace Volo.Abp.Cli.ProjectModification protected virtual async Task IsProjectTiered(string[] projectFiles) { return projectFiles.Select(ProjectFileNameHelper.GetAssemblyNameFromProjectPath) - .Any(p => p.EndsWith(".IdentityServer") || p.EndsWith(".HttpApi.Host")); + .Any(p =>p.EndsWith(".HttpApi.Host")) + && projectFiles.Select(ProjectFileNameHelper.GetAssemblyNameFromProjectPath) + .Any(p => p.EndsWith(".IdentityServer")); } } } diff --git a/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj b/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj index 887929dfa3..3926f8f298 100644 --- a/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj +++ b/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj @@ -26,10 +26,10 @@ - + - - - + + + diff --git a/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj b/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj index a2fd749d0e..0e267324af 100644 --- a/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj +++ b/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj @@ -19,7 +19,7 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj index 8e325342d4..8616838cc0 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj @@ -19,7 +19,7 @@ - + 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 d75133cb07..0d44fd1249 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 @@ -30,7 +30,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore private readonly IDbContextProvider _dbContextProvider; private readonly Lazy> _entityOptionsLazy; - protected virtual IGuidGenerator GuidGenerator { get; set; } + public virtual IGuidGenerator GuidGenerator { get; set; } public EfCoreRepository(IDbContextProvider dbContextProvider) { diff --git a/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj b/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj index 68ce50ec9d..772774a77e 100644 --- a/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj +++ b/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/FluentObjectValidationContributor.cs b/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/FluentObjectValidationContributor.cs index e699e0093a..ccc290f354 100644 --- a/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/FluentObjectValidationContributor.cs +++ b/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/FluentObjectValidationContributor.cs @@ -26,7 +26,10 @@ namespace Volo.Abp.FluentValidation return; } - var result = validator.Validate(context.ValidatingObject); + var result = validator.Validate((IValidationContext) Activator.CreateInstance( + typeof(ValidationContext<>).MakeGenericType(context.ValidatingObject.GetType()), + context.ValidatingObject)); + if (!result.IsValid) { context.Errors.AddRange( diff --git a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeature.cs b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeature.cs index c7fc9304a8..de9ae0232a 100644 --- a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeature.cs +++ b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeature.cs @@ -1,4 +1,4 @@ -using JetBrains.Annotations; +using JetBrains.Annotations; namespace Volo.Abp.GlobalFeatures { diff --git a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalModuleFeaturesDictionary.cs b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalModuleFeaturesDictionary.cs index b89bf2fe36..9952b0c5cc 100644 --- a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalModuleFeaturesDictionary.cs +++ b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalModuleFeaturesDictionary.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using JetBrains.Annotations; namespace Volo.Abp.GlobalFeatures diff --git a/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj b/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj index 3bd6638f67..4ec9d0a3b5 100644 --- a/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj +++ b/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj b/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj index 2000ca7ae4..9b1a1c9caf 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj +++ b/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj b/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj index 2a0b576f98..4f8a94fe8e 100644 --- a/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj +++ b/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj @@ -9,7 +9,7 @@ - + diff --git a/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj b/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj index ddded71dce..edc3752d47 100644 --- a/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj +++ b/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj b/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj index 1b2f266637..6f25c447f0 100644 --- a/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj +++ b/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj @@ -19,7 +19,7 @@ - + diff --git a/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj b/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj index e2f589b399..aa487ffc4e 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj +++ b/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs index 33dd44fbb0..6733688a91 100644 --- a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs @@ -56,7 +56,6 @@ namespace Volo.Abp.ObjectExtending.Modularity { AddLookupTextProperty(propertyInfo); propertyInfo.UI.OnTable.IsVisible = false; - propertyInfo.Api.OnGet.IsAvailable = false; } return this; } diff --git a/framework/src/Volo.Abp.Quartz/Volo.Abp.Quartz.csproj b/framework/src/Volo.Abp.Quartz/Volo.Abp.Quartz.csproj index 198d2479e4..0fcc4da9f2 100644 --- a/framework/src/Volo.Abp.Quartz/Volo.Abp.Quartz.csproj +++ b/framework/src/Volo.Abp.Quartz/Volo.Abp.Quartz.csproj @@ -15,9 +15,9 @@ - - - + + + diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj b/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj index a21be8bdfa..abec7828ab 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj +++ b/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj b/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj index bbd09c5fed..e9d5e1afe5 100644 --- a/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj +++ b/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj @@ -2,7 +2,7 @@ - + netstandard2.0 Volo.Abp.Swashbuckle @@ -15,7 +15,7 @@ - + diff --git a/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj b/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj index 7885cefbaf..af14f9e42e 100644 --- a/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj +++ b/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateLocalizer.cs b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateLocalizer.cs index c3c67dd194..4e4a1e4833 100644 --- a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateLocalizer.cs +++ b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateLocalizer.cs @@ -46,5 +46,20 @@ namespace Volo.Abp.TextTemplating var args = arguments.Skip(1).Where(x => x != null && !x.ToString().IsNullOrWhiteSpace()).ToArray(); return args.Any() ? _localizer[name.ToString(), args] : _localizer[name.ToString()]; } + + public int RequiredParameterCount => 1; + + public int ParameterCount => ScriptFunctionCall.MaximumParameterCount - 1; + + public ScriptVarParamKind VarParamKind => ScriptVarParamKind.Direct; + + public Type ReturnType => typeof(object); + + public ScriptParameterInfo GetParameterInfo(int index) + { + return index == 0 + ? new ScriptParameterInfo(typeof(string), "template_name") + : new ScriptParameterInfo(typeof(object), "value"); + } } } diff --git a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs index 3323ddfd31..981d1f8819 100644 --- a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs +++ b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs @@ -1,4 +1,5 @@ -using System.Collections.Concurrent; +using System; +using System.Collections.Concurrent; using System.Threading; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; @@ -52,7 +53,13 @@ namespace Volo.Abp.TextTemplating.VirtualFiles var fileInfo = VirtualFileProvider.GetFileInfo(virtualPath); if (!fileInfo.Exists) { - throw new AbpException("Could not find a file/folder at the location: " + virtualPath); + var directoryContents = VirtualFileProvider.GetDirectoryContents(virtualPath); + if (!directoryContents.Exists) + { + throw new AbpException("Could not find a file/folder at the location: " + virtualPath); + } + + fileInfo = new VirtualDirectoryFileInfo(virtualPath, virtualPath, DateTimeOffset.UtcNow); } if (fileInfo.IsDirectory) diff --git a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/VirtualFolderLocalizedTemplateContentReader.cs b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/VirtualFolderLocalizedTemplateContentReader.cs index 638a7db190..6fc7ff4847 100644 --- a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/VirtualFolderLocalizedTemplateContentReader.cs +++ b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/VirtualFolderLocalizedTemplateContentReader.cs @@ -11,18 +11,18 @@ namespace Volo.Abp.TextTemplating.VirtualFiles private Dictionary _dictionary; public async Task ReadContentsAsync( - IVirtualFileProvider virtualFileProvider, + IVirtualFileProvider virtualFileProvider, string virtualPath) { _dictionary = new Dictionary(); - var directoryInfo = virtualFileProvider.GetFileInfo(virtualPath); - if (!directoryInfo.IsDirectory) + var directoryContents = virtualFileProvider.GetDirectoryContents(virtualPath); + if (!directoryContents.Exists) { - throw new AbpException("Given virtual path is not a folder: " + virtualPath); + throw new AbpException("Could not find a folder at the location: " + virtualPath); } - foreach (var file in virtualFileProvider.GetDirectoryContents(virtualPath)) + foreach (var file in directoryContents) { if (file.IsDirectory) { @@ -43,4 +43,4 @@ namespace Volo.Abp.TextTemplating.VirtualFiles return _dictionary.GetOrDefault(cultureName); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj b/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj index 53ef23fd62..c0a9f0b271 100644 --- a/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj +++ b/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj @@ -26,7 +26,7 @@ - + diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj index c5bc024d75..7fa17a9fe7 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj @@ -9,7 +9,7 @@ - + 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 e1ce323dee..0291900d37 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": "^4.0.0", + "@abp/aspnetcore.mvc.ui.theme.shared": "^4.0.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 a39a2aa6c1..09904a5e99 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@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.0.tgz#ba896056e9df5ac58e108df96996fbb2ca7a1a15" - integrity sha512-3RNn6VrNA+cqnPBoSbiCazN05cC2rhcRFMMxkEte+LImGbGOsxc4MflzHg5On1ExCGdqko8Axbw/ydy44Ak4Hw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.0.0" - "@abp/bootstrap" "~4.0.0" - "@abp/bootstrap-datepicker" "~4.0.0" - "@abp/datatables.net-bs4" "~4.0.0" - "@abp/font-awesome" "~4.0.0" - "@abp/jquery-form" "~4.0.0" - "@abp/jquery-validation-unobtrusive" "~4.0.0" - "@abp/lodash" "~4.0.0" - "@abp/luxon" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/select2" "~4.0.0" - "@abp/sweetalert" "~4.0.0" - "@abp/timeago" "~4.0.0" - "@abp/toastr" "~4.0.0" - -"@abp/aspnetcore.mvc.ui@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.0.tgz#68502177a05f6ce7191a09b06a18c5b5dfab425d" - integrity sha512-tYHUWMwnwInrGSzC/OdN6bH/VHZEz5DP3rx2U6fcb0I5GvvRdQZxVgUvmWn6DeMA3PG10Gra4SfkhZqRQq9rjQ== +"@abp/aspnetcore.mvc.ui.theme.shared@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.1.tgz#cd9d0eb11309c597dffd26277cd1bd7c5b1e0e2f" + integrity sha512-QGoCN/my0eAfa4tx5ytDxArIoz2i58jFFVUGso1Lekn54JvSt+WLz2p3uyTGatZ03Bp9836elhFnIopn12WvBw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.0.1" + "@abp/bootstrap" "~4.0.1" + "@abp/bootstrap-datepicker" "~4.0.1" + "@abp/datatables.net-bs4" "~4.0.1" + "@abp/font-awesome" "~4.0.1" + "@abp/jquery-form" "~4.0.1" + "@abp/jquery-validation-unobtrusive" "~4.0.1" + "@abp/lodash" "~4.0.1" + "@abp/luxon" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/select2" "~4.0.1" + "@abp/sweetalert" "~4.0.1" + "@abp/timeago" "~4.0.1" + "@abp/toastr" "~4.0.1" + +"@abp/aspnetcore.mvc.ui@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.1.tgz#6490c147a56e4f7055d2ca77f20baf1f60f56867" + integrity sha512-4B3icJrlpuZgMaX52ninyaenH7zLwepePEscDrLaFY9wyonKpZ2zh+xplnyM6vjNd+PhErWuA2+ssCswFhrJ3A== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -36,145 +36,145 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/bootstrap-datepicker@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.0.tgz#cdbd2c388c6d7ce8c6d72443038975063e6c6d02" - integrity sha512-hauH8VhpC8cxv1wCR6bVBcNqZepftdBXxEVID7TSAqgNyWjm/CrJqWLI+A0nnkG3IHoIm9D22iF47BamuYHptw== +"@abp/bootstrap-datepicker@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.1.tgz#aad891263edff66f816e003ba4fa7f8acfe8e0b6" + integrity sha512-S0oaVZmXsDcOJLAyoGY0TvP/7bZx0GHIbU9BIhIL2Wl74HYaokjkTr6/IleIek9YeiF2vm9FkrUP1dKH/4f7Gg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.0.tgz#04174f18055f76f936e6fb73e5ff71ffa08a8528" - integrity sha512-Tmr0yoSWg7XHl02X5wv04CvYcL8KCpX8u6YGJj31jRZxUTeCvs5ETXlepOWcdxPQqi/4olXv5B9GEz5S9l5nZA== +"@abp/bootstrap@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.1.tgz#3e41bdf9b3e9f8c497b9fafe22a4851d0401b31b" + integrity sha512-GoSaNWvswRHVoUrq7xClFQYtwqIlyS/vp/TdY+j5FFZP7ud89+ZGpdNqYqq5l9/6aaYa7v4b9mNTZ/1JRzAOYg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.0.tgz#65e76c697e62162717e0edabf7edacc4228e682a" - integrity sha512-xcTTBFjLFZ9Trv2x9Y/c3XKezIx+x3MTXUD98QJPf1aR7T43TE/tLHRxdRfW3R8ka0O1wmlYshpkaw5pYNsj5w== +"@abp/core@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.1.tgz#1df32bc058f45571605670ca81c226a1bd87400c" + integrity sha512-8UT5lwqV/luVG/SxePSTD2FRbZXwXv3cZJKjw+gpBjhD0slWrh51XEOHsM8ciTuhcvV/tsqVU9nXckDMdO58fw== dependencies: - "@abp/utils" "^4.0.0" + "@abp/utils" "^4.0.1" -"@abp/datatables.net-bs4@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.0.tgz#fe737e054f6ba35e787a1cda185af2788ef86d39" - integrity sha512-mz7xZdzX1nlFyX7vNzB5w3RkqZ0IHrPgsXGOB7OCTKMRshDFVH2O51Oy4qoLDOXoTVeahHtR9v8thEWFR1SnZg== +"@abp/datatables.net-bs4@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.1.tgz#7538baad0eff24eca7f4246d020852f83139f645" + integrity sha512-S52jNPF4if68V+P/33NrtGPJXf6xrqgyZzz9b7qBR7HuUm3Nsn7bAslh3JNduNec/sFuE4Utl/xsFHZNjBWEog== dependencies: - "@abp/datatables.net" "~4.0.0" + "@abp/datatables.net" "~4.0.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.0.tgz#88ae5f1a6068fba55927e59f113686508e9553cb" - integrity sha512-JYTfMA1zlBNGiQHAiZiTj5ka6B6vq5k2jqsoLHup4pD9jpKwKRBGtltVsWoEnetd9eEbp4SaV/FCuh3RzmV6Pw== +"@abp/datatables.net@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.1.tgz#eb89716a37351c41b5bccfc2db88fc7ceb991a26" + integrity sha512-APFLui0w8MqsBWqP/K0QkT5cBq5SsWiqMaIGTXQKinMVLV597sUszrlhe1ISU2PqeD7iX6pCZNNOTI1NEUn9/Q== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" datatables.net "^1.10.21" -"@abp/font-awesome@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.0.tgz#6e1e4bd1175a0b8d3b095e215c07e66ad0e42e19" - integrity sha512-kHfZ45UMDWSRk1gTV/BwVfSoXksJ9UlnD3SelTGeAkvbDqtDllqlp9y6c3qQcmZUE348Xl4hDTkU8upZwswCFQ== +"@abp/font-awesome@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.1.tgz#8a9d83b2c2adfcd5abcbd9c31c315460d44a321e" + integrity sha512-+6+m/DKMnfkeQiWUsMlB6Da8u6yREyN2oQYGYhSRAK8419ym8RHHrqKJv2AClI4iLq2ppHZj8WF84+SeoCekRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.0.tgz#3afb41eb16d62e32c31a29c6a866f634a5a20cd8" - integrity sha512-cQq8PgzHfpK9/LxmjlnMsDn85wWvEOqjyLaepHFpTTt0341auSgXNwhp7rk71AUHD1lP3c9ALctmqu+gYmh9ag== +"@abp/jquery-form@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.1.tgz#6dc1922b2800dd635f20881a82e08104a1dd1bb5" + integrity sha512-JMBZYu/MI/GjaLTBOMB5iv8cagnLpReDULNC3r6tLNNqB1R8f3Cg1T7nF4YCuU9SYMqis1P/AuE4oEh+4rQdAQ== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#c3674d2b01b3c524de4c3fac1c6ae3657857ee7b" - integrity sha512-OGibIdw0ogjp6VQIebHM7OtMT36pjLKRrOHyCVpTmQ7NzDODV5ptG83vOnt5nFG0y9XFrOt8cnHrrd+K1Bpo/Q== +"@abp/jquery-validation-unobtrusive@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.1.tgz#4142ca31c0830fe24a1467e8cf13b55ba9d7c1dd" + integrity sha512-rdSRTcdKCHmarbrVgmPYdTiJ0G/aFKd+dr0krO7fALPTuQKChbDnHOO4/JvQSc+cd9faxa8c6ZWvlHdsof23tQ== dependencies: - "@abp/jquery-validation" "~4.0.0" + "@abp/jquery-validation" "~4.0.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.0.tgz#0a101937f89ff398317142b5271fa9a1de6571c2" - integrity sha512-4nzvhAktEINpQ2H+Hy7TOxxojTmTEm5dBTbHs1vbCWUuF0OTpouZWbMZDESdP0ZbjXcQ+vhwuM4e/pm/PeaHyQ== +"@abp/jquery-validation@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.1.tgz#74e7d795468c6986f2db15662631fcd4f67c679e" + integrity sha512-FX26aQCsMBdVWAJb7S37Lt7KoHAEHoYguh/qfZIARCpOYOOWvxfDz1wTrmADUkqdillqEiCeD/Imj8bYH9Faaw== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-validation "^1.19.2" -"@abp/jquery@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.0.tgz#00d24678b573bcc2fb14d8337ccdbf697b59d43b" - integrity sha512-gXLK97IvAZriNlG8e0qJcd7MvnpshJQURb4lg8VYibD7Fs/OBeHSAWM2Adgi3H9DnQL8XEUlWf487FSz4RC/Yg== +"@abp/jquery@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.1.tgz#aa554accb16600fd586c3a4f088040cd26d0bde8" + integrity sha512-MtiRKOLyjEWux+whPP3+zwPbpj8or756JtgjnwOTDB9tp9HLCYUaskt+oalYPvob24nDZcNu2RnMALYdCVhZAQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" jquery "~3.5.1" -"@abp/lodash@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.0.tgz#fe76d09517f6b1adf18edde94a31e13b003329dc" - integrity sha512-uitn5uYlb9xShRtV4AFOgp3lu2kADGMD4+a4fy5r4umlPM2uuMo0wMhzyYdBIG64JC5oNaqAzOwZyhhnn+HGJg== +"@abp/lodash@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.1.tgz#ec261ccaab8a70d5b32a8a7c22387e48936d38d4" + integrity sha512-Dav1QKbBeGR4VVbHHe1s3OEzN7wnb9K/vwzHrWmtO8D1Q5Z3433xjNmgL5VQ9gfxXqooSfEO4gAovZklMDHDew== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" lodash "^4.17.15" -"@abp/luxon@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.0.tgz#d9357e4fb422b6e18ebe897a86a4c4bc6fbe6858" - integrity sha512-tiE6NiSa4El88SVotxfmmpceINLz8MruaO/e/U3QjJEHjRoqlv0UBrM/x5Xz92c7ZIvL0Y4QvWNISeDg6/oqIQ== +"@abp/luxon@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.1.tgz#a540750b1605dbac856ce9c2e776c2fecf6392f9" + integrity sha512-eRumVB7UIf2XH6OZVUTvcKw0A/OSAfYV59fM+Wc4dAkNcmsNZI0gD1o0AigSGNCxTV6v+W2bFrsuooSqK99Y0Q== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.0.tgz#972acf26f5eaa4bf9b8991cbe7c19fd0005d94e2" - integrity sha512-SpUo1CfppKzkE6Rb880pgB7oQ83Mkjsi0o6eE4r4gkF5hfzkuCXOmNjTYKfQIkE4n3G9QQd+8AAN/4xj4DiDrA== +"@abp/malihu-custom-scrollbar-plugin@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.1.tgz#0a556423a67b6c949e32ffcacd72256dea6c31ee" + integrity sha512-YTwYpnQ1ZrON70gvJcnNZRwB3Ze4olGcXxiPvmRgSHbGJkSnHYJiP6PvsN1F3HDFukAJ/iUu+WwEe8OBwlyLXA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.0.tgz#8fdf4c5e18f4093ee4e073dab950cf7aa9b2a540" - integrity sha512-XeXahcDMczdkZdP07yhQriIvbi1N5meeSGTnFyZX+bNTGzUOarPcuNYZ6Mcl3351HcyESHzuJbKbsk3RB1kGeg== +"@abp/select2@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.1.tgz#8983e7b5c3afb862f08b2730b70e59d726e9b5d5" + integrity sha512-WdzY2hvsS/4vz/VXpxq2muSzzE8ggchiIrICy/WKchJxL9L08DM796t6aE6rEl9wucY8XEzzWrPOVqAjJmnXFA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" select2 "^4.0.13" -"@abp/sweetalert@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.0.tgz#0d93e92e95c6855aef7e19532a7513a078ece216" - integrity sha512-y3XtZqnUVZuQohpRO1ImyBZXhtrm4H+typIL/9VgcnlvQjBTyIaiwDmU8j07Bb2rKJKe0prVkkVARO7OnjOS5A== +"@abp/sweetalert@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.1.tgz#0088610915ad6db0a140b77832a37c10066eb4ee" + integrity sha512-t4/44oQCMngSjVqmeRWXwrXa/pRKc3CEpyyTiGIXki4dWJ21j0ePCw2l3rvOJWnpoCznhxa/UGxLfRfK1NEzRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" sweetalert "^2.1.2" -"@abp/timeago@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.0.tgz#509cd8a84cd94c2644824b0c3af10c8fff6de2dc" - integrity sha512-90jzLYJusYTPwMbak1+XkXE85OPOXPpysRbL28KQwl7WLNBm8wx6IEoVZOHvOrpYscYdyeWhZCgILSJ8DR3a2Q== +"@abp/timeago@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.1.tgz#8c161645534eb1f62fe4607450acf7345729e711" + integrity sha512-PsPobV79U2qzVY+WBsmJM1ohSF4jqcLnL4/7qyJvxlb1WwbCl1F5D4cpiJP4zsM4clPW4mbSsiauMNp+HTNKEA== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" timeago "^1.6.7" -"@abp/toastr@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.0.tgz#06e28665cb7f6eefee3f69c985dd2b3f86cd7f1d" - integrity sha512-YL1fahVpDszhwpnRTN87GCP523Mkaw42ApT2A/hZuBdwRzP/u5GwRfng0i/uhdYXCMkTKuHmaHnRyqhGiv7nfQ== +"@abp/toastr@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.1.tgz#ecb6f6193b7edc3150d0614ab9457472baf1cce3" + integrity sha512-bTTz0O8zj7fMhdoummP2Ed5Z8SJTmR6svzNchBXNDrnRAcDQvTihPTcg0UpH8BEDFczbLowq09CG2A/RMSJoug== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" toastr "^2.1.4" -"@abp/utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" - integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== +"@abp/utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.1.tgz#9a4cb420266c49d8084776bd31c86681d4d4d125" + integrity sha512-nI2ZyaNpvohr75p8jeMPWze+hX+mV47EHI+Zloa4GgGmJqrULdG71kYh45R+jGmMTbQL6huaXGnpz4gNF9TGyQ== dependencies: just-compare "^1.3.0" diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj index 7c105c4de3..fb39407b4b 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj @@ -16,7 +16,7 @@ - + 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 6aa6709d35..7316ef9a28 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": "^4.0.0", - "@abp/prismjs": "^4.0.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.0.1", + "@abp/prismjs": "^4.0.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 41fbbb2f12..f34083e159 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@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.0.tgz#b1822cf5bbc0f6eeb414ebd0877f6d1115a81fe7" - integrity sha512-yYXQkEnNhftzm+ZI8d3VFMlV5UuLNTMQQwV2eZ8tJfstUQrKV9bVd3+NdDOr3AkvcD8D7mvMFeBuoMYteL5kLQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.1.tgz#ce8e3eb830a8e8f9eecb1a3b3bd70c2832fdf15e" + integrity sha512-w+ZG8Ewx9wWfbvRC2MAjJl+rXuXSHLhhGOiJTk68unWLNziDtNQzcSXG/Z5c1hA+acJSGqDoJGEGs4FVM136og== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.0.tgz#ba896056e9df5ac58e108df96996fbb2ca7a1a15" - integrity sha512-3RNn6VrNA+cqnPBoSbiCazN05cC2rhcRFMMxkEte+LImGbGOsxc4MflzHg5On1ExCGdqko8Axbw/ydy44Ak4Hw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.0.0" - "@abp/bootstrap" "~4.0.0" - "@abp/bootstrap-datepicker" "~4.0.0" - "@abp/datatables.net-bs4" "~4.0.0" - "@abp/font-awesome" "~4.0.0" - "@abp/jquery-form" "~4.0.0" - "@abp/jquery-validation-unobtrusive" "~4.0.0" - "@abp/lodash" "~4.0.0" - "@abp/luxon" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/select2" "~4.0.0" - "@abp/sweetalert" "~4.0.0" - "@abp/timeago" "~4.0.0" - "@abp/toastr" "~4.0.0" - -"@abp/aspnetcore.mvc.ui@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.0.tgz#68502177a05f6ce7191a09b06a18c5b5dfab425d" - integrity sha512-tYHUWMwnwInrGSzC/OdN6bH/VHZEz5DP3rx2U6fcb0I5GvvRdQZxVgUvmWn6DeMA3PG10Gra4SfkhZqRQq9rjQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.1.tgz#cd9d0eb11309c597dffd26277cd1bd7c5b1e0e2f" + integrity sha512-QGoCN/my0eAfa4tx5ytDxArIoz2i58jFFVUGso1Lekn54JvSt+WLz2p3uyTGatZ03Bp9836elhFnIopn12WvBw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.0.1" + "@abp/bootstrap" "~4.0.1" + "@abp/bootstrap-datepicker" "~4.0.1" + "@abp/datatables.net-bs4" "~4.0.1" + "@abp/font-awesome" "~4.0.1" + "@abp/jquery-form" "~4.0.1" + "@abp/jquery-validation-unobtrusive" "~4.0.1" + "@abp/lodash" "~4.0.1" + "@abp/luxon" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/select2" "~4.0.1" + "@abp/sweetalert" "~4.0.1" + "@abp/timeago" "~4.0.1" + "@abp/toastr" "~4.0.1" + +"@abp/aspnetcore.mvc.ui@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.1.tgz#6490c147a56e4f7055d2ca77f20baf1f60f56867" + integrity sha512-4B3icJrlpuZgMaX52ninyaenH7zLwepePEscDrLaFY9wyonKpZ2zh+xplnyM6vjNd+PhErWuA2+ssCswFhrJ3A== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,162 +43,162 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/bootstrap-datepicker@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.0.tgz#cdbd2c388c6d7ce8c6d72443038975063e6c6d02" - integrity sha512-hauH8VhpC8cxv1wCR6bVBcNqZepftdBXxEVID7TSAqgNyWjm/CrJqWLI+A0nnkG3IHoIm9D22iF47BamuYHptw== +"@abp/bootstrap-datepicker@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.1.tgz#aad891263edff66f816e003ba4fa7f8acfe8e0b6" + integrity sha512-S0oaVZmXsDcOJLAyoGY0TvP/7bZx0GHIbU9BIhIL2Wl74HYaokjkTr6/IleIek9YeiF2vm9FkrUP1dKH/4f7Gg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.0.tgz#04174f18055f76f936e6fb73e5ff71ffa08a8528" - integrity sha512-Tmr0yoSWg7XHl02X5wv04CvYcL8KCpX8u6YGJj31jRZxUTeCvs5ETXlepOWcdxPQqi/4olXv5B9GEz5S9l5nZA== +"@abp/bootstrap@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.1.tgz#3e41bdf9b3e9f8c497b9fafe22a4851d0401b31b" + integrity sha512-GoSaNWvswRHVoUrq7xClFQYtwqIlyS/vp/TdY+j5FFZP7ud89+ZGpdNqYqq5l9/6aaYa7v4b9mNTZ/1JRzAOYg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/clipboard@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.0.0.tgz#4b01bead2e404c38a3ae9955dac5522d3c30c78b" - integrity sha512-39CZuF6lxUx1fluclzMl1uG0qIUX82S2wNbyJu2WGfuMMaaIgzSp9du/bB89Ik6rR5BFUU/3p8uvzOgy4sc2sQ== +"@abp/clipboard@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.0.1.tgz#aacbd02b6ce991ca20550ad7afc40e0cea247b5e" + integrity sha512-Q7Fe167pBJ/9Vp5RyVc/JejaIzNCdTgXcnZLNC7AEtaeBVCmLwsdnCYP3i32sdvX1AIgt3exhAAsHBt0deij/g== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" clipboard "^2.0.6" -"@abp/core@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.0.tgz#65e76c697e62162717e0edabf7edacc4228e682a" - integrity sha512-xcTTBFjLFZ9Trv2x9Y/c3XKezIx+x3MTXUD98QJPf1aR7T43TE/tLHRxdRfW3R8ka0O1wmlYshpkaw5pYNsj5w== +"@abp/core@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.1.tgz#1df32bc058f45571605670ca81c226a1bd87400c" + integrity sha512-8UT5lwqV/luVG/SxePSTD2FRbZXwXv3cZJKjw+gpBjhD0slWrh51XEOHsM8ciTuhcvV/tsqVU9nXckDMdO58fw== dependencies: - "@abp/utils" "^4.0.0" + "@abp/utils" "^4.0.1" -"@abp/datatables.net-bs4@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.0.tgz#fe737e054f6ba35e787a1cda185af2788ef86d39" - integrity sha512-mz7xZdzX1nlFyX7vNzB5w3RkqZ0IHrPgsXGOB7OCTKMRshDFVH2O51Oy4qoLDOXoTVeahHtR9v8thEWFR1SnZg== +"@abp/datatables.net-bs4@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.1.tgz#7538baad0eff24eca7f4246d020852f83139f645" + integrity sha512-S52jNPF4if68V+P/33NrtGPJXf6xrqgyZzz9b7qBR7HuUm3Nsn7bAslh3JNduNec/sFuE4Utl/xsFHZNjBWEog== dependencies: - "@abp/datatables.net" "~4.0.0" + "@abp/datatables.net" "~4.0.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.0.tgz#88ae5f1a6068fba55927e59f113686508e9553cb" - integrity sha512-JYTfMA1zlBNGiQHAiZiTj5ka6B6vq5k2jqsoLHup4pD9jpKwKRBGtltVsWoEnetd9eEbp4SaV/FCuh3RzmV6Pw== +"@abp/datatables.net@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.1.tgz#eb89716a37351c41b5bccfc2db88fc7ceb991a26" + integrity sha512-APFLui0w8MqsBWqP/K0QkT5cBq5SsWiqMaIGTXQKinMVLV597sUszrlhe1ISU2PqeD7iX6pCZNNOTI1NEUn9/Q== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" datatables.net "^1.10.21" -"@abp/font-awesome@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.0.tgz#6e1e4bd1175a0b8d3b095e215c07e66ad0e42e19" - integrity sha512-kHfZ45UMDWSRk1gTV/BwVfSoXksJ9UlnD3SelTGeAkvbDqtDllqlp9y6c3qQcmZUE348Xl4hDTkU8upZwswCFQ== +"@abp/font-awesome@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.1.tgz#8a9d83b2c2adfcd5abcbd9c31c315460d44a321e" + integrity sha512-+6+m/DKMnfkeQiWUsMlB6Da8u6yREyN2oQYGYhSRAK8419ym8RHHrqKJv2AClI4iLq2ppHZj8WF84+SeoCekRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.0.tgz#3afb41eb16d62e32c31a29c6a866f634a5a20cd8" - integrity sha512-cQq8PgzHfpK9/LxmjlnMsDn85wWvEOqjyLaepHFpTTt0341auSgXNwhp7rk71AUHD1lP3c9ALctmqu+gYmh9ag== +"@abp/jquery-form@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.1.tgz#6dc1922b2800dd635f20881a82e08104a1dd1bb5" + integrity sha512-JMBZYu/MI/GjaLTBOMB5iv8cagnLpReDULNC3r6tLNNqB1R8f3Cg1T7nF4YCuU9SYMqis1P/AuE4oEh+4rQdAQ== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#c3674d2b01b3c524de4c3fac1c6ae3657857ee7b" - integrity sha512-OGibIdw0ogjp6VQIebHM7OtMT36pjLKRrOHyCVpTmQ7NzDODV5ptG83vOnt5nFG0y9XFrOt8cnHrrd+K1Bpo/Q== +"@abp/jquery-validation-unobtrusive@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.1.tgz#4142ca31c0830fe24a1467e8cf13b55ba9d7c1dd" + integrity sha512-rdSRTcdKCHmarbrVgmPYdTiJ0G/aFKd+dr0krO7fALPTuQKChbDnHOO4/JvQSc+cd9faxa8c6ZWvlHdsof23tQ== dependencies: - "@abp/jquery-validation" "~4.0.0" + "@abp/jquery-validation" "~4.0.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.0.tgz#0a101937f89ff398317142b5271fa9a1de6571c2" - integrity sha512-4nzvhAktEINpQ2H+Hy7TOxxojTmTEm5dBTbHs1vbCWUuF0OTpouZWbMZDESdP0ZbjXcQ+vhwuM4e/pm/PeaHyQ== +"@abp/jquery-validation@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.1.tgz#74e7d795468c6986f2db15662631fcd4f67c679e" + integrity sha512-FX26aQCsMBdVWAJb7S37Lt7KoHAEHoYguh/qfZIARCpOYOOWvxfDz1wTrmADUkqdillqEiCeD/Imj8bYH9Faaw== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-validation "^1.19.2" -"@abp/jquery@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.0.tgz#00d24678b573bcc2fb14d8337ccdbf697b59d43b" - integrity sha512-gXLK97IvAZriNlG8e0qJcd7MvnpshJQURb4lg8VYibD7Fs/OBeHSAWM2Adgi3H9DnQL8XEUlWf487FSz4RC/Yg== +"@abp/jquery@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.1.tgz#aa554accb16600fd586c3a4f088040cd26d0bde8" + integrity sha512-MtiRKOLyjEWux+whPP3+zwPbpj8or756JtgjnwOTDB9tp9HLCYUaskt+oalYPvob24nDZcNu2RnMALYdCVhZAQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" jquery "~3.5.1" -"@abp/lodash@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.0.tgz#fe76d09517f6b1adf18edde94a31e13b003329dc" - integrity sha512-uitn5uYlb9xShRtV4AFOgp3lu2kADGMD4+a4fy5r4umlPM2uuMo0wMhzyYdBIG64JC5oNaqAzOwZyhhnn+HGJg== +"@abp/lodash@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.1.tgz#ec261ccaab8a70d5b32a8a7c22387e48936d38d4" + integrity sha512-Dav1QKbBeGR4VVbHHe1s3OEzN7wnb9K/vwzHrWmtO8D1Q5Z3433xjNmgL5VQ9gfxXqooSfEO4gAovZklMDHDew== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" lodash "^4.17.15" -"@abp/luxon@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.0.tgz#d9357e4fb422b6e18ebe897a86a4c4bc6fbe6858" - integrity sha512-tiE6NiSa4El88SVotxfmmpceINLz8MruaO/e/U3QjJEHjRoqlv0UBrM/x5Xz92c7ZIvL0Y4QvWNISeDg6/oqIQ== +"@abp/luxon@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.1.tgz#a540750b1605dbac856ce9c2e776c2fecf6392f9" + integrity sha512-eRumVB7UIf2XH6OZVUTvcKw0A/OSAfYV59fM+Wc4dAkNcmsNZI0gD1o0AigSGNCxTV6v+W2bFrsuooSqK99Y0Q== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.0.tgz#972acf26f5eaa4bf9b8991cbe7c19fd0005d94e2" - integrity sha512-SpUo1CfppKzkE6Rb880pgB7oQ83Mkjsi0o6eE4r4gkF5hfzkuCXOmNjTYKfQIkE4n3G9QQd+8AAN/4xj4DiDrA== +"@abp/malihu-custom-scrollbar-plugin@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.1.tgz#0a556423a67b6c949e32ffcacd72256dea6c31ee" + integrity sha512-YTwYpnQ1ZrON70gvJcnNZRwB3Ze4olGcXxiPvmRgSHbGJkSnHYJiP6PvsN1F3HDFukAJ/iUu+WwEe8OBwlyLXA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/prismjs@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.0.0.tgz#7b98c233ac1f0025c14b27c1ba62910bd9022442" - integrity sha512-Eh63EUe2wnl8P1iyPo9Glt9BD6yFdrAjIbvBeFheJnSWgvij3mayOtCAq9P2ksKWo1Gq3hv1lm/p9vdYFRHoKw== +"@abp/prismjs@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.0.1.tgz#8e614878a9d1d63504fe7ba6b7d44093947d862b" + integrity sha512-qZP4TlQDiXaAIrDmpzQJeL/9mtTCxQCIbELDnBHMZFDrYNENOKZeBmvD9WAhgzL7FJcnPtOomJgZ5x2rqpBW/w== dependencies: - "@abp/clipboard" "~4.0.0" - "@abp/core" "~4.0.0" + "@abp/clipboard" "~4.0.1" + "@abp/core" "~4.0.1" prismjs "^1.20.0" -"@abp/select2@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.0.tgz#8fdf4c5e18f4093ee4e073dab950cf7aa9b2a540" - integrity sha512-XeXahcDMczdkZdP07yhQriIvbi1N5meeSGTnFyZX+bNTGzUOarPcuNYZ6Mcl3351HcyESHzuJbKbsk3RB1kGeg== +"@abp/select2@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.1.tgz#8983e7b5c3afb862f08b2730b70e59d726e9b5d5" + integrity sha512-WdzY2hvsS/4vz/VXpxq2muSzzE8ggchiIrICy/WKchJxL9L08DM796t6aE6rEl9wucY8XEzzWrPOVqAjJmnXFA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" select2 "^4.0.13" -"@abp/sweetalert@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.0.tgz#0d93e92e95c6855aef7e19532a7513a078ece216" - integrity sha512-y3XtZqnUVZuQohpRO1ImyBZXhtrm4H+typIL/9VgcnlvQjBTyIaiwDmU8j07Bb2rKJKe0prVkkVARO7OnjOS5A== +"@abp/sweetalert@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.1.tgz#0088610915ad6db0a140b77832a37c10066eb4ee" + integrity sha512-t4/44oQCMngSjVqmeRWXwrXa/pRKc3CEpyyTiGIXki4dWJ21j0ePCw2l3rvOJWnpoCznhxa/UGxLfRfK1NEzRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" sweetalert "^2.1.2" -"@abp/timeago@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.0.tgz#509cd8a84cd94c2644824b0c3af10c8fff6de2dc" - integrity sha512-90jzLYJusYTPwMbak1+XkXE85OPOXPpysRbL28KQwl7WLNBm8wx6IEoVZOHvOrpYscYdyeWhZCgILSJ8DR3a2Q== +"@abp/timeago@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.1.tgz#8c161645534eb1f62fe4607450acf7345729e711" + integrity sha512-PsPobV79U2qzVY+WBsmJM1ohSF4jqcLnL4/7qyJvxlb1WwbCl1F5D4cpiJP4zsM4clPW4mbSsiauMNp+HTNKEA== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" timeago "^1.6.7" -"@abp/toastr@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.0.tgz#06e28665cb7f6eefee3f69c985dd2b3f86cd7f1d" - integrity sha512-YL1fahVpDszhwpnRTN87GCP523Mkaw42ApT2A/hZuBdwRzP/u5GwRfng0i/uhdYXCMkTKuHmaHnRyqhGiv7nfQ== +"@abp/toastr@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.1.tgz#ecb6f6193b7edc3150d0614ab9457472baf1cce3" + integrity sha512-bTTz0O8zj7fMhdoummP2Ed5Z8SJTmR6svzNchBXNDrnRAcDQvTihPTcg0UpH8BEDFczbLowq09CG2A/RMSJoug== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" toastr "^2.1.4" -"@abp/utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" - integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== +"@abp/utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.1.tgz#9a4cb420266c49d8084776bd31c86681d4d4d125" + integrity sha512-nI2ZyaNpvohr75p8jeMPWze+hX+mV47EHI+Zloa4GgGmJqrULdG71kYh45R+jGmMTbQL6huaXGnpz4gNF9TGyQ== dependencies: just-compare "^1.3.0" diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj index 432ece07dd..9c96018145 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs index 77de765f51..7bea930a37 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs @@ -88,10 +88,10 @@ namespace Volo.Abp.AspNetCore.Serilog executedLogEvent.ShouldNotBeNull(); executedLogEvent.Properties.ContainsKey(_serilogOptions.EnricherPropertyNames.CorrelationId) - .ShouldNotBeNull(); + .ShouldBeTrue(); ((ScalarValue) executedLogEvent.Properties[_serilogOptions.EnricherPropertyNames.CorrelationId]).Value .ShouldBe(result); } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj b/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj index 57c440341e..555c2934b0 100644 --- a/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj @@ -10,8 +10,9 @@ - - + + Always + diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory_Tests.cs b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory_Tests.cs new file mode 100644 index 0000000000..b1dba4bdb5 --- /dev/null +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory_Tests.cs @@ -0,0 +1,59 @@ +using System.IO; +using System.Threading.Tasks; +using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Primitives; +using Shouldly; +using Volo.Abp.VirtualFileSystem; +using Xunit; + +namespace Volo.Abp.TextTemplating.VirtualFiles +{ + public class LocalizedTemplateContentReaderFactory_Tests: AbpTextTemplatingTestBase + { + private readonly ITemplateDefinitionManager _templateDefinitionManager; + + public LocalizedTemplateContentReaderFactory_Tests() + { + _templateDefinitionManager = GetRequiredService(); + } + + [Fact] + public async Task Create_Should_Work_With_PhysicalFileProvider() + { + var localizedTemplateContentReaderFactory = new LocalizedTemplateContentReaderFactory( + new PhysicalFileVirtualFileProvider( + new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), + @"Volo\Abp\TextTemplating\")))); + + var reader = await localizedTemplateContentReaderFactory.CreateAsync(_templateDefinitionManager.Get(TestTemplates.WelcomeEmail)); + + reader.GetContentOrNull("en").ShouldBe("Welcome {{model.name}} to the abp.io!"); + reader.GetContentOrNull("tr").ShouldBe("Merhaba {{model.name}}, abp.io'ya hoşgeldiniz!"); + } + + class PhysicalFileVirtualFileProvider : IVirtualFileProvider + { + private readonly PhysicalFileProvider _physicalFileProvider; + + public PhysicalFileVirtualFileProvider(PhysicalFileProvider physicalFileProvider) + { + _physicalFileProvider = physicalFileProvider; + } + + public IFileInfo GetFileInfo(string subpath) + { + return _physicalFileProvider.GetFileInfo(subpath); + } + + public IDirectoryContents GetDirectoryContents(string subpath) + { + return _physicalFileProvider.GetDirectoryContents(subpath); + } + + public IChangeToken Watch(string filter) + { + return _physicalFileProvider.Watch(filter); + } + } + } +} diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/VirtualFiles/VirtualFileTemplateContributor_Tests.cs b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/VirtualFiles/VirtualFileTemplateContributor_Tests.cs index da2d4179de..e5c7138118 100644 --- a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/VirtualFiles/VirtualFileTemplateContributor_Tests.cs +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/VirtualFiles/VirtualFileTemplateContributor_Tests.cs @@ -4,46 +4,42 @@ using Xunit; namespace Volo.Abp.TextTemplating.VirtualFiles { - //TODO: Make tests running again! - //public class VirtualFileTemplateContributor_Tests : AbpTextTemplatingTestBase - //{ - // [Fact] - // public async Task Should_Get_Localized_Content_By_Culture() - // { - // var contributor = new VirtualFileTemplateContentContributor( - // "/SampleTemplates/WelcomeEmail" - // ); + public class VirtualFileTemplateContributor_Tests : AbpTextTemplatingTestBase + { + private readonly ITemplateDefinitionManager _templateDefinitionManager; + private readonly VirtualFileTemplateContentContributor _virtualFileTemplateContentContributor; - // contributor.Initialize( - // new TemplateContentContributorInitializationContext( - // new TemplateDefinition("Test"), - // ServiceProvider - // ) - // ); + public VirtualFileTemplateContributor_Tests() + { + _templateDefinitionManager = GetRequiredService(); + _virtualFileTemplateContentContributor = GetRequiredService(); + } - // (await contributor - // .GetOrNullAsync("en")).ShouldBe("Welcome {{model.name}} to the abp.io!"); + [Fact] + public async Task Should_Get_Localized_Content_By_Culture() + { + (await _virtualFileTemplateContentContributor.GetOrNullAsync( + new TemplateContentContributorContext(_templateDefinitionManager.Get(TestTemplates.WelcomeEmail), + ServiceProvider, + "en"))) + .ShouldBe("Welcome {{model.name}} to the abp.io!"); - // (await contributor - // .GetOrNullAsync("tr")).ShouldBe("Merhaba {{model.name}}, abp.io'ya hoşgeldiniz!"); - // } + (await _virtualFileTemplateContentContributor.GetOrNullAsync( + new TemplateContentContributorContext(_templateDefinitionManager.Get(TestTemplates.WelcomeEmail), + ServiceProvider, + "tr"))) + .ShouldBe("Merhaba {{model.name}}, abp.io'ya hoşgeldiniz!"); + } - // [Fact] - // public async Task Should_Get_Non_Localized_Template_Content() - // { - // var contributor = new VirtualFileTemplateContentContributor( - // "/SampleTemplates/ForgotPasswordEmail.tpl" - // ); - - // contributor.Initialize( - // new TemplateContentContributorInitializationContext( - // new TemplateDefinition("Test"), - // ServiceProvider - // ) - // ); - - // (await contributor - // .GetOrNullAsync()).ShouldBe("{{l \"HelloText\"}}. Please click to the following link to get an email to reset your password!"); - // } - //} + [Fact] + public async Task Should_Get_Non_Localized_Template_Content() + { + (await _virtualFileTemplateContentContributor.GetOrNullAsync( + new TemplateContentContributorContext( + _templateDefinitionManager.Get(TestTemplates.ForgotPasswordEmail), + ServiceProvider, + null))) + .ShouldBe("{{L \"HelloText\" model.name}}, {{L \"HowAreYou\" }}. Please click to the following link to get an email to reset your password!"); + } + } } diff --git a/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/VirtualFileProvider_Tests.cs b/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/VirtualFileProvider_Tests.cs index aae01ff912..e453c5ee96 100644 --- a/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/VirtualFileProvider_Tests.cs +++ b/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/VirtualFileProvider_Tests.cs @@ -33,7 +33,7 @@ namespace Volo.Abp.VirtualFileSystem Encoding.UTF8.GetString(stream.GetAllBytes()).ShouldBe("//jquery-3-1-1-min.js-contents"); } } - + [Fact] public void Should_Define_And_Get_Embedded_Resources_With_Special_Chars() { @@ -57,10 +57,10 @@ namespace Volo.Abp.VirtualFileSystem var contents = _virtualFileProvider.GetDirectoryContents("/js"); //Assert - contents.Exists.ShouldNotBeNull(); + contents.Exists.ShouldBeTrue(); var contentList = contents.ToList(); - + contentList.ShouldContain(x => x.Name == "jquery-3-1-1-min.js"); contentList.ShouldContain(x => x.Name == "my{test}.2.9.min.js"); } @@ -74,7 +74,7 @@ namespace Volo.Abp.VirtualFileSystem var contents = _virtualFileProvider.GetDirectoryContents(path); //Assert - contents.Exists.ShouldNotBeNull(); + contents.Exists.ShouldBeTrue(); var contentList = contents.ToList(); contentList.ShouldContain(x => x.Name == "js"); diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ar.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ar.json index 97d9e4d95d..e6c052d09e 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ar.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ar.json @@ -44,7 +44,7 @@ "LoggedOutTitle": "تسجيل الخروج", "LoggedOutText": "لقد تم تسجيل خروجك وستتم إعادة توجيهك قريبًا.", "ReturnToText": "انقر هنا لإعادة التوجيه إلى {0}", - "OrLoginWith": "أو الدخول بـ", + "OrLoginWith": "أو الدخول بـ:", "ForgotPassword": "نسيت كلمة السر؟", "SendPasswordResetLink_Information": "سيتم إرسال رابط إعادة تعيين كلمة المرور إلى بريدك الإلكتروني لإعادة تعيين كلمة المرور الخاصة بك. إذا لم تتلق رسالة بريد إلكتروني في غضون بضع دقائق ، فيرجى إعادة المحاولة.", "PasswordResetMailSentMessage": "تم إرسال بريد إلكتروني لاسترداد الحساب إلى عنوان بريدك الإلكتروني. إذا كنت لا ترى هذا البريد الإلكتروني في علبة الوارد الخاصة بك في غضون 15 دقيقة ، فابحث عنه في مجلد البريد غير الهام. إذا وجدته هناك ، فيرجى وضع علامة عليه كـ -ليس غير هام-.", @@ -55,4 +55,4 @@ "GoToTheApplication": "اذهب إلى التطبيق", "BackToLogin": "العودة إلى تسجيل الدخول" } -} \ No newline at end of file +} diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de-DE.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de-DE.json index 9a5b7314e1..714e7f69c2 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de-DE.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de-DE.json @@ -44,7 +44,7 @@ "LoggedOutTitle": "Abgemeldet", "LoggedOutText": "Sie wurden abgemeldet und werden bald weitergeleitet.", "ReturnToText": "Klicken Sie hier, um zu {0} umzuleiten", - "OrLoginWith": "Oder melden Sie sich an mit;", + "OrLoginWith": "Oder melden Sie sich an mit:", "ForgotPassword": "Passwort vergessen?", "SendPasswordResetLink_Information": "Ein Link zum Zurücksetzen des Passworts wird an Ihre E-Mail gesendet. Wenn Sie innerhalb weniger Minuten keine E-Mail erhalten, versuchen Sie es erneut.", "PasswordResetMailSentMessage": "E-Mail zur Kontowiederherstellung an Ihre E-Mail-Adresse gesendet. Wenn Sie diese E-Mail nicht innerhalb von 15 Minuten in Ihrem Posteingang sehen, suchen Sie sie in Ihrem Junk-Mail-Ordner. Wenn Sie es dort finden, markieren Sie es bitte als -Kein Junk-. ", @@ -59,4 +59,4 @@ "ReturnToApplication": "Zur Anwendung zurückkehren", "Volo.Account:InvalidEmailAddress": "Die angegebene E-Mail-Adresse kann nicht gefunden werden: {0}" } -} \ No newline at end of file +} diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json index db38b70309..e7cdc64c43 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json @@ -44,7 +44,7 @@ "LoggedOutTitle": "Signed Out", "LoggedOutText": "You have been signed out and you will be redirected soon.", "ReturnToText": "Click here to redirect to {0}", - "OrLoginWith": "Or login with;", + "OrLoginWith": "Or login with:", "ForgotPassword": "Forgot password?", "SendPasswordResetLink_Information": "A password reset link will be sent to your email to reset your password. If you don't get an email within a few minutes, please re-try.", "PasswordResetMailSentMessage": "Account recovery email sent to your e-mail address. If you don't see this email in your inbox within 15 minutes, look for it in your junk mail folder. If you find it there, please mark it as -Not Junk-. ", diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es.json index 9ca4d954b4..5f7d824ca0 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es.json @@ -44,7 +44,7 @@ "LoggedOutTitle": "Sesión cerrada", "LoggedOutText": "La sesión ha sido cerrada y serás redireccionado en breve.", "ReturnToText": "Haz click aquí para redirigirte a {0}", - "OrLoginWith": "O inicia sesión con;", + "OrLoginWith": "O inicia sesión con:", "ForgotPassword": "¿Olvidaste la contraseña?", "SendPasswordResetLink_Information": "Un link para resetear la contraseña será enviado a tu e-mail. Si no recibes el e-mail en unos minutos, por favor re-intenta.", "PasswordResetMailSentMessage": "Un e-mail para recuperar la cuenta ha sido enviado a tu e-mail. Si no recibes el e-mail en unos minutos, por favor re-intentalo.", @@ -59,4 +59,4 @@ "ReturnToApplication": "Volver a la aplicación", "Volo.Account:InvalidEmailAddress": "No se puede encontrar la dirección de e-mail solicitada: {0}" } -} \ No newline at end of file +} diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fr.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fr.json index 100a71bb05..1469c7619d 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fr.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fr.json @@ -44,7 +44,7 @@ "LoggedOutTitle": "Se déconnecter", "LoggedOutText": "Vous avez été déconnecté et vous serez bientôt redirigé.", "ReturnToText": "Cliquez ici pour rediriger vers {0}", - "OrLoginWith": "Ou connectez-vous avec;", + "OrLoginWith": "Ou connectez-vous avec:", "ForgotPassword": "Vous avez oublié le mot de passe ?", "SendPasswordResetLink_Information": "Un lien de réinitialisation du mot de passe sera envoyé à votre adresse e-mail pour réinitialiser votre mot de passe. Si vous ne recevez pas d'e-mail dans quelques minutes, veuillez réessayer.", "PasswordResetMailSentMessage": "E-mail de récupération de compte envoyé à votre adresse e-mail. Si vous ne voyez pas cet e-mail dans votre boîte de réception dans les 15 minutes, recherchez-le dans votre dossier de courrier indésirable. Si vous le trouvez là-bas, veuillez le marquer comme -Pas indésirable-.", @@ -57,4 +57,4 @@ "ProfileTab:Password": "Changer le mot de passe", "ProfileTab:PersonalInfo": "Informations personnelles" } -} \ No newline at end of file +} diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hu.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hu.json index 6d2e1c6460..768b7b21fd 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hu.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/hu.json @@ -44,7 +44,7 @@ "LoggedOutTitle": "Kijelentkezett", "LoggedOutText": "Kijelentkeztünk, és hamarosan átirányítjuk.", "ReturnToText": "Kattintson ide a(z) {0} címre történő átirányításhoz", - "OrLoginWith": "Vagy jelentkezzen be", + "OrLoginWith": "Vagy jelentkezzen be:", "ForgotPassword": "Elfelejtette a jelszavát?", "SendPasswordResetLink_Information": "Jelszó-visszaállítási linket küldünk az e-mailre a jelszó visszaállításához. Ha néhány percen belül nem kap e-mailt, próbálkozzon újra.", "PasswordResetMailSentMessage": "A fiók-helyreállítási e-mailt az Ön e-mail címére küldtük. Ha 15 percen belül nem látja ezt az e-mailt a beérkező levelek között, keresse meg a levélszemét mappájában. Ha ott találja, kérjük, jelölje meg: -Nem szemét-.", @@ -58,4 +58,4 @@ "ProfileTab:PersonalInfo": "Személyes adatok", "ReturnToApplication": "Vissza az alkalmazáshoz" } -} \ No newline at end of file +} diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json index 9f8e765759..3be2997f68 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json @@ -44,7 +44,7 @@ "LoggedOutTitle": "Çıkış Yaptınız", "LoggedOutText": "Çıkış yaptınız ve birazdan yönlendirileceksiniz.", "ReturnToText": "{0} uygulamasına dönmek için tıklayın.", - "OrLoginWith": "Veya bunlarla giriş yap;", + "OrLoginWith": "Veya bunlarla giriş yap:", "ForgotPassword": "Şifremi unuttum", "SendPasswordResetLink_Information": "E-posta adresinize bir şifre sıfırlama bağlantısı gönderilecektir. Birkaç dakika içerisinde bir e-posta almazsanız lütfen tekrar deneyin.", "PasswordResetMailSentMessage": "E-posta adresinize bir şifre sıfırlama bağlantısı gönderilmiştir. Lütfen e-posta adresinizi kontrol ediniz. Eğer 15 dakika içinde, bu e-postayı gelen kutusunda bulamazsanız, gereksiz veya istenmeyen e-posta kutularına bakınız.", diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json index cfe4fbaa27..f5995c6e28 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json @@ -44,7 +44,7 @@ "LoggedOutTitle": "注销", "LoggedOutText": "你已成功注销并将马上返回.", "ReturnToText": "点击此处返回到 {0}", - "OrLoginWith": "或登录", + "OrLoginWith": "或登录:", "ForgotPassword": "忘记密码?", "SendPasswordResetLink_Information": "密码重置链接将发送到您的电子邮件以重置密码. 如果您在几分钟内没有收到电子邮件,请重试.", "PasswordResetMailSentMessage": "帐户恢复电子邮件已发送到您的电子邮件地址. 如果您在15分钟内未在收件箱中看到此电子邮件,请检查垃圾邮件,并标记为非垃圾邮件.", @@ -59,4 +59,4 @@ "ReturnToApplication": "返回到应用程序", "Volo.Account:InvalidEmailAddress": "找不到给定的电子邮件地址:{0}" } -} \ No newline at end of file +} diff --git a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Volo.Abp.Account.Web.IdentityServer.csproj b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Volo.Abp.Account.Web.IdentityServer.csproj index bcfd855190..91f9a3022e 100644 --- a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Volo.Abp.Account.Web.IdentityServer.csproj +++ b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Volo.Abp.Account.Web.IdentityServer.csproj @@ -34,7 +34,7 @@ - + diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Volo.Abp.BackgroundJobs.DemoApp.HangFire.csproj b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Volo.Abp.BackgroundJobs.DemoApp.HangFire.csproj index c4ea6d9eb4..a38b454ba8 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Volo.Abp.BackgroundJobs.DemoApp.HangFire.csproj +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Volo.Abp.BackgroundJobs.DemoApp.HangFire.csproj @@ -6,7 +6,7 @@ - + diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Volo.Abp.BackgroundJobs.DemoApp.Quartz.csproj b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Volo.Abp.BackgroundJobs.DemoApp.Quartz.csproj index 0f5bd720a1..a9ac493329 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Volo.Abp.BackgroundJobs.DemoApp.Quartz.csproj +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Volo.Abp.BackgroundJobs.DemoApp.Quartz.csproj @@ -6,7 +6,7 @@ - + diff --git a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj index 3e11d85aee..41176d3edd 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj @@ -15,9 +15,9 @@ - + - + diff --git a/modules/blogging/app/Volo.BloggingTestApp/package.json b/modules/blogging/app/Volo.BloggingTestApp/package.json index 1b45e2091b..3bf487c960 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": "^4.0.0", - "@abp/blogging": "^4.0.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.0.1", + "@abp/blogging": "^4.0.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 ee015c4c92..551266f2e6 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@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.0.tgz#b1822cf5bbc0f6eeb414ebd0877f6d1115a81fe7" - integrity sha512-yYXQkEnNhftzm+ZI8d3VFMlV5UuLNTMQQwV2eZ8tJfstUQrKV9bVd3+NdDOr3AkvcD8D7mvMFeBuoMYteL5kLQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.1.tgz#ce8e3eb830a8e8f9eecb1a3b3bd70c2832fdf15e" + integrity sha512-w+ZG8Ewx9wWfbvRC2MAjJl+rXuXSHLhhGOiJTk68unWLNziDtNQzcSXG/Z5c1hA+acJSGqDoJGEGs4FVM136og== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.0.tgz#ba896056e9df5ac58e108df96996fbb2ca7a1a15" - integrity sha512-3RNn6VrNA+cqnPBoSbiCazN05cC2rhcRFMMxkEte+LImGbGOsxc4MflzHg5On1ExCGdqko8Axbw/ydy44Ak4Hw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.0.0" - "@abp/bootstrap" "~4.0.0" - "@abp/bootstrap-datepicker" "~4.0.0" - "@abp/datatables.net-bs4" "~4.0.0" - "@abp/font-awesome" "~4.0.0" - "@abp/jquery-form" "~4.0.0" - "@abp/jquery-validation-unobtrusive" "~4.0.0" - "@abp/lodash" "~4.0.0" - "@abp/luxon" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/select2" "~4.0.0" - "@abp/sweetalert" "~4.0.0" - "@abp/timeago" "~4.0.0" - "@abp/toastr" "~4.0.0" - -"@abp/aspnetcore.mvc.ui@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.0.tgz#68502177a05f6ce7191a09b06a18c5b5dfab425d" - integrity sha512-tYHUWMwnwInrGSzC/OdN6bH/VHZEz5DP3rx2U6fcb0I5GvvRdQZxVgUvmWn6DeMA3PG10Gra4SfkhZqRQq9rjQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.1.tgz#cd9d0eb11309c597dffd26277cd1bd7c5b1e0e2f" + integrity sha512-QGoCN/my0eAfa4tx5ytDxArIoz2i58jFFVUGso1Lekn54JvSt+WLz2p3uyTGatZ03Bp9836elhFnIopn12WvBw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.0.1" + "@abp/bootstrap" "~4.0.1" + "@abp/bootstrap-datepicker" "~4.0.1" + "@abp/datatables.net-bs4" "~4.0.1" + "@abp/font-awesome" "~4.0.1" + "@abp/jquery-form" "~4.0.1" + "@abp/jquery-validation-unobtrusive" "~4.0.1" + "@abp/lodash" "~4.0.1" + "@abp/luxon" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/select2" "~4.0.1" + "@abp/sweetalert" "~4.0.1" + "@abp/timeago" "~4.0.1" + "@abp/toastr" "~4.0.1" + +"@abp/aspnetcore.mvc.ui@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.1.tgz#6490c147a56e4f7055d2ca77f20baf1f60f56867" + integrity sha512-4B3icJrlpuZgMaX52ninyaenH7zLwepePEscDrLaFY9wyonKpZ2zh+xplnyM6vjNd+PhErWuA2+ssCswFhrJ3A== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,214 +43,214 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/blogging@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-4.0.0.tgz#01c65e816b646b247ee7077ad5bc002528a83467" - integrity sha512-NWY0lzhITIUlq4tygadughJiH+Y6OIu70OphX/KqbQdo6A291qWRIeMSDGF8ZN5ui/tdliD24Wh2sHKN+kNEuw== +"@abp/blogging@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-4.0.1.tgz#d46afb7695922c89395564272d69f7e2e93ae19a" + integrity sha512-tPvjcWW5KTruHdmPi4TLKA2XahIsgJrpYfRIhduTespbCUWZZCdXwD76Bmv3HhD3oNivAR8lnf3iyHujQ3zhPA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.0" - "@abp/owl.carousel" "~4.0.0" - "@abp/prismjs" "~4.0.0" - "@abp/tui-editor" "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.1" + "@abp/owl.carousel" "~4.0.1" + "@abp/prismjs" "~4.0.1" + "@abp/tui-editor" "~4.0.1" -"@abp/bootstrap-datepicker@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.0.tgz#cdbd2c388c6d7ce8c6d72443038975063e6c6d02" - integrity sha512-hauH8VhpC8cxv1wCR6bVBcNqZepftdBXxEVID7TSAqgNyWjm/CrJqWLI+A0nnkG3IHoIm9D22iF47BamuYHptw== +"@abp/bootstrap-datepicker@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.1.tgz#aad891263edff66f816e003ba4fa7f8acfe8e0b6" + integrity sha512-S0oaVZmXsDcOJLAyoGY0TvP/7bZx0GHIbU9BIhIL2Wl74HYaokjkTr6/IleIek9YeiF2vm9FkrUP1dKH/4f7Gg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.0.tgz#04174f18055f76f936e6fb73e5ff71ffa08a8528" - integrity sha512-Tmr0yoSWg7XHl02X5wv04CvYcL8KCpX8u6YGJj31jRZxUTeCvs5ETXlepOWcdxPQqi/4olXv5B9GEz5S9l5nZA== +"@abp/bootstrap@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.1.tgz#3e41bdf9b3e9f8c497b9fafe22a4851d0401b31b" + integrity sha512-GoSaNWvswRHVoUrq7xClFQYtwqIlyS/vp/TdY+j5FFZP7ud89+ZGpdNqYqq5l9/6aaYa7v4b9mNTZ/1JRzAOYg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/clipboard@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.0.0.tgz#4b01bead2e404c38a3ae9955dac5522d3c30c78b" - integrity sha512-39CZuF6lxUx1fluclzMl1uG0qIUX82S2wNbyJu2WGfuMMaaIgzSp9du/bB89Ik6rR5BFUU/3p8uvzOgy4sc2sQ== +"@abp/clipboard@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.0.1.tgz#aacbd02b6ce991ca20550ad7afc40e0cea247b5e" + integrity sha512-Q7Fe167pBJ/9Vp5RyVc/JejaIzNCdTgXcnZLNC7AEtaeBVCmLwsdnCYP3i32sdvX1AIgt3exhAAsHBt0deij/g== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" clipboard "^2.0.6" -"@abp/codemirror@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-4.0.0.tgz#b122fe29eab8146e81b864bdca084b1beb1ebe61" - integrity sha512-s1yjkLOhMJklXsq7r6Ojgv2B1NM8VODz5ou/hjNqTTnZiVOVnKOdXJsRqU+5ctX1anJuUpD24SJd1KrKSAhKSQ== +"@abp/codemirror@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-4.0.1.tgz#301a58c76b31daa2b4cba7226a971d73a498a534" + integrity sha512-JFVNu1jXz65VLVQgyzVCmYq8JrxT96wDfiBRt55Snw68vqFjQnlh95t9jbITfjUsb2TZqEg7S95STDhrLrq5xg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" codemirror "^5.54.0" -"@abp/core@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.0.tgz#65e76c697e62162717e0edabf7edacc4228e682a" - integrity sha512-xcTTBFjLFZ9Trv2x9Y/c3XKezIx+x3MTXUD98QJPf1aR7T43TE/tLHRxdRfW3R8ka0O1wmlYshpkaw5pYNsj5w== +"@abp/core@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.1.tgz#1df32bc058f45571605670ca81c226a1bd87400c" + integrity sha512-8UT5lwqV/luVG/SxePSTD2FRbZXwXv3cZJKjw+gpBjhD0slWrh51XEOHsM8ciTuhcvV/tsqVU9nXckDMdO58fw== dependencies: - "@abp/utils" "^4.0.0" + "@abp/utils" "^4.0.1" -"@abp/datatables.net-bs4@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.0.tgz#fe737e054f6ba35e787a1cda185af2788ef86d39" - integrity sha512-mz7xZdzX1nlFyX7vNzB5w3RkqZ0IHrPgsXGOB7OCTKMRshDFVH2O51Oy4qoLDOXoTVeahHtR9v8thEWFR1SnZg== +"@abp/datatables.net-bs4@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.1.tgz#7538baad0eff24eca7f4246d020852f83139f645" + integrity sha512-S52jNPF4if68V+P/33NrtGPJXf6xrqgyZzz9b7qBR7HuUm3Nsn7bAslh3JNduNec/sFuE4Utl/xsFHZNjBWEog== dependencies: - "@abp/datatables.net" "~4.0.0" + "@abp/datatables.net" "~4.0.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.0.tgz#88ae5f1a6068fba55927e59f113686508e9553cb" - integrity sha512-JYTfMA1zlBNGiQHAiZiTj5ka6B6vq5k2jqsoLHup4pD9jpKwKRBGtltVsWoEnetd9eEbp4SaV/FCuh3RzmV6Pw== +"@abp/datatables.net@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.1.tgz#eb89716a37351c41b5bccfc2db88fc7ceb991a26" + integrity sha512-APFLui0w8MqsBWqP/K0QkT5cBq5SsWiqMaIGTXQKinMVLV597sUszrlhe1ISU2PqeD7iX6pCZNNOTI1NEUn9/Q== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" datatables.net "^1.10.21" -"@abp/font-awesome@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.0.tgz#6e1e4bd1175a0b8d3b095e215c07e66ad0e42e19" - integrity sha512-kHfZ45UMDWSRk1gTV/BwVfSoXksJ9UlnD3SelTGeAkvbDqtDllqlp9y6c3qQcmZUE348Xl4hDTkU8upZwswCFQ== +"@abp/font-awesome@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.1.tgz#8a9d83b2c2adfcd5abcbd9c31c315460d44a321e" + integrity sha512-+6+m/DKMnfkeQiWUsMlB6Da8u6yREyN2oQYGYhSRAK8419ym8RHHrqKJv2AClI4iLq2ppHZj8WF84+SeoCekRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/highlight.js@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-4.0.0.tgz#109a7e21805c4545a677c5b41f09ee31fc5cf08a" - integrity sha512-VjlZniAnjxSRBcUoLG3hUXMTuODIjEqUZRbre3EEvr1pmkFASQyHhVEbyXR7LJOcBJ1NAtePYPPyXU8omrqOZg== +"@abp/highlight.js@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-4.0.1.tgz#6e455d38cbd84c82d1665cb38f40d4c7ab4b7999" + integrity sha512-HyuU2I1fnhGGKEzY52gH71vop1cq9x2BWVhKxVFH8xphva3N6lftCp212PIqTo6oANTgruyqPhr3z4rGOM4OfQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" -"@abp/jquery-form@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.0.tgz#3afb41eb16d62e32c31a29c6a866f634a5a20cd8" - integrity sha512-cQq8PgzHfpK9/LxmjlnMsDn85wWvEOqjyLaepHFpTTt0341auSgXNwhp7rk71AUHD1lP3c9ALctmqu+gYmh9ag== +"@abp/jquery-form@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.1.tgz#6dc1922b2800dd635f20881a82e08104a1dd1bb5" + integrity sha512-JMBZYu/MI/GjaLTBOMB5iv8cagnLpReDULNC3r6tLNNqB1R8f3Cg1T7nF4YCuU9SYMqis1P/AuE4oEh+4rQdAQ== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#c3674d2b01b3c524de4c3fac1c6ae3657857ee7b" - integrity sha512-OGibIdw0ogjp6VQIebHM7OtMT36pjLKRrOHyCVpTmQ7NzDODV5ptG83vOnt5nFG0y9XFrOt8cnHrrd+K1Bpo/Q== +"@abp/jquery-validation-unobtrusive@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.1.tgz#4142ca31c0830fe24a1467e8cf13b55ba9d7c1dd" + integrity sha512-rdSRTcdKCHmarbrVgmPYdTiJ0G/aFKd+dr0krO7fALPTuQKChbDnHOO4/JvQSc+cd9faxa8c6ZWvlHdsof23tQ== dependencies: - "@abp/jquery-validation" "~4.0.0" + "@abp/jquery-validation" "~4.0.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.0.tgz#0a101937f89ff398317142b5271fa9a1de6571c2" - integrity sha512-4nzvhAktEINpQ2H+Hy7TOxxojTmTEm5dBTbHs1vbCWUuF0OTpouZWbMZDESdP0ZbjXcQ+vhwuM4e/pm/PeaHyQ== +"@abp/jquery-validation@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.1.tgz#74e7d795468c6986f2db15662631fcd4f67c679e" + integrity sha512-FX26aQCsMBdVWAJb7S37Lt7KoHAEHoYguh/qfZIARCpOYOOWvxfDz1wTrmADUkqdillqEiCeD/Imj8bYH9Faaw== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-validation "^1.19.2" -"@abp/jquery@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.0.tgz#00d24678b573bcc2fb14d8337ccdbf697b59d43b" - integrity sha512-gXLK97IvAZriNlG8e0qJcd7MvnpshJQURb4lg8VYibD7Fs/OBeHSAWM2Adgi3H9DnQL8XEUlWf487FSz4RC/Yg== +"@abp/jquery@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.1.tgz#aa554accb16600fd586c3a4f088040cd26d0bde8" + integrity sha512-MtiRKOLyjEWux+whPP3+zwPbpj8or756JtgjnwOTDB9tp9HLCYUaskt+oalYPvob24nDZcNu2RnMALYdCVhZAQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" jquery "~3.5.1" -"@abp/lodash@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.0.tgz#fe76d09517f6b1adf18edde94a31e13b003329dc" - integrity sha512-uitn5uYlb9xShRtV4AFOgp3lu2kADGMD4+a4fy5r4umlPM2uuMo0wMhzyYdBIG64JC5oNaqAzOwZyhhnn+HGJg== +"@abp/lodash@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.1.tgz#ec261ccaab8a70d5b32a8a7c22387e48936d38d4" + integrity sha512-Dav1QKbBeGR4VVbHHe1s3OEzN7wnb9K/vwzHrWmtO8D1Q5Z3433xjNmgL5VQ9gfxXqooSfEO4gAovZklMDHDew== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" lodash "^4.17.15" -"@abp/luxon@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.0.tgz#d9357e4fb422b6e18ebe897a86a4c4bc6fbe6858" - integrity sha512-tiE6NiSa4El88SVotxfmmpceINLz8MruaO/e/U3QjJEHjRoqlv0UBrM/x5Xz92c7ZIvL0Y4QvWNISeDg6/oqIQ== +"@abp/luxon@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.1.tgz#a540750b1605dbac856ce9c2e776c2fecf6392f9" + integrity sha512-eRumVB7UIf2XH6OZVUTvcKw0A/OSAfYV59fM+Wc4dAkNcmsNZI0gD1o0AigSGNCxTV6v+W2bFrsuooSqK99Y0Q== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.0.tgz#972acf26f5eaa4bf9b8991cbe7c19fd0005d94e2" - integrity sha512-SpUo1CfppKzkE6Rb880pgB7oQ83Mkjsi0o6eE4r4gkF5hfzkuCXOmNjTYKfQIkE4n3G9QQd+8AAN/4xj4DiDrA== +"@abp/malihu-custom-scrollbar-plugin@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.1.tgz#0a556423a67b6c949e32ffcacd72256dea6c31ee" + integrity sha512-YTwYpnQ1ZrON70gvJcnNZRwB3Ze4olGcXxiPvmRgSHbGJkSnHYJiP6PvsN1F3HDFukAJ/iUu+WwEe8OBwlyLXA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/markdown-it@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-4.0.0.tgz#abb2745871212bf5980f014324d1f175c9bf8ae0" - integrity sha512-lb7/WiagsJjDCq1lIiWI0pdl6o4EzuNMD1/Xa2p3n34jLx5x4cPhTthwHCkYqedJ22CiCV7Aevh8X2vt/b9aDw== +"@abp/markdown-it@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-4.0.1.tgz#031cb8674f2fe40cf8fbb714ea6b5cd8f7c9a5a9" + integrity sha512-8hx4MkIsoDYDsTsIRbqRHPpoiexXK1SeP3VTweLcUnWZxdZ3i8dj3ELy8lbt0O9LrqFACMJmLlVdhrur3w2mfQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" markdown-it "^11.0.0" -"@abp/owl.carousel@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-4.0.0.tgz#5f95ae6e8e57b4c93dfa45552d1786af4ab32bda" - integrity sha512-C+gaH+X0H8UXASPUlotq58Ygv2ER3d/ARUj8mN78dscIOXHzr9SIQCTuvvLJF2YZeGhkF/aCUHy+VwiIBlDqvQ== +"@abp/owl.carousel@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-4.0.1.tgz#7241fc23aa5bc63dc1668a04e32c56134f5c3d16" + integrity sha512-+H3ypcPAKymA0/yHHT4tr26thhFM7wc+p/ethJaVH26w+REFASnweLRlMMNC7pV+JFpEnHwUOswkRP0/96i25w== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" owl.carousel "^2.3.4" -"@abp/prismjs@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.0.0.tgz#7b98c233ac1f0025c14b27c1ba62910bd9022442" - integrity sha512-Eh63EUe2wnl8P1iyPo9Glt9BD6yFdrAjIbvBeFheJnSWgvij3mayOtCAq9P2ksKWo1Gq3hv1lm/p9vdYFRHoKw== +"@abp/prismjs@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.0.1.tgz#8e614878a9d1d63504fe7ba6b7d44093947d862b" + integrity sha512-qZP4TlQDiXaAIrDmpzQJeL/9mtTCxQCIbELDnBHMZFDrYNENOKZeBmvD9WAhgzL7FJcnPtOomJgZ5x2rqpBW/w== dependencies: - "@abp/clipboard" "~4.0.0" - "@abp/core" "~4.0.0" + "@abp/clipboard" "~4.0.1" + "@abp/core" "~4.0.1" prismjs "^1.20.0" -"@abp/select2@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.0.tgz#8fdf4c5e18f4093ee4e073dab950cf7aa9b2a540" - integrity sha512-XeXahcDMczdkZdP07yhQriIvbi1N5meeSGTnFyZX+bNTGzUOarPcuNYZ6Mcl3351HcyESHzuJbKbsk3RB1kGeg== +"@abp/select2@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.1.tgz#8983e7b5c3afb862f08b2730b70e59d726e9b5d5" + integrity sha512-WdzY2hvsS/4vz/VXpxq2muSzzE8ggchiIrICy/WKchJxL9L08DM796t6aE6rEl9wucY8XEzzWrPOVqAjJmnXFA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" select2 "^4.0.13" -"@abp/sweetalert@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.0.tgz#0d93e92e95c6855aef7e19532a7513a078ece216" - integrity sha512-y3XtZqnUVZuQohpRO1ImyBZXhtrm4H+typIL/9VgcnlvQjBTyIaiwDmU8j07Bb2rKJKe0prVkkVARO7OnjOS5A== +"@abp/sweetalert@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.1.tgz#0088610915ad6db0a140b77832a37c10066eb4ee" + integrity sha512-t4/44oQCMngSjVqmeRWXwrXa/pRKc3CEpyyTiGIXki4dWJ21j0ePCw2l3rvOJWnpoCznhxa/UGxLfRfK1NEzRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" sweetalert "^2.1.2" -"@abp/timeago@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.0.tgz#509cd8a84cd94c2644824b0c3af10c8fff6de2dc" - integrity sha512-90jzLYJusYTPwMbak1+XkXE85OPOXPpysRbL28KQwl7WLNBm8wx6IEoVZOHvOrpYscYdyeWhZCgILSJ8DR3a2Q== +"@abp/timeago@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.1.tgz#8c161645534eb1f62fe4607450acf7345729e711" + integrity sha512-PsPobV79U2qzVY+WBsmJM1ohSF4jqcLnL4/7qyJvxlb1WwbCl1F5D4cpiJP4zsM4clPW4mbSsiauMNp+HTNKEA== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" timeago "^1.6.7" -"@abp/toastr@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.0.tgz#06e28665cb7f6eefee3f69c985dd2b3f86cd7f1d" - integrity sha512-YL1fahVpDszhwpnRTN87GCP523Mkaw42ApT2A/hZuBdwRzP/u5GwRfng0i/uhdYXCMkTKuHmaHnRyqhGiv7nfQ== +"@abp/toastr@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.1.tgz#ecb6f6193b7edc3150d0614ab9457472baf1cce3" + integrity sha512-bTTz0O8zj7fMhdoummP2Ed5Z8SJTmR6svzNchBXNDrnRAcDQvTihPTcg0UpH8BEDFczbLowq09CG2A/RMSJoug== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" toastr "^2.1.4" -"@abp/tui-editor@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-4.0.0.tgz#dff89b1993a89115fef34bd2247e9939a2d3942f" - integrity sha512-Q09e2AX9PhzmoZFVw69RyuiZxE7TVLGYcM0RS4PxBYccFME+VPfG5D3/SfqMr+OwroI4iqh+tIgVyS8uyo/r0A== +"@abp/tui-editor@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-4.0.1.tgz#3e9a7f464f6ff3880e21518acc42556f82618294" + integrity sha512-BeUNK/R15TrNA14AarQj+WBSMp76dfaz8zeFP7l25FXPMi571mwZQnb+F2wJvsCU3jCWaO/pSGoIY6KehHsXsg== dependencies: - "@abp/codemirror" "~4.0.0" - "@abp/highlight.js" "~4.0.0" - "@abp/jquery" "~4.0.0" - "@abp/markdown-it" "~4.0.0" + "@abp/codemirror" "~4.0.1" + "@abp/highlight.js" "~4.0.1" + "@abp/jquery" "~4.0.1" + "@abp/markdown-it" "~4.0.1" tui-editor "^1.4.10" -"@abp/utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" - integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== +"@abp/utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.1.tgz#9a4cb420266c49d8084776bd31c86681d4d4d125" + integrity sha512-nI2ZyaNpvohr75p8jeMPWze+hX+mV47EHI+Zloa4GgGmJqrULdG71kYh45R+jGmMTbQL6huaXGnpz4gNF9TGyQ== dependencies: just-compare "^1.3.0" diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj index 8c9f39e023..308a0b8c31 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj +++ b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj @@ -11,7 +11,7 @@ - + diff --git a/modules/blogging/test/Volo.Blogging.Application.Tests/Volo/Blogging/PostAppService_Tests.cs b/modules/blogging/test/Volo.Blogging.Application.Tests/Volo/Blogging/PostAppService_Tests.cs index 260304d6ba..654ddcbe44 100644 --- a/modules/blogging/test/Volo.Blogging.Application.Tests/Volo/Blogging/PostAppService_Tests.cs +++ b/modules/blogging/test/Volo.Blogging.Application.Tests/Volo/Blogging/PostAppService_Tests.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using System.Threading.Tasks; using Shouldly; using Volo.Blogging.Blogs; @@ -55,7 +56,7 @@ namespace Volo.Blogging Url = title.Replace(" ", "-") }); - newPostDto.Id.ShouldNotBeNull(); + newPostDto.Id.ShouldNotBe(Guid.Empty); UsingDbContext(context => { @@ -87,7 +88,7 @@ namespace Volo.Blogging Content = newContent, Url = newTitle.Replace(" ", "-") }); - + UsingDbContext(context => { var post = context.Posts.FirstOrDefault(q => q.Id == oldPost.Id); diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj index cc27807686..dbf58f3b71 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj @@ -9,7 +9,7 @@ - + diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json index 840ebe7e15..2ac9d439cd 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": "^4.0.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.0.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 d5e4cc185e..9d399b77de 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@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.0.tgz#b1822cf5bbc0f6eeb414ebd0877f6d1115a81fe7" - integrity sha512-yYXQkEnNhftzm+ZI8d3VFMlV5UuLNTMQQwV2eZ8tJfstUQrKV9bVd3+NdDOr3AkvcD8D7mvMFeBuoMYteL5kLQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.1.tgz#ce8e3eb830a8e8f9eecb1a3b3bd70c2832fdf15e" + integrity sha512-w+ZG8Ewx9wWfbvRC2MAjJl+rXuXSHLhhGOiJTk68unWLNziDtNQzcSXG/Z5c1hA+acJSGqDoJGEGs4FVM136og== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.0.tgz#ba896056e9df5ac58e108df96996fbb2ca7a1a15" - integrity sha512-3RNn6VrNA+cqnPBoSbiCazN05cC2rhcRFMMxkEte+LImGbGOsxc4MflzHg5On1ExCGdqko8Axbw/ydy44Ak4Hw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.0.0" - "@abp/bootstrap" "~4.0.0" - "@abp/bootstrap-datepicker" "~4.0.0" - "@abp/datatables.net-bs4" "~4.0.0" - "@abp/font-awesome" "~4.0.0" - "@abp/jquery-form" "~4.0.0" - "@abp/jquery-validation-unobtrusive" "~4.0.0" - "@abp/lodash" "~4.0.0" - "@abp/luxon" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/select2" "~4.0.0" - "@abp/sweetalert" "~4.0.0" - "@abp/timeago" "~4.0.0" - "@abp/toastr" "~4.0.0" - -"@abp/aspnetcore.mvc.ui@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.0.tgz#68502177a05f6ce7191a09b06a18c5b5dfab425d" - integrity sha512-tYHUWMwnwInrGSzC/OdN6bH/VHZEz5DP3rx2U6fcb0I5GvvRdQZxVgUvmWn6DeMA3PG10Gra4SfkhZqRQq9rjQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.1.tgz#cd9d0eb11309c597dffd26277cd1bd7c5b1e0e2f" + integrity sha512-QGoCN/my0eAfa4tx5ytDxArIoz2i58jFFVUGso1Lekn54JvSt+WLz2p3uyTGatZ03Bp9836elhFnIopn12WvBw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.0.1" + "@abp/bootstrap" "~4.0.1" + "@abp/bootstrap-datepicker" "~4.0.1" + "@abp/datatables.net-bs4" "~4.0.1" + "@abp/font-awesome" "~4.0.1" + "@abp/jquery-form" "~4.0.1" + "@abp/jquery-validation-unobtrusive" "~4.0.1" + "@abp/lodash" "~4.0.1" + "@abp/luxon" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/select2" "~4.0.1" + "@abp/sweetalert" "~4.0.1" + "@abp/timeago" "~4.0.1" + "@abp/toastr" "~4.0.1" + +"@abp/aspnetcore.mvc.ui@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.1.tgz#6490c147a56e4f7055d2ca77f20baf1f60f56867" + integrity sha512-4B3icJrlpuZgMaX52ninyaenH7zLwepePEscDrLaFY9wyonKpZ2zh+xplnyM6vjNd+PhErWuA2+ssCswFhrJ3A== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,145 +43,145 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/bootstrap-datepicker@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.0.tgz#cdbd2c388c6d7ce8c6d72443038975063e6c6d02" - integrity sha512-hauH8VhpC8cxv1wCR6bVBcNqZepftdBXxEVID7TSAqgNyWjm/CrJqWLI+A0nnkG3IHoIm9D22iF47BamuYHptw== +"@abp/bootstrap-datepicker@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.1.tgz#aad891263edff66f816e003ba4fa7f8acfe8e0b6" + integrity sha512-S0oaVZmXsDcOJLAyoGY0TvP/7bZx0GHIbU9BIhIL2Wl74HYaokjkTr6/IleIek9YeiF2vm9FkrUP1dKH/4f7Gg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.0.tgz#04174f18055f76f936e6fb73e5ff71ffa08a8528" - integrity sha512-Tmr0yoSWg7XHl02X5wv04CvYcL8KCpX8u6YGJj31jRZxUTeCvs5ETXlepOWcdxPQqi/4olXv5B9GEz5S9l5nZA== +"@abp/bootstrap@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.1.tgz#3e41bdf9b3e9f8c497b9fafe22a4851d0401b31b" + integrity sha512-GoSaNWvswRHVoUrq7xClFQYtwqIlyS/vp/TdY+j5FFZP7ud89+ZGpdNqYqq5l9/6aaYa7v4b9mNTZ/1JRzAOYg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.0.tgz#65e76c697e62162717e0edabf7edacc4228e682a" - integrity sha512-xcTTBFjLFZ9Trv2x9Y/c3XKezIx+x3MTXUD98QJPf1aR7T43TE/tLHRxdRfW3R8ka0O1wmlYshpkaw5pYNsj5w== +"@abp/core@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.1.tgz#1df32bc058f45571605670ca81c226a1bd87400c" + integrity sha512-8UT5lwqV/luVG/SxePSTD2FRbZXwXv3cZJKjw+gpBjhD0slWrh51XEOHsM8ciTuhcvV/tsqVU9nXckDMdO58fw== dependencies: - "@abp/utils" "^4.0.0" + "@abp/utils" "^4.0.1" -"@abp/datatables.net-bs4@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.0.tgz#fe737e054f6ba35e787a1cda185af2788ef86d39" - integrity sha512-mz7xZdzX1nlFyX7vNzB5w3RkqZ0IHrPgsXGOB7OCTKMRshDFVH2O51Oy4qoLDOXoTVeahHtR9v8thEWFR1SnZg== +"@abp/datatables.net-bs4@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.1.tgz#7538baad0eff24eca7f4246d020852f83139f645" + integrity sha512-S52jNPF4if68V+P/33NrtGPJXf6xrqgyZzz9b7qBR7HuUm3Nsn7bAslh3JNduNec/sFuE4Utl/xsFHZNjBWEog== dependencies: - "@abp/datatables.net" "~4.0.0" + "@abp/datatables.net" "~4.0.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.0.tgz#88ae5f1a6068fba55927e59f113686508e9553cb" - integrity sha512-JYTfMA1zlBNGiQHAiZiTj5ka6B6vq5k2jqsoLHup4pD9jpKwKRBGtltVsWoEnetd9eEbp4SaV/FCuh3RzmV6Pw== +"@abp/datatables.net@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.1.tgz#eb89716a37351c41b5bccfc2db88fc7ceb991a26" + integrity sha512-APFLui0w8MqsBWqP/K0QkT5cBq5SsWiqMaIGTXQKinMVLV597sUszrlhe1ISU2PqeD7iX6pCZNNOTI1NEUn9/Q== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" datatables.net "^1.10.21" -"@abp/font-awesome@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.0.tgz#6e1e4bd1175a0b8d3b095e215c07e66ad0e42e19" - integrity sha512-kHfZ45UMDWSRk1gTV/BwVfSoXksJ9UlnD3SelTGeAkvbDqtDllqlp9y6c3qQcmZUE348Xl4hDTkU8upZwswCFQ== +"@abp/font-awesome@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.1.tgz#8a9d83b2c2adfcd5abcbd9c31c315460d44a321e" + integrity sha512-+6+m/DKMnfkeQiWUsMlB6Da8u6yREyN2oQYGYhSRAK8419ym8RHHrqKJv2AClI4iLq2ppHZj8WF84+SeoCekRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.0.tgz#3afb41eb16d62e32c31a29c6a866f634a5a20cd8" - integrity sha512-cQq8PgzHfpK9/LxmjlnMsDn85wWvEOqjyLaepHFpTTt0341auSgXNwhp7rk71AUHD1lP3c9ALctmqu+gYmh9ag== +"@abp/jquery-form@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.1.tgz#6dc1922b2800dd635f20881a82e08104a1dd1bb5" + integrity sha512-JMBZYu/MI/GjaLTBOMB5iv8cagnLpReDULNC3r6tLNNqB1R8f3Cg1T7nF4YCuU9SYMqis1P/AuE4oEh+4rQdAQ== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#c3674d2b01b3c524de4c3fac1c6ae3657857ee7b" - integrity sha512-OGibIdw0ogjp6VQIebHM7OtMT36pjLKRrOHyCVpTmQ7NzDODV5ptG83vOnt5nFG0y9XFrOt8cnHrrd+K1Bpo/Q== +"@abp/jquery-validation-unobtrusive@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.1.tgz#4142ca31c0830fe24a1467e8cf13b55ba9d7c1dd" + integrity sha512-rdSRTcdKCHmarbrVgmPYdTiJ0G/aFKd+dr0krO7fALPTuQKChbDnHOO4/JvQSc+cd9faxa8c6ZWvlHdsof23tQ== dependencies: - "@abp/jquery-validation" "~4.0.0" + "@abp/jquery-validation" "~4.0.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.0.tgz#0a101937f89ff398317142b5271fa9a1de6571c2" - integrity sha512-4nzvhAktEINpQ2H+Hy7TOxxojTmTEm5dBTbHs1vbCWUuF0OTpouZWbMZDESdP0ZbjXcQ+vhwuM4e/pm/PeaHyQ== +"@abp/jquery-validation@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.1.tgz#74e7d795468c6986f2db15662631fcd4f67c679e" + integrity sha512-FX26aQCsMBdVWAJb7S37Lt7KoHAEHoYguh/qfZIARCpOYOOWvxfDz1wTrmADUkqdillqEiCeD/Imj8bYH9Faaw== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-validation "^1.19.2" -"@abp/jquery@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.0.tgz#00d24678b573bcc2fb14d8337ccdbf697b59d43b" - integrity sha512-gXLK97IvAZriNlG8e0qJcd7MvnpshJQURb4lg8VYibD7Fs/OBeHSAWM2Adgi3H9DnQL8XEUlWf487FSz4RC/Yg== +"@abp/jquery@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.1.tgz#aa554accb16600fd586c3a4f088040cd26d0bde8" + integrity sha512-MtiRKOLyjEWux+whPP3+zwPbpj8or756JtgjnwOTDB9tp9HLCYUaskt+oalYPvob24nDZcNu2RnMALYdCVhZAQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" jquery "~3.5.1" -"@abp/lodash@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.0.tgz#fe76d09517f6b1adf18edde94a31e13b003329dc" - integrity sha512-uitn5uYlb9xShRtV4AFOgp3lu2kADGMD4+a4fy5r4umlPM2uuMo0wMhzyYdBIG64JC5oNaqAzOwZyhhnn+HGJg== +"@abp/lodash@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.1.tgz#ec261ccaab8a70d5b32a8a7c22387e48936d38d4" + integrity sha512-Dav1QKbBeGR4VVbHHe1s3OEzN7wnb9K/vwzHrWmtO8D1Q5Z3433xjNmgL5VQ9gfxXqooSfEO4gAovZklMDHDew== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" lodash "^4.17.15" -"@abp/luxon@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.0.tgz#d9357e4fb422b6e18ebe897a86a4c4bc6fbe6858" - integrity sha512-tiE6NiSa4El88SVotxfmmpceINLz8MruaO/e/U3QjJEHjRoqlv0UBrM/x5Xz92c7ZIvL0Y4QvWNISeDg6/oqIQ== +"@abp/luxon@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.1.tgz#a540750b1605dbac856ce9c2e776c2fecf6392f9" + integrity sha512-eRumVB7UIf2XH6OZVUTvcKw0A/OSAfYV59fM+Wc4dAkNcmsNZI0gD1o0AigSGNCxTV6v+W2bFrsuooSqK99Y0Q== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.0.tgz#972acf26f5eaa4bf9b8991cbe7c19fd0005d94e2" - integrity sha512-SpUo1CfppKzkE6Rb880pgB7oQ83Mkjsi0o6eE4r4gkF5hfzkuCXOmNjTYKfQIkE4n3G9QQd+8AAN/4xj4DiDrA== +"@abp/malihu-custom-scrollbar-plugin@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.1.tgz#0a556423a67b6c949e32ffcacd72256dea6c31ee" + integrity sha512-YTwYpnQ1ZrON70gvJcnNZRwB3Ze4olGcXxiPvmRgSHbGJkSnHYJiP6PvsN1F3HDFukAJ/iUu+WwEe8OBwlyLXA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.0.tgz#8fdf4c5e18f4093ee4e073dab950cf7aa9b2a540" - integrity sha512-XeXahcDMczdkZdP07yhQriIvbi1N5meeSGTnFyZX+bNTGzUOarPcuNYZ6Mcl3351HcyESHzuJbKbsk3RB1kGeg== +"@abp/select2@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.1.tgz#8983e7b5c3afb862f08b2730b70e59d726e9b5d5" + integrity sha512-WdzY2hvsS/4vz/VXpxq2muSzzE8ggchiIrICy/WKchJxL9L08DM796t6aE6rEl9wucY8XEzzWrPOVqAjJmnXFA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" select2 "^4.0.13" -"@abp/sweetalert@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.0.tgz#0d93e92e95c6855aef7e19532a7513a078ece216" - integrity sha512-y3XtZqnUVZuQohpRO1ImyBZXhtrm4H+typIL/9VgcnlvQjBTyIaiwDmU8j07Bb2rKJKe0prVkkVARO7OnjOS5A== +"@abp/sweetalert@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.1.tgz#0088610915ad6db0a140b77832a37c10066eb4ee" + integrity sha512-t4/44oQCMngSjVqmeRWXwrXa/pRKc3CEpyyTiGIXki4dWJ21j0ePCw2l3rvOJWnpoCznhxa/UGxLfRfK1NEzRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" sweetalert "^2.1.2" -"@abp/timeago@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.0.tgz#509cd8a84cd94c2644824b0c3af10c8fff6de2dc" - integrity sha512-90jzLYJusYTPwMbak1+XkXE85OPOXPpysRbL28KQwl7WLNBm8wx6IEoVZOHvOrpYscYdyeWhZCgILSJ8DR3a2Q== +"@abp/timeago@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.1.tgz#8c161645534eb1f62fe4607450acf7345729e711" + integrity sha512-PsPobV79U2qzVY+WBsmJM1ohSF4jqcLnL4/7qyJvxlb1WwbCl1F5D4cpiJP4zsM4clPW4mbSsiauMNp+HTNKEA== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" timeago "^1.6.7" -"@abp/toastr@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.0.tgz#06e28665cb7f6eefee3f69c985dd2b3f86cd7f1d" - integrity sha512-YL1fahVpDszhwpnRTN87GCP523Mkaw42ApT2A/hZuBdwRzP/u5GwRfng0i/uhdYXCMkTKuHmaHnRyqhGiv7nfQ== +"@abp/toastr@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.1.tgz#ecb6f6193b7edc3150d0614ab9457472baf1cce3" + integrity sha512-bTTz0O8zj7fMhdoummP2Ed5Z8SJTmR6svzNchBXNDrnRAcDQvTihPTcg0UpH8BEDFczbLowq09CG2A/RMSJoug== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" toastr "^2.1.4" -"@abp/utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" - integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== +"@abp/utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.1.tgz#9a4cb420266c49d8084776bd31c86681d4d4d125" + integrity sha512-nI2ZyaNpvohr75p8jeMPWze+hX+mV47EHI+Zloa4GgGmJqrULdG71kYh45R+jGmMTbQL6huaXGnpz4gNF9TGyQ== dependencies: just-compare "^1.3.0" diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json index d6909af636..4794011186 100644 --- a/modules/cms-kit/angular/package.json +++ b/modules/cms-kit/angular/package.json @@ -16,10 +16,10 @@ "private": true, "dependencies": { "@abp/ng.account": "~3.3.2", - "@abp/ng.identity": "~4.0.0", - "@abp/ng.setting-management": "~4.0.0", - "@abp/ng.tenant-management": "~4.0.0", - "@abp/ng.theme.basic": "~4.0.0", + "@abp/ng.identity": "~4.0.1", + "@abp/ng.setting-management": "~4.0.1", + "@abp/ng.tenant-management": "~4.0.1", + "@abp/ng.theme.basic": "~4.0.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 2fe27fc5f4..1f4bdfd77f 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": ">=4.0.0", - "@abp/ng.theme.shared": ">=4.0.0" + "@abp/ng.core": ">=4.0.1", + "@abp/ng.theme.shared": ">=4.0.1" }, "dependencies": { "tslib": "^2.0.0" diff --git a/modules/cms-kit/common.props b/modules/cms-kit/common.props deleted file mode 100644 index 420d9c492c..0000000000 --- a/modules/cms-kit/common.props +++ /dev/null @@ -1,13 +0,0 @@ - - - latest - 0.1.0 - $(NoWarn);CS1591;CS0436 - module - - - - - - - \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Host.Shared/Volo.CmsKit.Host.Shared.csproj b/modules/cms-kit/host/Volo.CmsKit.Host.Shared/Volo.CmsKit.Host.Shared.csproj index c6a4484865..aca54af174 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Host.Shared/Volo.CmsKit.Host.Shared.csproj +++ b/modules/cms-kit/host/Volo.CmsKit.Host.Shared/Volo.CmsKit.Host.Shared.csproj @@ -1,7 +1,5 @@ - - netstandard2.0 Volo.CmsKit diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj index d019896648..688c47bc87 100644 --- a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj @@ -1,7 +1,5 @@ - - net5.0 Volo.CmsKit @@ -10,9 +8,9 @@ - + - + diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj index fb149e574f..d70327c249 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj @@ -8,9 +8,9 @@ - + - + diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json index ea7cc2f166..5e131b4756 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": "^4.0.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.0.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 3b9cfcf521..12469bed18 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@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.0.tgz#b1822cf5bbc0f6eeb414ebd0877f6d1115a81fe7" - integrity sha512-yYXQkEnNhftzm+ZI8d3VFMlV5UuLNTMQQwV2eZ8tJfstUQrKV9bVd3+NdDOr3AkvcD8D7mvMFeBuoMYteL5kLQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.1.tgz#ce8e3eb830a8e8f9eecb1a3b3bd70c2832fdf15e" + integrity sha512-w+ZG8Ewx9wWfbvRC2MAjJl+rXuXSHLhhGOiJTk68unWLNziDtNQzcSXG/Z5c1hA+acJSGqDoJGEGs4FVM136og== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.0.tgz#ba896056e9df5ac58e108df96996fbb2ca7a1a15" - integrity sha512-3RNn6VrNA+cqnPBoSbiCazN05cC2rhcRFMMxkEte+LImGbGOsxc4MflzHg5On1ExCGdqko8Axbw/ydy44Ak4Hw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.0.0" - "@abp/bootstrap" "~4.0.0" - "@abp/bootstrap-datepicker" "~4.0.0" - "@abp/datatables.net-bs4" "~4.0.0" - "@abp/font-awesome" "~4.0.0" - "@abp/jquery-form" "~4.0.0" - "@abp/jquery-validation-unobtrusive" "~4.0.0" - "@abp/lodash" "~4.0.0" - "@abp/luxon" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/select2" "~4.0.0" - "@abp/sweetalert" "~4.0.0" - "@abp/timeago" "~4.0.0" - "@abp/toastr" "~4.0.0" - -"@abp/aspnetcore.mvc.ui@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.0.tgz#68502177a05f6ce7191a09b06a18c5b5dfab425d" - integrity sha512-tYHUWMwnwInrGSzC/OdN6bH/VHZEz5DP3rx2U6fcb0I5GvvRdQZxVgUvmWn6DeMA3PG10Gra4SfkhZqRQq9rjQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.1.tgz#cd9d0eb11309c597dffd26277cd1bd7c5b1e0e2f" + integrity sha512-QGoCN/my0eAfa4tx5ytDxArIoz2i58jFFVUGso1Lekn54JvSt+WLz2p3uyTGatZ03Bp9836elhFnIopn12WvBw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.0.1" + "@abp/bootstrap" "~4.0.1" + "@abp/bootstrap-datepicker" "~4.0.1" + "@abp/datatables.net-bs4" "~4.0.1" + "@abp/font-awesome" "~4.0.1" + "@abp/jquery-form" "~4.0.1" + "@abp/jquery-validation-unobtrusive" "~4.0.1" + "@abp/lodash" "~4.0.1" + "@abp/luxon" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/select2" "~4.0.1" + "@abp/sweetalert" "~4.0.1" + "@abp/timeago" "~4.0.1" + "@abp/toastr" "~4.0.1" + +"@abp/aspnetcore.mvc.ui@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.1.tgz#6490c147a56e4f7055d2ca77f20baf1f60f56867" + integrity sha512-4B3icJrlpuZgMaX52ninyaenH7zLwepePEscDrLaFY9wyonKpZ2zh+xplnyM6vjNd+PhErWuA2+ssCswFhrJ3A== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,145 +43,145 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/bootstrap-datepicker@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.0.tgz#cdbd2c388c6d7ce8c6d72443038975063e6c6d02" - integrity sha512-hauH8VhpC8cxv1wCR6bVBcNqZepftdBXxEVID7TSAqgNyWjm/CrJqWLI+A0nnkG3IHoIm9D22iF47BamuYHptw== +"@abp/bootstrap-datepicker@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.1.tgz#aad891263edff66f816e003ba4fa7f8acfe8e0b6" + integrity sha512-S0oaVZmXsDcOJLAyoGY0TvP/7bZx0GHIbU9BIhIL2Wl74HYaokjkTr6/IleIek9YeiF2vm9FkrUP1dKH/4f7Gg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.0.tgz#04174f18055f76f936e6fb73e5ff71ffa08a8528" - integrity sha512-Tmr0yoSWg7XHl02X5wv04CvYcL8KCpX8u6YGJj31jRZxUTeCvs5ETXlepOWcdxPQqi/4olXv5B9GEz5S9l5nZA== +"@abp/bootstrap@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.1.tgz#3e41bdf9b3e9f8c497b9fafe22a4851d0401b31b" + integrity sha512-GoSaNWvswRHVoUrq7xClFQYtwqIlyS/vp/TdY+j5FFZP7ud89+ZGpdNqYqq5l9/6aaYa7v4b9mNTZ/1JRzAOYg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.0.tgz#65e76c697e62162717e0edabf7edacc4228e682a" - integrity sha512-xcTTBFjLFZ9Trv2x9Y/c3XKezIx+x3MTXUD98QJPf1aR7T43TE/tLHRxdRfW3R8ka0O1wmlYshpkaw5pYNsj5w== +"@abp/core@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.1.tgz#1df32bc058f45571605670ca81c226a1bd87400c" + integrity sha512-8UT5lwqV/luVG/SxePSTD2FRbZXwXv3cZJKjw+gpBjhD0slWrh51XEOHsM8ciTuhcvV/tsqVU9nXckDMdO58fw== dependencies: - "@abp/utils" "^4.0.0" + "@abp/utils" "^4.0.1" -"@abp/datatables.net-bs4@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.0.tgz#fe737e054f6ba35e787a1cda185af2788ef86d39" - integrity sha512-mz7xZdzX1nlFyX7vNzB5w3RkqZ0IHrPgsXGOB7OCTKMRshDFVH2O51Oy4qoLDOXoTVeahHtR9v8thEWFR1SnZg== +"@abp/datatables.net-bs4@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.1.tgz#7538baad0eff24eca7f4246d020852f83139f645" + integrity sha512-S52jNPF4if68V+P/33NrtGPJXf6xrqgyZzz9b7qBR7HuUm3Nsn7bAslh3JNduNec/sFuE4Utl/xsFHZNjBWEog== dependencies: - "@abp/datatables.net" "~4.0.0" + "@abp/datatables.net" "~4.0.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.0.tgz#88ae5f1a6068fba55927e59f113686508e9553cb" - integrity sha512-JYTfMA1zlBNGiQHAiZiTj5ka6B6vq5k2jqsoLHup4pD9jpKwKRBGtltVsWoEnetd9eEbp4SaV/FCuh3RzmV6Pw== +"@abp/datatables.net@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.1.tgz#eb89716a37351c41b5bccfc2db88fc7ceb991a26" + integrity sha512-APFLui0w8MqsBWqP/K0QkT5cBq5SsWiqMaIGTXQKinMVLV597sUszrlhe1ISU2PqeD7iX6pCZNNOTI1NEUn9/Q== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" datatables.net "^1.10.21" -"@abp/font-awesome@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.0.tgz#6e1e4bd1175a0b8d3b095e215c07e66ad0e42e19" - integrity sha512-kHfZ45UMDWSRk1gTV/BwVfSoXksJ9UlnD3SelTGeAkvbDqtDllqlp9y6c3qQcmZUE348Xl4hDTkU8upZwswCFQ== +"@abp/font-awesome@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.1.tgz#8a9d83b2c2adfcd5abcbd9c31c315460d44a321e" + integrity sha512-+6+m/DKMnfkeQiWUsMlB6Da8u6yREyN2oQYGYhSRAK8419ym8RHHrqKJv2AClI4iLq2ppHZj8WF84+SeoCekRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.0.tgz#3afb41eb16d62e32c31a29c6a866f634a5a20cd8" - integrity sha512-cQq8PgzHfpK9/LxmjlnMsDn85wWvEOqjyLaepHFpTTt0341auSgXNwhp7rk71AUHD1lP3c9ALctmqu+gYmh9ag== +"@abp/jquery-form@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.1.tgz#6dc1922b2800dd635f20881a82e08104a1dd1bb5" + integrity sha512-JMBZYu/MI/GjaLTBOMB5iv8cagnLpReDULNC3r6tLNNqB1R8f3Cg1T7nF4YCuU9SYMqis1P/AuE4oEh+4rQdAQ== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#c3674d2b01b3c524de4c3fac1c6ae3657857ee7b" - integrity sha512-OGibIdw0ogjp6VQIebHM7OtMT36pjLKRrOHyCVpTmQ7NzDODV5ptG83vOnt5nFG0y9XFrOt8cnHrrd+K1Bpo/Q== +"@abp/jquery-validation-unobtrusive@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.1.tgz#4142ca31c0830fe24a1467e8cf13b55ba9d7c1dd" + integrity sha512-rdSRTcdKCHmarbrVgmPYdTiJ0G/aFKd+dr0krO7fALPTuQKChbDnHOO4/JvQSc+cd9faxa8c6ZWvlHdsof23tQ== dependencies: - "@abp/jquery-validation" "~4.0.0" + "@abp/jquery-validation" "~4.0.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.0.tgz#0a101937f89ff398317142b5271fa9a1de6571c2" - integrity sha512-4nzvhAktEINpQ2H+Hy7TOxxojTmTEm5dBTbHs1vbCWUuF0OTpouZWbMZDESdP0ZbjXcQ+vhwuM4e/pm/PeaHyQ== +"@abp/jquery-validation@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.1.tgz#74e7d795468c6986f2db15662631fcd4f67c679e" + integrity sha512-FX26aQCsMBdVWAJb7S37Lt7KoHAEHoYguh/qfZIARCpOYOOWvxfDz1wTrmADUkqdillqEiCeD/Imj8bYH9Faaw== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-validation "^1.19.2" -"@abp/jquery@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.0.tgz#00d24678b573bcc2fb14d8337ccdbf697b59d43b" - integrity sha512-gXLK97IvAZriNlG8e0qJcd7MvnpshJQURb4lg8VYibD7Fs/OBeHSAWM2Adgi3H9DnQL8XEUlWf487FSz4RC/Yg== +"@abp/jquery@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.1.tgz#aa554accb16600fd586c3a4f088040cd26d0bde8" + integrity sha512-MtiRKOLyjEWux+whPP3+zwPbpj8or756JtgjnwOTDB9tp9HLCYUaskt+oalYPvob24nDZcNu2RnMALYdCVhZAQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" jquery "~3.5.1" -"@abp/lodash@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.0.tgz#fe76d09517f6b1adf18edde94a31e13b003329dc" - integrity sha512-uitn5uYlb9xShRtV4AFOgp3lu2kADGMD4+a4fy5r4umlPM2uuMo0wMhzyYdBIG64JC5oNaqAzOwZyhhnn+HGJg== +"@abp/lodash@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.1.tgz#ec261ccaab8a70d5b32a8a7c22387e48936d38d4" + integrity sha512-Dav1QKbBeGR4VVbHHe1s3OEzN7wnb9K/vwzHrWmtO8D1Q5Z3433xjNmgL5VQ9gfxXqooSfEO4gAovZklMDHDew== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" lodash "^4.17.15" -"@abp/luxon@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.0.tgz#d9357e4fb422b6e18ebe897a86a4c4bc6fbe6858" - integrity sha512-tiE6NiSa4El88SVotxfmmpceINLz8MruaO/e/U3QjJEHjRoqlv0UBrM/x5Xz92c7ZIvL0Y4QvWNISeDg6/oqIQ== +"@abp/luxon@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.1.tgz#a540750b1605dbac856ce9c2e776c2fecf6392f9" + integrity sha512-eRumVB7UIf2XH6OZVUTvcKw0A/OSAfYV59fM+Wc4dAkNcmsNZI0gD1o0AigSGNCxTV6v+W2bFrsuooSqK99Y0Q== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.0.tgz#972acf26f5eaa4bf9b8991cbe7c19fd0005d94e2" - integrity sha512-SpUo1CfppKzkE6Rb880pgB7oQ83Mkjsi0o6eE4r4gkF5hfzkuCXOmNjTYKfQIkE4n3G9QQd+8AAN/4xj4DiDrA== +"@abp/malihu-custom-scrollbar-plugin@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.1.tgz#0a556423a67b6c949e32ffcacd72256dea6c31ee" + integrity sha512-YTwYpnQ1ZrON70gvJcnNZRwB3Ze4olGcXxiPvmRgSHbGJkSnHYJiP6PvsN1F3HDFukAJ/iUu+WwEe8OBwlyLXA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.0.tgz#8fdf4c5e18f4093ee4e073dab950cf7aa9b2a540" - integrity sha512-XeXahcDMczdkZdP07yhQriIvbi1N5meeSGTnFyZX+bNTGzUOarPcuNYZ6Mcl3351HcyESHzuJbKbsk3RB1kGeg== +"@abp/select2@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.1.tgz#8983e7b5c3afb862f08b2730b70e59d726e9b5d5" + integrity sha512-WdzY2hvsS/4vz/VXpxq2muSzzE8ggchiIrICy/WKchJxL9L08DM796t6aE6rEl9wucY8XEzzWrPOVqAjJmnXFA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" select2 "^4.0.13" -"@abp/sweetalert@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.0.tgz#0d93e92e95c6855aef7e19532a7513a078ece216" - integrity sha512-y3XtZqnUVZuQohpRO1ImyBZXhtrm4H+typIL/9VgcnlvQjBTyIaiwDmU8j07Bb2rKJKe0prVkkVARO7OnjOS5A== +"@abp/sweetalert@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.1.tgz#0088610915ad6db0a140b77832a37c10066eb4ee" + integrity sha512-t4/44oQCMngSjVqmeRWXwrXa/pRKc3CEpyyTiGIXki4dWJ21j0ePCw2l3rvOJWnpoCznhxa/UGxLfRfK1NEzRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" sweetalert "^2.1.2" -"@abp/timeago@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.0.tgz#509cd8a84cd94c2644824b0c3af10c8fff6de2dc" - integrity sha512-90jzLYJusYTPwMbak1+XkXE85OPOXPpysRbL28KQwl7WLNBm8wx6IEoVZOHvOrpYscYdyeWhZCgILSJ8DR3a2Q== +"@abp/timeago@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.1.tgz#8c161645534eb1f62fe4607450acf7345729e711" + integrity sha512-PsPobV79U2qzVY+WBsmJM1ohSF4jqcLnL4/7qyJvxlb1WwbCl1F5D4cpiJP4zsM4clPW4mbSsiauMNp+HTNKEA== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" timeago "^1.6.7" -"@abp/toastr@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.0.tgz#06e28665cb7f6eefee3f69c985dd2b3f86cd7f1d" - integrity sha512-YL1fahVpDszhwpnRTN87GCP523Mkaw42ApT2A/hZuBdwRzP/u5GwRfng0i/uhdYXCMkTKuHmaHnRyqhGiv7nfQ== +"@abp/toastr@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.1.tgz#ecb6f6193b7edc3150d0614ab9457472baf1cce3" + integrity sha512-bTTz0O8zj7fMhdoummP2Ed5Z8SJTmR6svzNchBXNDrnRAcDQvTihPTcg0UpH8BEDFczbLowq09CG2A/RMSJoug== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" toastr "^2.1.4" -"@abp/utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" - integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== +"@abp/utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.1.tgz#9a4cb420266c49d8084776bd31c86681d4d4d125" + integrity sha512-nI2ZyaNpvohr75p8jeMPWze+hX+mV47EHI+Zloa4GgGmJqrULdG71kYh45R+jGmMTbQL6huaXGnpz4gNF9TGyQ== dependencies: just-compare "^1.3.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj b/modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj index 23a4b9fae3..266590c86b 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj @@ -1,7 +1,5 @@ - - net5.0 Volo.CmsKit @@ -10,9 +8,9 @@ - + - + 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 78834de93d..1171b7f8a6 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": "^4.0.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.0.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 57bbbf2ce0..b5cd1b1d1c 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@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.0.tgz#b1822cf5bbc0f6eeb414ebd0877f6d1115a81fe7" - integrity sha512-yYXQkEnNhftzm+ZI8d3VFMlV5UuLNTMQQwV2eZ8tJfstUQrKV9bVd3+NdDOr3AkvcD8D7mvMFeBuoMYteL5kLQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.1.tgz#ce8e3eb830a8e8f9eecb1a3b3bd70c2832fdf15e" + integrity sha512-w+ZG8Ewx9wWfbvRC2MAjJl+rXuXSHLhhGOiJTk68unWLNziDtNQzcSXG/Z5c1hA+acJSGqDoJGEGs4FVM136og== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.0.tgz#ba896056e9df5ac58e108df96996fbb2ca7a1a15" - integrity sha512-3RNn6VrNA+cqnPBoSbiCazN05cC2rhcRFMMxkEte+LImGbGOsxc4MflzHg5On1ExCGdqko8Axbw/ydy44Ak4Hw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.0.0" - "@abp/bootstrap" "~4.0.0" - "@abp/bootstrap-datepicker" "~4.0.0" - "@abp/datatables.net-bs4" "~4.0.0" - "@abp/font-awesome" "~4.0.0" - "@abp/jquery-form" "~4.0.0" - "@abp/jquery-validation-unobtrusive" "~4.0.0" - "@abp/lodash" "~4.0.0" - "@abp/luxon" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/select2" "~4.0.0" - "@abp/sweetalert" "~4.0.0" - "@abp/timeago" "~4.0.0" - "@abp/toastr" "~4.0.0" - -"@abp/aspnetcore.mvc.ui@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.0.tgz#68502177a05f6ce7191a09b06a18c5b5dfab425d" - integrity sha512-tYHUWMwnwInrGSzC/OdN6bH/VHZEz5DP3rx2U6fcb0I5GvvRdQZxVgUvmWn6DeMA3PG10Gra4SfkhZqRQq9rjQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.1.tgz#cd9d0eb11309c597dffd26277cd1bd7c5b1e0e2f" + integrity sha512-QGoCN/my0eAfa4tx5ytDxArIoz2i58jFFVUGso1Lekn54JvSt+WLz2p3uyTGatZ03Bp9836elhFnIopn12WvBw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.0.1" + "@abp/bootstrap" "~4.0.1" + "@abp/bootstrap-datepicker" "~4.0.1" + "@abp/datatables.net-bs4" "~4.0.1" + "@abp/font-awesome" "~4.0.1" + "@abp/jquery-form" "~4.0.1" + "@abp/jquery-validation-unobtrusive" "~4.0.1" + "@abp/lodash" "~4.0.1" + "@abp/luxon" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/select2" "~4.0.1" + "@abp/sweetalert" "~4.0.1" + "@abp/timeago" "~4.0.1" + "@abp/toastr" "~4.0.1" + +"@abp/aspnetcore.mvc.ui@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.1.tgz#6490c147a56e4f7055d2ca77f20baf1f60f56867" + integrity sha512-4B3icJrlpuZgMaX52ninyaenH7zLwepePEscDrLaFY9wyonKpZ2zh+xplnyM6vjNd+PhErWuA2+ssCswFhrJ3A== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,145 +43,145 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/bootstrap-datepicker@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.0.tgz#cdbd2c388c6d7ce8c6d72443038975063e6c6d02" - integrity sha512-hauH8VhpC8cxv1wCR6bVBcNqZepftdBXxEVID7TSAqgNyWjm/CrJqWLI+A0nnkG3IHoIm9D22iF47BamuYHptw== +"@abp/bootstrap-datepicker@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.1.tgz#aad891263edff66f816e003ba4fa7f8acfe8e0b6" + integrity sha512-S0oaVZmXsDcOJLAyoGY0TvP/7bZx0GHIbU9BIhIL2Wl74HYaokjkTr6/IleIek9YeiF2vm9FkrUP1dKH/4f7Gg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.0.tgz#04174f18055f76f936e6fb73e5ff71ffa08a8528" - integrity sha512-Tmr0yoSWg7XHl02X5wv04CvYcL8KCpX8u6YGJj31jRZxUTeCvs5ETXlepOWcdxPQqi/4olXv5B9GEz5S9l5nZA== +"@abp/bootstrap@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.1.tgz#3e41bdf9b3e9f8c497b9fafe22a4851d0401b31b" + integrity sha512-GoSaNWvswRHVoUrq7xClFQYtwqIlyS/vp/TdY+j5FFZP7ud89+ZGpdNqYqq5l9/6aaYa7v4b9mNTZ/1JRzAOYg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.0.tgz#65e76c697e62162717e0edabf7edacc4228e682a" - integrity sha512-xcTTBFjLFZ9Trv2x9Y/c3XKezIx+x3MTXUD98QJPf1aR7T43TE/tLHRxdRfW3R8ka0O1wmlYshpkaw5pYNsj5w== +"@abp/core@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.1.tgz#1df32bc058f45571605670ca81c226a1bd87400c" + integrity sha512-8UT5lwqV/luVG/SxePSTD2FRbZXwXv3cZJKjw+gpBjhD0slWrh51XEOHsM8ciTuhcvV/tsqVU9nXckDMdO58fw== dependencies: - "@abp/utils" "^4.0.0" + "@abp/utils" "^4.0.1" -"@abp/datatables.net-bs4@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.0.tgz#fe737e054f6ba35e787a1cda185af2788ef86d39" - integrity sha512-mz7xZdzX1nlFyX7vNzB5w3RkqZ0IHrPgsXGOB7OCTKMRshDFVH2O51Oy4qoLDOXoTVeahHtR9v8thEWFR1SnZg== +"@abp/datatables.net-bs4@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.1.tgz#7538baad0eff24eca7f4246d020852f83139f645" + integrity sha512-S52jNPF4if68V+P/33NrtGPJXf6xrqgyZzz9b7qBR7HuUm3Nsn7bAslh3JNduNec/sFuE4Utl/xsFHZNjBWEog== dependencies: - "@abp/datatables.net" "~4.0.0" + "@abp/datatables.net" "~4.0.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.0.tgz#88ae5f1a6068fba55927e59f113686508e9553cb" - integrity sha512-JYTfMA1zlBNGiQHAiZiTj5ka6B6vq5k2jqsoLHup4pD9jpKwKRBGtltVsWoEnetd9eEbp4SaV/FCuh3RzmV6Pw== +"@abp/datatables.net@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.1.tgz#eb89716a37351c41b5bccfc2db88fc7ceb991a26" + integrity sha512-APFLui0w8MqsBWqP/K0QkT5cBq5SsWiqMaIGTXQKinMVLV597sUszrlhe1ISU2PqeD7iX6pCZNNOTI1NEUn9/Q== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" datatables.net "^1.10.21" -"@abp/font-awesome@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.0.tgz#6e1e4bd1175a0b8d3b095e215c07e66ad0e42e19" - integrity sha512-kHfZ45UMDWSRk1gTV/BwVfSoXksJ9UlnD3SelTGeAkvbDqtDllqlp9y6c3qQcmZUE348Xl4hDTkU8upZwswCFQ== +"@abp/font-awesome@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.1.tgz#8a9d83b2c2adfcd5abcbd9c31c315460d44a321e" + integrity sha512-+6+m/DKMnfkeQiWUsMlB6Da8u6yREyN2oQYGYhSRAK8419ym8RHHrqKJv2AClI4iLq2ppHZj8WF84+SeoCekRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.0.tgz#3afb41eb16d62e32c31a29c6a866f634a5a20cd8" - integrity sha512-cQq8PgzHfpK9/LxmjlnMsDn85wWvEOqjyLaepHFpTTt0341auSgXNwhp7rk71AUHD1lP3c9ALctmqu+gYmh9ag== +"@abp/jquery-form@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.1.tgz#6dc1922b2800dd635f20881a82e08104a1dd1bb5" + integrity sha512-JMBZYu/MI/GjaLTBOMB5iv8cagnLpReDULNC3r6tLNNqB1R8f3Cg1T7nF4YCuU9SYMqis1P/AuE4oEh+4rQdAQ== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#c3674d2b01b3c524de4c3fac1c6ae3657857ee7b" - integrity sha512-OGibIdw0ogjp6VQIebHM7OtMT36pjLKRrOHyCVpTmQ7NzDODV5ptG83vOnt5nFG0y9XFrOt8cnHrrd+K1Bpo/Q== +"@abp/jquery-validation-unobtrusive@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.1.tgz#4142ca31c0830fe24a1467e8cf13b55ba9d7c1dd" + integrity sha512-rdSRTcdKCHmarbrVgmPYdTiJ0G/aFKd+dr0krO7fALPTuQKChbDnHOO4/JvQSc+cd9faxa8c6ZWvlHdsof23tQ== dependencies: - "@abp/jquery-validation" "~4.0.0" + "@abp/jquery-validation" "~4.0.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.0.tgz#0a101937f89ff398317142b5271fa9a1de6571c2" - integrity sha512-4nzvhAktEINpQ2H+Hy7TOxxojTmTEm5dBTbHs1vbCWUuF0OTpouZWbMZDESdP0ZbjXcQ+vhwuM4e/pm/PeaHyQ== +"@abp/jquery-validation@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.1.tgz#74e7d795468c6986f2db15662631fcd4f67c679e" + integrity sha512-FX26aQCsMBdVWAJb7S37Lt7KoHAEHoYguh/qfZIARCpOYOOWvxfDz1wTrmADUkqdillqEiCeD/Imj8bYH9Faaw== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-validation "^1.19.2" -"@abp/jquery@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.0.tgz#00d24678b573bcc2fb14d8337ccdbf697b59d43b" - integrity sha512-gXLK97IvAZriNlG8e0qJcd7MvnpshJQURb4lg8VYibD7Fs/OBeHSAWM2Adgi3H9DnQL8XEUlWf487FSz4RC/Yg== +"@abp/jquery@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.1.tgz#aa554accb16600fd586c3a4f088040cd26d0bde8" + integrity sha512-MtiRKOLyjEWux+whPP3+zwPbpj8or756JtgjnwOTDB9tp9HLCYUaskt+oalYPvob24nDZcNu2RnMALYdCVhZAQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" jquery "~3.5.1" -"@abp/lodash@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.0.tgz#fe76d09517f6b1adf18edde94a31e13b003329dc" - integrity sha512-uitn5uYlb9xShRtV4AFOgp3lu2kADGMD4+a4fy5r4umlPM2uuMo0wMhzyYdBIG64JC5oNaqAzOwZyhhnn+HGJg== +"@abp/lodash@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.1.tgz#ec261ccaab8a70d5b32a8a7c22387e48936d38d4" + integrity sha512-Dav1QKbBeGR4VVbHHe1s3OEzN7wnb9K/vwzHrWmtO8D1Q5Z3433xjNmgL5VQ9gfxXqooSfEO4gAovZklMDHDew== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" lodash "^4.17.15" -"@abp/luxon@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.0.tgz#d9357e4fb422b6e18ebe897a86a4c4bc6fbe6858" - integrity sha512-tiE6NiSa4El88SVotxfmmpceINLz8MruaO/e/U3QjJEHjRoqlv0UBrM/x5Xz92c7ZIvL0Y4QvWNISeDg6/oqIQ== +"@abp/luxon@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.1.tgz#a540750b1605dbac856ce9c2e776c2fecf6392f9" + integrity sha512-eRumVB7UIf2XH6OZVUTvcKw0A/OSAfYV59fM+Wc4dAkNcmsNZI0gD1o0AigSGNCxTV6v+W2bFrsuooSqK99Y0Q== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.0.tgz#972acf26f5eaa4bf9b8991cbe7c19fd0005d94e2" - integrity sha512-SpUo1CfppKzkE6Rb880pgB7oQ83Mkjsi0o6eE4r4gkF5hfzkuCXOmNjTYKfQIkE4n3G9QQd+8AAN/4xj4DiDrA== +"@abp/malihu-custom-scrollbar-plugin@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.1.tgz#0a556423a67b6c949e32ffcacd72256dea6c31ee" + integrity sha512-YTwYpnQ1ZrON70gvJcnNZRwB3Ze4olGcXxiPvmRgSHbGJkSnHYJiP6PvsN1F3HDFukAJ/iUu+WwEe8OBwlyLXA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.0.tgz#8fdf4c5e18f4093ee4e073dab950cf7aa9b2a540" - integrity sha512-XeXahcDMczdkZdP07yhQriIvbi1N5meeSGTnFyZX+bNTGzUOarPcuNYZ6Mcl3351HcyESHzuJbKbsk3RB1kGeg== +"@abp/select2@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.1.tgz#8983e7b5c3afb862f08b2730b70e59d726e9b5d5" + integrity sha512-WdzY2hvsS/4vz/VXpxq2muSzzE8ggchiIrICy/WKchJxL9L08DM796t6aE6rEl9wucY8XEzzWrPOVqAjJmnXFA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" select2 "^4.0.13" -"@abp/sweetalert@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.0.tgz#0d93e92e95c6855aef7e19532a7513a078ece216" - integrity sha512-y3XtZqnUVZuQohpRO1ImyBZXhtrm4H+typIL/9VgcnlvQjBTyIaiwDmU8j07Bb2rKJKe0prVkkVARO7OnjOS5A== +"@abp/sweetalert@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.1.tgz#0088610915ad6db0a140b77832a37c10066eb4ee" + integrity sha512-t4/44oQCMngSjVqmeRWXwrXa/pRKc3CEpyyTiGIXki4dWJ21j0ePCw2l3rvOJWnpoCznhxa/UGxLfRfK1NEzRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" sweetalert "^2.1.2" -"@abp/timeago@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.0.tgz#509cd8a84cd94c2644824b0c3af10c8fff6de2dc" - integrity sha512-90jzLYJusYTPwMbak1+XkXE85OPOXPpysRbL28KQwl7WLNBm8wx6IEoVZOHvOrpYscYdyeWhZCgILSJ8DR3a2Q== +"@abp/timeago@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.1.tgz#8c161645534eb1f62fe4607450acf7345729e711" + integrity sha512-PsPobV79U2qzVY+WBsmJM1ohSF4jqcLnL4/7qyJvxlb1WwbCl1F5D4cpiJP4zsM4clPW4mbSsiauMNp+HTNKEA== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" timeago "^1.6.7" -"@abp/toastr@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.0.tgz#06e28665cb7f6eefee3f69c985dd2b3f86cd7f1d" - integrity sha512-YL1fahVpDszhwpnRTN87GCP523Mkaw42ApT2A/hZuBdwRzP/u5GwRfng0i/uhdYXCMkTKuHmaHnRyqhGiv7nfQ== +"@abp/toastr@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.1.tgz#ecb6f6193b7edc3150d0614ab9457472baf1cce3" + integrity sha512-bTTz0O8zj7fMhdoummP2Ed5Z8SJTmR6svzNchBXNDrnRAcDQvTihPTcg0UpH8BEDFczbLowq09CG2A/RMSJoug== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" toastr "^2.1.4" -"@abp/utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" - integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== +"@abp/utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.1.tgz#9a4cb420266c49d8084776bd31c86681d4d4d125" + integrity sha512-nI2ZyaNpvohr75p8jeMPWze+hX+mV47EHI+Zloa4GgGmJqrULdG71kYh45R+jGmMTbQL6huaXGnpz4gNF9TGyQ== dependencies: just-compare "^1.3.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs index 483d54d9d5..2055266d20 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs @@ -18,6 +18,7 @@ using Volo.Abp.Autofac; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.SqlServer; +using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.FeatureManagement; using Volo.Abp.Identity; using Volo.Abp.Identity.EntityFrameworkCore; @@ -56,6 +57,8 @@ namespace Volo.CmsKit typeof(AbpIdentityEntityFrameworkCoreModule), typeof(AbpPermissionManagementDomainIdentityModule), typeof(AbpFeatureManagementApplicationModule), + typeof(AbpFeatureManagementEntityFrameworkCoreModule), + typeof(AbpFeatureManagementWebModule), typeof(AbpTenantManagementWebModule), typeof(AbpTenantManagementApplicationModule), typeof(AbpTenantManagementEntityFrameworkCoreModule), diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContext.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContext.cs index 5eade47bd7..d1b31e0ae7 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContext.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContext.cs @@ -1,6 +1,7 @@ using Microsoft.EntityFrameworkCore; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Identity.EntityFrameworkCore; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.SettingManagement.EntityFrameworkCore; @@ -25,6 +26,7 @@ namespace Volo.CmsKit.EntityFrameworkCore modelBuilder.ConfigureAuditLogging(); modelBuilder.ConfigureIdentity(); modelBuilder.ConfigureTenantManagement(); + modelBuilder.ConfigureFeatureManagement(); modelBuilder.ConfigureCmsKit(); } } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201013061938_Initial.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201013061938_Initial.cs deleted file mode 100644 index 73df34b298..0000000000 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201013061938_Initial.cs +++ /dev/null @@ -1,749 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace Volo.CmsKit.Migrations -{ - public partial class Initial : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "AbpAuditLogs", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), - ApplicationName = table.Column(maxLength: 96, nullable: true), - UserId = table.Column(nullable: true), - UserName = table.Column(maxLength: 256, nullable: true), - TenantId = table.Column(nullable: true), - TenantName = table.Column(nullable: true), - ImpersonatorUserId = table.Column(nullable: true), - ImpersonatorTenantId = table.Column(nullable: true), - ExecutionTime = table.Column(nullable: false), - ExecutionDuration = table.Column(nullable: false), - ClientIpAddress = table.Column(maxLength: 64, nullable: true), - ClientName = table.Column(maxLength: 128, nullable: true), - ClientId = table.Column(maxLength: 64, nullable: true), - CorrelationId = table.Column(maxLength: 64, nullable: true), - BrowserInfo = table.Column(maxLength: 512, nullable: true), - HttpMethod = table.Column(maxLength: 16, nullable: true), - Url = table.Column(maxLength: 256, nullable: true), - Exceptions = table.Column(maxLength: 4000, nullable: true), - Comments = table.Column(maxLength: 256, nullable: true), - HttpStatusCode = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpAuditLogs", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpClaimTypes", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), - Name = table.Column(maxLength: 256, nullable: false), - Required = table.Column(nullable: false), - IsStatic = table.Column(nullable: false), - Regex = table.Column(maxLength: 512, nullable: true), - RegexDescription = table.Column(maxLength: 128, nullable: true), - Description = table.Column(maxLength: 256, nullable: true), - ValueType = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpClaimTypes", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpOrganizationUnits", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), - CreationTime = table.Column(nullable: false), - CreatorId = table.Column(nullable: true), - LastModificationTime = table.Column(nullable: true), - LastModifierId = table.Column(nullable: true), - IsDeleted = table.Column(nullable: false, defaultValue: false), - DeleterId = table.Column(nullable: true), - DeletionTime = table.Column(nullable: true), - TenantId = table.Column(nullable: true), - ParentId = table.Column(nullable: true), - Code = table.Column(maxLength: 95, nullable: false), - DisplayName = table.Column(maxLength: 128, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpOrganizationUnits", x => x.Id); - table.ForeignKey( - name: "FK_AbpOrganizationUnits_AbpOrganizationUnits_ParentId", - column: x => x.ParentId, - principalTable: "AbpOrganizationUnits", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - }); - - migrationBuilder.CreateTable( - name: "AbpPermissionGrants", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - Name = table.Column(maxLength: 128, nullable: false), - ProviderName = table.Column(maxLength: 64, nullable: false), - ProviderKey = table.Column(maxLength: 64, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpPermissionGrants", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpRoles", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), - TenantId = table.Column(nullable: true), - Name = table.Column(maxLength: 256, nullable: false), - NormalizedName = table.Column(maxLength: 256, nullable: false), - IsDefault = table.Column(nullable: false), - IsStatic = table.Column(nullable: false), - IsPublic = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpRoles", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpSettings", - columns: table => new - { - Id = table.Column(nullable: false), - Name = table.Column(maxLength: 128, nullable: false), - Value = table.Column(maxLength: 2048, nullable: false), - ProviderName = table.Column(maxLength: 64, nullable: true), - ProviderKey = table.Column(maxLength: 64, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpSettings", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpTenants", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), - CreationTime = table.Column(nullable: false), - CreatorId = table.Column(nullable: true), - LastModificationTime = table.Column(nullable: true), - LastModifierId = table.Column(nullable: true), - IsDeleted = table.Column(nullable: false, defaultValue: false), - DeleterId = table.Column(nullable: true), - DeletionTime = table.Column(nullable: true), - Name = table.Column(maxLength: 64, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpTenants", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpUsers", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), - CreationTime = table.Column(nullable: false), - CreatorId = table.Column(nullable: true), - LastModificationTime = table.Column(nullable: true), - LastModifierId = table.Column(nullable: true), - IsDeleted = table.Column(nullable: false, defaultValue: false), - DeleterId = table.Column(nullable: true), - DeletionTime = table.Column(nullable: true), - TenantId = table.Column(nullable: true), - UserName = table.Column(maxLength: 256, nullable: false), - NormalizedUserName = table.Column(maxLength: 256, nullable: false), - Name = table.Column(maxLength: 64, nullable: true), - Surname = table.Column(maxLength: 64, nullable: true), - Email = table.Column(maxLength: 256, nullable: false), - NormalizedEmail = table.Column(maxLength: 256, nullable: false), - EmailConfirmed = table.Column(nullable: false, defaultValue: false), - PasswordHash = table.Column(maxLength: 256, nullable: true), - SecurityStamp = table.Column(maxLength: 256, nullable: false), - PhoneNumber = table.Column(maxLength: 16, nullable: true), - PhoneNumberConfirmed = table.Column(nullable: false, defaultValue: false), - TwoFactorEnabled = table.Column(nullable: false, defaultValue: false), - LockoutEnd = table.Column(nullable: true), - LockoutEnabled = table.Column(nullable: false, defaultValue: false), - AccessFailedCount = table.Column(nullable: false, defaultValue: 0) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUsers", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsComments", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - EntityType = table.Column(maxLength: 64, nullable: false), - EntityId = table.Column(maxLength: 64, nullable: false), - Text = table.Column(maxLength: 512, nullable: false), - RepliedCommentId = table.Column(nullable: true), - CreatorId = table.Column(nullable: false), - CreationTime = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsComments", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsRatings", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - EntityType = table.Column(maxLength: 64, nullable: false), - EntityId = table.Column(maxLength: 64, nullable: false), - StarCount = table.Column(nullable: false), - CreatorId = table.Column(nullable: false), - CreationTime = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsRatings", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsUserReactions", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - EntityType = table.Column(maxLength: 64, nullable: false), - EntityId = table.Column(maxLength: 64, nullable: false), - ReactionName = table.Column(maxLength: 32, nullable: false), - CreatorId = table.Column(nullable: false), - CreationTime = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsUserReactions", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsUsers", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), - TenantId = table.Column(nullable: true), - UserName = table.Column(maxLength: 256, nullable: false), - Email = table.Column(maxLength: 256, nullable: false), - Name = table.Column(maxLength: 64, nullable: true), - Surname = table.Column(maxLength: 64, nullable: true), - EmailConfirmed = table.Column(nullable: false, defaultValue: false), - PhoneNumber = table.Column(maxLength: 16, nullable: true), - PhoneNumberConfirmed = table.Column(nullable: false, defaultValue: false) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsUsers", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpAuditLogActions", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - AuditLogId = table.Column(nullable: false), - ServiceName = table.Column(maxLength: 256, nullable: true), - MethodName = table.Column(maxLength: 128, nullable: true), - Parameters = table.Column(maxLength: 2000, nullable: true), - ExecutionTime = table.Column(nullable: false), - ExecutionDuration = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpAuditLogActions", x => x.Id); - table.ForeignKey( - name: "FK_AbpAuditLogActions_AbpAuditLogs_AuditLogId", - column: x => x.AuditLogId, - principalTable: "AbpAuditLogs", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpEntityChanges", - columns: table => new - { - Id = table.Column(nullable: false), - AuditLogId = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - ChangeTime = table.Column(nullable: false), - ChangeType = table.Column(nullable: false), - EntityTenantId = table.Column(nullable: true), - EntityId = table.Column(maxLength: 128, nullable: false), - EntityTypeFullName = table.Column(maxLength: 128, nullable: false), - ExtraProperties = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpEntityChanges", x => x.Id); - table.ForeignKey( - name: "FK_AbpEntityChanges_AbpAuditLogs_AuditLogId", - column: x => x.AuditLogId, - principalTable: "AbpAuditLogs", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpOrganizationUnitRoles", - columns: table => new - { - RoleId = table.Column(nullable: false), - OrganizationUnitId = table.Column(nullable: false), - CreationTime = table.Column(nullable: false), - CreatorId = table.Column(nullable: true), - TenantId = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpOrganizationUnitRoles", x => new { x.OrganizationUnitId, x.RoleId }); - table.ForeignKey( - name: "FK_AbpOrganizationUnitRoles_AbpOrganizationUnits_OrganizationUnitId", - column: x => x.OrganizationUnitId, - principalTable: "AbpOrganizationUnits", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AbpOrganizationUnitRoles_AbpRoles_RoleId", - column: x => x.RoleId, - principalTable: "AbpRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpRoleClaims", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - ClaimType = table.Column(maxLength: 256, nullable: false), - ClaimValue = table.Column(maxLength: 1024, nullable: true), - RoleId = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpRoleClaims", x => x.Id); - table.ForeignKey( - name: "FK_AbpRoleClaims_AbpRoles_RoleId", - column: x => x.RoleId, - principalTable: "AbpRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpTenantConnectionStrings", - columns: table => new - { - TenantId = table.Column(nullable: false), - Name = table.Column(maxLength: 64, nullable: false), - Value = table.Column(maxLength: 1024, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpTenantConnectionStrings", x => new { x.TenantId, x.Name }); - table.ForeignKey( - name: "FK_AbpTenantConnectionStrings_AbpTenants_TenantId", - column: x => x.TenantId, - principalTable: "AbpTenants", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserClaims", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - ClaimType = table.Column(maxLength: 256, nullable: false), - ClaimValue = table.Column(maxLength: 1024, nullable: true), - UserId = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserClaims", x => x.Id); - table.ForeignKey( - name: "FK_AbpUserClaims_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserLogins", - columns: table => new - { - UserId = table.Column(nullable: false), - LoginProvider = table.Column(maxLength: 64, nullable: false), - TenantId = table.Column(nullable: true), - ProviderKey = table.Column(maxLength: 196, nullable: false), - ProviderDisplayName = table.Column(maxLength: 128, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserLogins", x => new { x.UserId, x.LoginProvider }); - table.ForeignKey( - name: "FK_AbpUserLogins_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserOrganizationUnits", - columns: table => new - { - UserId = table.Column(nullable: false), - OrganizationUnitId = table.Column(nullable: false), - CreationTime = table.Column(nullable: false), - CreatorId = table.Column(nullable: true), - TenantId = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserOrganizationUnits", x => new { x.OrganizationUnitId, x.UserId }); - table.ForeignKey( - name: "FK_AbpUserOrganizationUnits_AbpOrganizationUnits_OrganizationUnitId", - column: x => x.OrganizationUnitId, - principalTable: "AbpOrganizationUnits", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AbpUserOrganizationUnits_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserRoles", - columns: table => new - { - UserId = table.Column(nullable: false), - RoleId = table.Column(nullable: false), - TenantId = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserRoles", x => new { x.UserId, x.RoleId }); - table.ForeignKey( - name: "FK_AbpUserRoles_AbpRoles_RoleId", - column: x => x.RoleId, - principalTable: "AbpRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AbpUserRoles_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserTokens", - columns: table => new - { - UserId = table.Column(nullable: false), - LoginProvider = table.Column(maxLength: 64, nullable: false), - Name = table.Column(maxLength: 128, nullable: false), - TenantId = table.Column(nullable: true), - Value = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); - table.ForeignKey( - name: "FK_AbpUserTokens_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpEntityPropertyChanges", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - EntityChangeId = table.Column(nullable: false), - NewValue = table.Column(maxLength: 512, nullable: true), - OriginalValue = table.Column(maxLength: 512, nullable: true), - PropertyName = table.Column(maxLength: 128, nullable: false), - PropertyTypeFullName = table.Column(maxLength: 64, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpEntityPropertyChanges", x => x.Id); - table.ForeignKey( - name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId", - column: x => x.EntityChangeId, - principalTable: "AbpEntityChanges", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogActions_AuditLogId", - table: "AbpAuditLogActions", - column: "AuditLogId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogActions_TenantId_ServiceName_MethodName_ExecutionTime", - table: "AbpAuditLogActions", - columns: new[] { "TenantId", "ServiceName", "MethodName", "ExecutionTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogs_TenantId_ExecutionTime", - table: "AbpAuditLogs", - columns: new[] { "TenantId", "ExecutionTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogs_TenantId_UserId_ExecutionTime", - table: "AbpAuditLogs", - columns: new[] { "TenantId", "UserId", "ExecutionTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityChanges_AuditLogId", - table: "AbpEntityChanges", - column: "AuditLogId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityChanges_TenantId_EntityTypeFullName_EntityId", - table: "AbpEntityChanges", - columns: new[] { "TenantId", "EntityTypeFullName", "EntityId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityPropertyChanges_EntityChangeId", - table: "AbpEntityPropertyChanges", - column: "EntityChangeId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpOrganizationUnitRoles_RoleId_OrganizationUnitId", - table: "AbpOrganizationUnitRoles", - columns: new[] { "RoleId", "OrganizationUnitId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpOrganizationUnits_Code", - table: "AbpOrganizationUnits", - column: "Code"); - - migrationBuilder.CreateIndex( - name: "IX_AbpOrganizationUnits_ParentId", - table: "AbpOrganizationUnits", - column: "ParentId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpPermissionGrants_Name_ProviderName_ProviderKey", - table: "AbpPermissionGrants", - columns: new[] { "Name", "ProviderName", "ProviderKey" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpRoleClaims_RoleId", - table: "AbpRoleClaims", - column: "RoleId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpRoles_NormalizedName", - table: "AbpRoles", - column: "NormalizedName"); - - migrationBuilder.CreateIndex( - name: "IX_AbpSettings_Name_ProviderName_ProviderKey", - table: "AbpSettings", - columns: new[] { "Name", "ProviderName", "ProviderKey" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpTenants_Name", - table: "AbpTenants", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserClaims_UserId", - table: "AbpUserClaims", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserLogins_LoginProvider_ProviderKey", - table: "AbpUserLogins", - columns: new[] { "LoginProvider", "ProviderKey" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserOrganizationUnits_UserId_OrganizationUnitId", - table: "AbpUserOrganizationUnits", - columns: new[] { "UserId", "OrganizationUnitId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserRoles_RoleId_UserId", - table: "AbpUserRoles", - columns: new[] { "RoleId", "UserId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_Email", - table: "AbpUsers", - column: "Email"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_NormalizedEmail", - table: "AbpUsers", - column: "NormalizedEmail"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_NormalizedUserName", - table: "AbpUsers", - column: "NormalizedUserName"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_UserName", - table: "AbpUsers", - column: "UserName"); - - migrationBuilder.CreateIndex( - name: "IX_CmsComments_TenantId_RepliedCommentId", - table: "CmsComments", - columns: new[] { "TenantId", "RepliedCommentId" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsComments_TenantId_EntityType_EntityId", - table: "CmsComments", - columns: new[] { "TenantId", "EntityType", "EntityId" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsRatings_TenantId_EntityType_EntityId_CreatorId", - table: "CmsRatings", - columns: new[] { "TenantId", "EntityType", "EntityId", "CreatorId" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsUserReactions_TenantId_EntityType_EntityId_ReactionName", - table: "CmsUserReactions", - columns: new[] { "TenantId", "EntityType", "EntityId", "ReactionName" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsUserReactions_TenantId_CreatorId_EntityType_EntityId_ReactionName", - table: "CmsUserReactions", - columns: new[] { "TenantId", "CreatorId", "EntityType", "EntityId", "ReactionName" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsUsers_TenantId_Email", - table: "CmsUsers", - columns: new[] { "TenantId", "Email" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsUsers_TenantId_UserName", - table: "CmsUsers", - columns: new[] { "TenantId", "UserName" }); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "AbpAuditLogActions"); - - migrationBuilder.DropTable( - name: "AbpClaimTypes"); - - migrationBuilder.DropTable( - name: "AbpEntityPropertyChanges"); - - migrationBuilder.DropTable( - name: "AbpOrganizationUnitRoles"); - - migrationBuilder.DropTable( - name: "AbpPermissionGrants"); - - migrationBuilder.DropTable( - name: "AbpRoleClaims"); - - migrationBuilder.DropTable( - name: "AbpSettings"); - - migrationBuilder.DropTable( - name: "AbpTenantConnectionStrings"); - - migrationBuilder.DropTable( - name: "AbpUserClaims"); - - migrationBuilder.DropTable( - name: "AbpUserLogins"); - - migrationBuilder.DropTable( - name: "AbpUserOrganizationUnits"); - - migrationBuilder.DropTable( - name: "AbpUserRoles"); - - migrationBuilder.DropTable( - name: "AbpUserTokens"); - - migrationBuilder.DropTable( - name: "CmsComments"); - - migrationBuilder.DropTable( - name: "CmsRatings"); - - migrationBuilder.DropTable( - name: "CmsUserReactions"); - - migrationBuilder.DropTable( - name: "CmsUsers"); - - migrationBuilder.DropTable( - name: "AbpEntityChanges"); - - migrationBuilder.DropTable( - name: "AbpTenants"); - - migrationBuilder.DropTable( - name: "AbpOrganizationUnits"); - - migrationBuilder.DropTable( - name: "AbpRoles"); - - migrationBuilder.DropTable( - name: "AbpUsers"); - - migrationBuilder.DropTable( - name: "AbpAuditLogs"); - } - } -} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201013061938_Initial.Designer.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201210071514_Initial.Designer.cs similarity index 58% rename from modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201013061938_Initial.Designer.cs rename to modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201210071514_Initial.Designer.cs index 64e92cbea5..449f18fb53 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201013061938_Initial.Designer.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201210071514_Initial.Designer.cs @@ -11,17 +11,17 @@ using Volo.CmsKit.EntityFrameworkCore; namespace Volo.CmsKit.Migrations { [DbContext(typeof(UnifiedDbContext))] - [Migration("20201013061938_Initial")] + [Migration("20201210071514_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder + .UseIdentityColumns() .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "3.1.8") .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + .HasAnnotation("ProductVersion", "5.0.1"); modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => { @@ -30,99 +30,99 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("ApplicationName") - .HasColumnName("ApplicationName") + .HasMaxLength(96) .HasColumnType("nvarchar(96)") - .HasMaxLength(96); + .HasColumnName("ApplicationName"); b.Property("BrowserInfo") - .HasColumnName("BrowserInfo") + .HasMaxLength(512) .HasColumnType("nvarchar(512)") - .HasMaxLength(512); + .HasColumnName("BrowserInfo"); b.Property("ClientId") - .HasColumnName("ClientId") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("ClientId"); b.Property("ClientIpAddress") - .HasColumnName("ClientIpAddress") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("ClientIpAddress"); b.Property("ClientName") - .HasColumnName("ClientName") + .HasMaxLength(128) .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasColumnName("ClientName"); b.Property("Comments") - .HasColumnName("Comments") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("Comments"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") + .HasMaxLength(40) .HasColumnType("nvarchar(40)") - .HasMaxLength(40); + .HasColumnName("ConcurrencyStamp"); b.Property("CorrelationId") - .HasColumnName("CorrelationId") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("CorrelationId"); b.Property("Exceptions") - .HasColumnName("Exceptions") + .HasMaxLength(4000) .HasColumnType("nvarchar(4000)") - .HasMaxLength(4000); + .HasColumnName("Exceptions"); b.Property("ExecutionDuration") - .HasColumnName("ExecutionDuration") - .HasColumnType("int"); + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); b.Property("ExecutionTime") .HasColumnType("datetime2"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("HttpMethod") - .HasColumnName("HttpMethod") + .HasMaxLength(16) .HasColumnType("nvarchar(16)") - .HasMaxLength(16); + .HasColumnName("HttpMethod"); b.Property("HttpStatusCode") - .HasColumnName("HttpStatusCode") - .HasColumnType("int"); + .HasColumnType("int") + .HasColumnName("HttpStatusCode"); b.Property("ImpersonatorTenantId") - .HasColumnName("ImpersonatorTenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorTenantId"); b.Property("ImpersonatorUserId") - .HasColumnName("ImpersonatorUserId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorUserId"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.Property("TenantName") .HasColumnType("nvarchar(max)"); b.Property("Url") - .HasColumnName("Url") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("Url"); b.Property("UserId") - .HasColumnName("UserId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("UserId"); b.Property("UserName") - .HasColumnName("UserName") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("UserName"); b.HasKey("Id"); @@ -140,39 +140,39 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("AuditLogId") - .HasColumnName("AuditLogId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); b.Property("ExecutionDuration") - .HasColumnName("ExecutionDuration") - .HasColumnType("int"); + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); b.Property("ExecutionTime") - .HasColumnName("ExecutionTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("ExecutionTime"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("MethodName") - .HasColumnName("MethodName") + .HasMaxLength(128) .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasColumnName("MethodName"); b.Property("Parameters") - .HasColumnName("Parameters") + .HasMaxLength(2000) .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); + .HasColumnName("Parameters"); b.Property("ServiceName") - .HasColumnName("ServiceName") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("ServiceName"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -190,39 +190,39 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("AuditLogId") - .HasColumnName("AuditLogId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); b.Property("ChangeTime") - .HasColumnName("ChangeTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("ChangeTime"); b.Property("ChangeType") - .HasColumnName("ChangeType") - .HasColumnType("tinyint"); + .HasColumnType("tinyint") + .HasColumnName("ChangeType"); b.Property("EntityId") .IsRequired() - .HasColumnName("EntityId") + .HasMaxLength(128) .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasColumnName("EntityId"); b.Property("EntityTenantId") .HasColumnType("uniqueidentifier"); b.Property("EntityTypeFullName") .IsRequired() - .HasColumnName("EntityTypeFullName") + .HasMaxLength(128) .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasColumnName("EntityTypeFullName"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -243,30 +243,30 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("NewValue") - .HasColumnName("NewValue") + .HasMaxLength(512) .HasColumnType("nvarchar(512)") - .HasMaxLength(512); + .HasColumnName("NewValue"); b.Property("OriginalValue") - .HasColumnName("OriginalValue") + .HasMaxLength(512) .HasColumnType("nvarchar(512)") - .HasMaxLength(512); + .HasColumnName("OriginalValue"); b.Property("PropertyName") .IsRequired() - .HasColumnName("PropertyName") + .HasMaxLength(128) .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasColumnName("PropertyName"); b.Property("PropertyTypeFullName") .IsRequired() - .HasColumnName("PropertyTypeFullName") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("PropertyTypeFullName"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -275,6 +275,37 @@ namespace Volo.CmsKit.Migrations b.ToTable("AbpEntityPropertyChanges"); }); + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpFeatureValues"); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => { b.Property("Id") @@ -283,33 +314,33 @@ namespace Volo.CmsKit.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") + .HasMaxLength(40) .HasColumnType("nvarchar(40)") - .HasMaxLength(40); + .HasColumnName("ConcurrencyStamp"); b.Property("Description") - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("IsStatic") .HasColumnType("bit"); b.Property("Name") .IsRequired() - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); b.Property("Regex") - .HasColumnType("nvarchar(512)") - .HasMaxLength(512); + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); b.Property("RegexDescription") - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); b.Property("Required") .HasColumnType("bit"); @@ -322,6 +353,33 @@ namespace Volo.CmsKit.Migrations b.ToTable("AbpClaimTypes"); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("SourceTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("SourceUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique() + .HasFilter("[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); + + b.ToTable("AbpLinkUsers"); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => { b.Property("Id") @@ -330,39 +388,39 @@ namespace Volo.CmsKit.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") + .HasMaxLength(40) .HasColumnType("nvarchar(40)") - .HasMaxLength(40); + .HasColumnName("ConcurrencyStamp"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("IsDefault") - .HasColumnName("IsDefault") - .HasColumnType("bit"); + .HasColumnType("bit") + .HasColumnName("IsDefault"); b.Property("IsPublic") - .HasColumnName("IsPublic") - .HasColumnType("bit"); + .HasColumnType("bit") + .HasColumnName("IsPublic"); b.Property("IsStatic") - .HasColumnName("IsStatic") - .HasColumnType("bit"); + .HasColumnType("bit") + .HasColumnName("IsStatic"); b.Property("Name") .IsRequired() - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); b.Property("NormalizedName") .IsRequired() - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -378,19 +436,19 @@ namespace Volo.CmsKit.Migrations b.Property("ClaimType") .IsRequired() - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); b.Property("ClaimValue") - .HasColumnType("nvarchar(1024)") - .HasMaxLength(1024); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.Property("RoleId") .HasColumnType("uniqueidentifier"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -399,6 +457,81 @@ namespace Volo.CmsKit.Migrations b.ToTable("AbpRoleClaims"); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs"); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => { b.Property("Id") @@ -407,130 +540,136 @@ namespace Volo.CmsKit.Migrations b.Property("AccessFailedCount") .ValueGeneratedOnAdd() - .HasColumnName("AccessFailedCount") .HasColumnType("int") - .HasDefaultValue(0); + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") + .HasMaxLength(40) .HasColumnType("nvarchar(40)") - .HasMaxLength(40); + .HasColumnName("ConcurrencyStamp"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("DeleterId") - .HasColumnName("DeleterId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); b.Property("DeletionTime") - .HasColumnName("DeletionTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); b.Property("Email") .IsRequired() - .HasColumnName("Email") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("Email"); b.Property("EmailConfirmed") .ValueGeneratedOnAdd() - .HasColumnName("EmailConfirmed") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("IsDeleted") .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); b.Property("LockoutEnabled") .ValueGeneratedOnAdd() - .HasColumnName("LockoutEnabled") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); b.Property("LockoutEnd") .HasColumnType("datetimeoffset"); b.Property("Name") - .HasColumnName("Name") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("Name"); b.Property("NormalizedEmail") .IsRequired() - .HasColumnName("NormalizedEmail") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("NormalizedEmail"); b.Property("NormalizedUserName") .IsRequired() - .HasColumnName("NormalizedUserName") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("NormalizedUserName"); b.Property("PasswordHash") - .HasColumnName("PasswordHash") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("PasswordHash"); b.Property("PhoneNumber") - .HasColumnName("PhoneNumber") + .HasMaxLength(16) .HasColumnType("nvarchar(16)") - .HasMaxLength(16); + .HasColumnName("PhoneNumber"); b.Property("PhoneNumberConfirmed") .ValueGeneratedOnAdd() - .HasColumnName("PhoneNumberConfirmed") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); b.Property("SecurityStamp") .IsRequired() - .HasColumnName("SecurityStamp") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("SecurityStamp"); b.Property("Surname") - .HasColumnName("Surname") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("Surname"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.Property("TwoFactorEnabled") .ValueGeneratedOnAdd() - .HasColumnName("TwoFactorEnabled") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); b.Property("UserName") .IsRequired() - .HasColumnName("UserName") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("UserName"); b.HasKey("Id"); @@ -552,16 +691,16 @@ namespace Volo.CmsKit.Migrations b.Property("ClaimType") .IsRequired() - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); b.Property("ClaimValue") - .HasColumnType("nvarchar(1024)") - .HasMaxLength(1024); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.Property("UserId") .HasColumnType("uniqueidentifier"); @@ -579,21 +718,21 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("LoginProvider") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("ProviderDisplayName") - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); b.Property("ProviderKey") .IsRequired() - .HasColumnType("nvarchar(196)") - .HasMaxLength(196); + .HasMaxLength(196) + .HasColumnType("nvarchar(196)"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("UserId", "LoginProvider"); @@ -611,16 +750,16 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("OrganizationUnitId", "UserId"); @@ -638,8 +777,8 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("UserId", "RoleId"); @@ -654,16 +793,16 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("LoginProvider") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("Name") - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.Property("Value") .HasColumnType("nvarchar(max)"); @@ -681,62 +820,62 @@ namespace Volo.CmsKit.Migrations b.Property("Code") .IsRequired() - .HasColumnName("Code") + .HasMaxLength(95) .HasColumnType("nvarchar(95)") - .HasMaxLength(95); + .HasColumnName("Code"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") + .HasMaxLength(40) .HasColumnType("nvarchar(40)") - .HasMaxLength(40); + .HasColumnName("ConcurrencyStamp"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("DeleterId") - .HasColumnName("DeleterId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); b.Property("DeletionTime") - .HasColumnName("DeletionTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); b.Property("DisplayName") .IsRequired() - .HasColumnName("DisplayName") + .HasMaxLength(128) .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasColumnName("DisplayName"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("IsDeleted") .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); b.Property("ParentId") .HasColumnType("uniqueidentifier"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -756,16 +895,16 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("OrganizationUnitId", "RoleId"); @@ -782,22 +921,22 @@ namespace Volo.CmsKit.Migrations b.Property("Name") .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); b.Property("ProviderKey") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("ProviderName") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -814,21 +953,21 @@ namespace Volo.CmsKit.Migrations b.Property("Name") .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); b.Property("ProviderKey") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("ProviderName") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("Value") .IsRequired() - .HasColumnType("nvarchar(2048)") - .HasMaxLength(2048); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.HasKey("Id"); @@ -845,48 +984,48 @@ namespace Volo.CmsKit.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") + .HasMaxLength(40) .HasColumnType("nvarchar(40)") - .HasMaxLength(40); + .HasColumnName("ConcurrencyStamp"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("DeleterId") - .HasColumnName("DeleterId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); b.Property("DeletionTime") - .HasColumnName("DeletionTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("IsDeleted") .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); b.Property("Name") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.HasKey("Id"); @@ -901,13 +1040,13 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("Name") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("Value") .IsRequired() - .HasColumnType("nvarchar(1024)") - .HasMaxLength(1024); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("TenantId", "Name"); @@ -921,34 +1060,34 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("EntityId") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("EntityType") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("RepliedCommentId") .HasColumnType("uniqueidentifier"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.Property("Text") .IsRequired() - .HasColumnType("nvarchar(512)") - .HasMaxLength(512); + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); b.HasKey("Id"); @@ -966,22 +1105,22 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("EntityId") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("EntityType") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("StarCount") .HasColumnType("smallint"); @@ -1003,31 +1142,31 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("EntityId") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("EntityType") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("ReactionName") .IsRequired() - .HasColumnType("nvarchar(32)") - .HasMaxLength(32); + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -1046,56 +1185,56 @@ namespace Volo.CmsKit.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") + .HasMaxLength(40) .HasColumnType("nvarchar(40)") - .HasMaxLength(40); + .HasColumnName("ConcurrencyStamp"); b.Property("Email") .IsRequired() - .HasColumnName("Email") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("Email"); b.Property("EmailConfirmed") .ValueGeneratedOnAdd() - .HasColumnName("EmailConfirmed") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("Name") - .HasColumnName("Name") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("Name"); b.Property("PhoneNumber") - .HasColumnName("PhoneNumber") + .HasMaxLength(16) .HasColumnType("nvarchar(16)") - .HasMaxLength(16); + .HasColumnName("PhoneNumber"); b.Property("PhoneNumberConfirmed") .ValueGeneratedOnAdd() - .HasColumnName("PhoneNumberConfirmed") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); b.Property("Surname") - .HasColumnName("Surname") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("Surname"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.Property("UserName") .IsRequired() - .HasColumnName("UserName") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("UserName"); b.HasKey("Id"); @@ -1229,6 +1368,46 @@ namespace Volo.CmsKit.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); #pragma warning restore 612, 618 } } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201210071514_Initial.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201210071514_Initial.cs new file mode 100644 index 0000000000..54f7ac975c --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201210071514_Initial.cs @@ -0,0 +1,846 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Volo.CmsKit.Migrations +{ + public partial class Initial : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpAuditLogs", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + ApplicationName = table.Column(type: "nvarchar(96)", maxLength: 96, nullable: true), + UserId = table.Column(type: "uniqueidentifier", nullable: true), + UserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + TenantName = table.Column(type: "nvarchar(max)", nullable: true), + ImpersonatorUserId = table.Column(type: "uniqueidentifier", nullable: true), + ImpersonatorTenantId = table.Column(type: "uniqueidentifier", nullable: true), + ExecutionTime = table.Column(type: "datetime2", nullable: false), + ExecutionDuration = table.Column(type: "int", nullable: false), + ClientIpAddress = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + ClientName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + ClientId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + CorrelationId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + BrowserInfo = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), + HttpMethod = table.Column(type: "nvarchar(16)", maxLength: 16, nullable: true), + Url = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + Exceptions = table.Column(type: "nvarchar(4000)", maxLength: 4000, nullable: true), + Comments = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + HttpStatusCode = table.Column(type: "int", nullable: true), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpClaimTypes", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + Name = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + Required = table.Column(type: "bit", nullable: false), + IsStatic = table.Column(type: "bit", nullable: false), + Regex = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), + RegexDescription = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + Description = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + ValueType = table.Column(type: "int", nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpClaimTypes", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpFeatureValues", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + Value = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + ProviderName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + ProviderKey = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpFeatureValues", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpLinkUsers", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + SourceUserId = table.Column(type: "uniqueidentifier", nullable: false), + SourceTenantId = table.Column(type: "uniqueidentifier", nullable: true), + TargetUserId = table.Column(type: "uniqueidentifier", nullable: false), + TargetTenantId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpLinkUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpOrganizationUnits", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ParentId = table.Column(type: "uniqueidentifier", nullable: true), + Code = table.Column(type: "nvarchar(95)", maxLength: 95, nullable: false), + DisplayName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpOrganizationUnits", x => x.Id); + table.ForeignKey( + name: "FK_AbpOrganizationUnits_AbpOrganizationUnits_ParentId", + column: x => x.ParentId, + principalTable: "AbpOrganizationUnits", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "AbpPermissionGrants", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + ProviderName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + ProviderKey = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpPermissionGrants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpRoles", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + Name = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + NormalizedName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + IsDefault = table.Column(type: "bit", nullable: false), + IsStatic = table.Column(type: "bit", nullable: false), + IsPublic = table.Column(type: "bit", nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpRoles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpSecurityLogs", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ApplicationName = table.Column(type: "nvarchar(96)", maxLength: 96, nullable: true), + Identity = table.Column(type: "nvarchar(96)", maxLength: 96, nullable: true), + Action = table.Column(type: "nvarchar(96)", maxLength: 96, nullable: true), + UserId = table.Column(type: "uniqueidentifier", nullable: true), + UserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + TenantName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + ClientId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + CorrelationId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + ClientIpAddress = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + BrowserInfo = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpSecurityLogs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpSettings", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + Value = table.Column(type: "nvarchar(2048)", maxLength: 2048, nullable: false), + ProviderName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + ProviderKey = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpSettings", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpTenants", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + Name = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpTenants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpUsers", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + UserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + NormalizedUserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + Name = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + Surname = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + Email = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + NormalizedEmail = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + EmailConfirmed = table.Column(type: "bit", nullable: false, defaultValue: false), + PasswordHash = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + SecurityStamp = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + IsExternal = table.Column(type: "bit", nullable: false, defaultValue: false), + PhoneNumber = table.Column(type: "nvarchar(16)", maxLength: 16, nullable: true), + PhoneNumberConfirmed = table.Column(type: "bit", nullable: false, defaultValue: false), + TwoFactorEnabled = table.Column(type: "bit", nullable: false, defaultValue: false), + LockoutEnd = table.Column(type: "datetimeoffset", nullable: true), + LockoutEnabled = table.Column(type: "bit", nullable: false, defaultValue: false), + AccessFailedCount = table.Column(type: "int", nullable: false, defaultValue: 0), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "CmsComments", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + EntityType = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + EntityId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + Text = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: false), + RepliedCommentId = table.Column(type: "uniqueidentifier", nullable: true), + CreatorId = table.Column(type: "uniqueidentifier", nullable: false), + CreationTime = table.Column(type: "datetime2", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_CmsComments", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "CmsRatings", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + EntityType = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + EntityId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + StarCount = table.Column(type: "smallint", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: false), + CreationTime = table.Column(type: "datetime2", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_CmsRatings", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "CmsUserReactions", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + EntityType = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + EntityId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + ReactionName = table.Column(type: "nvarchar(32)", maxLength: 32, nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: false), + CreationTime = table.Column(type: "datetime2", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_CmsUserReactions", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "CmsUsers", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + UserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + Email = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + Name = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + Surname = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + EmailConfirmed = table.Column(type: "bit", nullable: false, defaultValue: false), + PhoneNumber = table.Column(type: "nvarchar(16)", maxLength: 16, nullable: true), + PhoneNumberConfirmed = table.Column(type: "bit", nullable: false, defaultValue: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_CmsUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpAuditLogActions", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + AuditLogId = table.Column(type: "uniqueidentifier", nullable: false), + ServiceName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + MethodName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + Parameters = table.Column(type: "nvarchar(2000)", maxLength: 2000, nullable: true), + ExecutionTime = table.Column(type: "datetime2", nullable: false), + ExecutionDuration = table.Column(type: "int", nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogActions", x => x.Id); + table.ForeignKey( + name: "FK_AbpAuditLogActions_AbpAuditLogs_AuditLogId", + column: x => x.AuditLogId, + principalTable: "AbpAuditLogs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpEntityChanges", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + AuditLogId = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ChangeTime = table.Column(type: "datetime2", nullable: false), + ChangeType = table.Column(type: "tinyint", nullable: false), + EntityTenantId = table.Column(type: "uniqueidentifier", nullable: true), + EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + EntityTypeFullName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEntityChanges", x => x.Id); + table.ForeignKey( + name: "FK_AbpEntityChanges_AbpAuditLogs_AuditLogId", + column: x => x.AuditLogId, + principalTable: "AbpAuditLogs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpOrganizationUnitRoles", + columns: table => new + { + RoleId = table.Column(type: "uniqueidentifier", nullable: false), + OrganizationUnitId = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpOrganizationUnitRoles", x => new { x.OrganizationUnitId, x.RoleId }); + table.ForeignKey( + name: "FK_AbpOrganizationUnitRoles_AbpOrganizationUnits_OrganizationUnitId", + column: x => x.OrganizationUnitId, + principalTable: "AbpOrganizationUnits", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpOrganizationUnitRoles_AbpRoles_RoleId", + column: x => x.RoleId, + principalTable: "AbpRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpRoleClaims", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + RoleId = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ClaimType = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + ClaimValue = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpRoleClaims", x => x.Id); + table.ForeignKey( + name: "FK_AbpRoleClaims_AbpRoles_RoleId", + column: x => x.RoleId, + principalTable: "AbpRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpTenantConnectionStrings", + columns: table => new + { + TenantId = table.Column(type: "uniqueidentifier", nullable: false), + Name = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + Value = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpTenantConnectionStrings", x => new { x.TenantId, x.Name }); + table.ForeignKey( + name: "FK_AbpTenantConnectionStrings_AbpTenants_TenantId", + column: x => x.TenantId, + principalTable: "AbpTenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserClaims", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + UserId = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ClaimType = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + ClaimValue = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserClaims", x => x.Id); + table.ForeignKey( + name: "FK_AbpUserClaims_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserLogins", + columns: table => new + { + UserId = table.Column(type: "uniqueidentifier", nullable: false), + LoginProvider = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ProviderKey = table.Column(type: "nvarchar(196)", maxLength: 196, nullable: false), + ProviderDisplayName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserLogins", x => new { x.UserId, x.LoginProvider }); + table.ForeignKey( + name: "FK_AbpUserLogins_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserOrganizationUnits", + columns: table => new + { + UserId = table.Column(type: "uniqueidentifier", nullable: false), + OrganizationUnitId = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserOrganizationUnits", x => new { x.OrganizationUnitId, x.UserId }); + table.ForeignKey( + name: "FK_AbpUserOrganizationUnits_AbpOrganizationUnits_OrganizationUnitId", + column: x => x.OrganizationUnitId, + principalTable: "AbpOrganizationUnits", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpUserOrganizationUnits_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserRoles", + columns: table => new + { + UserId = table.Column(type: "uniqueidentifier", nullable: false), + RoleId = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserRoles", x => new { x.UserId, x.RoleId }); + table.ForeignKey( + name: "FK_AbpUserRoles_AbpRoles_RoleId", + column: x => x.RoleId, + principalTable: "AbpRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpUserRoles_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserTokens", + columns: table => new + { + UserId = table.Column(type: "uniqueidentifier", nullable: false), + LoginProvider = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + Value = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); + table.ForeignKey( + name: "FK_AbpUserTokens_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpEntityPropertyChanges", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + EntityChangeId = table.Column(type: "uniqueidentifier", nullable: false), + NewValue = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), + OriginalValue = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), + PropertyName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + PropertyTypeFullName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEntityPropertyChanges", x => x.Id); + table.ForeignKey( + name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId", + column: x => x.EntityChangeId, + principalTable: "AbpEntityChanges", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogActions_AuditLogId", + table: "AbpAuditLogActions", + column: "AuditLogId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogActions_TenantId_ServiceName_MethodName_ExecutionTime", + table: "AbpAuditLogActions", + columns: new[] { "TenantId", "ServiceName", "MethodName", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogs_TenantId_ExecutionTime", + table: "AbpAuditLogs", + columns: new[] { "TenantId", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogs_TenantId_UserId_ExecutionTime", + table: "AbpAuditLogs", + columns: new[] { "TenantId", "UserId", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityChanges_AuditLogId", + table: "AbpEntityChanges", + column: "AuditLogId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityChanges_TenantId_EntityTypeFullName_EntityId", + table: "AbpEntityChanges", + columns: new[] { "TenantId", "EntityTypeFullName", "EntityId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityPropertyChanges_EntityChangeId", + table: "AbpEntityPropertyChanges", + column: "EntityChangeId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpFeatureValues_Name_ProviderName_ProviderKey", + table: "AbpFeatureValues", + columns: new[] { "Name", "ProviderName", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpLinkUsers_SourceUserId_SourceTenantId_TargetUserId_TargetTenantId", + table: "AbpLinkUsers", + columns: new[] { "SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId" }, + unique: true, + filter: "[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); + + migrationBuilder.CreateIndex( + name: "IX_AbpOrganizationUnitRoles_RoleId_OrganizationUnitId", + table: "AbpOrganizationUnitRoles", + columns: new[] { "RoleId", "OrganizationUnitId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpOrganizationUnits_Code", + table: "AbpOrganizationUnits", + column: "Code"); + + migrationBuilder.CreateIndex( + name: "IX_AbpOrganizationUnits_ParentId", + table: "AbpOrganizationUnits", + column: "ParentId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissionGrants_Name_ProviderName_ProviderKey", + table: "AbpPermissionGrants", + columns: new[] { "Name", "ProviderName", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpRoleClaims_RoleId", + table: "AbpRoleClaims", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpRoles_NormalizedName", + table: "AbpRoles", + column: "NormalizedName"); + + migrationBuilder.CreateIndex( + name: "IX_AbpSecurityLogs_TenantId_Action", + table: "AbpSecurityLogs", + columns: new[] { "TenantId", "Action" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpSecurityLogs_TenantId_ApplicationName", + table: "AbpSecurityLogs", + columns: new[] { "TenantId", "ApplicationName" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpSecurityLogs_TenantId_Identity", + table: "AbpSecurityLogs", + columns: new[] { "TenantId", "Identity" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpSecurityLogs_TenantId_UserId", + table: "AbpSecurityLogs", + columns: new[] { "TenantId", "UserId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpSettings_Name_ProviderName_ProviderKey", + table: "AbpSettings", + columns: new[] { "Name", "ProviderName", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpTenants_Name", + table: "AbpTenants", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserClaims_UserId", + table: "AbpUserClaims", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserLogins_LoginProvider_ProviderKey", + table: "AbpUserLogins", + columns: new[] { "LoginProvider", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserOrganizationUnits_UserId_OrganizationUnitId", + table: "AbpUserOrganizationUnits", + columns: new[] { "UserId", "OrganizationUnitId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserRoles_RoleId_UserId", + table: "AbpUserRoles", + columns: new[] { "RoleId", "UserId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_Email", + table: "AbpUsers", + column: "Email"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_NormalizedEmail", + table: "AbpUsers", + column: "NormalizedEmail"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_NormalizedUserName", + table: "AbpUsers", + column: "NormalizedUserName"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_UserName", + table: "AbpUsers", + column: "UserName"); + + migrationBuilder.CreateIndex( + name: "IX_CmsComments_TenantId_EntityType_EntityId", + table: "CmsComments", + columns: new[] { "TenantId", "EntityType", "EntityId" }); + + migrationBuilder.CreateIndex( + name: "IX_CmsComments_TenantId_RepliedCommentId", + table: "CmsComments", + columns: new[] { "TenantId", "RepliedCommentId" }); + + migrationBuilder.CreateIndex( + name: "IX_CmsRatings_TenantId_EntityType_EntityId_CreatorId", + table: "CmsRatings", + columns: new[] { "TenantId", "EntityType", "EntityId", "CreatorId" }); + + migrationBuilder.CreateIndex( + name: "IX_CmsUserReactions_TenantId_CreatorId_EntityType_EntityId_ReactionName", + table: "CmsUserReactions", + columns: new[] { "TenantId", "CreatorId", "EntityType", "EntityId", "ReactionName" }); + + migrationBuilder.CreateIndex( + name: "IX_CmsUserReactions_TenantId_EntityType_EntityId_ReactionName", + table: "CmsUserReactions", + columns: new[] { "TenantId", "EntityType", "EntityId", "ReactionName" }); + + migrationBuilder.CreateIndex( + name: "IX_CmsUsers_TenantId_Email", + table: "CmsUsers", + columns: new[] { "TenantId", "Email" }); + + migrationBuilder.CreateIndex( + name: "IX_CmsUsers_TenantId_UserName", + table: "CmsUsers", + columns: new[] { "TenantId", "UserName" }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpAuditLogActions"); + + migrationBuilder.DropTable( + name: "AbpClaimTypes"); + + migrationBuilder.DropTable( + name: "AbpEntityPropertyChanges"); + + migrationBuilder.DropTable( + name: "AbpFeatureValues"); + + migrationBuilder.DropTable( + name: "AbpLinkUsers"); + + migrationBuilder.DropTable( + name: "AbpOrganizationUnitRoles"); + + migrationBuilder.DropTable( + name: "AbpPermissionGrants"); + + migrationBuilder.DropTable( + name: "AbpRoleClaims"); + + migrationBuilder.DropTable( + name: "AbpSecurityLogs"); + + migrationBuilder.DropTable( + name: "AbpSettings"); + + migrationBuilder.DropTable( + name: "AbpTenantConnectionStrings"); + + migrationBuilder.DropTable( + name: "AbpUserClaims"); + + migrationBuilder.DropTable( + name: "AbpUserLogins"); + + migrationBuilder.DropTable( + name: "AbpUserOrganizationUnits"); + + migrationBuilder.DropTable( + name: "AbpUserRoles"); + + migrationBuilder.DropTable( + name: "AbpUserTokens"); + + migrationBuilder.DropTable( + name: "CmsComments"); + + migrationBuilder.DropTable( + name: "CmsRatings"); + + migrationBuilder.DropTable( + name: "CmsUserReactions"); + + migrationBuilder.DropTable( + name: "CmsUsers"); + + migrationBuilder.DropTable( + name: "AbpEntityChanges"); + + migrationBuilder.DropTable( + name: "AbpTenants"); + + migrationBuilder.DropTable( + name: "AbpOrganizationUnits"); + + migrationBuilder.DropTable( + name: "AbpRoles"); + + migrationBuilder.DropTable( + name: "AbpUsers"); + + migrationBuilder.DropTable( + name: "AbpAuditLogs"); + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs index 96721a1355..a082d0db17 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs @@ -16,10 +16,10 @@ namespace Volo.CmsKit.Migrations { #pragma warning disable 612, 618 modelBuilder + .UseIdentityColumns() .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "3.1.8") .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + .HasAnnotation("ProductVersion", "5.0.1"); modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => { @@ -28,99 +28,99 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("ApplicationName") - .HasColumnName("ApplicationName") + .HasMaxLength(96) .HasColumnType("nvarchar(96)") - .HasMaxLength(96); + .HasColumnName("ApplicationName"); b.Property("BrowserInfo") - .HasColumnName("BrowserInfo") + .HasMaxLength(512) .HasColumnType("nvarchar(512)") - .HasMaxLength(512); + .HasColumnName("BrowserInfo"); b.Property("ClientId") - .HasColumnName("ClientId") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("ClientId"); b.Property("ClientIpAddress") - .HasColumnName("ClientIpAddress") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("ClientIpAddress"); b.Property("ClientName") - .HasColumnName("ClientName") + .HasMaxLength(128) .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasColumnName("ClientName"); b.Property("Comments") - .HasColumnName("Comments") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("Comments"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") + .HasMaxLength(40) .HasColumnType("nvarchar(40)") - .HasMaxLength(40); + .HasColumnName("ConcurrencyStamp"); b.Property("CorrelationId") - .HasColumnName("CorrelationId") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("CorrelationId"); b.Property("Exceptions") - .HasColumnName("Exceptions") + .HasMaxLength(4000) .HasColumnType("nvarchar(4000)") - .HasMaxLength(4000); + .HasColumnName("Exceptions"); b.Property("ExecutionDuration") - .HasColumnName("ExecutionDuration") - .HasColumnType("int"); + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); b.Property("ExecutionTime") .HasColumnType("datetime2"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("HttpMethod") - .HasColumnName("HttpMethod") + .HasMaxLength(16) .HasColumnType("nvarchar(16)") - .HasMaxLength(16); + .HasColumnName("HttpMethod"); b.Property("HttpStatusCode") - .HasColumnName("HttpStatusCode") - .HasColumnType("int"); + .HasColumnType("int") + .HasColumnName("HttpStatusCode"); b.Property("ImpersonatorTenantId") - .HasColumnName("ImpersonatorTenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorTenantId"); b.Property("ImpersonatorUserId") - .HasColumnName("ImpersonatorUserId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorUserId"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.Property("TenantName") .HasColumnType("nvarchar(max)"); b.Property("Url") - .HasColumnName("Url") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("Url"); b.Property("UserId") - .HasColumnName("UserId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("UserId"); b.Property("UserName") - .HasColumnName("UserName") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("UserName"); b.HasKey("Id"); @@ -138,39 +138,39 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("AuditLogId") - .HasColumnName("AuditLogId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); b.Property("ExecutionDuration") - .HasColumnName("ExecutionDuration") - .HasColumnType("int"); + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); b.Property("ExecutionTime") - .HasColumnName("ExecutionTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("ExecutionTime"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("MethodName") - .HasColumnName("MethodName") + .HasMaxLength(128) .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasColumnName("MethodName"); b.Property("Parameters") - .HasColumnName("Parameters") + .HasMaxLength(2000) .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); + .HasColumnName("Parameters"); b.Property("ServiceName") - .HasColumnName("ServiceName") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("ServiceName"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -188,39 +188,39 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("AuditLogId") - .HasColumnName("AuditLogId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); b.Property("ChangeTime") - .HasColumnName("ChangeTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("ChangeTime"); b.Property("ChangeType") - .HasColumnName("ChangeType") - .HasColumnType("tinyint"); + .HasColumnType("tinyint") + .HasColumnName("ChangeType"); b.Property("EntityId") .IsRequired() - .HasColumnName("EntityId") + .HasMaxLength(128) .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasColumnName("EntityId"); b.Property("EntityTenantId") .HasColumnType("uniqueidentifier"); b.Property("EntityTypeFullName") .IsRequired() - .HasColumnName("EntityTypeFullName") + .HasMaxLength(128) .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasColumnName("EntityTypeFullName"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -241,30 +241,30 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("NewValue") - .HasColumnName("NewValue") + .HasMaxLength(512) .HasColumnType("nvarchar(512)") - .HasMaxLength(512); + .HasColumnName("NewValue"); b.Property("OriginalValue") - .HasColumnName("OriginalValue") + .HasMaxLength(512) .HasColumnType("nvarchar(512)") - .HasMaxLength(512); + .HasColumnName("OriginalValue"); b.Property("PropertyName") .IsRequired() - .HasColumnName("PropertyName") + .HasMaxLength(128) .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasColumnName("PropertyName"); b.Property("PropertyTypeFullName") .IsRequired() - .HasColumnName("PropertyTypeFullName") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("PropertyTypeFullName"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -273,6 +273,37 @@ namespace Volo.CmsKit.Migrations b.ToTable("AbpEntityPropertyChanges"); }); + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpFeatureValues"); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => { b.Property("Id") @@ -281,33 +312,33 @@ namespace Volo.CmsKit.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") + .HasMaxLength(40) .HasColumnType("nvarchar(40)") - .HasMaxLength(40); + .HasColumnName("ConcurrencyStamp"); b.Property("Description") - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("IsStatic") .HasColumnType("bit"); b.Property("Name") .IsRequired() - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); b.Property("Regex") - .HasColumnType("nvarchar(512)") - .HasMaxLength(512); + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); b.Property("RegexDescription") - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); b.Property("Required") .HasColumnType("bit"); @@ -320,6 +351,33 @@ namespace Volo.CmsKit.Migrations b.ToTable("AbpClaimTypes"); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("SourceTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("SourceUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique() + .HasFilter("[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); + + b.ToTable("AbpLinkUsers"); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => { b.Property("Id") @@ -328,39 +386,39 @@ namespace Volo.CmsKit.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") + .HasMaxLength(40) .HasColumnType("nvarchar(40)") - .HasMaxLength(40); + .HasColumnName("ConcurrencyStamp"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("IsDefault") - .HasColumnName("IsDefault") - .HasColumnType("bit"); + .HasColumnType("bit") + .HasColumnName("IsDefault"); b.Property("IsPublic") - .HasColumnName("IsPublic") - .HasColumnType("bit"); + .HasColumnType("bit") + .HasColumnName("IsPublic"); b.Property("IsStatic") - .HasColumnName("IsStatic") - .HasColumnType("bit"); + .HasColumnType("bit") + .HasColumnName("IsStatic"); b.Property("Name") .IsRequired() - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); b.Property("NormalizedName") .IsRequired() - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -376,19 +434,19 @@ namespace Volo.CmsKit.Migrations b.Property("ClaimType") .IsRequired() - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); b.Property("ClaimValue") - .HasColumnType("nvarchar(1024)") - .HasMaxLength(1024); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.Property("RoleId") .HasColumnType("uniqueidentifier"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -397,6 +455,81 @@ namespace Volo.CmsKit.Migrations b.ToTable("AbpRoleClaims"); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs"); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => { b.Property("Id") @@ -405,130 +538,136 @@ namespace Volo.CmsKit.Migrations b.Property("AccessFailedCount") .ValueGeneratedOnAdd() - .HasColumnName("AccessFailedCount") .HasColumnType("int") - .HasDefaultValue(0); + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") + .HasMaxLength(40) .HasColumnType("nvarchar(40)") - .HasMaxLength(40); + .HasColumnName("ConcurrencyStamp"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("DeleterId") - .HasColumnName("DeleterId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); b.Property("DeletionTime") - .HasColumnName("DeletionTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); b.Property("Email") .IsRequired() - .HasColumnName("Email") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("Email"); b.Property("EmailConfirmed") .ValueGeneratedOnAdd() - .HasColumnName("EmailConfirmed") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("IsDeleted") .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); b.Property("LockoutEnabled") .ValueGeneratedOnAdd() - .HasColumnName("LockoutEnabled") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); b.Property("LockoutEnd") .HasColumnType("datetimeoffset"); b.Property("Name") - .HasColumnName("Name") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("Name"); b.Property("NormalizedEmail") .IsRequired() - .HasColumnName("NormalizedEmail") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("NormalizedEmail"); b.Property("NormalizedUserName") .IsRequired() - .HasColumnName("NormalizedUserName") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("NormalizedUserName"); b.Property("PasswordHash") - .HasColumnName("PasswordHash") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("PasswordHash"); b.Property("PhoneNumber") - .HasColumnName("PhoneNumber") + .HasMaxLength(16) .HasColumnType("nvarchar(16)") - .HasMaxLength(16); + .HasColumnName("PhoneNumber"); b.Property("PhoneNumberConfirmed") .ValueGeneratedOnAdd() - .HasColumnName("PhoneNumberConfirmed") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); b.Property("SecurityStamp") .IsRequired() - .HasColumnName("SecurityStamp") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("SecurityStamp"); b.Property("Surname") - .HasColumnName("Surname") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("Surname"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.Property("TwoFactorEnabled") .ValueGeneratedOnAdd() - .HasColumnName("TwoFactorEnabled") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); b.Property("UserName") .IsRequired() - .HasColumnName("UserName") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("UserName"); b.HasKey("Id"); @@ -550,16 +689,16 @@ namespace Volo.CmsKit.Migrations b.Property("ClaimType") .IsRequired() - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); b.Property("ClaimValue") - .HasColumnType("nvarchar(1024)") - .HasMaxLength(1024); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.Property("UserId") .HasColumnType("uniqueidentifier"); @@ -577,21 +716,21 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("LoginProvider") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("ProviderDisplayName") - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); b.Property("ProviderKey") .IsRequired() - .HasColumnType("nvarchar(196)") - .HasMaxLength(196); + .HasMaxLength(196) + .HasColumnType("nvarchar(196)"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("UserId", "LoginProvider"); @@ -609,16 +748,16 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("OrganizationUnitId", "UserId"); @@ -636,8 +775,8 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("UserId", "RoleId"); @@ -652,16 +791,16 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("LoginProvider") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("Name") - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.Property("Value") .HasColumnType("nvarchar(max)"); @@ -679,62 +818,62 @@ namespace Volo.CmsKit.Migrations b.Property("Code") .IsRequired() - .HasColumnName("Code") + .HasMaxLength(95) .HasColumnType("nvarchar(95)") - .HasMaxLength(95); + .HasColumnName("Code"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") + .HasMaxLength(40) .HasColumnType("nvarchar(40)") - .HasMaxLength(40); + .HasColumnName("ConcurrencyStamp"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("DeleterId") - .HasColumnName("DeleterId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); b.Property("DeletionTime") - .HasColumnName("DeletionTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); b.Property("DisplayName") .IsRequired() - .HasColumnName("DisplayName") + .HasMaxLength(128) .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasColumnName("DisplayName"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("IsDeleted") .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); b.Property("ParentId") .HasColumnType("uniqueidentifier"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -754,16 +893,16 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("OrganizationUnitId", "RoleId"); @@ -780,22 +919,22 @@ namespace Volo.CmsKit.Migrations b.Property("Name") .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); b.Property("ProviderKey") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("ProviderName") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -812,21 +951,21 @@ namespace Volo.CmsKit.Migrations b.Property("Name") .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); b.Property("ProviderKey") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("ProviderName") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("Value") .IsRequired() - .HasColumnType("nvarchar(2048)") - .HasMaxLength(2048); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.HasKey("Id"); @@ -843,48 +982,48 @@ namespace Volo.CmsKit.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") + .HasMaxLength(40) .HasColumnType("nvarchar(40)") - .HasMaxLength(40); + .HasColumnName("ConcurrencyStamp"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("DeleterId") - .HasColumnName("DeleterId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); b.Property("DeletionTime") - .HasColumnName("DeletionTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("IsDeleted") .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); b.Property("Name") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.HasKey("Id"); @@ -899,13 +1038,13 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("Name") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("Value") .IsRequired() - .HasColumnType("nvarchar(1024)") - .HasMaxLength(1024); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("TenantId", "Name"); @@ -919,34 +1058,34 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("EntityId") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("EntityType") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("RepliedCommentId") .HasColumnType("uniqueidentifier"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.Property("Text") .IsRequired() - .HasColumnType("nvarchar(512)") - .HasMaxLength(512); + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); b.HasKey("Id"); @@ -964,22 +1103,22 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("EntityId") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("EntityType") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("StarCount") .HasColumnType("smallint"); @@ -1001,31 +1140,31 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier"); b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); b.Property("EntityId") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("EntityType") .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); b.Property("ReactionName") .IsRequired() - .HasColumnType("nvarchar(32)") - .HasMaxLength(32); + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.HasKey("Id"); @@ -1044,56 +1183,56 @@ namespace Volo.CmsKit.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") + .HasMaxLength(40) .HasColumnType("nvarchar(40)") - .HasMaxLength(40); + .HasColumnName("ConcurrencyStamp"); b.Property("Email") .IsRequired() - .HasColumnName("Email") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("Email"); b.Property("EmailConfirmed") .ValueGeneratedOnAdd() - .HasColumnName("EmailConfirmed") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); b.Property("Name") - .HasColumnName("Name") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("Name"); b.Property("PhoneNumber") - .HasColumnName("PhoneNumber") + .HasMaxLength(16) .HasColumnType("nvarchar(16)") - .HasMaxLength(16); + .HasColumnName("PhoneNumber"); b.Property("PhoneNumberConfirmed") .ValueGeneratedOnAdd() - .HasColumnName("PhoneNumberConfirmed") .HasColumnType("bit") - .HasDefaultValue(false); + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); b.Property("Surname") - .HasColumnName("Surname") + .HasMaxLength(64) .HasColumnType("nvarchar(64)") - .HasMaxLength(64); + .HasColumnName("Surname"); b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); b.Property("UserName") .IsRequired() - .HasColumnName("UserName") + .HasMaxLength(256) .HasColumnType("nvarchar(256)") - .HasMaxLength(256); + .HasColumnName("UserName"); b.HasKey("Id"); @@ -1227,6 +1366,46 @@ namespace Volo.CmsKit.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); #pragma warning restore 612, 618 } } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj index 70f6923cfc..152d740864 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj @@ -1,7 +1,5 @@ - - net5.0 Volo.CmsKit @@ -10,9 +8,9 @@ - + - + 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 78834de93d..1171b7f8a6 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": "^4.0.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.0.1" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/star-rating-svg/css/star-rating-svg.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/star-rating-svg/css/star-rating-svg.css new file mode 100644 index 0000000000..2c0114687f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/star-rating-svg/css/star-rating-svg.css @@ -0,0 +1,37 @@ +.jq-stars { + display: inline-block; +} + +.jq-rating-label { + font-size: 22px; + display: inline-block; + position: relative; + vertical-align: top; + font-family: helvetica, arial, verdana; +} + +.jq-star { + width: 100px; + height: 100px; + display: inline-block; + cursor: pointer; +} + +.jq-star-svg { + width: 100%; + height: 100% ; +} + +.jq-star:hover .fs-star-svg polygon { +} + +.jq-star-svg polygon { + stroke: #000; + stroke-linejoin: round; +} + +/* un-used */ +.jq-shadow { + -webkit-filter: drop-shadow( -2px -2px 2px #888 ); + filter: drop-shadow( -2px -2px 2px #888 ); +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/star-rating-svg/js/jquery.star-rating-svg.min.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/star-rating-svg/js/jquery.star-rating-svg.min.js new file mode 100644 index 0000000000..df947cfe2b --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/star-rating-svg/js/jquery.star-rating-svg.min.js @@ -0,0 +1 @@ +!function(a){"use strict";var b="starRating",c=function(){},d={totalStars:5,useFullStars:!1,emptyColor:"lightgray",hoverColor:"orange",activeColor:"gold",useGradient:!0,readOnly:!1,disableAfterRate:!0,starGradient:{start:"#FEF7CD",end:"#FF9511"},strokeWidth:0,strokeColor:"black",initialRating:0,starSize:40,callback:c,onHover:c,onLeave:c},e=function(c,e){var f;this.element=c,this.$el=a(c),this.settings=a.extend({},d,e),f=this.$el.data("rating")||this.settings.initialRating,this._state={rating:(Math.round(2*f)/2).toFixed(1)},this._uid=Math.floor(999*Math.random()),e.starGradient||this.settings.useGradient||(this.settings.starGradient.start=this.settings.starGradient.end=this.settings.activeColor),this._defaults=d,this._name=b,this.init()},f={init:function(){this.renderMarkup(),this.addListeners(),this.initRating()},addListeners:function(){this.settings.readOnly||(this.$stars.on("mouseover",this.hoverRating.bind(this)),this.$stars.on("mouseout",this.restoreState.bind(this)),this.$stars.on("click",this.handleRating.bind(this)))},hoverRating:function(a){var b=this.getIndex(a);this.paintStars(b,"hovered"),this.settings.onHover(b+1,this._state.rating,this.$el)},handleRating:function(a){var b=this.getIndex(a),c=b+1;this.applyRating(c,this.$el),this.executeCallback(c,this.$el),this.settings.disableAfterRate&&this.$stars.off()},applyRating:function(a){var b=a-1;this.paintStars(b,"active"),this._state.rating=b+1},restoreState:function(a){var b=this.getIndex(a),c=this._state.rating||-1;this.paintStars(c-1,"active"),this.settings.onLeave(b+1,this._state.rating,this.$el)},getIndex:function(b){var c=a(b.currentTarget),d=c.width(),e=a(b.target).attr("data-side");e=e?e:this.getOffsetByPixel(b,c,d),e=this.settings.useFullStars?"right":e;var f=c.index()-("left"===e?.5:0);return f=.5>f&&b.offsetX=d&&!this.settings.useFullStars?"left":"right"},initRating:function(){this.paintStars(this._state.rating-1,"active")},paintStars:function(b,c){var d,e,f,g;a.each(this.$stars,function(h,i){d=a(i).find('polygon[data-side="left"]'),e=a(i).find('polygon[data-side="right"]'),f=g=b>=h?c:"empty",f=h-b===.5?c:f,d.attr("class","svg-"+f+"-"+this._uid),e.attr("class","svg-"+g+"-"+this._uid)}.bind(this))},renderMarkup:function(){for(var a='
"+this.getLinearGradient(this._uid+"_SVGID_1_",this.settings.emptyColor,this.settings.emptyColor)+this.getLinearGradient(this._uid+"_SVGID_2_",this.settings.hoverColor,this.settings.hoverColor)+this.getLinearGradient(this._uid+"_SVGID_3_",this.settings.starGradient.start,this.settings.starGradient.end)+'
',b="",c=0;c '},executeCallback:function(a,b){var c=this.settings.callback;c(a,b)}},g={unload:function(){var c="plugin_"+b,d=a(this),e=d.data(c).$stars;e.off(),d.removeData(c).remove()},setRating:function(c,d){var e="plugin_"+b,f=a(this),g=f.data(e);c>g.settings.totalStars||0>c||(d&&(c=Math.round(c)),g.applyRating(c))},getRating:function(){var c="plugin_"+b,d=a(this),e=d.data(c);return e._state.rating}};a.extend(e.prototype,f),a.fn[b]=function(c){if(!a.isPlainObject(c)){if(g.hasOwnProperty(c))return g[c].apply(this,Array.prototype.slice.call(arguments,1));a.error("Method "+c+" does not exist on "+b+".js")}return this.each(function(){a.data(this,"plugin_"+b)||a.data(this,"plugin_"+b,new e(this,c))})}}(jQuery,window,document); \ 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 bc2ae6b5df..78e1068643 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@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.0.tgz#b1822cf5bbc0f6eeb414ebd0877f6d1115a81fe7" - integrity sha512-yYXQkEnNhftzm+ZI8d3VFMlV5UuLNTMQQwV2eZ8tJfstUQrKV9bVd3+NdDOr3AkvcD8D7mvMFeBuoMYteL5kLQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.1.tgz#ce8e3eb830a8e8f9eecb1a3b3bd70c2832fdf15e" + integrity sha512-w+ZG8Ewx9wWfbvRC2MAjJl+rXuXSHLhhGOiJTk68unWLNziDtNQzcSXG/Z5c1hA+acJSGqDoJGEGs4FVM136og== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.0.tgz#ba896056e9df5ac58e108df96996fbb2ca7a1a15" - integrity sha512-3RNn6VrNA+cqnPBoSbiCazN05cC2rhcRFMMxkEte+LImGbGOsxc4MflzHg5On1ExCGdqko8Axbw/ydy44Ak4Hw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.0.0" - "@abp/bootstrap" "~4.0.0" - "@abp/bootstrap-datepicker" "~4.0.0" - "@abp/datatables.net-bs4" "~4.0.0" - "@abp/font-awesome" "~4.0.0" - "@abp/jquery-form" "~4.0.0" - "@abp/jquery-validation-unobtrusive" "~4.0.0" - "@abp/lodash" "~4.0.0" - "@abp/luxon" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/select2" "~4.0.0" - "@abp/sweetalert" "~4.0.0" - "@abp/timeago" "~4.0.0" - "@abp/toastr" "~4.0.0" - -"@abp/aspnetcore.mvc.ui@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.0.tgz#68502177a05f6ce7191a09b06a18c5b5dfab425d" - integrity sha512-tYHUWMwnwInrGSzC/OdN6bH/VHZEz5DP3rx2U6fcb0I5GvvRdQZxVgUvmWn6DeMA3PG10Gra4SfkhZqRQq9rjQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.1.tgz#cd9d0eb11309c597dffd26277cd1bd7c5b1e0e2f" + integrity sha512-QGoCN/my0eAfa4tx5ytDxArIoz2i58jFFVUGso1Lekn54JvSt+WLz2p3uyTGatZ03Bp9836elhFnIopn12WvBw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.0.1" + "@abp/bootstrap" "~4.0.1" + "@abp/bootstrap-datepicker" "~4.0.1" + "@abp/datatables.net-bs4" "~4.0.1" + "@abp/font-awesome" "~4.0.1" + "@abp/jquery-form" "~4.0.1" + "@abp/jquery-validation-unobtrusive" "~4.0.1" + "@abp/lodash" "~4.0.1" + "@abp/luxon" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/select2" "~4.0.1" + "@abp/sweetalert" "~4.0.1" + "@abp/timeago" "~4.0.1" + "@abp/toastr" "~4.0.1" + +"@abp/aspnetcore.mvc.ui@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.1.tgz#6490c147a56e4f7055d2ca77f20baf1f60f56867" + integrity sha512-4B3icJrlpuZgMaX52ninyaenH7zLwepePEscDrLaFY9wyonKpZ2zh+xplnyM6vjNd+PhErWuA2+ssCswFhrJ3A== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,145 +43,145 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/bootstrap-datepicker@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.0.tgz#cdbd2c388c6d7ce8c6d72443038975063e6c6d02" - integrity sha512-hauH8VhpC8cxv1wCR6bVBcNqZepftdBXxEVID7TSAqgNyWjm/CrJqWLI+A0nnkG3IHoIm9D22iF47BamuYHptw== +"@abp/bootstrap-datepicker@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.1.tgz#aad891263edff66f816e003ba4fa7f8acfe8e0b6" + integrity sha512-S0oaVZmXsDcOJLAyoGY0TvP/7bZx0GHIbU9BIhIL2Wl74HYaokjkTr6/IleIek9YeiF2vm9FkrUP1dKH/4f7Gg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.0.tgz#04174f18055f76f936e6fb73e5ff71ffa08a8528" - integrity sha512-Tmr0yoSWg7XHl02X5wv04CvYcL8KCpX8u6YGJj31jRZxUTeCvs5ETXlepOWcdxPQqi/4olXv5B9GEz5S9l5nZA== +"@abp/bootstrap@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.1.tgz#3e41bdf9b3e9f8c497b9fafe22a4851d0401b31b" + integrity sha512-GoSaNWvswRHVoUrq7xClFQYtwqIlyS/vp/TdY+j5FFZP7ud89+ZGpdNqYqq5l9/6aaYa7v4b9mNTZ/1JRzAOYg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.0.tgz#65e76c697e62162717e0edabf7edacc4228e682a" - integrity sha512-xcTTBFjLFZ9Trv2x9Y/c3XKezIx+x3MTXUD98QJPf1aR7T43TE/tLHRxdRfW3R8ka0O1wmlYshpkaw5pYNsj5w== +"@abp/core@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.1.tgz#1df32bc058f45571605670ca81c226a1bd87400c" + integrity sha512-8UT5lwqV/luVG/SxePSTD2FRbZXwXv3cZJKjw+gpBjhD0slWrh51XEOHsM8ciTuhcvV/tsqVU9nXckDMdO58fw== dependencies: - "@abp/utils" "^4.0.0" + "@abp/utils" "^4.0.1" -"@abp/datatables.net-bs4@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.0.tgz#fe737e054f6ba35e787a1cda185af2788ef86d39" - integrity sha512-mz7xZdzX1nlFyX7vNzB5w3RkqZ0IHrPgsXGOB7OCTKMRshDFVH2O51Oy4qoLDOXoTVeahHtR9v8thEWFR1SnZg== +"@abp/datatables.net-bs4@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.1.tgz#7538baad0eff24eca7f4246d020852f83139f645" + integrity sha512-S52jNPF4if68V+P/33NrtGPJXf6xrqgyZzz9b7qBR7HuUm3Nsn7bAslh3JNduNec/sFuE4Utl/xsFHZNjBWEog== dependencies: - "@abp/datatables.net" "~4.0.0" + "@abp/datatables.net" "~4.0.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.0.tgz#88ae5f1a6068fba55927e59f113686508e9553cb" - integrity sha512-JYTfMA1zlBNGiQHAiZiTj5ka6B6vq5k2jqsoLHup4pD9jpKwKRBGtltVsWoEnetd9eEbp4SaV/FCuh3RzmV6Pw== +"@abp/datatables.net@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.1.tgz#eb89716a37351c41b5bccfc2db88fc7ceb991a26" + integrity sha512-APFLui0w8MqsBWqP/K0QkT5cBq5SsWiqMaIGTXQKinMVLV597sUszrlhe1ISU2PqeD7iX6pCZNNOTI1NEUn9/Q== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" datatables.net "^1.10.21" -"@abp/font-awesome@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.0.tgz#6e1e4bd1175a0b8d3b095e215c07e66ad0e42e19" - integrity sha512-kHfZ45UMDWSRk1gTV/BwVfSoXksJ9UlnD3SelTGeAkvbDqtDllqlp9y6c3qQcmZUE348Xl4hDTkU8upZwswCFQ== +"@abp/font-awesome@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.1.tgz#8a9d83b2c2adfcd5abcbd9c31c315460d44a321e" + integrity sha512-+6+m/DKMnfkeQiWUsMlB6Da8u6yREyN2oQYGYhSRAK8419ym8RHHrqKJv2AClI4iLq2ppHZj8WF84+SeoCekRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.0.tgz#3afb41eb16d62e32c31a29c6a866f634a5a20cd8" - integrity sha512-cQq8PgzHfpK9/LxmjlnMsDn85wWvEOqjyLaepHFpTTt0341auSgXNwhp7rk71AUHD1lP3c9ALctmqu+gYmh9ag== +"@abp/jquery-form@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.1.tgz#6dc1922b2800dd635f20881a82e08104a1dd1bb5" + integrity sha512-JMBZYu/MI/GjaLTBOMB5iv8cagnLpReDULNC3r6tLNNqB1R8f3Cg1T7nF4YCuU9SYMqis1P/AuE4oEh+4rQdAQ== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#c3674d2b01b3c524de4c3fac1c6ae3657857ee7b" - integrity sha512-OGibIdw0ogjp6VQIebHM7OtMT36pjLKRrOHyCVpTmQ7NzDODV5ptG83vOnt5nFG0y9XFrOt8cnHrrd+K1Bpo/Q== +"@abp/jquery-validation-unobtrusive@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.1.tgz#4142ca31c0830fe24a1467e8cf13b55ba9d7c1dd" + integrity sha512-rdSRTcdKCHmarbrVgmPYdTiJ0G/aFKd+dr0krO7fALPTuQKChbDnHOO4/JvQSc+cd9faxa8c6ZWvlHdsof23tQ== dependencies: - "@abp/jquery-validation" "~4.0.0" + "@abp/jquery-validation" "~4.0.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.0.tgz#0a101937f89ff398317142b5271fa9a1de6571c2" - integrity sha512-4nzvhAktEINpQ2H+Hy7TOxxojTmTEm5dBTbHs1vbCWUuF0OTpouZWbMZDESdP0ZbjXcQ+vhwuM4e/pm/PeaHyQ== +"@abp/jquery-validation@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.1.tgz#74e7d795468c6986f2db15662631fcd4f67c679e" + integrity sha512-FX26aQCsMBdVWAJb7S37Lt7KoHAEHoYguh/qfZIARCpOYOOWvxfDz1wTrmADUkqdillqEiCeD/Imj8bYH9Faaw== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-validation "^1.19.2" -"@abp/jquery@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.0.tgz#00d24678b573bcc2fb14d8337ccdbf697b59d43b" - integrity sha512-gXLK97IvAZriNlG8e0qJcd7MvnpshJQURb4lg8VYibD7Fs/OBeHSAWM2Adgi3H9DnQL8XEUlWf487FSz4RC/Yg== +"@abp/jquery@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.1.tgz#aa554accb16600fd586c3a4f088040cd26d0bde8" + integrity sha512-MtiRKOLyjEWux+whPP3+zwPbpj8or756JtgjnwOTDB9tp9HLCYUaskt+oalYPvob24nDZcNu2RnMALYdCVhZAQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" jquery "~3.5.1" -"@abp/lodash@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.0.tgz#fe76d09517f6b1adf18edde94a31e13b003329dc" - integrity sha512-uitn5uYlb9xShRtV4AFOgp3lu2kADGMD4+a4fy5r4umlPM2uuMo0wMhzyYdBIG64JC5oNaqAzOwZyhhnn+HGJg== +"@abp/lodash@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.1.tgz#ec261ccaab8a70d5b32a8a7c22387e48936d38d4" + integrity sha512-Dav1QKbBeGR4VVbHHe1s3OEzN7wnb9K/vwzHrWmtO8D1Q5Z3433xjNmgL5VQ9gfxXqooSfEO4gAovZklMDHDew== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" lodash "^4.17.15" -"@abp/luxon@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.0.tgz#d9357e4fb422b6e18ebe897a86a4c4bc6fbe6858" - integrity sha512-tiE6NiSa4El88SVotxfmmpceINLz8MruaO/e/U3QjJEHjRoqlv0UBrM/x5Xz92c7ZIvL0Y4QvWNISeDg6/oqIQ== +"@abp/luxon@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.1.tgz#a540750b1605dbac856ce9c2e776c2fecf6392f9" + integrity sha512-eRumVB7UIf2XH6OZVUTvcKw0A/OSAfYV59fM+Wc4dAkNcmsNZI0gD1o0AigSGNCxTV6v+W2bFrsuooSqK99Y0Q== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.0.tgz#972acf26f5eaa4bf9b8991cbe7c19fd0005d94e2" - integrity sha512-SpUo1CfppKzkE6Rb880pgB7oQ83Mkjsi0o6eE4r4gkF5hfzkuCXOmNjTYKfQIkE4n3G9QQd+8AAN/4xj4DiDrA== +"@abp/malihu-custom-scrollbar-plugin@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.1.tgz#0a556423a67b6c949e32ffcacd72256dea6c31ee" + integrity sha512-YTwYpnQ1ZrON70gvJcnNZRwB3Ze4olGcXxiPvmRgSHbGJkSnHYJiP6PvsN1F3HDFukAJ/iUu+WwEe8OBwlyLXA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.0.tgz#8fdf4c5e18f4093ee4e073dab950cf7aa9b2a540" - integrity sha512-XeXahcDMczdkZdP07yhQriIvbi1N5meeSGTnFyZX+bNTGzUOarPcuNYZ6Mcl3351HcyESHzuJbKbsk3RB1kGeg== +"@abp/select2@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.1.tgz#8983e7b5c3afb862f08b2730b70e59d726e9b5d5" + integrity sha512-WdzY2hvsS/4vz/VXpxq2muSzzE8ggchiIrICy/WKchJxL9L08DM796t6aE6rEl9wucY8XEzzWrPOVqAjJmnXFA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" select2 "^4.0.13" -"@abp/sweetalert@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.0.tgz#0d93e92e95c6855aef7e19532a7513a078ece216" - integrity sha512-y3XtZqnUVZuQohpRO1ImyBZXhtrm4H+typIL/9VgcnlvQjBTyIaiwDmU8j07Bb2rKJKe0prVkkVARO7OnjOS5A== +"@abp/sweetalert@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.1.tgz#0088610915ad6db0a140b77832a37c10066eb4ee" + integrity sha512-t4/44oQCMngSjVqmeRWXwrXa/pRKc3CEpyyTiGIXki4dWJ21j0ePCw2l3rvOJWnpoCznhxa/UGxLfRfK1NEzRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" sweetalert "^2.1.2" -"@abp/timeago@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.0.tgz#509cd8a84cd94c2644824b0c3af10c8fff6de2dc" - integrity sha512-90jzLYJusYTPwMbak1+XkXE85OPOXPpysRbL28KQwl7WLNBm8wx6IEoVZOHvOrpYscYdyeWhZCgILSJ8DR3a2Q== +"@abp/timeago@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.1.tgz#8c161645534eb1f62fe4607450acf7345729e711" + integrity sha512-PsPobV79U2qzVY+WBsmJM1ohSF4jqcLnL4/7qyJvxlb1WwbCl1F5D4cpiJP4zsM4clPW4mbSsiauMNp+HTNKEA== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" timeago "^1.6.7" -"@abp/toastr@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.0.tgz#06e28665cb7f6eefee3f69c985dd2b3f86cd7f1d" - integrity sha512-YL1fahVpDszhwpnRTN87GCP523Mkaw42ApT2A/hZuBdwRzP/u5GwRfng0i/uhdYXCMkTKuHmaHnRyqhGiv7nfQ== +"@abp/toastr@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.1.tgz#ecb6f6193b7edc3150d0614ab9457472baf1cce3" + integrity sha512-bTTz0O8zj7fMhdoummP2Ed5Z8SJTmR6svzNchBXNDrnRAcDQvTihPTcg0UpH8BEDFczbLowq09CG2A/RMSJoug== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" toastr "^2.1.4" -"@abp/utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" - integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== +"@abp/utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.1.tgz#9a4cb420266c49d8084776bd31c86681d4d4d125" + integrity sha512-nI2ZyaNpvohr75p8jeMPWze+hX+mV47EHI+Zloa4GgGmJqrULdG71kYh45R+jGmMTbQL6huaXGnpz4gNF9TGyQ== dependencies: just-compare "^1.3.0" diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index adda59c3e2..b81704034a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using Microsoft.EntityFrameworkCore; using Volo.Abp; using Volo.Abp.EntityFrameworkCore.Modeling; @@ -27,16 +28,20 @@ namespace Volo.CmsKit.EntityFrameworkCore optionsAction?.Invoke(options); - builder.Entity(b => + //TODO: What if only CMSKit Pro features are enabled? This is kinda workaround for now + if (GlobalFeatureManager.Instance.Modules.CmsKit().GetFeatures().Any(f => f.IsEnabled)) { - b.ToTable(options.TablePrefix + "Users", options.Schema); + builder.Entity(b => + { + b.ToTable(options.TablePrefix + "Users", options.Schema); - b.ConfigureByConvention(); - b.ConfigureAbpUser(); + b.ConfigureByConvention(); + b.ConfigureAbpUser(); - b.HasIndex(x => new {x.TenantId, x.UserName}); - b.HasIndex(x => new {x.TenantId, x.Email}); - }); + b.HasIndex(x => new {x.TenantId, x.UserName}); + b.HasIndex(x => new {x.TenantId, x.Email}); + }); + } if (GlobalFeatureManager.Instance.IsEnabled()) { @@ -86,7 +91,7 @@ namespace Volo.CmsKit.EntityFrameworkCore r.Property(x => x.EntityId).IsRequired().HasMaxLength(RatingConsts.MaxEntityIdLength); r.HasIndex(x => new {x.TenantId, x.EntityType, x.EntityId, x.CreatorId}); - }); + }); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js index b853a9c186..1c08e38538 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js @@ -121,6 +121,11 @@ $form.submit(function (e) { e.preventDefault(); var formAsObject = $form.serializeFormToObject(); + + if (formAsObject.repliedCommentId == ''){ + formAsObject.repliedCommentId = null; + } + volo.cmsKit.public.comments.commentPublic.create( $commentArea.attr('data-entity-type'), $commentArea.attr('data-entity-id'), diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj index 9093a9e11c..26c4be533f 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj @@ -1,7 +1,5 @@ - - net5.0 Volo.CmsKit diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Volo.CmsKit.Domain.Tests.csproj b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Volo.CmsKit.Domain.Tests.csproj index 405fa79568..d80255ba61 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Volo.CmsKit.Domain.Tests.csproj +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Volo.CmsKit.Domain.Tests.csproj @@ -1,7 +1,5 @@ - - net5.0 Volo.CmsKit diff --git a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/Volo.CmsKit.EntityFrameworkCore.Tests.csproj b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/Volo.CmsKit.EntityFrameworkCore.Tests.csproj index e639191049..b7033afe20 100644 --- a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/Volo.CmsKit.EntityFrameworkCore.Tests.csproj +++ b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/Volo.CmsKit.EntityFrameworkCore.Tests.csproj @@ -1,7 +1,5 @@ - - net5.0 Volo.CmsKit diff --git a/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/Volo.CmsKit.HttpApi.Client.ConsoleTestApp.csproj b/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/Volo.CmsKit.HttpApi.Client.ConsoleTestApp.csproj index 7c406cf142..16d88cd7f6 100644 --- a/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/Volo.CmsKit.HttpApi.Client.ConsoleTestApp.csproj +++ b/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/Volo.CmsKit.HttpApi.Client.ConsoleTestApp.csproj @@ -7,7 +7,7 @@ - + diff --git a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/Volo.CmsKit.MongoDB.Tests.csproj b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/Volo.CmsKit.MongoDB.Tests.csproj index d21c219bab..9591191e60 100644 --- a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/Volo.CmsKit.MongoDB.Tests.csproj +++ b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/Volo.CmsKit.MongoDB.Tests.csproj @@ -1,7 +1,5 @@ - - net5.0 Volo.CmsKit diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Volo.CmsKit.TestBase.csproj b/modules/cms-kit/test/Volo.CmsKit.TestBase/Volo.CmsKit.TestBase.csproj index 89d35f3aa9..35c8c151ea 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Volo.CmsKit.TestBase.csproj +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Volo.CmsKit.TestBase.csproj @@ -1,7 +1,5 @@ - - net5.0 Volo.CmsKit diff --git a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj index 8244c9b6fd..739ad8f7cd 100644 --- a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj +++ b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj @@ -17,9 +17,9 @@
- + - + diff --git a/modules/docs/app/VoloDocs.Web/package.json b/modules/docs/app/VoloDocs.Web/package.json index 1146409eef..4150b401c4 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": "^4.0.0", - "@abp/docs": "^4.0.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.0.1", + "@abp/docs": "^4.0.1" } } diff --git a/modules/docs/app/VoloDocs.Web/yarn.lock b/modules/docs/app/VoloDocs.Web/yarn.lock index e02d11d31c..f8dedb6321 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@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-4.0.0.tgz#4c22939bfb3b97a89f5b701eef4935d68b705f8d" - integrity sha512-iVFPS6225xvd7o+R0ZDcz0nNeSOkoWIGNyNU9vx/7N3BOYHg+meMf1rO+5xFISu7giG9xfwH5+PWf7QkLJ4mPg== +"@abp/anchor-js@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-4.0.1.tgz#212e5ce25bbf7861d1a4dc93a3957126f4709a47" + integrity sha512-H71ZLiedgkNpbWFChcRkvTzxAN69i49Xv/zKqyLsOAKmdlMs0LBQNbV2IdYi/RwQALvkmfX9nNx6SwC5oZ2WQw== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" anchor-js "^4.2.2" -"@abp/aspnetcore.mvc.ui.theme.basic@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.0.tgz#b1822cf5bbc0f6eeb414ebd0877f6d1115a81fe7" - integrity sha512-yYXQkEnNhftzm+ZI8d3VFMlV5UuLNTMQQwV2eZ8tJfstUQrKV9bVd3+NdDOr3AkvcD8D7mvMFeBuoMYteL5kLQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.1.tgz#ce8e3eb830a8e8f9eecb1a3b3bd70c2832fdf15e" + integrity sha512-w+ZG8Ewx9wWfbvRC2MAjJl+rXuXSHLhhGOiJTk68unWLNziDtNQzcSXG/Z5c1hA+acJSGqDoJGEGs4FVM136og== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.0.tgz#ba896056e9df5ac58e108df96996fbb2ca7a1a15" - integrity sha512-3RNn6VrNA+cqnPBoSbiCazN05cC2rhcRFMMxkEte+LImGbGOsxc4MflzHg5On1ExCGdqko8Axbw/ydy44Ak4Hw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.0.0" - "@abp/bootstrap" "~4.0.0" - "@abp/bootstrap-datepicker" "~4.0.0" - "@abp/datatables.net-bs4" "~4.0.0" - "@abp/font-awesome" "~4.0.0" - "@abp/jquery-form" "~4.0.0" - "@abp/jquery-validation-unobtrusive" "~4.0.0" - "@abp/lodash" "~4.0.0" - "@abp/luxon" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/select2" "~4.0.0" - "@abp/sweetalert" "~4.0.0" - "@abp/timeago" "~4.0.0" - "@abp/toastr" "~4.0.0" - -"@abp/aspnetcore.mvc.ui@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.0.tgz#68502177a05f6ce7191a09b06a18c5b5dfab425d" - integrity sha512-tYHUWMwnwInrGSzC/OdN6bH/VHZEz5DP3rx2U6fcb0I5GvvRdQZxVgUvmWn6DeMA3PG10Gra4SfkhZqRQq9rjQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.1.tgz#cd9d0eb11309c597dffd26277cd1bd7c5b1e0e2f" + integrity sha512-QGoCN/my0eAfa4tx5ytDxArIoz2i58jFFVUGso1Lekn54JvSt+WLz2p3uyTGatZ03Bp9836elhFnIopn12WvBw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.0.1" + "@abp/bootstrap" "~4.0.1" + "@abp/bootstrap-datepicker" "~4.0.1" + "@abp/datatables.net-bs4" "~4.0.1" + "@abp/font-awesome" "~4.0.1" + "@abp/jquery-form" "~4.0.1" + "@abp/jquery-validation-unobtrusive" "~4.0.1" + "@abp/lodash" "~4.0.1" + "@abp/luxon" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/select2" "~4.0.1" + "@abp/sweetalert" "~4.0.1" + "@abp/timeago" "~4.0.1" + "@abp/toastr" "~4.0.1" + +"@abp/aspnetcore.mvc.ui@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.1.tgz#6490c147a56e4f7055d2ca77f20baf1f60f56867" + integrity sha512-4B3icJrlpuZgMaX52ninyaenH7zLwepePEscDrLaFY9wyonKpZ2zh+xplnyM6vjNd+PhErWuA2+ssCswFhrJ3A== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -51,181 +51,181 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/bootstrap-datepicker@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.0.tgz#cdbd2c388c6d7ce8c6d72443038975063e6c6d02" - integrity sha512-hauH8VhpC8cxv1wCR6bVBcNqZepftdBXxEVID7TSAqgNyWjm/CrJqWLI+A0nnkG3IHoIm9D22iF47BamuYHptw== +"@abp/bootstrap-datepicker@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.1.tgz#aad891263edff66f816e003ba4fa7f8acfe8e0b6" + integrity sha512-S0oaVZmXsDcOJLAyoGY0TvP/7bZx0GHIbU9BIhIL2Wl74HYaokjkTr6/IleIek9YeiF2vm9FkrUP1dKH/4f7Gg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.0.tgz#04174f18055f76f936e6fb73e5ff71ffa08a8528" - integrity sha512-Tmr0yoSWg7XHl02X5wv04CvYcL8KCpX8u6YGJj31jRZxUTeCvs5ETXlepOWcdxPQqi/4olXv5B9GEz5S9l5nZA== +"@abp/bootstrap@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.1.tgz#3e41bdf9b3e9f8c497b9fafe22a4851d0401b31b" + integrity sha512-GoSaNWvswRHVoUrq7xClFQYtwqIlyS/vp/TdY+j5FFZP7ud89+ZGpdNqYqq5l9/6aaYa7v4b9mNTZ/1JRzAOYg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/clipboard@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.0.0.tgz#4b01bead2e404c38a3ae9955dac5522d3c30c78b" - integrity sha512-39CZuF6lxUx1fluclzMl1uG0qIUX82S2wNbyJu2WGfuMMaaIgzSp9du/bB89Ik6rR5BFUU/3p8uvzOgy4sc2sQ== +"@abp/clipboard@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.0.1.tgz#aacbd02b6ce991ca20550ad7afc40e0cea247b5e" + integrity sha512-Q7Fe167pBJ/9Vp5RyVc/JejaIzNCdTgXcnZLNC7AEtaeBVCmLwsdnCYP3i32sdvX1AIgt3exhAAsHBt0deij/g== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" clipboard "^2.0.6" -"@abp/core@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.0.tgz#65e76c697e62162717e0edabf7edacc4228e682a" - integrity sha512-xcTTBFjLFZ9Trv2x9Y/c3XKezIx+x3MTXUD98QJPf1aR7T43TE/tLHRxdRfW3R8ka0O1wmlYshpkaw5pYNsj5w== +"@abp/core@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.1.tgz#1df32bc058f45571605670ca81c226a1bd87400c" + integrity sha512-8UT5lwqV/luVG/SxePSTD2FRbZXwXv3cZJKjw+gpBjhD0slWrh51XEOHsM8ciTuhcvV/tsqVU9nXckDMdO58fw== dependencies: - "@abp/utils" "^4.0.0" + "@abp/utils" "^4.0.1" -"@abp/datatables.net-bs4@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.0.tgz#fe737e054f6ba35e787a1cda185af2788ef86d39" - integrity sha512-mz7xZdzX1nlFyX7vNzB5w3RkqZ0IHrPgsXGOB7OCTKMRshDFVH2O51Oy4qoLDOXoTVeahHtR9v8thEWFR1SnZg== +"@abp/datatables.net-bs4@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.1.tgz#7538baad0eff24eca7f4246d020852f83139f645" + integrity sha512-S52jNPF4if68V+P/33NrtGPJXf6xrqgyZzz9b7qBR7HuUm3Nsn7bAslh3JNduNec/sFuE4Utl/xsFHZNjBWEog== dependencies: - "@abp/datatables.net" "~4.0.0" + "@abp/datatables.net" "~4.0.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.0.tgz#88ae5f1a6068fba55927e59f113686508e9553cb" - integrity sha512-JYTfMA1zlBNGiQHAiZiTj5ka6B6vq5k2jqsoLHup4pD9jpKwKRBGtltVsWoEnetd9eEbp4SaV/FCuh3RzmV6Pw== +"@abp/datatables.net@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.1.tgz#eb89716a37351c41b5bccfc2db88fc7ceb991a26" + integrity sha512-APFLui0w8MqsBWqP/K0QkT5cBq5SsWiqMaIGTXQKinMVLV597sUszrlhe1ISU2PqeD7iX6pCZNNOTI1NEUn9/Q== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" datatables.net "^1.10.21" -"@abp/docs@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-4.0.0.tgz#40d2f5f6ba28427a35ef5f1c6eec6953d4af5789" - integrity sha512-QXFiiLaf11AIf6uEGSSD2SzQIn11s3GeXQ0eEbeKMi/exC60Vbl1hg7mYHooeBKRjPCwK24gK7HHppSFHlHRsw== +"@abp/docs@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-4.0.1.tgz#64d95b5d38b0eef4ba1e6d886ceaf0a8a3fdd9c4" + integrity sha512-Y9/XROwYj6LdSGjIQhweRxe5XFEMskUmbQr2FTZeN3KFrGqJxVaQHXJn7b+iRdhYQvSx3ztpqPAMyB9KFilg2A== dependencies: - "@abp/anchor-js" "~4.0.0" - "@abp/clipboard" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/popper.js" "~4.0.0" - "@abp/prismjs" "~4.0.0" + "@abp/anchor-js" "~4.0.1" + "@abp/clipboard" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/popper.js" "~4.0.1" + "@abp/prismjs" "~4.0.1" -"@abp/font-awesome@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.0.tgz#6e1e4bd1175a0b8d3b095e215c07e66ad0e42e19" - integrity sha512-kHfZ45UMDWSRk1gTV/BwVfSoXksJ9UlnD3SelTGeAkvbDqtDllqlp9y6c3qQcmZUE348Xl4hDTkU8upZwswCFQ== +"@abp/font-awesome@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.1.tgz#8a9d83b2c2adfcd5abcbd9c31c315460d44a321e" + integrity sha512-+6+m/DKMnfkeQiWUsMlB6Da8u6yREyN2oQYGYhSRAK8419ym8RHHrqKJv2AClI4iLq2ppHZj8WF84+SeoCekRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.0.tgz#3afb41eb16d62e32c31a29c6a866f634a5a20cd8" - integrity sha512-cQq8PgzHfpK9/LxmjlnMsDn85wWvEOqjyLaepHFpTTt0341auSgXNwhp7rk71AUHD1lP3c9ALctmqu+gYmh9ag== +"@abp/jquery-form@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.1.tgz#6dc1922b2800dd635f20881a82e08104a1dd1bb5" + integrity sha512-JMBZYu/MI/GjaLTBOMB5iv8cagnLpReDULNC3r6tLNNqB1R8f3Cg1T7nF4YCuU9SYMqis1P/AuE4oEh+4rQdAQ== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#c3674d2b01b3c524de4c3fac1c6ae3657857ee7b" - integrity sha512-OGibIdw0ogjp6VQIebHM7OtMT36pjLKRrOHyCVpTmQ7NzDODV5ptG83vOnt5nFG0y9XFrOt8cnHrrd+K1Bpo/Q== +"@abp/jquery-validation-unobtrusive@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.1.tgz#4142ca31c0830fe24a1467e8cf13b55ba9d7c1dd" + integrity sha512-rdSRTcdKCHmarbrVgmPYdTiJ0G/aFKd+dr0krO7fALPTuQKChbDnHOO4/JvQSc+cd9faxa8c6ZWvlHdsof23tQ== dependencies: - "@abp/jquery-validation" "~4.0.0" + "@abp/jquery-validation" "~4.0.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.0.tgz#0a101937f89ff398317142b5271fa9a1de6571c2" - integrity sha512-4nzvhAktEINpQ2H+Hy7TOxxojTmTEm5dBTbHs1vbCWUuF0OTpouZWbMZDESdP0ZbjXcQ+vhwuM4e/pm/PeaHyQ== +"@abp/jquery-validation@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.1.tgz#74e7d795468c6986f2db15662631fcd4f67c679e" + integrity sha512-FX26aQCsMBdVWAJb7S37Lt7KoHAEHoYguh/qfZIARCpOYOOWvxfDz1wTrmADUkqdillqEiCeD/Imj8bYH9Faaw== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-validation "^1.19.2" -"@abp/jquery@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.0.tgz#00d24678b573bcc2fb14d8337ccdbf697b59d43b" - integrity sha512-gXLK97IvAZriNlG8e0qJcd7MvnpshJQURb4lg8VYibD7Fs/OBeHSAWM2Adgi3H9DnQL8XEUlWf487FSz4RC/Yg== +"@abp/jquery@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.1.tgz#aa554accb16600fd586c3a4f088040cd26d0bde8" + integrity sha512-MtiRKOLyjEWux+whPP3+zwPbpj8or756JtgjnwOTDB9tp9HLCYUaskt+oalYPvob24nDZcNu2RnMALYdCVhZAQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" jquery "~3.5.1" -"@abp/lodash@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.0.tgz#fe76d09517f6b1adf18edde94a31e13b003329dc" - integrity sha512-uitn5uYlb9xShRtV4AFOgp3lu2kADGMD4+a4fy5r4umlPM2uuMo0wMhzyYdBIG64JC5oNaqAzOwZyhhnn+HGJg== +"@abp/lodash@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.1.tgz#ec261ccaab8a70d5b32a8a7c22387e48936d38d4" + integrity sha512-Dav1QKbBeGR4VVbHHe1s3OEzN7wnb9K/vwzHrWmtO8D1Q5Z3433xjNmgL5VQ9gfxXqooSfEO4gAovZklMDHDew== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" lodash "^4.17.15" -"@abp/luxon@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.0.tgz#d9357e4fb422b6e18ebe897a86a4c4bc6fbe6858" - integrity sha512-tiE6NiSa4El88SVotxfmmpceINLz8MruaO/e/U3QjJEHjRoqlv0UBrM/x5Xz92c7ZIvL0Y4QvWNISeDg6/oqIQ== +"@abp/luxon@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.1.tgz#a540750b1605dbac856ce9c2e776c2fecf6392f9" + integrity sha512-eRumVB7UIf2XH6OZVUTvcKw0A/OSAfYV59fM+Wc4dAkNcmsNZI0gD1o0AigSGNCxTV6v+W2bFrsuooSqK99Y0Q== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.0.tgz#972acf26f5eaa4bf9b8991cbe7c19fd0005d94e2" - integrity sha512-SpUo1CfppKzkE6Rb880pgB7oQ83Mkjsi0o6eE4r4gkF5hfzkuCXOmNjTYKfQIkE4n3G9QQd+8AAN/4xj4DiDrA== +"@abp/malihu-custom-scrollbar-plugin@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.1.tgz#0a556423a67b6c949e32ffcacd72256dea6c31ee" + integrity sha512-YTwYpnQ1ZrON70gvJcnNZRwB3Ze4olGcXxiPvmRgSHbGJkSnHYJiP6PvsN1F3HDFukAJ/iUu+WwEe8OBwlyLXA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/popper.js@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-4.0.0.tgz#8fcb6aba4ad444668f536930cacbeb651af529ce" - integrity sha512-jzMWmN6DEcVE+veKmBR/l8a5/yKlcVKgtuSIwHTDnVI1UFW1MQWtyBHV6vXzH+7TqvlI3EevDg+UlIxTfpjNxg== +"@abp/popper.js@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-4.0.1.tgz#234f166fd1e8cbd3b2f60a6c5068adc04e4d3944" + integrity sha512-pHqc9yZgZzoaN4yNT/lXfESTW2RzfFiZQoCvJ4LbXi1sHrzNh3UQ3qEXb7WBUm4pVMcyquu7nW0ZPBlgeOvdgQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" popper.js "^1.16.0" -"@abp/prismjs@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.0.0.tgz#7b98c233ac1f0025c14b27c1ba62910bd9022442" - integrity sha512-Eh63EUe2wnl8P1iyPo9Glt9BD6yFdrAjIbvBeFheJnSWgvij3mayOtCAq9P2ksKWo1Gq3hv1lm/p9vdYFRHoKw== +"@abp/prismjs@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.0.1.tgz#8e614878a9d1d63504fe7ba6b7d44093947d862b" + integrity sha512-qZP4TlQDiXaAIrDmpzQJeL/9mtTCxQCIbELDnBHMZFDrYNENOKZeBmvD9WAhgzL7FJcnPtOomJgZ5x2rqpBW/w== dependencies: - "@abp/clipboard" "~4.0.0" - "@abp/core" "~4.0.0" + "@abp/clipboard" "~4.0.1" + "@abp/core" "~4.0.1" prismjs "^1.20.0" -"@abp/select2@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.0.tgz#8fdf4c5e18f4093ee4e073dab950cf7aa9b2a540" - integrity sha512-XeXahcDMczdkZdP07yhQriIvbi1N5meeSGTnFyZX+bNTGzUOarPcuNYZ6Mcl3351HcyESHzuJbKbsk3RB1kGeg== +"@abp/select2@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.1.tgz#8983e7b5c3afb862f08b2730b70e59d726e9b5d5" + integrity sha512-WdzY2hvsS/4vz/VXpxq2muSzzE8ggchiIrICy/WKchJxL9L08DM796t6aE6rEl9wucY8XEzzWrPOVqAjJmnXFA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" select2 "^4.0.13" -"@abp/sweetalert@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.0.tgz#0d93e92e95c6855aef7e19532a7513a078ece216" - integrity sha512-y3XtZqnUVZuQohpRO1ImyBZXhtrm4H+typIL/9VgcnlvQjBTyIaiwDmU8j07Bb2rKJKe0prVkkVARO7OnjOS5A== +"@abp/sweetalert@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.1.tgz#0088610915ad6db0a140b77832a37c10066eb4ee" + integrity sha512-t4/44oQCMngSjVqmeRWXwrXa/pRKc3CEpyyTiGIXki4dWJ21j0ePCw2l3rvOJWnpoCznhxa/UGxLfRfK1NEzRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" sweetalert "^2.1.2" -"@abp/timeago@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.0.tgz#509cd8a84cd94c2644824b0c3af10c8fff6de2dc" - integrity sha512-90jzLYJusYTPwMbak1+XkXE85OPOXPpysRbL28KQwl7WLNBm8wx6IEoVZOHvOrpYscYdyeWhZCgILSJ8DR3a2Q== +"@abp/timeago@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.1.tgz#8c161645534eb1f62fe4607450acf7345729e711" + integrity sha512-PsPobV79U2qzVY+WBsmJM1ohSF4jqcLnL4/7qyJvxlb1WwbCl1F5D4cpiJP4zsM4clPW4mbSsiauMNp+HTNKEA== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" timeago "^1.6.7" -"@abp/toastr@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.0.tgz#06e28665cb7f6eefee3f69c985dd2b3f86cd7f1d" - integrity sha512-YL1fahVpDszhwpnRTN87GCP523Mkaw42ApT2A/hZuBdwRzP/u5GwRfng0i/uhdYXCMkTKuHmaHnRyqhGiv7nfQ== +"@abp/toastr@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.1.tgz#ecb6f6193b7edc3150d0614ab9457472baf1cce3" + integrity sha512-bTTz0O8zj7fMhdoummP2Ed5Z8SJTmR6svzNchBXNDrnRAcDQvTihPTcg0UpH8BEDFczbLowq09CG2A/RMSJoug== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" toastr "^2.1.4" -"@abp/utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" - integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== +"@abp/utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.1.tgz#9a4cb420266c49d8084776bd31c86681d4d4d125" + integrity sha512-nI2ZyaNpvohr75p8jeMPWze+hX+mV47EHI+Zloa4GgGmJqrULdG71kYh45R+jGmMTbQL6huaXGnpz4gNF9TGyQ== dependencies: just-compare "^1.3.0" diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js index a65251a20e..33f0c96624 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js @@ -105,41 +105,41 @@ $('#TwitterShareLink').attr( 'href', 'https://twitter.com/intent/tweet?text=' + - encodeURI( - pageHeader + - ' | ' + - projectName + - ' | ' + - window.location.href - ) + encodeURI( + pageHeader + + ' | ' + + projectName + + ' | ' + + window.location.href + ) ); $('#LinkedinShareLink').attr( 'href', 'https://www.linkedin.com/shareArticle?' + - 'url=' + - encodeURI(window.location.href) + - '&' + - 'mini=true&' + - 'summary=' + - encodeURI(projectName) + - '&' + - 'title=' + - encodeURI(pageHeader) + - '&' + - 'source=' + - encodeURI($('#GoToMainWebSite').attr('href')) + 'url=' + + encodeURI(window.location.href) + + '&' + + 'mini=true&' + + 'summary=' + + encodeURI(projectName) + + '&' + + 'title=' + + encodeURI(pageHeader) + + '&' + + 'source=' + + encodeURI($('#GoToMainWebSite').attr('href')) ); $('#EmailShareLink').attr( 'href', 'mailto:?' + - 'body=' + - encodeURI('I want you to look at ' + window.location.href) + - '&' + - 'subject=' + - encodeURI(pageHeader + ' | ' + projectName) + - '&' + 'body=' + + encodeURI('I want you to look at ' + window.location.href) + + '&' + + 'subject=' + + encodeURI(pageHeader + ' | ' + projectName) + + '&' ); }; @@ -228,12 +228,27 @@ ); }; + var initCookies = function () { + var cookie = abp.utils.getCookieValue('AbpDocsPreferences'); + + if (!cookie || cookie == null || cookie === null) { + setCookies(); + } else { + var uri = window.location.href.toString(); + + if (uri.indexOf('?') > 0) { + setCookies(); + } + } + }; + $('.doc-section-combobox').change(function () { setCookies(); clearQueryString(); location.reload(); }); + initCookies(); setQueryString(); }; diff --git a/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj b/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj index 8561d8b72d..90d738f09e 100644 --- a/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj +++ b/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj @@ -23,7 +23,7 @@ - + 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 ea07a96b46..ada5853f6a 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 @@ -16,26 +16,26 @@ namespace Volo.Abp.FeatureManagement.Blazor.Components public partial class FeatureManagementModal { [Inject] protected IFeatureAppService FeatureAppService { get; set; } - + [Inject] protected IUiMessageService UiMessageService { get; set; } - + [Inject] protected IStringLocalizerFactory HtmlLocalizerFactory { get; set; } - + [Inject] protected IOptions LocalizationOptions { get; set; } protected Modal Modal; - + protected string ProviderName; protected string ProviderKey; protected string SelectedTabName; - + protected List Groups { get; set; } protected Dictionary ToggleValues; protected Dictionary SelectionStringValues; - + public virtual async Task OpenAsync([NotNull]string providerName, string providerKey = null) { ProviderName = providerName; @@ -43,11 +43,11 @@ namespace Volo.Abp.FeatureManagement.Blazor.Components ToggleValues = new Dictionary(); SelectionStringValues = new Dictionary(); - + Groups = (await FeatureAppService.GetAsync(ProviderName, ProviderKey)).Groups; SelectedTabName = GetNormalizedGroupName(Groups.First().Name); - + foreach (var featureGroupDto in Groups) { foreach (var featureDto in featureGroupDto.Features) @@ -66,13 +66,13 @@ namespace Volo.Abp.FeatureManagement.Blazor.Components Modal.Show(); } - + public virtual Task CloseModal() { Modal.Hide(); return Task.CompletedTask; } - + protected virtual async Task SaveAsync() { var features = new UpdateFeaturesDto @@ -80,21 +80,21 @@ namespace Volo.Abp.FeatureManagement.Blazor.Components Features = Groups.SelectMany(g => g.Features).Select(f => new UpdateFeatureDto { Name = f.Name, - Value = f.ValueType is ToggleStringValueType ? ToggleValues[f.Name].ToString() : + Value = f.ValueType is ToggleStringValueType ? ToggleValues[f.Name].ToString() : f.ValueType is SelectionStringValueType ? SelectionStringValues[f.Name] : f.Value }).ToList() }; - + await FeatureAppService.UpdateAsync(ProviderName, ProviderKey, features); - + Modal.Hide(); } - + protected virtual string GetNormalizedGroupName(string name) { return "FeatureGroup_" + name.Replace(".", "_"); } - + protected virtual bool IsDisabled(string providerName) { return providerName != ProviderName && providerName != DefaultValueFeatureValueProvider.ProviderName; @@ -102,7 +102,7 @@ namespace Volo.Abp.FeatureManagement.Blazor.Components protected virtual async Task OnFeatureValueChangedAsync(string value, FeatureDto feature) { - if (feature.ValueType.Validator.IsValid(value)) + if (feature?.ValueType?.Validator.IsValid(value) == true) { feature.Value = value; } @@ -116,11 +116,11 @@ namespace Volo.Abp.FeatureManagement.Blazor.Components { SelectionStringValues[featureName] = value; } - + protected virtual IStringLocalizer CreateStringLocalizer(string resourceName) { var resource = LocalizationOptions.Value.Resources.Values.FirstOrDefault(x => x.ResourceName == resourceName); return HtmlLocalizerFactory.Create(resource != null ? resource.ResourceType : LocalizationOptions.Value.DefaultResourceType); } } -} \ No newline at end of file +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs index 6d7c6d59c2..c59bf0589f 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs @@ -132,7 +132,7 @@ namespace Volo.Abp.FeatureManagement var feature = FeatureDefinitionManager.Get(name); - if (!feature.ValueType.Validator.IsValid(value)) + if (feature?.ValueType?.Validator.IsValid(value) == false) { throw new FeatureValueInvalidException(feature.DisplayName.Localize(StringLocalizerFactory)); } 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 5701302c16..d067ae00e2 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 @@ -62,7 +62,7 @@ - + @@ -100,7 +100,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 6ca38ce126..a08f5b9228 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 @@ -130,7 +130,7 @@ - + @@ -241,7 +241,7 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimTypeManager.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimTypeManager.cs index f7286b53d2..9978cdd88a 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimTypeManager.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimTypeManager.cs @@ -3,12 +3,11 @@ using Volo.Abp.Domain.Services; namespace Volo.Abp.Identity { - //TODO: Rename to IdentityClaimTypeManager in v2.0! - public class IdenityClaimTypeManager : DomainService + public class IdentityClaimTypeManager : DomainService { protected IIdentityClaimTypeRepository IdentityClaimTypeRepository { get; } - public IdenityClaimTypeManager(IIdentityClaimTypeRepository identityClaimTypeRepository) + public IdentityClaimTypeManager(IIdentityClaimTypeRepository identityClaimTypeRepository) { IdentityClaimTypeRepository = identityClaimTypeRepository; } diff --git a/modules/identity/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs b/modules/identity/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs index ce26e91e20..511455bab3 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs +++ b/modules/identity/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs @@ -2,9 +2,11 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars; using Volo.Abp.AutoMapper; using Volo.Abp.Identity.Localization; using Volo.Abp.Identity.Web.Navigation; +using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.ObjectExtending; using Volo.Abp.ObjectExtending.Modularity; @@ -64,6 +66,34 @@ namespace Volo.Abp.Identity.Web options.Conventions.AuthorizePage("/Identity/Roles/CreateModal", IdentityPermissions.Roles.Create); options.Conventions.AuthorizePage("/Identity/Roles/EditModal", IdentityPermissions.Roles.Update); }); + + + Configure(options => + { + options.Configure( + toolbar => + { + toolbar.AddButton( + LocalizableString.Create("NewUser"), + icon: "plus", + name: "CreateUser", + requiredPolicyName: IdentityPermissions.Users.Create + ); + } + ); + + options.Configure( + toolbar => + { + toolbar.AddButton( + LocalizableString.Create("NewRole"), + icon: "plus", + name: "CreateRole", + requiredPolicyName: IdentityPermissions.Roles.Create + ); + } + ); + }); } public override void PostConfigureServices(ServiceConfigurationContext context) diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/CreateModal.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/CreateModal.cshtml index 902b984ede..02a24b4084 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/CreateModal.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/CreateModal.cshtml @@ -1,11 +1,13 @@ @page @using Microsoft.AspNetCore.Mvc.Localization @using Microsoft.Extensions.Localization +@using Microsoft.Extensions.Logging @using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal @using Volo.Abp.Identity.Localization @using Volo.Abp.Identity.Web.Pages.Identity.Roles @using Volo.Abp.Localization @using Volo.Abp.ObjectExtending +@using Volo.Abp.Data @model CreateModalModel @inject IHtmlLocalizer L @inject IStringLocalizerFactory StringLocalizerFactory @@ -31,8 +33,8 @@ + value="@propertyInfo.GetInputValueOrNull(Model.Role.GetProperty(propertyInfo.Name))" /> } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/EditModal.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/EditModal.cshtml index 0e60b15733..a9a305cce2 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/EditModal.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/EditModal.cshtml @@ -6,6 +6,7 @@ @using Volo.Abp.Identity.Web.Pages.Identity.Roles @using Volo.Abp.Localization @using Volo.Abp.ObjectExtending +@using Volo.Abp.Data @model EditModalModel @inject IHtmlLocalizer L @inject IStringLocalizerFactory StringLocalizerFactory @@ -42,8 +43,8 @@ + value="@propertyInfo.GetInputValueOrNull(Model.Role.GetProperty(propertyInfo.Name))" /> } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/Index.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/Index.cshtml index 734fc40fe5..30e42694e6 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/Index.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/Index.cshtml @@ -2,6 +2,7 @@ @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Mvc.Localization @using Volo.Abp.AspNetCore.Mvc.UI.Layout +@using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Pages.Shared.Components.AbpPageToolbar @using Volo.Abp.Identity @using Volo.Abp.Identity.Localization @using Volo.Abp.Identity.Web.Navigation @@ -33,10 +34,7 @@ @L["Roles"] - @if (await Authorization.IsGrantedAsync(IdentityPermissions.Roles.Create)) - { - - } + @await Component.InvokeAsync(typeof(AbpPageToolbarViewComponent), new { pageName = typeof(IndexModel).FullName }) diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml index 0f4eab328b..df17154d56 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml @@ -6,9 +6,11 @@ @using Volo.Abp.Identity.Web.Pages.Identity.Users @using Volo.Abp.Localization @using Volo.Abp.ObjectExtending +@using Volo.Abp.Data @model CreateModalModel @inject IHtmlLocalizer L @inject IStringLocalizerFactory StringLocalizerFactory + @{ Layout = null; } @@ -36,8 +38,8 @@ + value="@propertyInfo.GetInputValueOrNull(Model.UserInfo.GetProperty(propertyInfo.Name))" /> } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml index 3a0bda16d2..cea3034cb0 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml @@ -6,6 +6,7 @@ @using Volo.Abp.Identity.Web.Pages.Identity.Users @using Volo.Abp.Localization @using Volo.Abp.ObjectExtending +@using Volo.Abp.Data @model EditModalModel @inject IHtmlLocalizer L @inject IStringLocalizerFactory StringLocalizerFactory @@ -17,8 +18,7 @@ - - @* TODO: Can we use dynamic form? *@ + @@ -38,8 +38,8 @@ + value="@propertyInfo.GetInputValueOrNull(Model.UserInfo.GetProperty(propertyInfo.Name))" /> } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml index ee9192d58f..5904cab2fa 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml @@ -2,6 +2,7 @@ @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Mvc.Localization @using Volo.Abp.AspNetCore.Mvc.UI.Layout +@using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Pages.Shared.Components.AbpPageToolbar @using Volo.Abp.Identity @using Volo.Abp.Identity.Localization @using Volo.Abp.Identity.Web.Navigation @@ -34,10 +35,7 @@ @L["Users"] - @if (await Authorization.IsGrantedAsync(IdentityPermissions.Users.Create)) - { - - } + @await Component.InvokeAsync(typeof(AbpPageToolbarViewComponent), new { pageName = typeof(IndexModel).FullName }) diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityClaimTypeManager_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityClaimTypeManager_Tests.cs index 1ef603e6b3..23d5ea0d02 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityClaimTypeManager_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityClaimTypeManager_Tests.cs @@ -5,16 +5,16 @@ using Xunit; namespace Volo.Abp.Identity { - public class IdenityClaimTypeManager_Tests : AbpIdentityDomainTestBase + public class IdentityClaimTypeManager_Tests : AbpIdentityDomainTestBase { private readonly IIdentityClaimTypeRepository _identityClaimTypeRepository; - private readonly IdenityClaimTypeManager _claimTypeManager; + private readonly IdentityClaimTypeManager _claimTypeManager; private readonly IdentityTestData _testData; - public IdenityClaimTypeManager_Tests() + public IdentityClaimTypeManager_Tests() { _identityClaimTypeRepository = GetRequiredService(); - _claimTypeManager = GetRequiredService(); + _claimTypeManager = GetRequiredService(); _testData = GetRequiredService(); } diff --git a/modules/identityserver/common.props b/modules/identityserver/common.props deleted file mode 100644 index 7f5a705307..0000000000 --- a/modules/identityserver/common.props +++ /dev/null @@ -1,16 +0,0 @@ - - - latest - 0.3.0 - $(NoWarn);CS1591;CS0436 - http://www.aspnetboilerplate.com/images/abp_nupkg.png - http://abp.io - git - https://github.com/volosoft/abp/ - - - - - - - \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs index 6f1e4c1a4e..45625a2852 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs @@ -65,14 +65,14 @@ namespace Volo.Abp.PermissionManagement.Blazor.Components } } - public async Task OpenAsync(string providerName, string providerKey) + public async Task OpenAsync(string providerName, string providerKey, string entityDisplayName = null) { _providerName = providerName; _providerKey = providerKey; var result = await PermissionAppService.GetAsync(_providerName, _providerKey); - _entityDisplayName = result.EntityDisplayName; + _entityDisplayName = entityDisplayName ?? result.EntityDisplayName; _groups = result.Groups; _grantedPermissionCount = 0; 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 722458e82c..f1ced268ca 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 @@ -114,7 +114,7 @@ - + @@ -148,7 +148,7 @@ - + @@ -187,7 +187,7 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs index e993ea2c63..e03a7ec2a2 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs @@ -2,8 +2,10 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars; using Volo.Abp.AutoMapper; using Volo.Abp.FeatureManagement; +using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.ObjectExtending; using Volo.Abp.ObjectExtending.Modularity; @@ -61,6 +63,28 @@ namespace Volo.Abp.TenantManagement.Web options.Conventions.AuthorizePage("/TenantManagement/Tenants/EditModal", TenantManagementPermissions.Tenants.Update); options.Conventions.AuthorizePage("/TenantManagement/Tenants/ConnectionStrings", TenantManagementPermissions.Tenants.ManageConnectionStrings); }); + + Configure(options => + { + options.Configure( + toolbar => + { + toolbar.AddButton( + LocalizableString.Create("ManageHostFeatures"), + icon: "cog", + name: "ManageHostFeatures", + requiredPolicyName: FeatureManagementPermissions.ManageHostFeatures + ); + + toolbar.AddButton( + LocalizableString.Create("NewTenant"), + icon: "plus", + name: "CreateTenant", + requiredPolicyName: TenantManagementPermissions.Tenants.Create + ); + } + ); + }); } public override void PostConfigureServices(ServiceConfigurationContext context) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml index 99bd1f5cc4..de604da44d 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml @@ -6,6 +6,7 @@ @using Volo.Abp.ObjectExtending @using Volo.Abp.TenantManagement.Localization @using Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants +@using Volo.Abp.Data @model CreateModalModel @inject IHtmlLocalizer L @inject IStringLocalizerFactory StringLocalizerFactory @@ -31,8 +32,8 @@ + value="@propertyInfo.GetInputValueOrNull(Model.Tenant.GetProperty(propertyInfo.Name))" /> } } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml index 06103d6d9f..8c5eb3b7e0 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml @@ -6,6 +6,7 @@ @using Volo.Abp.ObjectExtending @using Volo.Abp.TenantManagement.Localization @using Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants +@using Volo.Abp.Data @model EditModalModel @inject IHtmlLocalizer L @inject IStringLocalizerFactory StringLocalizerFactory @@ -27,8 +28,8 @@ + value="@propertyInfo.GetInputValueOrNull(Model.Tenant.GetProperty(propertyInfo.Name))" /> } } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml index bb972b02d8..67fd507bcc 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml @@ -2,6 +2,7 @@ @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Mvc.Localization @using Volo.Abp.AspNetCore.Mvc.UI.Layout +@using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Pages.Shared.Components.AbpPageToolbar @using Volo.Abp.FeatureManagement @using Volo.Abp.TenantManagement @using Volo.Abp.TenantManagement.Localization @@ -30,14 +31,7 @@ @L["Tenants"] - @if (await Authorization.IsGrantedAsync(FeatureManagementPermissions.ManageHostFeatures)) - { - - } - @if (await Authorization.IsGrantedAsync(TenantManagementPermissions.Tenants.Create)) - { - - } + @await Component.InvokeAsync(typeof(AbpPageToolbarViewComponent), new { pageName = typeof(IndexModel).FullName }) diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/Volo.Abp.VirtualFileExplorer.DemoApp.csproj b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/Volo.Abp.VirtualFileExplorer.DemoApp.csproj index 6cfb1efc40..b1c78debfd 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/Volo.Abp.VirtualFileExplorer.DemoApp.csproj +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/Volo.Abp.VirtualFileExplorer.DemoApp.csproj @@ -6,7 +6,7 @@ - + diff --git a/npm/lerna.json b/npm/lerna.json index b34699045e..21623a5bc3 100644 --- a/npm/lerna.json +++ b/npm/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.0.0", + "version": "4.0.1", "packages": [ "packs/*" ], diff --git a/npm/ng-packs/apps/dev-app/src/app/home/home.component.html b/npm/ng-packs/apps/dev-app/src/app/home/home.component.html index ae3196c0c6..067a74c50f 100644 --- a/npm/ng-packs/apps/dev-app/src/app/home/home.component.html +++ b/npm/ng-packs/apps/dev-app/src/app/home/home.component.html @@ -1,14 +1,333 @@ -
-
-

{{ '::Welcome' | abpLocalization }}

-
-
-

{{ '::LongWelcomeMessage' | abpLocalization }}

-
-
-
- abp.io - {{ 'AbpIdentity::Login' | abpLocalization }} +
+
+ +

{{ '::Welcome' | abpLocalization }}

+ +

{{ '::LongWelcomeMessage' | abpLocalization }}

+ + {{ 'AbpAccount::Login' | abpLocalization }} +
+
+

Let's improve your application!

+

Here are some links to help you get started:

+
+
+
+
+ + + + + +
+
+ + + +

+ + + + +

+
+ + + + +
+
+
+ +
+

Meet the ABP Commercial

+

A Complete Web Application Platform Built on the ABP Framework

+
+ +
+
+

+ ABP Commercial is a platform based + on the open source ABP framework. It provides pre-built application modules, rapid + application development tooling, professional UI themes, premium support and more. +

+ +
+ + + + + + + + + + + +
+
+
+
+ + +
+
+
+ {{ context.title }} +
+

+ + {{ link.label }} +
+
+
+ + +
+
+
+ + + Details +
+
+
+
+ + diff --git a/npm/ng-packs/lerna.version.json b/npm/ng-packs/lerna.version.json index d9f789ea19..8d9b4e6053 100644 --- a/npm/ng-packs/lerna.version.json +++ b/npm/ng-packs/lerna.version.json @@ -1,5 +1,5 @@ { - "version": "4.0.0", + "version": "4.0.1", "packages": [ "packages/*" ], diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 351156f910..f221ca5b3f 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -26,16 +26,16 @@ "postinstall": "npm run compile:ivy" }, "devDependencies": { - "@abp/ng.core": "~4.0.0", - "@abp/ng.feature-management": "~4.0.0", - "@abp/ng.identity": "~4.0.0", - "@abp/ng.permission-management": "~4.0.0", - "@abp/ng.schematics": "~4.0.0", - "@abp/ng.setting-management": "~4.0.0", - "@abp/ng.tenant-management": "~4.0.0", - "@abp/ng.theme.basic": "~4.0.0", - "@abp/ng.theme.shared": "~4.0.0", - "@abp/utils": "^4.0.0", + "@abp/ng.core": "~4.0.1", + "@abp/ng.feature-management": "~4.0.1", + "@abp/ng.identity": "~4.0.1", + "@abp/ng.permission-management": "~4.0.1", + "@abp/ng.schematics": "~4.0.1", + "@abp/ng.setting-management": "~4.0.1", + "@abp/ng.tenant-management": "~4.0.1", + "@abp/ng.theme.basic": "~4.0.1", + "@abp/ng.theme.shared": "~4.0.1", + "@abp/utils": "^4.0.1", "@angular-builders/jest": "^10.0.0", "@angular-devkit/build-angular": "~0.1100.0", "@angular-devkit/build-ng-packagr": "~0.1001.2", diff --git a/npm/ng-packs/packages/components/package.json b/npm/ng-packs/packages/components/package.json index 3d4d25dd56..6f8f7f9826 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": "4.0.0", + "version": "4.0.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "peerDependencies": { - "@abp/ng.core": ">=4.0.0", + "@abp/ng.core": ">=4.0.1", "@ng-bootstrap/ng-bootstrap": ">=6.0.0" }, "dependencies": { diff --git a/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.html b/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.html index b98aa7e4ff..4f4aaf472d 100644 --- a/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.html +++ b/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.html @@ -7,10 +7,12 @@ [nzData]="nodes" [nzTreeTemplate]="treeTemplate" [nzExpandedKeys]="expandedKeys" - [nzExpandedIcon]="expandedIconTemplate?.template" + [nzExpandedIcon]="expandedIconTemplate?.template || defaultIconTemplate" (nzExpandChange)="onExpandedKeysChange($event)" (nzCheckBoxChange)="onCheckboxChange($event)" (nzOnDrop)="onDrop($event)" + [nzNoAnimation]="noAnimation" + (nzContextMenu)="dropdowns[$event.node?.key]?.toggle()" >
- + - - {{ node.title }} - + +
+ +
-
- -
- +
+ +
+ +
-
+ + + + {{ node.title }} +
+ + + + + + + + + + + + + + + + diff --git a/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.scss b/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.scss index 113996455f..07ca018f0d 100644 --- a/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.scss +++ b/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.scss @@ -27,18 +27,6 @@ cursor: pointer; padding-left: 8px; border: 1px solid transparent; - - &:hover { - background-color: transparent; - border: 1px solid var(--primary); - color: var(--text-color); - } - - &.selected { - background-color: transparent; - color: var(--white); - background-color: var(--primary); - } } .ellipsis { diff --git a/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.ts b/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.ts index 7ba6280c0b..3f6179a5b2 100644 --- a/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.ts +++ b/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.ts @@ -11,6 +11,7 @@ import { NzFormatEmitEvent, NzFormatBeforeDropEvent } from 'ng-zorro-antd/tree'; import { of } from 'rxjs'; import { TreeNodeTemplateDirective } from '../templates/tree-node-template.directive'; import { ExpandedIconTemplateDirective } from '../templates/expanded-icon-template.directive'; +import { NgbDropdown } from '@ng-bootstrap/ng-bootstrap'; export type DropEvent = NzFormatEmitEvent & { pos: number }; @@ -26,6 +27,8 @@ export type DropEvent = NzFormatEmitEvent & { pos: number }; export class TreeComponent { dropPosition: number; + dropdowns = {} as { [key: string]: NgbDropdown }; + @ContentChild('menu') menu: TemplateRef; @ContentChild(TreeNodeTemplateDirective) customNodeTemplate: TreeNodeTemplateDirective; @ContentChild(ExpandedIconTemplateDirective) expandedIconTemplate: ExpandedIconTemplateDirective; @@ -33,6 +36,7 @@ export class TreeComponent { @Output() readonly expandedKeysChange = new EventEmitter(); @Output() readonly selectedNodeChange = new EventEmitter(); @Output() readonly dropOver = new EventEmitter(); + @Input() noAnimation = true; @Input() draggable: boolean; @Input() checkable: boolean; @Input() checkStrictly: boolean; @@ -68,4 +72,8 @@ export class TreeComponent { this.dropOver.emit(event); } + + initDropdown(key: string, dropdown: NgbDropdown) { + this.dropdowns[key] = dropdown; + } } diff --git a/npm/ng-packs/packages/components/tree/src/lib/tree.module.ts b/npm/ng-packs/packages/components/tree/src/lib/tree.module.ts index b645a69925..2013c37588 100644 --- a/npm/ng-packs/packages/components/tree/src/lib/tree.module.ts +++ b/npm/ng-packs/packages/components/tree/src/lib/tree.module.ts @@ -1,17 +1,18 @@ -import { CommonModule } from '@angular/common'; +import { CoreModule } from '@abp/ng.core'; import { NgModule } from '@angular/core'; import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; +import { NzNoAnimationModule } from 'ng-zorro-antd/core/no-animation'; import { NzTreeModule } from 'ng-zorro-antd/tree'; import { TreeComponent } from './components/tree.component'; -import { TreeNodeTemplateDirective } from './templates/tree-node-template.directive'; import { ExpandedIconTemplateDirective } from './templates/expanded-icon-template.directive'; +import { TreeNodeTemplateDirective } from './templates/tree-node-template.directive'; const templates = [TreeNodeTemplateDirective, ExpandedIconTemplateDirective]; const exported = [...templates, TreeComponent]; @NgModule({ - imports: [CommonModule, NzTreeModule, NgbDropdownModule], + imports: [CoreModule, NzTreeModule, NgbDropdownModule, NzNoAnimationModule], exports: [...exported], declarations: [...exported], }) diff --git a/npm/ng-packs/packages/core/package.json b/npm/ng-packs/packages/core/package.json index a074c7e1b8..a39c540d57 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": "4.0.0", + "version": "4.0.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/utils": "^4.0.0", + "@abp/utils": "^4.0.1", "@angular/localize": "~10.0.10", "@ngxs/router-plugin": "^3.7.0", "@ngxs/store": "^3.7.0", diff --git a/npm/ng-packs/packages/core/src/lib/services/list.service.ts b/npm/ng-packs/packages/core/src/lib/services/list.service.ts index 1a1e7c1aeb..135b13a912 100644 --- a/npm/ng-packs/packages/core/src/lib/services/list.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/list.service.ts @@ -17,8 +17,6 @@ import { LIST_QUERY_DEBOUNCE_TIME } from '../tokens/list.token'; export class ListService implements OnDestroy { private _filter = ''; set filter(value: string) { - if (this._filter !== value) this._page = 0; - this._filter = value; this.get(); } @@ -35,6 +33,7 @@ export class ListService implements OnDes return this._maxResultCount; } + private _skipCount = 0; private _page = 0; set page(value: number) { if (value === this._page) return; @@ -81,6 +80,7 @@ export class ListService implements OnDes } get = () => { + this.resetPageWhenUnchanged(); this._query$.next(({ filter: this._filter || undefined, maxResultCount: this._maxResultCount, @@ -110,6 +110,15 @@ export class ListService implements OnDes ngOnDestroy() { this.destroy$.next(); } + + private resetPageWhenUnchanged() { + const skipCount = this._page * this._maxResultCount; + + if (skipCount === this._skipCount) { + this._page = 0; + this._skipCount = 0; + } else this._skipCount = skipCount; + } } export type QueryStreamCreatorCallback = ( diff --git a/npm/ng-packs/packages/core/src/lib/services/replaceable-components.service.ts b/npm/ng-packs/packages/core/src/lib/services/replaceable-components.service.ts index df0f9231e9..e929d489f7 100644 --- a/npm/ng-packs/packages/core/src/lib/services/replaceable-components.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/replaceable-components.service.ts @@ -39,7 +39,7 @@ export class ReplaceableComponentsService { replaceableComponents.push(replaceableComponent); } - this.store.patch(replaceableComponents); + this.store.set(replaceableComponents); if (reload) reloadRoute(this.router, this.ngZone); } diff --git a/npm/ng-packs/packages/core/src/lib/services/session-state.service.ts b/npm/ng-packs/packages/core/src/lib/services/session-state.service.ts index bdc53fa26c..1d1c1e394d 100644 --- a/npm/ng-packs/packages/core/src/lib/services/session-state.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/session-state.service.ts @@ -30,7 +30,7 @@ export class SessionStateService { private init() { const session = localStorage.getItem('abpSession'); if (session) { - this.store.patch(JSON.parse(session)); + this.store.set(JSON.parse(session)); } this.store.sliceUpdate(state => state).subscribe(this.updateLocalStorage); @@ -81,7 +81,7 @@ export class SessionStateService { setTenant(tenant: CurrentTenantDto) { if (compare(tenant, this.store.state.tenant)) return; - this.store.patch({ tenant }); + this.store.set({ ...this.store.state, tenant }); } setLanguage(language: string) { diff --git a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts index 4291219db8..d37200c9c8 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts @@ -38,8 +38,6 @@ export function getInitialData(injector: Injector) { tap(() => checkAccessToken(injector)), tap(() => { const currentTenant = configState.getOne('currentTenant') as CurrentTenantDto; - if (!currentTenant?.id) return; - injector.get(SessionStateService).setTenant(currentTenant); }), ) diff --git a/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts index fbf707c284..87bc3f81fd 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts @@ -36,6 +36,6 @@ export class InternalStore { } reset() { - this.patch(this.initialState); + this.set(this.initialState); } } diff --git a/npm/ng-packs/packages/core/src/lib/utils/string-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/string-utils.ts index 7404dceab7..b6c4cce653 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/string-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/string-utils.ts @@ -1,12 +1,12 @@ export function createTokenParser(format: string) { - return (string: string) => { + return (str: string) => { const tokens: string[] = []; const regex = format.replace(/\./g, '\\.').replace(/\{\s?([0-9a-zA-Z]+)\s?\}/g, (_, token) => { tokens.push(token); return '(.+)'; }); - const matches = (string.match(regex) || []).slice(1); + const matches = (str.match(regex) || []).slice(1); return matches.reduce((acc, v, i) => { const key = tokens[i]; diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json index b29eba1b33..d0142b227b 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": "4.0.0", + "version": "4.0.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~4.0.0", + "@abp/ng.theme.shared": "~4.0.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 7c4a9e03e9..165aaa4833 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": "4.0.0", + "version": "4.0.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.permission-management": "~4.0.0", - "@abp/ng.theme.shared": "~4.0.0", + "@abp/ng.permission-management": "~4.0.1", + "@abp/ng.theme.shared": "~4.0.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/identity/src/lib/actions/index.ts b/npm/ng-packs/packages/identity/src/lib/actions/index.ts new file mode 100644 index 0000000000..f2c40cc4c1 --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/actions/index.ts @@ -0,0 +1 @@ +export * from './identity.actions'; diff --git a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html index 1a49d9cbd6..fd8925df56 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html +++ b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html @@ -5,77 +5,17 @@
{{ 'AbpIdentity::Roles' | abpLocalization }}
- +
- - - -
- -
- - - - - -
-
-
-
- - - {{ row.name }} - {{ - 'AbpIdentity::DisplayName:IsDefault' | abpLocalization - }} - {{ - 'AbpIdentity::DisplayName:IsPublic' | abpLocalization - }} - - -
+
@@ -85,36 +25,8 @@ -
-
- * - -
- -
- - -
- -
- - -
+ +
@@ -122,7 +34,7 @@ - {{ + {{ 'AbpIdentity::Save' | abpLocalization }} diff --git a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts index 8df9762b97..c1410ff148 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts +++ b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts @@ -1,8 +1,13 @@ import { ListService, PagedAndSortedResultRequestDto } from '@abp/ng.core'; import { ePermissionManagementComponents } from '@abp/ng.permission-management'; import { Confirmation, ConfirmationService } from '@abp/ng.theme.shared'; -import { Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; +import { + EXTENSIONS_IDENTIFIER, + FormPropData, + generateFormFromProps, +} from '@abp/ng.theme.shared/extensions'; +import { Component, ElementRef, Injector, OnInit, ViewChild } from '@angular/core'; +import { FormGroup } from '@angular/forms'; import { Select, Store } from '@ngxs/store'; import { Observable } from 'rxjs'; import { finalize, pluck } from 'rxjs/operators'; @@ -13,13 +18,20 @@ import { GetRoles, UpdateRole, } from '../../actions/identity.actions'; +import { eIdentityComponents } from '../../enums/components'; import { IdentityRoleDto } from '../../proxy/identity/models'; import { IdentityState } from '../../states/identity.state'; @Component({ selector: 'abp-roles', templateUrl: './roles.component.html', - providers: [ListService], + providers: [ + ListService, + { + provide: EXTENSIONS_IDENTIFIER, + useValue: eIdentityComponents.Roles, + }, + ], }) export class RolesComponent implements OnInit { @Select(IdentityState.getRoles) @@ -51,9 +63,9 @@ export class RolesComponent implements OnInit { constructor( public readonly list: ListService, - private confirmationService: ConfirmationService, - private fb: FormBuilder, - private store: Store, + protected confirmationService: ConfirmationService, + protected store: Store, + protected injector: Injector, ) {} ngOnInit() { @@ -61,14 +73,8 @@ export class RolesComponent implements OnInit { } buildForm() { - this.form = this.fb.group({ - name: new FormControl({ value: this.selected.name || '', disabled: this.selected.isStatic }, [ - Validators.required, - Validators.maxLength(256), - ]), - isDefault: [this.selected.isDefault || false], - isPublic: [this.selected.isPublic || false], - }); + const data = new FormPropData(this.injector, this.selected); + this.form = generateFormFromProps(data); } openModal() { diff --git a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html index 05dae5f0d9..9963224c2d 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html +++ b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html @@ -5,16 +5,7 @@
{{ 'AbpIdentity::Users' | abpLocalization }}
- +
@@ -30,170 +21,22 @@ - - - -
- -
- - - -
-
-
-
- - - -
+ - +

{{ (selected?.id ? 'AbpIdentity::Edit' : 'AbpIdentity::NewUser') | abpLocalization }}

-
- -
- - -
+ +
@@ -201,7 +44,7 @@ - {{ + {{ 'AbpIdentity::Save' | abpLocalization }} diff --git a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts index 3588ad02b0..da533ba62a 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts +++ b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts @@ -1,6 +1,11 @@ import { ListService } from '@abp/ng.core'; import { ePermissionManagementComponents } from '@abp/ng.permission-management'; -import { Confirmation, ConfirmationService, getPasswordValidators } from '@abp/ng.theme.shared'; +import { Confirmation, ConfirmationService } from '@abp/ng.theme.shared'; +import { + EXTENSIONS_IDENTIFIER, + FormPropData, + generateFormFromProps, +} from '@abp/ng.theme.shared/extensions'; import { Component, Injector, @@ -9,14 +14,7 @@ import { TrackByFunction, ViewChild, } from '@angular/core'; -import { - AbstractControl, - FormArray, - FormBuilder, - FormControl, - FormGroup, - Validators, -} from '@angular/forms'; +import { AbstractControl, FormArray, FormBuilder, FormGroup } from '@angular/forms'; import { Select, Store } from '@ngxs/store'; import { Observable } from 'rxjs'; import { finalize, pluck, switchMap, take } from 'rxjs/operators'; @@ -29,6 +27,7 @@ import { GetUsers, UpdateUser, } from '../../actions/identity.actions'; +import { eIdentityComponents } from '../../enums/components'; import { Identity } from '../../models/identity'; import { IdentityUserService } from '../../proxy/identity/identity-user.service'; import { @@ -41,7 +40,13 @@ import { IdentityState } from '../../states/identity.state'; @Component({ selector: 'abp-users', templateUrl: './users.component.html', - providers: [ListService], + providers: [ + ListService, + { + provide: EXTENSIONS_IDENTIFIER, + useValue: eIdentityComponents.Users, + }, + ], }) export class UsersComponent implements OnInit { @Select(IdentityState.getUsers) @@ -83,11 +88,11 @@ export class UsersComponent implements OnInit { constructor( public readonly list: ListService, - private injector: Injector, - private confirmationService: ConfirmationService, - private fb: FormBuilder, - private store: Store, - private identityUserService: IdentityUserService, + protected confirmationService: ConfirmationService, + protected userService: IdentityUserService, + protected fb: FormBuilder, + protected store: Store, + protected injector: Injector, ) {} ngOnInit() { @@ -95,19 +100,14 @@ export class UsersComponent implements OnInit { } buildForm() { - this.identityUserService.getAssignableRoles().subscribe(({ items }) => { + const data = new FormPropData(this.injector, this.selected); + this.form = generateFormFromProps(data); + + this.userService.getAssignableRoles().subscribe(({ items }) => { this.roles = items; - this.form = this.fb.group({ - userName: [this.selected.userName || '', [Validators.required, Validators.maxLength(256)]], - email: [ - this.selected.email || '', - [Validators.required, Validators.email, Validators.maxLength(256)], - ], - name: [this.selected.name || '', [Validators.maxLength(64)]], - surname: [this.selected.surname || '', [Validators.maxLength(64)]], - phoneNumber: [this.selected.phoneNumber || '', [Validators.maxLength(16)]], - lockoutEnabled: [this.selected.id ? this.selected.lockoutEnabled : true], - roleNames: this.fb.array( + this.form.addControl( + 'roleNames', + this.fb.array( this.roles.map(role => this.fb.group({ [role.name]: [ @@ -118,16 +118,7 @@ export class UsersComponent implements OnInit { }), ), ), - }); - - const passwordValidators = getPasswordValidators(this.injector); - - this.form.addControl('password', new FormControl('', [...passwordValidators])); - - if (!this.selected.userName) { - this.form.get('password').setValidators([...passwordValidators, Validators.required]); - this.form.get('password').updateValueAndValidity(); - } + ); }); } diff --git a/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-actions.ts b/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-actions.ts new file mode 100644 index 0000000000..2a2822c62e --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-actions.ts @@ -0,0 +1,31 @@ +import { EntityAction } from '@abp/ng.theme.shared/extensions'; +import { RolesComponent } from '../components/roles/roles.component'; +import { IdentityRoleDto } from '../proxy/identity/models'; + +export const DEFAULT_ROLES_ENTITY_ACTIONS = EntityAction.createMany([ + { + text: 'AbpIdentity::Edit', + action: data => { + const component = data.getInjected(RolesComponent); + component.edit(data.record.id); + }, + permission: 'AbpIdentity.Roles.Update', + }, + { + text: 'AbpIdentity::Permissions', + action: data => { + const component = data.getInjected(RolesComponent); + component.openPermissionsModal(data.record.name); + }, + permission: 'AbpIdentity.Roles.ManagePermissions', + }, + { + text: 'AbpIdentity::Delete', + action: data => { + const component = data.getInjected(RolesComponent); + component.delete(data.record.id, data.record.name); + }, + permission: 'AbpIdentity.Roles.Delete', + visible: data => !data.record.isStatic, + }, +]); diff --git a/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-props.ts b/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-props.ts new file mode 100644 index 0000000000..bd3a49def2 --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-props.ts @@ -0,0 +1,32 @@ +import { LocalizationService } from '@abp/ng.core'; +import { EntityProp, ePropType } from '@abp/ng.theme.shared/extensions'; +import { of } from 'rxjs'; +import { IdentityRoleDto } from '../proxy/identity/models'; + +export const DEFAULT_ROLES_ENTITY_PROPS = EntityProp.createMany([ + { + type: ePropType.String, + name: 'name', + displayName: 'AbpIdentity::RoleName', + sortable: true, + valueResolver: data => { + const l10n = data.getInjected(LocalizationService); + const t = l10n.instant.bind(l10n); + const { isDefault, isPublic, name } = data.record; + + return of( + name + + (isDefault + ? `${t( + 'AbpIdentity::DisplayName:IsDefault', + )}` + : '') + + (isPublic + ? `${t( + 'AbpIdentity::DisplayName:IsPublic', + )}` + : ''), + ); + }, + }, +]); diff --git a/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-form-props.ts b/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-form-props.ts new file mode 100644 index 0000000000..a9cf966257 --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-form-props.ts @@ -0,0 +1,30 @@ +import { ePropType, FormProp, PropData } from '@abp/ng.theme.shared/extensions'; +import { Validators } from '@angular/forms'; +import { IdentityRoleDto } from '../proxy/identity/models'; + +export const DEFAULT_ROLES_CREATE_FORM_PROPS = FormProp.createMany([ + { + type: ePropType.String, + name: 'name', + displayName: 'AbpIdentity::RoleName', + id: 'role-name', + disabled: (data: PropData) => data.record && data.record.isStatic, + validators: () => [Validators.required], + }, + { + type: ePropType.Boolean, + name: 'isDefault', + displayName: 'AbpIdentity::DisplayName:IsDefault', + id: 'role-is-default', + defaultValue: false, + }, + { + type: ePropType.Boolean, + name: 'isPublic', + displayName: 'AbpIdentity::DisplayName:IsPublic', + id: 'role-is-public', + defaultValue: false, + }, +]); + +export const DEFAULT_ROLES_EDIT_FORM_PROPS = DEFAULT_ROLES_CREATE_FORM_PROPS; diff --git a/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-toolbar-actions.ts b/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-toolbar-actions.ts new file mode 100644 index 0000000000..271aced701 --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/defaults/default-roles-toolbar-actions.ts @@ -0,0 +1,15 @@ +import { ToolbarAction } from '@abp/ng.theme.shared/extensions'; +import { RolesComponent } from '../components/roles/roles.component'; +import { IdentityRoleDto } from '../proxy/identity/models'; + +export const DEFAULT_ROLES_TOOLBAR_ACTIONS = ToolbarAction.createMany([ + { + text: 'AbpIdentity::NewRole', + action: data => { + const component = data.getInjected(RolesComponent); + component.add(); + }, + permission: 'AbpIdentity.Roles.Create', + icon: 'fa fa-plus', + }, +]); diff --git a/npm/ng-packs/packages/identity/src/lib/defaults/default-users-entity-actions.ts b/npm/ng-packs/packages/identity/src/lib/defaults/default-users-entity-actions.ts new file mode 100644 index 0000000000..f8be7740ff --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/defaults/default-users-entity-actions.ts @@ -0,0 +1,30 @@ +import { EntityAction } from '@abp/ng.theme.shared/extensions'; +import { UsersComponent } from '../components/users/users.component'; +import { IdentityUserDto } from '../proxy/identity/models'; + +export const DEFAULT_USERS_ENTITY_ACTIONS = EntityAction.createMany([ + { + text: 'AbpIdentity::Edit', + action: data => { + const component = data.getInjected(UsersComponent); + component.edit(data.record.id); + }, + permission: 'AbpIdentity.Users.Update', + }, + { + text: 'AbpIdentity::Permissions', + action: data => { + const component = data.getInjected(UsersComponent); + component.openPermissionsModal(data.record.id); + }, + permission: 'AbpIdentity.Users.ManagePermissions', + }, + { + text: 'AbpIdentity::Delete', + action: data => { + const component = data.getInjected(UsersComponent); + component.delete(data.record.id, data.record.name || data.record.userName); + }, + permission: 'AbpIdentity.Users.Delete', + }, +]); diff --git a/npm/ng-packs/packages/identity/src/lib/defaults/default-users-entity-props.ts b/npm/ng-packs/packages/identity/src/lib/defaults/default-users-entity-props.ts new file mode 100644 index 0000000000..f9d7c217be --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/defaults/default-users-entity-props.ts @@ -0,0 +1,26 @@ +import { EntityProp, ePropType } from '@abp/ng.theme.shared/extensions'; +import { IdentityUserDto } from '../proxy/identity/models'; + +export const DEFAULT_USERS_ENTITY_PROPS = EntityProp.createMany([ + { + type: ePropType.String, + name: 'userName', + displayName: 'AbpIdentity::UserName', + sortable: true, + columnWidth: 250, + }, + { + type: ePropType.String, + name: 'email', + displayName: 'AbpIdentity::EmailAddress', + sortable: true, + columnWidth: 250, + }, + { + type: ePropType.String, + name: 'phoneNumber', + displayName: 'AbpIdentity::PhoneNumber', + sortable: true, + columnWidth: 250, + }, +]); diff --git a/npm/ng-packs/packages/identity/src/lib/defaults/default-users-form-props.ts b/npm/ng-packs/packages/identity/src/lib/defaults/default-users-form-props.ts new file mode 100644 index 0000000000..3092bdf7e8 --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/defaults/default-users-form-props.ts @@ -0,0 +1,61 @@ +import { getPasswordValidators } from '@abp/ng.theme.shared'; +import { ePropType, FormProp } from '@abp/ng.theme.shared/extensions'; +import { Validators } from '@angular/forms'; +import { IdentityUserDto } from '../proxy/identity/models'; + +export const DEFAULT_USERS_CREATE_FORM_PROPS = FormProp.createMany([ + { + type: ePropType.String, + name: 'userName', + displayName: 'AbpIdentity::UserName', + id: 'user-name', + validators: () => [Validators.required, Validators.maxLength(256)], + }, + { + type: ePropType.Password, + name: 'password', + displayName: 'AbpIdentity::Password', + id: 'password', + autocomplete: 'new-password', + validators: data => [Validators.required, ...getPasswordValidators({ get: data.getInjected })], + }, + { + type: ePropType.String, + name: 'name', + displayName: 'AbpIdentity::DisplayName:Name', + id: 'name', + validators: () => [Validators.maxLength(64)], + }, + { + type: ePropType.String, + name: 'surname', + displayName: 'AbpIdentity::DisplayName:Surname', + id: 'surname', + validators: () => [Validators.maxLength(64)], + }, + { + type: ePropType.Email, + name: 'email', + displayName: 'AbpIdentity::EmailAddress', + id: 'email', + validators: () => [Validators.required, Validators.maxLength(256), Validators.email], + }, + { + type: ePropType.String, + name: 'phoneNumber', + displayName: 'AbpIdentity::PhoneNumber', + id: 'phone-number', + validators: () => [Validators.maxLength(16)], + }, + { + type: ePropType.Boolean, + name: 'lockoutEnabled', + displayName: 'AbpIdentity::DisplayName:LockoutEnabled', + id: 'lockout-checkbox', + defaultValue: true, + }, +]); + +export const DEFAULT_USERS_EDIT_FORM_PROPS = DEFAULT_USERS_CREATE_FORM_PROPS.filter( + prop => prop.name !== 'password', +); diff --git a/npm/ng-packs/packages/identity/src/lib/defaults/default-users-toolbar-actions.ts b/npm/ng-packs/packages/identity/src/lib/defaults/default-users-toolbar-actions.ts new file mode 100644 index 0000000000..b1e62a9e18 --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/defaults/default-users-toolbar-actions.ts @@ -0,0 +1,15 @@ +import { ToolbarAction } from '@abp/ng.theme.shared/extensions'; +import { UsersComponent } from '../components/users/users.component'; +import { IdentityUserDto } from '../proxy/identity/models'; + +export const DEFAULT_USERS_TOOLBAR_ACTIONS = ToolbarAction.createMany([ + { + text: 'AbpIdentity::NewUser', + action: data => { + const component = data.getInjected(UsersComponent); + component.add(); + }, + permission: 'AbpIdentity.Users.Create', + icon: 'fa fa-plus', + }, +]); diff --git a/npm/ng-packs/packages/identity/src/lib/guards/extensions.guard.ts b/npm/ng-packs/packages/identity/src/lib/guards/extensions.guard.ts new file mode 100644 index 0000000000..3b5d592acc --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/guards/extensions.guard.ts @@ -0,0 +1,91 @@ +import { ConfigStateService } from '@abp/ng.core'; +import { + ExtensionsService, + getObjectExtensionEntitiesFromStore, + mapEntitiesToContributors, + mergeWithDefaultActions, + mergeWithDefaultProps, +} from '@abp/ng.theme.shared/extensions'; +import { Injectable, Injector } from '@angular/core'; +import { CanActivate } from '@angular/router'; +import { Observable } from 'rxjs'; +import { map, mapTo, tap } from 'rxjs/operators'; +import { eIdentityComponents } from '../enums/components'; +import { + IdentityCreateFormPropContributors, + IdentityEditFormPropContributors, + IdentityEntityActionContributors, + IdentityEntityPropContributors, + IdentityToolbarActionContributors, +} from '../models/config-options'; +import { + DEFAULT_IDENTITY_CREATE_FORM_PROPS, + DEFAULT_IDENTITY_EDIT_FORM_PROPS, + DEFAULT_IDENTITY_ENTITY_ACTIONS, + DEFAULT_IDENTITY_ENTITY_PROPS, + DEFAULT_IDENTITY_TOOLBAR_ACTIONS, + IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS, + IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS, + IDENTITY_ENTITY_ACTION_CONTRIBUTORS, + IDENTITY_ENTITY_PROP_CONTRIBUTORS, + IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, +} from '../tokens/extensions.token'; + +@Injectable() +export class IdentityExtensionsGuard implements CanActivate { + constructor(private injector: Injector) {} + + canActivate(): Observable { + const extensions: ExtensionsService = this.injector.get(ExtensionsService); + const actionContributors: IdentityEntityActionContributors = + this.injector.get(IDENTITY_ENTITY_ACTION_CONTRIBUTORS, null) || {}; + const toolbarContributors: IdentityToolbarActionContributors = + this.injector.get(IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, null) || {}; + const propContributors: IdentityEntityPropContributors = + this.injector.get(IDENTITY_ENTITY_PROP_CONTRIBUTORS, null) || {}; + const createFormContributors: IdentityCreateFormPropContributors = + this.injector.get(IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS, null) || {}; + const editFormContributors: IdentityEditFormPropContributors = + this.injector.get(IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS, null) || {}; + + const configState = this.injector.get(ConfigStateService); + return getObjectExtensionEntitiesFromStore(configState, 'Identity').pipe( + map(entities => ({ + [eIdentityComponents.Roles]: entities.Role, + [eIdentityComponents.Users]: entities.User, + })), + mapEntitiesToContributors(configState, 'AbpIdentity'), + tap(objectExtensionContributors => { + mergeWithDefaultActions( + extensions.entityActions, + DEFAULT_IDENTITY_ENTITY_ACTIONS, + actionContributors, + ); + mergeWithDefaultActions( + extensions.toolbarActions, + DEFAULT_IDENTITY_TOOLBAR_ACTIONS, + toolbarContributors, + ); + mergeWithDefaultProps( + extensions.entityProps, + DEFAULT_IDENTITY_ENTITY_PROPS, + objectExtensionContributors.prop, + propContributors, + ); + mergeWithDefaultProps( + extensions.createFormProps, + DEFAULT_IDENTITY_CREATE_FORM_PROPS, + objectExtensionContributors.createForm, + createFormContributors, + ); + mergeWithDefaultProps( + extensions.editFormProps, + DEFAULT_IDENTITY_EDIT_FORM_PROPS, + objectExtensionContributors.editForm, + editFormContributors, + ); + }), + mapTo(true), + ); + } +} diff --git a/npm/ng-packs/packages/identity/src/lib/guards/index.ts b/npm/ng-packs/packages/identity/src/lib/guards/index.ts new file mode 100644 index 0000000000..480f14c40b --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/guards/index.ts @@ -0,0 +1 @@ +export * from './extensions.guard'; diff --git a/npm/ng-packs/packages/identity/src/lib/identity-routing.module.ts b/npm/ng-packs/packages/identity/src/lib/identity-routing.module.ts index 27986ae0d7..3b290e851b 100644 --- a/npm/ng-packs/packages/identity/src/lib/identity-routing.module.ts +++ b/npm/ng-packs/packages/identity/src/lib/identity-routing.module.ts @@ -10,13 +10,14 @@ import { RouterModule, Routes } from '@angular/router'; import { RolesComponent } from './components/roles/roles.component'; import { UsersComponent } from './components/users/users.component'; import { eIdentityComponents } from './enums/components'; +import { IdentityExtensionsGuard } from './guards/extensions.guard'; const routes: Routes = [ { path: '', redirectTo: 'roles', pathMatch: 'full' }, { path: '', component: DynamicLayoutComponent, - canActivate: [AuthGuard, PermissionGuard], + canActivate: [AuthGuard, PermissionGuard, IdentityExtensionsGuard], children: [ { path: 'roles', diff --git a/npm/ng-packs/packages/identity/src/lib/identity.module.ts b/npm/ng-packs/packages/identity/src/lib/identity.module.ts index 036c7e3607..e2b832350a 100644 --- a/npm/ng-packs/packages/identity/src/lib/identity.module.ts +++ b/npm/ng-packs/packages/identity/src/lib/identity.module.ts @@ -1,14 +1,24 @@ import { CoreModule, LazyModuleFactory } from '@abp/ng.core'; import { PermissionManagementModule } from '@abp/ng.permission-management'; import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { UiExtensionsModule } from '@abp/ng.theme.shared/extensions'; import { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core'; import { NgbDropdownModule, NgbNavModule } from '@ng-bootstrap/ng-bootstrap'; import { NgxValidateCoreModule } from '@ngx-validate/core'; import { NgxsModule } from '@ngxs/store'; import { RolesComponent } from './components/roles/roles.component'; import { UsersComponent } from './components/users/users.component'; +import { IdentityExtensionsGuard } from './guards/extensions.guard'; import { IdentityRoutingModule } from './identity-routing.module'; +import { IdentityConfigOptions } from './models/config-options'; import { IdentityState } from './states/identity.state'; +import { + IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS, + IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS, + IDENTITY_ENTITY_ACTION_CONTRIBUTORS, + IDENTITY_ENTITY_PROP_CONTRIBUTORS, + IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, +} from './tokens/extensions.token'; @NgModule({ declarations: [RolesComponent, UsersComponent], @@ -19,20 +29,43 @@ import { IdentityState } from './states/identity.state'; IdentityRoutingModule, NgbNavModule, ThemeSharedModule, + UiExtensionsModule, NgbDropdownModule, PermissionManagementModule, NgxValidateCoreModule, ], }) export class IdentityModule { - static forChild(): ModuleWithProviders { + static forChild(options: IdentityConfigOptions = {}): ModuleWithProviders { return { ngModule: IdentityModule, - providers: [], + providers: [ + { + provide: IDENTITY_ENTITY_ACTION_CONTRIBUTORS, + useValue: options.entityActionContributors, + }, + { + provide: IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, + useValue: options.toolbarActionContributors, + }, + { + provide: IDENTITY_ENTITY_PROP_CONTRIBUTORS, + useValue: options.entityPropContributors, + }, + { + provide: IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS, + useValue: options.createFormPropContributors, + }, + { + provide: IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS, + useValue: options.editFormPropContributors, + }, + IdentityExtensionsGuard, + ], }; } - static forLazy(): NgModuleFactory { - return new LazyModuleFactory(IdentityModule.forChild()); + static forLazy(options: IdentityConfigOptions = {}): NgModuleFactory { + return new LazyModuleFactory(IdentityModule.forChild(options)); } } diff --git a/npm/ng-packs/packages/identity/src/lib/models/config-options.ts b/npm/ng-packs/packages/identity/src/lib/models/config-options.ts new file mode 100644 index 0000000000..6a1fc29a00 --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/models/config-options.ts @@ -0,0 +1,42 @@ +import { + CreateFormPropContributorCallback, + EditFormPropContributorCallback, + EntityActionContributorCallback, + EntityPropContributorCallback, + ToolbarActionContributorCallback, +} from '@abp/ng.theme.shared/extensions'; +import { eIdentityComponents } from '../enums/components'; +import { IdentityRoleDto, IdentityUserDto } from '../proxy/identity/models'; + +export type IdentityEntityActionContributors = Partial<{ + [eIdentityComponents.Roles]: EntityActionContributorCallback[]; + [eIdentityComponents.Users]: EntityActionContributorCallback[]; +}>; + +export type IdentityToolbarActionContributors = Partial<{ + [eIdentityComponents.Roles]: ToolbarActionContributorCallback[]; + [eIdentityComponents.Users]: ToolbarActionContributorCallback[]; +}>; + +export type IdentityEntityPropContributors = Partial<{ + [eIdentityComponents.Roles]: EntityPropContributorCallback[]; + [eIdentityComponents.Users]: EntityPropContributorCallback[]; +}>; + +export type IdentityCreateFormPropContributors = Partial<{ + [eIdentityComponents.Roles]: CreateFormPropContributorCallback[]; + [eIdentityComponents.Users]: CreateFormPropContributorCallback[]; +}>; + +export type IdentityEditFormPropContributors = Partial<{ + [eIdentityComponents.Roles]: EditFormPropContributorCallback[]; + [eIdentityComponents.Users]: EditFormPropContributorCallback[]; +}>; + +export interface IdentityConfigOptions { + entityActionContributors?: IdentityEntityActionContributors; + toolbarActionContributors?: IdentityToolbarActionContributors; + entityPropContributors?: IdentityEntityPropContributors; + createFormPropContributors?: IdentityCreateFormPropContributors; + editFormPropContributors?: IdentityEditFormPropContributors; +} diff --git a/npm/ng-packs/packages/identity/src/lib/models/index.ts b/npm/ng-packs/packages/identity/src/lib/models/index.ts new file mode 100644 index 0000000000..c7964853da --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/models/index.ts @@ -0,0 +1,2 @@ +export * from './config-options'; +export * from './identity'; diff --git a/npm/ng-packs/packages/identity/src/lib/states/index.ts b/npm/ng-packs/packages/identity/src/lib/states/index.ts new file mode 100644 index 0000000000..7dccd18456 --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/states/index.ts @@ -0,0 +1 @@ +export * from './identity.state'; diff --git a/npm/ng-packs/packages/identity/src/lib/tokens/extensions.token.ts b/npm/ng-packs/packages/identity/src/lib/tokens/extensions.token.ts new file mode 100644 index 0000000000..14e506da0a --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/tokens/extensions.token.ts @@ -0,0 +1,91 @@ +import { + CreateFormPropContributorCallback, + EditFormPropContributorCallback, + EntityActionContributorCallback, + EntityPropContributorCallback, + ToolbarActionContributorCallback, +} from '@abp/ng.theme.shared/extensions'; +import { InjectionToken } from '@angular/core'; +import { DEFAULT_ROLES_ENTITY_ACTIONS } from '../defaults/default-roles-entity-actions'; +import { DEFAULT_ROLES_ENTITY_PROPS } from '../defaults/default-roles-entity-props'; +import { + DEFAULT_ROLES_CREATE_FORM_PROPS, + DEFAULT_ROLES_EDIT_FORM_PROPS, +} from '../defaults/default-roles-form-props'; +import { DEFAULT_ROLES_TOOLBAR_ACTIONS } from '../defaults/default-roles-toolbar-actions'; +import { DEFAULT_USERS_ENTITY_ACTIONS } from '../defaults/default-users-entity-actions'; +import { DEFAULT_USERS_ENTITY_PROPS } from '../defaults/default-users-entity-props'; +import { + DEFAULT_USERS_CREATE_FORM_PROPS, + DEFAULT_USERS_EDIT_FORM_PROPS, +} from '../defaults/default-users-form-props'; +import { DEFAULT_USERS_TOOLBAR_ACTIONS } from '../defaults/default-users-toolbar-actions'; +import { eIdentityComponents } from '../enums/components'; +import { IdentityRoleDto, IdentityUserDto } from '../proxy/identity/models'; + +export const DEFAULT_IDENTITY_ENTITY_ACTIONS = { + [eIdentityComponents.Roles]: DEFAULT_ROLES_ENTITY_ACTIONS, + [eIdentityComponents.Users]: DEFAULT_USERS_ENTITY_ACTIONS, +}; + +export const DEFAULT_IDENTITY_TOOLBAR_ACTIONS = { + [eIdentityComponents.Roles]: DEFAULT_ROLES_TOOLBAR_ACTIONS, + [eIdentityComponents.Users]: DEFAULT_USERS_TOOLBAR_ACTIONS, +}; + +export const DEFAULT_IDENTITY_ENTITY_PROPS = { + [eIdentityComponents.Roles]: DEFAULT_ROLES_ENTITY_PROPS, + [eIdentityComponents.Users]: DEFAULT_USERS_ENTITY_PROPS, +}; + +export const DEFAULT_IDENTITY_CREATE_FORM_PROPS = { + [eIdentityComponents.Roles]: DEFAULT_ROLES_CREATE_FORM_PROPS, + [eIdentityComponents.Users]: DEFAULT_USERS_CREATE_FORM_PROPS, +}; + +export const DEFAULT_IDENTITY_EDIT_FORM_PROPS = { + [eIdentityComponents.Roles]: DEFAULT_ROLES_EDIT_FORM_PROPS, + [eIdentityComponents.Users]: DEFAULT_USERS_EDIT_FORM_PROPS, +}; + +export const IDENTITY_ENTITY_ACTION_CONTRIBUTORS = new InjectionToken( + 'IDENTITY_ENTITY_ACTION_CONTRIBUTORS', +); + +export const IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS = new InjectionToken( + 'IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS', +); + +export const IDENTITY_ENTITY_PROP_CONTRIBUTORS = new InjectionToken( + 'IDENTITY_ENTITY_PROP_CONTRIBUTORS', +); + +export const IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS = new InjectionToken( + 'IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS', +); + +export const IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS = new InjectionToken( + 'IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS', +); + +// Fix for TS4023 -> https://github.com/microsoft/TypeScript/issues/9944#issuecomment-254693497 +type EntityActionContributors = Partial<{ + [eIdentityComponents.Roles]: EntityActionContributorCallback[]; + [eIdentityComponents.Users]: EntityActionContributorCallback[]; +}>; +type ToolbarActionContributors = Partial<{ + [eIdentityComponents.Roles]: ToolbarActionContributorCallback[]; + [eIdentityComponents.Users]: ToolbarActionContributorCallback[]; +}>; +type EntityPropContributors = Partial<{ + [eIdentityComponents.Roles]: EntityPropContributorCallback[]; + [eIdentityComponents.Users]: EntityPropContributorCallback[]; +}>; +type CreateFormPropContributors = Partial<{ + [eIdentityComponents.Roles]: CreateFormPropContributorCallback[]; + [eIdentityComponents.Users]: CreateFormPropContributorCallback[]; +}>; +type EditFormPropContributors = Partial<{ + [eIdentityComponents.Roles]: EditFormPropContributorCallback[]; + [eIdentityComponents.Users]: EditFormPropContributorCallback[]; +}>; diff --git a/npm/ng-packs/packages/identity/src/lib/tokens/index.ts b/npm/ng-packs/packages/identity/src/lib/tokens/index.ts new file mode 100644 index 0000000000..33233400a2 --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/tokens/index.ts @@ -0,0 +1 @@ +export * from './extensions.token'; diff --git a/npm/ng-packs/packages/identity/src/public-api.ts b/npm/ng-packs/packages/identity/src/public-api.ts index 4b192bd857..9ba4a982db 100644 --- a/npm/ng-packs/packages/identity/src/public-api.ts +++ b/npm/ng-packs/packages/identity/src/public-api.ts @@ -1,13 +1,11 @@ -/* - * Public API Surface of identity - */ - -export * from './lib/identity.module'; -export * from './lib/actions/identity.actions'; -export * from './lib/enums'; +export * from './lib/actions'; export * from './lib/components'; -export * from './lib/models/identity'; -export * from './lib/services'; -export * from './lib/states/identity.state'; +export * from './lib/enums'; +export * from './lib/guards'; +export * from './lib/identity.module'; +export * from './lib/models'; export * from './lib/proxy/identity'; export * from './lib/proxy/users'; +export * from './lib/services'; +export * from './lib/states'; +export * from './lib/tokens'; diff --git a/npm/ng-packs/packages/permission-management/package.json b/npm/ng-packs/packages/permission-management/package.json index 4e1104efcd..f9c5d579a5 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": "4.0.0", + "version": "4.0.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~4.0.0", + "@abp/ng.theme.shared": "~4.0.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 c31e9dfebe..096f5ba656 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": "4.0.0", + "version": "4.0.1", "description": "Schematics that works with ABP Backend", "keywords": [ "schematics" diff --git a/npm/ng-packs/packages/schematics/src/constants/volo.ts b/npm/ng-packs/packages/schematics/src/constants/volo.ts index 12aa166d66..00fde72c79 100644 --- a/npm/ng-packs/packages/schematics/src/constants/volo.ts +++ b/npm/ng-packs/packages/schematics/src/constants/volo.ts @@ -1,22 +1 @@ -import { Interface, Property } from '../models'; - export const VOLO_REGEX = /^Volo\.Abp\.(Application\.Dtos|ObjectExtending)/; - -export const VOLO_NAME_VALUE = new Interface({ - base: null, - identifier: 'NameValue', - ref: 'Volo.Abp.NameValue', - namespace: 'Volo.Abp', - properties: [ - new Property({ - name: 'name', - type: 'string', - refs: ['System.String'], - }), - new Property({ - name: 'value', - type: 'T', - refs: ['T'], - }), - ], -}); diff --git a/npm/ng-packs/packages/schematics/src/models/model.ts b/npm/ng-packs/packages/schematics/src/models/model.ts index 6c7feb318d..048c08a1b0 100644 --- a/npm/ng-packs/packages/schematics/src/models/model.ts +++ b/npm/ng-packs/packages/schematics/src/models/model.ts @@ -1,43 +1,97 @@ import { Import } from './import'; -import { Omissible } from './util'; +import { Options } from './util'; export class Model { - imports: Import[] = []; - interfaces: Interface[] = []; - namespace: string; - path: string; + readonly imports: Import[] = []; + readonly interfaces: Interface[] = []; + readonly namespace: string; + readonly path: string; constructor(options: ModelOptions) { Object.assign(this, options); } } -export type ModelOptions = Omissible; +export type ModelOptions = Options; export class Interface { - base: string | null; - identifier: string; - namespace: string; - properties: Property[] = []; - ref: string; + readonly base: string | null; + readonly identifier: string; + readonly namespace: string; + readonly generics: Generic[] = []; + readonly properties: Property[] = []; + readonly ref: string; constructor(options: InterfaceOptions) { Object.assign(this, options); } } -export type InterfaceOptions = Omissible; +export type InterfaceOptions = Options; -export class Property { - name: string; - type: string; - default = ''; - optional: '' | '?' = ''; - refs: string[] = []; +abstract class TypeRef { + readonly refs: string[] = []; - constructor(options: PropertyOptions) { + protected _type = ''; + get type() { + return this._type; + } + set type(value: string) { + if (!value) return; + this._type = value; + } + + protected _default = ''; + get default() { + return this._default; + } + set default(value: string) { + if (!value) return; + this._default = ` = ${value}`; + } + + constructor(options: TypeRefOptions) { Object.assign(this, options); } + + setDefault(value: string) { + this.default = value; + } + + setType(value: string) { + this.type = value; + } +} + +type TypeRefOptionalKeys = 'default' | 'refs'; +type TypeRefOptions = Options; + +export class Generic extends TypeRef { + constructor(options: GenericOptions) { + super(options); + } +} + +export type GenericOptions = Options; + +export class Property extends TypeRef { + readonly name: string; + private _optional: '' | '?' = ''; + get optional() { + return this.default ? '' : this._optional; + } + + set optional(value: '' | '?') { + this._optional = value; + } + + constructor(options: PropertyOptions) { + super(options); + } + + setOptional(isOptional: boolean) { + this.optional = isOptional ? '?' : ''; + } } -export type PropertyOptions = Omissible; +export type PropertyOptions = Options; diff --git a/npm/ng-packs/packages/schematics/src/models/util.ts b/npm/ng-packs/packages/schematics/src/models/util.ts index 5ff732ccfe..0588ed7d5b 100644 --- a/npm/ng-packs/packages/schematics/src/models/util.ts +++ b/npm/ng-packs/packages/schematics/src/models/util.ts @@ -1,2 +1,16 @@ // Omissible (given keys will become optional) export type Omissible = Partial> & Omit; + +// ExcludeKeys (keys will be excluded based on their type) +type ExcludeKeys = Exclude< + { + [Key in keyof Type]: Type[Key] extends Excluded ? never : Key; + }[keyof Type], + never +>; + +// tslint:disable-next-line: ban-types +type ExcludeMethods = Pick>; + +// Options (methods will be omitted, given keys will become optional) +export type Options> = Omissible, K>; diff --git a/npm/ng-packs/packages/schematics/src/utils/generics.ts b/npm/ng-packs/packages/schematics/src/utils/generics.ts new file mode 100644 index 0000000000..8dc7fb2629 --- /dev/null +++ b/npm/ng-packs/packages/schematics/src/utils/generics.ts @@ -0,0 +1,100 @@ +import { Generic } from '../models'; + +export class GenericsCollector { + private _generics: Generic[] = []; + get generics() { + return this._generics; + } + + apply = (value: string, index: number) => { + const generic = this.get(index); + if (generic) { + if (!generic.type) generic.setType(value); + return value + generic.default; + } + + return value; + }; + + constructor(private getTypeIdentifier = (type: string) => type) {} + + private createGeneric(type: string, ref: string, defaultValue: string) { + const _default = this.getTypeIdentifier(defaultValue); + const refs = [generateRefWithPlaceholders(ref)]; + const generic = new Generic({ type, default: _default, refs }); + return generic; + } + + private register(index: number, generic: Generic) { + const existing = this.get(index); + if (existing) { + existing.setDefault(generic.default); + existing.setType(generic.type); + } else this.set(index, generic); + } + + collect(generics: string[], genericArguments: string[]) { + generics.forEach((ref, i) => { + const generic = this.createGeneric( + genericArguments[i], + ref, + genericArguments.includes(ref) ? '' : ref, + ); + this.register(i, generic); + }); + } + + get(index: number) { + return this.generics[index]; + } + + set(index: number, value: Generic) { + this.generics[index] = value; + } + + reset() { + this._generics = []; + } +} + +export function generateRefWithPlaceholders(sourceType: string) { + let { identifier, generics } = extractGenerics(sourceType); + + identifier = identifier; + generics = generics.map((_, i) => `T${i}`); + + return generics.length ? `${identifier}<${generics}>` : identifier; +} + +export function extractSimpleGenerics(sourceType: string) { + const { identifier, generics } = extractGenerics(sourceType); + + return { + identifier: getLastSegment(identifier), + generics: generics.map(getLastSegment), + }; +} + +export function extractGenerics(sourceType: string) { + const regex = /(?[^<]+)(<(?.+)>)?/g; + const { identifier = '', generics = '' } = regex.exec(sourceType)?.groups ?? {}; + + return { + identifier, + generics: generics.split(/,\s*/).filter(Boolean), + }; +} + +function getLastSegment(str: string) { + return str.split('.').pop()!; +} + +export function replacePlaceholdersWithGenerics( + type: string, + generics: string[], + genericsCollector: GenericsCollector, +) { + return generics + .map(genericsCollector.apply) + .reduce((acc, v, i) => acc.replace(new RegExp(`([<, ])T${i}([,>])`, 'g'), `$1${v}$2`), type); +} diff --git a/npm/ng-packs/packages/schematics/src/utils/index.ts b/npm/ng-packs/packages/schematics/src/utils/index.ts index 178920dccc..e6df05b2e2 100644 --- a/npm/ng-packs/packages/schematics/src/utils/index.ts +++ b/npm/ng-packs/packages/schematics/src/utils/index.ts @@ -5,6 +5,7 @@ export * from './barrel'; export * from './common'; export * from './enum'; export * from './file'; +export * from './generics'; export * from './import'; export * from './model'; export * from './namespace'; diff --git a/npm/ng-packs/packages/schematics/src/utils/model.ts b/npm/ng-packs/packages/schematics/src/utils/model.ts index fc8dde37c1..49d3c0fcf5 100644 --- a/npm/ng-packs/packages/schematics/src/utils/model.ts +++ b/npm/ng-packs/packages/schematics/src/utils/model.ts @@ -1,5 +1,11 @@ -import { VOLO_NAME_VALUE, VOLO_REGEX } from '../constants'; +import { VOLO_REGEX } from '../constants'; import { Interface, Model, Property, PropertyDef, Type, TypeWithEnum } from '../models'; +import { + extractGenerics, + generateRefWithPlaceholders, + GenericsCollector, + replacePlaceholdersWithGenerics, +} from './generics'; import { parseNamespace } from './namespace'; import { relativePathToModel } from './path'; import { camel } from './text'; @@ -8,6 +14,7 @@ import { createTypeParser, createTypeSimplifier, createTypesToImportsReducer, + extendsSelf, removeTypeModifiers, } from './type'; @@ -27,6 +34,7 @@ export function createImportRefsToModelReducer(params: ModelGeneratorParams) { return (models: Model[], importRefs: string[]) => { const enums: string[] = []; const interfaces = importRefs.reduce(reduceImportRefsToInterfaces, []); + sortInterfaces(interfaces); interfaces.forEach(_interface => { @@ -40,12 +48,9 @@ export function createImportRefsToModelReducer(params: ModelGeneratorParams) { const index = models.findIndex(m => m.namespace === _interface.namespace); if (index > -1) { if (models[index].interfaces.some(i => i.identifier === _interface.identifier)) return; - if (_interface.ref.startsWith(VOLO_NAME_VALUE.ref)) return; models[index].interfaces.push(_interface); } else { - if (_interface.ref.startsWith(VOLO_NAME_VALUE.ref)) _interface = VOLO_NAME_VALUE; - const { namespace } = _interface; models.push( @@ -70,7 +75,7 @@ export function createImportRefsToModelReducer(params: ModelGeneratorParams) { isEnum: false, }); - _interface.properties.forEach(prop => { + [..._interface.properties, ..._interface.generics].forEach(prop => { prop.refs.forEach(ref => { const propType = types[ref]; if (!propType) return; @@ -100,38 +105,50 @@ export function createImportRefToInterfaceReducerCreator(params: ModelGeneratorP const parseType = createTypeParser(removeTypeModifiers); const simplifyType = createTypeSimplifier(); const getIdentifier = (type: string) => removeTypeModifiers(simplifyType(type)); + const genericsCollector = new GenericsCollector(getIdentifier); return reduceRefsToInterfaces; - function reduceRefsToInterfaces(interfaces: Interface[], ref: string) { + function reduceRefsToInterfaces(interfaces: Interface[], ref: string): Interface[] { const typeDef = types[ref]; if (!typeDef) return interfaces; const namespace = parseNamespace(solution, ref); - const identifier = (typeDef.genericArguments ?? []).reduce( - (acc, t, i) => acc.replace(`T${i}`, t), - getIdentifier(ref), - ); + let { baseType: base, genericArguments } = typeDef; + genericArguments = genericArguments || []; + let identifier = getIdentifier(ref); + identifier = replacePlaceholdersWithGenerics(identifier, genericArguments, genericsCollector); + + if (base) { + if (extendsSelf(ref, base)) { + genericsCollector.collect(extractGenerics(base).generics, genericArguments); + return reduceRefsToInterfaces(interfaces, generateRefWithPlaceholders(base)); + } else { + base = getIdentifier(base); + } + } - const base = typeDef.baseType ? getIdentifier(typeDef.baseType) : null; - const _interface = new Interface({ identifier, base, namespace, ref }); + const { generics } = genericsCollector; + const _interface = new Interface({ identifier, base, namespace, ref, generics }); + genericsCollector.reset(); typeDef.properties?.forEach(prop => { const name = camel(prop.name); - const optional = isOptionalProperty(prop) ? '?' : ''; const type = simplifyType(prop.typeSimple); const refs = parseType(prop.type).reduce( (acc: string[], r) => acc.concat(parseGenerics(r).toGenerics()), [], ); + const property = new Property({ name, type, refs }); + property.setOptional(isOptionalProperty(prop)); - _interface.properties.push(new Property({ name, optional, type, refs })); + _interface.properties.push(property); }); interfaces.push(_interface); - return _interface.properties + return [..._interface.properties, ..._interface.generics] .reduce((refs, prop) => { prop.refs.forEach(type => { if (types[type]?.isEnum) return; @@ -142,7 +159,7 @@ export function createImportRefToInterfaceReducerCreator(params: ModelGeneratorP return refs; }, []) .concat(base ? parseGenerics(typeDef.baseType!).toGenerics() : []) - .reduce(reduceRefsToInterfaces, interfaces); + .reduce(reduceRefsToInterfaces, interfaces); } } diff --git a/npm/ng-packs/packages/schematics/src/utils/service.ts b/npm/ng-packs/packages/schematics/src/utils/service.ts index b8a2d692b2..70655c821d 100644 --- a/npm/ng-packs/packages/schematics/src/utils/service.ts +++ b/npm/ng-packs/packages/schematics/src/utils/service.ts @@ -83,8 +83,8 @@ export function createActionToSignatureMapper() { signature.parameters = action.parametersOnMethod.map(p => { const type = adaptType(p.typeSimple); const parameter = new Property({ name: p.name, type }); - if (p.defaultValue) parameter.default = ` = ${p.defaultValue}`; - else if (p.isOptional) parameter.optional = '?'; + parameter.setDefault(p.defaultValue); + parameter.setOptional(p.isOptional); return parameter; }); diff --git a/npm/ng-packs/packages/schematics/src/utils/type.ts b/npm/ng-packs/packages/schematics/src/utils/type.ts index 781794c463..a087392d40 100644 --- a/npm/ng-packs/packages/schematics/src/utils/type.ts +++ b/npm/ng-packs/packages/schematics/src/utils/type.ts @@ -1,7 +1,7 @@ -import { SYSTEM_TYPES } from '../constants'; -import { VOLO_REGEX } from '../constants/volo'; +import { SYSTEM_TYPES, VOLO_REGEX } from '../constants'; import { eImportKeyword } from '../enums'; import { Import, TypeWithEnum } from '../models'; +import { extractSimpleGenerics } from './generics'; import { parseNamespace } from './namespace'; import { relativePathToEnum, relativePathToModel } from './path'; import { parseGenerics } from './tree'; @@ -15,14 +15,9 @@ export function createTypeSimplifier() { type = /any.+)<.*(?<=[\.<])(?.+)>/gm); - const { generic, genericType } = regexp.exec(type)?.groups ?? {}; + const { identifier, generics } = extractSimpleGenerics(type); - return generic - ? generic === 'any' - ? 'any' - : `${generic}<${genericType}>` - : type.split('.').pop()!; + return generics.length ? `${identifier}<${generics.join(', ')}>` : identifier; }); return (type: string) => { @@ -40,9 +35,7 @@ export function createTypeParser(replacerFn = (t: string) => t) { export function createTypeNormalizer(replacerFn = (t: string) => t) { return (type: string) => { - type = normalizeTypeAnnotations(type); - - return replacerFn(type); + return replacerFn(normalizeTypeAnnotations(type)); }; } @@ -56,8 +49,7 @@ export function flattenDictionaryTypes(types: string[], type: string) { } export function normalizeTypeAnnotations(type: string) { - type = type.replace(/\[(.+)+\]/g, '$1[]'); - return type.replace(/\?/g, ''); + return type.replace(/\[(.+)+\]/g, '$1[]').replace(/\?/g, ''); } export function removeGenerics(type: string) { @@ -115,3 +107,8 @@ export function createTypeAdapter() { const simplifyType = createTypeSimplifier(); return (type: string) => parseGenerics(type, node => simplifyType(node.data)).toString(); } + +// naming here is depictive only +export function extendsSelf(type: string, base: string) { + return removeGenerics(base) === removeGenerics(type); +} diff --git a/npm/ng-packs/packages/setting-management/package.json b/npm/ng-packs/packages/setting-management/package.json index ac955df1a8..18c8514618 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": "4.0.0", + "version": "4.0.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~4.0.0", + "@abp/ng.theme.shared": "~4.0.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 5418dafbcb..c2a5038779 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": "4.0.0", + "version": "4.0.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.feature-management": "~4.0.0", - "@abp/ng.theme.shared": "~4.0.0", + "@abp/ng.feature-management": "~4.0.1", + "@abp/ng.theme.shared": "~4.0.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html index 78c8d10a81..a9f108d7f5 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html +++ b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html @@ -5,26 +5,7 @@
{{ 'AbpTenantManagement::Tenants' | abpLocalization }}
- - +
@@ -41,60 +22,11 @@ - - - -
- -
- - - - -
-
-
-
- -
+ @@ -119,36 +51,7 @@
-
-
- - -
-
- - -
-
- - -
-
+
diff --git a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts index f5b69fd3aa..284c31b9c7 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts +++ b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts @@ -16,6 +16,12 @@ import { import { GetTenantsInput, TenantDto } from '../../proxy/models'; import { TenantService } from '../../proxy/tenant.service'; import { TenantManagementState } from '../../states/tenant-management.state'; +import { + EXTENSIONS_IDENTIFIER, + FormPropData, + generateFormFromProps, +} from '@abp/ng.theme.shared/extensions'; +import { eTenantManagementComponents } from '../../enums/components'; interface SelectedModalContent { type: 'saveConnStr' | 'saveTenant'; @@ -26,7 +32,13 @@ interface SelectedModalContent { @Component({ selector: 'abp-tenants', templateUrl: './tenants.component.html', - providers: [ListService], + providers: [ + ListService, + { + provide: EXTENSIONS_IDENTIFIER, + useValue: eTenantManagementComponents.Tenants, + }, + ], }) export class TenantsComponent implements OnInit { @Select(TenantManagementState.get) @@ -113,18 +125,8 @@ export class TenantsComponent implements OnInit { } private createTenantForm() { - const tenantForm = this.fb.group({ - name: [this.selected.name || '', [Validators.required, Validators.maxLength(256)]], - adminEmailAddress: [null, [Validators.required, Validators.maxLength(256), Validators.email]], - adminPassword: [null, [Validators.required, ...getPasswordValidators(this.injector)]], - }); - - if (this.hasSelectedTenant) { - tenantForm.removeControl('adminEmailAddress'); - tenantForm.removeControl('adminPassword'); - } - - this.tenantForm = tenantForm; + const data = new FormPropData(this.injector, this.selected); + this.tenantForm = generateFormFromProps(data); } private createDefaultConnectionStringForm() { diff --git a/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-entity-actions.ts b/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-entity-actions.ts new file mode 100644 index 0000000000..7b4460dd94 --- /dev/null +++ b/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-entity-actions.ts @@ -0,0 +1,38 @@ +import { EntityAction } from '@abp/ng.theme.shared/extensions'; +import { TenantsComponent } from '../components/tenants/tenants.component'; +import { TenantDto } from '../proxy/models'; + +export const DEFAULT_TENANTS_ENTITY_ACTIONS = EntityAction.createMany([ + { + text: 'AbpTenantManagement::Edit', + action: data => { + const component = data.getInjected(TenantsComponent); + component.editTenant(data.record.id); + }, + permission: 'AbpTenantManagement.Tenants.Update', + }, + { + text: 'AbpTenantManagement::Permission:ManageConnectionStrings', + action: data => { + const component = data.getInjected(TenantsComponent); + component.onEditConnectionString(data.record.id); + }, + permission: 'AbpTenantManagement.Tenants.ManageConnectionStrings', + }, + { + text: 'AbpTenantManagement::Permission:ManageFeatures', + action: data => { + const component = data.getInjected(TenantsComponent); + component.openFeaturesModal(data.record.id); + }, + permission: 'AbpTenantManagement.Tenants.ManageFeatures', + }, + { + text: 'AbpTenantManagement::Delete', + action: data => { + const component = data.getInjected(TenantsComponent); + component.delete(data.record.id, data.record.name); + }, + permission: 'AbpTenantManagement.Tenants.Delete', + }, +]); diff --git a/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-entity-props.ts b/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-entity-props.ts new file mode 100644 index 0000000000..31de557fde --- /dev/null +++ b/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-entity-props.ts @@ -0,0 +1,11 @@ +import { EntityProp, ePropType } from '@abp/ng.theme.shared/extensions'; +import { TenantDto } from '../proxy/models'; + +export const DEFAULT_TENANTS_ENTITY_PROPS = EntityProp.createMany([ + { + type: ePropType.String, + name: 'name', + displayName: 'AbpTenantManagement::TenantName', + sortable: true, + }, +]); diff --git a/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-form-props.ts b/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-form-props.ts new file mode 100644 index 0000000000..a17832113a --- /dev/null +++ b/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-form-props.ts @@ -0,0 +1,33 @@ +import { getPasswordValidators } from '@abp/ng.theme.shared'; +import { ePropType, FormProp } from '@abp/ng.theme.shared/extensions'; +import { Validators } from '@angular/forms'; +import { TenantCreateDto, TenantUpdateDto } from '../proxy/models'; + +export const DEFAULT_TENANTS_CREATE_FORM_PROPS = FormProp.createMany< + TenantCreateDto | TenantUpdateDto +>([ + { + type: ePropType.String, + name: 'name', + id: 'name', + displayName: 'AbpTenantManagement::TenantName', + validators: () => [Validators.required, Validators.maxLength(256)], + }, + { + type: ePropType.Email, + name: 'adminEmailAddress', + displayName: 'AbpTenantManagement::DisplayName:AdminEmailAddress', + id: 'admin-email-address', + validators: () => [Validators.required, Validators.maxLength(256), Validators.email], + }, + { + type: ePropType.Password, + name: 'adminPassword', + displayName: 'AbpTenantManagement::DisplayName:AdminPassword', + id: 'admin-password', + autocomplete: 'new-password', + validators: data => [Validators.required, ...getPasswordValidators({ get: data.getInjected })], + }, +]); + +export const DEFAULT_TENANTS_EDIT_FORM_PROPS = DEFAULT_TENANTS_CREATE_FORM_PROPS.slice(0, 1); diff --git a/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-toolbar-actions.ts b/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-toolbar-actions.ts new file mode 100644 index 0000000000..948294894d --- /dev/null +++ b/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-toolbar-actions.ts @@ -0,0 +1,24 @@ +import { ToolbarAction } from '@abp/ng.theme.shared/extensions'; +import { TenantsComponent } from '../components/tenants/tenants.component'; +import { TenantDto } from '../proxy/models'; + +export const DEFAULT_TENANTS_TOOLBAR_ACTIONS = ToolbarAction.createMany([ + { + text: 'AbpTenantManagement::ManageHostFeatures', + action: data => { + const component = data.getInjected(TenantsComponent); + component.openFeaturesModal(null); + }, + permission: 'FeatureManagement.ManageHostFeatures', + icon: 'fa fa-cog', + }, + { + text: 'AbpTenantManagement::NewTenant', + action: data => { + const component = data.getInjected(TenantsComponent); + component.addTenant(); + }, + permission: 'AbpTenantManagement.Tenants.Create', + icon: 'fa fa-plus', + }, +]); diff --git a/npm/ng-packs/packages/tenant-management/src/lib/guards/extensions.guard.ts b/npm/ng-packs/packages/tenant-management/src/lib/guards/extensions.guard.ts new file mode 100644 index 0000000000..32f014ddfd --- /dev/null +++ b/npm/ng-packs/packages/tenant-management/src/lib/guards/extensions.guard.ts @@ -0,0 +1,90 @@ +import { ConfigStateService } from '@abp/ng.core'; +import { + ExtensionsService, + getObjectExtensionEntitiesFromStore, + mapEntitiesToContributors, + mergeWithDefaultActions, + mergeWithDefaultProps, +} from '@abp/ng.theme.shared/extensions'; +import { Injectable, Injector } from '@angular/core'; +import { CanActivate } from '@angular/router'; +import { Observable } from 'rxjs'; +import { map, mapTo, tap } from 'rxjs/operators'; +import { eTenantManagementComponents } from '../enums/components'; +import { + TenantManagementCreateFormPropContributors, + TenantManagementEditFormPropContributors, + TenantManagementEntityActionContributors, + TenantManagementEntityPropContributors, + TenantManagementToolbarActionContributors, +} from '../models/config-options'; +import { + DEFAULT_TENANT_MANAGEMENT_CREATE_FORM_PROPS, + DEFAULT_TENANT_MANAGEMENT_EDIT_FORM_PROPS, + DEFAULT_TENANT_MANAGEMENT_ENTITY_ACTIONS, + DEFAULT_TENANT_MANAGEMENT_ENTITY_PROPS, + DEFAULT_TENANT_MANAGEMENT_TOOLBAR_ACTIONS, + TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS, + TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, +} from '../tokens/extensions.token'; + +@Injectable() +export class TenantManagementExtensionsGuard implements CanActivate { + constructor(private injector: Injector) {} + + canActivate(): Observable { + const extensions: ExtensionsService = this.injector.get(ExtensionsService); + const actionContributors: TenantManagementEntityActionContributors = + this.injector.get(TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS, null) || {}; + const toolbarContributors: TenantManagementToolbarActionContributors = + this.injector.get(TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, null) || {}; + const propContributors: TenantManagementEntityPropContributors = + this.injector.get(TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS, null) || {}; + const createFormContributors: TenantManagementCreateFormPropContributors = + this.injector.get(TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS, null) || {}; + const editFormContributors: TenantManagementEditFormPropContributors = + this.injector.get(TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS, null) || {}; + + const configState = this.injector.get(ConfigStateService); + return getObjectExtensionEntitiesFromStore(configState, 'TenantManagement').pipe( + map(entities => ({ + [eTenantManagementComponents.Tenants]: entities.Tenant, + })), + mapEntitiesToContributors(configState, 'TenantManagement'), + tap(objectExtensionContributors => { + mergeWithDefaultActions( + extensions.entityActions, + DEFAULT_TENANT_MANAGEMENT_ENTITY_ACTIONS, + actionContributors, + ); + mergeWithDefaultActions( + extensions.toolbarActions, + DEFAULT_TENANT_MANAGEMENT_TOOLBAR_ACTIONS, + toolbarContributors, + ); + mergeWithDefaultProps( + extensions.entityProps, + DEFAULT_TENANT_MANAGEMENT_ENTITY_PROPS, + objectExtensionContributors.prop, + propContributors, + ); + mergeWithDefaultProps( + extensions.createFormProps, + DEFAULT_TENANT_MANAGEMENT_CREATE_FORM_PROPS, + objectExtensionContributors.createForm, + createFormContributors, + ); + mergeWithDefaultProps( + extensions.editFormProps, + DEFAULT_TENANT_MANAGEMENT_EDIT_FORM_PROPS, + objectExtensionContributors.editForm, + editFormContributors, + ); + }), + mapTo(true), + ); + } +} diff --git a/npm/ng-packs/packages/tenant-management/src/lib/guards/index.ts b/npm/ng-packs/packages/tenant-management/src/lib/guards/index.ts new file mode 100644 index 0000000000..480f14c40b --- /dev/null +++ b/npm/ng-packs/packages/tenant-management/src/lib/guards/index.ts @@ -0,0 +1 @@ +export * from './extensions.guard'; diff --git a/npm/ng-packs/packages/tenant-management/src/lib/models/config-options.ts b/npm/ng-packs/packages/tenant-management/src/lib/models/config-options.ts new file mode 100644 index 0000000000..306162f6c5 --- /dev/null +++ b/npm/ng-packs/packages/tenant-management/src/lib/models/config-options.ts @@ -0,0 +1,37 @@ +import { + CreateFormPropContributorCallback, + EditFormPropContributorCallback, + EntityActionContributorCallback, + EntityPropContributorCallback, + ToolbarActionContributorCallback, +} from '@abp/ng.theme.shared/extensions'; +import { eTenantManagementComponents } from '../enums/components'; +import { TenantCreateDto, TenantDto, TenantUpdateDto } from '../proxy/models'; + +export type TenantManagementEntityActionContributors = Partial<{ + [eTenantManagementComponents.Tenants]: EntityActionContributorCallback[]; +}>; + +export type TenantManagementToolbarActionContributors = Partial<{ + [eTenantManagementComponents.Tenants]: ToolbarActionContributorCallback[]; +}>; + +export type TenantManagementEntityPropContributors = Partial<{ + [eTenantManagementComponents.Tenants]: EntityPropContributorCallback[]; +}>; + +export type TenantManagementCreateFormPropContributors = Partial<{ + [eTenantManagementComponents.Tenants]: CreateFormPropContributorCallback[]; +}>; + +export type TenantManagementEditFormPropContributors = Partial<{ + [eTenantManagementComponents.Tenants]: EditFormPropContributorCallback[]; +}>; + +export interface TenantManagementConfigOptions { + entityActionContributors?: TenantManagementEntityActionContributors; + toolbarActionContributors?: TenantManagementToolbarActionContributors; + entityPropContributors?: TenantManagementEntityPropContributors; + createFormPropContributors?: TenantManagementCreateFormPropContributors; + editFormPropContributors?: TenantManagementEditFormPropContributors; +} diff --git a/npm/ng-packs/packages/tenant-management/src/lib/models/index.ts b/npm/ng-packs/packages/tenant-management/src/lib/models/index.ts index 580d09d215..2385684df7 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/models/index.ts +++ b/npm/ng-packs/packages/tenant-management/src/lib/models/index.ts @@ -1 +1,2 @@ export * from './tenant-management'; +export * from './config-options'; diff --git a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management-routing.module.ts b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management-routing.module.ts index a02f63b635..65666ea5a9 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management-routing.module.ts +++ b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management-routing.module.ts @@ -9,13 +9,14 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { TenantsComponent } from './components/tenants/tenants.component'; import { eTenantManagementComponents } from './enums/components'; +import { TenantManagementExtensionsGuard } from './guards'; const routes: Routes = [ { path: '', redirectTo: 'tenants', pathMatch: 'full' }, { path: '', component: DynamicLayoutComponent, - canActivate: [AuthGuard, PermissionGuard], + canActivate: [AuthGuard, PermissionGuard, TenantManagementExtensionsGuard], children: [ { path: 'tenants', diff --git a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts index 035b658363..e349b9b820 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts +++ b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts @@ -1,13 +1,23 @@ import { CoreModule, LazyModuleFactory } from '@abp/ng.core'; import { FeatureManagementModule } from '@abp/ng.feature-management'; import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { UiExtensionsModule } from '@abp/ng.theme.shared/extensions'; import { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core'; import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; import { NgxValidateCoreModule } from '@ngx-validate/core'; import { NgxsModule } from '@ngxs/store'; import { TenantsComponent } from './components/tenants/tenants.component'; +import { TenantManagementExtensionsGuard } from './guards/extensions.guard'; +import { TenantManagementConfigOptions } from './models/config-options'; import { TenantManagementState } from './states/tenant-management.state'; import { TenantManagementRoutingModule } from './tenant-management-routing.module'; +import { + TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS, + TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, +} from './tokens/extensions.token'; @NgModule({ declarations: [TenantsComponent], @@ -20,17 +30,44 @@ import { TenantManagementRoutingModule } from './tenant-management-routing.modul ThemeSharedModule, NgbDropdownModule, FeatureManagementModule, + UiExtensionsModule, ], }) export class TenantManagementModule { - static forChild(): ModuleWithProviders { + static forChild( + options: TenantManagementConfigOptions = {}, + ): ModuleWithProviders { return { ngModule: TenantManagementModule, - providers: [], + providers: [ + { + provide: TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS, + useValue: options.entityActionContributors, + }, + { + provide: TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, + useValue: options.toolbarActionContributors, + }, + { + provide: TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS, + useValue: options.entityPropContributors, + }, + { + provide: TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS, + useValue: options.createFormPropContributors, + }, + { + provide: TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS, + useValue: options.editFormPropContributors, + }, + TenantManagementExtensionsGuard, + ], }; } - static forLazy(): NgModuleFactory { - return new LazyModuleFactory(TenantManagementModule.forChild()); + static forLazy( + options: TenantManagementConfigOptions = {}, + ): NgModuleFactory { + return new LazyModuleFactory(TenantManagementModule.forChild(options)); } } diff --git a/npm/ng-packs/packages/tenant-management/src/lib/tokens/extensions.token.ts b/npm/ng-packs/packages/tenant-management/src/lib/tokens/extensions.token.ts new file mode 100644 index 0000000000..fb79b126d9 --- /dev/null +++ b/npm/ng-packs/packages/tenant-management/src/lib/tokens/extensions.token.ts @@ -0,0 +1,74 @@ +import { + CreateFormPropContributorCallback, + EditFormPropContributorCallback, + EntityActionContributorCallback, + EntityPropContributorCallback, + ToolbarActionContributorCallback, +} from '@abp/ng.theme.shared/extensions'; +import { InjectionToken } from '@angular/core'; +import { DEFAULT_TENANTS_ENTITY_ACTIONS } from '../defaults/default-tenants-entity-actions'; +import { DEFAULT_TENANTS_ENTITY_PROPS } from '../defaults/default-tenants-entity-props'; +import { + DEFAULT_TENANTS_CREATE_FORM_PROPS, + DEFAULT_TENANTS_EDIT_FORM_PROPS, +} from '../defaults/default-tenants-form-props'; +import { DEFAULT_TENANTS_TOOLBAR_ACTIONS } from '../defaults/default-tenants-toolbar-actions'; +import { eTenantManagementComponents } from '../enums/components'; +import { TenantCreateDto, TenantDto, TenantUpdateDto } from '../proxy/models'; + +export const DEFAULT_TENANT_MANAGEMENT_ENTITY_ACTIONS = { + [eTenantManagementComponents.Tenants]: DEFAULT_TENANTS_ENTITY_ACTIONS, +}; + +export const DEFAULT_TENANT_MANAGEMENT_TOOLBAR_ACTIONS = { + [eTenantManagementComponents.Tenants]: DEFAULT_TENANTS_TOOLBAR_ACTIONS, +}; + +export const DEFAULT_TENANT_MANAGEMENT_ENTITY_PROPS = { + [eTenantManagementComponents.Tenants]: DEFAULT_TENANTS_ENTITY_PROPS, +}; + +export const DEFAULT_TENANT_MANAGEMENT_CREATE_FORM_PROPS = { + [eTenantManagementComponents.Tenants]: DEFAULT_TENANTS_CREATE_FORM_PROPS, +}; + +export const DEFAULT_TENANT_MANAGEMENT_EDIT_FORM_PROPS = { + [eTenantManagementComponents.Tenants]: DEFAULT_TENANTS_EDIT_FORM_PROPS, +}; + +export const TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS = new InjectionToken( + 'TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS', +); + +export const TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS = new InjectionToken( + 'TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS', +); + +export const TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS = new InjectionToken( + 'TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS', +); + +export const TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS = new InjectionToken( + 'TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS', +); + +export const TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS = new InjectionToken( + 'TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS', +); + +// Fix for TS4023 -> https://github.com/microsoft/TypeScript/issues/9944#issuecomment-254693497 +type EntityActionContributors = Partial<{ + [eTenantManagementComponents.Tenants]: EntityActionContributorCallback[]; +}>; +type ToolbarActionContributors = Partial<{ + [eTenantManagementComponents.Tenants]: ToolbarActionContributorCallback[]; +}>; +type EntityPropContributors = Partial<{ + [eTenantManagementComponents.Tenants]: EntityPropContributorCallback[]; +}>; +type CreateFormPropContributors = Partial<{ + [eTenantManagementComponents.Tenants]: CreateFormPropContributorCallback[]; +}>; +type EditFormPropContributors = Partial<{ + [eTenantManagementComponents.Tenants]: EditFormPropContributorCallback[]; +}>; diff --git a/npm/ng-packs/packages/tenant-management/src/lib/tokens/index.ts b/npm/ng-packs/packages/tenant-management/src/lib/tokens/index.ts new file mode 100644 index 0000000000..33233400a2 --- /dev/null +++ b/npm/ng-packs/packages/tenant-management/src/lib/tokens/index.ts @@ -0,0 +1 @@ +export * from './extensions.token'; diff --git a/npm/ng-packs/packages/tenant-management/src/public-api.ts b/npm/ng-packs/packages/tenant-management/src/public-api.ts index 42961055b1..e012a538b4 100644 --- a/npm/ng-packs/packages/tenant-management/src/public-api.ts +++ b/npm/ng-packs/packages/tenant-management/src/public-api.ts @@ -1,8 +1,10 @@ -export * from './lib/tenant-management.module'; export * from './lib/actions'; export * from './lib/components'; export * from './lib/enums'; +export * from './lib/guards'; export * from './lib/models'; +export * from './lib/proxy'; export * from './lib/services'; export * from './lib/states'; -export * from './lib/proxy'; +export * from './lib/tenant-management.module'; +export * from './lib/tokens'; diff --git a/npm/ng-packs/packages/theme-basic/package.json b/npm/ng-packs/packages/theme-basic/package.json index 401d4acd0e..f763fc3f6a 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": "4.0.0", + "version": "4.0.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~4.0.0", + "@abp/ng.theme.shared": "~4.0.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 199b686bab..6c364e3fd6 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": "4.0.0", + "version": "4.0.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~4.0.0", + "@abp/ng.core": "~4.0.1", "@fortawesome/fontawesome-free": "^5.14.0", "@ng-bootstrap/ng-bootstrap": "^7.0.0", "@ngx-validate/core": "^0.0.13", diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts index 7dc81ab6b9..38ebee5352 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts @@ -68,22 +68,22 @@ export class NgxDatatableListDirective implements OnChanges, OnDestroy, OnInit { } private subscribeToQuery() { - this.querySubscription.add( - this.list.query$.subscribe(() => { - if (this.list.page !== this.table.offset) this.table.offset = this.list.page; - }), - ); + if (!this.querySubscription.closed) this.querySubscription.unsubscribe(); + + this.querySubscription = this.list.query$.subscribe(() => { + const offset = this.list.page; + if (this.table.offset !== offset) this.table.offset = offset; + }); } ngOnChanges({ list }: SimpleChanges) { + this.subscribeToQuery(); + if (!list.firstChange) return; const { maxResultCount, page } = list.currentValue; this.table.limit = maxResultCount; this.table.offset = page; - - this.querySubscription.unsubscribe(); - this.subscribeToQuery(); } ngOnDestroy() { diff --git a/npm/ng-packs/tslint.json b/npm/ng-packs/tslint.json index dc5de80dab..d02d83c23b 100644 --- a/npm/ng-packs/tslint.json +++ b/npm/ng-packs/tslint.json @@ -3,10 +3,7 @@ "rulesDirectory": ["node_modules/codelyzer"], "rules": { "align": { - "options": [ - "parameters", - "statements" - ] + "options": ["parameters", "statements"] }, "array-type": false, "contextual-lifecycle": true, @@ -15,9 +12,7 @@ "eofline": true, "import-spacing": true, "indent": { - "options": [ - "spaces" - ] + "options": ["spaces"] }, "max-line-length": [true, 140], "no-consecutive-blank-lines": false, @@ -77,13 +72,8 @@ "import-blacklist": [true, "rxjs/Rx"], "interface-over-type-literal": true, "interface-name": [true, "never-prefix"], - "member-access": [false], - "member-ordering": [ - true, - { - "order": ["static-field", "instance-field", "static-method", "instance-method"] - } - ], + "member-access": false, + "member-ordering": false, "no-arg": true, "no-bitwise": true, "no-conflicting-lifecycle": true, @@ -134,9 +124,17 @@ "unified-signatures": true, "use-lifecycle-interface": true, "use-pipe-transform-interface": true, - "variable-name": false, - "prefer-for-of": false - , "whitespace": { + "variable-name": { + "options": [ + "ban-keywords", + "check-format", + "allow-leading-underscore", + "allow-pascal-case", + "allow-snake-case" + ] + }, + "prefer-for-of": true, + "whitespace": { "options": [ "check-branch", "check-decl", @@ -146,5 +144,5 @@ "check-typecast" ] } -} + } } diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index de7fe96b12..e2ea0edf2e 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -2,12 +2,12 @@ # yarn lockfile v1 -"@abp/ng.core@~4.0.0-rc.5": - version "4.0.0-rc.5" - resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-4.0.0-rc.5.tgz#30db71708801ea7f04307577d9482d0bb3b386b0" - integrity sha512-5l7KwxCw21rbYO1dWvpIrUU77EfM68XuNm2s+3bLpckUgsanf2zjdpYPbXgzpeAedsUtjrTjCZLqlRj9n4iwKQ== +"@abp/ng.core@~4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-4.0.0.tgz#51f0df8273e1666cfea04a7dc1f2a17b737f1572" + integrity sha512-GbdxxyoDxzhYGX76Evk/dhTbAbJejntB5fvlyIbcNq8MyGTRW0wnIVjBoKwzHaG3qWY6TIEQSjfviLjgneJyPw== dependencies: - "@abp/utils" "^4.0.0-rc.4" + "@abp/utils" "^4.0.0-rc.5" "@angular/localize" "~10.0.10" "@ngxs/router-plugin" "^3.7.0" "@ngxs/store" "^3.7.0" @@ -18,73 +18,73 @@ ts-toolbelt "6.15.4" tslib "^2.0.0" -"@abp/ng.feature-management@~4.0.0-rc.5": - version "4.0.0-rc.5" - resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-4.0.0-rc.5.tgz#0755c8f0eb69c339cc511f2e599786c8fcb2d369" - integrity sha512-owYYnnNqQOCq9MepTVjn8lWTw1Uux+hj83QZ47Mfz3IKP/EuYz2cS3rkqIw5MQ4hPfQZxBwu5qM2vhbFLt0K4w== +"@abp/ng.feature-management@~4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-4.0.0.tgz#9a9aac80996d6654bfe7808a194465c746c7f8ee" + integrity sha512-qDzX3Ene5YyFiO9wNMfH8YMTUHAl/t3AUNwYLzpjiz8llYYn+vvd0wv/+zKRL7oiMf0xsNW6QGZQKhKWXUOyyA== dependencies: - "@abp/ng.theme.shared" "~4.0.0-rc.5" + "@abp/ng.theme.shared" "~4.0.0" tslib "^2.0.0" -"@abp/ng.identity@~4.0.0-rc.5": - version "4.0.0-rc.5" - resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-4.0.0-rc.5.tgz#f67fc5ed50be150e9229754b27506121817c03a7" - integrity sha512-NsJ5BJaqLuSt+tutN258FeBLFlfLQvoGI1etn8+1CoBd+uYGEcIYNVkJj/i+8q/ShMU7LoZ9Di/G4NjxU8WFig== +"@abp/ng.identity@~4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-4.0.0.tgz#b76fcec5144588af82f5062c8b899e4104732ff0" + integrity sha512-rBRNuArZ3qFpC4Z8CffsOxirRZZYNb1jljRNBdVx3Qn9T+TgQolalRBQXD1ZjQm7OTMd+YaLr6KY9FHmO+NnZw== dependencies: - "@abp/ng.permission-management" "~4.0.0-rc.5" - "@abp/ng.theme.shared" "~4.0.0-rc.5" + "@abp/ng.permission-management" "~4.0.0" + "@abp/ng.theme.shared" "~4.0.0" tslib "^2.0.0" -"@abp/ng.permission-management@~4.0.0-rc.5": - version "4.0.0-rc.5" - resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-4.0.0-rc.5.tgz#04ea4199074ff2689d7a429ba482c8a7b37abb0a" - integrity sha512-T+iAhDFXaYW9/JRPPWXqm1lbHv5F0uTR/Ij5yiCpFgrbDu5bPVf/0WR7y8VyMn5lZ+1gWa+o9VievBnlKVRwHg== +"@abp/ng.permission-management@~4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-4.0.0.tgz#8b6dbd7ac24a9f6948db826dfb6102e773ac26fa" + integrity sha512-Io6jUfvzpaKwhGmsRRkQM+61JS8QaIbrWzjkw7vYXLLgIgWMrMHoIBotRoAZDpHt9kiCMhgBP5Ul3SZhaib0Ug== dependencies: - "@abp/ng.theme.shared" "~4.0.0-rc.5" + "@abp/ng.theme.shared" "~4.0.0" tslib "^2.0.0" -"@abp/ng.schematics@~3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-3.3.1.tgz#ca5588574a6bbe10551d828ae0940b2004bdd3b2" - integrity sha512-1altHVHSWL0RLXKcsVltSqAUdiqxFItBYReR8YniJT7nQNOy+QeWiwX6H+Epv79K3m0Uf7G1d3fH1uCM6Qqq4A== +"@abp/ng.schematics@~4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-4.0.0.tgz#779bac96bc33ff5979bd003fc74ad1c38d4a1829" + integrity sha512-5+jx1+80W5DW21dJQLItwNGjFHcGDEw93cD4hAbNXPzCCwm28x4zyx5gJY7+lb9D07bne5FGKSfnKbbK3DuSWw== dependencies: - "@angular-devkit/core" "~10.0.3" - "@angular-devkit/schematics" "~10.0.3" + "@angular-devkit/core" "~11.0.2" + "@angular-devkit/schematics" "~11.0.2" got "^11.5.2" jsonc-parser "^2.3.0" typescript "~3.9.2" -"@abp/ng.setting-management@~4.0.0-rc.5": - version "4.0.0-rc.5" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-4.0.0-rc.5.tgz#32837b5e0b49b1596dc9ebc708a14fb3250eda36" - integrity sha512-LSCoXvE22HbKrEAQ92rbvfotCL5pyZSG1wJImJg8zLOkw0i83mT7tycjDeBdixz4FkbYF4nhbuPwaz3GDbxL0Q== +"@abp/ng.setting-management@~4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-4.0.0.tgz#31abf72da2e424de5db4876baa705c3026900d11" + integrity sha512-1yX/J2ZEwiKXslLRP5eclrv8H4CLz46GdwToarjtCEi2N33FWc4HugjFiBQVhcPGsgziORPayGiLib6fGFtOOQ== dependencies: - "@abp/ng.theme.shared" "~4.0.0-rc.5" + "@abp/ng.theme.shared" "~4.0.0" tslib "^2.0.0" -"@abp/ng.tenant-management@~4.0.0-rc.5": - version "4.0.0-rc.5" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-4.0.0-rc.5.tgz#7090459579be7ec800990ed8e843e7a2258536d2" - integrity sha512-axBvi9XroErRTQEVvmkn3bTabH44yAqoFxuTaVjRADuBYO6DG/CREWlfDgeDtMLPQHFxCl705OMh0gU56+AFdw== +"@abp/ng.tenant-management@~4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-4.0.0.tgz#2c8633c28fc393953c2aff0f301e23a54f9317fc" + integrity sha512-zNKEAQZmt/r6ixuhhiIWYP1O6yh0aN1v1gVqiblmOBFGvVPYvOjVPg54fms2B/GMdQj1iIhutQp838VUC1czIg== dependencies: - "@abp/ng.feature-management" "~4.0.0-rc.5" - "@abp/ng.theme.shared" "~4.0.0-rc.5" + "@abp/ng.feature-management" "~4.0.0" + "@abp/ng.theme.shared" "~4.0.0" tslib "^2.0.0" -"@abp/ng.theme.basic@~4.0.0-rc.5": - version "4.0.0-rc.5" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-4.0.0-rc.5.tgz#01e3dd7ec3d315004860e438bad7ac4459e66cb5" - integrity sha512-NHrTB5Ck7j5xeVfN3vNiom9HlcwzqF1mQc1bZUc73/wiN8LttrnnMdRuW5vclS6BbJP2p2Ziw/fq8d9hw7GJ1w== +"@abp/ng.theme.basic@~4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-4.0.0.tgz#ef69555cc481e003768761b24a6ff880ae73d05a" + integrity sha512-KHaIWqrqsNz6iJT8Z/mNzJ4Ayt1ORURoAVPXbXcuc4/k80DboSfkqq3S+8XgRcJDr7WBC+204Bb/tovDy2G+AQ== dependencies: - "@abp/ng.theme.shared" "~4.0.0-rc.5" + "@abp/ng.theme.shared" "~4.0.0" tslib "^2.0.0" -"@abp/ng.theme.shared@~4.0.0-rc.5": - version "4.0.0-rc.5" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-4.0.0-rc.5.tgz#0493c98cfd378750b5a5ea8d0ea25da0fceec908" - integrity sha512-TmgKgt+yo6i3jiO05UlpIWt5nvv3pIsVHsLKaj7qXFWvQXKZxSeGiy1/9fhmdwFyV2Lq7c+FuoihDWCuGukDhw== +"@abp/ng.theme.shared@~4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-4.0.0.tgz#6b881677091090aca3e22c53d7297c94806f5927" + integrity sha512-ii7oCZVq4TgrTs8QgM/KzCX+f108a+VYxMM+CJ8G1VRlb/TQYxvIryrJlDhs69zXDteNP5fkn/N6frAUQ+OinA== dependencies: - "@abp/ng.core" "~4.0.0-rc.5" + "@abp/ng.core" "~4.0.0" "@fortawesome/fontawesome-free" "^5.14.0" "@ng-bootstrap/ng-bootstrap" "^7.0.0" "@ngx-validate/core" "^0.0.13" @@ -93,10 +93,10 @@ chart.js "^2.9.3" tslib "^2.0.0" -"@abp/utils@^4.0.0-rc.4": - version "4.0.0-rc.4" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0-rc.4.tgz#99573069c7dac8751e3124e60511a11a169df565" - integrity sha512-z1l6A07+rSgf7fzI/UTlZv1cJBiIUa0kpEvhcChe7mwlHB7oQ3SlGjZX37kzOqWcOusfMOANPuVulkZLSCOB/w== +"@abp/utils@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" + integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== dependencies: just-compare "^1.3.0" @@ -244,7 +244,7 @@ "@angular-devkit/core" "11.0.2" rxjs "6.6.3" -"@angular-devkit/core@10.0.8", "@angular-devkit/core@~10.0.3": +"@angular-devkit/core@10.0.8": version "10.0.8" resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.0.8.tgz#ca4ea9f464cfa7ff17e2dab3bcd4c59da1ea450d" integrity sha512-d9S8VQuqaYg0c/Y2kl/MtICtZ+UKlH5bLm8y2fb2WfSL4A5XIqMGdEVxzFSiR0b1Bnt4NAoQMcBec1blHAqMSQ== @@ -288,6 +288,17 @@ rxjs "6.6.3" source-map "0.7.3" +"@angular-devkit/core@11.0.4", "@angular-devkit/core@~11.0.2": + version "11.0.4" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-11.0.4.tgz#4128b90bdb4d1803bb246d177b7cc6df64a0fec1" + integrity sha512-LgTvhZ3Ycz0QvNAH/zO1rpQQDn2JN8u9/Awy1gW/XeCC3FYmxeOj/2JCFzlKah3wJv16nMqro5WTppHt8Y++PA== + dependencies: + ajv "6.12.6" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.6.3" + source-map "0.7.3" + "@angular-devkit/core@8.3.29", "@angular-devkit/core@^8.0.3": version "8.3.29" resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-8.3.29.tgz#3477edd6458653f83e6d78684b100c1bef81382f" @@ -312,7 +323,7 @@ rxjs "6.6.2" symbol-observable "1.2.0" -"@angular-devkit/schematics@10.0.8", "@angular-devkit/schematics@~10.0.3": +"@angular-devkit/schematics@10.0.8": version "10.0.8" resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-10.0.8.tgz#6064d6323a1c9abc195e67ae4c88e373ce36b5e2" integrity sha512-p2PjvrExuzOe/azyOEcBeIgwZIk4D6VeLkJf/KVjhXOVu13pjIXHX7/qWl+IYnbtj3NZGHqXM5Cr8nxsJNIMpw== @@ -347,6 +358,15 @@ "@angular-devkit/core" "8.3.29" rxjs "6.4.0" +"@angular-devkit/schematics@~11.0.2": + version "11.0.4" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-11.0.4.tgz#0680fe038c66f2ecc3c69a293505fb02b694ce80" + integrity sha512-fFC7qW9A1bFAZgpCfkezBA4WCRzfVFgOzwPpyt65rgSrzw0+EeHjcrUIcXlhyOXAFrTHtA9oLCfEeSjSx5HBEA== + dependencies: + "@angular-devkit/core" "11.0.4" + ora "5.1.0" + rxjs "6.6.3" + "@angular/animations@~11.0.0": version "11.0.2" resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-11.0.2.tgz#c095ab0aed4491732c81a894987bcab1a854ab15" diff --git a/npm/packs/anchor-js/package.json b/npm/packs/anchor-js/package.json index dc6ad0ad98..d0c9e9c5c2 100644 --- a/npm/packs/anchor-js/package.json +++ b/npm/packs/anchor-js/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/anchor-js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.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 eaba0b4eb7..7fd15f2807 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": "4.0.0", + "version": "4.0.1", "name": "@abp/aspnetcore.mvc.ui.theme.basic", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared": "~4.0.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 3a032e6520..86fcedfc6a 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": "4.0.0", + "version": "4.0.1", "name": "@abp/aspnetcore.mvc.ui.theme.shared", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui": "~4.0.0", - "@abp/bootstrap": "~4.0.0", - "@abp/bootstrap-datepicker": "~4.0.0", - "@abp/datatables.net-bs4": "~4.0.0", - "@abp/font-awesome": "~4.0.0", - "@abp/jquery-form": "~4.0.0", - "@abp/jquery-validation-unobtrusive": "~4.0.0", - "@abp/lodash": "~4.0.0", - "@abp/luxon": "~4.0.0", - "@abp/malihu-custom-scrollbar-plugin": "~4.0.0", - "@abp/select2": "~4.0.0", - "@abp/sweetalert": "~4.0.0", - "@abp/timeago": "~4.0.0", - "@abp/toastr": "~4.0.0" + "@abp/aspnetcore.mvc.ui": "~4.0.1", + "@abp/bootstrap": "~4.0.1", + "@abp/bootstrap-datepicker": "~4.0.1", + "@abp/datatables.net-bs4": "~4.0.1", + "@abp/font-awesome": "~4.0.1", + "@abp/jquery-form": "~4.0.1", + "@abp/jquery-validation-unobtrusive": "~4.0.1", + "@abp/lodash": "~4.0.1", + "@abp/luxon": "~4.0.1", + "@abp/malihu-custom-scrollbar-plugin": "~4.0.1", + "@abp/select2": "~4.0.1", + "@abp/sweetalert": "~4.0.1", + "@abp/timeago": "~4.0.1", + "@abp/toastr": "~4.0.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/aspnetcore.mvc.ui/package-lock.json b/npm/packs/aspnetcore.mvc.ui/package-lock.json index 59ccb9ca7e..ac4f52859e 100644 --- a/npm/packs/aspnetcore.mvc.ui/package-lock.json +++ b/npm/packs/aspnetcore.mvc.ui/package-lock.json @@ -1,6 +1,6 @@ { "name": "@abp/aspnetcore.mvc.ui", - "version": "4.0.0", + "version": "4.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/npm/packs/aspnetcore.mvc.ui/package.json b/npm/packs/aspnetcore.mvc.ui/package.json index d3712594aa..fb07222a2b 100644 --- a/npm/packs/aspnetcore.mvc.ui/package.json +++ b/npm/packs/aspnetcore.mvc.ui/package.json @@ -1,5 +1,5 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/aspnetcore.mvc.ui", "publishConfig": { "access": "public" diff --git a/npm/packs/blogging/package.json b/npm/packs/blogging/package.json index da6a260ea1..307db1c47b 100644 --- a/npm/packs/blogging/package.json +++ b/npm/packs/blogging/package.json @@ -1,14 +1,14 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/blogging", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~4.0.0", - "@abp/owl.carousel": "~4.0.0", - "@abp/prismjs": "~4.0.0", - "@abp/tui-editor": "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared": "~4.0.1", + "@abp/owl.carousel": "~4.0.1", + "@abp/prismjs": "~4.0.1", + "@abp/tui-editor": "~4.0.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/bootstrap-datepicker/package.json b/npm/packs/bootstrap-datepicker/package.json index 607da22462..efbf38d82d 100644 --- a/npm/packs/bootstrap-datepicker/package.json +++ b/npm/packs/bootstrap-datepicker/package.json @@ -1,5 +1,5 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/bootstrap-datepicker", "publishConfig": { "access": "public" diff --git a/npm/packs/bootstrap/package.json b/npm/packs/bootstrap/package.json index 052168a47a..164375ffaf 100644 --- a/npm/packs/bootstrap/package.json +++ b/npm/packs/bootstrap/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/bootstrap", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.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 18d108ee2b..1e62ba6da9 100644 --- a/npm/packs/chart.js/package.json +++ b/npm/packs/chart.js/package.json @@ -1,5 +1,5 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/chart.js", "publishConfig": { "access": "public" diff --git a/npm/packs/clipboard/package.json b/npm/packs/clipboard/package.json index 48f3fc10cf..176ff586c2 100644 --- a/npm/packs/clipboard/package.json +++ b/npm/packs/clipboard/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/clipboard", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.1", "clipboard": "^2.0.6" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/cms-kit/package.json b/npm/packs/cms-kit/package.json new file mode 100644 index 0000000000..12a5faa97c --- /dev/null +++ b/npm/packs/cms-kit/package.json @@ -0,0 +1,11 @@ +{ + "version": "4.0.0", + "name": "@abp/cms-kit", + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@abp/star-rating-svg": "~4.0.0" + }, + "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" +} diff --git a/npm/packs/codemirror/package.json b/npm/packs/codemirror/package.json index facbe7241c..ceda7bb494 100644 --- a/npm/packs/codemirror/package.json +++ b/npm/packs/codemirror/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/codemirror", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.1", "codemirror": "^5.54.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/core/package.json b/npm/packs/core/package.json index 3bbe796bc7..5493768e63 100644 --- a/npm/packs/core/package.json +++ b/npm/packs/core/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/core", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/utils": "^4.0.0" + "@abp/utils": "^4.0.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/cropperjs/package.json b/npm/packs/cropperjs/package.json index a89dd89352..da2629c365 100644 --- a/npm/packs/cropperjs/package.json +++ b/npm/packs/cropperjs/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/cropperjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.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 e27531a5ae..c2c84234d0 100644 --- a/npm/packs/datatables.net-bs4/package.json +++ b/npm/packs/datatables.net-bs4/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/datatables.net-bs4", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/datatables.net": "~4.0.0", + "@abp/datatables.net": "~4.0.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 50d3245fe0..f49c15f784 100644 --- a/npm/packs/datatables.net/package.json +++ b/npm/packs/datatables.net/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/datatables.net", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~4.0.0", + "@abp/jquery": "~4.0.1", "datatables.net": "^1.10.21" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/docs/package.json b/npm/packs/docs/package.json index dbc7bffb1e..e5fd967521 100644 --- a/npm/packs/docs/package.json +++ b/npm/packs/docs/package.json @@ -1,15 +1,15 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/docs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/anchor-js": "~4.0.0", - "@abp/clipboard": "~4.0.0", - "@abp/malihu-custom-scrollbar-plugin": "~4.0.0", - "@abp/popper.js": "~4.0.0", - "@abp/prismjs": "~4.0.0" + "@abp/anchor-js": "~4.0.1", + "@abp/clipboard": "~4.0.1", + "@abp/malihu-custom-scrollbar-plugin": "~4.0.1", + "@abp/popper.js": "~4.0.1", + "@abp/prismjs": "~4.0.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/flag-icon-css/package.json b/npm/packs/flag-icon-css/package.json index b0b73c7ec4..69f07920b3 100644 --- a/npm/packs/flag-icon-css/package.json +++ b/npm/packs/flag-icon-css/package.json @@ -1,5 +1,5 @@ { - "version": "4.0.0", + "version": "4.0.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 7120776f07..7db4a80fce 100644 --- a/npm/packs/font-awesome/package.json +++ b/npm/packs/font-awesome/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/font-awesome", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.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 f890b4da10..3f8c6aaac8 100644 --- a/npm/packs/highlight.js/package.json +++ b/npm/packs/highlight.js/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/highlight.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0" + "@abp/core": "~4.0.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/jquery-form/package.json b/npm/packs/jquery-form/package.json index 30ade9ebc7..6eeb78f25d 100644 --- a/npm/packs/jquery-form/package.json +++ b/npm/packs/jquery-form/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/jquery-form", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~4.0.0", + "@abp/jquery": "~4.0.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 60780713a7..92f3b4e571 100644 --- a/npm/packs/jquery-validation-unobtrusive/package.json +++ b/npm/packs/jquery-validation-unobtrusive/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/jquery-validation-unobtrusive", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery-validation": "~4.0.0", + "@abp/jquery-validation": "~4.0.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 c5d96f3d5e..e4f78dd5db 100644 --- a/npm/packs/jquery-validation/package.json +++ b/npm/packs/jquery-validation/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/jquery-validation", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~4.0.0", + "@abp/jquery": "~4.0.1", "jquery-validation": "^1.19.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery/package.json b/npm/packs/jquery/package.json index 493150330a..8d3316ed73 100644 --- a/npm/packs/jquery/package.json +++ b/npm/packs/jquery/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/jquery", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.1", "jquery": "~3.5.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jstree/package.json b/npm/packs/jstree/package.json index 950d4e8f55..bd0766a57c 100644 --- a/npm/packs/jstree/package.json +++ b/npm/packs/jstree/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/jstree", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~4.0.0", + "@abp/jquery": "~4.0.1", "jstree": "^3.3.9" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/lodash/package.json b/npm/packs/lodash/package.json index 29be673bc9..69214392f1 100644 --- a/npm/packs/lodash/package.json +++ b/npm/packs/lodash/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/lodash", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.1", "lodash": "^4.17.15" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/luxon/package.json b/npm/packs/luxon/package.json index 0f4a8548ec..27779e5122 100644 --- a/npm/packs/luxon/package.json +++ b/npm/packs/luxon/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/luxon", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.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 be752ffa7b..c65aa9806c 100644 --- a/npm/packs/malihu-custom-scrollbar-plugin/package.json +++ b/npm/packs/malihu-custom-scrollbar-plugin/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/malihu-custom-scrollbar-plugin", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.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 cb3255555f..55479874e6 100644 --- a/npm/packs/markdown-it/package.json +++ b/npm/packs/markdown-it/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/markdown-it", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.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 81130048b1..2c7bf04f4f 100644 --- a/npm/packs/owl.carousel/package.json +++ b/npm/packs/owl.carousel/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/owl.carousel", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.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 dd1bc2d1cf..97d767386c 100644 --- a/npm/packs/popper.js/package.json +++ b/npm/packs/popper.js/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/popper.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.1", "popper.js": "^1.16.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/prismjs/package.json b/npm/packs/prismjs/package.json index d581f07282..2d76b4aeca 100644 --- a/npm/packs/prismjs/package.json +++ b/npm/packs/prismjs/package.json @@ -1,12 +1,12 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/prismjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~4.0.0", - "@abp/core": "~4.0.0", + "@abp/clipboard": "~4.0.1", + "@abp/core": "~4.0.1", "prismjs": "^1.20.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/select2/package.json b/npm/packs/select2/package.json index 521e59fc57..7f7d6e4af6 100644 --- a/npm/packs/select2/package.json +++ b/npm/packs/select2/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/select2", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.1", "select2": "^4.0.13" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/signalr/package.json b/npm/packs/signalr/package.json index c5a88ddea8..cb7667d65f 100644 --- a/npm/packs/signalr/package.json +++ b/npm/packs/signalr/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/signalr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.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 33c3ea8a08..11a4b7b2f9 100644 --- a/npm/packs/star-rating-svg/package.json +++ b/npm/packs/star-rating-svg/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/star-rating-svg", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~4.0.0", + "@abp/jquery": "~4.0.1", "star-rating-svg": "^3.5.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/sweetalert/package.json b/npm/packs/sweetalert/package.json index 5ec3cadc58..780def0cac 100644 --- a/npm/packs/sweetalert/package.json +++ b/npm/packs/sweetalert/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/sweetalert", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.1", "sweetalert": "^2.1.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/timeago/package.json b/npm/packs/timeago/package.json index b3afc7d1cb..09da25854c 100644 --- a/npm/packs/timeago/package.json +++ b/npm/packs/timeago/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/timeago", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~4.0.0", + "@abp/jquery": "~4.0.1", "timeago": "^1.6.7" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/toastr/package.json b/npm/packs/toastr/package.json index ab941b6852..7c6bb2cf3f 100644 --- a/npm/packs/toastr/package.json +++ b/npm/packs/toastr/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/toastr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~4.0.0", + "@abp/jquery": "~4.0.1", "toastr": "^2.1.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/tui-editor/package.json b/npm/packs/tui-editor/package.json index 51966559a5..da6596ca99 100644 --- a/npm/packs/tui-editor/package.json +++ b/npm/packs/tui-editor/package.json @@ -1,14 +1,14 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/tui-editor", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/codemirror": "~4.0.0", - "@abp/highlight.js": "~4.0.0", - "@abp/jquery": "~4.0.0", - "@abp/markdown-it": "~4.0.0", + "@abp/codemirror": "~4.0.1", + "@abp/highlight.js": "~4.0.1", + "@abp/jquery": "~4.0.1", + "@abp/markdown-it": "~4.0.1", "tui-editor": "^1.4.10" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/uppy/package.json b/npm/packs/uppy/package.json index 4c9c10d33e..295a087d49 100644 --- a/npm/packs/uppy/package.json +++ b/npm/packs/uppy/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/uppy", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~4.0.0", + "@abp/core": "~4.0.1", "uppy": "^1.16.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index 9717390a73..f85649e2c4 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -1,6 +1,6 @@ { "name": "@abp/utils", - "version": "4.0.0", + "version": "4.0.1", "scripts": { "prepublish": "yarn install --ignore-scripts && node prepublish.js", "ng": "ng", diff --git a/npm/packs/vee-validate/package.json b/npm/packs/vee-validate/package.json index 0106e23ee6..73b000f497 100644 --- a/npm/packs/vee-validate/package.json +++ b/npm/packs/vee-validate/package.json @@ -1,11 +1,11 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/vee-validate", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/vue": "~4.0.0", + "@abp/vue": "~4.0.1", "vee-validate": "~3.4.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/virtual-file-explorer/package.json b/npm/packs/virtual-file-explorer/package.json index 3bbb704b1e..e7810eb9b2 100644 --- a/npm/packs/virtual-file-explorer/package.json +++ b/npm/packs/virtual-file-explorer/package.json @@ -1,12 +1,12 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/virtual-file-explorer", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~4.0.0", - "@abp/prismjs": "~4.0.0" + "@abp/clipboard": "~4.0.1", + "@abp/prismjs": "~4.0.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/vue/package.json b/npm/packs/vue/package.json index dafa4d9dd2..5d566a6535 100644 --- a/npm/packs/vue/package.json +++ b/npm/packs/vue/package.json @@ -1,5 +1,5 @@ { - "version": "4.0.0", + "version": "4.0.1", "name": "@abp/vue", "publishConfig": { "access": "public" diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 7425f6666d..5b4ff7218e 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -12,13 +12,13 @@ }, "private": true, "dependencies": { - "@abp/ng.components": "~4.0.0", - "@abp/ng.core": "~4.0.0", - "@abp/ng.identity": "~4.0.0", - "@abp/ng.setting-management": "~4.0.0", - "@abp/ng.tenant-management": "~4.0.0", - "@abp/ng.theme.basic": "~4.0.0", - "@abp/ng.theme.shared": "~4.0.0", + "@abp/ng.components": "~4.0.1", + "@abp/ng.core": "~4.0.1", + "@abp/ng.identity": "~4.0.1", + "@abp/ng.setting-management": "~4.0.1", + "@abp/ng.tenant-management": "~4.0.1", + "@abp/ng.theme.basic": "~4.0.1", + "@abp/ng.theme.shared": "~4.0.1", "@angular/animations": "~11.0.0", "@angular/common": "~11.0.0", "@angular/compiler": "~11.0.0", @@ -32,7 +32,7 @@ "zone.js": "~0.10.2" }, "devDependencies": { - "@abp/ng.schematics": "~4.0.0", + "@abp/ng.schematics": "~4.0.1", "@angular-devkit/build-angular": "~0.1100.0", "@angular/cli": "~11.0.0", "@angular/compiler-cli": "~11.0.0", 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 a7cfa2e681..9bc6fb7092 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 @@ -9,8 +9,8 @@ - - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj index 4d5b4c51f7..6bf2650ea9 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj @@ -23,7 +23,7 @@ - + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json index baa9fe753e..d2a6a9831e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json @@ -5,4 +5,4 @@ "Welcome": "Welcome", "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io." } -} \ No newline at end of file +} diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj index ae9ce4c4d2..c6639bbad7 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj @@ -25,7 +25,7 @@ - +
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations.csproj index 5803aac5a0..1d2226ee96 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations.csproj @@ -12,7 +12,7 @@
- +
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj index 2c2569a98c..6e3ccfa0ff 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj @@ -12,9 +12,9 @@ - - - + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj index 05d08e875c..d374c7feb6 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj @@ -12,8 +12,8 @@ - - + + 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 78834de93d..1171b7f8a6 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": "^4.0.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.0.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 f7a02a45f4..33139bd99e 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@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.0.tgz#b1822cf5bbc0f6eeb414ebd0877f6d1115a81fe7" - integrity sha512-yYXQkEnNhftzm+ZI8d3VFMlV5UuLNTMQQwV2eZ8tJfstUQrKV9bVd3+NdDOr3AkvcD8D7mvMFeBuoMYteL5kLQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.1.tgz#ce8e3eb830a8e8f9eecb1a3b3bd70c2832fdf15e" + integrity sha512-w+ZG8Ewx9wWfbvRC2MAjJl+rXuXSHLhhGOiJTk68unWLNziDtNQzcSXG/Z5c1hA+acJSGqDoJGEGs4FVM136og== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.0.tgz#ba896056e9df5ac58e108df96996fbb2ca7a1a15" - integrity sha512-3RNn6VrNA+cqnPBoSbiCazN05cC2rhcRFMMxkEte+LImGbGOsxc4MflzHg5On1ExCGdqko8Axbw/ydy44Ak4Hw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.0.0" - "@abp/bootstrap" "~4.0.0" - "@abp/bootstrap-datepicker" "~4.0.0" - "@abp/datatables.net-bs4" "~4.0.0" - "@abp/font-awesome" "~4.0.0" - "@abp/jquery-form" "~4.0.0" - "@abp/jquery-validation-unobtrusive" "~4.0.0" - "@abp/lodash" "~4.0.0" - "@abp/luxon" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/select2" "~4.0.0" - "@abp/sweetalert" "~4.0.0" - "@abp/timeago" "~4.0.0" - "@abp/toastr" "~4.0.0" - -"@abp/aspnetcore.mvc.ui@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.0.tgz#68502177a05f6ce7191a09b06a18c5b5dfab425d" - integrity sha512-tYHUWMwnwInrGSzC/OdN6bH/VHZEz5DP3rx2U6fcb0I5GvvRdQZxVgUvmWn6DeMA3PG10Gra4SfkhZqRQq9rjQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.1.tgz#cd9d0eb11309c597dffd26277cd1bd7c5b1e0e2f" + integrity sha512-QGoCN/my0eAfa4tx5ytDxArIoz2i58jFFVUGso1Lekn54JvSt+WLz2p3uyTGatZ03Bp9836elhFnIopn12WvBw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.0.1" + "@abp/bootstrap" "~4.0.1" + "@abp/bootstrap-datepicker" "~4.0.1" + "@abp/datatables.net-bs4" "~4.0.1" + "@abp/font-awesome" "~4.0.1" + "@abp/jquery-form" "~4.0.1" + "@abp/jquery-validation-unobtrusive" "~4.0.1" + "@abp/lodash" "~4.0.1" + "@abp/luxon" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/select2" "~4.0.1" + "@abp/sweetalert" "~4.0.1" + "@abp/timeago" "~4.0.1" + "@abp/toastr" "~4.0.1" + +"@abp/aspnetcore.mvc.ui@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.1.tgz#6490c147a56e4f7055d2ca77f20baf1f60f56867" + integrity sha512-4B3icJrlpuZgMaX52ninyaenH7zLwepePEscDrLaFY9wyonKpZ2zh+xplnyM6vjNd+PhErWuA2+ssCswFhrJ3A== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,145 +43,145 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/bootstrap-datepicker@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.0.tgz#cdbd2c388c6d7ce8c6d72443038975063e6c6d02" - integrity sha512-hauH8VhpC8cxv1wCR6bVBcNqZepftdBXxEVID7TSAqgNyWjm/CrJqWLI+A0nnkG3IHoIm9D22iF47BamuYHptw== +"@abp/bootstrap-datepicker@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.1.tgz#aad891263edff66f816e003ba4fa7f8acfe8e0b6" + integrity sha512-S0oaVZmXsDcOJLAyoGY0TvP/7bZx0GHIbU9BIhIL2Wl74HYaokjkTr6/IleIek9YeiF2vm9FkrUP1dKH/4f7Gg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.0.tgz#04174f18055f76f936e6fb73e5ff71ffa08a8528" - integrity sha512-Tmr0yoSWg7XHl02X5wv04CvYcL8KCpX8u6YGJj31jRZxUTeCvs5ETXlepOWcdxPQqi/4olXv5B9GEz5S9l5nZA== +"@abp/bootstrap@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.1.tgz#3e41bdf9b3e9f8c497b9fafe22a4851d0401b31b" + integrity sha512-GoSaNWvswRHVoUrq7xClFQYtwqIlyS/vp/TdY+j5FFZP7ud89+ZGpdNqYqq5l9/6aaYa7v4b9mNTZ/1JRzAOYg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.0.tgz#65e76c697e62162717e0edabf7edacc4228e682a" - integrity sha512-xcTTBFjLFZ9Trv2x9Y/c3XKezIx+x3MTXUD98QJPf1aR7T43TE/tLHRxdRfW3R8ka0O1wmlYshpkaw5pYNsj5w== +"@abp/core@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.1.tgz#1df32bc058f45571605670ca81c226a1bd87400c" + integrity sha512-8UT5lwqV/luVG/SxePSTD2FRbZXwXv3cZJKjw+gpBjhD0slWrh51XEOHsM8ciTuhcvV/tsqVU9nXckDMdO58fw== dependencies: - "@abp/utils" "^4.0.0" + "@abp/utils" "^4.0.1" -"@abp/datatables.net-bs4@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.0.tgz#fe737e054f6ba35e787a1cda185af2788ef86d39" - integrity sha512-mz7xZdzX1nlFyX7vNzB5w3RkqZ0IHrPgsXGOB7OCTKMRshDFVH2O51Oy4qoLDOXoTVeahHtR9v8thEWFR1SnZg== +"@abp/datatables.net-bs4@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.1.tgz#7538baad0eff24eca7f4246d020852f83139f645" + integrity sha512-S52jNPF4if68V+P/33NrtGPJXf6xrqgyZzz9b7qBR7HuUm3Nsn7bAslh3JNduNec/sFuE4Utl/xsFHZNjBWEog== dependencies: - "@abp/datatables.net" "~4.0.0" + "@abp/datatables.net" "~4.0.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.0.tgz#88ae5f1a6068fba55927e59f113686508e9553cb" - integrity sha512-JYTfMA1zlBNGiQHAiZiTj5ka6B6vq5k2jqsoLHup4pD9jpKwKRBGtltVsWoEnetd9eEbp4SaV/FCuh3RzmV6Pw== +"@abp/datatables.net@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.1.tgz#eb89716a37351c41b5bccfc2db88fc7ceb991a26" + integrity sha512-APFLui0w8MqsBWqP/K0QkT5cBq5SsWiqMaIGTXQKinMVLV597sUszrlhe1ISU2PqeD7iX6pCZNNOTI1NEUn9/Q== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" datatables.net "^1.10.21" -"@abp/font-awesome@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.0.tgz#6e1e4bd1175a0b8d3b095e215c07e66ad0e42e19" - integrity sha512-kHfZ45UMDWSRk1gTV/BwVfSoXksJ9UlnD3SelTGeAkvbDqtDllqlp9y6c3qQcmZUE348Xl4hDTkU8upZwswCFQ== +"@abp/font-awesome@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.1.tgz#8a9d83b2c2adfcd5abcbd9c31c315460d44a321e" + integrity sha512-+6+m/DKMnfkeQiWUsMlB6Da8u6yREyN2oQYGYhSRAK8419ym8RHHrqKJv2AClI4iLq2ppHZj8WF84+SeoCekRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.0.tgz#3afb41eb16d62e32c31a29c6a866f634a5a20cd8" - integrity sha512-cQq8PgzHfpK9/LxmjlnMsDn85wWvEOqjyLaepHFpTTt0341auSgXNwhp7rk71AUHD1lP3c9ALctmqu+gYmh9ag== +"@abp/jquery-form@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.1.tgz#6dc1922b2800dd635f20881a82e08104a1dd1bb5" + integrity sha512-JMBZYu/MI/GjaLTBOMB5iv8cagnLpReDULNC3r6tLNNqB1R8f3Cg1T7nF4YCuU9SYMqis1P/AuE4oEh+4rQdAQ== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#c3674d2b01b3c524de4c3fac1c6ae3657857ee7b" - integrity sha512-OGibIdw0ogjp6VQIebHM7OtMT36pjLKRrOHyCVpTmQ7NzDODV5ptG83vOnt5nFG0y9XFrOt8cnHrrd+K1Bpo/Q== +"@abp/jquery-validation-unobtrusive@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.1.tgz#4142ca31c0830fe24a1467e8cf13b55ba9d7c1dd" + integrity sha512-rdSRTcdKCHmarbrVgmPYdTiJ0G/aFKd+dr0krO7fALPTuQKChbDnHOO4/JvQSc+cd9faxa8c6ZWvlHdsof23tQ== dependencies: - "@abp/jquery-validation" "~4.0.0" + "@abp/jquery-validation" "~4.0.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.0.tgz#0a101937f89ff398317142b5271fa9a1de6571c2" - integrity sha512-4nzvhAktEINpQ2H+Hy7TOxxojTmTEm5dBTbHs1vbCWUuF0OTpouZWbMZDESdP0ZbjXcQ+vhwuM4e/pm/PeaHyQ== +"@abp/jquery-validation@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.1.tgz#74e7d795468c6986f2db15662631fcd4f67c679e" + integrity sha512-FX26aQCsMBdVWAJb7S37Lt7KoHAEHoYguh/qfZIARCpOYOOWvxfDz1wTrmADUkqdillqEiCeD/Imj8bYH9Faaw== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-validation "^1.19.2" -"@abp/jquery@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.0.tgz#00d24678b573bcc2fb14d8337ccdbf697b59d43b" - integrity sha512-gXLK97IvAZriNlG8e0qJcd7MvnpshJQURb4lg8VYibD7Fs/OBeHSAWM2Adgi3H9DnQL8XEUlWf487FSz4RC/Yg== +"@abp/jquery@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.1.tgz#aa554accb16600fd586c3a4f088040cd26d0bde8" + integrity sha512-MtiRKOLyjEWux+whPP3+zwPbpj8or756JtgjnwOTDB9tp9HLCYUaskt+oalYPvob24nDZcNu2RnMALYdCVhZAQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" jquery "~3.5.1" -"@abp/lodash@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.0.tgz#fe76d09517f6b1adf18edde94a31e13b003329dc" - integrity sha512-uitn5uYlb9xShRtV4AFOgp3lu2kADGMD4+a4fy5r4umlPM2uuMo0wMhzyYdBIG64JC5oNaqAzOwZyhhnn+HGJg== +"@abp/lodash@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.1.tgz#ec261ccaab8a70d5b32a8a7c22387e48936d38d4" + integrity sha512-Dav1QKbBeGR4VVbHHe1s3OEzN7wnb9K/vwzHrWmtO8D1Q5Z3433xjNmgL5VQ9gfxXqooSfEO4gAovZklMDHDew== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" lodash "^4.17.15" -"@abp/luxon@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.0.tgz#d9357e4fb422b6e18ebe897a86a4c4bc6fbe6858" - integrity sha512-tiE6NiSa4El88SVotxfmmpceINLz8MruaO/e/U3QjJEHjRoqlv0UBrM/x5Xz92c7ZIvL0Y4QvWNISeDg6/oqIQ== +"@abp/luxon@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.1.tgz#a540750b1605dbac856ce9c2e776c2fecf6392f9" + integrity sha512-eRumVB7UIf2XH6OZVUTvcKw0A/OSAfYV59fM+Wc4dAkNcmsNZI0gD1o0AigSGNCxTV6v+W2bFrsuooSqK99Y0Q== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.0.tgz#972acf26f5eaa4bf9b8991cbe7c19fd0005d94e2" - integrity sha512-SpUo1CfppKzkE6Rb880pgB7oQ83Mkjsi0o6eE4r4gkF5hfzkuCXOmNjTYKfQIkE4n3G9QQd+8AAN/4xj4DiDrA== +"@abp/malihu-custom-scrollbar-plugin@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.1.tgz#0a556423a67b6c949e32ffcacd72256dea6c31ee" + integrity sha512-YTwYpnQ1ZrON70gvJcnNZRwB3Ze4olGcXxiPvmRgSHbGJkSnHYJiP6PvsN1F3HDFukAJ/iUu+WwEe8OBwlyLXA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.0.tgz#8fdf4c5e18f4093ee4e073dab950cf7aa9b2a540" - integrity sha512-XeXahcDMczdkZdP07yhQriIvbi1N5meeSGTnFyZX+bNTGzUOarPcuNYZ6Mcl3351HcyESHzuJbKbsk3RB1kGeg== +"@abp/select2@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.1.tgz#8983e7b5c3afb862f08b2730b70e59d726e9b5d5" + integrity sha512-WdzY2hvsS/4vz/VXpxq2muSzzE8ggchiIrICy/WKchJxL9L08DM796t6aE6rEl9wucY8XEzzWrPOVqAjJmnXFA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" select2 "^4.0.13" -"@abp/sweetalert@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.0.tgz#0d93e92e95c6855aef7e19532a7513a078ece216" - integrity sha512-y3XtZqnUVZuQohpRO1ImyBZXhtrm4H+typIL/9VgcnlvQjBTyIaiwDmU8j07Bb2rKJKe0prVkkVARO7OnjOS5A== +"@abp/sweetalert@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.1.tgz#0088610915ad6db0a140b77832a37c10066eb4ee" + integrity sha512-t4/44oQCMngSjVqmeRWXwrXa/pRKc3CEpyyTiGIXki4dWJ21j0ePCw2l3rvOJWnpoCznhxa/UGxLfRfK1NEzRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" sweetalert "^2.1.2" -"@abp/timeago@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.0.tgz#509cd8a84cd94c2644824b0c3af10c8fff6de2dc" - integrity sha512-90jzLYJusYTPwMbak1+XkXE85OPOXPpysRbL28KQwl7WLNBm8wx6IEoVZOHvOrpYscYdyeWhZCgILSJ8DR3a2Q== +"@abp/timeago@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.1.tgz#8c161645534eb1f62fe4607450acf7345729e711" + integrity sha512-PsPobV79U2qzVY+WBsmJM1ohSF4jqcLnL4/7qyJvxlb1WwbCl1F5D4cpiJP4zsM4clPW4mbSsiauMNp+HTNKEA== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" timeago "^1.6.7" -"@abp/toastr@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.0.tgz#06e28665cb7f6eefee3f69c985dd2b3f86cd7f1d" - integrity sha512-YL1fahVpDszhwpnRTN87GCP523Mkaw42ApT2A/hZuBdwRzP/u5GwRfng0i/uhdYXCMkTKuHmaHnRyqhGiv7nfQ== +"@abp/toastr@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.1.tgz#ecb6f6193b7edc3150d0614ab9457472baf1cce3" + integrity sha512-bTTz0O8zj7fMhdoummP2Ed5Z8SJTmR6svzNchBXNDrnRAcDQvTihPTcg0UpH8BEDFczbLowq09CG2A/RMSJoug== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" toastr "^2.1.4" -"@abp/utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" - integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== +"@abp/utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.1.tgz#9a4cb420266c49d8084776bd31c86681d4d4d125" + integrity sha512-nI2ZyaNpvohr75p8jeMPWze+hX+mV47EHI+Zloa4GgGmJqrULdG71kYh45R+jGmMTbQL6huaXGnpz4gNF9TGyQ== dependencies: just-compare "^1.3.0" diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj index 66da2cc100..333268deef 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj @@ -34,8 +34,8 @@ - - + + 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 ea7cc2f166..5e131b4756 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": "^4.0.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.0.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 3b9cfcf521..12469bed18 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@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.0.tgz#b1822cf5bbc0f6eeb414ebd0877f6d1115a81fe7" - integrity sha512-yYXQkEnNhftzm+ZI8d3VFMlV5UuLNTMQQwV2eZ8tJfstUQrKV9bVd3+NdDOr3AkvcD8D7mvMFeBuoMYteL5kLQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.1.tgz#ce8e3eb830a8e8f9eecb1a3b3bd70c2832fdf15e" + integrity sha512-w+ZG8Ewx9wWfbvRC2MAjJl+rXuXSHLhhGOiJTk68unWLNziDtNQzcSXG/Z5c1hA+acJSGqDoJGEGs4FVM136og== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.0.tgz#ba896056e9df5ac58e108df96996fbb2ca7a1a15" - integrity sha512-3RNn6VrNA+cqnPBoSbiCazN05cC2rhcRFMMxkEte+LImGbGOsxc4MflzHg5On1ExCGdqko8Axbw/ydy44Ak4Hw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.0.0" - "@abp/bootstrap" "~4.0.0" - "@abp/bootstrap-datepicker" "~4.0.0" - "@abp/datatables.net-bs4" "~4.0.0" - "@abp/font-awesome" "~4.0.0" - "@abp/jquery-form" "~4.0.0" - "@abp/jquery-validation-unobtrusive" "~4.0.0" - "@abp/lodash" "~4.0.0" - "@abp/luxon" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/select2" "~4.0.0" - "@abp/sweetalert" "~4.0.0" - "@abp/timeago" "~4.0.0" - "@abp/toastr" "~4.0.0" - -"@abp/aspnetcore.mvc.ui@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.0.tgz#68502177a05f6ce7191a09b06a18c5b5dfab425d" - integrity sha512-tYHUWMwnwInrGSzC/OdN6bH/VHZEz5DP3rx2U6fcb0I5GvvRdQZxVgUvmWn6DeMA3PG10Gra4SfkhZqRQq9rjQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.1.tgz#cd9d0eb11309c597dffd26277cd1bd7c5b1e0e2f" + integrity sha512-QGoCN/my0eAfa4tx5ytDxArIoz2i58jFFVUGso1Lekn54JvSt+WLz2p3uyTGatZ03Bp9836elhFnIopn12WvBw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.0.1" + "@abp/bootstrap" "~4.0.1" + "@abp/bootstrap-datepicker" "~4.0.1" + "@abp/datatables.net-bs4" "~4.0.1" + "@abp/font-awesome" "~4.0.1" + "@abp/jquery-form" "~4.0.1" + "@abp/jquery-validation-unobtrusive" "~4.0.1" + "@abp/lodash" "~4.0.1" + "@abp/luxon" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/select2" "~4.0.1" + "@abp/sweetalert" "~4.0.1" + "@abp/timeago" "~4.0.1" + "@abp/toastr" "~4.0.1" + +"@abp/aspnetcore.mvc.ui@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.1.tgz#6490c147a56e4f7055d2ca77f20baf1f60f56867" + integrity sha512-4B3icJrlpuZgMaX52ninyaenH7zLwepePEscDrLaFY9wyonKpZ2zh+xplnyM6vjNd+PhErWuA2+ssCswFhrJ3A== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,145 +43,145 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/bootstrap-datepicker@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.0.tgz#cdbd2c388c6d7ce8c6d72443038975063e6c6d02" - integrity sha512-hauH8VhpC8cxv1wCR6bVBcNqZepftdBXxEVID7TSAqgNyWjm/CrJqWLI+A0nnkG3IHoIm9D22iF47BamuYHptw== +"@abp/bootstrap-datepicker@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.1.tgz#aad891263edff66f816e003ba4fa7f8acfe8e0b6" + integrity sha512-S0oaVZmXsDcOJLAyoGY0TvP/7bZx0GHIbU9BIhIL2Wl74HYaokjkTr6/IleIek9YeiF2vm9FkrUP1dKH/4f7Gg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.0.tgz#04174f18055f76f936e6fb73e5ff71ffa08a8528" - integrity sha512-Tmr0yoSWg7XHl02X5wv04CvYcL8KCpX8u6YGJj31jRZxUTeCvs5ETXlepOWcdxPQqi/4olXv5B9GEz5S9l5nZA== +"@abp/bootstrap@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.1.tgz#3e41bdf9b3e9f8c497b9fafe22a4851d0401b31b" + integrity sha512-GoSaNWvswRHVoUrq7xClFQYtwqIlyS/vp/TdY+j5FFZP7ud89+ZGpdNqYqq5l9/6aaYa7v4b9mNTZ/1JRzAOYg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.0.tgz#65e76c697e62162717e0edabf7edacc4228e682a" - integrity sha512-xcTTBFjLFZ9Trv2x9Y/c3XKezIx+x3MTXUD98QJPf1aR7T43TE/tLHRxdRfW3R8ka0O1wmlYshpkaw5pYNsj5w== +"@abp/core@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.1.tgz#1df32bc058f45571605670ca81c226a1bd87400c" + integrity sha512-8UT5lwqV/luVG/SxePSTD2FRbZXwXv3cZJKjw+gpBjhD0slWrh51XEOHsM8ciTuhcvV/tsqVU9nXckDMdO58fw== dependencies: - "@abp/utils" "^4.0.0" + "@abp/utils" "^4.0.1" -"@abp/datatables.net-bs4@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.0.tgz#fe737e054f6ba35e787a1cda185af2788ef86d39" - integrity sha512-mz7xZdzX1nlFyX7vNzB5w3RkqZ0IHrPgsXGOB7OCTKMRshDFVH2O51Oy4qoLDOXoTVeahHtR9v8thEWFR1SnZg== +"@abp/datatables.net-bs4@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.1.tgz#7538baad0eff24eca7f4246d020852f83139f645" + integrity sha512-S52jNPF4if68V+P/33NrtGPJXf6xrqgyZzz9b7qBR7HuUm3Nsn7bAslh3JNduNec/sFuE4Utl/xsFHZNjBWEog== dependencies: - "@abp/datatables.net" "~4.0.0" + "@abp/datatables.net" "~4.0.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.0.tgz#88ae5f1a6068fba55927e59f113686508e9553cb" - integrity sha512-JYTfMA1zlBNGiQHAiZiTj5ka6B6vq5k2jqsoLHup4pD9jpKwKRBGtltVsWoEnetd9eEbp4SaV/FCuh3RzmV6Pw== +"@abp/datatables.net@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.1.tgz#eb89716a37351c41b5bccfc2db88fc7ceb991a26" + integrity sha512-APFLui0w8MqsBWqP/K0QkT5cBq5SsWiqMaIGTXQKinMVLV597sUszrlhe1ISU2PqeD7iX6pCZNNOTI1NEUn9/Q== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" datatables.net "^1.10.21" -"@abp/font-awesome@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.0.tgz#6e1e4bd1175a0b8d3b095e215c07e66ad0e42e19" - integrity sha512-kHfZ45UMDWSRk1gTV/BwVfSoXksJ9UlnD3SelTGeAkvbDqtDllqlp9y6c3qQcmZUE348Xl4hDTkU8upZwswCFQ== +"@abp/font-awesome@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.1.tgz#8a9d83b2c2adfcd5abcbd9c31c315460d44a321e" + integrity sha512-+6+m/DKMnfkeQiWUsMlB6Da8u6yREyN2oQYGYhSRAK8419ym8RHHrqKJv2AClI4iLq2ppHZj8WF84+SeoCekRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.0.tgz#3afb41eb16d62e32c31a29c6a866f634a5a20cd8" - integrity sha512-cQq8PgzHfpK9/LxmjlnMsDn85wWvEOqjyLaepHFpTTt0341auSgXNwhp7rk71AUHD1lP3c9ALctmqu+gYmh9ag== +"@abp/jquery-form@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.1.tgz#6dc1922b2800dd635f20881a82e08104a1dd1bb5" + integrity sha512-JMBZYu/MI/GjaLTBOMB5iv8cagnLpReDULNC3r6tLNNqB1R8f3Cg1T7nF4YCuU9SYMqis1P/AuE4oEh+4rQdAQ== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#c3674d2b01b3c524de4c3fac1c6ae3657857ee7b" - integrity sha512-OGibIdw0ogjp6VQIebHM7OtMT36pjLKRrOHyCVpTmQ7NzDODV5ptG83vOnt5nFG0y9XFrOt8cnHrrd+K1Bpo/Q== +"@abp/jquery-validation-unobtrusive@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.1.tgz#4142ca31c0830fe24a1467e8cf13b55ba9d7c1dd" + integrity sha512-rdSRTcdKCHmarbrVgmPYdTiJ0G/aFKd+dr0krO7fALPTuQKChbDnHOO4/JvQSc+cd9faxa8c6ZWvlHdsof23tQ== dependencies: - "@abp/jquery-validation" "~4.0.0" + "@abp/jquery-validation" "~4.0.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.0.tgz#0a101937f89ff398317142b5271fa9a1de6571c2" - integrity sha512-4nzvhAktEINpQ2H+Hy7TOxxojTmTEm5dBTbHs1vbCWUuF0OTpouZWbMZDESdP0ZbjXcQ+vhwuM4e/pm/PeaHyQ== +"@abp/jquery-validation@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.1.tgz#74e7d795468c6986f2db15662631fcd4f67c679e" + integrity sha512-FX26aQCsMBdVWAJb7S37Lt7KoHAEHoYguh/qfZIARCpOYOOWvxfDz1wTrmADUkqdillqEiCeD/Imj8bYH9Faaw== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-validation "^1.19.2" -"@abp/jquery@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.0.tgz#00d24678b573bcc2fb14d8337ccdbf697b59d43b" - integrity sha512-gXLK97IvAZriNlG8e0qJcd7MvnpshJQURb4lg8VYibD7Fs/OBeHSAWM2Adgi3H9DnQL8XEUlWf487FSz4RC/Yg== +"@abp/jquery@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.1.tgz#aa554accb16600fd586c3a4f088040cd26d0bde8" + integrity sha512-MtiRKOLyjEWux+whPP3+zwPbpj8or756JtgjnwOTDB9tp9HLCYUaskt+oalYPvob24nDZcNu2RnMALYdCVhZAQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" jquery "~3.5.1" -"@abp/lodash@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.0.tgz#fe76d09517f6b1adf18edde94a31e13b003329dc" - integrity sha512-uitn5uYlb9xShRtV4AFOgp3lu2kADGMD4+a4fy5r4umlPM2uuMo0wMhzyYdBIG64JC5oNaqAzOwZyhhnn+HGJg== +"@abp/lodash@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.1.tgz#ec261ccaab8a70d5b32a8a7c22387e48936d38d4" + integrity sha512-Dav1QKbBeGR4VVbHHe1s3OEzN7wnb9K/vwzHrWmtO8D1Q5Z3433xjNmgL5VQ9gfxXqooSfEO4gAovZklMDHDew== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" lodash "^4.17.15" -"@abp/luxon@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.0.tgz#d9357e4fb422b6e18ebe897a86a4c4bc6fbe6858" - integrity sha512-tiE6NiSa4El88SVotxfmmpceINLz8MruaO/e/U3QjJEHjRoqlv0UBrM/x5Xz92c7ZIvL0Y4QvWNISeDg6/oqIQ== +"@abp/luxon@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.1.tgz#a540750b1605dbac856ce9c2e776c2fecf6392f9" + integrity sha512-eRumVB7UIf2XH6OZVUTvcKw0A/OSAfYV59fM+Wc4dAkNcmsNZI0gD1o0AigSGNCxTV6v+W2bFrsuooSqK99Y0Q== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.0.tgz#972acf26f5eaa4bf9b8991cbe7c19fd0005d94e2" - integrity sha512-SpUo1CfppKzkE6Rb880pgB7oQ83Mkjsi0o6eE4r4gkF5hfzkuCXOmNjTYKfQIkE4n3G9QQd+8AAN/4xj4DiDrA== +"@abp/malihu-custom-scrollbar-plugin@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.1.tgz#0a556423a67b6c949e32ffcacd72256dea6c31ee" + integrity sha512-YTwYpnQ1ZrON70gvJcnNZRwB3Ze4olGcXxiPvmRgSHbGJkSnHYJiP6PvsN1F3HDFukAJ/iUu+WwEe8OBwlyLXA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.0.tgz#8fdf4c5e18f4093ee4e073dab950cf7aa9b2a540" - integrity sha512-XeXahcDMczdkZdP07yhQriIvbi1N5meeSGTnFyZX+bNTGzUOarPcuNYZ6Mcl3351HcyESHzuJbKbsk3RB1kGeg== +"@abp/select2@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.1.tgz#8983e7b5c3afb862f08b2730b70e59d726e9b5d5" + integrity sha512-WdzY2hvsS/4vz/VXpxq2muSzzE8ggchiIrICy/WKchJxL9L08DM796t6aE6rEl9wucY8XEzzWrPOVqAjJmnXFA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" select2 "^4.0.13" -"@abp/sweetalert@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.0.tgz#0d93e92e95c6855aef7e19532a7513a078ece216" - integrity sha512-y3XtZqnUVZuQohpRO1ImyBZXhtrm4H+typIL/9VgcnlvQjBTyIaiwDmU8j07Bb2rKJKe0prVkkVARO7OnjOS5A== +"@abp/sweetalert@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.1.tgz#0088610915ad6db0a140b77832a37c10066eb4ee" + integrity sha512-t4/44oQCMngSjVqmeRWXwrXa/pRKc3CEpyyTiGIXki4dWJ21j0ePCw2l3rvOJWnpoCznhxa/UGxLfRfK1NEzRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" sweetalert "^2.1.2" -"@abp/timeago@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.0.tgz#509cd8a84cd94c2644824b0c3af10c8fff6de2dc" - integrity sha512-90jzLYJusYTPwMbak1+XkXE85OPOXPpysRbL28KQwl7WLNBm8wx6IEoVZOHvOrpYscYdyeWhZCgILSJ8DR3a2Q== +"@abp/timeago@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.1.tgz#8c161645534eb1f62fe4607450acf7345729e711" + integrity sha512-PsPobV79U2qzVY+WBsmJM1ohSF4jqcLnL4/7qyJvxlb1WwbCl1F5D4cpiJP4zsM4clPW4mbSsiauMNp+HTNKEA== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" timeago "^1.6.7" -"@abp/toastr@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.0.tgz#06e28665cb7f6eefee3f69c985dd2b3f86cd7f1d" - integrity sha512-YL1fahVpDszhwpnRTN87GCP523Mkaw42ApT2A/hZuBdwRzP/u5GwRfng0i/uhdYXCMkTKuHmaHnRyqhGiv7nfQ== +"@abp/toastr@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.1.tgz#ecb6f6193b7edc3150d0614ab9457472baf1cce3" + integrity sha512-bTTz0O8zj7fMhdoummP2Ed5Z8SJTmR6svzNchBXNDrnRAcDQvTihPTcg0UpH8BEDFczbLowq09CG2A/RMSJoug== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" toastr "^2.1.4" -"@abp/utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" - integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== +"@abp/utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.1.tgz#9a4cb420266c49d8084776bd31c86681d4d4d125" + integrity sha512-nI2ZyaNpvohr75p8jeMPWze+hX+mV47EHI+Zloa4GgGmJqrULdG71kYh45R+jGmMTbQL6huaXGnpz4gNF9TGyQ== dependencies: just-compare "^1.3.0" diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj index 47dbf3b45b..57347aca90 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj @@ -18,7 +18,7 @@ - + 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 78834de93d..1171b7f8a6 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": "^4.0.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.0.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 3b9cfcf521..12469bed18 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@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.0.tgz#b1822cf5bbc0f6eeb414ebd0877f6d1115a81fe7" - integrity sha512-yYXQkEnNhftzm+ZI8d3VFMlV5UuLNTMQQwV2eZ8tJfstUQrKV9bVd3+NdDOr3AkvcD8D7mvMFeBuoMYteL5kLQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.1.tgz#ce8e3eb830a8e8f9eecb1a3b3bd70c2832fdf15e" + integrity sha512-w+ZG8Ewx9wWfbvRC2MAjJl+rXuXSHLhhGOiJTk68unWLNziDtNQzcSXG/Z5c1hA+acJSGqDoJGEGs4FVM136og== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.0.tgz#ba896056e9df5ac58e108df96996fbb2ca7a1a15" - integrity sha512-3RNn6VrNA+cqnPBoSbiCazN05cC2rhcRFMMxkEte+LImGbGOsxc4MflzHg5On1ExCGdqko8Axbw/ydy44Ak4Hw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.0.0" - "@abp/bootstrap" "~4.0.0" - "@abp/bootstrap-datepicker" "~4.0.0" - "@abp/datatables.net-bs4" "~4.0.0" - "@abp/font-awesome" "~4.0.0" - "@abp/jquery-form" "~4.0.0" - "@abp/jquery-validation-unobtrusive" "~4.0.0" - "@abp/lodash" "~4.0.0" - "@abp/luxon" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/select2" "~4.0.0" - "@abp/sweetalert" "~4.0.0" - "@abp/timeago" "~4.0.0" - "@abp/toastr" "~4.0.0" - -"@abp/aspnetcore.mvc.ui@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.0.tgz#68502177a05f6ce7191a09b06a18c5b5dfab425d" - integrity sha512-tYHUWMwnwInrGSzC/OdN6bH/VHZEz5DP3rx2U6fcb0I5GvvRdQZxVgUvmWn6DeMA3PG10Gra4SfkhZqRQq9rjQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.1.tgz#cd9d0eb11309c597dffd26277cd1bd7c5b1e0e2f" + integrity sha512-QGoCN/my0eAfa4tx5ytDxArIoz2i58jFFVUGso1Lekn54JvSt+WLz2p3uyTGatZ03Bp9836elhFnIopn12WvBw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.0.1" + "@abp/bootstrap" "~4.0.1" + "@abp/bootstrap-datepicker" "~4.0.1" + "@abp/datatables.net-bs4" "~4.0.1" + "@abp/font-awesome" "~4.0.1" + "@abp/jquery-form" "~4.0.1" + "@abp/jquery-validation-unobtrusive" "~4.0.1" + "@abp/lodash" "~4.0.1" + "@abp/luxon" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/select2" "~4.0.1" + "@abp/sweetalert" "~4.0.1" + "@abp/timeago" "~4.0.1" + "@abp/toastr" "~4.0.1" + +"@abp/aspnetcore.mvc.ui@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.1.tgz#6490c147a56e4f7055d2ca77f20baf1f60f56867" + integrity sha512-4B3icJrlpuZgMaX52ninyaenH7zLwepePEscDrLaFY9wyonKpZ2zh+xplnyM6vjNd+PhErWuA2+ssCswFhrJ3A== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,145 +43,145 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/bootstrap-datepicker@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.0.tgz#cdbd2c388c6d7ce8c6d72443038975063e6c6d02" - integrity sha512-hauH8VhpC8cxv1wCR6bVBcNqZepftdBXxEVID7TSAqgNyWjm/CrJqWLI+A0nnkG3IHoIm9D22iF47BamuYHptw== +"@abp/bootstrap-datepicker@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.1.tgz#aad891263edff66f816e003ba4fa7f8acfe8e0b6" + integrity sha512-S0oaVZmXsDcOJLAyoGY0TvP/7bZx0GHIbU9BIhIL2Wl74HYaokjkTr6/IleIek9YeiF2vm9FkrUP1dKH/4f7Gg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.0.tgz#04174f18055f76f936e6fb73e5ff71ffa08a8528" - integrity sha512-Tmr0yoSWg7XHl02X5wv04CvYcL8KCpX8u6YGJj31jRZxUTeCvs5ETXlepOWcdxPQqi/4olXv5B9GEz5S9l5nZA== +"@abp/bootstrap@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.1.tgz#3e41bdf9b3e9f8c497b9fafe22a4851d0401b31b" + integrity sha512-GoSaNWvswRHVoUrq7xClFQYtwqIlyS/vp/TdY+j5FFZP7ud89+ZGpdNqYqq5l9/6aaYa7v4b9mNTZ/1JRzAOYg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.0.tgz#65e76c697e62162717e0edabf7edacc4228e682a" - integrity sha512-xcTTBFjLFZ9Trv2x9Y/c3XKezIx+x3MTXUD98QJPf1aR7T43TE/tLHRxdRfW3R8ka0O1wmlYshpkaw5pYNsj5w== +"@abp/core@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.1.tgz#1df32bc058f45571605670ca81c226a1bd87400c" + integrity sha512-8UT5lwqV/luVG/SxePSTD2FRbZXwXv3cZJKjw+gpBjhD0slWrh51XEOHsM8ciTuhcvV/tsqVU9nXckDMdO58fw== dependencies: - "@abp/utils" "^4.0.0" + "@abp/utils" "^4.0.1" -"@abp/datatables.net-bs4@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.0.tgz#fe737e054f6ba35e787a1cda185af2788ef86d39" - integrity sha512-mz7xZdzX1nlFyX7vNzB5w3RkqZ0IHrPgsXGOB7OCTKMRshDFVH2O51Oy4qoLDOXoTVeahHtR9v8thEWFR1SnZg== +"@abp/datatables.net-bs4@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.1.tgz#7538baad0eff24eca7f4246d020852f83139f645" + integrity sha512-S52jNPF4if68V+P/33NrtGPJXf6xrqgyZzz9b7qBR7HuUm3Nsn7bAslh3JNduNec/sFuE4Utl/xsFHZNjBWEog== dependencies: - "@abp/datatables.net" "~4.0.0" + "@abp/datatables.net" "~4.0.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.0.tgz#88ae5f1a6068fba55927e59f113686508e9553cb" - integrity sha512-JYTfMA1zlBNGiQHAiZiTj5ka6B6vq5k2jqsoLHup4pD9jpKwKRBGtltVsWoEnetd9eEbp4SaV/FCuh3RzmV6Pw== +"@abp/datatables.net@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.1.tgz#eb89716a37351c41b5bccfc2db88fc7ceb991a26" + integrity sha512-APFLui0w8MqsBWqP/K0QkT5cBq5SsWiqMaIGTXQKinMVLV597sUszrlhe1ISU2PqeD7iX6pCZNNOTI1NEUn9/Q== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" datatables.net "^1.10.21" -"@abp/font-awesome@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.0.tgz#6e1e4bd1175a0b8d3b095e215c07e66ad0e42e19" - integrity sha512-kHfZ45UMDWSRk1gTV/BwVfSoXksJ9UlnD3SelTGeAkvbDqtDllqlp9y6c3qQcmZUE348Xl4hDTkU8upZwswCFQ== +"@abp/font-awesome@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.1.tgz#8a9d83b2c2adfcd5abcbd9c31c315460d44a321e" + integrity sha512-+6+m/DKMnfkeQiWUsMlB6Da8u6yREyN2oQYGYhSRAK8419ym8RHHrqKJv2AClI4iLq2ppHZj8WF84+SeoCekRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.0.tgz#3afb41eb16d62e32c31a29c6a866f634a5a20cd8" - integrity sha512-cQq8PgzHfpK9/LxmjlnMsDn85wWvEOqjyLaepHFpTTt0341auSgXNwhp7rk71AUHD1lP3c9ALctmqu+gYmh9ag== +"@abp/jquery-form@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.1.tgz#6dc1922b2800dd635f20881a82e08104a1dd1bb5" + integrity sha512-JMBZYu/MI/GjaLTBOMB5iv8cagnLpReDULNC3r6tLNNqB1R8f3Cg1T7nF4YCuU9SYMqis1P/AuE4oEh+4rQdAQ== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#c3674d2b01b3c524de4c3fac1c6ae3657857ee7b" - integrity sha512-OGibIdw0ogjp6VQIebHM7OtMT36pjLKRrOHyCVpTmQ7NzDODV5ptG83vOnt5nFG0y9XFrOt8cnHrrd+K1Bpo/Q== +"@abp/jquery-validation-unobtrusive@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.1.tgz#4142ca31c0830fe24a1467e8cf13b55ba9d7c1dd" + integrity sha512-rdSRTcdKCHmarbrVgmPYdTiJ0G/aFKd+dr0krO7fALPTuQKChbDnHOO4/JvQSc+cd9faxa8c6ZWvlHdsof23tQ== dependencies: - "@abp/jquery-validation" "~4.0.0" + "@abp/jquery-validation" "~4.0.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.0.tgz#0a101937f89ff398317142b5271fa9a1de6571c2" - integrity sha512-4nzvhAktEINpQ2H+Hy7TOxxojTmTEm5dBTbHs1vbCWUuF0OTpouZWbMZDESdP0ZbjXcQ+vhwuM4e/pm/PeaHyQ== +"@abp/jquery-validation@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.1.tgz#74e7d795468c6986f2db15662631fcd4f67c679e" + integrity sha512-FX26aQCsMBdVWAJb7S37Lt7KoHAEHoYguh/qfZIARCpOYOOWvxfDz1wTrmADUkqdillqEiCeD/Imj8bYH9Faaw== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-validation "^1.19.2" -"@abp/jquery@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.0.tgz#00d24678b573bcc2fb14d8337ccdbf697b59d43b" - integrity sha512-gXLK97IvAZriNlG8e0qJcd7MvnpshJQURb4lg8VYibD7Fs/OBeHSAWM2Adgi3H9DnQL8XEUlWf487FSz4RC/Yg== +"@abp/jquery@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.1.tgz#aa554accb16600fd586c3a4f088040cd26d0bde8" + integrity sha512-MtiRKOLyjEWux+whPP3+zwPbpj8or756JtgjnwOTDB9tp9HLCYUaskt+oalYPvob24nDZcNu2RnMALYdCVhZAQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" jquery "~3.5.1" -"@abp/lodash@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.0.tgz#fe76d09517f6b1adf18edde94a31e13b003329dc" - integrity sha512-uitn5uYlb9xShRtV4AFOgp3lu2kADGMD4+a4fy5r4umlPM2uuMo0wMhzyYdBIG64JC5oNaqAzOwZyhhnn+HGJg== +"@abp/lodash@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.1.tgz#ec261ccaab8a70d5b32a8a7c22387e48936d38d4" + integrity sha512-Dav1QKbBeGR4VVbHHe1s3OEzN7wnb9K/vwzHrWmtO8D1Q5Z3433xjNmgL5VQ9gfxXqooSfEO4gAovZklMDHDew== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" lodash "^4.17.15" -"@abp/luxon@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.0.tgz#d9357e4fb422b6e18ebe897a86a4c4bc6fbe6858" - integrity sha512-tiE6NiSa4El88SVotxfmmpceINLz8MruaO/e/U3QjJEHjRoqlv0UBrM/x5Xz92c7ZIvL0Y4QvWNISeDg6/oqIQ== +"@abp/luxon@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.1.tgz#a540750b1605dbac856ce9c2e776c2fecf6392f9" + integrity sha512-eRumVB7UIf2XH6OZVUTvcKw0A/OSAfYV59fM+Wc4dAkNcmsNZI0gD1o0AigSGNCxTV6v+W2bFrsuooSqK99Y0Q== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.0.tgz#972acf26f5eaa4bf9b8991cbe7c19fd0005d94e2" - integrity sha512-SpUo1CfppKzkE6Rb880pgB7oQ83Mkjsi0o6eE4r4gkF5hfzkuCXOmNjTYKfQIkE4n3G9QQd+8AAN/4xj4DiDrA== +"@abp/malihu-custom-scrollbar-plugin@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.1.tgz#0a556423a67b6c949e32ffcacd72256dea6c31ee" + integrity sha512-YTwYpnQ1ZrON70gvJcnNZRwB3Ze4olGcXxiPvmRgSHbGJkSnHYJiP6PvsN1F3HDFukAJ/iUu+WwEe8OBwlyLXA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.0.tgz#8fdf4c5e18f4093ee4e073dab950cf7aa9b2a540" - integrity sha512-XeXahcDMczdkZdP07yhQriIvbi1N5meeSGTnFyZX+bNTGzUOarPcuNYZ6Mcl3351HcyESHzuJbKbsk3RB1kGeg== +"@abp/select2@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.1.tgz#8983e7b5c3afb862f08b2730b70e59d726e9b5d5" + integrity sha512-WdzY2hvsS/4vz/VXpxq2muSzzE8ggchiIrICy/WKchJxL9L08DM796t6aE6rEl9wucY8XEzzWrPOVqAjJmnXFA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" select2 "^4.0.13" -"@abp/sweetalert@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.0.tgz#0d93e92e95c6855aef7e19532a7513a078ece216" - integrity sha512-y3XtZqnUVZuQohpRO1ImyBZXhtrm4H+typIL/9VgcnlvQjBTyIaiwDmU8j07Bb2rKJKe0prVkkVARO7OnjOS5A== +"@abp/sweetalert@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.1.tgz#0088610915ad6db0a140b77832a37c10066eb4ee" + integrity sha512-t4/44oQCMngSjVqmeRWXwrXa/pRKc3CEpyyTiGIXki4dWJ21j0ePCw2l3rvOJWnpoCznhxa/UGxLfRfK1NEzRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" sweetalert "^2.1.2" -"@abp/timeago@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.0.tgz#509cd8a84cd94c2644824b0c3af10c8fff6de2dc" - integrity sha512-90jzLYJusYTPwMbak1+XkXE85OPOXPpysRbL28KQwl7WLNBm8wx6IEoVZOHvOrpYscYdyeWhZCgILSJ8DR3a2Q== +"@abp/timeago@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.1.tgz#8c161645534eb1f62fe4607450acf7345729e711" + integrity sha512-PsPobV79U2qzVY+WBsmJM1ohSF4jqcLnL4/7qyJvxlb1WwbCl1F5D4cpiJP4zsM4clPW4mbSsiauMNp+HTNKEA== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" timeago "^1.6.7" -"@abp/toastr@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.0.tgz#06e28665cb7f6eefee3f69c985dd2b3f86cd7f1d" - integrity sha512-YL1fahVpDszhwpnRTN87GCP523Mkaw42ApT2A/hZuBdwRzP/u5GwRfng0i/uhdYXCMkTKuHmaHnRyqhGiv7nfQ== +"@abp/toastr@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.1.tgz#ecb6f6193b7edc3150d0614ab9457472baf1cce3" + integrity sha512-bTTz0O8zj7fMhdoummP2Ed5Z8SJTmR6svzNchBXNDrnRAcDQvTihPTcg0UpH8BEDFczbLowq09CG2A/RMSJoug== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" toastr "^2.1.4" -"@abp/utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" - integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== +"@abp/utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.1.tgz#9a4cb420266c49d8084776bd31c86681d4d4d125" + integrity sha512-nI2ZyaNpvohr75p8jeMPWze+hX+mV47EHI+Zloa4GgGmJqrULdG71kYh45R+jGmMTbQL6huaXGnpz4gNF9TGyQ== dependencies: just-compare "^1.3.0" diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj index 7386e0aa09..fce2337c45 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj @@ -34,7 +34,7 @@ - + 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 78834de93d..1171b7f8a6 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": "^4.0.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.0.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 f7a02a45f4..33139bd99e 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@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.0.tgz#b1822cf5bbc0f6eeb414ebd0877f6d1115a81fe7" - integrity sha512-yYXQkEnNhftzm+ZI8d3VFMlV5UuLNTMQQwV2eZ8tJfstUQrKV9bVd3+NdDOr3AkvcD8D7mvMFeBuoMYteL5kLQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.1.tgz#ce8e3eb830a8e8f9eecb1a3b3bd70c2832fdf15e" + integrity sha512-w+ZG8Ewx9wWfbvRC2MAjJl+rXuXSHLhhGOiJTk68unWLNziDtNQzcSXG/Z5c1hA+acJSGqDoJGEGs4FVM136og== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.0.tgz#ba896056e9df5ac58e108df96996fbb2ca7a1a15" - integrity sha512-3RNn6VrNA+cqnPBoSbiCazN05cC2rhcRFMMxkEte+LImGbGOsxc4MflzHg5On1ExCGdqko8Axbw/ydy44Ak4Hw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.0.0" - "@abp/bootstrap" "~4.0.0" - "@abp/bootstrap-datepicker" "~4.0.0" - "@abp/datatables.net-bs4" "~4.0.0" - "@abp/font-awesome" "~4.0.0" - "@abp/jquery-form" "~4.0.0" - "@abp/jquery-validation-unobtrusive" "~4.0.0" - "@abp/lodash" "~4.0.0" - "@abp/luxon" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/select2" "~4.0.0" - "@abp/sweetalert" "~4.0.0" - "@abp/timeago" "~4.0.0" - "@abp/toastr" "~4.0.0" - -"@abp/aspnetcore.mvc.ui@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.0.tgz#68502177a05f6ce7191a09b06a18c5b5dfab425d" - integrity sha512-tYHUWMwnwInrGSzC/OdN6bH/VHZEz5DP3rx2U6fcb0I5GvvRdQZxVgUvmWn6DeMA3PG10Gra4SfkhZqRQq9rjQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.1.tgz#cd9d0eb11309c597dffd26277cd1bd7c5b1e0e2f" + integrity sha512-QGoCN/my0eAfa4tx5ytDxArIoz2i58jFFVUGso1Lekn54JvSt+WLz2p3uyTGatZ03Bp9836elhFnIopn12WvBw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.0.1" + "@abp/bootstrap" "~4.0.1" + "@abp/bootstrap-datepicker" "~4.0.1" + "@abp/datatables.net-bs4" "~4.0.1" + "@abp/font-awesome" "~4.0.1" + "@abp/jquery-form" "~4.0.1" + "@abp/jquery-validation-unobtrusive" "~4.0.1" + "@abp/lodash" "~4.0.1" + "@abp/luxon" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/select2" "~4.0.1" + "@abp/sweetalert" "~4.0.1" + "@abp/timeago" "~4.0.1" + "@abp/toastr" "~4.0.1" + +"@abp/aspnetcore.mvc.ui@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.1.tgz#6490c147a56e4f7055d2ca77f20baf1f60f56867" + integrity sha512-4B3icJrlpuZgMaX52ninyaenH7zLwepePEscDrLaFY9wyonKpZ2zh+xplnyM6vjNd+PhErWuA2+ssCswFhrJ3A== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,145 +43,145 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/bootstrap-datepicker@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.0.tgz#cdbd2c388c6d7ce8c6d72443038975063e6c6d02" - integrity sha512-hauH8VhpC8cxv1wCR6bVBcNqZepftdBXxEVID7TSAqgNyWjm/CrJqWLI+A0nnkG3IHoIm9D22iF47BamuYHptw== +"@abp/bootstrap-datepicker@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.1.tgz#aad891263edff66f816e003ba4fa7f8acfe8e0b6" + integrity sha512-S0oaVZmXsDcOJLAyoGY0TvP/7bZx0GHIbU9BIhIL2Wl74HYaokjkTr6/IleIek9YeiF2vm9FkrUP1dKH/4f7Gg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.0.tgz#04174f18055f76f936e6fb73e5ff71ffa08a8528" - integrity sha512-Tmr0yoSWg7XHl02X5wv04CvYcL8KCpX8u6YGJj31jRZxUTeCvs5ETXlepOWcdxPQqi/4olXv5B9GEz5S9l5nZA== +"@abp/bootstrap@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.1.tgz#3e41bdf9b3e9f8c497b9fafe22a4851d0401b31b" + integrity sha512-GoSaNWvswRHVoUrq7xClFQYtwqIlyS/vp/TdY+j5FFZP7ud89+ZGpdNqYqq5l9/6aaYa7v4b9mNTZ/1JRzAOYg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.0.tgz#65e76c697e62162717e0edabf7edacc4228e682a" - integrity sha512-xcTTBFjLFZ9Trv2x9Y/c3XKezIx+x3MTXUD98QJPf1aR7T43TE/tLHRxdRfW3R8ka0O1wmlYshpkaw5pYNsj5w== +"@abp/core@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.1.tgz#1df32bc058f45571605670ca81c226a1bd87400c" + integrity sha512-8UT5lwqV/luVG/SxePSTD2FRbZXwXv3cZJKjw+gpBjhD0slWrh51XEOHsM8ciTuhcvV/tsqVU9nXckDMdO58fw== dependencies: - "@abp/utils" "^4.0.0" + "@abp/utils" "^4.0.1" -"@abp/datatables.net-bs4@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.0.tgz#fe737e054f6ba35e787a1cda185af2788ef86d39" - integrity sha512-mz7xZdzX1nlFyX7vNzB5w3RkqZ0IHrPgsXGOB7OCTKMRshDFVH2O51Oy4qoLDOXoTVeahHtR9v8thEWFR1SnZg== +"@abp/datatables.net-bs4@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.1.tgz#7538baad0eff24eca7f4246d020852f83139f645" + integrity sha512-S52jNPF4if68V+P/33NrtGPJXf6xrqgyZzz9b7qBR7HuUm3Nsn7bAslh3JNduNec/sFuE4Utl/xsFHZNjBWEog== dependencies: - "@abp/datatables.net" "~4.0.0" + "@abp/datatables.net" "~4.0.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.0.tgz#88ae5f1a6068fba55927e59f113686508e9553cb" - integrity sha512-JYTfMA1zlBNGiQHAiZiTj5ka6B6vq5k2jqsoLHup4pD9jpKwKRBGtltVsWoEnetd9eEbp4SaV/FCuh3RzmV6Pw== +"@abp/datatables.net@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.1.tgz#eb89716a37351c41b5bccfc2db88fc7ceb991a26" + integrity sha512-APFLui0w8MqsBWqP/K0QkT5cBq5SsWiqMaIGTXQKinMVLV597sUszrlhe1ISU2PqeD7iX6pCZNNOTI1NEUn9/Q== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" datatables.net "^1.10.21" -"@abp/font-awesome@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.0.tgz#6e1e4bd1175a0b8d3b095e215c07e66ad0e42e19" - integrity sha512-kHfZ45UMDWSRk1gTV/BwVfSoXksJ9UlnD3SelTGeAkvbDqtDllqlp9y6c3qQcmZUE348Xl4hDTkU8upZwswCFQ== +"@abp/font-awesome@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.1.tgz#8a9d83b2c2adfcd5abcbd9c31c315460d44a321e" + integrity sha512-+6+m/DKMnfkeQiWUsMlB6Da8u6yREyN2oQYGYhSRAK8419ym8RHHrqKJv2AClI4iLq2ppHZj8WF84+SeoCekRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.0.tgz#3afb41eb16d62e32c31a29c6a866f634a5a20cd8" - integrity sha512-cQq8PgzHfpK9/LxmjlnMsDn85wWvEOqjyLaepHFpTTt0341auSgXNwhp7rk71AUHD1lP3c9ALctmqu+gYmh9ag== +"@abp/jquery-form@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.1.tgz#6dc1922b2800dd635f20881a82e08104a1dd1bb5" + integrity sha512-JMBZYu/MI/GjaLTBOMB5iv8cagnLpReDULNC3r6tLNNqB1R8f3Cg1T7nF4YCuU9SYMqis1P/AuE4oEh+4rQdAQ== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#c3674d2b01b3c524de4c3fac1c6ae3657857ee7b" - integrity sha512-OGibIdw0ogjp6VQIebHM7OtMT36pjLKRrOHyCVpTmQ7NzDODV5ptG83vOnt5nFG0y9XFrOt8cnHrrd+K1Bpo/Q== +"@abp/jquery-validation-unobtrusive@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.1.tgz#4142ca31c0830fe24a1467e8cf13b55ba9d7c1dd" + integrity sha512-rdSRTcdKCHmarbrVgmPYdTiJ0G/aFKd+dr0krO7fALPTuQKChbDnHOO4/JvQSc+cd9faxa8c6ZWvlHdsof23tQ== dependencies: - "@abp/jquery-validation" "~4.0.0" + "@abp/jquery-validation" "~4.0.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.0.tgz#0a101937f89ff398317142b5271fa9a1de6571c2" - integrity sha512-4nzvhAktEINpQ2H+Hy7TOxxojTmTEm5dBTbHs1vbCWUuF0OTpouZWbMZDESdP0ZbjXcQ+vhwuM4e/pm/PeaHyQ== +"@abp/jquery-validation@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.1.tgz#74e7d795468c6986f2db15662631fcd4f67c679e" + integrity sha512-FX26aQCsMBdVWAJb7S37Lt7KoHAEHoYguh/qfZIARCpOYOOWvxfDz1wTrmADUkqdillqEiCeD/Imj8bYH9Faaw== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-validation "^1.19.2" -"@abp/jquery@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.0.tgz#00d24678b573bcc2fb14d8337ccdbf697b59d43b" - integrity sha512-gXLK97IvAZriNlG8e0qJcd7MvnpshJQURb4lg8VYibD7Fs/OBeHSAWM2Adgi3H9DnQL8XEUlWf487FSz4RC/Yg== +"@abp/jquery@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.1.tgz#aa554accb16600fd586c3a4f088040cd26d0bde8" + integrity sha512-MtiRKOLyjEWux+whPP3+zwPbpj8or756JtgjnwOTDB9tp9HLCYUaskt+oalYPvob24nDZcNu2RnMALYdCVhZAQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" jquery "~3.5.1" -"@abp/lodash@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.0.tgz#fe76d09517f6b1adf18edde94a31e13b003329dc" - integrity sha512-uitn5uYlb9xShRtV4AFOgp3lu2kADGMD4+a4fy5r4umlPM2uuMo0wMhzyYdBIG64JC5oNaqAzOwZyhhnn+HGJg== +"@abp/lodash@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.1.tgz#ec261ccaab8a70d5b32a8a7c22387e48936d38d4" + integrity sha512-Dav1QKbBeGR4VVbHHe1s3OEzN7wnb9K/vwzHrWmtO8D1Q5Z3433xjNmgL5VQ9gfxXqooSfEO4gAovZklMDHDew== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" lodash "^4.17.15" -"@abp/luxon@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.0.tgz#d9357e4fb422b6e18ebe897a86a4c4bc6fbe6858" - integrity sha512-tiE6NiSa4El88SVotxfmmpceINLz8MruaO/e/U3QjJEHjRoqlv0UBrM/x5Xz92c7ZIvL0Y4QvWNISeDg6/oqIQ== +"@abp/luxon@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.1.tgz#a540750b1605dbac856ce9c2e776c2fecf6392f9" + integrity sha512-eRumVB7UIf2XH6OZVUTvcKw0A/OSAfYV59fM+Wc4dAkNcmsNZI0gD1o0AigSGNCxTV6v+W2bFrsuooSqK99Y0Q== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.0.tgz#972acf26f5eaa4bf9b8991cbe7c19fd0005d94e2" - integrity sha512-SpUo1CfppKzkE6Rb880pgB7oQ83Mkjsi0o6eE4r4gkF5hfzkuCXOmNjTYKfQIkE4n3G9QQd+8AAN/4xj4DiDrA== +"@abp/malihu-custom-scrollbar-plugin@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.1.tgz#0a556423a67b6c949e32ffcacd72256dea6c31ee" + integrity sha512-YTwYpnQ1ZrON70gvJcnNZRwB3Ze4olGcXxiPvmRgSHbGJkSnHYJiP6PvsN1F3HDFukAJ/iUu+WwEe8OBwlyLXA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.0.tgz#8fdf4c5e18f4093ee4e073dab950cf7aa9b2a540" - integrity sha512-XeXahcDMczdkZdP07yhQriIvbi1N5meeSGTnFyZX+bNTGzUOarPcuNYZ6Mcl3351HcyESHzuJbKbsk3RB1kGeg== +"@abp/select2@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.1.tgz#8983e7b5c3afb862f08b2730b70e59d726e9b5d5" + integrity sha512-WdzY2hvsS/4vz/VXpxq2muSzzE8ggchiIrICy/WKchJxL9L08DM796t6aE6rEl9wucY8XEzzWrPOVqAjJmnXFA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" select2 "^4.0.13" -"@abp/sweetalert@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.0.tgz#0d93e92e95c6855aef7e19532a7513a078ece216" - integrity sha512-y3XtZqnUVZuQohpRO1ImyBZXhtrm4H+typIL/9VgcnlvQjBTyIaiwDmU8j07Bb2rKJKe0prVkkVARO7OnjOS5A== +"@abp/sweetalert@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.1.tgz#0088610915ad6db0a140b77832a37c10066eb4ee" + integrity sha512-t4/44oQCMngSjVqmeRWXwrXa/pRKc3CEpyyTiGIXki4dWJ21j0ePCw2l3rvOJWnpoCznhxa/UGxLfRfK1NEzRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" sweetalert "^2.1.2" -"@abp/timeago@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.0.tgz#509cd8a84cd94c2644824b0c3af10c8fff6de2dc" - integrity sha512-90jzLYJusYTPwMbak1+XkXE85OPOXPpysRbL28KQwl7WLNBm8wx6IEoVZOHvOrpYscYdyeWhZCgILSJ8DR3a2Q== +"@abp/timeago@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.1.tgz#8c161645534eb1f62fe4607450acf7345729e711" + integrity sha512-PsPobV79U2qzVY+WBsmJM1ohSF4jqcLnL4/7qyJvxlb1WwbCl1F5D4cpiJP4zsM4clPW4mbSsiauMNp+HTNKEA== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" timeago "^1.6.7" -"@abp/toastr@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.0.tgz#06e28665cb7f6eefee3f69c985dd2b3f86cd7f1d" - integrity sha512-YL1fahVpDszhwpnRTN87GCP523Mkaw42ApT2A/hZuBdwRzP/u5GwRfng0i/uhdYXCMkTKuHmaHnRyqhGiv7nfQ== +"@abp/toastr@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.1.tgz#ecb6f6193b7edc3150d0614ab9457472baf1cce3" + integrity sha512-bTTz0O8zj7fMhdoummP2Ed5Z8SJTmR6svzNchBXNDrnRAcDQvTihPTcg0UpH8BEDFczbLowq09CG2A/RMSJoug== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" toastr "^2.1.4" -"@abp/utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" - integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== +"@abp/utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.1.tgz#9a4cb420266c49d8084776bd31c86681d4d4d125" + integrity sha512-nI2ZyaNpvohr75p8jeMPWze+hX+mV47EHI+Zloa4GgGmJqrULdG71kYh45R+jGmMTbQL6huaXGnpz4gNF9TGyQ== dependencies: just-compare "^1.3.0" diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj index 3e102fa6e3..e78ce77d08 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj @@ -22,8 +22,8 @@ - - + +
diff --git a/templates/console/common.props b/templates/console/common.props index 233f41c1ba..7e29afcfb8 100644 --- a/templates/console/common.props +++ b/templates/console/common.props @@ -4,9 +4,4 @@ 0.1.0 $(NoWarn);CS1591;CS0436 - - - - - \ No newline at end of file diff --git a/templates/console/src/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj b/templates/console/src/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj index 4f91776d39..2f8497b830 100644 --- a/templates/console/src/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj +++ b/templates/console/src/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj @@ -12,7 +12,7 @@
- + diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index de0e16fd27..8ab64d8bd8 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -15,13 +15,13 @@ }, "private": true, "dependencies": { - "@abp/ng.components": "~4.0.0", - "@abp/ng.core": "~4.0.0", - "@abp/ng.identity": "~4.0.0", - "@abp/ng.setting-management": "~4.0.0", - "@abp/ng.tenant-management": "~4.0.0", - "@abp/ng.theme.basic": "~4.0.0", - "@abp/ng.theme.shared": "~4.0.0", + "@abp/ng.components": "~4.0.1", + "@abp/ng.core": "~4.0.1", + "@abp/ng.identity": "~4.0.1", + "@abp/ng.setting-management": "~4.0.1", + "@abp/ng.tenant-management": "~4.0.1", + "@abp/ng.theme.basic": "~4.0.1", + "@abp/ng.theme.shared": "~4.0.1", "@angular/animations": "~11.0.0", "@angular/common": "~11.0.0", "@angular/compiler": "~11.0.0", @@ -35,7 +35,7 @@ "zone.js": "~0.10.2" }, "devDependencies": { - "@abp/ng.schematics": "~4.0.0", + "@abp/ng.schematics": "~4.0.1", "@angular-devkit/build-angular": "~0.1100.0", "@angular/cli": "~11.0.0", "@angular/compiler-cli": "~11.0.0", diff --git a/templates/module/angular/projects/my-project-name/package.json b/templates/module/angular/projects/my-project-name/package.json index a75ed36d2e..892e4fe987 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": ">=4.0.0", - "@abp/ng.theme.shared": ">=4.0.0" + "@abp/ng.core": ">=4.0.1", + "@abp/ng.theme.shared": ">=4.0.1" }, "dependencies": { "tslib": "^2.0.0" diff --git a/templates/module/aspnet-core/common.props b/templates/module/aspnet-core/common.props index 420d9c492c..c1ff420edf 100644 --- a/templates/module/aspnet-core/common.props +++ b/templates/module/aspnet-core/common.props @@ -3,11 +3,6 @@ latest 0.1.0 $(NoWarn);CS1591;CS0436 - module + module - - - - - \ 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 538abc5310..444e49801f 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 @@ -10,8 +10,8 @@ - - + + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj index 10097d1f3b..1705d64e93 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj @@ -13,9 +13,9 @@ - - - + + + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj index 2ada24f679..059027f920 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj @@ -10,8 +10,8 @@ - - + + 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 ea7cc2f166..5e131b4756 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": "^4.0.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.0.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 3b9cfcf521..12469bed18 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@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.0.tgz#b1822cf5bbc0f6eeb414ebd0877f6d1115a81fe7" - integrity sha512-yYXQkEnNhftzm+ZI8d3VFMlV5UuLNTMQQwV2eZ8tJfstUQrKV9bVd3+NdDOr3AkvcD8D7mvMFeBuoMYteL5kLQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.1.tgz#ce8e3eb830a8e8f9eecb1a3b3bd70c2832fdf15e" + integrity sha512-w+ZG8Ewx9wWfbvRC2MAjJl+rXuXSHLhhGOiJTk68unWLNziDtNQzcSXG/Z5c1hA+acJSGqDoJGEGs4FVM136og== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.0.tgz#ba896056e9df5ac58e108df96996fbb2ca7a1a15" - integrity sha512-3RNn6VrNA+cqnPBoSbiCazN05cC2rhcRFMMxkEte+LImGbGOsxc4MflzHg5On1ExCGdqko8Axbw/ydy44Ak4Hw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.0.0" - "@abp/bootstrap" "~4.0.0" - "@abp/bootstrap-datepicker" "~4.0.0" - "@abp/datatables.net-bs4" "~4.0.0" - "@abp/font-awesome" "~4.0.0" - "@abp/jquery-form" "~4.0.0" - "@abp/jquery-validation-unobtrusive" "~4.0.0" - "@abp/lodash" "~4.0.0" - "@abp/luxon" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/select2" "~4.0.0" - "@abp/sweetalert" "~4.0.0" - "@abp/timeago" "~4.0.0" - "@abp/toastr" "~4.0.0" - -"@abp/aspnetcore.mvc.ui@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.0.tgz#68502177a05f6ce7191a09b06a18c5b5dfab425d" - integrity sha512-tYHUWMwnwInrGSzC/OdN6bH/VHZEz5DP3rx2U6fcb0I5GvvRdQZxVgUvmWn6DeMA3PG10Gra4SfkhZqRQq9rjQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.1.tgz#cd9d0eb11309c597dffd26277cd1bd7c5b1e0e2f" + integrity sha512-QGoCN/my0eAfa4tx5ytDxArIoz2i58jFFVUGso1Lekn54JvSt+WLz2p3uyTGatZ03Bp9836elhFnIopn12WvBw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.0.1" + "@abp/bootstrap" "~4.0.1" + "@abp/bootstrap-datepicker" "~4.0.1" + "@abp/datatables.net-bs4" "~4.0.1" + "@abp/font-awesome" "~4.0.1" + "@abp/jquery-form" "~4.0.1" + "@abp/jquery-validation-unobtrusive" "~4.0.1" + "@abp/lodash" "~4.0.1" + "@abp/luxon" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/select2" "~4.0.1" + "@abp/sweetalert" "~4.0.1" + "@abp/timeago" "~4.0.1" + "@abp/toastr" "~4.0.1" + +"@abp/aspnetcore.mvc.ui@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.1.tgz#6490c147a56e4f7055d2ca77f20baf1f60f56867" + integrity sha512-4B3icJrlpuZgMaX52ninyaenH7zLwepePEscDrLaFY9wyonKpZ2zh+xplnyM6vjNd+PhErWuA2+ssCswFhrJ3A== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,145 +43,145 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/bootstrap-datepicker@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.0.tgz#cdbd2c388c6d7ce8c6d72443038975063e6c6d02" - integrity sha512-hauH8VhpC8cxv1wCR6bVBcNqZepftdBXxEVID7TSAqgNyWjm/CrJqWLI+A0nnkG3IHoIm9D22iF47BamuYHptw== +"@abp/bootstrap-datepicker@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.1.tgz#aad891263edff66f816e003ba4fa7f8acfe8e0b6" + integrity sha512-S0oaVZmXsDcOJLAyoGY0TvP/7bZx0GHIbU9BIhIL2Wl74HYaokjkTr6/IleIek9YeiF2vm9FkrUP1dKH/4f7Gg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.0.tgz#04174f18055f76f936e6fb73e5ff71ffa08a8528" - integrity sha512-Tmr0yoSWg7XHl02X5wv04CvYcL8KCpX8u6YGJj31jRZxUTeCvs5ETXlepOWcdxPQqi/4olXv5B9GEz5S9l5nZA== +"@abp/bootstrap@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.1.tgz#3e41bdf9b3e9f8c497b9fafe22a4851d0401b31b" + integrity sha512-GoSaNWvswRHVoUrq7xClFQYtwqIlyS/vp/TdY+j5FFZP7ud89+ZGpdNqYqq5l9/6aaYa7v4b9mNTZ/1JRzAOYg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.0.tgz#65e76c697e62162717e0edabf7edacc4228e682a" - integrity sha512-xcTTBFjLFZ9Trv2x9Y/c3XKezIx+x3MTXUD98QJPf1aR7T43TE/tLHRxdRfW3R8ka0O1wmlYshpkaw5pYNsj5w== +"@abp/core@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.1.tgz#1df32bc058f45571605670ca81c226a1bd87400c" + integrity sha512-8UT5lwqV/luVG/SxePSTD2FRbZXwXv3cZJKjw+gpBjhD0slWrh51XEOHsM8ciTuhcvV/tsqVU9nXckDMdO58fw== dependencies: - "@abp/utils" "^4.0.0" + "@abp/utils" "^4.0.1" -"@abp/datatables.net-bs4@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.0.tgz#fe737e054f6ba35e787a1cda185af2788ef86d39" - integrity sha512-mz7xZdzX1nlFyX7vNzB5w3RkqZ0IHrPgsXGOB7OCTKMRshDFVH2O51Oy4qoLDOXoTVeahHtR9v8thEWFR1SnZg== +"@abp/datatables.net-bs4@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.1.tgz#7538baad0eff24eca7f4246d020852f83139f645" + integrity sha512-S52jNPF4if68V+P/33NrtGPJXf6xrqgyZzz9b7qBR7HuUm3Nsn7bAslh3JNduNec/sFuE4Utl/xsFHZNjBWEog== dependencies: - "@abp/datatables.net" "~4.0.0" + "@abp/datatables.net" "~4.0.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.0.tgz#88ae5f1a6068fba55927e59f113686508e9553cb" - integrity sha512-JYTfMA1zlBNGiQHAiZiTj5ka6B6vq5k2jqsoLHup4pD9jpKwKRBGtltVsWoEnetd9eEbp4SaV/FCuh3RzmV6Pw== +"@abp/datatables.net@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.1.tgz#eb89716a37351c41b5bccfc2db88fc7ceb991a26" + integrity sha512-APFLui0w8MqsBWqP/K0QkT5cBq5SsWiqMaIGTXQKinMVLV597sUszrlhe1ISU2PqeD7iX6pCZNNOTI1NEUn9/Q== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" datatables.net "^1.10.21" -"@abp/font-awesome@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.0.tgz#6e1e4bd1175a0b8d3b095e215c07e66ad0e42e19" - integrity sha512-kHfZ45UMDWSRk1gTV/BwVfSoXksJ9UlnD3SelTGeAkvbDqtDllqlp9y6c3qQcmZUE348Xl4hDTkU8upZwswCFQ== +"@abp/font-awesome@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.1.tgz#8a9d83b2c2adfcd5abcbd9c31c315460d44a321e" + integrity sha512-+6+m/DKMnfkeQiWUsMlB6Da8u6yREyN2oQYGYhSRAK8419ym8RHHrqKJv2AClI4iLq2ppHZj8WF84+SeoCekRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.0.tgz#3afb41eb16d62e32c31a29c6a866f634a5a20cd8" - integrity sha512-cQq8PgzHfpK9/LxmjlnMsDn85wWvEOqjyLaepHFpTTt0341auSgXNwhp7rk71AUHD1lP3c9ALctmqu+gYmh9ag== +"@abp/jquery-form@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.1.tgz#6dc1922b2800dd635f20881a82e08104a1dd1bb5" + integrity sha512-JMBZYu/MI/GjaLTBOMB5iv8cagnLpReDULNC3r6tLNNqB1R8f3Cg1T7nF4YCuU9SYMqis1P/AuE4oEh+4rQdAQ== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#c3674d2b01b3c524de4c3fac1c6ae3657857ee7b" - integrity sha512-OGibIdw0ogjp6VQIebHM7OtMT36pjLKRrOHyCVpTmQ7NzDODV5ptG83vOnt5nFG0y9XFrOt8cnHrrd+K1Bpo/Q== +"@abp/jquery-validation-unobtrusive@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.1.tgz#4142ca31c0830fe24a1467e8cf13b55ba9d7c1dd" + integrity sha512-rdSRTcdKCHmarbrVgmPYdTiJ0G/aFKd+dr0krO7fALPTuQKChbDnHOO4/JvQSc+cd9faxa8c6ZWvlHdsof23tQ== dependencies: - "@abp/jquery-validation" "~4.0.0" + "@abp/jquery-validation" "~4.0.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.0.tgz#0a101937f89ff398317142b5271fa9a1de6571c2" - integrity sha512-4nzvhAktEINpQ2H+Hy7TOxxojTmTEm5dBTbHs1vbCWUuF0OTpouZWbMZDESdP0ZbjXcQ+vhwuM4e/pm/PeaHyQ== +"@abp/jquery-validation@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.1.tgz#74e7d795468c6986f2db15662631fcd4f67c679e" + integrity sha512-FX26aQCsMBdVWAJb7S37Lt7KoHAEHoYguh/qfZIARCpOYOOWvxfDz1wTrmADUkqdillqEiCeD/Imj8bYH9Faaw== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-validation "^1.19.2" -"@abp/jquery@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.0.tgz#00d24678b573bcc2fb14d8337ccdbf697b59d43b" - integrity sha512-gXLK97IvAZriNlG8e0qJcd7MvnpshJQURb4lg8VYibD7Fs/OBeHSAWM2Adgi3H9DnQL8XEUlWf487FSz4RC/Yg== +"@abp/jquery@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.1.tgz#aa554accb16600fd586c3a4f088040cd26d0bde8" + integrity sha512-MtiRKOLyjEWux+whPP3+zwPbpj8or756JtgjnwOTDB9tp9HLCYUaskt+oalYPvob24nDZcNu2RnMALYdCVhZAQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" jquery "~3.5.1" -"@abp/lodash@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.0.tgz#fe76d09517f6b1adf18edde94a31e13b003329dc" - integrity sha512-uitn5uYlb9xShRtV4AFOgp3lu2kADGMD4+a4fy5r4umlPM2uuMo0wMhzyYdBIG64JC5oNaqAzOwZyhhnn+HGJg== +"@abp/lodash@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.1.tgz#ec261ccaab8a70d5b32a8a7c22387e48936d38d4" + integrity sha512-Dav1QKbBeGR4VVbHHe1s3OEzN7wnb9K/vwzHrWmtO8D1Q5Z3433xjNmgL5VQ9gfxXqooSfEO4gAovZklMDHDew== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" lodash "^4.17.15" -"@abp/luxon@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.0.tgz#d9357e4fb422b6e18ebe897a86a4c4bc6fbe6858" - integrity sha512-tiE6NiSa4El88SVotxfmmpceINLz8MruaO/e/U3QjJEHjRoqlv0UBrM/x5Xz92c7ZIvL0Y4QvWNISeDg6/oqIQ== +"@abp/luxon@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.1.tgz#a540750b1605dbac856ce9c2e776c2fecf6392f9" + integrity sha512-eRumVB7UIf2XH6OZVUTvcKw0A/OSAfYV59fM+Wc4dAkNcmsNZI0gD1o0AigSGNCxTV6v+W2bFrsuooSqK99Y0Q== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.0.tgz#972acf26f5eaa4bf9b8991cbe7c19fd0005d94e2" - integrity sha512-SpUo1CfppKzkE6Rb880pgB7oQ83Mkjsi0o6eE4r4gkF5hfzkuCXOmNjTYKfQIkE4n3G9QQd+8AAN/4xj4DiDrA== +"@abp/malihu-custom-scrollbar-plugin@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.1.tgz#0a556423a67b6c949e32ffcacd72256dea6c31ee" + integrity sha512-YTwYpnQ1ZrON70gvJcnNZRwB3Ze4olGcXxiPvmRgSHbGJkSnHYJiP6PvsN1F3HDFukAJ/iUu+WwEe8OBwlyLXA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.0.tgz#8fdf4c5e18f4093ee4e073dab950cf7aa9b2a540" - integrity sha512-XeXahcDMczdkZdP07yhQriIvbi1N5meeSGTnFyZX+bNTGzUOarPcuNYZ6Mcl3351HcyESHzuJbKbsk3RB1kGeg== +"@abp/select2@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.1.tgz#8983e7b5c3afb862f08b2730b70e59d726e9b5d5" + integrity sha512-WdzY2hvsS/4vz/VXpxq2muSzzE8ggchiIrICy/WKchJxL9L08DM796t6aE6rEl9wucY8XEzzWrPOVqAjJmnXFA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" select2 "^4.0.13" -"@abp/sweetalert@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.0.tgz#0d93e92e95c6855aef7e19532a7513a078ece216" - integrity sha512-y3XtZqnUVZuQohpRO1ImyBZXhtrm4H+typIL/9VgcnlvQjBTyIaiwDmU8j07Bb2rKJKe0prVkkVARO7OnjOS5A== +"@abp/sweetalert@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.1.tgz#0088610915ad6db0a140b77832a37c10066eb4ee" + integrity sha512-t4/44oQCMngSjVqmeRWXwrXa/pRKc3CEpyyTiGIXki4dWJ21j0ePCw2l3rvOJWnpoCznhxa/UGxLfRfK1NEzRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" sweetalert "^2.1.2" -"@abp/timeago@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.0.tgz#509cd8a84cd94c2644824b0c3af10c8fff6de2dc" - integrity sha512-90jzLYJusYTPwMbak1+XkXE85OPOXPpysRbL28KQwl7WLNBm8wx6IEoVZOHvOrpYscYdyeWhZCgILSJ8DR3a2Q== +"@abp/timeago@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.1.tgz#8c161645534eb1f62fe4607450acf7345729e711" + integrity sha512-PsPobV79U2qzVY+WBsmJM1ohSF4jqcLnL4/7qyJvxlb1WwbCl1F5D4cpiJP4zsM4clPW4mbSsiauMNp+HTNKEA== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" timeago "^1.6.7" -"@abp/toastr@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.0.tgz#06e28665cb7f6eefee3f69c985dd2b3f86cd7f1d" - integrity sha512-YL1fahVpDszhwpnRTN87GCP523Mkaw42ApT2A/hZuBdwRzP/u5GwRfng0i/uhdYXCMkTKuHmaHnRyqhGiv7nfQ== +"@abp/toastr@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.1.tgz#ecb6f6193b7edc3150d0614ab9457472baf1cce3" + integrity sha512-bTTz0O8zj7fMhdoummP2Ed5Z8SJTmR6svzNchBXNDrnRAcDQvTihPTcg0UpH8BEDFczbLowq09CG2A/RMSJoug== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" toastr "^2.1.4" -"@abp/utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" - integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== +"@abp/utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.1.tgz#9a4cb420266c49d8084776bd31c86681d4d4d125" + integrity sha512-nI2ZyaNpvohr75p8jeMPWze+hX+mV47EHI+Zloa4GgGmJqrULdG71kYh45R+jGmMTbQL6huaXGnpz4gNF9TGyQ== dependencies: just-compare "^1.3.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj index 54c7c5c0ad..2476a0ff07 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj @@ -12,7 +12,7 @@ - + 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 78834de93d..1171b7f8a6 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": "^4.0.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.0.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 3b9cfcf521..12469bed18 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@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.0.tgz#b1822cf5bbc0f6eeb414ebd0877f6d1115a81fe7" - integrity sha512-yYXQkEnNhftzm+ZI8d3VFMlV5UuLNTMQQwV2eZ8tJfstUQrKV9bVd3+NdDOr3AkvcD8D7mvMFeBuoMYteL5kLQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.1.tgz#ce8e3eb830a8e8f9eecb1a3b3bd70c2832fdf15e" + integrity sha512-w+ZG8Ewx9wWfbvRC2MAjJl+rXuXSHLhhGOiJTk68unWLNziDtNQzcSXG/Z5c1hA+acJSGqDoJGEGs4FVM136og== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.0.tgz#ba896056e9df5ac58e108df96996fbb2ca7a1a15" - integrity sha512-3RNn6VrNA+cqnPBoSbiCazN05cC2rhcRFMMxkEte+LImGbGOsxc4MflzHg5On1ExCGdqko8Axbw/ydy44Ak4Hw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.0.0" - "@abp/bootstrap" "~4.0.0" - "@abp/bootstrap-datepicker" "~4.0.0" - "@abp/datatables.net-bs4" "~4.0.0" - "@abp/font-awesome" "~4.0.0" - "@abp/jquery-form" "~4.0.0" - "@abp/jquery-validation-unobtrusive" "~4.0.0" - "@abp/lodash" "~4.0.0" - "@abp/luxon" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/select2" "~4.0.0" - "@abp/sweetalert" "~4.0.0" - "@abp/timeago" "~4.0.0" - "@abp/toastr" "~4.0.0" - -"@abp/aspnetcore.mvc.ui@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.0.tgz#68502177a05f6ce7191a09b06a18c5b5dfab425d" - integrity sha512-tYHUWMwnwInrGSzC/OdN6bH/VHZEz5DP3rx2U6fcb0I5GvvRdQZxVgUvmWn6DeMA3PG10Gra4SfkhZqRQq9rjQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.1.tgz#cd9d0eb11309c597dffd26277cd1bd7c5b1e0e2f" + integrity sha512-QGoCN/my0eAfa4tx5ytDxArIoz2i58jFFVUGso1Lekn54JvSt+WLz2p3uyTGatZ03Bp9836elhFnIopn12WvBw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.0.1" + "@abp/bootstrap" "~4.0.1" + "@abp/bootstrap-datepicker" "~4.0.1" + "@abp/datatables.net-bs4" "~4.0.1" + "@abp/font-awesome" "~4.0.1" + "@abp/jquery-form" "~4.0.1" + "@abp/jquery-validation-unobtrusive" "~4.0.1" + "@abp/lodash" "~4.0.1" + "@abp/luxon" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/select2" "~4.0.1" + "@abp/sweetalert" "~4.0.1" + "@abp/timeago" "~4.0.1" + "@abp/toastr" "~4.0.1" + +"@abp/aspnetcore.mvc.ui@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.1.tgz#6490c147a56e4f7055d2ca77f20baf1f60f56867" + integrity sha512-4B3icJrlpuZgMaX52ninyaenH7zLwepePEscDrLaFY9wyonKpZ2zh+xplnyM6vjNd+PhErWuA2+ssCswFhrJ3A== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,145 +43,145 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/bootstrap-datepicker@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.0.tgz#cdbd2c388c6d7ce8c6d72443038975063e6c6d02" - integrity sha512-hauH8VhpC8cxv1wCR6bVBcNqZepftdBXxEVID7TSAqgNyWjm/CrJqWLI+A0nnkG3IHoIm9D22iF47BamuYHptw== +"@abp/bootstrap-datepicker@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.1.tgz#aad891263edff66f816e003ba4fa7f8acfe8e0b6" + integrity sha512-S0oaVZmXsDcOJLAyoGY0TvP/7bZx0GHIbU9BIhIL2Wl74HYaokjkTr6/IleIek9YeiF2vm9FkrUP1dKH/4f7Gg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.0.tgz#04174f18055f76f936e6fb73e5ff71ffa08a8528" - integrity sha512-Tmr0yoSWg7XHl02X5wv04CvYcL8KCpX8u6YGJj31jRZxUTeCvs5ETXlepOWcdxPQqi/4olXv5B9GEz5S9l5nZA== +"@abp/bootstrap@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.1.tgz#3e41bdf9b3e9f8c497b9fafe22a4851d0401b31b" + integrity sha512-GoSaNWvswRHVoUrq7xClFQYtwqIlyS/vp/TdY+j5FFZP7ud89+ZGpdNqYqq5l9/6aaYa7v4b9mNTZ/1JRzAOYg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.0.tgz#65e76c697e62162717e0edabf7edacc4228e682a" - integrity sha512-xcTTBFjLFZ9Trv2x9Y/c3XKezIx+x3MTXUD98QJPf1aR7T43TE/tLHRxdRfW3R8ka0O1wmlYshpkaw5pYNsj5w== +"@abp/core@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.1.tgz#1df32bc058f45571605670ca81c226a1bd87400c" + integrity sha512-8UT5lwqV/luVG/SxePSTD2FRbZXwXv3cZJKjw+gpBjhD0slWrh51XEOHsM8ciTuhcvV/tsqVU9nXckDMdO58fw== dependencies: - "@abp/utils" "^4.0.0" + "@abp/utils" "^4.0.1" -"@abp/datatables.net-bs4@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.0.tgz#fe737e054f6ba35e787a1cda185af2788ef86d39" - integrity sha512-mz7xZdzX1nlFyX7vNzB5w3RkqZ0IHrPgsXGOB7OCTKMRshDFVH2O51Oy4qoLDOXoTVeahHtR9v8thEWFR1SnZg== +"@abp/datatables.net-bs4@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.1.tgz#7538baad0eff24eca7f4246d020852f83139f645" + integrity sha512-S52jNPF4if68V+P/33NrtGPJXf6xrqgyZzz9b7qBR7HuUm3Nsn7bAslh3JNduNec/sFuE4Utl/xsFHZNjBWEog== dependencies: - "@abp/datatables.net" "~4.0.0" + "@abp/datatables.net" "~4.0.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.0.tgz#88ae5f1a6068fba55927e59f113686508e9553cb" - integrity sha512-JYTfMA1zlBNGiQHAiZiTj5ka6B6vq5k2jqsoLHup4pD9jpKwKRBGtltVsWoEnetd9eEbp4SaV/FCuh3RzmV6Pw== +"@abp/datatables.net@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.1.tgz#eb89716a37351c41b5bccfc2db88fc7ceb991a26" + integrity sha512-APFLui0w8MqsBWqP/K0QkT5cBq5SsWiqMaIGTXQKinMVLV597sUszrlhe1ISU2PqeD7iX6pCZNNOTI1NEUn9/Q== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" datatables.net "^1.10.21" -"@abp/font-awesome@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.0.tgz#6e1e4bd1175a0b8d3b095e215c07e66ad0e42e19" - integrity sha512-kHfZ45UMDWSRk1gTV/BwVfSoXksJ9UlnD3SelTGeAkvbDqtDllqlp9y6c3qQcmZUE348Xl4hDTkU8upZwswCFQ== +"@abp/font-awesome@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.1.tgz#8a9d83b2c2adfcd5abcbd9c31c315460d44a321e" + integrity sha512-+6+m/DKMnfkeQiWUsMlB6Da8u6yREyN2oQYGYhSRAK8419ym8RHHrqKJv2AClI4iLq2ppHZj8WF84+SeoCekRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.0.tgz#3afb41eb16d62e32c31a29c6a866f634a5a20cd8" - integrity sha512-cQq8PgzHfpK9/LxmjlnMsDn85wWvEOqjyLaepHFpTTt0341auSgXNwhp7rk71AUHD1lP3c9ALctmqu+gYmh9ag== +"@abp/jquery-form@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.1.tgz#6dc1922b2800dd635f20881a82e08104a1dd1bb5" + integrity sha512-JMBZYu/MI/GjaLTBOMB5iv8cagnLpReDULNC3r6tLNNqB1R8f3Cg1T7nF4YCuU9SYMqis1P/AuE4oEh+4rQdAQ== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#c3674d2b01b3c524de4c3fac1c6ae3657857ee7b" - integrity sha512-OGibIdw0ogjp6VQIebHM7OtMT36pjLKRrOHyCVpTmQ7NzDODV5ptG83vOnt5nFG0y9XFrOt8cnHrrd+K1Bpo/Q== +"@abp/jquery-validation-unobtrusive@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.1.tgz#4142ca31c0830fe24a1467e8cf13b55ba9d7c1dd" + integrity sha512-rdSRTcdKCHmarbrVgmPYdTiJ0G/aFKd+dr0krO7fALPTuQKChbDnHOO4/JvQSc+cd9faxa8c6ZWvlHdsof23tQ== dependencies: - "@abp/jquery-validation" "~4.0.0" + "@abp/jquery-validation" "~4.0.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.0.tgz#0a101937f89ff398317142b5271fa9a1de6571c2" - integrity sha512-4nzvhAktEINpQ2H+Hy7TOxxojTmTEm5dBTbHs1vbCWUuF0OTpouZWbMZDESdP0ZbjXcQ+vhwuM4e/pm/PeaHyQ== +"@abp/jquery-validation@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.1.tgz#74e7d795468c6986f2db15662631fcd4f67c679e" + integrity sha512-FX26aQCsMBdVWAJb7S37Lt7KoHAEHoYguh/qfZIARCpOYOOWvxfDz1wTrmADUkqdillqEiCeD/Imj8bYH9Faaw== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-validation "^1.19.2" -"@abp/jquery@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.0.tgz#00d24678b573bcc2fb14d8337ccdbf697b59d43b" - integrity sha512-gXLK97IvAZriNlG8e0qJcd7MvnpshJQURb4lg8VYibD7Fs/OBeHSAWM2Adgi3H9DnQL8XEUlWf487FSz4RC/Yg== +"@abp/jquery@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.1.tgz#aa554accb16600fd586c3a4f088040cd26d0bde8" + integrity sha512-MtiRKOLyjEWux+whPP3+zwPbpj8or756JtgjnwOTDB9tp9HLCYUaskt+oalYPvob24nDZcNu2RnMALYdCVhZAQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" jquery "~3.5.1" -"@abp/lodash@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.0.tgz#fe76d09517f6b1adf18edde94a31e13b003329dc" - integrity sha512-uitn5uYlb9xShRtV4AFOgp3lu2kADGMD4+a4fy5r4umlPM2uuMo0wMhzyYdBIG64JC5oNaqAzOwZyhhnn+HGJg== +"@abp/lodash@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.1.tgz#ec261ccaab8a70d5b32a8a7c22387e48936d38d4" + integrity sha512-Dav1QKbBeGR4VVbHHe1s3OEzN7wnb9K/vwzHrWmtO8D1Q5Z3433xjNmgL5VQ9gfxXqooSfEO4gAovZklMDHDew== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" lodash "^4.17.15" -"@abp/luxon@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.0.tgz#d9357e4fb422b6e18ebe897a86a4c4bc6fbe6858" - integrity sha512-tiE6NiSa4El88SVotxfmmpceINLz8MruaO/e/U3QjJEHjRoqlv0UBrM/x5Xz92c7ZIvL0Y4QvWNISeDg6/oqIQ== +"@abp/luxon@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.1.tgz#a540750b1605dbac856ce9c2e776c2fecf6392f9" + integrity sha512-eRumVB7UIf2XH6OZVUTvcKw0A/OSAfYV59fM+Wc4dAkNcmsNZI0gD1o0AigSGNCxTV6v+W2bFrsuooSqK99Y0Q== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.0.tgz#972acf26f5eaa4bf9b8991cbe7c19fd0005d94e2" - integrity sha512-SpUo1CfppKzkE6Rb880pgB7oQ83Mkjsi0o6eE4r4gkF5hfzkuCXOmNjTYKfQIkE4n3G9QQd+8AAN/4xj4DiDrA== +"@abp/malihu-custom-scrollbar-plugin@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.1.tgz#0a556423a67b6c949e32ffcacd72256dea6c31ee" + integrity sha512-YTwYpnQ1ZrON70gvJcnNZRwB3Ze4olGcXxiPvmRgSHbGJkSnHYJiP6PvsN1F3HDFukAJ/iUu+WwEe8OBwlyLXA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.0.tgz#8fdf4c5e18f4093ee4e073dab950cf7aa9b2a540" - integrity sha512-XeXahcDMczdkZdP07yhQriIvbi1N5meeSGTnFyZX+bNTGzUOarPcuNYZ6Mcl3351HcyESHzuJbKbsk3RB1kGeg== +"@abp/select2@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.1.tgz#8983e7b5c3afb862f08b2730b70e59d726e9b5d5" + integrity sha512-WdzY2hvsS/4vz/VXpxq2muSzzE8ggchiIrICy/WKchJxL9L08DM796t6aE6rEl9wucY8XEzzWrPOVqAjJmnXFA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" select2 "^4.0.13" -"@abp/sweetalert@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.0.tgz#0d93e92e95c6855aef7e19532a7513a078ece216" - integrity sha512-y3XtZqnUVZuQohpRO1ImyBZXhtrm4H+typIL/9VgcnlvQjBTyIaiwDmU8j07Bb2rKJKe0prVkkVARO7OnjOS5A== +"@abp/sweetalert@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.1.tgz#0088610915ad6db0a140b77832a37c10066eb4ee" + integrity sha512-t4/44oQCMngSjVqmeRWXwrXa/pRKc3CEpyyTiGIXki4dWJ21j0ePCw2l3rvOJWnpoCznhxa/UGxLfRfK1NEzRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" sweetalert "^2.1.2" -"@abp/timeago@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.0.tgz#509cd8a84cd94c2644824b0c3af10c8fff6de2dc" - integrity sha512-90jzLYJusYTPwMbak1+XkXE85OPOXPpysRbL28KQwl7WLNBm8wx6IEoVZOHvOrpYscYdyeWhZCgILSJ8DR3a2Q== +"@abp/timeago@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.1.tgz#8c161645534eb1f62fe4607450acf7345729e711" + integrity sha512-PsPobV79U2qzVY+WBsmJM1ohSF4jqcLnL4/7qyJvxlb1WwbCl1F5D4cpiJP4zsM4clPW4mbSsiauMNp+HTNKEA== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" timeago "^1.6.7" -"@abp/toastr@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.0.tgz#06e28665cb7f6eefee3f69c985dd2b3f86cd7f1d" - integrity sha512-YL1fahVpDszhwpnRTN87GCP523Mkaw42ApT2A/hZuBdwRzP/u5GwRfng0i/uhdYXCMkTKuHmaHnRyqhGiv7nfQ== +"@abp/toastr@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.1.tgz#ecb6f6193b7edc3150d0614ab9457472baf1cce3" + integrity sha512-bTTz0O8zj7fMhdoummP2Ed5Z8SJTmR6svzNchBXNDrnRAcDQvTihPTcg0UpH8BEDFczbLowq09CG2A/RMSJoug== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" toastr "^2.1.4" -"@abp/utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" - integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== +"@abp/utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.1.tgz#9a4cb420266c49d8084776bd31c86681d4d4d125" + integrity sha512-nI2ZyaNpvohr75p8jeMPWze+hX+mV47EHI+Zloa4GgGmJqrULdG71kYh45R+jGmMTbQL6huaXGnpz4gNF9TGyQ== dependencies: just-compare "^1.3.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj index 2017892f0b..51b82b4896 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj @@ -12,8 +12,8 @@ - - + + 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 78834de93d..1171b7f8a6 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": "^4.0.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.0.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 bc2ae6b5df..78e1068643 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@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.0.tgz#b1822cf5bbc0f6eeb414ebd0877f6d1115a81fe7" - integrity sha512-yYXQkEnNhftzm+ZI8d3VFMlV5UuLNTMQQwV2eZ8tJfstUQrKV9bVd3+NdDOr3AkvcD8D7mvMFeBuoMYteL5kLQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.0.1.tgz#ce8e3eb830a8e8f9eecb1a3b3bd70c2832fdf15e" + integrity sha512-w+ZG8Ewx9wWfbvRC2MAjJl+rXuXSHLhhGOiJTk68unWLNziDtNQzcSXG/Z5c1hA+acJSGqDoJGEGs4FVM136og== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.0.1" -"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.0.tgz#ba896056e9df5ac58e108df96996fbb2ca7a1a15" - integrity sha512-3RNn6VrNA+cqnPBoSbiCazN05cC2rhcRFMMxkEte+LImGbGOsxc4MflzHg5On1ExCGdqko8Axbw/ydy44Ak4Hw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.0.0" - "@abp/bootstrap" "~4.0.0" - "@abp/bootstrap-datepicker" "~4.0.0" - "@abp/datatables.net-bs4" "~4.0.0" - "@abp/font-awesome" "~4.0.0" - "@abp/jquery-form" "~4.0.0" - "@abp/jquery-validation-unobtrusive" "~4.0.0" - "@abp/lodash" "~4.0.0" - "@abp/luxon" "~4.0.0" - "@abp/malihu-custom-scrollbar-plugin" "~4.0.0" - "@abp/select2" "~4.0.0" - "@abp/sweetalert" "~4.0.0" - "@abp/timeago" "~4.0.0" - "@abp/toastr" "~4.0.0" - -"@abp/aspnetcore.mvc.ui@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.0.tgz#68502177a05f6ce7191a09b06a18c5b5dfab425d" - integrity sha512-tYHUWMwnwInrGSzC/OdN6bH/VHZEz5DP3rx2U6fcb0I5GvvRdQZxVgUvmWn6DeMA3PG10Gra4SfkhZqRQq9rjQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.0.1.tgz#cd9d0eb11309c597dffd26277cd1bd7c5b1e0e2f" + integrity sha512-QGoCN/my0eAfa4tx5ytDxArIoz2i58jFFVUGso1Lekn54JvSt+WLz2p3uyTGatZ03Bp9836elhFnIopn12WvBw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.0.1" + "@abp/bootstrap" "~4.0.1" + "@abp/bootstrap-datepicker" "~4.0.1" + "@abp/datatables.net-bs4" "~4.0.1" + "@abp/font-awesome" "~4.0.1" + "@abp/jquery-form" "~4.0.1" + "@abp/jquery-validation-unobtrusive" "~4.0.1" + "@abp/lodash" "~4.0.1" + "@abp/luxon" "~4.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~4.0.1" + "@abp/select2" "~4.0.1" + "@abp/sweetalert" "~4.0.1" + "@abp/timeago" "~4.0.1" + "@abp/toastr" "~4.0.1" + +"@abp/aspnetcore.mvc.ui@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.0.1.tgz#6490c147a56e4f7055d2ca77f20baf1f60f56867" + integrity sha512-4B3icJrlpuZgMaX52ninyaenH7zLwepePEscDrLaFY9wyonKpZ2zh+xplnyM6vjNd+PhErWuA2+ssCswFhrJ3A== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,145 +43,145 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/bootstrap-datepicker@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.0.tgz#cdbd2c388c6d7ce8c6d72443038975063e6c6d02" - integrity sha512-hauH8VhpC8cxv1wCR6bVBcNqZepftdBXxEVID7TSAqgNyWjm/CrJqWLI+A0nnkG3IHoIm9D22iF47BamuYHptw== +"@abp/bootstrap-datepicker@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.0.1.tgz#aad891263edff66f816e003ba4fa7f8acfe8e0b6" + integrity sha512-S0oaVZmXsDcOJLAyoGY0TvP/7bZx0GHIbU9BIhIL2Wl74HYaokjkTr6/IleIek9YeiF2vm9FkrUP1dKH/4f7Gg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.0.tgz#04174f18055f76f936e6fb73e5ff71ffa08a8528" - integrity sha512-Tmr0yoSWg7XHl02X5wv04CvYcL8KCpX8u6YGJj31jRZxUTeCvs5ETXlepOWcdxPQqi/4olXv5B9GEz5S9l5nZA== +"@abp/bootstrap@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.0.1.tgz#3e41bdf9b3e9f8c497b9fafe22a4851d0401b31b" + integrity sha512-GoSaNWvswRHVoUrq7xClFQYtwqIlyS/vp/TdY+j5FFZP7ud89+ZGpdNqYqq5l9/6aaYa7v4b9mNTZ/1JRzAOYg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.0.tgz#65e76c697e62162717e0edabf7edacc4228e682a" - integrity sha512-xcTTBFjLFZ9Trv2x9Y/c3XKezIx+x3MTXUD98QJPf1aR7T43TE/tLHRxdRfW3R8ka0O1wmlYshpkaw5pYNsj5w== +"@abp/core@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.0.1.tgz#1df32bc058f45571605670ca81c226a1bd87400c" + integrity sha512-8UT5lwqV/luVG/SxePSTD2FRbZXwXv3cZJKjw+gpBjhD0slWrh51XEOHsM8ciTuhcvV/tsqVU9nXckDMdO58fw== dependencies: - "@abp/utils" "^4.0.0" + "@abp/utils" "^4.0.1" -"@abp/datatables.net-bs4@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.0.tgz#fe737e054f6ba35e787a1cda185af2788ef86d39" - integrity sha512-mz7xZdzX1nlFyX7vNzB5w3RkqZ0IHrPgsXGOB7OCTKMRshDFVH2O51Oy4qoLDOXoTVeahHtR9v8thEWFR1SnZg== +"@abp/datatables.net-bs4@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.0.1.tgz#7538baad0eff24eca7f4246d020852f83139f645" + integrity sha512-S52jNPF4if68V+P/33NrtGPJXf6xrqgyZzz9b7qBR7HuUm3Nsn7bAslh3JNduNec/sFuE4Utl/xsFHZNjBWEog== dependencies: - "@abp/datatables.net" "~4.0.0" + "@abp/datatables.net" "~4.0.1" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.0.tgz#88ae5f1a6068fba55927e59f113686508e9553cb" - integrity sha512-JYTfMA1zlBNGiQHAiZiTj5ka6B6vq5k2jqsoLHup4pD9jpKwKRBGtltVsWoEnetd9eEbp4SaV/FCuh3RzmV6Pw== +"@abp/datatables.net@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.0.1.tgz#eb89716a37351c41b5bccfc2db88fc7ceb991a26" + integrity sha512-APFLui0w8MqsBWqP/K0QkT5cBq5SsWiqMaIGTXQKinMVLV597sUszrlhe1ISU2PqeD7iX6pCZNNOTI1NEUn9/Q== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" datatables.net "^1.10.21" -"@abp/font-awesome@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.0.tgz#6e1e4bd1175a0b8d3b095e215c07e66ad0e42e19" - integrity sha512-kHfZ45UMDWSRk1gTV/BwVfSoXksJ9UlnD3SelTGeAkvbDqtDllqlp9y6c3qQcmZUE348Xl4hDTkU8upZwswCFQ== +"@abp/font-awesome@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.0.1.tgz#8a9d83b2c2adfcd5abcbd9c31c315460d44a321e" + integrity sha512-+6+m/DKMnfkeQiWUsMlB6Da8u6yREyN2oQYGYhSRAK8419ym8RHHrqKJv2AClI4iLq2ppHZj8WF84+SeoCekRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.0.tgz#3afb41eb16d62e32c31a29c6a866f634a5a20cd8" - integrity sha512-cQq8PgzHfpK9/LxmjlnMsDn85wWvEOqjyLaepHFpTTt0341auSgXNwhp7rk71AUHD1lP3c9ALctmqu+gYmh9ag== +"@abp/jquery-form@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.0.1.tgz#6dc1922b2800dd635f20881a82e08104a1dd1bb5" + integrity sha512-JMBZYu/MI/GjaLTBOMB5iv8cagnLpReDULNC3r6tLNNqB1R8f3Cg1T7nF4YCuU9SYMqis1P/AuE4oEh+4rQdAQ== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#c3674d2b01b3c524de4c3fac1c6ae3657857ee7b" - integrity sha512-OGibIdw0ogjp6VQIebHM7OtMT36pjLKRrOHyCVpTmQ7NzDODV5ptG83vOnt5nFG0y9XFrOt8cnHrrd+K1Bpo/Q== +"@abp/jquery-validation-unobtrusive@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.1.tgz#4142ca31c0830fe24a1467e8cf13b55ba9d7c1dd" + integrity sha512-rdSRTcdKCHmarbrVgmPYdTiJ0G/aFKd+dr0krO7fALPTuQKChbDnHOO4/JvQSc+cd9faxa8c6ZWvlHdsof23tQ== dependencies: - "@abp/jquery-validation" "~4.0.0" + "@abp/jquery-validation" "~4.0.1" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.0.tgz#0a101937f89ff398317142b5271fa9a1de6571c2" - integrity sha512-4nzvhAktEINpQ2H+Hy7TOxxojTmTEm5dBTbHs1vbCWUuF0OTpouZWbMZDESdP0ZbjXcQ+vhwuM4e/pm/PeaHyQ== +"@abp/jquery-validation@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.0.1.tgz#74e7d795468c6986f2db15662631fcd4f67c679e" + integrity sha512-FX26aQCsMBdVWAJb7S37Lt7KoHAEHoYguh/qfZIARCpOYOOWvxfDz1wTrmADUkqdillqEiCeD/Imj8bYH9Faaw== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" jquery-validation "^1.19.2" -"@abp/jquery@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.0.tgz#00d24678b573bcc2fb14d8337ccdbf697b59d43b" - integrity sha512-gXLK97IvAZriNlG8e0qJcd7MvnpshJQURb4lg8VYibD7Fs/OBeHSAWM2Adgi3H9DnQL8XEUlWf487FSz4RC/Yg== +"@abp/jquery@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.0.1.tgz#aa554accb16600fd586c3a4f088040cd26d0bde8" + integrity sha512-MtiRKOLyjEWux+whPP3+zwPbpj8or756JtgjnwOTDB9tp9HLCYUaskt+oalYPvob24nDZcNu2RnMALYdCVhZAQ== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" jquery "~3.5.1" -"@abp/lodash@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.0.tgz#fe76d09517f6b1adf18edde94a31e13b003329dc" - integrity sha512-uitn5uYlb9xShRtV4AFOgp3lu2kADGMD4+a4fy5r4umlPM2uuMo0wMhzyYdBIG64JC5oNaqAzOwZyhhnn+HGJg== +"@abp/lodash@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.0.1.tgz#ec261ccaab8a70d5b32a8a7c22387e48936d38d4" + integrity sha512-Dav1QKbBeGR4VVbHHe1s3OEzN7wnb9K/vwzHrWmtO8D1Q5Z3433xjNmgL5VQ9gfxXqooSfEO4gAovZklMDHDew== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" lodash "^4.17.15" -"@abp/luxon@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.0.tgz#d9357e4fb422b6e18ebe897a86a4c4bc6fbe6858" - integrity sha512-tiE6NiSa4El88SVotxfmmpceINLz8MruaO/e/U3QjJEHjRoqlv0UBrM/x5Xz92c7ZIvL0Y4QvWNISeDg6/oqIQ== +"@abp/luxon@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.0.1.tgz#a540750b1605dbac856ce9c2e776c2fecf6392f9" + integrity sha512-eRumVB7UIf2XH6OZVUTvcKw0A/OSAfYV59fM+Wc4dAkNcmsNZI0gD1o0AigSGNCxTV6v+W2bFrsuooSqK99Y0Q== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.0.tgz#972acf26f5eaa4bf9b8991cbe7c19fd0005d94e2" - integrity sha512-SpUo1CfppKzkE6Rb880pgB7oQ83Mkjsi0o6eE4r4gkF5hfzkuCXOmNjTYKfQIkE4n3G9QQd+8AAN/4xj4DiDrA== +"@abp/malihu-custom-scrollbar-plugin@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.0.1.tgz#0a556423a67b6c949e32ffcacd72256dea6c31ee" + integrity sha512-YTwYpnQ1ZrON70gvJcnNZRwB3Ze4olGcXxiPvmRgSHbGJkSnHYJiP6PvsN1F3HDFukAJ/iUu+WwEe8OBwlyLXA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.0.tgz#8fdf4c5e18f4093ee4e073dab950cf7aa9b2a540" - integrity sha512-XeXahcDMczdkZdP07yhQriIvbi1N5meeSGTnFyZX+bNTGzUOarPcuNYZ6Mcl3351HcyESHzuJbKbsk3RB1kGeg== +"@abp/select2@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.0.1.tgz#8983e7b5c3afb862f08b2730b70e59d726e9b5d5" + integrity sha512-WdzY2hvsS/4vz/VXpxq2muSzzE8ggchiIrICy/WKchJxL9L08DM796t6aE6rEl9wucY8XEzzWrPOVqAjJmnXFA== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" select2 "^4.0.13" -"@abp/sweetalert@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.0.tgz#0d93e92e95c6855aef7e19532a7513a078ece216" - integrity sha512-y3XtZqnUVZuQohpRO1ImyBZXhtrm4H+typIL/9VgcnlvQjBTyIaiwDmU8j07Bb2rKJKe0prVkkVARO7OnjOS5A== +"@abp/sweetalert@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.0.1.tgz#0088610915ad6db0a140b77832a37c10066eb4ee" + integrity sha512-t4/44oQCMngSjVqmeRWXwrXa/pRKc3CEpyyTiGIXki4dWJ21j0ePCw2l3rvOJWnpoCznhxa/UGxLfRfK1NEzRg== dependencies: - "@abp/core" "~4.0.0" + "@abp/core" "~4.0.1" sweetalert "^2.1.2" -"@abp/timeago@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.0.tgz#509cd8a84cd94c2644824b0c3af10c8fff6de2dc" - integrity sha512-90jzLYJusYTPwMbak1+XkXE85OPOXPpysRbL28KQwl7WLNBm8wx6IEoVZOHvOrpYscYdyeWhZCgILSJ8DR3a2Q== +"@abp/timeago@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.0.1.tgz#8c161645534eb1f62fe4607450acf7345729e711" + integrity sha512-PsPobV79U2qzVY+WBsmJM1ohSF4jqcLnL4/7qyJvxlb1WwbCl1F5D4cpiJP4zsM4clPW4mbSsiauMNp+HTNKEA== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" timeago "^1.6.7" -"@abp/toastr@~4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.0.tgz#06e28665cb7f6eefee3f69c985dd2b3f86cd7f1d" - integrity sha512-YL1fahVpDszhwpnRTN87GCP523Mkaw42ApT2A/hZuBdwRzP/u5GwRfng0i/uhdYXCMkTKuHmaHnRyqhGiv7nfQ== +"@abp/toastr@~4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.0.1.tgz#ecb6f6193b7edc3150d0614ab9457472baf1cce3" + integrity sha512-bTTz0O8zj7fMhdoummP2Ed5Z8SJTmR6svzNchBXNDrnRAcDQvTihPTcg0UpH8BEDFczbLowq09CG2A/RMSJoug== dependencies: - "@abp/jquery" "~4.0.0" + "@abp/jquery" "~4.0.1" toastr "^2.1.4" -"@abp/utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.0.tgz#6c2b5f5c20821028fe6cdbffb5e2f6088956b9d5" - integrity sha512-Yj2yCObvS6X/P8rdRMQBo7940k5P/dZhgCUSo9C6P9GNmJY8wNdJFFyhRtaHuAyU5IBBBIY7+mMKOk5eQcbjWQ== +"@abp/utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.0.1.tgz#9a4cb420266c49d8084776bd31c86681d4d4d125" + integrity sha512-nI2ZyaNpvohr75p8jeMPWze+hX+mV47EHI+Zloa4GgGmJqrULdG71kYh45R+jGmMTbQL6huaXGnpz4gNF9TGyQ== dependencies: just-compare "^1.3.0" diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj index b4569551d8..a28c9bee5b 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj @@ -13,7 +13,7 @@ - + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj index 616e91d7c7..4484d69a23 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj @@ -21,7 +21,7 @@ - + diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj index 9809a39557..265806176f 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj @@ -9,7 +9,7 @@ - + diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj index 8a48f8906d..ab46bde28b 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj @@ -20,7 +20,7 @@ - + diff --git a/templates/wpf/common.props b/templates/wpf/common.props index 233f41c1ba..7e29afcfb8 100644 --- a/templates/wpf/common.props +++ b/templates/wpf/common.props @@ -4,9 +4,4 @@ 0.1.0 $(NoWarn);CS1591;CS0436 - - - - - \ No newline at end of file diff --git a/templates/wpf/src/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj b/templates/wpf/src/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj index b5b12c84bb..c1a57201f4 100644 --- a/templates/wpf/src/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj +++ b/templates/wpf/src/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj @@ -13,7 +13,7 @@ - +