diff --git a/Directory.Build.props b/Directory.Build.props
index 6dd78ec400..52d15cad96 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -23,7 +23,7 @@
2.4.3
- 3.0.0
+ 3.1.1
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
index 5167f46080..0cfd2a477a 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
@@ -271,6 +271,12 @@
"PaymentDetails": "Payment Details",
"PaymentProduct": "Payment Product",
"ProductName": "Product Name",
- "Code": "Code"
+ "Code": "Code",
+ "GenerateInvoice": "Generate Invoice",
+ "ExportOrganizationsToExcel": "Export to Excel",
+ "ThisExtensionIsNotAllowed": "This extension is not allowed.",
+ "TheFileIsTooLarge": "The file is too large!",
+ "ArticleDeletionConfirmationMessage": "Are you sure you want to hard delete this article?",
+ "ChooseCoverImage": "Choose a cover image..."
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json
index d6f086c1f6..c1253db259 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json
@@ -220,6 +220,13 @@
"PaymentDetails": "Ödeme Detayları",
"PaymentProduct": "Ödeme Ürünü",
"ProductName": "Ürün İsmi",
- "Code": "Kod"
+ "Code": "Kod",
+ "GenerateInvoice": "Fatura Oluştur",
+ "ExportOrganizationsToExcel": "Excel'e aktar",
+ "ThisExtensionIsNotAllowed": "Bu uzantıya izin verilmiyor.",
+ "TheFileIsTooLarge": "Dosya çok büyük.",
+ "ArticleDeletionConfirmationMessage": "Bu makaleyi kalıcı olarak silmek istediğinizden emin misiniz?",
+ "ChooseCoverImage": "Bir kapak resmi seçin...",
+ "CoverImage": "Kapak Resmi"
}
-}
\ No newline at end of file
+}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hans.json
index 46ba210b74..40cd64838c 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hans.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hans.json
@@ -255,6 +255,12 @@
"PaymentDetails": "付款详情",
"PaymentProduct": "付款产品",
"ProductName": "产品名称",
- "Code": "代码"
+ "Code": "代码",
+ "GenerateInvoice": "生成发票",
+ "ExportOrganizationsToExcel": "将组织导出到Excel",
+ "ThisExtensionIsNotAllowed": "不允许此扩展名.",
+ "TheFileIsTooLarge": "文件过大.",
+ "ArticleDeletionConfirmationMessage": "您确定要硬删除这篇文章吗?",
+ "ChooseCoverImage": "选项一张封面图片"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
index 9b30514f03..3c2a7cc59c 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
@@ -7,7 +7,7 @@
"OrganizationNotFoundMessage": "No organization found!",
"DeveloperCount": "Allocated / total developers",
"QuestionCount": "Remaining / total questions",
- "Unlimited": "Unlimited",
+ "Unlimited": "Unlimited",
"Owners": "Owners",
"AddMember": "Add member",
"AddOwner": "Add owner",
@@ -179,7 +179,9 @@
"LicenseExtendUpgradeDiff": "What is the difference between license extend and upgrade?",
"LicenseExtendUpgradeDiffExplanation": "Extending: By extending/renewing your license, you will continue to get premium support and get major updates for the modules and themes. Besides, you will be able to continue creating new projects. And you will still be able to use ABP Suite which speeds up your development.
Upgrading: By upgrading your license, you will promote to a higher license plan which will allow you to get additional benefits. See the license comparison table to check the differences between the license plans.On the other hand, when you upgrade, your license expiry date will not change!To extend your license end date, you need to extend your license.",
"LicenseRenewalCost": "What is the license renewal cost after 1 year?",
- "LicenseRenewalCostExplanation": "You can renew (extend) your license by paying %80 of the current license price. For example; Standard ABP Team License is ${0} and renewal price of the Team License is ${1}.",
+ "LicenseRenewalCostExplanation": "The renewal (extend) rate of all ABP Commercial perpetual licenses is {0} of the license list price. The renewal price of the standard Team License is ${1}, standard Business License is ${2} and standard Enterprise License is ${3}. If you are already a customer, log into your account to review the available renewal pricing.",
+ "HowDoIRenewMyLicense": "How do I renew my license?",
+ "HowDoIRenewMyLicenseExplanation": "You can renew your license by navigating to the organization management page. In order to take advantage of our discounted Early Renewal rates, make sure you renew before your license expires. Don't worry about not knowing when your Early Renewal opportunity closes, however. You'll receive 2 reminder e-mails before your subscription expires. We'll send them at 30 days, 7 days before expiration.",
"IsSourceCodeIncluded": "Does my license include the source code of the commercial modules and themes?",
"IsSourceCodeIncludedExplanation1": "Depends on the license type you've purchased:",
"IsSourceCodeIncludedExplanation2": "Team: Your solution uses the modules and the themes as NuGet and NPM packages. It doesn't include their source code. In this way, you can easily upgrade these modules and themes whenever a new version is available. However, you can not get the source code of the modules and the themes.",
@@ -188,7 +190,7 @@
"ChangingDevelopers": "Can I change the registered developers of my organization in the future?",
"ChangingDevelopersExplanation": "In addition to add new developers to your license, you can also change the existing developers (you can remove a developer and add a new one to the same seat) without any additional cost.",
"WhatHappensWhenLicenseEnds": "What happens when my license period ends?",
- "WhatHappensWhenLicenseEndsExplanation1": "ABP Commercial has perpetual license type.After your license expires, you can continue developing your project. And you are not obliged to renew your license. After your license expires;",
+ "WhatHappensWhenLicenseEndsExplanation1": "ABP Commercial license type is perpetual license. After your license expires, you can continue developing your project. And you are not obliged to renew your license. Your license comes with a one-year Updates and Support plan out of the box. To continue to receive new features, performance enhancements, bug fixes, support and continue to use ABP Suite, make sure to renew your plan each year. When your license expires, you will not be able to get more of the following benefits;",
"WhatHappensWhenLicenseEndsExplanation2": "You can not create new solutions using the ABP Commercial, but you can continue to develop your existing applications forever.",
"WhatHappensWhenLicenseEndsExplanation3": "You will be able to get updates for the modules and themes within your MAJOR version. For example; if you are using v3.2.0 of a module, you can still get updates for v3.x.x (v3.3.0, v3.5.2... etc.) of that module. But you cannot get updates for the next major version (like v4.x, v5.x)",
"WhatHappensWhenLicenseEndsExplanation4": "You can not install new modules and themes added to the ABP Commercial platform after your license ends.",
@@ -228,7 +230,7 @@
"HowCanIRefundVatExplanation2": "Log in into your 2Checkout account",
"HowCanIRefundVatExplanation3": "Find the appropriate order and press \"Refund Belated VAT\" (enter your VAT ID)",
"HowCanIGetMyInvoice": "How can I get my invoice?",
- "HowCanIGetMyInvoiceExplanation": "There are 2 payment gateways for purchasing a license: PayU and 2Checkout. If you purchase your license through 2Checkout gateway, it sends the PDF invoice to your email address, see 2Checkout invoicing. If you purchase through the PayU gateway or via bank wire transfer, we will prepare and send your invoice. You can request your invoice from the organization management page.",
+ "HowCanIGetMyInvoiceExplanation": "There are 2 payment gateways for purchasing a license: PayU and 2Checkout. If you purchase your license through 2Checkout gateway, it sends the PDF invoice to your email address, see 2Checkout invoicing. If you purchase through the PayU gateway or via bank wire transfer, we will prepare and send your invoice. You can request your invoice from the organization management page.",
"Forum": "Forum",
"SupportExplanation": "ABP Commercial licenses provides a premium forum support by a team consists of the ABP Framework experts.",
"PrivateTicket": "Private Ticket",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
index 789e377e9d..e92e55bf6c 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
@@ -179,7 +179,9 @@
"LicenseExtendUpgradeDiff": "许可扩展和升级有什么区别?",
"LicenseExtendUpgradeDiffExplanation": "扩展: 通过扩展/更新许可,你将继续获得高级支持,并获得有关模块和主题的重大更新. 此外你将能够继续创建新项目. 而且你仍然可以使用ABP Suite来加快开发速度.升级: 通过升级许可,你将升级到更高的许可计划,这将使你获得更多好处. 查看 许可比较表来检查许可计划之间的差异. 另一方面,当你升级时你的许可到期日期不会改变!要延长你的许可终止日期,你需要延长你的许可.",
"LicenseRenewalCost": "一年后的许可续期费用是多少?",
- "LicenseRenewalCostExplanation": "你可以通过支付当前许可价格的%80来续订(扩展)你的许可. 例如; 标准ABP团队许可为 ${0} 续订价格是 ${1}.",
+ "LicenseRenewalCostExplanation": "ABP商业版的续费价格均为原价的{0}. Team版本的续费价格是${1}, Business版本的续订价格是${2}, Enterprise版本的续订价格是${3}. 如果你已经购买了, 请登录帐户以查看续订价格.",
+ "HowDoIRenewMyLicense": "如何续费我的许可证?",
+ "HowDoIRenewMyLicenseExplanation": "你可以登录以进行续费. 为了享受我们的续费折扣, 请确保在许可证到期之前进行续费, 我们会在到期前7天和30天发送2封续费提醒邮件.",
"IsSourceCodeIncluded": "我的许可是否包括商业模块和主题的源代码?",
"IsSourceCodeIncludedExplanation1": "取决于你购买的许可类型:",
"IsSourceCodeIncludedExplanation2": "团队: 你的解决方案将这些模块和主题作为NuGet和NPM包使用. 它不包括其源代码. 这样,只要有新版本可用,你就可以轻松升级这些模块和主题. 但是,你无法获取模块和主题的源代码.",
@@ -228,7 +230,7 @@
"HowCanIRefundVatExplanation2": "登录到你的2Checkout账户",
"HowCanIRefundVatExplanation3": "找到适当的订单,然后按\"退还已延期的增值税\"(输入你的增值税ID",
"HowCanIGetMyInvoice": "我如何获得发票?",
- "HowCanIGetMyInvoiceExplanation": "有两个用于购买许可的支付网关:PayU和2Checkout. 如果你通过2Checkout网关购买许可,则它将PDF发票发送到你的电子邮件地址,请参阅2Checkout发票.如果你是通过PayU网关或通过银行电汇购买的,我们将准备并发送你的发票. 你可以从组织管理页面索取发票.",
+ "HowCanIGetMyInvoiceExplanation": "有两个用于购买许可的支付网关:PayU和2Checkout. 如果你通过2Checkout网关购买许可,则它将PDF发票发送到你的电子邮件地址,请参阅2Checkout发票.如果你是通过PayU网关或通过银行电汇购买的,我们将准备并发送你的发票. 你可以从组织管理页面索取发票.",
"Forum": "论坛",
"SupportExplanation": "ABP商业版许可包含由ABP框架专家组成的团队提供的高级论坛支持.",
"PrivateTicket": "私有票",
diff --git a/common.props b/common.props
index 987fa421a4..a62f5b67b2 100644
--- a/common.props
+++ b/common.props
@@ -1,7 +1,7 @@
- latest
- 4.4.0
+ latest
+ 4.4.0$(NoWarn);CS1591;CS0436https://abp.io/assets/abp_nupkg.pnghttps://abp.io/
diff --git a/docs/en/CLI-New-Command-Samples.md b/docs/en/CLI-New-Command-Samples.md
index 8ddd985e85..eedf03353c 100644
--- a/docs/en/CLI-New-Command-Samples.md
+++ b/docs/en/CLI-New-Command-Samples.md
@@ -167,7 +167,7 @@ ABP CLI always uses the latest version. In order to create a solution from a pre
## Choose database management system
-The default database management system (DBMS) is `Entity Framework Core` / ` SQL Server`. You can choose a DBMS by passing `--database-management-system` parameter. Accepted values are `SqlServer`, `MySQL`, `SQLite`, `Oracle-Devart`, `PostgreSQL`. The default value is `SqlServer`.
+The default database management system (DBMS) is `Entity Framework Core` / ` SQL Server`. You can choose a DBMS by passing `--database-management-system` parameter. [Accepted values](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/DatabaseManagementSystem.cs) are `SqlServer`, `MySQL`, `SQLite`, `Oracle`, `Oracle-Devart`, `PostgreSQL`. The default value is `SqlServer`.
* Angular UI, **PostgreSQL** database, creates the project in a new folder:
diff --git a/docs/en/Caching.md b/docs/en/Caching.md
index 7dbf02d875..13129bbc95 100644
--- a/docs/en/Caching.md
+++ b/docs/en/Caching.md
@@ -262,7 +262,7 @@ Distributed cache service provides an interesting feature. Assume that you've up
### IDistributedCacheSerializer
-`IDistributedCacheSerializer` service is used to serialize and deserialize the cache items. Default implementation is the `Utf8JsonDistributedCacheSerializer` class that uses `IJsonSerializer` service to convert objects to [JSON](Json.md) and vice verse. Then it uses UTC8 encoding to convert the JSON string to a byte array which is accepted by the distributed cache.
+`IDistributedCacheSerializer` service is used to serialize and deserialize the cache items. Default implementation is the `Utf8JsonDistributedCacheSerializer` class that uses `IJsonSerializer` service to convert objects to [JSON](Json-Serialization.md) and vice verse. Then it uses UTC8 encoding to convert the JSON string to a byte array which is accepted by the distributed cache.
You can [replace](Dependency-Injection.md) this service by your own implementation if you want to implement your own serialization logic.
diff --git a/docs/en/Cancellation-Token-Provider.md b/docs/en/Cancellation-Token-Provider.md
new file mode 100644
index 0000000000..7f7a78f8ad
--- /dev/null
+++ b/docs/en/Cancellation-Token-Provider.md
@@ -0,0 +1,71 @@
+# Cancellation Token Provider
+
+A `CancellationToken` enables cooperative cancellation between threads, thread pool work items, or `Task` objects. To handle the possible cancellation of the operation, ABP Framework provides `ICancellationTokenProvider` to obtain the `CancellationToken` itself from the source.
+
+> To get more information about `CancellationToken`, see [Microsoft Documentation](https://docs.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken).
+
+## ICancellationTokenProvider
+
+`ICancellationTokenProvider` is an abstraction to provide `CancellationToken` for different scenarios.
+
+Generally, you should pass the `CancellationToken` as a parameter for your method to use it. With the `ICancellationTokenProvider` you don't need to pass `CancellationToken` for every method. `ICancellationTokenProvider` can be injected with the **dependency injection** and provides the token from it's source.
+
+**Example:**
+
+```csharp
+using System.Threading.Tasks;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Threading;
+
+namespace MyProject
+{
+ public class MyService : ITransientDependency
+ {
+ private readonly ICancellationTokenProvider _cancellationTokenProvider;
+
+ public MyService(ICancellationTokenProvider cancellationTokenProvider)
+ {
+ _cancellationTokenProvider = cancellationTokenProvider;
+ }
+
+ public async Task DoItAsync()
+ {
+ while (_cancellationTokenProvider.Token.IsCancellationRequested == false)
+ {
+ // ...
+ }
+ }
+ }
+}
+```
+
+## Built-in providers
+
+- `NullCancellationTokenProvider`
+
+ The `NullCancellationTokenProvider` is a built in provider and it supply always `CancellationToken.None`.
+
+- `HttpContextCancellationTokenProvider`
+
+ The `HttpContextCancellationTokenProvider` is a built in default provider for ABP Web applications. It simply provides a `CancellationToken` that is source of the web request from the `HttpContext`.
+
+## Implementing the ICancellationTokenProvider
+
+You can easily create your CancellationTokenProvider by creating a class that implements the `ICancellationTokenProvider` interface, as shown below:
+
+```csharp
+using System.Threading;
+
+namespace AbpDemo
+{
+ public class MyCancellationTokenProvider : ICancellationTokenProvider
+ {
+ public CancellationToken Token { get; }
+
+ private MyCancellationTokenProvider()
+ {
+
+ }
+ }
+}
+```
diff --git a/docs/en/Customizing-Application-Modules-Guide.md b/docs/en/Customizing-Application-Modules-Guide.md
index 56b94ae4fc..438c087e0c 100644
--- a/docs/en/Customizing-Application-Modules-Guide.md
+++ b/docs/en/Customizing-Application-Modules-Guide.md
@@ -75,6 +75,7 @@ There are some low level systems that you can control entity actions, table colu
Entity action extension system allows you to add a new action to the action menu for an entity on the user interface;
* [Entity Action Extensions for ASP.NET Core UI](UI/AspNetCore/Entity-Action-Extensions.md)
+* [Entity Action Extensions for Blazor UI](UI/Blazor/Entity-Action-Extensions.md)
* [Entity Action Extensions for Angular](UI/Angular/Entity-Action-Extensions.md)
#### Data Table Column Extensions
@@ -82,6 +83,7 @@ Entity action extension system allows you to add a new action to the action menu
Data table column extension system allows you to add a new column in the data table on the user interface;
* [Data Table Column Extensions for ASP.NET Core UI](UI/AspNetCore/Data-Table-Column-Extensions.md)
+* [Data Table Column Extensions for Blazor UI](UI/Blazor/Data-Table-Column-Extensions.md)
* [Data Table Column Extensions for Angular](UI/Angular/Data-Table-Column-Extensions.md)
#### Page Toolbar
@@ -89,6 +91,7 @@ Data table column extension system allows you to add a new column in the data ta
Page toolbar system allows you to add components to the toolbar of a page;
* [Page Toolbar Extensions for ASP.NET Core UI](UI/AspNetCore/Page-Toolbar-Extensions.md)
+* [Page Toolbar Extensions for Blazor UI](UI/Blazor/Page-Toolbar-Extensions.md)
* [Page Toolbar Extensions for Angular](UI/Angular/Page-Toolbar-Extensions.md)
#### Others
diff --git a/docs/en/Emailing.md b/docs/en/Emailing.md
index a98874165d..50e7afc213 100644
--- a/docs/en/Emailing.md
+++ b/docs/en/Emailing.md
@@ -94,7 +94,13 @@ Email sending uses the [setting system](Settings.md) to define settings and get
* **Abp.Mailing.Smtp.EnableSsl**: A value that indicates if the SMTP server uses SSL or not ("true" or "false". Default: "false").
* **Abp.Mailing.Smtp.UseDefaultCredentials**: If true, uses default credentials instead of the provided username and password ("true" or "false". Default: "true").
-The easiest way to define these settings it to add them to the `appsettings.json` file. The [application startup template](Startup-Templates/Application.md) already has these settings in the `appsettings.json`:
+Email settings can be managed from the *Settings Page* of the [Setting Management](Modules/Setting-Management.md) module:
+
+
+
+> Setting Management module is already installed if you've created your solution from the ABP Startup template.
+
+If you don't use the Setting Management module, you can simply define the settings inside your `appsettings.json` file:
````json
"Settings": {
@@ -110,7 +116,7 @@ The easiest way to define these settings it to add them to the `appsettings.json
}
````
-You can set/change these settings using the `ISettingManager` and store values in a database. See the [setting system document](Settings.md) to understand the setting system better.
+You can set/change these settings programmatically using the `ISettingManager` and store values in a database. See the [setting system document](Settings.md) to understand the setting system better.
### Encrypt the SMTP Password
diff --git a/docs/en/Entity-Framework-Core-Oracle.md b/docs/en/Entity-Framework-Core-Oracle.md
index 02aaac305c..8c265149ba 100644
--- a/docs/en/Entity-Framework-Core-Oracle.md
+++ b/docs/en/Entity-Framework-Core-Oracle.md
@@ -4,7 +4,7 @@ This document explains how to switch to the **Oracle** database provider for **[
ABP Framework provides integrations for two different Oracle packages. See one of the following documents based on your provider decision:
-* **[Volo.Abp.EntityFrameworkCore.Oracle](Entity-Framework-Core-Oracle-Official.md)** package uses the official & free oracle driver (which is **currently in beta**).
+* **[Volo.Abp.EntityFrameworkCore.Oracle](Entity-Framework-Core-Oracle-Official.md)** package uses the official & free oracle driver.
* **[Volo.Abp.EntityFrameworkCore.Oracle.Devart](Entity-Framework-Core-Oracle-Devart.md)** package uses the commercial (paid) driver of [Devart](https://www.devart.com/) company.
> You can choose one of the package you want. If you don't know the differences of the packages, please search for it. ABP Framework only provides integrations it doesn't provide support for such 3rd-party libraries.
diff --git a/docs/en/Features.md b/docs/en/Features.md
index 1ec35f730a..b185eb2d74 100644
--- a/docs/en/Features.md
+++ b/docs/en/Features.md
@@ -326,20 +326,12 @@ if (feature != null)
A feature value is available at the client side too, unless you set `IsVisibleToClients` to `false` on the feature definition. The feature values are exposed from the [Application Configuration API](API/Application-Configuration.md) and usable via some services on the UI.
-### ASP.NET Core MVC / Razor Pages UI
+See the following documents to learn how to check features in different UI types:
-Use `abp.features` API to get the feature values.
+* [ASP.NET Core MVC / Razor Pages / JavaScript API](UI/AspNetCore/JavaScript-API/Features.md)
+* [Angular](UI/Angular/Features.md)
-**Example: Get feature values in the JavaScript code**
-
-````js
-var isEnabled = abp.features.values["MyApp.ExcelReporting"] === "true";
-var count = abp.features.values["MyApp.MaxProductCount"];
-````
-
-### Angular UI
-
-See the [features](Features.md) document for the Angular UI.
+**Blazor** applications can use the same `IFeatureChecker` service as explained above.
## Feature Management
diff --git a/docs/en/Getting-Started-Create-Solution.md b/docs/en/Getting-Started-Create-Solution.md
index aa3391adc5..8c62246010 100644
--- a/docs/en/Getting-Started-Create-Solution.md
+++ b/docs/en/Getting-Started-Create-Solution.md
@@ -15,12 +15,12 @@
We will use the ABP CLI to create a new ABP project.
-> Alternatively, you can **create and download** projects from [ABP Framework website](https://abp.io/get-started) by easily selecting the all the options from the page.
+> Alternatively, you can **create and download** projects from the [ABP Framework website](https://abp.io/get-started) by easily selecting all options from the page.
Use the `new` command of the ABP CLI to create a new project:
````shell
-abp new Acme.BookStore{{if UI == "NG"}} -u angular{{else if UI == "Blazor"}} -u blazor{{else if UI == "BlazorServer"}} -u blazor-server{{end}}{{if DB == "Mongo"}} -d mongodb{{end}}{{if Tiered == "Yes"}}{{if UI == "MVC"}} --tiered{{else}} --separate-identity-server{{end}}{{end}}
+abp new Acme.BookStore{{if UI == "NG"}} -u angular{{else if UI == "Blazor"}} -u blazor{{else if UI == "BlazorServer"}} -u blazor-server{{end}}{{if DB == "Mongo"}} -d mongodb{{end}}{{if Tiered == "Yes"}}{{if UI == "MVC" || UI == "BlazorServer"}} --tiered{{else}} --separate-identity-server{{end}}{{end}}
````
*You can use different level of namespaces; e.g. BookStore, Acme.BookStore or Acme.Retail.BookStore.*
@@ -41,6 +41,12 @@ abp new Acme.BookStore{{if UI == "NG"}} -u angular{{else if UI == "Blazor"}} -u
> [ABP CLI document](./CLI.md) covers all of the available commands and options.
+## Mobile Development
+
+If you want to include a [React Native](https://reactnative.dev/) project in your solution, add `-m react-native` (or `--mobile react-native`) argument to project creation command. This is a basic React Native startup template to develop mobile applications integrated to your ABP based backends.
+
+See the [Getting Started with the React Native](Getting-Started-React-Native.md) document to learn how to configure and run the React Native application.
+
### The Solution Structure
The solution has a layered structure (based on the [Domain Driven Design](Domain-Driven-Design.md)) and contains unit & integration test projects. See the [application template document](Startup-Templates/Application.md) to understand the solution structure in details.
@@ -49,7 +55,7 @@ The solution has a layered structure (based on the [Domain Driven Design](Domain
#### MongoDB Transactions
-The [startup template](Startup-templates/Index.md) **disables** transactions in the `.MongoDB` project by default. If your MongoDB server supports transactions, you can enable the it in the *YourProjectMongoDbModule* class's `ConfigureServices` method:
+The [startup template](Startup-templates/Index.md) **disables** transactions in the `.MongoDB` project by default. If your MongoDB server supports transactions, you can enable it in the *YourProjectMongoDbModule* class's `ConfigureServices` method:
```csharp
Configure(options =>
diff --git a/docs/en/Getting-Started-Running-Solution.md b/docs/en/Getting-Started-Running-Solution.md
index a195a4e2a2..3f508589a3 100644
--- a/docs/en/Getting-Started-Running-Solution.md
+++ b/docs/en/Getting-Started-Running-Solution.md
@@ -21,7 +21,7 @@ Check the **connection string** in the `appsettings.json` file under the {{if Ti
````json
"ConnectionStrings": {
- "Default": "Server=localhost;Database=BookStore;Trusted_Connection=True"
+ "Default": "Server=(LocalDb)\MSSQLLocalDB;Database=BookStore;Trusted_Connection=True"
}
````
@@ -193,12 +193,6 @@ It may take a longer time for the first build. Once it finishes, it opens the An
Enter **admin** as the username and **1q2w3E*** as the password to login to the application. The application is up and running. You can start developing your application based on this startup template.
-## Mobile Development
-
-If you want to include a [React Native](https://reactnative.dev/) project in your solution, add `-m react-native` (or `--mobile react-native`) argument to project creation command. This is a basic React Native startup template to develop mobile applications integrated to your ABP based backends.
-
-See the [Getting Started with the React Native](Getting-Started-React-Native.md) document to learn how to configure and run the React Native application.
-
## See Also
* [Web Application Development Tutorial](Tutorials/Part-1.md)
diff --git a/docs/en/Global-Features.md b/docs/en/Global-Features.md
index a0a593288c..cfbf3f98b7 100644
--- a/docs/en/Global-Features.md
+++ b/docs/en/Global-Features.md
@@ -1,3 +1,117 @@
# Global Features
+The purpose of the Global Feature System is to **add a module to your application but disable the features you don't want to use** (or enable only the ones you need). Notice that the features are not determined on runtime, you must select the features **on development time**. Because it will not create database tables, APIs and other stuff for unused features, which is not possible to change then on the runtime.
-TODO (see [#5061](https://github.com/abpframework/abp/issues/5061) until this is documented).
\ No newline at end of file
+## Installation
+> This package is already installed by default with the startup template. So, most of the time, you don't need to install it manually.
+
+### Using the ABP CLI
+
+Open a command line window in the folder of the project (.csproj file) and type the following command:
+
+```bash
+abp add-package Volo.Abp.GlobalFeatures
+```
+
+## Implementation
+
+Global Feature system aims module based feature management . A module has to have own Global Features itself.
+
+### Define a Global Feature
+
+A feature class is something like that:
+
+```csharp
+[GlobalFeatureName(Name)]
+public class PaymentFeature : GlobalFeature
+{
+ public const string Name = "Shopping.Payment";
+
+ public PaymentFeature(GlobalModuleFeatures module) : base(module)
+ {
+ }
+}
+```
+
+### Define Global Module Features
+
+All features of a module have to be defined in a Global Module Features class.
+
+```csharp
+public class GlobalShoppingFeatures : GlobalModuleFeatures
+{
+ public const string ModuleName = "Shopping";
+
+ public GlobalShoppingFeatures(GlobalFeatureManager featureManager) : base(featureManager)
+ {
+ AddFeature(new PaymentFeature(this));
+ // And more features...
+ }
+}
+```
+
+## Usage
+
+### Enable/Disable Features
+
+Global features are managed by modules. Module Features have to be added to Modules of GlobalFeatureManager.
+
+```csharp
+// GerOrAdd might be useful to be sure module features are added.
+var shoppingGlobalFeatures = GlobalFeatureManager.Instance.Modules
+ .GetOrAdd(
+ GlobalShoppingFeatures.ModuleName,
+ ()=> new GlobalShoppingFeatures(GlobalFeatureManager.Instance));
+
+// Able to Enable/Disable with generic type parameter.
+shoppingGlobalFeatures.Enable();
+shoppingGlobalFeatures.Disable();
+
+// Also able to Enable/Disable with string feature name.
+shoppingGlobalFeatures.Enable(PaymentFeature.Name);
+shoppingGlobalFeatures.Disable("Shopping.Payment");
+```
+
+### Check if a feature is enabled
+
+```csharp
+GlobalFeatureManager.Instance.IsEnabled()
+GlobalFeatureManager.Instance.IsEnabled("Shopping.Payment")
+```
+
+Both methods return `bool`.
+
+```csharp
+if (GlobalFeatureManager.Instance.IsEnabled())
+{
+ // Some strong payment codes here...
+}
+```
+
+Beside the manual check, there is `[RequiresGlobalFeature]` attribute to check it declaratively for a controller or page. ABP returns 404 if the related feature was disabled.
+
+```csharp
+[RequiresGlobalFeature(typeof(CommentsFeature))]
+public class PaymentController : AbpController
+{
+ // ...
+}
+```
+
+## When to configure Global Features?
+Global Features have to be configured before application startup. So best place to configuring it is `PreConfigureServices` with **OneTimeRunner** to make sure it runs one time.
+
+```csharp
+private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
+public override void PreConfigureServices(ServiceConfigurationContext context)
+{
+ OneTimeRunner.Run(() =>
+ {
+ GlobalFeatureManager.Instance.Modules.Foo().EnableAll();
+ });
+}
+```
+
+## Features vs Global Features
+[Features](Features.md) & [Global Features](Global-Features.md) are totally different systems.
+
+Features are used to switch on/off application feature for each tenant. So Features, only hides disabled ones, but with Global Features, disabled features pretends like never existed in application.
\ No newline at end of file
diff --git a/docs/en/Index.md b/docs/en/Index.md
index 95052add38..cdd0908821 100644
--- a/docs/en/Index.md
+++ b/docs/en/Index.md
@@ -4,8 +4,9 @@ ABP Framework is a complete **infrastructure** based on the **ASP.NET Core** to
## Getting Started
-* [Getting Started Guide](Getting-Started.md) is the easiest way to start a new web application with the ABP Framework.
-* [Web Application Development Tutorial](Tutorials/Part-1.md) is a complete tutorial to develop a full stack web application.
+* [Quick Start](Tutorials/Todo/Index.md) is a single-part, quick-start tutorial to build a simple application with the ABP Framework. Start with this tutorial if you want to quickly understand how ABP works.
+* [Getting Started](Getting-Started.md) guide can be used to create and run ABP based solutions with different options and details.
+* [Web Application Development Tutorial](Tutorials/Part-1.md) is a complete tutorial to develop a full stack web application with all aspects of a real-life solution.
### UI Framework Options
diff --git a/docs/en/Json.md b/docs/en/Json-Serialization.md
similarity index 100%
rename from docs/en/Json.md
rename to docs/en/Json-Serialization.md
diff --git a/docs/en/Module-Entity-Extensions.md b/docs/en/Module-Entity-Extensions.md
index dc23d1e663..f160f98b1a 100644
--- a/docs/en/Module-Entity-Extensions.md
+++ b/docs/en/Module-Entity-Extensions.md
@@ -1,9 +1,5 @@
# Module Entity Extensions
-> This feature is not supported by the Blazor UI yet.
-
-## 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.
diff --git a/docs/en/Modules/Blogging.md b/docs/en/Modules/Blogging.md
deleted file mode 100644
index 32d2e023ea..0000000000
--- a/docs/en/Modules/Blogging.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Blogging Module
-
-TODO
\ No newline at end of file
diff --git a/docs/en/Modules/Client-Simulation.md b/docs/en/Modules/Client-Simulation.md
deleted file mode 100644
index bc5d38e814..0000000000
--- a/docs/en/Modules/Client-Simulation.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Client Simulation Module
-
-TODO
\ No newline at end of file
diff --git a/docs/en/Modules/Index.md b/docs/en/Modules/Index.md
index 8851f8b554..fbebf9fa0f 100644
--- a/docs/en/Modules/Index.md
+++ b/docs/en/Modules/Index.md
@@ -14,8 +14,6 @@ There are some **free and open source** application modules developed and mainta
* [**Account**](Account.md): Provides UI for the account management and allows user to login/register to the application.
* [**Audit Logging**](Audit-Logging.md): Persists audit logs to a database.
* [**Background Jobs**](Background-Jobs.md): Persist background jobs when using the default background job manager.
-* [**Blogging**](Blogging.md): Used to create fancy blogs. ABP's [own blog](https://blog.abp.io/) already using this module.
-* [**Client Simulation**](Client-Simulation.md): A simple web UI to stress test HTTP APIs by simulating concurrent clients.
* [**CMS Kit**](Cms-Kit.md): A set of reusable *Content Management System* features.
* [**Docs**](Docs.md): Used to create technical documentation website. ABP's [own documentation](https://docs.abp.io) already using this module.
* [**Feature Management**](Feature-Management.md): Used to persist and manage the [features](../Features.md).
@@ -24,7 +22,6 @@ There are some **free and open source** application modules developed and mainta
* [**Permission Management**](Permission-Management.md): Used to persist permissions.
* **[Setting Management](Setting-Management.md)**: Used to persist and manage the [settings](../Settings.md).
* [**Tenant Management**](Tenant-Management.md): Manages tenants for a [multi-tenant](../Multi-Tenancy.md) application.
-* [**Users**](Users.md): Abstract users, so other modules can depend on this module instead of the Identity module.
* [**Virtual File Explorer**](Virtual-File-Explorer.md): Provided a simple UI to view files in [virtual file system](../Virtual-File-System.md).
See [the GitHub repository](https://github.com/abpframework/abp/tree/master/modules) for source code of all modules.
diff --git a/docs/en/Modules/Users.md b/docs/en/Modules/Users.md
deleted file mode 100644
index 1cb0f4b701..0000000000
--- a/docs/en/Modules/Users.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Users Module
-
-TODO
\ No newline at end of file
diff --git a/docs/en/Road-Map.md b/docs/en/Road-Map.md
index 0920639106..02fba61320 100644
--- a/docs/en/Road-Map.md
+++ b/docs/en/Road-Map.md
@@ -1,14 +1,52 @@
# ABP Framework Road Map
-You can always check the milestone planning and the prioritized backlog issues on [the GitHub repository](https://github.com/abpframework/abp/milestones) for a detailed road map. Here, a list of some major items in the backlog;
+This document provides a road map, release schedule and planned features for the ABP Framework.
-* CMS Kit: A set of reusable, extensible and composable Content Management System features.
+## Next Versions
+
+### v4.4
+
+This version will focus on **documentation** and **improvements** of current features. In addition, the following features are planned;
+
+* Publishing distributed events as transactional ([#6126](https://github.com/abpframework/abp/issues/6126))
+* Revisit the microservice demo solution ([#8385](https://github.com/abpframework/abp/issues/8385))
+* A new UI Theme alternative to the Basic Theme ([#6132](https://github.com/abpframework/abp/issues/6132))
+* Improvements and new features to the [CMS Kit](Modules/Cms-Kit.md) module ([#8380](https://github.com/abpframework/abp/issues/8380) [#8381](https://github.com/abpframework/abp/issues/8381))
+* Pre-configured test project for the [Blazor UI](UI/Blazor/Overall.md) ([#5516](https://github.com/abpframework/abp/issues/5516))
+* Razor engine support for text templating ([#8373](https://github.com/abpframework/abp/issues/8373))
+
+**Planned release date**: End of Quarter 2, 2021.
+
+### v4.5
+
+We planned to focus on v5.0 after 4.4 release. However, we may release v4.5 if we see it necessary.
+
+### v5.0
+
+This version will focus on .NET 6 and performance improvements.
+
+* Upgrading to .NET 6
+* .NET Trimming compatibility
+* Using source generators and reducing reflection usage
+* Performance improvements
+* Improving the abp.io platform
+* API Versioning system: finalize & document ([#497](https://github.com/abpframework/abp/issues/497))
+
+**Planned release date**: End of Quarter 4, 2021.
+
+> Note: v5.0 features will be more clear in the next months. We will consider to add new features from the *Backlog Items*.
+
+## Backlog Items
+
+The *Next Versions* section above shows the main focus of the planned versions. However, in each release we add new features to the core framework and the [application modules](Modules/Index.md).
+
+Here, a list of major items in the backlog we are considering to work on in the next versions.
+
+* [#2183](https://github.com/abpframework/abp/issues/2183) / Dapr integration
* [#2882](https://github.com/abpframework/abp/issues/2882) / Providing a gRPC integration infrastructure (while it is [already possible](https://github.com/abpframework/abp-samples/tree/master/GrpcDemo) to create or consume gRPC endpoints for your application, we plan to create endpoints for the [standard application modules](https://docs.abp.io/en/abp/latest/Modules/Index))
-* [#236](https://github.com/abpframework/abp/issues/236) Resource based authorization system
-* [#6132](https://github.com/abpframework/abp/issues/6132) A New Theme alternative to the Basic Theme
-* [#1754](https://github.com/abpframework/abp/issues/1754) / Multi-lingual entities
-* [#497](https://github.com/abpframework/abp/issues/497) API Versioning system finalize & document
* [#633](https://github.com/abpframework/abp/issues/633) / Realtime notification system
+* [#236](https://github.com/abpframework/abp/issues/236) / Resource based authorization system
+* [#1754](https://github.com/abpframework/abp/issues/1754) / Multi-lingual entities
* [#57](https://github.com/abpframework/abp/issues/57) / Built-in CQRS infrastructure
* [#336](https://github.com/abpframework/abp/issues/336) / Health Check abstraction
* [#2532](https://github.com/abpframework/abp/issues/2532), [#2564](https://github.com/abpframework/abp/issues/2465) / CosmosDB integration with EF Core and MongoDB API
@@ -16,6 +54,9 @@ You can always check the milestone planning and the prioritized backlog issues o
* [#162](https://github.com/abpframework/abp/issues/162) / Azure ElasticDB Integration for multitenancy
* [#2296](https://github.com/abpframework/abp/issues/2296) / Feature toggling infrastructure
-The backlog items are subject to change. We are adding new items and changing priorities based on the community feedbacks and goals of the project.
+You can always check the milestone planning and the prioritized backlog issues on [the GitHub repository](https://github.com/abpframework/abp/milestones) for a detailed road map. The backlog items are subject to change. We are adding new items and changing priorities based on the community feedbacks and goals of the project.
+
+## Feature Requests
Vote for your favorite feature on the related GitHub issues (and write your thoughts). You can create an issue on [the GitHub repository](https://github.com/abpframework/abp) for your feature requests, but first search in the existing issues.
+
diff --git a/docs/en/SMS-Sending.md b/docs/en/SMS-Sending.md
index 75069aacbe..bf37814100 100644
--- a/docs/en/SMS-Sending.md
+++ b/docs/en/SMS-Sending.md
@@ -1,3 +1,111 @@
-# Emailing
+# SMS Sending
-TODO!
\ No newline at end of file
+The ABP Framework provides an abstraction to sending SMS. Having such an abstraction has some benefits;
+
+- You can then **easily change** your SMS sender without changing your application code.
+- If you want to create **reusable application modules**, you don't need to make assumption about how the SMS are sent.
+
+## Installation
+
+It is suggested to use the [ABP CLI](CLI.md) to install this package.
+
+### Using the ABP CLI
+
+Open a command line window in the folder of the project (.csproj file) and type the following command:
+
+```bash
+abp add-package Volo.Abp.Sms
+```
+
+### Manual Installation
+
+If you want to manually install;
+
+1. Add the [Volo.Abp.Sms](https://www.nuget.org/packages/Volo.Abp.Sms) NuGet package to your project:
+
+```
+Install-Package Volo.Abp.Sms
+```
+
+2. Add the `AbpSmsModule` to the dependency list of your module:
+
+```csharp
+[DependsOn(
+ //...other dependencies
+ typeof(AbpSmsModule) //Add the new module dependency
+ )]
+public class YourModule : AbpModule
+{
+}
+```
+
+## Sending SMS
+
+[Inject](Dependency-Injection.md) the `ISmsSender` into any service and use the `SendAsync` method to send a SMS.
+
+**Example:**
+
+```csharp
+using System.Threading.Tasks;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Sms;
+
+namespace MyProject
+{
+ public class MyService : ITransientDependency
+ {
+ private readonly ISmsSender _smsSender;
+
+ public MyService(ISmsSender smsSender)
+ {
+ _smsSender = smsSender;
+ }
+
+ public async Task DoItAsync()
+ {
+ await _smsSender.SendAsync(
+ "+012345678901", // target phone number
+ "This is test sms..." // message text
+ );
+ }
+ }
+}
+```
+
+The given `SendAsync` method in the example is an extension method to send an SMS with primitive parameters. In addition, you can pass an `SmsMessage` object which has the following properties:
+
+- `PhoneNumber` (`string`): Target phone number
+- `Text` (`string`): Message text
+- `Properties` (`Dictionary`): Key-value pairs to pass custom arguments
+
+## NullSmsSender
+
+`NullSmsSender` is a the default implementation of the `ISmsSender`. It writes SMS content to the [standard logler](Logging.md), rather than actually sending the SMS.
+
+This class can be useful especially in development time where you generally don't want to send real SMS. **However, if you want to actually send SMS, you should implement the `ISmsSender` in your application code.**
+
+## Implementing the ISmsSender
+
+You can easily create your SMS sending implementation by creating a class that implements the `ISmsSender` interface, as shown below:
+
+```csharp
+using System.IO;
+using System.Threading.Tasks;
+using Volo.Abp.Sms;
+using Volo.Abp.DependencyInjection;
+
+namespace AbpDemo
+{
+ public class MyCustomSmsSender : ISmsSender, ITransientDependency
+ {
+ public async Task SendAsync(SmsMessage smsMessage)
+ {
+ // Send sms
+ }
+ }
+}
+```
+
+## More
+
+[ABP Commercial](https://commercial.abp.io/) provides Twilio integration package to send SMS over [Twilio service](https://docs.abp.io/en/commercial/latest/modules/twilio-sms).
diff --git a/docs/en/Timing.md b/docs/en/Timing.md
index afa4abda71..790721e7a8 100644
--- a/docs/en/Timing.md
+++ b/docs/en/Timing.md
@@ -83,7 +83,7 @@ var normalizedDateTime = Clock.Normalize(dateTime)
* `DateTime` type binding in the ASP.NET Core MVC model binding.
* Saving data to and reading data from database via [Entity Framework Core](Entity-Framework-Core.md).
-* Working with `DateTime` objects on [JSON deserialization](Json.md).
+* Working with `DateTime` objects on [JSON deserialization](Json-Serialization.md).
#### DisableDateTimeNormalization Attribute
diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md
index 4667b8e539..26d6e51c1a 100644
--- a/docs/en/Tutorials/Part-1.md
+++ b/docs/en/Tutorials/Part-1.md
@@ -2,7 +2,7 @@
````json
//[doc-params]
{
- "UI": ["MVC","Blazor","NG"],
+ "UI": ["MVC","Blazor","BlazorServer","NG"],
"DB": ["EF","Mongo"]
}
````
diff --git a/docs/en/Tutorials/Part-10.md b/docs/en/Tutorials/Part-10.md
index ec68dfe955..f0e24c4853 100644
--- a/docs/en/Tutorials/Part-10.md
+++ b/docs/en/Tutorials/Part-10.md
@@ -2,7 +2,7 @@
````json
//[doc-params]
{
- "UI": ["MVC","Blazor","NG"],
+ "UI": ["MVC","Blazor","BlazorServer","NG"],
"DB": ["EF","Mongo"]
}
````
@@ -326,6 +326,7 @@ Open the `BookAppService` interface in the `Books` folder of the `Acme.BookStore
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Linq.Dynamic.Core;
using System.Threading.Tasks;
using Acme.BookStore.Authors;
using Acme.BookStore.Permissions;
@@ -387,23 +388,17 @@ namespace Acme.BookStore.Books
public override async Task> GetListAsync(PagedAndSortedResultRequestDto input)
{
- //Set a default sorting, if not provided
- if (input.Sorting.IsNullOrWhiteSpace())
- {
- input.Sorting = nameof(Book.Name);
- }
-
//Get the IQueryable from the repository
var queryable = await Repository.GetQueryableAsync();
//Prepare a query to join books and authors
var query = from book in queryable
join author in _authorRepository on book.AuthorId equals author.Id
- orderby input.Sorting //TODO: Can not sort like that!
select new {book, author};
//Paging
query = query
+ .OrderBy(NormalizeSorting(input.Sorting))
.Skip(input.SkipCount)
.Take(input.MaxResultCount);
@@ -435,6 +430,25 @@ namespace Acme.BookStore.Books
ObjectMapper.Map, List>(authors)
);
}
+
+ private static string NormalizeSorting(string sorting)
+ {
+ if (sorting.IsNullOrEmpty())
+ {
+ return $"book.{nameof(Book.Name)}";
+ }
+
+ if (sorting.Contains("authorName", StringComparison.OrdinalIgnoreCase))
+ {
+ return sorting.Replace(
+ "authorName",
+ "author.Name",
+ StringComparison.OrdinalIgnoreCase
+ );
+ }
+
+ return $"book.{sorting}";
+ }
}
}
```
@@ -1078,7 +1092,7 @@ That's all. Just run the application and try to create or edit an author.
{{end}}
-{{if UI == "Blazor"}}
+{{if UI == "Blazor" || UI == "BlazorServer"}}
### The Book List
diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md
index 627b55a476..5df5dae343 100644
--- a/docs/en/Tutorials/Part-2.md
+++ b/docs/en/Tutorials/Part-2.md
@@ -2,7 +2,7 @@
````json
//[doc-params]
{
- "UI": ["MVC","Blazor","NG"],
+ "UI": ["MVC","Blazor","BlazorServer","NG"],
"DB": ["EF","Mongo"]
}
````
@@ -447,7 +447,11 @@ For more information, see the [RoutesService document](../UI/Angular/Modifying-t
[ABP CLI](../CLI.md) provides `generate-proxy` command that generates client proxies for your HTTP APIs to make easy to consume your HTTP APIs from the client side. Before running `generate-proxy` command, your host must be up and running.
-Run the following command in the `angular` folder:
+> **Warning**: There is a problem with IIS Express; it doesn't allow to connect to the application from another process. If you are using Visual Studio, select the `Acme.BookStore.HttpApi.Host` instead of IIS Express in the run button drop-down list, as shown in the figure below:
+
+
+
+Once the host application is running, execute the following command in the `angular` folder:
```bash
abp generate-proxy
@@ -531,7 +535,7 @@ Now you can see the final result on your browser:

-{{else if UI == "Blazor"}}
+{{else if UI == "Blazor" || UI == "BlazorServer"}}
## Create a Books Page
diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md
index ec326ddb65..03daab1843 100644
--- a/docs/en/Tutorials/Part-3.md
+++ b/docs/en/Tutorials/Part-3.md
@@ -2,7 +2,7 @@
````json
//[doc-params]
{
- "UI": ["MVC","Blazor","NG"],
+ "UI": ["MVC","Blazor","BlazorServer","NG"],
"DB": ["EF","Mongo"]
}
````
@@ -709,7 +709,7 @@ Open `/src/app/book/book.component.html` and make the following changes:
-
@@ -844,7 +844,7 @@ Also replace `` with the following code p
````html
-
+
{%{{{ '::Close' | abpLocalization }}}%}
@@ -1158,7 +1158,7 @@ Clicking the "Delete" action calls the `delete` method which then shows a confir
{{end}}
-{{if UI == "Blazor"}}
+{{if UI == "Blazor" || UI == "BlazorServer"}}
## Creating a New Book
diff --git a/docs/en/Tutorials/Part-4.md b/docs/en/Tutorials/Part-4.md
index 2262598544..85c6c6502e 100644
--- a/docs/en/Tutorials/Part-4.md
+++ b/docs/en/Tutorials/Part-4.md
@@ -2,7 +2,7 @@
````json
//[doc-params]
{
- "UI": ["MVC","Blazor","NG"],
+ "UI": ["MVC","Blazor","BlazorServer","NG"],
"DB": ["EF","Mongo"]
}
````
diff --git a/docs/en/Tutorials/Part-5.md b/docs/en/Tutorials/Part-5.md
index 7ad9aed970..e8274116f4 100644
--- a/docs/en/Tutorials/Part-5.md
+++ b/docs/en/Tutorials/Part-5.md
@@ -2,7 +2,7 @@
````json
//[doc-params]
{
- "UI": ["MVC","Blazor","NG"],
+ "UI": ["MVC","Blazor","BlazorServer","NG"],
"DB": ["EF","Mongo"]
}
````
diff --git a/docs/en/Tutorials/Part-6.md b/docs/en/Tutorials/Part-6.md
index d5df8133b7..f6601a9afd 100644
--- a/docs/en/Tutorials/Part-6.md
+++ b/docs/en/Tutorials/Part-6.md
@@ -2,7 +2,7 @@
````json
//[doc-params]
{
- "UI": ["MVC","Blazor","NG"],
+ "UI": ["MVC","Blazor","BlazorServer","NG"],
"DB": ["EF","Mongo"]
}
````
diff --git a/docs/en/Tutorials/Part-7.md b/docs/en/Tutorials/Part-7.md
index e14237fd59..e359a3d22f 100644
--- a/docs/en/Tutorials/Part-7.md
+++ b/docs/en/Tutorials/Part-7.md
@@ -2,7 +2,7 @@
````json
//[doc-params]
{
- "UI": ["MVC","Blazor","NG"],
+ "UI": ["MVC","Blazor","BlazorServer","NG"],
"DB": ["EF","Mongo"]
}
````
diff --git a/docs/en/Tutorials/Part-8.md b/docs/en/Tutorials/Part-8.md
index 6ab14c714c..fe8cbd2732 100644
--- a/docs/en/Tutorials/Part-8.md
+++ b/docs/en/Tutorials/Part-8.md
@@ -2,7 +2,7 @@
````json
//[doc-params]
{
- "UI": ["MVC","Blazor","NG"],
+ "UI": ["MVC","Blazor","BlazorServer","NG"],
"DB": ["EF","Mongo"]
}
````
@@ -267,7 +267,7 @@ public async Task CreateAsync(CreateAuthorDto input)
````
* `CreateAsync` requires the `BookStorePermissions.Authors.Create` permission (in addition to the `BookStorePermissions.Authors.Default` declared for the `AuthorAppService` class).
-* Used the `AuthorManeger` (domain service) to create a new author.
+* Used the `AuthorManager` (domain service) to create a new author.
* Used the `IAuthorRepository.InsertAsync` to insert the new author to the database.
* Used the `ObjectMapper` to return an `AuthorDto` representing the newly created author.
@@ -566,4 +566,4 @@ Created some tests for the application service methods, which should be clear to
## The Next Part
-See the [next part](Part-9.md) of this tutorial.
\ No newline at end of file
+See the [next part](Part-9.md) of this tutorial.
diff --git a/docs/en/Tutorials/Part-9.md b/docs/en/Tutorials/Part-9.md
index c7f5dc8beb..1fb4d0e703 100644
--- a/docs/en/Tutorials/Part-9.md
+++ b/docs/en/Tutorials/Part-9.md
@@ -2,7 +2,7 @@
````json
//[doc-params]
{
- "UI": ["MVC","Blazor","NG"],
+ "UI": ["MVC","Blazor","BlazorServer","NG"],
"DB": ["EF","Mongo"]
}
````
@@ -792,7 +792,7 @@ Open the `/src/app/author/author.component.html` and replace the content as belo
-
+
{%{{{ '::Close' | abpLocalization }}}%}
@@ -832,7 +832,7 @@ That's all! This is a fully working CRUD page, you can create, edit and delete a
{{end}}
-{{if UI == "Blazor"}}
+{{if UI == "Blazor" || UI == "BlazorServer"}}
## The Author Management Page
diff --git a/docs/en/Tutorials/Todo/Index.md b/docs/en/Tutorials/Todo/Index.md
new file mode 100644
index 0000000000..5bbf4c8eaf
--- /dev/null
+++ b/docs/en/Tutorials/Todo/Index.md
@@ -0,0 +1,824 @@
+# Quick Start
+
+````json
+//[doc-params]
+{
+ "UI": ["MVC", "Blazor", "BlazorServer", "NG"],
+ "DB": ["EF", "Mongo"]
+}
+````
+
+This is a single-part, quick-start tutorial to build a simple todo application with the ABP Framework. Here, a screenshot from the final application:
+
+
+
+You can find source code of the completed application [here](https://github.com/abpframework/abp-samples/tree/master/TodoApp).
+
+## Pre-Requirements
+
+* An IDE (e.g. [Visual Studio](https://visualstudio.microsoft.com/vs/)) that supports [.NET 5.0+](https://dotnet.microsoft.com/download/dotnet) development.
+
+{{if DB=="Mongo"}}
+
+* [MongoDB Server 4.0+](https://docs.mongodb.com/manual/administration/install-community/)
+
+{{end}}
+
+{{if UI=="NG"}}
+
+* [Node v14.x](https://nodejs.org/)
+
+{{end}}
+
+## Creating a New Solution
+
+We will use the [ABP CLI](../../CLI.md) to create new solutions with the ABP Framework. You can run the following command in a command-line terminal to install it:
+
+````bash
+dotnet tool install -g Volo.Abp.Cli
+````
+
+Then create an empty folder, open a command-line terminal and execute the following command in the terminal:
+
+````bash
+abp new TodoApp{{if UI=="Blazor"}} -u blazor{{else if UI=="BlazorServer"}} -u blazor-server{{else if UI=="NG"}} -u angular{{end}}{{if DB=="Mongo"}} -d mongodb{{end}}
+````
+
+{{if UI=="NG"}}
+
+This will create a new solution, named *TodoApp* with `angular` and `aspnet-core` folders. Once the solution is ready, open the ASP.NET Core solution in your favorite IDE.
+
+{{else}}
+
+This will create a new solution, named *TodoApp*. Once the solution is ready, open it in your favorite IDE.
+
+{{end}}
+
+### Create the Database
+
+If you are using Visual Studio, right click to the `TodoApp.DbMigrator` project, select *Set as StartUp Project*, then hit *Ctrl+F5* to run it without debugging. It will create the initial database and seed the initial data.
+
+{{if DB=="EF"}}
+
+> Some IDEs (e.g. Rider) may have problems for the first run since *DbMigrator* adds the initial migration and re-compiles the project. In this case, open a command-line terminal in the folder of the `.DbMigrator` project and execute the `dotnet run` command.
+
+{{end}}
+
+### Run the Application
+
+{{if UI=="MVC" || UI=="BlazorServer"}}
+
+It is good to run the application before starting the development. Ensure the {{if UI=="BlazorServer"}}`TodoApp.Blazor`{{else}}`TodoApp.Web`{{end}} project is the startup project, then run the application (Ctrl+F5 in Visual Studio) to see the initial UI:
+
+{{else if UI=="Blazor"}}
+
+It is good to run the application before starting the development. The solution has two main applications;
+
+* `TodoApp.HttpApi.Host` host the server-side HTTP API.
+* `TodoApp.Blazor` is the client-side Blazor WebAssembly application.
+
+Ensure the `TodoApp.HttpApi.Host` project is the startup project, then run the application (Ctrl+F5 in Visual Studio) to see the server-side HTTP API on the [Swagger UI](https://swagger.io/tools/swagger-ui/):
+
+
+
+You can explore and test your HTTP API with this UI. Now, we can set the `TodoApp.Blazor` as the startup project and run it to open the actual Blazor application UI:
+
+{{else if UI=="NG"}}
+
+It is good to run the application before starting the development. The solution has two main applications;
+
+* `TodoApp.HttpApi.Host` (in the .NET solution) host the server-side HTTP API.
+* `angular` folder contains the Angular application.
+
+Ensure the `TodoApp.HttpApi.Host` project is the startup project, then run the application (Ctrl+F5 in Visual Studio) to see the server-side HTTP API on the [Swagger UI](https://swagger.io/tools/swagger-ui/):
+
+
+
+You can explore and test your HTTP API with this UI. If that works, we can run the Angular client application.
+
+First, run the following command to restore the NPM packages;
+
+````bash
+npm install
+````
+
+It will take some time to install all the packages. Then you can run the application using the following command:
+
+````bash
+npm start
+````
+
+This command takes time, but eventually runs and opens the application in your default browser:
+
+{{end}}
+
+
+
+You can click to the *Login* button, use `admin` as the username and `1q2w3E*` as the password to login to the application.
+
+All ready. We can start the coding!
+
+## Domain Layer
+
+This application has a single [entity](../../Entities.md) and we are starting by creating it. Create a new `TodoItem` class inside the *TodoApp.Domain* project:
+
+````csharp
+using System;
+using Volo.Abp.Domain.Entities;
+
+namespace TodoApp
+{
+ public class TodoItem : BasicAggregateRoot
+ {
+ public string Text { get; set; }
+ }
+}
+````
+
+`BasicAggregateRoot` is one the simplest base class to create root entities, and `Guid` is the primary key (`Id`) of the entity here.
+
+## Database Integration
+
+{{if DB=="EF"}}
+
+Next step is to setup the [Entity Framework Core](../../Entity-Framework-Core.md) configuration.
+
+### Mapping Configuration
+
+Open the `TodoAppDbContext` class in the `EntityFrameworkCore` folder of the *TodoApp.EntityFrameworkCore* project and add a new `DbSet` property to this class:
+
+````csharp
+public DbSet TodoItems { get; set; }
+````
+
+Then open the `TodoAppDbContextModelCreatingExtensions` class in the same folder and add a mapping configuration for the `TodoItem` class as shown below:
+
+````csharp
+public static void ConfigureTodoApp(this ModelBuilder builder)
+{
+ Check.NotNull(builder, nameof(builder));
+
+ builder.Entity(b =>
+ {
+ b.ToTable("TodoItems");
+ });
+}
+````
+
+We've mapped `TodoItem` entity to a `TodoItems` table in the database.
+
+### Code First Migrations
+
+The startup solution is configured to use Entity Framework Core [Code First Migrations](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations). Since we've changed the database mapping configuration, we should create a new migration and apply changes to the database.
+
+Open a command-line terminal in the directory of the *TodoApp.EntityFrameworkCore.DbMigrations* project and type the following command:
+
+````bash
+dotnet ef migrations add Added_TodoItem
+````
+
+This will add a new migration class to the project:
+
+
+
+You can apply changes to the database using the following command, in the same command-line terminal:
+
+````bash
+dotnet ef database update
+````
+
+> If you are using Visual Studio, you may want to use `Add-Migration Added_TodoItem` and `Update-Database` commands in the *Package Manager Console (PMC)*. In this case, ensure that {{if UI=="MVC"}}`TodoApp.Web`{{else if UI=="BlazorServer"}}`TodoApp.Blazor`{{else if UI=="Blazor" || UI=="NG"}}`TodoApp.HttpApi.Host`{{end}} is the startup project and `TodoApp.EntityFrameworkCore.DbMigrations` is the *Default Project* in PMC.
+
+{{else if DB=="Mongo"}}
+
+Next step is to setup the [MongoDB](../../MongoDB.md) configuration. Open the `TodoAppMongoDbContext` class in the `MongoDb` folder of the *TodoApp.MongoDB* project and make the following changes;
+
+1. Add a new property to the class:
+
+````csharp
+public IMongoCollection TodoItems => Collection();
+````
+
+2. Add the following code inside the `CreateModel` method:
+
+````csharp
+modelBuilder.Entity(b =>
+{
+ b.CollectionName = "TodoItems";
+});
+````
+
+{{end}}
+
+Now, we can use ABP repositories to save and retrieve todo items, as we'll do in the next section.
+
+## Application Layer
+
+An [Application Service](../../Application-Services.md) is used to perform use cases of the application. We need to perform the following use cases;
+
+* Get the list of todo items
+* Create a new todo item
+* Delete an existing todo item
+
+### Application Service Interface
+
+We can start by defining an interface for the application service. Create a new `ITodoAppService` interface in the *TodoApp.Application.Contracts* project, as shown below:
+
+````csharp
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Services;
+
+namespace TodoApp
+{
+ public interface ITodoAppService : IApplicationService
+ {
+ Task> GetListAsync();
+ Task CreateAsync(string text);
+ Task DeleteAsync(Guid id);
+ }
+}
+````
+
+### Data Transfer Object
+
+`GetListAsync` and `CreateAsync` methods return `TodoItemDto`. Applications Services typically gets and returns DTOs ([Data Transfer Objects](../../Data-Transfer-Objects.md)) instead of entities. So, we should define the DTO class here. Create a new `TodoItemDto` class inside the *TodoApp.Application.Contracts* project:
+
+````csharp
+using System;
+
+namespace TodoApp
+{
+ public class TodoItemDto
+ {
+ public Guid Id { get; set; }
+ public string Text { get; set; }
+ }
+}
+````
+
+This is a very simple DTO class that matches to our `TodoItem` entity. We are ready to implement the `ITodoAppService`.
+
+### Application Service Implementation
+
+Create a `TodoAppService` class inside the *TodoApp.Application* project, as shown below:
+
+````csharp
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Services;
+using Volo.Abp.Domain.Repositories;
+
+namespace TodoApp
+{
+ public class TodoAppService : ApplicationService, ITodoAppService
+ {
+ private readonly IRepository _todoItemRepository;
+
+ public TodoAppService(IRepository todoItemRepository)
+ {
+ _todoItemRepository = todoItemRepository;
+ }
+
+ // TODO: Implement the methods here...
+ }
+}
+````
+
+This class inherits from the `ApplicationService` class of the ABP Framework and implements the `ITodoAppService` that was defined before. ABP provides default generic [repositories](../../Repositories.md) for the entities. We can use them to perform the fundamental database operations. This class [injects](../../Dependency-Injection.md) `IRepository`, which is the default repository for the `TodoItem` entity. We will use it to implement the use cases described before.
+
+#### Getting Todo Items
+
+Let's start by implementing the `GetListAsync` method:
+
+````csharp
+public async Task> GetListAsync()
+{
+ var items = await _todoItemRepository.GetListAsync();
+ return items
+ .Select(item => new TodoItemDto
+ {
+ Id = item.Id,
+ Text = item.Text
+ }).ToList();
+}
+````
+
+We are simply getting the complete `TodoItem` list from database, mapping them to `TodoItemDto` objects and returning as the result.
+
+#### Creating a New Todo Item
+
+Next method is `CreateAsync` and we can implement it as shown below:
+
+````csharp
+public async Task CreateAsync(string text)
+{
+ var todoItem = await _todoItemRepository.InsertAsync(
+ new TodoItem {Text = text}
+ );
+
+ return new TodoItemDto
+ {
+ Id = todoItem.Id,
+ Text = todoItem.Text
+ };
+}
+````
+
+Repository's `InsertAsync` method inserts the given `TodoItem` to database and returns the same `TodoItem` object. It also sets the `Id`, so we can use it on the returning object. We are simply returning a `TodoItemDto` by creating from the new `TodoItem` entity.
+
+#### Deleting a Todo Item
+
+Finally, we can implement the `DeleteAsync` as the following code block:
+
+````csharp
+public async Task DeleteAsync(Guid id)
+{
+ await _todoItemRepository.DeleteAsync(id);
+}
+````
+
+The application service is ready to be used from the UI layer.
+
+## User Interface Layer
+
+It is time to show the todo items on the UI! Before starting to write the code, it would be good to remember what we are trying to build. Here, a sample screenshot from the final UI:
+
+
+
+> **We will keep the UI side minimal for this tutorial to make the tutorial simple and focused. See the [web application development tutorial](../Part-1.md) to build real-life pages with all aspects.**
+
+{{if UI=="MVC"}}
+
+### Index.cshtml.cs
+
+Open the `Index.cshtml.cs` file in the `Pages` folder of the *TodoApp.Web* project and replace the content with the following code block:
+
+````csharp
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace TodoApp.Web.Pages
+{
+ public class IndexModel : TodoAppPageModel
+ {
+ public List TodoItems { get; set; }
+
+ private readonly ITodoAppService _todoAppService;
+
+ public IndexModel(ITodoAppService todoAppService)
+ {
+ _todoAppService = todoAppService;
+ }
+
+ public async Task OnGetAsync()
+ {
+ TodoItems = await _todoAppService.GetListAsync();
+ }
+ }
+}
+````
+
+This class uses the `ITodoAppService` to get the list of todo items and assign the the `TodoItems` property. We will use it to render the todo items on the razor page.
+
+### Index.cshtml
+
+Open the `Index.cshtml` file in the `Pages` folder of the *TodoApp.Web* project and replace with the following content:
+
+````xml
+@page
+@model TodoApp.Web.Pages.IndexModel
+@section styles {
+
+}
+@section scripts {
+
+}
+
+
+
+
+ TODO LIST
+
+
+
+
+
+
+
+
+ @foreach (var todoItem in Model.TodoItems)
+ {
+
+ @todoItem.Text
+
+ }
+
+
+
+
+````
+
+We are using ABP's [card tag helper](../../UI/AspNetCore/Tag-Helpers/Cards.md) to create a simple card view. You could directly use the standard bootstrap HTML structure, however the ABP [tag helpers]() make it much easier and type safe.
+
+This page imports a CSS and a JavaScript file, so we should also create them.
+
+### Index.js
+
+Open the `Index.js` file in the `Pages` folder of the *TodoApp.Web* project and replace with the following content:
+
+````js
+$(function () {
+
+ // DELETING ITEMS /////////////////////////////////////////
+ $('#TodoList').on('click', 'li i', function(){
+ var $li = $(this).parent();
+ var id = $li.attr('data-id');
+
+ todoApp.todo.delete(id).then(function(){
+ $li.remove();
+ abp.notify.info('Deleted the todo item.');
+ });
+ });
+
+ // CREATING NEW ITEMS /////////////////////////////////////
+ $('#NewItemForm').submit(function(e){
+ e.preventDefault();
+
+ var todoText = $('#NewItemText').val();
+ todoApp.todo.create(todoText).then(function(result){
+ $('
')
+ .html(' ' + result.text)
+ .appendTo($('#TodoList'));
+ $('#NewItemText').val('');
+ });
+ });
+});
+````
+
+In the first part, we are registering to click events of the trash icons near to the todo items, deleting the related item on the server and showing a notification on the UI. Also, we are removing the deleted item from DOM, so we don't need to refresh the page.
+
+In the second part, we are creating a new todo item on the server. If it succeed, we are then manipulating DOM to insert a new `
` element to the todo list. In this way, no need to refresh the whole page after creating a new todo item.
+
+The interesting part here is how we communicate with the server. See the *Dynamic JavaScript Proxies & Auto API Controllers* section to understand how it works. But now, let's continue and complete the application.
+
+### Index.css
+
+As the final touch, open the `Index.css` file in the `Pages` folder of the *TodoApp.Web* project and replace with the following content:
+
+````css
+#TodoList{
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+#TodoList li {
+ padding: 5px;
+ margin: 5px 0px;
+ border: 1px solid #cccccc;
+ background-color: #f5f5f5;
+}
+
+#TodoList li i
+{
+ opacity: 0.5;
+}
+
+#TodoList li i:hover
+{
+ opacity: 1;
+ color: #ff0000;
+ cursor: pointer;
+}
+````
+
+This is a simple styling for the todo page. We believe that you can do much better :)
+
+Now, you can run the application again to see the result.
+
+### Dynamic JavaScript Proxies & Auto API Controllers
+
+In the `Index.js` file, we've used `todoApp.todo.delete(...)` and `todoApp.todo.create(...)` functions to communicate with the server. These functions are dynamically created by the ABP Framework, thanks to the [Dynamic JavaScript Client Proxy](../../UI/AspNetCore/Dynamic-JavaScript-Proxies.md) system. They perform HTTP API calls to the server and return a promise, so you can register a callback to the `then` function as we've done above.
+
+However, you may ask that we haven't created any API Controller, so how server handles these requests? This question brings us the [Auto API Controller](../../API/Auto-API-Controllers.md) feature of the ABP Framework. It automatically converts the application services to API Controllers by conventions.
+
+If you open the [Swagger UI](https://swagger.io/tools/swagger-ui/) by entering the `/swagger` URL in your application, you can see the Todo API:
+
+
+
+{{else if UI=="Blazor" || UI=="BlazorServer"}}
+
+### Index.razor.cs
+
+Open the `Index.razor.cs` file in the `Pages` folder of the *TodoApp.Blazor* project and replace the content with the following code block:
+
+````csharp
+using Microsoft.AspNetCore.Components;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace TodoApp.Blazor.Pages
+{
+ public partial class Index
+ {
+ [Inject]
+ private ITodoAppService TodoAppService { get; set; }
+
+ private List TodoItems { get; set; } = new List();
+ private string NewTodoText { get; set; }
+
+ protected async override Task OnInitializedAsync()
+ {
+ TodoItems = await TodoAppService.GetListAsync();
+ }
+
+ private async Task Create()
+ {
+ var result = await TodoAppService.CreateAsync(NewTodoText);
+ TodoItems.Add(result);
+ NewTodoText = null;
+ }
+
+ private async Task Delete(TodoItemDto todoItem)
+ {
+ await TodoAppService.DeleteAsync(todoItem.Id);
+ await Notify.Info("Deleted the todo item.");
+ TodoItems.Remove(todoItem);
+ }
+ }
+}
+````
+
+This class uses the `ITodoAppService` to perform operations for the todo items. It manipulates the `TodoItems` list after create and delete operations. In this way, we don't need to refresh the whole todo list from the server.
+
+{{if UI=="Blazor"}}
+
+See the *Dynamic C# Proxies & Auto API Controllers* section below to learn how we could inject and use the application service interface from the Blazor application which is running on the browser! But now, let's continue and complete the application.
+
+{{end # Blazor}}
+
+### Index.razor
+
+Open the `Index.razor` file in the `Pages` folder of the *TodoApp.Blazor* project and replace the content with the following code block:
+
+````xml
+@page "/"
+@inherits TodoAppComponentBase
+
+
+
+
+ TODO LIST
+
+
+
+
+
+
+
+
+ @foreach (var todoItem in TodoItems)
+ {
+
+ Delete(todoItem)"
+ > @todoItem.Text
+
+ }
+
+
+
+
+````
+
+### Index.razor.css
+
+As the final touch, open the `Index.razor.css` file in the `Pages` folder of the *TodoApp.Web* project and replace with the following content:
+
+````css
+#TodoList{
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+#TodoList li {
+ padding: 5px;
+ margin: 5px 0px;
+ border: 1px solid #cccccc;
+ background-color: #f5f5f5;
+}
+
+#TodoList li i
+{
+ opacity: 0.5;
+}
+
+#TodoList li i:hover
+{
+ opacity: 1;
+ color: #ff0000;
+ cursor: pointer;
+}
+````
+
+This is a simple styling for the todo page. We believe that you can do much better :)
+
+Now, you can run the application again to see the result.
+
+{{if UI=="Blazor"}}
+
+### Dynamic C# Proxies & Auto API Controllers
+
+In the `Index.razor.cs` file, we've injected (with the `[Inject]` attribute) and used the `ITodoAppService` just like using a local service. Remember that the Blazor application is running on the browser while the implementation of this application service is running on the server.
+
+The magic is done by the ABP Framework's [Dynamic C# Client Proxy](../../API/Dynamic-CSharp-API-Clients.md) system. It uses the standard `HttpClient` and performs HTTP API requests to the remote server. It also handles all the standard tasks for us, including authorization, JSON serialization and exception handling.
+
+However, you may ask that we haven't created any API Controller, so how server handles these requests? This question brings us the [Auto API Controller](../../API/Auto-API-Controllers.md) feature of the ABP Framework. It automatically converts the application services to API Controllers by conventions.
+
+If you run the `TodoApp.HttpApi.Host` application, you can see the Todo API:
+
+
+
+{{end # Blazor}}
+
+{{else if UI=="NG"}}
+
+### Service Proxy Generation
+
+ABP provides a handy feature to automatically create client-side services to easily consume HTTP APIs provided by the server.
+
+You first need to run the `TodoApp.HttpApi.Host` project since the proxy generator reads API definitions from the server application.
+
+> **Warning**: There is a problem with IIS Express; it doesn't allow to connect to the application from another process. If you are using Visual Studio, select the `TodoApp.HttpApi.Host` instead of IIS Express in the run button drop-down list, as shown in the figure below:
+
+
+
+Once you run the `TodoApp.HttpApi.Host` project, open a command-line terminal in the `angular` folder and type the following command:
+
+````bash
+abp generate-proxy
+````
+
+If everything goes well, it should generate an output like shown below:
+
+````bash
+CREATE src/app/proxy/generate-proxy.json (170978 bytes)
+CREATE src/app/proxy/README.md (1000 bytes)
+CREATE src/app/proxy/todo.service.ts (794 bytes)
+CREATE src/app/proxy/models.ts (66 bytes)
+CREATE src/app/proxy/index.ts (58 bytes)
+````
+
+We can then use the `todoService` to use the server-side HTTP APIs, as we'll do in the next section.
+
+### home.component.ts
+
+Open the `/angular/src/app/home/home.component.ts` file and replace its content with the following code block:
+
+````js
+import { ToasterService } from '@abp/ng.theme.shared';
+import { Component, OnInit } from '@angular/core';
+import { TodoItemDto, TodoService } from '@proxy';
+
+@Component({
+ selector: 'app-home',
+ templateUrl: './home.component.html',
+ styleUrls: ['./home.component.scss']
+})
+export class HomeComponent implements OnInit {
+
+ todoItems: TodoItemDto[];
+ newTodoText: string;
+
+ constructor(
+ private todoService: TodoService,
+ private toasterService: ToasterService)
+ { }
+
+ ngOnInit(): void {
+ this.todoService.getList().subscribe(response => {
+ this.todoItems = response;
+ });
+ }
+
+ create(): void{
+ this.todoService.create(this.newTodoText).subscribe((result) => {
+ this.todoItems = this.todoItems.concat(result);
+ this.newTodoText = null;
+ });
+ }
+
+ delete(id: string): void {
+ this.todoService.delete(id).subscribe(() => {
+ this.todoItems = this.todoItems.filter(item => item.id !== id);
+ this.toasterService.info('Deleted the todo item.');
+ });
+ }
+}
+
+````
+
+We've used the `todoService` to get the list of todo items and assigned the returning value to the `todoItems` array. We've also added `create` and `delete` methods. These methods will be used in the view side.
+
+### home.component.html
+
+Open the `/angular/src/app/home/home.component.html` file and replace its content with the following code block:
+
+````html
+
+
+
+
TODO LIST
+
+
+
+
+
+
+
+
+ {%{{{ todoItem.text }}}%}
+
+
+
+
+
+````
+
+### home.component.scss
+
+As the final touch, open the `/angular/src/app/home/home.component.scss` file and replace its content with the following code block:
+
+````css
+#TodoList{
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+#TodoList li {
+ padding: 5px;
+ margin: 5px 0px;
+ border: 1px solid #cccccc;
+ background-color: #f5f5f5;
+}
+
+#TodoList li i
+{
+ opacity: 0.5;
+}
+
+#TodoList li i:hover
+{
+ opacity: 1;
+ color: #ff0000;
+ cursor: pointer;
+}
+````
+
+This is a simple styling for the todo page. We believe that you can do much better :)
+
+Now, you can run the application again to see the result.
+
+{{end}}
+
+## Conclusion
+
+In this tutorial, we've build a very simple application to warm up to the ABP Framework. If you are looking to build a serious application, please check the [web application development tutorial](../Part-1.md) which covers all the aspects of a real-life web application development.
+
+## Source Code
+
+You can find source code of the completed application [here](https://github.com/abpframework/abp-samples/tree/master/TodoApp).
+
+## See Also
+
+* [Web Application Development Tutorial](../Part-1.md)
\ No newline at end of file
diff --git a/docs/en/Tutorials/Todo/run-without-iisexpress.png b/docs/en/Tutorials/Todo/run-without-iisexpress.png
new file mode 100644
index 0000000000..41898e6c00
Binary files /dev/null and b/docs/en/Tutorials/Todo/run-without-iisexpress.png differ
diff --git a/docs/en/Tutorials/Todo/todo-api.png b/docs/en/Tutorials/Todo/todo-api.png
new file mode 100644
index 0000000000..f9a25f57b5
Binary files /dev/null and b/docs/en/Tutorials/Todo/todo-api.png differ
diff --git a/docs/en/Tutorials/Todo/todo-efcore-migration.png b/docs/en/Tutorials/Todo/todo-efcore-migration.png
new file mode 100644
index 0000000000..df370aebcf
Binary files /dev/null and b/docs/en/Tutorials/Todo/todo-efcore-migration.png differ
diff --git a/docs/en/Tutorials/Todo/todo-list.png b/docs/en/Tutorials/Todo/todo-list.png
new file mode 100644
index 0000000000..e2eaf8bc46
Binary files /dev/null and b/docs/en/Tutorials/Todo/todo-list.png differ
diff --git a/docs/en/Tutorials/Todo/todo-swagger-ui-initial.png b/docs/en/Tutorials/Todo/todo-swagger-ui-initial.png
new file mode 100644
index 0000000000..1d3ed405c7
Binary files /dev/null and b/docs/en/Tutorials/Todo/todo-swagger-ui-initial.png differ
diff --git a/docs/en/Tutorials/Todo/todo-ui-initial.png b/docs/en/Tutorials/Todo/todo-ui-initial.png
new file mode 100644
index 0000000000..44be4ceaf6
Binary files /dev/null and b/docs/en/Tutorials/Todo/todo-ui-initial.png differ
diff --git a/docs/en/Tutorials/images/vs-run-without-iisexpress.png b/docs/en/Tutorials/images/vs-run-without-iisexpress.png
new file mode 100644
index 0000000000..03c30e2b48
Binary files /dev/null and b/docs/en/Tutorials/images/vs-run-without-iisexpress.png differ
diff --git a/docs/en/UI/Angular/Entity-Action-Extensions.md b/docs/en/UI/Angular/Entity-Action-Extensions.md
index fd22e293fd..1ee0a3b70a 100644
--- a/docs/en/UI/Angular/Entity-Action-Extensions.md
+++ b/docs/en/UI/Angular/Entity-Action-Extensions.md
@@ -180,7 +180,7 @@ Let's employ dependency injection to extend the functionality of `IdentityModule
-
+
{%{{{ 'AbpUi::Close' | abpLocalization }}}%}
diff --git a/docs/en/UI/Angular/How-Replaceable-Components-Work-with-Extensions.md b/docs/en/UI/Angular/How-Replaceable-Components-Work-with-Extensions.md
index d942975646..147f8010a6 100644
--- a/docs/en/UI/Angular/How-Replaceable-Components-Work-with-Extensions.md
+++ b/docs/en/UI/Angular/How-Replaceable-Components-Work-with-Extensions.md
@@ -215,7 +215,7 @@ Open the generated `src/app/my-role/my-role.component.html` file and replace its
-
+
{%{{{ 'AbpIdentity::Cancel' | abpLocalization }}}%}
{%{{{
diff --git a/docs/en/UI/Angular/Modal.md b/docs/en/UI/Angular/Modal.md
index f1583d4813..144f38e842 100644
--- a/docs/en/UI/Angular/Modal.md
+++ b/docs/en/UI/Angular/Modal.md
@@ -6,7 +6,7 @@ The `abp-modal` provides some additional benefits:
- It is **flexible**. You can pass header, body, footer templates easily by adding the templates to the `abp-modal` content. It can also be implemented quickly.
- Provides several inputs be able to customize the modal and several outputs be able to listen to some events.
- - Automatically detects the close button which has a `#abpClose` template variable and closes the modal when pressed this button.
+ - Automatically detects the close button which has a `abpClose` directive attached to and closes the modal when pressed this button.
- Automatically detects the `abp-button` and triggers its loading spinner when the `busy` input value of the modal component is true.
- Automatically checks if the form inside the modal **has changed, but not saved**. It warns the user by displaying a [confirmation popup](Confirmation-Service) in this case when a user tries to close the modal or refresh/close the tab of the browser.
@@ -47,7 +47,7 @@ You can add the `abp-modal` to your component very quickly. See an example:
- Close
+ Close
```
@@ -116,7 +116,7 @@ See an example form inside a modal:
-
+
Cancel
diff --git a/docs/en/UI/Angular/Page-Component.md b/docs/en/UI/Angular/Page-Component.md
new file mode 100644
index 0000000000..a9e9857142
--- /dev/null
+++ b/docs/en/UI/Angular/Page-Component.md
@@ -0,0 +1,218 @@
+# Page Component
+
+ABP provides a component that wraps your content with some built-in components to reduce the amount of code you need to write.
+
+If the template of a component looks as follows, you can utilize the `abp-page` component.
+
+Let's look at the following example without `abp-page` component.
+
+`dashboard.component.ts`
+
+```html
+
+
+
{{ '::Dashboard' | abpLocalization }}
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+## Page Parts
+
+PageComponent divides the template shown above into three parts, `title`, `breadcrumb`, `toolbar`. Each can be configured separately. There, also, is an enum exported from the package that describes each part.
+
+```javascript
+export enum PageParts {
+ title = 'PageTitleContainerComponent',
+ breadcrumb = 'PageBreadcrumbContainerComponent',
+ toolbar = 'PageToolbarContainerComponent',
+}
+
+// You can import this enum from -> import { PageParts } from '@abp/ng.components/page';
+```
+
+## Usage
+
+Firstly, you need to import `PageModule` from `@abp/ng.components/page` as follows:
+
+`dashboard.module.ts`
+
+```javascript
+import { PageModule } from '@abp/ng.components/page';
+import { DashboardComponent } from './dashboard.component';
+
+@NgModule({
+ declarations: [DashboardComponent],
+ imports: [PageModule]
+})
+export class DashboardModule {}
+```
+
+And change the template of `dashboard.component.ts` to the following:
+
+```html
+
+
+
+
+
+```
+
+## Inputs
+
+* title: `string`: Will be be rendered within `h1.content-header-title`. If not provided, the parent `div` will not be rendered
+* breadcrumb: `boolean`: Determines whether to render `abp-breadcrumb`. Default is `true`.
+* toolbar: `any`: Will be passed into `abp-page-toolbar` component through `record` input. If your page does not contain `abp-page-toolbar`, you can simply omit this field.
+
+## Overriding template
+
+If you need to replace the template of any part, you can use the following sub-components.
+
+```html
+
+
+
+
Custom Title
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+You do not have to provide them all. You can just use which one you need to replace. These components have priority over the inputs declared above. If you use these components, you can omit the inputs.
+
+## PagePartDirective
+
+`PageModule` provides a structural directive that is used internally within `PageComponent` and can also be used externally.
+
+`PageComponent` employs this directive internally as follows:
+
+```html
+
+
+
+```
+
+It also can take a context input as follows:
+
+```html
+
+
+
+```
+
+Its render strategy can be provided through Angular's Dependency Injection system.
+
+It expects a service through the `PAGE_RENDER_STRATEGY` injection token that implements the following interface.
+
+```javascript
+interface PageRenderStrategy {
+ shouldRender(type?: string): boolean | Observable;
+ onInit?(type?: string, injector?: Injector, context?: any): void;
+ onDestroy?(type?: string, injector?: Injector, context?: any): void;
+ onContextUpdate?(change?: SimpleChange): void;
+}
+```
+
+* `shouldRender` (required): It takes a string input named `type` and expects a `boolean` or `Observable` in return.
+* `onInit` (optional): Will be called when the directive is initiated. Three inputs will be passed into this method.
+ * `type`: type of the page part
+ * `injector`: injector of the directive which could be used to retrieve anything from directive's DI tree.
+ * `context`: whatever context is available at the initialization phase.
+* `onDestroy` (optional): Will be called when the directive is destroyed. The parameters are the same with `onInit`
+* `onContextUpdate` (optional): Will be called when the context is updated.
+ * `change`: changes of the `context` will be passed through this method.
+
+Let's see everything in action.
+
+```javascript
+import {
+ PageModule,
+ PageRenderStrategy,
+ PageParts,
+ PAGE_RENDER_STRATEGY
+} from '@abp/ng.components/page';
+
+@Injectable()
+export class MyPageRenderStrategy implements PageRenderStrategy {
+ shouldRender(type: string) {
+ // meaning everything but breadcrumb and custom-part will be rendered
+ return type !== PageParts.breadcrumb && type !== 'custom-part';
+ }
+
+ /**
+ * shouldRender can also return an Observable which means
+ * an async service can be used within.
+
+ constructor(private service: SomeAsyncService) {}
+
+ shouldRender(type: string) {
+ return this.service.checkTypeAsync(type).pipe(map(val => val.isTrue()));
+ }
+ */
+
+ onInit(type: string, injector: Injector, context: any) {
+ // this method will be called in ngOnInit of the directive
+ }
+
+ onDestroy(type: string, injector: Injector, context: any) {
+ // this method will be called in ngOnDestroy of the directive
+ }
+
+ onContextUpdate?(change?: SimpleChange) {
+ // this method will be called everytime context is updated within the directive
+ }
+}
+
+@Component({
+ selector: 'app-dashboard',
+ template: `
+
+
+ New Dashboard
+
+
+
+
Inner Title
+
+
+ `
+})
+export class DashboardComponent {}
+
+@NgModule({
+ imports: [PageModule],
+ declarations: [DashboardComponent],
+ providers: [
+ {
+ provide: PAGE_RENDER_STRATEGY,
+ useClass: MyPageRenderStrategy,
+ }
+ ]
+})
+export class DashboardModule {}
+```
+
+## See Also
+
+- [Page Toolbar Extensions for Angular UI](./Page-Page-Toolbar-Extensions.md)
diff --git a/docs/en/UI/Angular/Permission-Management-Component-Replacement.md b/docs/en/UI/Angular/Permission-Management-Component-Replacement.md
index 9ae712cedd..b6fcef3bb9 100644
--- a/docs/en/UI/Angular/Permission-Management-Component-Replacement.md
+++ b/docs/en/UI/Angular/Permission-Management-Component-Replacement.md
@@ -459,7 +459,7 @@ Open the generated `permission-management.component.html` in `src/app/permission
-
+
{%{{{ 'AbpIdentity::Cancel' | abpLocalization }}}%}
{%{{{
diff --git a/docs/en/UI/Angular/Service-Proxies.md b/docs/en/UI/Angular/Service-Proxies.md
index 3a10f1b6e8..18e5a3a0cc 100644
--- a/docs/en/UI/Angular/Service-Proxies.md
+++ b/docs/en/UI/Angular/Service-Proxies.md
@@ -10,6 +10,8 @@ To avoid manual effort, we might use a tool like [NSWAG](https://github.com/Rico
ABP introduces an endpoint that exposes server-side method contracts. When the `generate-proxy` command is run, ABP CLI makes an HTTP request to this endpoint and generates better-aligned client proxies in TypeScript. It organizes folders according to namespaces, adds barrel exports, and reflects method signatures in Angular services.
+> Before you start, please make sure you start the backend application with `dotnet run`. There is a [known limitation about Visual Studio](#known-limitations), so please do not run the project using its built-in web server.
+
Run the following command in the **root folder** of the angular application:
```bash
diff --git a/docs/en/UI/AspNetCore/JavaScript-API/Ajax.md b/docs/en/UI/AspNetCore/JavaScript-API/Ajax.md
index dca3105b5c..c100199d27 100644
--- a/docs/en/UI/AspNetCore/JavaScript-API/Ajax.md
+++ b/docs/en/UI/AspNetCore/JavaScript-API/Ajax.md
@@ -8,7 +8,7 @@
* Can **block** a UI part (or the full page) during the AJAX operation.
* Allows to fully customize any AJAX call, by using the standard `$.ajax` **options**.
-> While `abp.ajax` makes the AJAX call pretty easier, you typically will use the [Dynamic JavaScript Client Proxy](Dynamic-JavaScript-Client-Proxies.md) system to perform calls to your server side HTTP APIs. `abp.ajax` can be used when you need to perform low level AJAX operations.
+> While `abp.ajax` makes the AJAX call pretty easier, you typically will use the [Dynamic JavaScript Client Proxy](../Dynamic-JavaScript-Proxies.md) system to perform calls to your server side HTTP APIs. `abp.ajax` can be used when you need to perform low level AJAX operations.
## Basic Usage
diff --git a/docs/en/UI/AspNetCore/JavaScript-API/Dynamic-JavaScript-Client-Proxies.md b/docs/en/UI/AspNetCore/JavaScript-API/Dynamic-JavaScript-Client-Proxies.md
deleted file mode 100644
index 5270852b60..0000000000
--- a/docs/en/UI/AspNetCore/JavaScript-API/Dynamic-JavaScript-Client-Proxies.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# ASP.NET Core MVC / Razor Pages UI: Dynamic JavaScript Client Proxies
-
-TODO
\ No newline at end of file
diff --git a/docs/en/UI/Blazor/Data-Table-Column-Extensions.md b/docs/en/UI/Blazor/Data-Table-Column-Extensions.md
new file mode 100644
index 0000000000..ebb2f27cbf
--- /dev/null
+++ b/docs/en/UI/Blazor/Data-Table-Column-Extensions.md
@@ -0,0 +1,128 @@
+# Data Table Column Extensions for Blazor UI
+
+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 "Email Confirmed" title:
+
+
+
+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 C# File
+
+First, add a new C# file to your solution. We added inside the `/Pages/Identity/` folder of the `.Blazor` project:
+
+
+
+We will use the [component override system](Customization-Overriding-Components.md) in the Blazor. After creating a class inherits from the `UserManagement` component, we will override the `SetTableColumnsAsync` method and add the table column programmatically.
+
+Here, the content of the overridden `SetTableColumnsAsync` method.
+
+```csharp
+protected override async ValueTask SetTableColumnsAsync()
+{
+ await base.SetTableColumnsAsync();
+ var confirmedColumn = new TableColumn
+ {
+ Title = "Email Confirmed",
+ Data = nameof(IdentityUserDto.EmailConfirmed)
+ };
+ TableColumns.Get().Add(confirmedColumn);
+}
+```
+Here, the entire content of the file.
+
+```csharp
+using System.Threading.Tasks;
+using Volo.Abp.AspNetCore.Components.Web.Extensibility.TableColumns;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Identity;
+using Volo.Abp.Identity.Blazor.Pages.Identity;
+
+namespace MyCompanyName.MyProjectName.Blazor.Pages.Identity
+{
+ [ExposeServices(typeof(UserManagement))]
+ [Dependency(ReplaceServices = true)]
+ public class CustomizedUserManagement : UserManagement
+ {
+ protected override async ValueTask SetTableColumnsAsync()
+ {
+ await base.SetTableColumnsAsync();
+ var confirmedColumn = new TableColumn
+ {
+ Title = "Email Confirmed",
+ Data = nameof(IdentityUserDto.EmailConfirmed)
+ };
+ TableColumns.Get().Add(confirmedColumn);
+ }
+ }
+}
+```
+
+## Customizing Data Table Columns
+
+This section explains how to customize data table columns using the properties in the `TableColumn` type.
+
+* `Title`: Title of the column.
+* `Data`: Name of the field in the supplied model.
+* `Component`: Type of the component that you want to render. See the "Rendering Custom Components In The Data Table Columns" section for details.
+* `Actions`: Action lists for the column. You can render additional action columns by adding actions to this collection.
+* `ValueConverter`: Simple converter function that is being called before rendering the content.
+* `Sortable`: A boolean field indicating whether the column is sortable or not.
+* `DisplayFormat`: You can specify a custom format for the column.
+* `DisplayFormatProvider` : You can provide a custom `IFormatProvider` for the column. Default value is `CultureInfo.CurrentCulture`.
+
+## Rendering Custom Components In The Data Table Columns
+
+This section explains how to render custom blazor components in data table columns. In this example, we're going to display custom icons instead of text representations of the property.
+
+First of all, create a blazor component. We will name it `CustomTableColumn`.
+
+
+
+Add an object parameter named `Data`.
+
+```csharp
+public class CustomTableColumn
+{
+ [Parameter]
+ public object Data { get; set; }
+}
+```
+
+Navigate to the razor file and paste the following code.
+
+```csharp
+@using System
+@using Volo.Abp.Identity
+
+@if (Data.As().EmailConfirmed)
+{
+
+}
+else
+{
+
+}
+```
+
+Navigate back to the `CustomizedUserManagement` class, and use `Component` property to specify the custom blazor component.
+
+```csharp
+protected override async ValueTask SetTableColumnsAsync()
+{
+ await base.SetTableColumnsAsync();
+ var confirmedColumn = new TableColumn
+ {
+ Title = "Email Confirmed",
+ Component = typeof(CustomTableColumn)
+ };
+ TableColumns.Get().Add(confirmedColumn);
+}
+```
+
+Run the project and you will see the icons instead of text fields.
+
+
\ No newline at end of file
diff --git a/docs/en/UI/Blazor/Entity-Action-Extensions.md b/docs/en/UI/Blazor/Entity-Action-Extensions.md
new file mode 100644
index 0000000000..a7a9d5ae36
--- /dev/null
+++ b/docs/en/UI/Blazor/Entity-Action-Extensions.md
@@ -0,0 +1,110 @@
+# Entity Action Extensions for Blazor UI
+
+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:
+
+
+
+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 C# code for the user management page of the [Identity Module](../../Modules/Identity.md).
+
+### Create a C# File
+
+First, add a new C# file to your solution. We added inside the `/Pages/Identity/` folder of the `.Blazor` project:
+
+
+
+We will use the [component override system](Customization-Overriding-Components.md) in the Blazor. After creating a class inherits from the `UserManagement` component, we will override the `SetEntityActionsAsync` method and add the entity action programmatically.
+
+Here, the content of the overridden `SetEntityActionsAsync` method.
+
+```csharp
+protected override async ValueTask SetEntityActionsAsync()
+{
+ await base.SetEntityActionsAsync();
+ var clickMeAction = new EntityAction()
+ {
+ Text = "Click Me!",
+ Clicked = (data) =>
+ {
+ //TODO: Write your custom code
+
+ return Task.CompletedTask;
+ }
+ };
+
+ EntityActions.Get().Add(clickMeAction);
+}
+```
+
+In the `Clicked` property, you can do anything you need.
+
+Here, the entire content of the file.
+
+```csharp
+using System.Threading.Tasks;
+using Volo.Abp.AspNetCore.Components.Web.Extensibility.EntityActions;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Identity.Blazor.Pages.Identity;
+
+namespace MyCompanyName.MyProjectName.Blazor.Pages.Identity
+{
+ [ExposeServices(typeof(UserManagement))]
+ [Dependency(ReplaceServices = true)]
+ public class CustomizedUserManagement : UserManagement
+ {
+ protected override async ValueTask SetEntityActionsAsync()
+ {
+ await base.SetEntityActionsAsync();
+ var clickMeAction = new EntityAction()
+ {
+ Text = "Click Me!",
+ Clicked = (data) =>
+ {
+ //TODO: Write your custom code
+
+ return Task.CompletedTask;
+ }
+ };
+ EntityActions.Get().Add(clickMeAction);
+ }
+ }
+}
+```
+
+## Customizing Entity Actions
+
+This section explains how to customize entity actions using the properties in the `EntityAction` type.
+
+Here, the list of the properties that you use in the `EntityAction`.
+* `Text` : Entity action text.
+* `Clicked` : Click event handler for the action. You can use the `data` parameter to access the selected item in the `DataGrid`.
+* `Icon` : Icon for the action.
+* `Color` : Color for the action.
+* `Visible`: Visible function to determine the actions' visibility based on the data grid items individually. You can make the action invisible for some data grid items. You can also use the `data` parameter to access the selected item in the `DataGrid`.
+* `Confirmation`: Confirmation message for the action. You can use the `data` parameter to access the selected item in the `DataGrid`.
+
+#### Example
+
+```csharp
+var clickMeAction = new EntityAction()
+{
+ Text = "Click Me!",
+ Clicked = (data) =>
+ {
+ //TODO: Write your custom code
+
+ return Task.CompletedTask;
+ },
+ Color = Blazorise.Color.Danger,
+ Icon = "fas fa-hand-point-right",
+ ConfirmationMessage = (data) => "Are you sure you want to click to the action?",
+ Visible = (data) =>
+ {
+ //TODO: Write your custom visibility action
+ //var selectedUser = data.As();
+ }
+};
+```
diff --git a/docs/en/UI/Blazor/Page-Header.md b/docs/en/UI/Blazor/Page-Header.md
index 2c7921bbd2..59748b717a 100644
--- a/docs/en/UI/Blazor/Page-Header.md
+++ b/docs/en/UI/Blazor/Page-Header.md
@@ -1,3 +1,90 @@
# Blazor UI: Page Header
-TODO
\ No newline at end of file
+You can use the`PageHeader` component to set the page title, the breadcrumb items and the toolbar items for a page. Before using the `PageHeader` component, you need to add a using statement for the `Volo.Abp.AspNetCore.Components.Web.Theming.Layout` namespace.
+
+Once you add the `PageHeader` component to your page, you can control the related values using the parameters.
+
+## Page Title
+
+ You can use the `Title` parameter to control the page header.
+
+```csharp
+
+
+```
+
+## Breadcrumb
+
+> **The [Basic Theme](Basic-Theme.md) currently doesn't implement the breadcrumbs.**
+
+Breadcrumbs can be added using the `BreadcrumbItems` property.
+
+**Example: Add Language Management to the breadcrumb items.**
+
+Create a collection of `Volo.Abp.BlazoriseUI.BreadcrumbItem` objects and set the collection to the `BreadcrumbItems` parameter.
+
+```csharp
+public partial class Index
+{
+ protected List BreadcrumbItems { get; } = new();
+
+ protected override void OnInitialized()
+ {
+ BreadcrumbItems.Add(new BreadcrumbItem("Language Management"));
+ }
+}
+```
+
+Navigate back to the razor page.
+
+```csharp
+
+```
+
+The theme then renders the breadcrumb. An example render result can be:
+
+
+
+* The Home icon is rendered by default. Set `BreadcrumbShowHome` to `false` to hide it.
+* Breadcrumb items will be activated based on current navigation. Set `BreadcrumbShowCurrent` to `false` to disable it.
+
+You can add as many items as you need. `BreadcrumbItem` constructor gets three parameters:
+
+* `text`: The text to show for the breadcrumb item.
+* `url` (optional): A URL to navigate to, if the user clicks to the breadcrumb item.
+* `icon` (optional): An icon class (like `fas fa-user-tie` for Font-Awesome) to show with the `text`.
+
+## Page Toolbar
+
+Page toolbar can be set using the `Toolbar` property.
+
+**Example: Add a "New Item" toolbar item to the page toolbar.**
+
+Create a `PageToolbar` object and define toolbar items using the `AddButton` extension method.
+
+```csharp
+public partial class Index
+{
+ protected PageToolbar Toolbar { get; } = new();
+
+ protected override void OnInitialized()
+ {
+ Toolbar.AddButton("New Item", () =>
+ {
+ //Write your click action here
+ return Task.CompletedTask;
+ }, icon:IconName.Add);
+ }
+}
+```
+
+Navigate back to the razor page and set the `Toolbar` parameter.
+
+```csharp
+
+```
+
+An example render result can be:
+
+
+
diff --git a/docs/en/UI/Blazor/Page-Toolbar-Extensions.md b/docs/en/UI/Blazor/Page-Toolbar-Extensions.md
new file mode 100644
index 0000000000..34e7c5b1b1
--- /dev/null
+++ b/docs/en/UI/Blazor/Page-Toolbar-Extensions.md
@@ -0,0 +1,126 @@
+# Page Toolbar Extensions for Blazor UI
+
+Page toolbar system allows you to add components to the toolbar of any page. The page toolbar is the area right to the header of a page. A button ("Import users from excel") was added to the user management page below:
+
+
+
+You can add any type of view component item to the page toolbar or modify existing items.
+
+## How to Set Up
+
+In this example, we will add an "Import users from excel" button and execute a C# code for the user management page of the [Identity Module](../../Modules/Identity.md).
+
+### Create a C# File
+
+First, add a new C# file to your solution. We added inside the `/Pages/Identity/` folder of the `.Blazor` project:
+
+
+
+We will use the [component override system](Customization-Overriding-Components.md) in the Blazor. After creating a class inherits from the `UserManagement` component, we will override the `SetToolbarItemsAsync` method and add the toolbar item programmatically.
+
+Here, the content of the overridden `SetToolbarItemsAsync` method.
+
+```csharp
+protected override async ValueTask SetToolbarItemsAsync()
+{
+ await base.SetToolbarItemsAsync();
+ Toolbar.AddButton("Import users from excel", () =>
+ {
+ //TODO: Write your custom code
+ return Task.CompletedTask;
+ }, "file-import", Blazorise.Color.Secondary);
+}
+```
+> In order to use the `AddButton` extension method, you need to add a using statement for the `Volo.Abp.AspNetCore.Components.Web.Theming.PageToolbars` namespace.
+
+Here, the entire content of the file.
+
+```csharp
+using System.Threading.Tasks;
+using Volo.Abp.AspNetCore.Components.Web.Theming.PageToolbars;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Identity.Blazor.Pages.Identity;
+
+namespace MyCompanyName.MyProjectName.Blazor.Pages.Identity
+{
+ [ExposeServices(typeof(UserManagement))]
+ [Dependency(ReplaceServices = true)]
+ public class CustomizedUserManagement : UserManagement
+ {
+ protected override async ValueTask SetToolbarItemsAsync()
+ {
+ await base.SetToolbarItemsAsync();
+ Toolbar.AddButton("Import users from excel", () =>
+ {
+ //TODO: Write your custom code
+ return Task.CompletedTask;
+ }, "file-import", Blazorise.Color.Secondary);
+ }
+ }
+}
+```
+
+When you run the application, you will see the button added next to the current button list. There are some other parameters of the `AddButton` method (for example, use `Order` to set the order of the button component relative to the other components).
+
+## Advanced Use Cases
+
+While you typically want to add a button action to the page toolbar, it is possible to add any type of blazor component.
+
+### Add A Blazor Component to a Page Toolbar
+
+First, create a new blazor component in your project:
+
+
+
+For this example, we've created a `MyToolbarComponent` component under the `/Pages/Identity/` folder.
+
+`MyToolbarComponent.razor` content:
+
+````csharp
+CLICK ME
+````
+We will leave the `MyToolbarComponent.razor.cs` file empty.
+
+Then you can add the `MyToolbarComponent` to the user management page toolbar:
+
+````csharp
+protected override async ValueTask SetToolbarItemsAsync()
+{
+ await base.SetToolbarItemsAsync();
+ Toolbar.AddComponent();
+}
+````
+
+* If your component accepts parameters, you can pass them as key/value pairs using the `arguments` parameter.
+
+#### Permissions
+
+If your button/component should be available based on a [permission/policy](../../Authorization.md), you can pass the permission/policy name as the `RequiredPolicyName` parameter to the `AddButton` and `AddComponent` methods.
+
+### Add a Page Toolbar Contributor
+
+If you perform advanced custom logic while adding an item to a page toolbar, you can create a class that implements the `IPageToolbarContributor` interface or inherits from the `PageToolbarContributor` class:
+
+````csharp
+public class MyToolbarContributor : PageToolbarContributor
+{
+ public override Task ContributeAsync(PageToolbarContributionContext context)
+ {
+ context.Items.Insert(0, new PageToolbarItem(typeof(MyToolbarComponent)));
+ return Task.CompletedTask;
+ }
+}
+````
+
+* You can use `context.ServiceProvider` to resolve dependencies if you need.
+
+Then add your class to the `Contributors` list:
+
+````csharp
+protected override async ValueTask SetToolbarItemsAsync()
+{
+ await base.SetToolbarItemsAsync();
+ Toolbar.Contributors.Add(new PageContributor());
+}
+````
+
diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json
index efca73a484..4d2b2419c2 100644
--- a/docs/en/docs-nav.json
+++ b/docs/en/docs-nav.json
@@ -1,5 +1,9 @@
{
"items": [
+ {
+ "text": "Quick Start",
+ "path": "Tutorials/Todo/Index.md"
+ },
{
"text": "Getting Started",
"items": [
@@ -281,6 +285,10 @@
}
]
},
+ {
+ "text": "SMS Sending",
+ "path": "SMS-Sending.md"
+ },
{
"text": "Event Bus",
"items": [
@@ -335,6 +343,10 @@
{
"text": "Virtual File System",
"path": "Virtual-File-System.md"
+ },
+ {
+ "text": "Cancellation Token Provider",
+ "path": "Cancellation-Token-Provider.md"
}
]
},
@@ -882,6 +894,15 @@
]
}
]
+ },
+ {
+ "text": "Components",
+ "items": [
+ {
+ "text": "Page",
+ "path": "UI/Angular/Page-Component.md"
+ }
+ ]
}
]
},
@@ -1004,14 +1025,6 @@
"text": "Background Jobs",
"path": "Modules/Background-Jobs.md"
},
- {
- "text": "Blogging",
- "path": "Modules/Blogging.md"
- },
- {
- "text": "Client Simulation",
- "path": "Modules/Client-Simulation.md"
- },
{
"text": "CMS Kit",
"path": "Modules/Cms-Kit.md"
@@ -1044,10 +1057,6 @@
"text": "Tenant Management",
"path": "Modules/Tenant-Management.md"
},
- {
- "text": "Users",
- "path": "Modules/Users.md"
- },
{
"text": "Virtual File Explorer",
"path": "Modules/Virtual-File-Explorer.md"
diff --git a/docs/en/images/data-table-colum-extension-blazor-component-render-solution.png b/docs/en/images/data-table-colum-extension-blazor-component-render-solution.png
new file mode 100644
index 0000000000..77612b5d34
Binary files /dev/null and b/docs/en/images/data-table-colum-extension-blazor-component-render-solution.png differ
diff --git a/docs/en/images/data-table-colum-extension-blazor-component-render.png b/docs/en/images/data-table-colum-extension-blazor-component-render.png
new file mode 100644
index 0000000000..9d018e2ab9
Binary files /dev/null and b/docs/en/images/data-table-colum-extension-blazor-component-render.png differ
diff --git a/docs/en/images/email-settings.png b/docs/en/images/email-settings.png
new file mode 100644
index 0000000000..6aa77da312
Binary files /dev/null and b/docs/en/images/email-settings.png differ
diff --git a/docs/en/images/page-header-toolbar-blazor.png b/docs/en/images/page-header-toolbar-blazor.png
new file mode 100644
index 0000000000..a4d0454893
Binary files /dev/null and b/docs/en/images/page-header-toolbar-blazor.png differ
diff --git a/docs/en/images/page-toolbar-button-blazor.png b/docs/en/images/page-toolbar-button-blazor.png
new file mode 100644
index 0000000000..fb907e797a
Binary files /dev/null and b/docs/en/images/page-toolbar-button-blazor.png differ
diff --git a/docs/en/images/page-toolbar-custom-component-blazor.png b/docs/en/images/page-toolbar-custom-component-blazor.png
new file mode 100644
index 0000000000..fb0856fa03
Binary files /dev/null and b/docs/en/images/page-toolbar-custom-component-blazor.png differ
diff --git a/docs/en/images/table-column-extension-example-blazor.png b/docs/en/images/table-column-extension-example-blazor.png
new file mode 100644
index 0000000000..3079fa278c
Binary files /dev/null and b/docs/en/images/table-column-extension-example-blazor.png differ
diff --git a/docs/en/images/user-action-blazor-extension-click-me.png b/docs/en/images/user-action-blazor-extension-click-me.png
new file mode 100644
index 0000000000..fb1ea80182
Binary files /dev/null and b/docs/en/images/user-action-blazor-extension-click-me.png differ
diff --git a/docs/en/images/user-action-extension-on-blazor-project.png b/docs/en/images/user-action-extension-on-blazor-project.png
new file mode 100644
index 0000000000..d11ea328b6
Binary files /dev/null and b/docs/en/images/user-action-extension-on-blazor-project.png differ
diff --git a/docs/pt-BR/Tutorials/Angular/Part-II.md b/docs/pt-BR/Tutorials/Angular/Part-II.md
index b75fa9e21c..b4b86350b0 100644
--- a/docs/pt-BR/Tutorials/Angular/Part-II.md
+++ b/docs/pt-BR/Tutorials/Angular/Part-II.md
@@ -90,7 +90,7 @@ Abra o `book-list.component.html`e adicione o `abp-modal`para mostrar / ocultar
-
+
Cancel
@@ -276,7 +276,7 @@ Abra o `book-list.component.html`e adicione um `abp-button`para salvar o formul
```html
-
+
Cancel
diff --git a/docs/zh-Hans/Tutorials/Part-3.md b/docs/zh-Hans/Tutorials/Part-3.md
index 7ad96a0465..fec101c2a2 100644
--- a/docs/zh-Hans/Tutorials/Part-3.md
+++ b/docs/zh-Hans/Tutorials/Part-3.md
@@ -718,7 +718,7 @@ export class BookComponent implements OnInit {
-
+
{%{{{ '::Close' | abpLocalization }}}%}
@@ -859,7 +859,7 @@ export class BookComponent implements OnInit {
````html
-
+
{%{{{ '::Close' | abpLocalization }}}%}
diff --git a/docs/zh-Hans/UI/Angular/Permission-Management-Component-Replacement.md b/docs/zh-Hans/UI/Angular/Permission-Management-Component-Replacement.md
index 0b1f71035e..3ea2db6f51 100644
--- a/docs/zh-Hans/UI/Angular/Permission-Management-Component-Replacement.md
+++ b/docs/zh-Hans/UI/Angular/Permission-Management-Component-Replacement.md
@@ -459,7 +459,7 @@ function getPermissions(groups: PermissionManagement.Group[]): PermissionManagem
-
+
{%{{{ 'AbpIdentity::Cancel' | abpLocalization }}}%}
{%{{{
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Extensibility/TableColumns/TableColumn.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Extensibility/TableColumns/TableColumn.cs
index 0676c14399..2121b8a128 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Extensibility/TableColumns/TableColumn.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Extensibility/TableColumns/TableColumn.cs
@@ -1,6 +1,7 @@
using JetBrains.Annotations;
using System;
using System.Collections.Generic;
+using System.Globalization;
using Volo.Abp.AspNetCore.Components.Web.Extensibility.EntityActions;
namespace Volo.Abp.AspNetCore.Components.Web.Extensibility.TableColumns
@@ -11,11 +12,13 @@ namespace Volo.Abp.AspNetCore.Components.Web.Extensibility.TableColumns
public string Data { get; set; }
[CanBeNull]
public string DisplayFormat { get; set; }
+ public IFormatProvider DisplayFormatProvider { get; set; } = CultureInfo.CurrentCulture;
[CanBeNull]
public Type Component { get; set; }
public List Actions { get; set; }
[CanBeNull]
public Func
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs
index 0617ef26ff..83cce36fce 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs
@@ -89,7 +89,7 @@ namespace Volo.Abp.Cli.Commands
var preview = commandLineArgs.Options.ContainsKey(Options.Preview.Long);
if (preview)
{
- Logger.LogInformation("Preview: yes if any exist for next version.");
+ Logger.LogInformation("Preview: yes");
}
var databaseProvider = GetDatabaseProvider(commandLineArgs);
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/MicroserviceServiceRandomPortStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/MicroserviceServiceRandomPortStep.cs
index 88a19b43af..befc5414eb 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/MicroserviceServiceRandomPortStep.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/MicroserviceServiceRandomPortStep.cs
@@ -59,9 +59,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
return _tyeFileContent;
}
- var solutionFolderPath = context.BuildArgs.ExtraProperties[NewCommand.Options.OutputFolder.Short] ??
- context.BuildArgs.ExtraProperties[NewCommand.Options.OutputFolder.Long] ??
- Directory.GetCurrentDirectory();
+ var solutionFolderPath = GetSolutionFolderPath(context);
var tyeFilePath = Path.Combine(solutionFolderPath, "tye.yaml");
@@ -74,5 +72,20 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
return _tyeFileContent;
}
+
+ private static string GetSolutionFolderPath(ProjectBuildContext context)
+ {
+ if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.OutputFolder.Short))
+ {
+ return context.BuildArgs.ExtraProperties[NewCommand.Options.OutputFolder.Short];
+ }
+
+ if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.OutputFolder.Long))
+ {
+ return context.BuildArgs.ExtraProperties[NewCommand.Options.OutputFolder.Long];
+ }
+
+ return Directory.GetCurrentDirectory();
+ }
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveDependencyFromPackageJsonFileStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveDependencyFromPackageJsonFileStep.cs
new file mode 100644
index 0000000000..ab7cff8c56
--- /dev/null
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveDependencyFromPackageJsonFileStep.cs
@@ -0,0 +1,35 @@
+using System.Linq;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
+{
+ public class RemoveDependencyFromPackageJsonFileStep : ProjectBuildPipelineStep
+ {
+ private readonly string _packageJsonFilePath;
+ private readonly string _packageName;
+
+ public RemoveDependencyFromPackageJsonFileStep(string packageJsonFilePath, string packageName)
+ {
+ _packageJsonFilePath = packageJsonFilePath;
+ _packageName = packageName;
+ }
+
+ public override void Execute(ProjectBuildContext context)
+ {
+ var packageJsonFile = context.Files.FirstOrDefault(f => f.Name == _packageJsonFilePath);
+
+ if (packageJsonFile == null)
+ {
+ return;
+ }
+
+ var packageJsonObject = JObject.Parse(packageJsonFile.Content);
+ var dependenciesObject = (JObject) packageJsonObject["dependencies"];
+
+ dependenciesObject?.Remove(_packageName);
+
+ packageJsonFile.SetContent(packageJsonObject.ToString(Formatting.Indented));
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
index 5e0436d91a..52a06f7117 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
@@ -169,10 +169,54 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
steps.Add(new ChangePublicAuthPortStep());
}
- if (!context.BuildArgs.ExtraProperties.ContainsKey("without-cms-kit"))
+ if (!context.BuildArgs.ExtraProperties.ContainsKey("without-cms-kit") && IsCmsKitSupportedForTargetVersion(context))
{
context.Symbols.Add("CMS-KIT");
}
+ else
+ {
+ RemoveCmsKitDependenciesFromPackageJsonFiles(steps);
+ }
+ }
+
+ private static void RemoveCmsKitDependenciesFromPackageJsonFiles(List steps)
+ {
+ var adminCmsPackageInstalledProjectsPackageJsonFiles = new List
+ {
+ "/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json",
+ "/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json",
+ "/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json",
+ "/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json"
+ };
+
+ var publicCmsPackageInstalledProjectsPackageJsonFiles = new List
+ {
+ "/aspnet-core/src/MyCompanyName.MyProjectName.Web.Public/package.json",
+ "/aspnet-core/src/MyCompanyName.MyProjectName.Web.Public.Host/package.json"
+ };
+
+ foreach (var packageJsonFile in adminCmsPackageInstalledProjectsPackageJsonFiles)
+ {
+ steps.Add(new RemoveDependencyFromPackageJsonFileStep(packageJsonFile, "@volo/cms-kit-pro.admin"));
+ }
+
+ foreach (var packageJsonFile in publicCmsPackageInstalledProjectsPackageJsonFiles)
+ {
+ steps.Add(new RemoveDependencyFromPackageJsonFileStep(packageJsonFile, "@volo/cms-kit-pro.public"));
+ }
+ }
+
+ private bool IsCmsKitSupportedForTargetVersion(ProjectBuildContext context)
+ {
+ if (string.IsNullOrWhiteSpace(context.BuildArgs.Version))
+ {
+ // We'll return true after 4.3.0 stable release. see https://github.com/abpframework/abp/issues/8394
+ // return true;
+
+ return context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.Preview.Long);
+ }
+
+ return SemanticVersion.Parse(context.BuildArgs.Version) > SemanticVersion.Parse("4.2.9");
}
private static void ConfigureWithoutUi(ProjectBuildContext context, List steps)
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateSwitchEntityFrameworkCoreToMongoDbStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateSwitchEntityFrameworkCoreToMongoDbStep.cs
index b0a778c323..290da79157 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateSwitchEntityFrameworkCoreToMongoDbStep.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateSwitchEntityFrameworkCoreToMongoDbStep.cs
@@ -76,6 +76,29 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
"/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json"
);
+ //MyCompanyName.MyProjectName.Blazor.Server
+
+ ChangeProjectReference(
+ context,
+ "/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj",
+ "EntityFrameworkCore.DbMigrations",
+ "MongoDB"
+ );
+
+ ChangeNamespaceAndKeyword(
+ context,
+ "/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs",
+ "MyCompanyName.MyProjectName.EntityFrameworkCore",
+ "MyCompanyName.MyProjectName.MongoDB",
+ "MyProjectNameEntityFrameworkCoreDbMigrationsModule",
+ "MyProjectNameMongoDbModule"
+ );
+
+ ChangeConnectionStringToMongoDb(
+ context,
+ "/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/appsettings.json"
+ );
+
//MyCompanyName.MyProjectName.HttpApi.HostWithIds
ChangeProjectReference(
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceTemplateBase.cs
index 76c2fe6bb5..7068cb9327 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceTemplateBase.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceTemplateBase.cs
@@ -42,6 +42,9 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.Microservice
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor",null,
"/apps/blazor/src/MyCompanyName.MyProjectName.Blazor"));
+ steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.ProductService.Blazor",
+ "/services/product/MyCompanyName.MyProjectName.ProductService.sln",
+ "/services/product/src/MyCompanyName.MyProjectName.ProductService.Blazor"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor.Server",null,
"/apps/blazor/src/MyCompanyName.MyProjectName.Blazor.Server"));
steps.Add(new RemoveFolderStep("/apps/blazor"));
@@ -60,6 +63,9 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.Microservice
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor",null,
"/apps/blazor/src/MyCompanyName.MyProjectName.Blazor"));
+ steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.ProductService.Blazor",
+ "/services/product/MyCompanyName.MyProjectName.ProductService.sln",
+ "/services/product/src/MyCompanyName.MyProjectName.ProductService.Blazor"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor.Server",null,
"/apps/blazor/src/MyCompanyName.MyProjectName.Blazor.Server"));
steps.Add(new RemoveFolderStep("/apps/blazor"));
@@ -113,6 +119,9 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.Microservice
"/apps/blazor/src/MyCompanyName.MyProjectName.Blazor"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor.Server",null,
"/apps/blazor/src/MyCompanyName.MyProjectName.Blazor.Server"));
+ steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.ProductService.Blazor",
+ "/services/product/MyCompanyName.MyProjectName.ProductService.sln",
+ "/services/product/src/MyCompanyName.MyProjectName.ProductService.Blazor"));
steps.Add(new RemoveFolderStep("/apps/blazor"));
steps.Add(new RemoveProjectFromTyeStep("blazor"));
steps.Add(new RemoveProjectFromTyeStep("blazor-server"));
diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleHelper.cs
index e8bccb8e18..286001345d 100644
--- a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleHelper.cs
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleHelper.cs
@@ -12,7 +12,7 @@ namespace Volo.Abp.Modularity
{
var moduleTypes = new List();
logger.Log(LogLevel.Information, "Loaded ABP modules:");
- AddModuleAndDependenciesResursively(moduleTypes, startupModuleType, logger);
+ AddModuleAndDependenciesRecursively(moduleTypes, startupModuleType, logger);
return moduleTypes;
}
@@ -37,7 +37,7 @@ namespace Volo.Abp.Modularity
return dependencies;
}
- private static void AddModuleAndDependenciesResursively(
+ private static void AddModuleAndDependenciesRecursively(
List moduleTypes,
Type moduleType,
ILogger logger,
@@ -55,7 +55,7 @@ namespace Volo.Abp.Modularity
foreach (var dependedModuleType in FindDependedModuleTypes(moduleType))
{
- AddModuleAndDependenciesResursively(moduleTypes, dependedModuleType, logger, depth + 1);
+ AddModuleAndDependenciesRecursively(moduleTypes, dependedModuleType, logger, depth + 1);
}
}
}
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj
index 8c1f0cdec3..7fea04e7f5 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj
+++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj
@@ -19,7 +19,7 @@
-
+
diff --git a/framework/src/Volo.Abp.GlobalFeatures/Volo.Abp.GlobalFeatures.csproj b/framework/src/Volo.Abp.GlobalFeatures/Volo.Abp.GlobalFeatures.csproj
index a082ba3c6f..0f118c1f08 100644
--- a/framework/src/Volo.Abp.GlobalFeatures/Volo.Abp.GlobalFeatures.csproj
+++ b/framework/src/Volo.Abp.GlobalFeatures/Volo.Abp.GlobalFeatures.csproj
@@ -20,7 +20,6 @@
-
diff --git a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeatureDictionary.cs b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeatureDictionary.cs
index a81632f8d5..c8f68a1ab0 100644
--- a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeatureDictionary.cs
+++ b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeatureDictionary.cs
@@ -1,4 +1,4 @@
-using System.Collections.Generic;
+using System.Collections.Generic;
namespace Volo.Abp.GlobalFeatures
{
diff --git a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeatureManager.cs b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeatureManager.cs
index 19a48a9da3..e0662857e1 100644
--- a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeatureManager.cs
+++ b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeatureManager.cs
@@ -1,5 +1,5 @@
-using System;
- using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using JetBrains.Annotations;
namespace Volo.Abp.GlobalFeatures
@@ -26,7 +26,6 @@ namespace Volo.Abp.GlobalFeatures
}
public virtual bool IsEnabled()
- where TFeature : GlobalFeature
{
return IsEnabled(GlobalFeatureNameAttribute.GetName());
}
diff --git a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeatureNameAttribute.cs b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeatureNameAttribute.cs
index 2b987f6cb1..96905b43bf 100644
--- a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeatureNameAttribute.cs
+++ b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeatureNameAttribute.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
using JetBrains.Annotations;
@@ -17,7 +17,6 @@ namespace Volo.Abp.GlobalFeatures
}
public static string GetName()
- where TFeature : GlobalFeature
{
return GetName(typeof(TFeature));
}
diff --git a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalModuleFeatures.cs b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalModuleFeatures.cs
index 7d1b844d45..9a8afd236d 100644
--- a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalModuleFeatures.cs
+++ b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalModuleFeatures.cs
@@ -1,4 +1,4 @@
-using System.Collections.Generic;
+using System.Collections.Generic;
using System.Collections.Immutable;
using JetBrains.Annotations;
diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/RequestPayloadBuilder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/RequestPayloadBuilder.cs
index 8532f02c7c..1096fa971e 100644
--- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/RequestPayloadBuilder.cs
+++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/RequestPayloadBuilder.cs
@@ -53,17 +53,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying
return null;
}
- if (value is IRemoteStreamContent remoteStreamContent)
- {
- var content = new StreamContent(remoteStreamContent.GetStream());
- content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(remoteStreamContent.ContentType);
- content.Headers.ContentLength = remoteStreamContent.ContentLength;
- return content;
- }
- else
- {
- return new StringContent(jsonSerializer.Serialize(value), Encoding.UTF8, MimeTypes.Application.Json);
- }
+ return new StringContent(jsonSerializer.Serialize(value), Encoding.UTF8, MimeTypes.Application.Json);
}
private static HttpContent GenerateFormPostData(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments)
@@ -80,7 +70,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying
if (parameters.Any(x => x.BindingSourceId == ParameterBindingSources.FormFile))
{
- var postDataBuilder = new MultipartFormDataContent();
+ var formData = new MultipartFormDataContent();
foreach (var parameter in parameters)
{
var value = HttpActionParameterHelper.FindParameterValue(methodArguments, parameter);
@@ -91,32 +81,42 @@ namespace Volo.Abp.Http.Client.DynamicProxying
if (value is IRemoteStreamContent remoteStreamContent)
{
- var streamContent = new StreamContent(remoteStreamContent.GetStream());
+ var stream = remoteStreamContent.GetStream();
+ if (stream.CanSeek)
+ {
+ stream.Position = 0;
+ }
+ var streamContent = new StreamContent(stream);
if (!remoteStreamContent.ContentType.IsNullOrWhiteSpace())
{
streamContent.Headers.ContentType = new MediaTypeHeaderValue(remoteStreamContent.ContentType);
}
- postDataBuilder.Add(streamContent, parameter.Name, parameter.Name);
+ formData.Add(streamContent, parameter.Name, parameter.Name);
}
else if (value is IEnumerable remoteStreamContents)
{
foreach (var content in remoteStreamContents)
{
- var streamContent = new StreamContent(content.GetStream());
+ var stream = content.GetStream();
+ if (stream.CanSeek)
+ {
+ stream.Position = 0;
+ }
+ var streamContent = new StreamContent(stream);
if (!content.ContentType.IsNullOrWhiteSpace())
{
streamContent.Headers.ContentType = new MediaTypeHeaderValue(content.ContentType);
}
- postDataBuilder.Add(streamContent, parameter.Name, parameter.Name);
+ formData.Add(streamContent, parameter.Name, parameter.Name);
}
}
else
{
- postDataBuilder.Add(new StringContent(value.ToString(), Encoding.UTF8), parameter.Name);
+ formData.Add(new StringContent(value.ToString(), Encoding.UTF8), parameter.Name);
}
}
- return postDataBuilder;
+ return formData;
}
else
{
diff --git a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/AbpLdapModule.cs b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/AbpLdapModule.cs
index 3366f3d70f..a1749e4466 100644
--- a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/AbpLdapModule.cs
+++ b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/AbpLdapModule.cs
@@ -21,11 +21,7 @@ namespace Volo.Abp.Ldap
context.Services.AddAbpDynamicOptions();
var configuration = context.Services.GetConfiguration();
- var ldapConfiguration = configuration["Ldap"];
- if (!ldapConfiguration.IsNullOrEmpty())
- {
- Configure(configuration.GetSection("Ldap"));
- }
+ Configure(configuration.GetSection("Ldap"));
Configure(options =>
{
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs
index 94e57403f5..e67bbcb1ae 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs
@@ -31,10 +31,18 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing
{
throw new UserFriendlyException("Exception occurred!");
}
+
[Route("audit-fail-object")]
public object AuditFailForGetRequestsReturningObject()
{
throw new UserFriendlyException("Exception occurred!");
}
+
+ [HttpGet]
+ [Route("audit-activate-failed")]
+ public IActionResult AuditActivateFailed([FromServices] AbpAuditingOptions options)
+ {
+ return Ok();
+ }
}
}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs
index 9d3da08095..b76e71de52 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs
@@ -74,5 +74,20 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing
await _auditingStore.Received().SaveAsync(Arg.Any());
}
+
+ [Fact]
+ public async Task Should_Trigger_Middleware_And_AuditLog_Exception_When_Activate_Controller_Failed()
+ {
+ _options.IsEnabledForGetRequests = true;
+ _options.AlwaysLogOnException = true;
+
+ try
+ {
+ await GetResponseAsync("api/audit-test/audit-activate-failed", System.Net.HttpStatusCode.InternalServerError);
+ }
+ catch { }
+
+ await _auditingStore.Received().SaveAsync(Arg.Is(x => x.Exceptions.Any()));
+ }
}
}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage.cshtml.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage.cshtml.cs
index 7dc1967a2e..10e28a4bb1 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage.cshtml.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage.cshtml.cs
@@ -34,5 +34,10 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing
{
throw new UserFriendlyException("Exception occurred!");
}
+
+ public IActionResult OnGetAuditActivateFailed([FromServices] AbpAuditingOptions options)
+ {
+ return new OkResult();
+ }
}
}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage_Tests.cs
index 311abe5aa5..24d7a58dd3 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage_Tests.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage_Tests.cs
@@ -73,5 +73,20 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing
await _auditingStore.Received().SaveAsync(Arg.Any());
}
+
+ [Fact]
+ public async Task Should_Trigger_Middleware_And_AuditLog_Exception_When_Activate_Page_Failed()
+ {
+ _options.IsEnabledForGetRequests = true;
+ _options.AlwaysLogOnException = true;
+
+ try
+ {
+ await GetResponseAsync("/Auditing/AuditTestPage?handler=AuditActivateFailed", System.Net.HttpStatusCode.InternalServerError);
+ }
+ catch { }
+
+ await _auditingStore.Received().SaveAsync(Arg.Is(x => x.Exceptions.Any()));
+ }
}
}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController.cs
index 15491f9b21..e74c9d52e8 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController.cs
@@ -25,11 +25,11 @@ namespace Volo.Abp.AspNetCore.Mvc.ContentFormatters
[HttpPost]
[Route("Upload")]
- public async Task UploadAsync([FromBody]IRemoteStreamContent streamContent)
+ public async Task UploadAsync(IRemoteStreamContent file)
{
- using (var reader = new StreamReader(streamContent.GetStream()))
+ using (var reader = new StreamReader(file.GetStream()))
{
- return await reader.ReadToEndAsync() + ":" + streamContent.ContentType;
+ return await reader.ReadToEndAsync() + ":" + file.ContentType;
}
}
}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs
index 3d49a5b3ff..12745da732 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs
@@ -1,5 +1,6 @@
using System.IO;
using System.Net.Http;
+using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Shouldly;
@@ -25,8 +26,11 @@ namespace Volo.Abp.AspNetCore.Mvc.ContentFormatters
var memoryStream = new MemoryStream();
await memoryStream.WriteAsync(Encoding.UTF8.GetBytes("UploadAsync"));
memoryStream.Position = 0;
- requestMessage.Content = new StreamContent(memoryStream);
- requestMessage.Content.Headers.Add("Content-Type", "application/rtf");
+
+ var streamContent = new StreamContent(memoryStream);
+ streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/rtf");
+
+ requestMessage.Content = new MultipartFormDataContent {{streamContent, "file", "file"}};
var response = await Client.SendAsync(requestMessage);
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 b9c5e49f2b..a4704ecfd3 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.3.0-rc.1",
+ "@abp/aspnetcore.mvc.ui.theme.shared": "^4.3.0-rc.2",
"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 aecdad579a..d529fabaca 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.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.3.0-rc.1.tgz#9d4447f068b490367a20772eb9c2b38480088edb"
- integrity sha512-untEVm6cKT375ZVEQFO01/VKIqtdFGIyJd5ZxtoQEV8ueVFRQefCOcvvqaJ8Gfj86T1nacXvJRfBfGihYHY+JQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~4.3.0-rc.1"
- "@abp/bootstrap" "~4.3.0-rc.1"
- "@abp/bootstrap-datepicker" "~4.3.0-rc.1"
- "@abp/datatables.net-bs4" "~4.3.0-rc.1"
- "@abp/font-awesome" "~4.3.0-rc.1"
- "@abp/jquery-form" "~4.3.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~4.3.0-rc.1"
- "@abp/lodash" "~4.3.0-rc.1"
- "@abp/luxon" "~4.3.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~4.3.0-rc.1"
- "@abp/select2" "~4.3.0-rc.1"
- "@abp/sweetalert" "~4.3.0-rc.1"
- "@abp/timeago" "~4.3.0-rc.1"
- "@abp/toastr" "~4.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.3.0-rc.1.tgz#1e54da2a668939941ab955f11db69798d04d9e7e"
- integrity sha512-969etEb4H/fR9Twz6pcl766M/1AriCh6+B8r4haPB5g7QkOWhyU99mT11BHxQwf+uNV4duGZwvPvrMomrdLj2w==
+"@abp/aspnetcore.mvc.ui.theme.shared@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.3.0-rc.2.tgz#d3bf79929c55c5380d7ca7b913a23031d7a6bd12"
+ integrity sha512-pz86bIV4wNeG7/UPYzNCXlJ/MdOdIygc+Com7C9Ld7gzsyER7VD9h5U/hkytvL4FBFLJn4DU+xuZNECjv0HS0A==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~4.3.0-rc.2"
+ "@abp/bootstrap" "~4.3.0-rc.2"
+ "@abp/bootstrap-datepicker" "~4.3.0-rc.2"
+ "@abp/datatables.net-bs4" "~4.3.0-rc.2"
+ "@abp/font-awesome" "~4.3.0-rc.2"
+ "@abp/jquery-form" "~4.3.0-rc.2"
+ "@abp/jquery-validation-unobtrusive" "~4.3.0-rc.2"
+ "@abp/lodash" "~4.3.0-rc.2"
+ "@abp/luxon" "~4.3.0-rc.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~4.3.0-rc.2"
+ "@abp/select2" "~4.3.0-rc.2"
+ "@abp/sweetalert" "~4.3.0-rc.2"
+ "@abp/timeago" "~4.3.0-rc.2"
+ "@abp/toastr" "~4.3.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.3.0-rc.2.tgz#6ff41be179c8d1089778a51ffa54a1f3d7614278"
+ integrity sha512-2L5zvuqUwPwNPcMauiiJZD1ft0QycqINz+bXEQ8t0EwbB+dzcsukL/rpOQfpeRHWWYy4nIN4C2bTvXhNgQbPqQ==
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.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.3.0-rc.1.tgz#879a8ce32a3dbdb0cd80401360d24f25f318670b"
- integrity sha512-W2T+rrC3oxuWj2xQUz2virbBK6x7ershWZB9d6FjXTSH89nin9DyBK20dEfskVvhK/IMrmZaW4PWyTTcx9r7dA==
+"@abp/bootstrap-datepicker@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.3.0-rc.2.tgz#29a686c3d2bce356967f646d7334cd83c4257b4c"
+ integrity sha512-3+B7SJRi7DQJe0aNgv0H0zu1BfvMZcwgt06N3ALR9+o3TSJcOqcYrEMed3aG+ASH++CltnohTYnLkVXaxshioA==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.3.0-rc.1.tgz#3260de03f29e210e44a55efa3af2ab6d34362227"
- integrity sha512-flB18MUnRWpEnS0t/WEjsdhfB5w+zHjsa69Pj733+GHGSsZ1Vppu+rgvSWp38yNHO5uRwGECrwUIGwvd5uD9+A==
+"@abp/bootstrap@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.3.0-rc.2.tgz#1416fe639c88b7d958435e45fe19692268a7f932"
+ integrity sha512-E6svmDhNQlT5nd65VgshexyedRWhbvi9o1oYo/dLTUpJDzR7M9ptDqxFLVB9vVDva3HgxUoEvgRJgb9fXvq4zw==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
bootstrap "^4.6.0"
bootstrap-v4-rtl "4.6.0-1"
-"@abp/core@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.3.0-rc.1.tgz#201c3be8b5697fe8e1b08b23f87f50e950036a14"
- integrity sha512-ET8NGugNmdub+8qGeFf9qGPbloP5gcoBnB7U6ieFz1Eai9S3pSpbM+sdyifucEpzMThUiLS772EP4pJTMXhfEg==
+"@abp/core@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.3.0-rc.2.tgz#3c9ea339624ae3b6cbee13e048268d48269ea6a9"
+ integrity sha512-/89xH+IVSmTOLWeUO4yVB7Hg64uHTbR7bHjgl+b94cFdtITH9Nvr2EGdXUJbHGUK7L6lSDziqiMcG/ic0061+Q==
dependencies:
- "@abp/utils" "^4.3.0-rc.1"
+ "@abp/utils" "^4.3.0-rc.2"
-"@abp/datatables.net-bs4@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.3.0-rc.1.tgz#f7dad14d13b468949fd161b679f4a70271e0d466"
- integrity sha512-812cLTfSZZMvjAFAq5h7R5AeJHigBxbPc+kMReQIcFLH82o6BjA2NqFBqYOvQuh4kqiQ85dqFTW9MTKeY8or6Q==
+"@abp/datatables.net-bs4@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.3.0-rc.2.tgz#bbfc0d9d0ed86cdb14b38849fb78b2b1911c4a35"
+ integrity sha512-PRKYi2NU41KpckJ/d0buHoFbyKVuW5NCQNpUdYzDsPS2riyeXccCsLFJM1bT01TdR4Idla3vx9Fkb+HoJOiDeQ==
dependencies:
- "@abp/datatables.net" "~4.3.0-rc.1"
+ "@abp/datatables.net" "~4.3.0-rc.2"
datatables.net-bs4 "^1.10.21"
-"@abp/datatables.net@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.3.0-rc.1.tgz#aa1640903fe67d20e1fc57ffe0519b2764e4c7df"
- integrity sha512-qfdQa43sbXsIEBc3WpxSC7cXyKSFxLiFdCKnLIkQNsC3Wo+WX/Cute2xNbT0+xIQdGznfEBdPxcwQkNE6JQgcA==
+"@abp/datatables.net@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.3.0-rc.2.tgz#1923e60db261366a7d2f284b0274d13e253567ca"
+ integrity sha512-rp53+5Xj1jhjpCj7UBA9+nSNbaTQ4Vc1NWCg1e5aI5tWiyZprUS44dRszIQIDV86XKorfFhog5ihOZyzl1HDyg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
datatables.net "^1.10.21"
-"@abp/font-awesome@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.3.0-rc.1.tgz#5d336ead8b8c67b2c0aaff9365c2c856b033196e"
- integrity sha512-BU4ycN/gOxX2x8S/Eszi3bJAz6bZRhxa0uPWxEWKul9PNvKSwMJRoVaEVehnIlfTi2raHsLQHk+F7079gt3dlQ==
+"@abp/font-awesome@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.3.0-rc.2.tgz#437d3d6bbd8f52e5091251932d6a494d0164694b"
+ integrity sha512-FeHHtEQwrJBwD5PkFYqjKouCLwNjjRqTNseaN+s/r7gNjv0PgKytfRoqEb+O/BkZg/DwEuMz9jFX/RXCCNa2xA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
"@fortawesome/fontawesome-free" "^5.13.0"
-"@abp/jquery-form@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.3.0-rc.1.tgz#4543e3d751519ba12d2c563aa7cbc56e51dfe093"
- integrity sha512-ONQeImarHEe4VRSv13da+rHnCv+2Ycyd7YF+Dr77gtBmTKpC5nAFGY4wO7+u0U0px/YsR2dntpyBj2fEw3wjXA==
+"@abp/jquery-form@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.3.0-rc.2.tgz#999910deaf46330477b6ed487a771a2123d69f92"
+ integrity sha512-+fdEIOTlxDOdYXMtc/ujhYeuP2qiI4bmL3TQQWQxSTlW8q5jB6dHLBnHiXXltO8HxX9+7ZsjN3tsV7+Div5joA==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.3.0-rc.1.tgz#15a06257fba8ef8d2cba2ac9da3f6f7185e6c8dd"
- integrity sha512-8Tshu/QsqulwNfRnvoX1mViY12OTvCqpHdRldqr7k6MQd+boo6ahybQ4SCoZ9vsDTmqxd5dkV/A8VijMw66WTQ==
+"@abp/jquery-validation-unobtrusive@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.3.0-rc.2.tgz#0635e0c77da269e8367c3d7c388613249ce9221d"
+ integrity sha512-ubmPjVJatAW3AJWjWtT+ZbNLhu+HHNgcxYkFGVNusNuboTGsoBs5G45Cjzp/q5FnggWoPvkllpf8CGuaYUbpUQ==
dependencies:
- "@abp/jquery-validation" "~4.3.0-rc.1"
+ "@abp/jquery-validation" "~4.3.0-rc.2"
jquery-validation-unobtrusive "^3.2.11"
-"@abp/jquery-validation@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.3.0-rc.1.tgz#6a0d771c88e961cb43144cd6ef916d1ab22aceaf"
- integrity sha512-kjVF6757xP8wZ9qw8ysI5ve3AD8PoJtxqkkUV4QF4xcrdP8EPk2heX3Imu7MJiYGyMlwLU++FTm8J68UNsWRmQ==
+"@abp/jquery-validation@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.3.0-rc.2.tgz#ee145f8c4a633218ccfa50cca0bed503a0ca8dc6"
+ integrity sha512-SLWzN6jxVqKaHYs/d6Mku8CfhB1vWgfMbFma14upiJ+/VDkTF4Rh27iMCWKYVOS3bukh2ltBp6kPFplrjCAGSg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
jquery-validation "^1.19.2"
-"@abp/jquery@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.3.0-rc.1.tgz#06030baf44983175707409eff16a05db72c93bf5"
- integrity sha512-Xgptjea/RzgBvwK+paydXWMgenobuvqKsr9LbrIDiYAJuLMMCyGvwJnA7jeszz+OqZShP8ppoeB0ifa5K2Yc2A==
+"@abp/jquery@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.3.0-rc.2.tgz#f620628ea0739888cbcb360c058d09bff10d553b"
+ integrity sha512-+rfyLVJn7E8wJ1oQ9GiCR63Yk6wah1Hqnj4XpsRDMkIaOXKaqrnVHAZd4W2DUunQSe95wqHfkNH/wkvTyNEwUg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
jquery "~3.5.1"
-"@abp/lodash@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.3.0-rc.1.tgz#cd9bf0693379ea54f789299ba67483d345da5abf"
- integrity sha512-BtsQs6wpJJvdwPDx7sOIIzkVHJnzw4Twrv0q3XNqmsiv5eGIwluFsorm5N6qOk7nC5csor6mpk6YuJuFii8GbQ==
+"@abp/lodash@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.3.0-rc.2.tgz#9b5429d3976b34022aaf8cab4afef57479b66821"
+ integrity sha512-sE2dyofYbiIy4xhL85diZWkfqBcQl1q61T0DbYDOHgaejZAJxk4bVyFpEuMiC2HwWAZ656IN1bzyQIyE1RKzQA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
lodash "^4.17.15"
-"@abp/luxon@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.3.0-rc.1.tgz#dd855417224bbf124cdc9f395bb5cf5f0c6a7a03"
- integrity sha512-OtxmjCgPiH1JWsdUvQpkvum3k43H6v8Z5okv4lDpcBOah/HZYUP8qOsSS3Tcyw2I66TK15tq13XJeHabmh2lAQ==
+"@abp/luxon@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.3.0-rc.2.tgz#6fdbf1624462615dcb1f5ce85c07fc3bc4065e3f"
+ integrity sha512-C4aT0aN3/TVtTE3m0AZyhFSeeg+RxXpUO+nffAZoM/cH5NL8tir+O1hd+dhtCb7AELaqQNx5+qgXoJLYdWMYVg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
luxon "^1.24.1"
-"@abp/malihu-custom-scrollbar-plugin@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.3.0-rc.1.tgz#e07a9a1895ded98150c1ff4470638ab71e6a0561"
- integrity sha512-OiCVlh8iHPHFchSZdFzUl/w+MqPbnlZ4jlohbEuqBTV6rbaAnJXA0Tqylv4RKjho7fybGvhxjDbBrZS4kxUFLg==
+"@abp/malihu-custom-scrollbar-plugin@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.3.0-rc.2.tgz#28fc1f216c1d84b20acaf8c8c5cf5c3b33e1aeb1"
+ integrity sha512-LYMXKkPVyBLWV4Qnom2MW8JJ/rZmVg1CyOFxM6JiL+dpsN1Ogw0hRG33CCHQveqUmf2cr3vf96qk5Et5DyDDIg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/select2@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.3.0-rc.1.tgz#f3d60b42cb82abc6a0ce6a640b82eb53501f9893"
- integrity sha512-z+6Dhu6kqgCfTdZReI08N2ONKakQSmdDsNiZDB5/OOP26k2pOefe/j//sRfjTWiI5gCxO5y98ZZ0ccanBF8oTw==
+"@abp/select2@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.3.0-rc.2.tgz#42d62daff9e50b1fe211a1560794625ba3f52107"
+ integrity sha512-okiIXmFaqx0uy/UMcpMKWKjrwop1JINyzN4FS5tafUpWhx6KcYYHudLWJvnPbsdsOeBQx91kw8jjERRJIqfEOA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
select2 "^4.0.13"
-"@abp/sweetalert@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.3.0-rc.1.tgz#d54a8628f004c2d22ebcc4bd60f2b6c1cbd3bc8f"
- integrity sha512-OpgDbM9vOfCLpjCRFXavPAdoKlZnpxP+DkUH8owHTrtEuxmrSjpLlIa6VOzAKr70GiLtuMCz9QoH3AyMepx9vA==
+"@abp/sweetalert@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.3.0-rc.2.tgz#dfb20dfca8449ed3c3f6599d99b51746019eb664"
+ integrity sha512-NRKOgT80JVQrwI1FRqpbCzALvnLAFKdPwKKNDgm0L7r/5DL0+JbkKCI1AIPl/yiM8MBrCaQqNms+9JES5mjiUQ==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
sweetalert "^2.1.2"
-"@abp/timeago@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.3.0-rc.1.tgz#247f3b3a8e54f6732efa3600ba649a81fee6ec82"
- integrity sha512-cplxM3jYhhakET1DyERQoWJQxx0mhTKoI7gW93wNeEMyL4FWaF4lgUNEoubJUSBCDs4v/0ni0pKG8c8nldbiew==
+"@abp/timeago@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.3.0-rc.2.tgz#22943e219facd7fa0efddb63017198474b5cef89"
+ integrity sha512-TjKyuli+SpVjTgVJmraBpqJK112I+1DYHPJfso7QAH48Ra4gceGj9EVS0i/420YyLZyJSMtZOruxzYkyJeR/6w==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
timeago "^1.6.7"
-"@abp/toastr@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.3.0-rc.1.tgz#7bc5bb071839fbb971f56c41c8bf220b0a6d67e9"
- integrity sha512-OQgmdmWPKlpn/Lks6fUL4enEJgnvUeEcoGTuQOKfkh9ybadYd8kcELWw5ttsQ4o35yvDH3Lsh1jLwPDrCheTBg==
+"@abp/toastr@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.3.0-rc.2.tgz#143a344b00bbfaa858fe267fb6d627952bf7b3c0"
+ integrity sha512-cQV9UFWb9zarkb/CbrqkF9RXqn1Fc/TFKKM5mxpUEcYjx52NuM0d+KawdEMoN2y3y2U4ciY44kbTP2W1y+NlBg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
toastr "^2.1.4"
-"@abp/utils@^4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.0-rc.1.tgz#82ef26e01e0cb38417bf4fa9459fde85cbc2b424"
- integrity sha512-C/sk6jZQDENI7FbylBoPnTb1rC5eVPnsL8B++vAH4jS//OAj2iNvE6tCewK21GYI/JmfmQzzauQBzOiOJR9a6A==
+"@abp/utils@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.0-rc.2.tgz#6d051f98772e5642c2e3bc2f68e73d6f24f4694c"
+ integrity sha512-9qYo8OMTxIUG+qQBWXEpkURS6FUrx+J5s3SwC/eerp46hYr72GQ8L38Wq566a+xiLCn7Duxt6oJ/BxhTfQQxdw==
dependencies:
just-compare "^1.3.0"
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
index b9db49b418..438f9df375 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.3.0-rc.1",
- "@abp/prismjs": "^4.3.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^4.3.0-rc.2",
+ "@abp/prismjs": "^4.3.0-rc.2"
},
"devDependencies": {}
}
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 ab0f00749a..910082d2cc 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.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.3.0-rc.1.tgz#5dc06d82ee213bc33527b5af72ac94ae06bb7c25"
- integrity sha512-Xkwj3NPnqWDgqvaP2eda3gviV7aBtyNOMCdZSvpxWmlaPlvJYN+SnKNnlmX02XVArTlOjaeTapFkE3auJeR6jA==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~4.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.3.0-rc.1.tgz#9d4447f068b490367a20772eb9c2b38480088edb"
- integrity sha512-untEVm6cKT375ZVEQFO01/VKIqtdFGIyJd5ZxtoQEV8ueVFRQefCOcvvqaJ8Gfj86T1nacXvJRfBfGihYHY+JQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~4.3.0-rc.1"
- "@abp/bootstrap" "~4.3.0-rc.1"
- "@abp/bootstrap-datepicker" "~4.3.0-rc.1"
- "@abp/datatables.net-bs4" "~4.3.0-rc.1"
- "@abp/font-awesome" "~4.3.0-rc.1"
- "@abp/jquery-form" "~4.3.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~4.3.0-rc.1"
- "@abp/lodash" "~4.3.0-rc.1"
- "@abp/luxon" "~4.3.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~4.3.0-rc.1"
- "@abp/select2" "~4.3.0-rc.1"
- "@abp/sweetalert" "~4.3.0-rc.1"
- "@abp/timeago" "~4.3.0-rc.1"
- "@abp/toastr" "~4.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.3.0-rc.1.tgz#1e54da2a668939941ab955f11db69798d04d9e7e"
- integrity sha512-969etEb4H/fR9Twz6pcl766M/1AriCh6+B8r4haPB5g7QkOWhyU99mT11BHxQwf+uNV4duGZwvPvrMomrdLj2w==
+"@abp/aspnetcore.mvc.ui.theme.basic@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.3.0-rc.2.tgz#4ebafbaade6610e3d405877a148d72d57569c3e3"
+ integrity sha512-Q3QqxKDFC04gaaj30Rk+9zGNfNxC8FX0jciARATceFV6pdA3F3PgT5EMDSlo6NoGniFVjHPRgay9N09zT6Htyw==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~4.3.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.3.0-rc.2.tgz#d3bf79929c55c5380d7ca7b913a23031d7a6bd12"
+ integrity sha512-pz86bIV4wNeG7/UPYzNCXlJ/MdOdIygc+Com7C9Ld7gzsyER7VD9h5U/hkytvL4FBFLJn4DU+xuZNECjv0HS0A==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~4.3.0-rc.2"
+ "@abp/bootstrap" "~4.3.0-rc.2"
+ "@abp/bootstrap-datepicker" "~4.3.0-rc.2"
+ "@abp/datatables.net-bs4" "~4.3.0-rc.2"
+ "@abp/font-awesome" "~4.3.0-rc.2"
+ "@abp/jquery-form" "~4.3.0-rc.2"
+ "@abp/jquery-validation-unobtrusive" "~4.3.0-rc.2"
+ "@abp/lodash" "~4.3.0-rc.2"
+ "@abp/luxon" "~4.3.0-rc.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~4.3.0-rc.2"
+ "@abp/select2" "~4.3.0-rc.2"
+ "@abp/sweetalert" "~4.3.0-rc.2"
+ "@abp/timeago" "~4.3.0-rc.2"
+ "@abp/toastr" "~4.3.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.3.0-rc.2.tgz#6ff41be179c8d1089778a51ffa54a1f3d7614278"
+ integrity sha512-2L5zvuqUwPwNPcMauiiJZD1ft0QycqINz+bXEQ8t0EwbB+dzcsukL/rpOQfpeRHWWYy4nIN4C2bTvXhNgQbPqQ==
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.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.3.0-rc.1.tgz#879a8ce32a3dbdb0cd80401360d24f25f318670b"
- integrity sha512-W2T+rrC3oxuWj2xQUz2virbBK6x7ershWZB9d6FjXTSH89nin9DyBK20dEfskVvhK/IMrmZaW4PWyTTcx9r7dA==
+"@abp/bootstrap-datepicker@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.3.0-rc.2.tgz#29a686c3d2bce356967f646d7334cd83c4257b4c"
+ integrity sha512-3+B7SJRi7DQJe0aNgv0H0zu1BfvMZcwgt06N3ALR9+o3TSJcOqcYrEMed3aG+ASH++CltnohTYnLkVXaxshioA==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.3.0-rc.1.tgz#3260de03f29e210e44a55efa3af2ab6d34362227"
- integrity sha512-flB18MUnRWpEnS0t/WEjsdhfB5w+zHjsa69Pj733+GHGSsZ1Vppu+rgvSWp38yNHO5uRwGECrwUIGwvd5uD9+A==
+"@abp/bootstrap@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.3.0-rc.2.tgz#1416fe639c88b7d958435e45fe19692268a7f932"
+ integrity sha512-E6svmDhNQlT5nd65VgshexyedRWhbvi9o1oYo/dLTUpJDzR7M9ptDqxFLVB9vVDva3HgxUoEvgRJgb9fXvq4zw==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
bootstrap "^4.6.0"
bootstrap-v4-rtl "4.6.0-1"
-"@abp/clipboard@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.3.0-rc.1.tgz#014ac354e8d2aa93266f5415fcb9cef344df48e8"
- integrity sha512-+Kp4f5ib81AkufOPMyG4BTKiwcnAW6ZbWOGnsR2sBEz63wW6/ZPJ0GMngLfTkxPUJCH1QMwlk5wZoj9QAKqOAw==
+"@abp/clipboard@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.3.0-rc.2.tgz#63670e869b09f9e10ec9a2e7f8ffcc097ce1efc7"
+ integrity sha512-jTHzum4h5TQqAKJKEHwJ88NLFmby92hJ8byOBl/HAjOHb8LhWuw/ktTwl2knd0/63KpiCKYZGQPV3kk5JXVQ6w==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
clipboard "^2.0.6"
-"@abp/core@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.3.0-rc.1.tgz#201c3be8b5697fe8e1b08b23f87f50e950036a14"
- integrity sha512-ET8NGugNmdub+8qGeFf9qGPbloP5gcoBnB7U6ieFz1Eai9S3pSpbM+sdyifucEpzMThUiLS772EP4pJTMXhfEg==
+"@abp/core@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.3.0-rc.2.tgz#3c9ea339624ae3b6cbee13e048268d48269ea6a9"
+ integrity sha512-/89xH+IVSmTOLWeUO4yVB7Hg64uHTbR7bHjgl+b94cFdtITH9Nvr2EGdXUJbHGUK7L6lSDziqiMcG/ic0061+Q==
dependencies:
- "@abp/utils" "^4.3.0-rc.1"
+ "@abp/utils" "^4.3.0-rc.2"
-"@abp/datatables.net-bs4@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.3.0-rc.1.tgz#f7dad14d13b468949fd161b679f4a70271e0d466"
- integrity sha512-812cLTfSZZMvjAFAq5h7R5AeJHigBxbPc+kMReQIcFLH82o6BjA2NqFBqYOvQuh4kqiQ85dqFTW9MTKeY8or6Q==
+"@abp/datatables.net-bs4@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.3.0-rc.2.tgz#bbfc0d9d0ed86cdb14b38849fb78b2b1911c4a35"
+ integrity sha512-PRKYi2NU41KpckJ/d0buHoFbyKVuW5NCQNpUdYzDsPS2riyeXccCsLFJM1bT01TdR4Idla3vx9Fkb+HoJOiDeQ==
dependencies:
- "@abp/datatables.net" "~4.3.0-rc.1"
+ "@abp/datatables.net" "~4.3.0-rc.2"
datatables.net-bs4 "^1.10.21"
-"@abp/datatables.net@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.3.0-rc.1.tgz#aa1640903fe67d20e1fc57ffe0519b2764e4c7df"
- integrity sha512-qfdQa43sbXsIEBc3WpxSC7cXyKSFxLiFdCKnLIkQNsC3Wo+WX/Cute2xNbT0+xIQdGznfEBdPxcwQkNE6JQgcA==
+"@abp/datatables.net@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.3.0-rc.2.tgz#1923e60db261366a7d2f284b0274d13e253567ca"
+ integrity sha512-rp53+5Xj1jhjpCj7UBA9+nSNbaTQ4Vc1NWCg1e5aI5tWiyZprUS44dRszIQIDV86XKorfFhog5ihOZyzl1HDyg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
datatables.net "^1.10.21"
-"@abp/font-awesome@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.3.0-rc.1.tgz#5d336ead8b8c67b2c0aaff9365c2c856b033196e"
- integrity sha512-BU4ycN/gOxX2x8S/Eszi3bJAz6bZRhxa0uPWxEWKul9PNvKSwMJRoVaEVehnIlfTi2raHsLQHk+F7079gt3dlQ==
+"@abp/font-awesome@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.3.0-rc.2.tgz#437d3d6bbd8f52e5091251932d6a494d0164694b"
+ integrity sha512-FeHHtEQwrJBwD5PkFYqjKouCLwNjjRqTNseaN+s/r7gNjv0PgKytfRoqEb+O/BkZg/DwEuMz9jFX/RXCCNa2xA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
"@fortawesome/fontawesome-free" "^5.13.0"
-"@abp/jquery-form@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.3.0-rc.1.tgz#4543e3d751519ba12d2c563aa7cbc56e51dfe093"
- integrity sha512-ONQeImarHEe4VRSv13da+rHnCv+2Ycyd7YF+Dr77gtBmTKpC5nAFGY4wO7+u0U0px/YsR2dntpyBj2fEw3wjXA==
+"@abp/jquery-form@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.3.0-rc.2.tgz#999910deaf46330477b6ed487a771a2123d69f92"
+ integrity sha512-+fdEIOTlxDOdYXMtc/ujhYeuP2qiI4bmL3TQQWQxSTlW8q5jB6dHLBnHiXXltO8HxX9+7ZsjN3tsV7+Div5joA==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.3.0-rc.1.tgz#15a06257fba8ef8d2cba2ac9da3f6f7185e6c8dd"
- integrity sha512-8Tshu/QsqulwNfRnvoX1mViY12OTvCqpHdRldqr7k6MQd+boo6ahybQ4SCoZ9vsDTmqxd5dkV/A8VijMw66WTQ==
+"@abp/jquery-validation-unobtrusive@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.3.0-rc.2.tgz#0635e0c77da269e8367c3d7c388613249ce9221d"
+ integrity sha512-ubmPjVJatAW3AJWjWtT+ZbNLhu+HHNgcxYkFGVNusNuboTGsoBs5G45Cjzp/q5FnggWoPvkllpf8CGuaYUbpUQ==
dependencies:
- "@abp/jquery-validation" "~4.3.0-rc.1"
+ "@abp/jquery-validation" "~4.3.0-rc.2"
jquery-validation-unobtrusive "^3.2.11"
-"@abp/jquery-validation@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.3.0-rc.1.tgz#6a0d771c88e961cb43144cd6ef916d1ab22aceaf"
- integrity sha512-kjVF6757xP8wZ9qw8ysI5ve3AD8PoJtxqkkUV4QF4xcrdP8EPk2heX3Imu7MJiYGyMlwLU++FTm8J68UNsWRmQ==
+"@abp/jquery-validation@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.3.0-rc.2.tgz#ee145f8c4a633218ccfa50cca0bed503a0ca8dc6"
+ integrity sha512-SLWzN6jxVqKaHYs/d6Mku8CfhB1vWgfMbFma14upiJ+/VDkTF4Rh27iMCWKYVOS3bukh2ltBp6kPFplrjCAGSg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
jquery-validation "^1.19.2"
-"@abp/jquery@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.3.0-rc.1.tgz#06030baf44983175707409eff16a05db72c93bf5"
- integrity sha512-Xgptjea/RzgBvwK+paydXWMgenobuvqKsr9LbrIDiYAJuLMMCyGvwJnA7jeszz+OqZShP8ppoeB0ifa5K2Yc2A==
+"@abp/jquery@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.3.0-rc.2.tgz#f620628ea0739888cbcb360c058d09bff10d553b"
+ integrity sha512-+rfyLVJn7E8wJ1oQ9GiCR63Yk6wah1Hqnj4XpsRDMkIaOXKaqrnVHAZd4W2DUunQSe95wqHfkNH/wkvTyNEwUg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
jquery "~3.5.1"
-"@abp/lodash@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.3.0-rc.1.tgz#cd9bf0693379ea54f789299ba67483d345da5abf"
- integrity sha512-BtsQs6wpJJvdwPDx7sOIIzkVHJnzw4Twrv0q3XNqmsiv5eGIwluFsorm5N6qOk7nC5csor6mpk6YuJuFii8GbQ==
+"@abp/lodash@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.3.0-rc.2.tgz#9b5429d3976b34022aaf8cab4afef57479b66821"
+ integrity sha512-sE2dyofYbiIy4xhL85diZWkfqBcQl1q61T0DbYDOHgaejZAJxk4bVyFpEuMiC2HwWAZ656IN1bzyQIyE1RKzQA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
lodash "^4.17.15"
-"@abp/luxon@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.3.0-rc.1.tgz#dd855417224bbf124cdc9f395bb5cf5f0c6a7a03"
- integrity sha512-OtxmjCgPiH1JWsdUvQpkvum3k43H6v8Z5okv4lDpcBOah/HZYUP8qOsSS3Tcyw2I66TK15tq13XJeHabmh2lAQ==
+"@abp/luxon@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.3.0-rc.2.tgz#6fdbf1624462615dcb1f5ce85c07fc3bc4065e3f"
+ integrity sha512-C4aT0aN3/TVtTE3m0AZyhFSeeg+RxXpUO+nffAZoM/cH5NL8tir+O1hd+dhtCb7AELaqQNx5+qgXoJLYdWMYVg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
luxon "^1.24.1"
-"@abp/malihu-custom-scrollbar-plugin@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.3.0-rc.1.tgz#e07a9a1895ded98150c1ff4470638ab71e6a0561"
- integrity sha512-OiCVlh8iHPHFchSZdFzUl/w+MqPbnlZ4jlohbEuqBTV6rbaAnJXA0Tqylv4RKjho7fybGvhxjDbBrZS4kxUFLg==
+"@abp/malihu-custom-scrollbar-plugin@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.3.0-rc.2.tgz#28fc1f216c1d84b20acaf8c8c5cf5c3b33e1aeb1"
+ integrity sha512-LYMXKkPVyBLWV4Qnom2MW8JJ/rZmVg1CyOFxM6JiL+dpsN1Ogw0hRG33CCHQveqUmf2cr3vf96qk5Et5DyDDIg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/prismjs@^4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.3.0-rc.1.tgz#1a43222861e094de7be69cadc6caab91b8da69cd"
- integrity sha512-nd23YXLIWFr1JbUpGahfxgAIyolQgfujSphIpQsiuKm/HfXD5IWWjKRO6NGd6gUJfdpQzlzxUv+5cZXQlQ+0OA==
+"@abp/prismjs@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.3.0-rc.2.tgz#ecb98291898ba0c2fd4317be022d1a3e281c8bea"
+ integrity sha512-LA2pmTDhB3NwM4hEkZSW1xBXsixIXY2FVnEHS7ATkyRr36W/Gqb5fchv0ILBD7Gce40pAiPO2dMs4SUWT8qk0Q==
dependencies:
- "@abp/clipboard" "~4.3.0-rc.1"
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/clipboard" "~4.3.0-rc.2"
+ "@abp/core" "~4.3.0-rc.2"
prismjs "^1.20.0"
-"@abp/select2@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.3.0-rc.1.tgz#f3d60b42cb82abc6a0ce6a640b82eb53501f9893"
- integrity sha512-z+6Dhu6kqgCfTdZReI08N2ONKakQSmdDsNiZDB5/OOP26k2pOefe/j//sRfjTWiI5gCxO5y98ZZ0ccanBF8oTw==
+"@abp/select2@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.3.0-rc.2.tgz#42d62daff9e50b1fe211a1560794625ba3f52107"
+ integrity sha512-okiIXmFaqx0uy/UMcpMKWKjrwop1JINyzN4FS5tafUpWhx6KcYYHudLWJvnPbsdsOeBQx91kw8jjERRJIqfEOA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
select2 "^4.0.13"
-"@abp/sweetalert@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.3.0-rc.1.tgz#d54a8628f004c2d22ebcc4bd60f2b6c1cbd3bc8f"
- integrity sha512-OpgDbM9vOfCLpjCRFXavPAdoKlZnpxP+DkUH8owHTrtEuxmrSjpLlIa6VOzAKr70GiLtuMCz9QoH3AyMepx9vA==
+"@abp/sweetalert@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.3.0-rc.2.tgz#dfb20dfca8449ed3c3f6599d99b51746019eb664"
+ integrity sha512-NRKOgT80JVQrwI1FRqpbCzALvnLAFKdPwKKNDgm0L7r/5DL0+JbkKCI1AIPl/yiM8MBrCaQqNms+9JES5mjiUQ==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
sweetalert "^2.1.2"
-"@abp/timeago@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.3.0-rc.1.tgz#247f3b3a8e54f6732efa3600ba649a81fee6ec82"
- integrity sha512-cplxM3jYhhakET1DyERQoWJQxx0mhTKoI7gW93wNeEMyL4FWaF4lgUNEoubJUSBCDs4v/0ni0pKG8c8nldbiew==
+"@abp/timeago@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.3.0-rc.2.tgz#22943e219facd7fa0efddb63017198474b5cef89"
+ integrity sha512-TjKyuli+SpVjTgVJmraBpqJK112I+1DYHPJfso7QAH48Ra4gceGj9EVS0i/420YyLZyJSMtZOruxzYkyJeR/6w==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
timeago "^1.6.7"
-"@abp/toastr@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.3.0-rc.1.tgz#7bc5bb071839fbb971f56c41c8bf220b0a6d67e9"
- integrity sha512-OQgmdmWPKlpn/Lks6fUL4enEJgnvUeEcoGTuQOKfkh9ybadYd8kcELWw5ttsQ4o35yvDH3Lsh1jLwPDrCheTBg==
+"@abp/toastr@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.3.0-rc.2.tgz#143a344b00bbfaa858fe267fb6d627952bf7b3c0"
+ integrity sha512-cQV9UFWb9zarkb/CbrqkF9RXqn1Fc/TFKKM5mxpUEcYjx52NuM0d+KawdEMoN2y3y2U4ciY44kbTP2W1y+NlBg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
toastr "^2.1.4"
-"@abp/utils@^4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.0-rc.1.tgz#82ef26e01e0cb38417bf4fa9459fde85cbc2b424"
- integrity sha512-C/sk6jZQDENI7FbylBoPnTb1rC5eVPnsL8B++vAH4jS//OAj2iNvE6tCewK21GYI/JmfmQzzauQBzOiOJR9a6A==
+"@abp/utils@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.0-rc.2.tgz#6d051f98772e5642c2e3bc2f68e73d6f24f4694c"
+ integrity sha512-9qYo8OMTxIUG+qQBWXEpkURS6FUrx+J5s3SwC/eerp46hYr72GQ8L38Wq566a+xiLCn7Duxt6oJ/BxhTfQQxdw==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/blogging/app/Volo.BloggingTestApp/package.json b/modules/blogging/app/Volo.BloggingTestApp/package.json
index e5fc2f6ba4..9570a265db 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.3.0-rc.1",
- "@abp/blogging": "^4.3.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^4.3.0-rc.2",
+ "@abp/blogging": "^4.3.0-rc.2"
}
}
\ 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 7ddfc323d5..ea7d837a0b 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.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.3.0-rc.1.tgz#5dc06d82ee213bc33527b5af72ac94ae06bb7c25"
- integrity sha512-Xkwj3NPnqWDgqvaP2eda3gviV7aBtyNOMCdZSvpxWmlaPlvJYN+SnKNnlmX02XVArTlOjaeTapFkE3auJeR6jA==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~4.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.3.0-rc.1.tgz#9d4447f068b490367a20772eb9c2b38480088edb"
- integrity sha512-untEVm6cKT375ZVEQFO01/VKIqtdFGIyJd5ZxtoQEV8ueVFRQefCOcvvqaJ8Gfj86T1nacXvJRfBfGihYHY+JQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~4.3.0-rc.1"
- "@abp/bootstrap" "~4.3.0-rc.1"
- "@abp/bootstrap-datepicker" "~4.3.0-rc.1"
- "@abp/datatables.net-bs4" "~4.3.0-rc.1"
- "@abp/font-awesome" "~4.3.0-rc.1"
- "@abp/jquery-form" "~4.3.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~4.3.0-rc.1"
- "@abp/lodash" "~4.3.0-rc.1"
- "@abp/luxon" "~4.3.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~4.3.0-rc.1"
- "@abp/select2" "~4.3.0-rc.1"
- "@abp/sweetalert" "~4.3.0-rc.1"
- "@abp/timeago" "~4.3.0-rc.1"
- "@abp/toastr" "~4.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.3.0-rc.1.tgz#1e54da2a668939941ab955f11db69798d04d9e7e"
- integrity sha512-969etEb4H/fR9Twz6pcl766M/1AriCh6+B8r4haPB5g7QkOWhyU99mT11BHxQwf+uNV4duGZwvPvrMomrdLj2w==
+"@abp/aspnetcore.mvc.ui.theme.basic@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.3.0-rc.2.tgz#4ebafbaade6610e3d405877a148d72d57569c3e3"
+ integrity sha512-Q3QqxKDFC04gaaj30Rk+9zGNfNxC8FX0jciARATceFV6pdA3F3PgT5EMDSlo6NoGniFVjHPRgay9N09zT6Htyw==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~4.3.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.3.0-rc.2.tgz#d3bf79929c55c5380d7ca7b913a23031d7a6bd12"
+ integrity sha512-pz86bIV4wNeG7/UPYzNCXlJ/MdOdIygc+Com7C9Ld7gzsyER7VD9h5U/hkytvL4FBFLJn4DU+xuZNECjv0HS0A==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~4.3.0-rc.2"
+ "@abp/bootstrap" "~4.3.0-rc.2"
+ "@abp/bootstrap-datepicker" "~4.3.0-rc.2"
+ "@abp/datatables.net-bs4" "~4.3.0-rc.2"
+ "@abp/font-awesome" "~4.3.0-rc.2"
+ "@abp/jquery-form" "~4.3.0-rc.2"
+ "@abp/jquery-validation-unobtrusive" "~4.3.0-rc.2"
+ "@abp/lodash" "~4.3.0-rc.2"
+ "@abp/luxon" "~4.3.0-rc.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~4.3.0-rc.2"
+ "@abp/select2" "~4.3.0-rc.2"
+ "@abp/sweetalert" "~4.3.0-rc.2"
+ "@abp/timeago" "~4.3.0-rc.2"
+ "@abp/toastr" "~4.3.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.3.0-rc.2.tgz#6ff41be179c8d1089778a51ffa54a1f3d7614278"
+ integrity sha512-2L5zvuqUwPwNPcMauiiJZD1ft0QycqINz+bXEQ8t0EwbB+dzcsukL/rpOQfpeRHWWYy4nIN4C2bTvXhNgQbPqQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@@ -43,215 +43,215 @@
micromatch "^4.0.2"
path "^0.12.7"
-"@abp/blogging@^4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-4.3.0-rc.1.tgz#86cb002ddee3ce7ae93c7e740d9399108720ef60"
- integrity sha512-JVwlNuIMo7jp3x8iC7KyLJFUy4pcYA1JthunUOJMwDCb1mFGkQIfK9t+S1wyWcOHug3KwCEsavzC685TZoD1eg==
+"@abp/blogging@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-4.3.0-rc.2.tgz#4123557055737297c83970bfa4d5ddeb7d8ab8e7"
+ integrity sha512-yMaMYet5Y7Rfpm84zzhTNL3b8pU3CHoxRuWFGYveMz03v4lqzmHxi39GLa8Tciimth2r/6SROVpPClcLGuuNLw==
dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~4.3.0-rc.1"
- "@abp/owl.carousel" "~4.3.0-rc.1"
- "@abp/prismjs" "~4.3.0-rc.1"
- "@abp/tui-editor" "~4.3.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~4.3.0-rc.2"
+ "@abp/owl.carousel" "~4.3.0-rc.2"
+ "@abp/prismjs" "~4.3.0-rc.2"
+ "@abp/tui-editor" "~4.3.0-rc.2"
-"@abp/bootstrap-datepicker@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.3.0-rc.1.tgz#879a8ce32a3dbdb0cd80401360d24f25f318670b"
- integrity sha512-W2T+rrC3oxuWj2xQUz2virbBK6x7ershWZB9d6FjXTSH89nin9DyBK20dEfskVvhK/IMrmZaW4PWyTTcx9r7dA==
+"@abp/bootstrap-datepicker@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.3.0-rc.2.tgz#29a686c3d2bce356967f646d7334cd83c4257b4c"
+ integrity sha512-3+B7SJRi7DQJe0aNgv0H0zu1BfvMZcwgt06N3ALR9+o3TSJcOqcYrEMed3aG+ASH++CltnohTYnLkVXaxshioA==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.3.0-rc.1.tgz#3260de03f29e210e44a55efa3af2ab6d34362227"
- integrity sha512-flB18MUnRWpEnS0t/WEjsdhfB5w+zHjsa69Pj733+GHGSsZ1Vppu+rgvSWp38yNHO5uRwGECrwUIGwvd5uD9+A==
+"@abp/bootstrap@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.3.0-rc.2.tgz#1416fe639c88b7d958435e45fe19692268a7f932"
+ integrity sha512-E6svmDhNQlT5nd65VgshexyedRWhbvi9o1oYo/dLTUpJDzR7M9ptDqxFLVB9vVDva3HgxUoEvgRJgb9fXvq4zw==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
bootstrap "^4.6.0"
bootstrap-v4-rtl "4.6.0-1"
-"@abp/clipboard@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.3.0-rc.1.tgz#014ac354e8d2aa93266f5415fcb9cef344df48e8"
- integrity sha512-+Kp4f5ib81AkufOPMyG4BTKiwcnAW6ZbWOGnsR2sBEz63wW6/ZPJ0GMngLfTkxPUJCH1QMwlk5wZoj9QAKqOAw==
+"@abp/clipboard@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.3.0-rc.2.tgz#63670e869b09f9e10ec9a2e7f8ffcc097ce1efc7"
+ integrity sha512-jTHzum4h5TQqAKJKEHwJ88NLFmby92hJ8byOBl/HAjOHb8LhWuw/ktTwl2knd0/63KpiCKYZGQPV3kk5JXVQ6w==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
clipboard "^2.0.6"
-"@abp/codemirror@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-4.3.0-rc.1.tgz#f31d54113142c6d6a9dc70de111486ba54fb01e9"
- integrity sha512-XXCD8FqP7y29GwNoIjLr73FVy9WIxUzpVt2uyVVyzSTndKec2FzxoCBM/O3wEj33GUK7Z99bNIxReAcDOlf9Pw==
+"@abp/codemirror@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-4.3.0-rc.2.tgz#672d43fe99b74ed5b4e85a0ba79ba70e261a8e31"
+ integrity sha512-ZGGg8wkxRF9ZypEfmXFHTAg+dNn7uklfsBH4PJBB7CRpI5m3qth5ZQeIoUFbdoJHFWXl/UevmM9yzI1P05jZFA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
codemirror "^5.54.0"
-"@abp/core@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.3.0-rc.1.tgz#201c3be8b5697fe8e1b08b23f87f50e950036a14"
- integrity sha512-ET8NGugNmdub+8qGeFf9qGPbloP5gcoBnB7U6ieFz1Eai9S3pSpbM+sdyifucEpzMThUiLS772EP4pJTMXhfEg==
+"@abp/core@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.3.0-rc.2.tgz#3c9ea339624ae3b6cbee13e048268d48269ea6a9"
+ integrity sha512-/89xH+IVSmTOLWeUO4yVB7Hg64uHTbR7bHjgl+b94cFdtITH9Nvr2EGdXUJbHGUK7L6lSDziqiMcG/ic0061+Q==
dependencies:
- "@abp/utils" "^4.3.0-rc.1"
+ "@abp/utils" "^4.3.0-rc.2"
-"@abp/datatables.net-bs4@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.3.0-rc.1.tgz#f7dad14d13b468949fd161b679f4a70271e0d466"
- integrity sha512-812cLTfSZZMvjAFAq5h7R5AeJHigBxbPc+kMReQIcFLH82o6BjA2NqFBqYOvQuh4kqiQ85dqFTW9MTKeY8or6Q==
+"@abp/datatables.net-bs4@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.3.0-rc.2.tgz#bbfc0d9d0ed86cdb14b38849fb78b2b1911c4a35"
+ integrity sha512-PRKYi2NU41KpckJ/d0buHoFbyKVuW5NCQNpUdYzDsPS2riyeXccCsLFJM1bT01TdR4Idla3vx9Fkb+HoJOiDeQ==
dependencies:
- "@abp/datatables.net" "~4.3.0-rc.1"
+ "@abp/datatables.net" "~4.3.0-rc.2"
datatables.net-bs4 "^1.10.21"
-"@abp/datatables.net@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.3.0-rc.1.tgz#aa1640903fe67d20e1fc57ffe0519b2764e4c7df"
- integrity sha512-qfdQa43sbXsIEBc3WpxSC7cXyKSFxLiFdCKnLIkQNsC3Wo+WX/Cute2xNbT0+xIQdGznfEBdPxcwQkNE6JQgcA==
+"@abp/datatables.net@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.3.0-rc.2.tgz#1923e60db261366a7d2f284b0274d13e253567ca"
+ integrity sha512-rp53+5Xj1jhjpCj7UBA9+nSNbaTQ4Vc1NWCg1e5aI5tWiyZprUS44dRszIQIDV86XKorfFhog5ihOZyzl1HDyg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
datatables.net "^1.10.21"
-"@abp/font-awesome@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.3.0-rc.1.tgz#5d336ead8b8c67b2c0aaff9365c2c856b033196e"
- integrity sha512-BU4ycN/gOxX2x8S/Eszi3bJAz6bZRhxa0uPWxEWKul9PNvKSwMJRoVaEVehnIlfTi2raHsLQHk+F7079gt3dlQ==
+"@abp/font-awesome@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.3.0-rc.2.tgz#437d3d6bbd8f52e5091251932d6a494d0164694b"
+ integrity sha512-FeHHtEQwrJBwD5PkFYqjKouCLwNjjRqTNseaN+s/r7gNjv0PgKytfRoqEb+O/BkZg/DwEuMz9jFX/RXCCNa2xA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
"@fortawesome/fontawesome-free" "^5.13.0"
-"@abp/highlight.js@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-4.3.0-rc.1.tgz#10438fb6728fe7ff63f2f7271e0db1627320041c"
- integrity sha512-MYcQyaokZrzlKX4FbwWISodfwQFOrbtzLF2x28qjWlSFNO13xka8Wn0EmZMjY84oFqYybNzoEMNAsDDgF+STBA==
+"@abp/highlight.js@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-4.3.0-rc.2.tgz#a7c51e826b2a7e25c84af7ecbb38c5abe1d35dfb"
+ integrity sha512-oIGSsyAxdYm3ow/LbUwyYqtRvIOLQbsLQgP2+8FatnUdgFTKJRqG1RJXyPINDb3ldJlyQMFlgGlxlUV8cyqNzw==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
-"@abp/jquery-form@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.3.0-rc.1.tgz#4543e3d751519ba12d2c563aa7cbc56e51dfe093"
- integrity sha512-ONQeImarHEe4VRSv13da+rHnCv+2Ycyd7YF+Dr77gtBmTKpC5nAFGY4wO7+u0U0px/YsR2dntpyBj2fEw3wjXA==
+"@abp/jquery-form@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.3.0-rc.2.tgz#999910deaf46330477b6ed487a771a2123d69f92"
+ integrity sha512-+fdEIOTlxDOdYXMtc/ujhYeuP2qiI4bmL3TQQWQxSTlW8q5jB6dHLBnHiXXltO8HxX9+7ZsjN3tsV7+Div5joA==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.3.0-rc.1.tgz#15a06257fba8ef8d2cba2ac9da3f6f7185e6c8dd"
- integrity sha512-8Tshu/QsqulwNfRnvoX1mViY12OTvCqpHdRldqr7k6MQd+boo6ahybQ4SCoZ9vsDTmqxd5dkV/A8VijMw66WTQ==
+"@abp/jquery-validation-unobtrusive@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.3.0-rc.2.tgz#0635e0c77da269e8367c3d7c388613249ce9221d"
+ integrity sha512-ubmPjVJatAW3AJWjWtT+ZbNLhu+HHNgcxYkFGVNusNuboTGsoBs5G45Cjzp/q5FnggWoPvkllpf8CGuaYUbpUQ==
dependencies:
- "@abp/jquery-validation" "~4.3.0-rc.1"
+ "@abp/jquery-validation" "~4.3.0-rc.2"
jquery-validation-unobtrusive "^3.2.11"
-"@abp/jquery-validation@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.3.0-rc.1.tgz#6a0d771c88e961cb43144cd6ef916d1ab22aceaf"
- integrity sha512-kjVF6757xP8wZ9qw8ysI5ve3AD8PoJtxqkkUV4QF4xcrdP8EPk2heX3Imu7MJiYGyMlwLU++FTm8J68UNsWRmQ==
+"@abp/jquery-validation@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.3.0-rc.2.tgz#ee145f8c4a633218ccfa50cca0bed503a0ca8dc6"
+ integrity sha512-SLWzN6jxVqKaHYs/d6Mku8CfhB1vWgfMbFma14upiJ+/VDkTF4Rh27iMCWKYVOS3bukh2ltBp6kPFplrjCAGSg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
jquery-validation "^1.19.2"
-"@abp/jquery@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.3.0-rc.1.tgz#06030baf44983175707409eff16a05db72c93bf5"
- integrity sha512-Xgptjea/RzgBvwK+paydXWMgenobuvqKsr9LbrIDiYAJuLMMCyGvwJnA7jeszz+OqZShP8ppoeB0ifa5K2Yc2A==
+"@abp/jquery@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.3.0-rc.2.tgz#f620628ea0739888cbcb360c058d09bff10d553b"
+ integrity sha512-+rfyLVJn7E8wJ1oQ9GiCR63Yk6wah1Hqnj4XpsRDMkIaOXKaqrnVHAZd4W2DUunQSe95wqHfkNH/wkvTyNEwUg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
jquery "~3.5.1"
-"@abp/lodash@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.3.0-rc.1.tgz#cd9bf0693379ea54f789299ba67483d345da5abf"
- integrity sha512-BtsQs6wpJJvdwPDx7sOIIzkVHJnzw4Twrv0q3XNqmsiv5eGIwluFsorm5N6qOk7nC5csor6mpk6YuJuFii8GbQ==
+"@abp/lodash@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.3.0-rc.2.tgz#9b5429d3976b34022aaf8cab4afef57479b66821"
+ integrity sha512-sE2dyofYbiIy4xhL85diZWkfqBcQl1q61T0DbYDOHgaejZAJxk4bVyFpEuMiC2HwWAZ656IN1bzyQIyE1RKzQA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
lodash "^4.17.15"
-"@abp/luxon@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.3.0-rc.1.tgz#dd855417224bbf124cdc9f395bb5cf5f0c6a7a03"
- integrity sha512-OtxmjCgPiH1JWsdUvQpkvum3k43H6v8Z5okv4lDpcBOah/HZYUP8qOsSS3Tcyw2I66TK15tq13XJeHabmh2lAQ==
+"@abp/luxon@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.3.0-rc.2.tgz#6fdbf1624462615dcb1f5ce85c07fc3bc4065e3f"
+ integrity sha512-C4aT0aN3/TVtTE3m0AZyhFSeeg+RxXpUO+nffAZoM/cH5NL8tir+O1hd+dhtCb7AELaqQNx5+qgXoJLYdWMYVg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
luxon "^1.24.1"
-"@abp/malihu-custom-scrollbar-plugin@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.3.0-rc.1.tgz#e07a9a1895ded98150c1ff4470638ab71e6a0561"
- integrity sha512-OiCVlh8iHPHFchSZdFzUl/w+MqPbnlZ4jlohbEuqBTV6rbaAnJXA0Tqylv4RKjho7fybGvhxjDbBrZS4kxUFLg==
+"@abp/malihu-custom-scrollbar-plugin@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.3.0-rc.2.tgz#28fc1f216c1d84b20acaf8c8c5cf5c3b33e1aeb1"
+ integrity sha512-LYMXKkPVyBLWV4Qnom2MW8JJ/rZmVg1CyOFxM6JiL+dpsN1Ogw0hRG33CCHQveqUmf2cr3vf96qk5Et5DyDDIg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/markdown-it@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-4.3.0-rc.1.tgz#d545c789c493836d052f77441fcb23b847cd12d9"
- integrity sha512-uJA0V6eyOJdjadHg4X3GOQ0ifXSU38lJVblS8yYB/8yt9GezvwS9JukX+SguuR18YlFwwjTv1cU9CCYdY8htnA==
+"@abp/markdown-it@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-4.3.0-rc.2.tgz#4f1d039812e7efc8032b8542cd9d48dad136bf0d"
+ integrity sha512-fTMj0FFjMZcBevFWWrfnyxV5XZZYrD5Guq+cICMBYtKVqfbsy/ILpnznApXMuLxNukqIvGa8I3SdWaWO6CVhgQ==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
markdown-it "^11.0.0"
-"@abp/owl.carousel@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-4.3.0-rc.1.tgz#b78cff4f2d5494fe124230a217215e8721c5f1e8"
- integrity sha512-TE0rcGmH2l/pTY7/OuA/1s/IfxUjxXhTQslwlp5YHMk+z26+m4YcnWDzYU2kjA+mQ/q4wFkmNu7DVhld+YpS/A==
+"@abp/owl.carousel@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-4.3.0-rc.2.tgz#e13a568575a3d1c0b1f9c03c215792dd5320fb2a"
+ integrity sha512-pu87oxJjU0wA7bcxeTd0XUPYBqXV/0/9br79nhqeK4Qz8tsI1mC4mF4LW1GmTgNDKNrNydAEAenErFzG0GOwvA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
owl.carousel "^2.3.4"
-"@abp/prismjs@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.3.0-rc.1.tgz#1a43222861e094de7be69cadc6caab91b8da69cd"
- integrity sha512-nd23YXLIWFr1JbUpGahfxgAIyolQgfujSphIpQsiuKm/HfXD5IWWjKRO6NGd6gUJfdpQzlzxUv+5cZXQlQ+0OA==
+"@abp/prismjs@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.3.0-rc.2.tgz#ecb98291898ba0c2fd4317be022d1a3e281c8bea"
+ integrity sha512-LA2pmTDhB3NwM4hEkZSW1xBXsixIXY2FVnEHS7ATkyRr36W/Gqb5fchv0ILBD7Gce40pAiPO2dMs4SUWT8qk0Q==
dependencies:
- "@abp/clipboard" "~4.3.0-rc.1"
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/clipboard" "~4.3.0-rc.2"
+ "@abp/core" "~4.3.0-rc.2"
prismjs "^1.20.0"
-"@abp/select2@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.3.0-rc.1.tgz#f3d60b42cb82abc6a0ce6a640b82eb53501f9893"
- integrity sha512-z+6Dhu6kqgCfTdZReI08N2ONKakQSmdDsNiZDB5/OOP26k2pOefe/j//sRfjTWiI5gCxO5y98ZZ0ccanBF8oTw==
+"@abp/select2@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.3.0-rc.2.tgz#42d62daff9e50b1fe211a1560794625ba3f52107"
+ integrity sha512-okiIXmFaqx0uy/UMcpMKWKjrwop1JINyzN4FS5tafUpWhx6KcYYHudLWJvnPbsdsOeBQx91kw8jjERRJIqfEOA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
select2 "^4.0.13"
-"@abp/sweetalert@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.3.0-rc.1.tgz#d54a8628f004c2d22ebcc4bd60f2b6c1cbd3bc8f"
- integrity sha512-OpgDbM9vOfCLpjCRFXavPAdoKlZnpxP+DkUH8owHTrtEuxmrSjpLlIa6VOzAKr70GiLtuMCz9QoH3AyMepx9vA==
+"@abp/sweetalert@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.3.0-rc.2.tgz#dfb20dfca8449ed3c3f6599d99b51746019eb664"
+ integrity sha512-NRKOgT80JVQrwI1FRqpbCzALvnLAFKdPwKKNDgm0L7r/5DL0+JbkKCI1AIPl/yiM8MBrCaQqNms+9JES5mjiUQ==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
sweetalert "^2.1.2"
-"@abp/timeago@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.3.0-rc.1.tgz#247f3b3a8e54f6732efa3600ba649a81fee6ec82"
- integrity sha512-cplxM3jYhhakET1DyERQoWJQxx0mhTKoI7gW93wNeEMyL4FWaF4lgUNEoubJUSBCDs4v/0ni0pKG8c8nldbiew==
+"@abp/timeago@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.3.0-rc.2.tgz#22943e219facd7fa0efddb63017198474b5cef89"
+ integrity sha512-TjKyuli+SpVjTgVJmraBpqJK112I+1DYHPJfso7QAH48Ra4gceGj9EVS0i/420YyLZyJSMtZOruxzYkyJeR/6w==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
timeago "^1.6.7"
-"@abp/toastr@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.3.0-rc.1.tgz#7bc5bb071839fbb971f56c41c8bf220b0a6d67e9"
- integrity sha512-OQgmdmWPKlpn/Lks6fUL4enEJgnvUeEcoGTuQOKfkh9ybadYd8kcELWw5ttsQ4o35yvDH3Lsh1jLwPDrCheTBg==
+"@abp/toastr@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.3.0-rc.2.tgz#143a344b00bbfaa858fe267fb6d627952bf7b3c0"
+ integrity sha512-cQV9UFWb9zarkb/CbrqkF9RXqn1Fc/TFKKM5mxpUEcYjx52NuM0d+KawdEMoN2y3y2U4ciY44kbTP2W1y+NlBg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
toastr "^2.1.4"
-"@abp/tui-editor@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-4.3.0-rc.1.tgz#f72b82f2b9afb97562db29897261b02f0eb4ab34"
- integrity sha512-MEAv6Y6rDxhhB2/CKvhhW4iCHWEYSlZpiKDnAu9eD7xyyLyWDkn/x9oC+srVoTalfZOwMQ7B6kYSUuXMvX+2Uw==
+"@abp/tui-editor@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-4.3.0-rc.2.tgz#4d4de602faa2f1093752aa148df3fa3f5523d918"
+ integrity sha512-NuuQTiqYue+gJosVNzVTdx1HvuyfjoTzk1ih1uo8hkUWxcDuaK7LK/p4ZId8q10ZPeek5rhi2W9LgEj3EHkMBw==
dependencies:
- "@abp/codemirror" "~4.3.0-rc.1"
- "@abp/highlight.js" "~4.3.0-rc.1"
- "@abp/jquery" "~4.3.0-rc.1"
- "@abp/markdown-it" "~4.3.0-rc.1"
+ "@abp/codemirror" "~4.3.0-rc.2"
+ "@abp/highlight.js" "~4.3.0-rc.2"
+ "@abp/jquery" "~4.3.0-rc.2"
+ "@abp/markdown-it" "~4.3.0-rc.2"
tui-code-snippet "1.5.2"
tui-editor "^1.4.10"
-"@abp/utils@^4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.0-rc.1.tgz#82ef26e01e0cb38417bf4fa9459fde85cbc2b424"
- integrity sha512-C/sk6jZQDENI7FbylBoPnTb1rC5eVPnsL8B++vAH4jS//OAj2iNvE6tCewK21GYI/JmfmQzzauQBzOiOJR9a6A==
+"@abp/utils@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.0-rc.2.tgz#6d051f98772e5642c2e3bc2f68e73d6f24f4694c"
+ integrity sha512-9qYo8OMTxIUG+qQBWXEpkURS6FUrx+J5s3SwC/eerp46hYr72GQ8L38Wq566a+xiLCn7Duxt6oJ/BxhTfQQxdw==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/IBlogManagementAppService.cs b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/IBlogManagementAppService.cs
index 35d6d1c97e..1e363c8578 100644
--- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/IBlogManagementAppService.cs
+++ b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/IBlogManagementAppService.cs
@@ -18,5 +18,7 @@ namespace Volo.Blogging.Admin.Blogs
Task UpdateAsync(Guid id, UpdateBlogDto input);
Task DeleteAsync(Guid id);
+
+ Task ClearCacheAsync(Guid id);
}
}
diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs
index b11bd481fe..1c5f282d7c 100644
--- a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs
+++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs
@@ -3,18 +3,22 @@ using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
+using Volo.Abp.Caching;
using Volo.Blogging.Blogs;
using Volo.Blogging.Blogs.Dtos;
+using Volo.Blogging.Posts;
namespace Volo.Blogging.Admin.Blogs
{
public class BlogManagementAppService : BloggingAdminAppServiceBase, IBlogManagementAppService
{
private readonly IBlogRepository _blogRepository;
-
- public BlogManagementAppService(IBlogRepository blogRepository)
+ private readonly IDistributedCache> _postsCache;
+
+ public BlogManagementAppService(IBlogRepository blogRepository, IDistributedCache> postsCache)
{
_blogRepository = blogRepository;
+ _postsCache = postsCache;
}
public async Task> GetListAsync()
@@ -63,5 +67,11 @@ namespace Volo.Blogging.Admin.Blogs
{
await _blogRepository.DeleteAsync(id);
}
+
+ [Authorize(BloggingPermissions.Blogs.ClearCache)]
+ public async Task ClearCacheAsync(Guid id)
+ {
+ await _postsCache.RemoveAsync(id.ToString());
+ }
}
}
diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs
index 815604e871..ce6457dcc7 100644
--- a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs
+++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs
@@ -54,5 +54,12 @@ namespace Volo.Blogging.Admin
{
await _blogManagementAppService.DeleteAsync(id);
}
+
+ [HttpGet]
+ [Route("clear-cache/{id}")]
+ public async Task ClearCacheAsync(Guid id)
+ {
+ await _blogManagementAppService.ClearCacheAsync(id);
+ }
}
}
diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js
index a2b618b89f..aaa378cabd 100644
--- a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js
+++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js
@@ -52,6 +52,22 @@
});
},
},
+ {
+ text: l("ClearCache"),
+ visible: abp.auth.isGranted(
+ 'Blogging.Blog.ClearCache'
+ ),
+ confirmMessage: function (data) {
+ return l("ClearCacheConfirmationMessage");
+ },
+ action: function (data) {
+ volo.blogging.admin.blogManagement
+ .clearCache(data.record.id)
+ .then(function () {
+ _dataTable.ajax.reload();
+ })
+ }
+ }
],
},
},
diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingPermissionDefinitionProvider.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingPermissionDefinitionProvider.cs
index 65a6ab1ab7..595e32199c 100644
--- a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingPermissionDefinitionProvider.cs
+++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingPermissionDefinitionProvider.cs
@@ -15,6 +15,7 @@ namespace Volo.Blogging
blogs.AddChild(BloggingPermissions.Blogs.Update, L("Permission:Edit"));
blogs.AddChild(BloggingPermissions.Blogs.Delete, L("Permission:Delete"));
blogs.AddChild(BloggingPermissions.Blogs.Create, L("Permission:Create"));
+ blogs.AddChild(BloggingPermissions.Blogs.ClearCache, L("Permission:ClearCache"));
var posts = bloggingGroup.AddPermission(BloggingPermissions.Posts.Default, L("Permission:Posts"));
posts.AddChild(BloggingPermissions.Posts.Update, L("Permission:Edit"));
diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingPermissions.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingPermissions.cs
index fae85acf88..617b4d06f1 100644
--- a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingPermissions.cs
+++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingPermissions.cs
@@ -13,6 +13,7 @@ namespace Volo.Blogging
public const string Delete = Default + ".Delete";
public const string Update = Default + ".Update";
public const string Create = Default + ".Create";
+ public const string ClearCache = Default + ".ClearCache";
}
public static class Posts
diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/BloggingApplicationAutoMapperProfile.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/BloggingApplicationAutoMapperProfile.cs
index b9e3cf0dea..3572e00113 100644
--- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/BloggingApplicationAutoMapperProfile.cs
+++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/BloggingApplicationAutoMapperProfile.cs
@@ -20,6 +20,13 @@ namespace Volo.Blogging
CreateMap().Ignore(x=>x.Writer).Ignore(x=>x.CommentCount).Ignore(x=>x.Tags);
CreateMap().Ignore(x => x.Writer);
CreateMap();
+ CreateMap().Ignore(x=>x.CommentCount).Ignore(x=>x.Tags);
+ CreateMap()
+ .IgnoreModificationAuditedObjectProperties()
+ .IgnoreDeletionAuditedObjectProperties()
+ .Ignore(x=>x.Writer)
+ .Ignore(x => x.CommentCount)
+ .Ignore(x => x.Tags);
}
}
}
diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs
index 07d22d3385..7b42d25f84 100644
--- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs
+++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Caching.Distributed;
using Volo.Abp.Caching;
+using Volo.Abp.EventBus.Local;
using Volo.Blogging.Comments;
using Volo.Blogging.Tagging;
using Volo.Blogging.Tagging.Dtos;
@@ -20,41 +21,92 @@ namespace Volo.Blogging.Posts
private readonly IPostRepository _postRepository;
private readonly ITagRepository _tagRepository;
private readonly ICommentRepository _commentRepository;
- private readonly IDistributedCache> _postsCache;
-
- public PostAppService(IPostRepository postRepository, ITagRepository tagRepository, ICommentRepository commentRepository, IBlogUserLookupService userLookupService, IDistributedCache> postsCache)
+ private readonly IDistributedCache> _postsCache;
+ private readonly ILocalEventBus _localEventBus;
+
+ public PostAppService(
+ IPostRepository postRepository,
+ ITagRepository tagRepository,
+ ICommentRepository commentRepository,
+ IBlogUserLookupService userLookupService,
+ IDistributedCache> postsCache,
+ ILocalEventBus localEventBus
+ )
{
UserLookupService = userLookupService;
_postRepository = postRepository;
_tagRepository = tagRepository;
_commentRepository = commentRepository;
_postsCache = postsCache;
+ _localEventBus = localEventBus;
}
public async Task> GetListByBlogIdAndTagName(Guid id, string tagName)
{
- var cacheKey = id.ToString() + "-" + tagName;
+ var posts = await _postRepository.GetPostsByBlogId(id);
+ var tag = tagName.IsNullOrWhiteSpace() ? null : await _tagRepository.FindByNameAsync(id, tagName);
+ var userDictionary = new Dictionary();
+ var postDtos = new List(ObjectMapper.Map, List>(posts));
- return await _postsCache.GetOrAddAsync(
- cacheKey,
- async () => await GetPostsByBlogIdAndTagName(id, tagName),
- () => new DistributedCacheEntryOptions
+ foreach (var postDto in postDtos)
+ {
+ postDto.Tags = await GetTagsOfPost(postDto.Id);
+ }
+
+ if (tag != null)
+ {
+ postDtos = await FilterPostsByTag(postDtos, tag);
+ }
+
+ foreach (var postDto in postDtos)
+ {
+ if (postDto.CreatorId.HasValue)
{
- AbsoluteExpiration = DateTimeOffset.Now.AddHours(6)
+ if (!userDictionary.ContainsKey(postDto.CreatorId.Value))
+ {
+ var creatorUser = await UserLookupService.FindByIdAsync(postDto.CreatorId.Value);
+ if (creatorUser != null)
+ {
+ userDictionary[creatorUser.Id] = ObjectMapper.Map(creatorUser);
+ }
+ }
+
+ if (userDictionary.ContainsKey(postDto.CreatorId.Value))
+ {
+ postDto.Writer = userDictionary[(Guid)postDto.CreatorId];
+ }
}
- );
+ }
+
+ return new ListResultDto(postDtos);
}
public async Task> GetTimeOrderedListAsync(Guid blogId)
{
- return await _postsCache.GetOrAddAsync(
+ var postCacheItems = await _postsCache.GetOrAddAsync(
blogId.ToString(),
async () => await GetTimeOrderedPostsAsync(blogId),
() => new DistributedCacheEntryOptions
{
- AbsoluteExpiration = DateTimeOffset.Now.AddHours(6)
+ AbsoluteExpiration = DateTimeOffset.Now.AddHours(1)
}
);
+
+ var postsWithDetails = ObjectMapper.Map, List>(postCacheItems);
+
+ foreach (var post in postsWithDetails)
+ {
+ if (post.CreatorId.HasValue)
+ {
+ var creatorUser = await UserLookupService.FindByIdAsync(post.CreatorId.Value);
+ if (creatorUser != null)
+ {
+ post.Writer = ObjectMapper.Map(creatorUser);
+ }
+ }
+ }
+
+ return new ListResultDto(postsWithDetails);
}
public async Task GetForReadingAsync(GetPostInput input)
@@ -107,6 +159,7 @@ namespace Volo.Blogging.Posts
await _commentRepository.DeleteOfPost(id);
await _postRepository.DeleteAsync(id);
+ await PublishPostChangedEventAsync(post.BlogId);
}
[Authorize(BloggingPermissions.Posts.Update)]
@@ -128,6 +181,7 @@ namespace Volo.Blogging.Posts
var tagList = SplitTags(input.Tags);
await SaveTags(tagList, post);
+ await PublishPostChangedEventAsync(post.BlogId);
return ObjectMapper.Map(post);
}
@@ -153,66 +207,16 @@ namespace Volo.Blogging.Posts
var tagList = SplitTags(input.Tags);
await SaveTags(tagList, post);
+ await PublishPostChangedEventAsync(post.BlogId);
return ObjectMapper.Map(post);
}
- private async Task> GetPostsByBlogIdAndTagName(Guid id, string tagName)
- {
- var posts = await _postRepository.GetPostsByBlogId(id);
- var tag = tagName.IsNullOrWhiteSpace() ? null : await _tagRepository.FindByNameAsync(id, tagName);
- var userDictionary = new Dictionary();
- var postDtos = new List(ObjectMapper.Map, List>(posts));
-
- foreach (var postDto in postDtos)
- {
- postDto.Tags = await GetTagsOfPost(postDto.Id);
- }
-
- if (tag != null)
- {
- postDtos = await FilterPostsByTag(postDtos, tag);
- }
-
- foreach (var postDto in postDtos)
- {
- if (postDto.CreatorId.HasValue)
- {
- if (!userDictionary.ContainsKey(postDto.CreatorId.Value))
- {
- var creatorUser = await UserLookupService.FindByIdAsync(postDto.CreatorId.Value);
- if (creatorUser != null)
- {
- userDictionary[creatorUser.Id] = ObjectMapper.Map(creatorUser);
- }
- }
-
- if (userDictionary.ContainsKey(postDto.CreatorId.Value))
- {
- postDto.Writer = userDictionary[(Guid)postDto.CreatorId];
- }
- }
- }
-
- return new ListResultDto(postDtos);
- }
-
- private async Task> GetTimeOrderedPostsAsync(Guid blogId)
+ private async Task> GetTimeOrderedPostsAsync(Guid blogId)
{
var posts = await _postRepository.GetOrderedList(blogId);
- var postDtos = new List(ObjectMapper.Map, List>(posts));
-
- foreach (var postDto in postDtos)
- {
- var creatorUser = await UserLookupService.FindByIdAsync(postDto.CreatorId.Value);
- if (creatorUser != null)
- {
- postDto.Writer = ObjectMapper.Map(creatorUser);
- }
- }
-
- return new ListResultDto(postDtos);
+ return ObjectMapper.Map, List>(posts);
}
private async Task RenameUrlIfItAlreadyExistAsync(Guid blogId, string url, Post existingPost = null)
@@ -300,5 +304,14 @@ namespace Volo.Blogging.Posts
return Task.FromResult(filteredPostDtos);
}
+
+ private async Task PublishPostChangedEventAsync(Guid blogId)
+ {
+ await _localEventBus.PublishAsync(
+ new PostChangedEvent
+ {
+ BlogId = blogId
+ });
+ }
}
}
diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/en.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/en.json
index 5ebdf25d9f..2219aa9fcd 100644
--- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/en.json
+++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/en.json
@@ -12,6 +12,7 @@
"Permission:Posts": "Posts",
"Permission:Tags": "Tags",
"Permission:Comments": "Comments",
+ "Permission:ClearCache": "Clear cache",
"Title": "Title",
"Delete": "Delete",
"Reply": "Reply",
@@ -53,6 +54,8 @@
"Blogs": "Blogs",
"Tags": "Tags",
"ShareOn": "Share on",
- "TitleLengthWarning": "Keep your title size under 60 characters to be SEO friendly!"
+ "TitleLengthWarning": "Keep your title size under 60 characters to be SEO friendly!",
+ "ClearCache": "Clear cache",
+ "ClearCacheConfirmationMessage": "Are you sure you want to clear the cache?"
}
}
diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/tr.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/tr.json
index 4a9a38b040..915e8b233e 100644
--- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/tr.json
+++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/tr.json
@@ -12,6 +12,7 @@
"Permission:Posts": "Yazılar",
"Permission:Tags": "Etiketler",
"Permission:Comments": "Yorumlar",
+ "Permission:ClearCache": "Önbelleği temizle",
"Title": "Başlık",
"Delete": "Sil",
"Reply": "Yanıtla",
@@ -53,6 +54,8 @@
"Blogs": "Bloglar",
"Tags": "Etiketler",
"ShareOn": "Paylaş",
- "TitleLengthWarning": "Başlığınınz SEO dostu olabilmesi için 60 karakterden az olmasını sağlayın!"
+ "TitleLengthWarning": "Başlığınınz SEO dostu olabilmesi için 60 karakterden az olmasını sağlayın!",
+ "ClearCache": "Önbelleği temizle",
+ "ClearCacheConfirmationMessage": "Önbelleği temizlemek istediğinizden emin misiniz?"
}
}
diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj
index 73cf0498c5..c6c096105b 100644
--- a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj
+++ b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj
@@ -15,6 +15,7 @@
+
diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/BloggingDomainModule.cs b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/BloggingDomainModule.cs
index 3179303215..2e5e9a68e0 100644
--- a/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/BloggingDomainModule.cs
+++ b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/BloggingDomainModule.cs
@@ -1,5 +1,6 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AutoMapper;
+using Volo.Abp.Caching;
using Volo.Abp.Domain;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.Modularity;
@@ -13,7 +14,9 @@ namespace Volo.Blogging
[DependsOn(
typeof(BloggingDomainSharedModule),
typeof(AbpDddDomainModule),
- typeof(AbpAutoMapperModule))]
+ typeof(AbpAutoMapperModule),
+ typeof(AbpCachingModule)
+ )]
public class BloggingDomainModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/PostCacheInvalidator.cs b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/PostCacheInvalidator.cs
new file mode 100644
index 0000000000..e18e6de23b
--- /dev/null
+++ b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/PostCacheInvalidator.cs
@@ -0,0 +1,23 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Volo.Abp.Caching;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.EventBus;
+
+namespace Volo.Blogging.Posts
+{
+ public class PostCacheInvalidator : ILocalEventHandler, ITransientDependency
+ {
+ protected IDistributedCache> Cache { get; }
+
+ public PostCacheInvalidator(IDistributedCache> cache)
+ {
+ Cache = cache;
+ }
+
+ public virtual async Task HandleEventAsync(PostChangedEvent post)
+ {
+ await Cache.RemoveAsync(post.BlogId.ToString());
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/PostCacheItem.cs b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/PostCacheItem.cs
new file mode 100644
index 0000000000..d65b64ba43
--- /dev/null
+++ b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/PostCacheItem.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using JetBrains.Annotations;
+using Volo.Abp.Auditing;
+using Volo.Abp.Domain.Entities;
+using Volo.Blogging.Tagging;
+using Volo.Blogging.Users;
+
+namespace Volo.Blogging.Posts
+{
+ [Serializable]
+ public class PostCacheItem : ICreationAuditedObject
+ {
+ public Guid Id { get; set; }
+
+ public Guid BlogId { get; set; }
+
+ public string Title { get; set; }
+
+ public string CoverImage { get; set; }
+
+ public string Url { get; set; }
+
+ public string Content { get; set; }
+
+ public string Description { get; set; }
+
+ public int ReadCount { get; set; }
+
+ public int CommentCount { get; set; }
+
+ public List Tags { get; set; }
+
+ public Guid? CreatorId { get; set; }
+
+ public DateTime CreationTime { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/PostChangedEvent.cs b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/PostChangedEvent.cs
new file mode 100644
index 0000000000..c32ed92224
--- /dev/null
+++ b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/PostChangedEvent.cs
@@ -0,0 +1,9 @@
+using System;
+
+namespace Volo.Blogging.Posts
+{
+ public class PostChangedEvent
+ {
+ public Guid BlogId { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
index 85f08a8046..391b299fdc 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.3.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^4.3.0-rc.2"
}
}
\ 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 b6d4a05f93..25d1eb8717 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.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.3.0-rc.1.tgz#5dc06d82ee213bc33527b5af72ac94ae06bb7c25"
- integrity sha512-Xkwj3NPnqWDgqvaP2eda3gviV7aBtyNOMCdZSvpxWmlaPlvJYN+SnKNnlmX02XVArTlOjaeTapFkE3auJeR6jA==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~4.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.3.0-rc.1.tgz#9d4447f068b490367a20772eb9c2b38480088edb"
- integrity sha512-untEVm6cKT375ZVEQFO01/VKIqtdFGIyJd5ZxtoQEV8ueVFRQefCOcvvqaJ8Gfj86T1nacXvJRfBfGihYHY+JQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~4.3.0-rc.1"
- "@abp/bootstrap" "~4.3.0-rc.1"
- "@abp/bootstrap-datepicker" "~4.3.0-rc.1"
- "@abp/datatables.net-bs4" "~4.3.0-rc.1"
- "@abp/font-awesome" "~4.3.0-rc.1"
- "@abp/jquery-form" "~4.3.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~4.3.0-rc.1"
- "@abp/lodash" "~4.3.0-rc.1"
- "@abp/luxon" "~4.3.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~4.3.0-rc.1"
- "@abp/select2" "~4.3.0-rc.1"
- "@abp/sweetalert" "~4.3.0-rc.1"
- "@abp/timeago" "~4.3.0-rc.1"
- "@abp/toastr" "~4.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.3.0-rc.1.tgz#1e54da2a668939941ab955f11db69798d04d9e7e"
- integrity sha512-969etEb4H/fR9Twz6pcl766M/1AriCh6+B8r4haPB5g7QkOWhyU99mT11BHxQwf+uNV4duGZwvPvrMomrdLj2w==
+"@abp/aspnetcore.mvc.ui.theme.basic@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.3.0-rc.2.tgz#4ebafbaade6610e3d405877a148d72d57569c3e3"
+ integrity sha512-Q3QqxKDFC04gaaj30Rk+9zGNfNxC8FX0jciARATceFV6pdA3F3PgT5EMDSlo6NoGniFVjHPRgay9N09zT6Htyw==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~4.3.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.3.0-rc.2.tgz#d3bf79929c55c5380d7ca7b913a23031d7a6bd12"
+ integrity sha512-pz86bIV4wNeG7/UPYzNCXlJ/MdOdIygc+Com7C9Ld7gzsyER7VD9h5U/hkytvL4FBFLJn4DU+xuZNECjv0HS0A==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~4.3.0-rc.2"
+ "@abp/bootstrap" "~4.3.0-rc.2"
+ "@abp/bootstrap-datepicker" "~4.3.0-rc.2"
+ "@abp/datatables.net-bs4" "~4.3.0-rc.2"
+ "@abp/font-awesome" "~4.3.0-rc.2"
+ "@abp/jquery-form" "~4.3.0-rc.2"
+ "@abp/jquery-validation-unobtrusive" "~4.3.0-rc.2"
+ "@abp/lodash" "~4.3.0-rc.2"
+ "@abp/luxon" "~4.3.0-rc.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~4.3.0-rc.2"
+ "@abp/select2" "~4.3.0-rc.2"
+ "@abp/sweetalert" "~4.3.0-rc.2"
+ "@abp/timeago" "~4.3.0-rc.2"
+ "@abp/toastr" "~4.3.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.3.0-rc.2.tgz#6ff41be179c8d1089778a51ffa54a1f3d7614278"
+ integrity sha512-2L5zvuqUwPwNPcMauiiJZD1ft0QycqINz+bXEQ8t0EwbB+dzcsukL/rpOQfpeRHWWYy4nIN4C2bTvXhNgQbPqQ==
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.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.3.0-rc.1.tgz#879a8ce32a3dbdb0cd80401360d24f25f318670b"
- integrity sha512-W2T+rrC3oxuWj2xQUz2virbBK6x7ershWZB9d6FjXTSH89nin9DyBK20dEfskVvhK/IMrmZaW4PWyTTcx9r7dA==
+"@abp/bootstrap-datepicker@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.3.0-rc.2.tgz#29a686c3d2bce356967f646d7334cd83c4257b4c"
+ integrity sha512-3+B7SJRi7DQJe0aNgv0H0zu1BfvMZcwgt06N3ALR9+o3TSJcOqcYrEMed3aG+ASH++CltnohTYnLkVXaxshioA==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.3.0-rc.1.tgz#3260de03f29e210e44a55efa3af2ab6d34362227"
- integrity sha512-flB18MUnRWpEnS0t/WEjsdhfB5w+zHjsa69Pj733+GHGSsZ1Vppu+rgvSWp38yNHO5uRwGECrwUIGwvd5uD9+A==
+"@abp/bootstrap@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.3.0-rc.2.tgz#1416fe639c88b7d958435e45fe19692268a7f932"
+ integrity sha512-E6svmDhNQlT5nd65VgshexyedRWhbvi9o1oYo/dLTUpJDzR7M9ptDqxFLVB9vVDva3HgxUoEvgRJgb9fXvq4zw==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
bootstrap "^4.6.0"
bootstrap-v4-rtl "4.6.0-1"
-"@abp/core@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.3.0-rc.1.tgz#201c3be8b5697fe8e1b08b23f87f50e950036a14"
- integrity sha512-ET8NGugNmdub+8qGeFf9qGPbloP5gcoBnB7U6ieFz1Eai9S3pSpbM+sdyifucEpzMThUiLS772EP4pJTMXhfEg==
+"@abp/core@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.3.0-rc.2.tgz#3c9ea339624ae3b6cbee13e048268d48269ea6a9"
+ integrity sha512-/89xH+IVSmTOLWeUO4yVB7Hg64uHTbR7bHjgl+b94cFdtITH9Nvr2EGdXUJbHGUK7L6lSDziqiMcG/ic0061+Q==
dependencies:
- "@abp/utils" "^4.3.0-rc.1"
+ "@abp/utils" "^4.3.0-rc.2"
-"@abp/datatables.net-bs4@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.3.0-rc.1.tgz#f7dad14d13b468949fd161b679f4a70271e0d466"
- integrity sha512-812cLTfSZZMvjAFAq5h7R5AeJHigBxbPc+kMReQIcFLH82o6BjA2NqFBqYOvQuh4kqiQ85dqFTW9MTKeY8or6Q==
+"@abp/datatables.net-bs4@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.3.0-rc.2.tgz#bbfc0d9d0ed86cdb14b38849fb78b2b1911c4a35"
+ integrity sha512-PRKYi2NU41KpckJ/d0buHoFbyKVuW5NCQNpUdYzDsPS2riyeXccCsLFJM1bT01TdR4Idla3vx9Fkb+HoJOiDeQ==
dependencies:
- "@abp/datatables.net" "~4.3.0-rc.1"
+ "@abp/datatables.net" "~4.3.0-rc.2"
datatables.net-bs4 "^1.10.21"
-"@abp/datatables.net@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.3.0-rc.1.tgz#aa1640903fe67d20e1fc57ffe0519b2764e4c7df"
- integrity sha512-qfdQa43sbXsIEBc3WpxSC7cXyKSFxLiFdCKnLIkQNsC3Wo+WX/Cute2xNbT0+xIQdGznfEBdPxcwQkNE6JQgcA==
+"@abp/datatables.net@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.3.0-rc.2.tgz#1923e60db261366a7d2f284b0274d13e253567ca"
+ integrity sha512-rp53+5Xj1jhjpCj7UBA9+nSNbaTQ4Vc1NWCg1e5aI5tWiyZprUS44dRszIQIDV86XKorfFhog5ihOZyzl1HDyg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
datatables.net "^1.10.21"
-"@abp/font-awesome@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.3.0-rc.1.tgz#5d336ead8b8c67b2c0aaff9365c2c856b033196e"
- integrity sha512-BU4ycN/gOxX2x8S/Eszi3bJAz6bZRhxa0uPWxEWKul9PNvKSwMJRoVaEVehnIlfTi2raHsLQHk+F7079gt3dlQ==
+"@abp/font-awesome@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.3.0-rc.2.tgz#437d3d6bbd8f52e5091251932d6a494d0164694b"
+ integrity sha512-FeHHtEQwrJBwD5PkFYqjKouCLwNjjRqTNseaN+s/r7gNjv0PgKytfRoqEb+O/BkZg/DwEuMz9jFX/RXCCNa2xA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
"@fortawesome/fontawesome-free" "^5.13.0"
-"@abp/jquery-form@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.3.0-rc.1.tgz#4543e3d751519ba12d2c563aa7cbc56e51dfe093"
- integrity sha512-ONQeImarHEe4VRSv13da+rHnCv+2Ycyd7YF+Dr77gtBmTKpC5nAFGY4wO7+u0U0px/YsR2dntpyBj2fEw3wjXA==
+"@abp/jquery-form@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.3.0-rc.2.tgz#999910deaf46330477b6ed487a771a2123d69f92"
+ integrity sha512-+fdEIOTlxDOdYXMtc/ujhYeuP2qiI4bmL3TQQWQxSTlW8q5jB6dHLBnHiXXltO8HxX9+7ZsjN3tsV7+Div5joA==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.3.0-rc.1.tgz#15a06257fba8ef8d2cba2ac9da3f6f7185e6c8dd"
- integrity sha512-8Tshu/QsqulwNfRnvoX1mViY12OTvCqpHdRldqr7k6MQd+boo6ahybQ4SCoZ9vsDTmqxd5dkV/A8VijMw66WTQ==
+"@abp/jquery-validation-unobtrusive@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.3.0-rc.2.tgz#0635e0c77da269e8367c3d7c388613249ce9221d"
+ integrity sha512-ubmPjVJatAW3AJWjWtT+ZbNLhu+HHNgcxYkFGVNusNuboTGsoBs5G45Cjzp/q5FnggWoPvkllpf8CGuaYUbpUQ==
dependencies:
- "@abp/jquery-validation" "~4.3.0-rc.1"
+ "@abp/jquery-validation" "~4.3.0-rc.2"
jquery-validation-unobtrusive "^3.2.11"
-"@abp/jquery-validation@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.3.0-rc.1.tgz#6a0d771c88e961cb43144cd6ef916d1ab22aceaf"
- integrity sha512-kjVF6757xP8wZ9qw8ysI5ve3AD8PoJtxqkkUV4QF4xcrdP8EPk2heX3Imu7MJiYGyMlwLU++FTm8J68UNsWRmQ==
+"@abp/jquery-validation@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.3.0-rc.2.tgz#ee145f8c4a633218ccfa50cca0bed503a0ca8dc6"
+ integrity sha512-SLWzN6jxVqKaHYs/d6Mku8CfhB1vWgfMbFma14upiJ+/VDkTF4Rh27iMCWKYVOS3bukh2ltBp6kPFplrjCAGSg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
jquery-validation "^1.19.2"
-"@abp/jquery@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.3.0-rc.1.tgz#06030baf44983175707409eff16a05db72c93bf5"
- integrity sha512-Xgptjea/RzgBvwK+paydXWMgenobuvqKsr9LbrIDiYAJuLMMCyGvwJnA7jeszz+OqZShP8ppoeB0ifa5K2Yc2A==
+"@abp/jquery@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.3.0-rc.2.tgz#f620628ea0739888cbcb360c058d09bff10d553b"
+ integrity sha512-+rfyLVJn7E8wJ1oQ9GiCR63Yk6wah1Hqnj4XpsRDMkIaOXKaqrnVHAZd4W2DUunQSe95wqHfkNH/wkvTyNEwUg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
jquery "~3.5.1"
-"@abp/lodash@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.3.0-rc.1.tgz#cd9bf0693379ea54f789299ba67483d345da5abf"
- integrity sha512-BtsQs6wpJJvdwPDx7sOIIzkVHJnzw4Twrv0q3XNqmsiv5eGIwluFsorm5N6qOk7nC5csor6mpk6YuJuFii8GbQ==
+"@abp/lodash@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.3.0-rc.2.tgz#9b5429d3976b34022aaf8cab4afef57479b66821"
+ integrity sha512-sE2dyofYbiIy4xhL85diZWkfqBcQl1q61T0DbYDOHgaejZAJxk4bVyFpEuMiC2HwWAZ656IN1bzyQIyE1RKzQA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
lodash "^4.17.15"
-"@abp/luxon@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.3.0-rc.1.tgz#dd855417224bbf124cdc9f395bb5cf5f0c6a7a03"
- integrity sha512-OtxmjCgPiH1JWsdUvQpkvum3k43H6v8Z5okv4lDpcBOah/HZYUP8qOsSS3Tcyw2I66TK15tq13XJeHabmh2lAQ==
+"@abp/luxon@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.3.0-rc.2.tgz#6fdbf1624462615dcb1f5ce85c07fc3bc4065e3f"
+ integrity sha512-C4aT0aN3/TVtTE3m0AZyhFSeeg+RxXpUO+nffAZoM/cH5NL8tir+O1hd+dhtCb7AELaqQNx5+qgXoJLYdWMYVg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
luxon "^1.24.1"
-"@abp/malihu-custom-scrollbar-plugin@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.3.0-rc.1.tgz#e07a9a1895ded98150c1ff4470638ab71e6a0561"
- integrity sha512-OiCVlh8iHPHFchSZdFzUl/w+MqPbnlZ4jlohbEuqBTV6rbaAnJXA0Tqylv4RKjho7fybGvhxjDbBrZS4kxUFLg==
+"@abp/malihu-custom-scrollbar-plugin@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.3.0-rc.2.tgz#28fc1f216c1d84b20acaf8c8c5cf5c3b33e1aeb1"
+ integrity sha512-LYMXKkPVyBLWV4Qnom2MW8JJ/rZmVg1CyOFxM6JiL+dpsN1Ogw0hRG33CCHQveqUmf2cr3vf96qk5Et5DyDDIg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/select2@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.3.0-rc.1.tgz#f3d60b42cb82abc6a0ce6a640b82eb53501f9893"
- integrity sha512-z+6Dhu6kqgCfTdZReI08N2ONKakQSmdDsNiZDB5/OOP26k2pOefe/j//sRfjTWiI5gCxO5y98ZZ0ccanBF8oTw==
+"@abp/select2@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.3.0-rc.2.tgz#42d62daff9e50b1fe211a1560794625ba3f52107"
+ integrity sha512-okiIXmFaqx0uy/UMcpMKWKjrwop1JINyzN4FS5tafUpWhx6KcYYHudLWJvnPbsdsOeBQx91kw8jjERRJIqfEOA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
select2 "^4.0.13"
-"@abp/sweetalert@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.3.0-rc.1.tgz#d54a8628f004c2d22ebcc4bd60f2b6c1cbd3bc8f"
- integrity sha512-OpgDbM9vOfCLpjCRFXavPAdoKlZnpxP+DkUH8owHTrtEuxmrSjpLlIa6VOzAKr70GiLtuMCz9QoH3AyMepx9vA==
+"@abp/sweetalert@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.3.0-rc.2.tgz#dfb20dfca8449ed3c3f6599d99b51746019eb664"
+ integrity sha512-NRKOgT80JVQrwI1FRqpbCzALvnLAFKdPwKKNDgm0L7r/5DL0+JbkKCI1AIPl/yiM8MBrCaQqNms+9JES5mjiUQ==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
sweetalert "^2.1.2"
-"@abp/timeago@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.3.0-rc.1.tgz#247f3b3a8e54f6732efa3600ba649a81fee6ec82"
- integrity sha512-cplxM3jYhhakET1DyERQoWJQxx0mhTKoI7gW93wNeEMyL4FWaF4lgUNEoubJUSBCDs4v/0ni0pKG8c8nldbiew==
+"@abp/timeago@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.3.0-rc.2.tgz#22943e219facd7fa0efddb63017198474b5cef89"
+ integrity sha512-TjKyuli+SpVjTgVJmraBpqJK112I+1DYHPJfso7QAH48Ra4gceGj9EVS0i/420YyLZyJSMtZOruxzYkyJeR/6w==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
timeago "^1.6.7"
-"@abp/toastr@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.3.0-rc.1.tgz#7bc5bb071839fbb971f56c41c8bf220b0a6d67e9"
- integrity sha512-OQgmdmWPKlpn/Lks6fUL4enEJgnvUeEcoGTuQOKfkh9ybadYd8kcELWw5ttsQ4o35yvDH3Lsh1jLwPDrCheTBg==
+"@abp/toastr@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.3.0-rc.2.tgz#143a344b00bbfaa858fe267fb6d627952bf7b3c0"
+ integrity sha512-cQV9UFWb9zarkb/CbrqkF9RXqn1Fc/TFKKM5mxpUEcYjx52NuM0d+KawdEMoN2y3y2U4ciY44kbTP2W1y+NlBg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
toastr "^2.1.4"
-"@abp/utils@^4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.0-rc.1.tgz#82ef26e01e0cb38417bf4fa9459fde85cbc2b424"
- integrity sha512-C/sk6jZQDENI7FbylBoPnTb1rC5eVPnsL8B++vAH4jS//OAj2iNvE6tCewK21GYI/JmfmQzzauQBzOiOJR9a6A==
+"@abp/utils@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.0-rc.2.tgz#6d051f98772e5642c2e3bc2f68e73d6f24f4694c"
+ integrity sha512-9qYo8OMTxIUG+qQBWXEpkURS6FUrx+J5s3SwC/eerp46hYr72GQ8L38Wq566a+xiLCn7Duxt6oJ/BxhTfQQxdw==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json
index ce7e5e91ee..2dff40a63e 100644
--- a/modules/cms-kit/angular/package.json
+++ b/modules/cms-kit/angular/package.json
@@ -15,11 +15,11 @@
},
"private": true,
"dependencies": {
- "@abp/ng.account": "~4.3.0-rc.1",
- "@abp/ng.identity": "~4.3.0-rc.1",
- "@abp/ng.setting-management": "~4.3.0-rc.1",
- "@abp/ng.tenant-management": "~4.3.0-rc.1",
- "@abp/ng.theme.basic": "~4.3.0-rc.1",
+ "@abp/ng.account": "~4.3.0-rc.2",
+ "@abp/ng.identity": "~4.3.0-rc.2",
+ "@abp/ng.setting-management": "~4.3.0-rc.2",
+ "@abp/ng.tenant-management": "~4.3.0-rc.2",
+ "@abp/ng.theme.basic": "~4.3.0-rc.2",
"@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 292510cb02..f6d7c9fa47 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.3.0-rc.1",
- "@abp/ng.theme.shared": ">=4.3.0-rc.1"
+ "@abp/ng.core": ">=4.3.0-rc.2",
+ "@abp/ng.theme.shared": ">=4.3.0-rc.2"
},
"dependencies": {
"tslib": "^2.0.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
index b9e8623fe2..00e47b60e7 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.3.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^4.3.0-rc.2"
}
}
\ 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 e068e01f38..429ce75f04 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.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.3.0-rc.1.tgz#5dc06d82ee213bc33527b5af72ac94ae06bb7c25"
- integrity sha512-Xkwj3NPnqWDgqvaP2eda3gviV7aBtyNOMCdZSvpxWmlaPlvJYN+SnKNnlmX02XVArTlOjaeTapFkE3auJeR6jA==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~4.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.3.0-rc.1.tgz#9d4447f068b490367a20772eb9c2b38480088edb"
- integrity sha512-untEVm6cKT375ZVEQFO01/VKIqtdFGIyJd5ZxtoQEV8ueVFRQefCOcvvqaJ8Gfj86T1nacXvJRfBfGihYHY+JQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~4.3.0-rc.1"
- "@abp/bootstrap" "~4.3.0-rc.1"
- "@abp/bootstrap-datepicker" "~4.3.0-rc.1"
- "@abp/datatables.net-bs4" "~4.3.0-rc.1"
- "@abp/font-awesome" "~4.3.0-rc.1"
- "@abp/jquery-form" "~4.3.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~4.3.0-rc.1"
- "@abp/lodash" "~4.3.0-rc.1"
- "@abp/luxon" "~4.3.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~4.3.0-rc.1"
- "@abp/select2" "~4.3.0-rc.1"
- "@abp/sweetalert" "~4.3.0-rc.1"
- "@abp/timeago" "~4.3.0-rc.1"
- "@abp/toastr" "~4.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.3.0-rc.1.tgz#1e54da2a668939941ab955f11db69798d04d9e7e"
- integrity sha512-969etEb4H/fR9Twz6pcl766M/1AriCh6+B8r4haPB5g7QkOWhyU99mT11BHxQwf+uNV4duGZwvPvrMomrdLj2w==
+"@abp/aspnetcore.mvc.ui.theme.basic@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.3.0-rc.2.tgz#4ebafbaade6610e3d405877a148d72d57569c3e3"
+ integrity sha512-Q3QqxKDFC04gaaj30Rk+9zGNfNxC8FX0jciARATceFV6pdA3F3PgT5EMDSlo6NoGniFVjHPRgay9N09zT6Htyw==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~4.3.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.3.0-rc.2.tgz#d3bf79929c55c5380d7ca7b913a23031d7a6bd12"
+ integrity sha512-pz86bIV4wNeG7/UPYzNCXlJ/MdOdIygc+Com7C9Ld7gzsyER7VD9h5U/hkytvL4FBFLJn4DU+xuZNECjv0HS0A==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~4.3.0-rc.2"
+ "@abp/bootstrap" "~4.3.0-rc.2"
+ "@abp/bootstrap-datepicker" "~4.3.0-rc.2"
+ "@abp/datatables.net-bs4" "~4.3.0-rc.2"
+ "@abp/font-awesome" "~4.3.0-rc.2"
+ "@abp/jquery-form" "~4.3.0-rc.2"
+ "@abp/jquery-validation-unobtrusive" "~4.3.0-rc.2"
+ "@abp/lodash" "~4.3.0-rc.2"
+ "@abp/luxon" "~4.3.0-rc.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~4.3.0-rc.2"
+ "@abp/select2" "~4.3.0-rc.2"
+ "@abp/sweetalert" "~4.3.0-rc.2"
+ "@abp/timeago" "~4.3.0-rc.2"
+ "@abp/toastr" "~4.3.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.3.0-rc.2.tgz#6ff41be179c8d1089778a51ffa54a1f3d7614278"
+ integrity sha512-2L5zvuqUwPwNPcMauiiJZD1ft0QycqINz+bXEQ8t0EwbB+dzcsukL/rpOQfpeRHWWYy4nIN4C2bTvXhNgQbPqQ==
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.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.3.0-rc.1.tgz#879a8ce32a3dbdb0cd80401360d24f25f318670b"
- integrity sha512-W2T+rrC3oxuWj2xQUz2virbBK6x7ershWZB9d6FjXTSH89nin9DyBK20dEfskVvhK/IMrmZaW4PWyTTcx9r7dA==
+"@abp/bootstrap-datepicker@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.3.0-rc.2.tgz#29a686c3d2bce356967f646d7334cd83c4257b4c"
+ integrity sha512-3+B7SJRi7DQJe0aNgv0H0zu1BfvMZcwgt06N3ALR9+o3TSJcOqcYrEMed3aG+ASH++CltnohTYnLkVXaxshioA==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.3.0-rc.1.tgz#3260de03f29e210e44a55efa3af2ab6d34362227"
- integrity sha512-flB18MUnRWpEnS0t/WEjsdhfB5w+zHjsa69Pj733+GHGSsZ1Vppu+rgvSWp38yNHO5uRwGECrwUIGwvd5uD9+A==
+"@abp/bootstrap@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.3.0-rc.2.tgz#1416fe639c88b7d958435e45fe19692268a7f932"
+ integrity sha512-E6svmDhNQlT5nd65VgshexyedRWhbvi9o1oYo/dLTUpJDzR7M9ptDqxFLVB9vVDva3HgxUoEvgRJgb9fXvq4zw==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
bootstrap "^4.6.0"
bootstrap-v4-rtl "4.6.0-1"
-"@abp/core@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.3.0-rc.1.tgz#201c3be8b5697fe8e1b08b23f87f50e950036a14"
- integrity sha512-ET8NGugNmdub+8qGeFf9qGPbloP5gcoBnB7U6ieFz1Eai9S3pSpbM+sdyifucEpzMThUiLS772EP4pJTMXhfEg==
+"@abp/core@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.3.0-rc.2.tgz#3c9ea339624ae3b6cbee13e048268d48269ea6a9"
+ integrity sha512-/89xH+IVSmTOLWeUO4yVB7Hg64uHTbR7bHjgl+b94cFdtITH9Nvr2EGdXUJbHGUK7L6lSDziqiMcG/ic0061+Q==
dependencies:
- "@abp/utils" "^4.3.0-rc.1"
+ "@abp/utils" "^4.3.0-rc.2"
-"@abp/datatables.net-bs4@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.3.0-rc.1.tgz#f7dad14d13b468949fd161b679f4a70271e0d466"
- integrity sha512-812cLTfSZZMvjAFAq5h7R5AeJHigBxbPc+kMReQIcFLH82o6BjA2NqFBqYOvQuh4kqiQ85dqFTW9MTKeY8or6Q==
+"@abp/datatables.net-bs4@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.3.0-rc.2.tgz#bbfc0d9d0ed86cdb14b38849fb78b2b1911c4a35"
+ integrity sha512-PRKYi2NU41KpckJ/d0buHoFbyKVuW5NCQNpUdYzDsPS2riyeXccCsLFJM1bT01TdR4Idla3vx9Fkb+HoJOiDeQ==
dependencies:
- "@abp/datatables.net" "~4.3.0-rc.1"
+ "@abp/datatables.net" "~4.3.0-rc.2"
datatables.net-bs4 "^1.10.21"
-"@abp/datatables.net@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.3.0-rc.1.tgz#aa1640903fe67d20e1fc57ffe0519b2764e4c7df"
- integrity sha512-qfdQa43sbXsIEBc3WpxSC7cXyKSFxLiFdCKnLIkQNsC3Wo+WX/Cute2xNbT0+xIQdGznfEBdPxcwQkNE6JQgcA==
+"@abp/datatables.net@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.3.0-rc.2.tgz#1923e60db261366a7d2f284b0274d13e253567ca"
+ integrity sha512-rp53+5Xj1jhjpCj7UBA9+nSNbaTQ4Vc1NWCg1e5aI5tWiyZprUS44dRszIQIDV86XKorfFhog5ihOZyzl1HDyg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
datatables.net "^1.10.21"
-"@abp/font-awesome@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.3.0-rc.1.tgz#5d336ead8b8c67b2c0aaff9365c2c856b033196e"
- integrity sha512-BU4ycN/gOxX2x8S/Eszi3bJAz6bZRhxa0uPWxEWKul9PNvKSwMJRoVaEVehnIlfTi2raHsLQHk+F7079gt3dlQ==
+"@abp/font-awesome@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.3.0-rc.2.tgz#437d3d6bbd8f52e5091251932d6a494d0164694b"
+ integrity sha512-FeHHtEQwrJBwD5PkFYqjKouCLwNjjRqTNseaN+s/r7gNjv0PgKytfRoqEb+O/BkZg/DwEuMz9jFX/RXCCNa2xA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
"@fortawesome/fontawesome-free" "^5.13.0"
-"@abp/jquery-form@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.3.0-rc.1.tgz#4543e3d751519ba12d2c563aa7cbc56e51dfe093"
- integrity sha512-ONQeImarHEe4VRSv13da+rHnCv+2Ycyd7YF+Dr77gtBmTKpC5nAFGY4wO7+u0U0px/YsR2dntpyBj2fEw3wjXA==
+"@abp/jquery-form@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.3.0-rc.2.tgz#999910deaf46330477b6ed487a771a2123d69f92"
+ integrity sha512-+fdEIOTlxDOdYXMtc/ujhYeuP2qiI4bmL3TQQWQxSTlW8q5jB6dHLBnHiXXltO8HxX9+7ZsjN3tsV7+Div5joA==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.3.0-rc.1.tgz#15a06257fba8ef8d2cba2ac9da3f6f7185e6c8dd"
- integrity sha512-8Tshu/QsqulwNfRnvoX1mViY12OTvCqpHdRldqr7k6MQd+boo6ahybQ4SCoZ9vsDTmqxd5dkV/A8VijMw66WTQ==
+"@abp/jquery-validation-unobtrusive@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.3.0-rc.2.tgz#0635e0c77da269e8367c3d7c388613249ce9221d"
+ integrity sha512-ubmPjVJatAW3AJWjWtT+ZbNLhu+HHNgcxYkFGVNusNuboTGsoBs5G45Cjzp/q5FnggWoPvkllpf8CGuaYUbpUQ==
dependencies:
- "@abp/jquery-validation" "~4.3.0-rc.1"
+ "@abp/jquery-validation" "~4.3.0-rc.2"
jquery-validation-unobtrusive "^3.2.11"
-"@abp/jquery-validation@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.3.0-rc.1.tgz#6a0d771c88e961cb43144cd6ef916d1ab22aceaf"
- integrity sha512-kjVF6757xP8wZ9qw8ysI5ve3AD8PoJtxqkkUV4QF4xcrdP8EPk2heX3Imu7MJiYGyMlwLU++FTm8J68UNsWRmQ==
+"@abp/jquery-validation@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.3.0-rc.2.tgz#ee145f8c4a633218ccfa50cca0bed503a0ca8dc6"
+ integrity sha512-SLWzN6jxVqKaHYs/d6Mku8CfhB1vWgfMbFma14upiJ+/VDkTF4Rh27iMCWKYVOS3bukh2ltBp6kPFplrjCAGSg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
jquery-validation "^1.19.2"
-"@abp/jquery@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.3.0-rc.1.tgz#06030baf44983175707409eff16a05db72c93bf5"
- integrity sha512-Xgptjea/RzgBvwK+paydXWMgenobuvqKsr9LbrIDiYAJuLMMCyGvwJnA7jeszz+OqZShP8ppoeB0ifa5K2Yc2A==
+"@abp/jquery@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.3.0-rc.2.tgz#f620628ea0739888cbcb360c058d09bff10d553b"
+ integrity sha512-+rfyLVJn7E8wJ1oQ9GiCR63Yk6wah1Hqnj4XpsRDMkIaOXKaqrnVHAZd4W2DUunQSe95wqHfkNH/wkvTyNEwUg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
jquery "~3.5.1"
-"@abp/lodash@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.3.0-rc.1.tgz#cd9bf0693379ea54f789299ba67483d345da5abf"
- integrity sha512-BtsQs6wpJJvdwPDx7sOIIzkVHJnzw4Twrv0q3XNqmsiv5eGIwluFsorm5N6qOk7nC5csor6mpk6YuJuFii8GbQ==
+"@abp/lodash@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.3.0-rc.2.tgz#9b5429d3976b34022aaf8cab4afef57479b66821"
+ integrity sha512-sE2dyofYbiIy4xhL85diZWkfqBcQl1q61T0DbYDOHgaejZAJxk4bVyFpEuMiC2HwWAZ656IN1bzyQIyE1RKzQA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
lodash "^4.17.15"
-"@abp/luxon@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.3.0-rc.1.tgz#dd855417224bbf124cdc9f395bb5cf5f0c6a7a03"
- integrity sha512-OtxmjCgPiH1JWsdUvQpkvum3k43H6v8Z5okv4lDpcBOah/HZYUP8qOsSS3Tcyw2I66TK15tq13XJeHabmh2lAQ==
+"@abp/luxon@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.3.0-rc.2.tgz#6fdbf1624462615dcb1f5ce85c07fc3bc4065e3f"
+ integrity sha512-C4aT0aN3/TVtTE3m0AZyhFSeeg+RxXpUO+nffAZoM/cH5NL8tir+O1hd+dhtCb7AELaqQNx5+qgXoJLYdWMYVg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
luxon "^1.24.1"
-"@abp/malihu-custom-scrollbar-plugin@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.3.0-rc.1.tgz#e07a9a1895ded98150c1ff4470638ab71e6a0561"
- integrity sha512-OiCVlh8iHPHFchSZdFzUl/w+MqPbnlZ4jlohbEuqBTV6rbaAnJXA0Tqylv4RKjho7fybGvhxjDbBrZS4kxUFLg==
+"@abp/malihu-custom-scrollbar-plugin@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.3.0-rc.2.tgz#28fc1f216c1d84b20acaf8c8c5cf5c3b33e1aeb1"
+ integrity sha512-LYMXKkPVyBLWV4Qnom2MW8JJ/rZmVg1CyOFxM6JiL+dpsN1Ogw0hRG33CCHQveqUmf2cr3vf96qk5Et5DyDDIg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/select2@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.3.0-rc.1.tgz#f3d60b42cb82abc6a0ce6a640b82eb53501f9893"
- integrity sha512-z+6Dhu6kqgCfTdZReI08N2ONKakQSmdDsNiZDB5/OOP26k2pOefe/j//sRfjTWiI5gCxO5y98ZZ0ccanBF8oTw==
+"@abp/select2@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.3.0-rc.2.tgz#42d62daff9e50b1fe211a1560794625ba3f52107"
+ integrity sha512-okiIXmFaqx0uy/UMcpMKWKjrwop1JINyzN4FS5tafUpWhx6KcYYHudLWJvnPbsdsOeBQx91kw8jjERRJIqfEOA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
select2 "^4.0.13"
-"@abp/sweetalert@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.3.0-rc.1.tgz#d54a8628f004c2d22ebcc4bd60f2b6c1cbd3bc8f"
- integrity sha512-OpgDbM9vOfCLpjCRFXavPAdoKlZnpxP+DkUH8owHTrtEuxmrSjpLlIa6VOzAKr70GiLtuMCz9QoH3AyMepx9vA==
+"@abp/sweetalert@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.3.0-rc.2.tgz#dfb20dfca8449ed3c3f6599d99b51746019eb664"
+ integrity sha512-NRKOgT80JVQrwI1FRqpbCzALvnLAFKdPwKKNDgm0L7r/5DL0+JbkKCI1AIPl/yiM8MBrCaQqNms+9JES5mjiUQ==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
sweetalert "^2.1.2"
-"@abp/timeago@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.3.0-rc.1.tgz#247f3b3a8e54f6732efa3600ba649a81fee6ec82"
- integrity sha512-cplxM3jYhhakET1DyERQoWJQxx0mhTKoI7gW93wNeEMyL4FWaF4lgUNEoubJUSBCDs4v/0ni0pKG8c8nldbiew==
+"@abp/timeago@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.3.0-rc.2.tgz#22943e219facd7fa0efddb63017198474b5cef89"
+ integrity sha512-TjKyuli+SpVjTgVJmraBpqJK112I+1DYHPJfso7QAH48Ra4gceGj9EVS0i/420YyLZyJSMtZOruxzYkyJeR/6w==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
timeago "^1.6.7"
-"@abp/toastr@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.3.0-rc.1.tgz#7bc5bb071839fbb971f56c41c8bf220b0a6d67e9"
- integrity sha512-OQgmdmWPKlpn/Lks6fUL4enEJgnvUeEcoGTuQOKfkh9ybadYd8kcELWw5ttsQ4o35yvDH3Lsh1jLwPDrCheTBg==
+"@abp/toastr@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.3.0-rc.2.tgz#143a344b00bbfaa858fe267fb6d627952bf7b3c0"
+ integrity sha512-cQV9UFWb9zarkb/CbrqkF9RXqn1Fc/TFKKM5mxpUEcYjx52NuM0d+KawdEMoN2y3y2U4ciY44kbTP2W1y+NlBg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
toastr "^2.1.4"
-"@abp/utils@^4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.0-rc.1.tgz#82ef26e01e0cb38417bf4fa9459fde85cbc2b424"
- integrity sha512-C/sk6jZQDENI7FbylBoPnTb1rC5eVPnsL8B++vAH4jS//OAj2iNvE6tCewK21GYI/JmfmQzzauQBzOiOJR9a6A==
+"@abp/utils@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.0-rc.2.tgz#6d051f98772e5642c2e3bc2f68e73d6f24f4694c"
+ integrity sha512-9qYo8OMTxIUG+qQBWXEpkURS6FUrx+J5s3SwC/eerp46hYr72GQ8L38Wq566a+xiLCn7Duxt6oJ/BxhTfQQxdw==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
index 321ad21fba..4bc77c8984 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.3.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^4.3.0-rc.2"
}
}
\ 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 1c1cf1f9ab..75cec285e5 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.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.3.0-rc.1.tgz#5dc06d82ee213bc33527b5af72ac94ae06bb7c25"
- integrity sha512-Xkwj3NPnqWDgqvaP2eda3gviV7aBtyNOMCdZSvpxWmlaPlvJYN+SnKNnlmX02XVArTlOjaeTapFkE3auJeR6jA==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~4.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.3.0-rc.1.tgz#9d4447f068b490367a20772eb9c2b38480088edb"
- integrity sha512-untEVm6cKT375ZVEQFO01/VKIqtdFGIyJd5ZxtoQEV8ueVFRQefCOcvvqaJ8Gfj86T1nacXvJRfBfGihYHY+JQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~4.3.0-rc.1"
- "@abp/bootstrap" "~4.3.0-rc.1"
- "@abp/bootstrap-datepicker" "~4.3.0-rc.1"
- "@abp/datatables.net-bs4" "~4.3.0-rc.1"
- "@abp/font-awesome" "~4.3.0-rc.1"
- "@abp/jquery-form" "~4.3.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~4.3.0-rc.1"
- "@abp/lodash" "~4.3.0-rc.1"
- "@abp/luxon" "~4.3.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~4.3.0-rc.1"
- "@abp/select2" "~4.3.0-rc.1"
- "@abp/sweetalert" "~4.3.0-rc.1"
- "@abp/timeago" "~4.3.0-rc.1"
- "@abp/toastr" "~4.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.3.0-rc.1.tgz#1e54da2a668939941ab955f11db69798d04d9e7e"
- integrity sha512-969etEb4H/fR9Twz6pcl766M/1AriCh6+B8r4haPB5g7QkOWhyU99mT11BHxQwf+uNV4duGZwvPvrMomrdLj2w==
+"@abp/aspnetcore.mvc.ui.theme.basic@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.3.0-rc.2.tgz#4ebafbaade6610e3d405877a148d72d57569c3e3"
+ integrity sha512-Q3QqxKDFC04gaaj30Rk+9zGNfNxC8FX0jciARATceFV6pdA3F3PgT5EMDSlo6NoGniFVjHPRgay9N09zT6Htyw==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~4.3.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.3.0-rc.2.tgz#d3bf79929c55c5380d7ca7b913a23031d7a6bd12"
+ integrity sha512-pz86bIV4wNeG7/UPYzNCXlJ/MdOdIygc+Com7C9Ld7gzsyER7VD9h5U/hkytvL4FBFLJn4DU+xuZNECjv0HS0A==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~4.3.0-rc.2"
+ "@abp/bootstrap" "~4.3.0-rc.2"
+ "@abp/bootstrap-datepicker" "~4.3.0-rc.2"
+ "@abp/datatables.net-bs4" "~4.3.0-rc.2"
+ "@abp/font-awesome" "~4.3.0-rc.2"
+ "@abp/jquery-form" "~4.3.0-rc.2"
+ "@abp/jquery-validation-unobtrusive" "~4.3.0-rc.2"
+ "@abp/lodash" "~4.3.0-rc.2"
+ "@abp/luxon" "~4.3.0-rc.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~4.3.0-rc.2"
+ "@abp/select2" "~4.3.0-rc.2"
+ "@abp/sweetalert" "~4.3.0-rc.2"
+ "@abp/timeago" "~4.3.0-rc.2"
+ "@abp/toastr" "~4.3.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.3.0-rc.2.tgz#6ff41be179c8d1089778a51ffa54a1f3d7614278"
+ integrity sha512-2L5zvuqUwPwNPcMauiiJZD1ft0QycqINz+bXEQ8t0EwbB+dzcsukL/rpOQfpeRHWWYy4nIN4C2bTvXhNgQbPqQ==
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.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.3.0-rc.1.tgz#879a8ce32a3dbdb0cd80401360d24f25f318670b"
- integrity sha512-W2T+rrC3oxuWj2xQUz2virbBK6x7ershWZB9d6FjXTSH89nin9DyBK20dEfskVvhK/IMrmZaW4PWyTTcx9r7dA==
+"@abp/bootstrap-datepicker@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.3.0-rc.2.tgz#29a686c3d2bce356967f646d7334cd83c4257b4c"
+ integrity sha512-3+B7SJRi7DQJe0aNgv0H0zu1BfvMZcwgt06N3ALR9+o3TSJcOqcYrEMed3aG+ASH++CltnohTYnLkVXaxshioA==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.3.0-rc.1.tgz#3260de03f29e210e44a55efa3af2ab6d34362227"
- integrity sha512-flB18MUnRWpEnS0t/WEjsdhfB5w+zHjsa69Pj733+GHGSsZ1Vppu+rgvSWp38yNHO5uRwGECrwUIGwvd5uD9+A==
+"@abp/bootstrap@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.3.0-rc.2.tgz#1416fe639c88b7d958435e45fe19692268a7f932"
+ integrity sha512-E6svmDhNQlT5nd65VgshexyedRWhbvi9o1oYo/dLTUpJDzR7M9ptDqxFLVB9vVDva3HgxUoEvgRJgb9fXvq4zw==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
bootstrap "^4.6.0"
bootstrap-v4-rtl "4.6.0-1"
-"@abp/core@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.3.0-rc.1.tgz#201c3be8b5697fe8e1b08b23f87f50e950036a14"
- integrity sha512-ET8NGugNmdub+8qGeFf9qGPbloP5gcoBnB7U6ieFz1Eai9S3pSpbM+sdyifucEpzMThUiLS772EP4pJTMXhfEg==
+"@abp/core@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.3.0-rc.2.tgz#3c9ea339624ae3b6cbee13e048268d48269ea6a9"
+ integrity sha512-/89xH+IVSmTOLWeUO4yVB7Hg64uHTbR7bHjgl+b94cFdtITH9Nvr2EGdXUJbHGUK7L6lSDziqiMcG/ic0061+Q==
dependencies:
- "@abp/utils" "^4.3.0-rc.1"
+ "@abp/utils" "^4.3.0-rc.2"
-"@abp/datatables.net-bs4@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.3.0-rc.1.tgz#f7dad14d13b468949fd161b679f4a70271e0d466"
- integrity sha512-812cLTfSZZMvjAFAq5h7R5AeJHigBxbPc+kMReQIcFLH82o6BjA2NqFBqYOvQuh4kqiQ85dqFTW9MTKeY8or6Q==
+"@abp/datatables.net-bs4@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.3.0-rc.2.tgz#bbfc0d9d0ed86cdb14b38849fb78b2b1911c4a35"
+ integrity sha512-PRKYi2NU41KpckJ/d0buHoFbyKVuW5NCQNpUdYzDsPS2riyeXccCsLFJM1bT01TdR4Idla3vx9Fkb+HoJOiDeQ==
dependencies:
- "@abp/datatables.net" "~4.3.0-rc.1"
+ "@abp/datatables.net" "~4.3.0-rc.2"
datatables.net-bs4 "^1.10.21"
-"@abp/datatables.net@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.3.0-rc.1.tgz#aa1640903fe67d20e1fc57ffe0519b2764e4c7df"
- integrity sha512-qfdQa43sbXsIEBc3WpxSC7cXyKSFxLiFdCKnLIkQNsC3Wo+WX/Cute2xNbT0+xIQdGznfEBdPxcwQkNE6JQgcA==
+"@abp/datatables.net@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.3.0-rc.2.tgz#1923e60db261366a7d2f284b0274d13e253567ca"
+ integrity sha512-rp53+5Xj1jhjpCj7UBA9+nSNbaTQ4Vc1NWCg1e5aI5tWiyZprUS44dRszIQIDV86XKorfFhog5ihOZyzl1HDyg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
datatables.net "^1.10.21"
-"@abp/font-awesome@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.3.0-rc.1.tgz#5d336ead8b8c67b2c0aaff9365c2c856b033196e"
- integrity sha512-BU4ycN/gOxX2x8S/Eszi3bJAz6bZRhxa0uPWxEWKul9PNvKSwMJRoVaEVehnIlfTi2raHsLQHk+F7079gt3dlQ==
+"@abp/font-awesome@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.3.0-rc.2.tgz#437d3d6bbd8f52e5091251932d6a494d0164694b"
+ integrity sha512-FeHHtEQwrJBwD5PkFYqjKouCLwNjjRqTNseaN+s/r7gNjv0PgKytfRoqEb+O/BkZg/DwEuMz9jFX/RXCCNa2xA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
"@fortawesome/fontawesome-free" "^5.13.0"
-"@abp/jquery-form@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.3.0-rc.1.tgz#4543e3d751519ba12d2c563aa7cbc56e51dfe093"
- integrity sha512-ONQeImarHEe4VRSv13da+rHnCv+2Ycyd7YF+Dr77gtBmTKpC5nAFGY4wO7+u0U0px/YsR2dntpyBj2fEw3wjXA==
+"@abp/jquery-form@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.3.0-rc.2.tgz#999910deaf46330477b6ed487a771a2123d69f92"
+ integrity sha512-+fdEIOTlxDOdYXMtc/ujhYeuP2qiI4bmL3TQQWQxSTlW8q5jB6dHLBnHiXXltO8HxX9+7ZsjN3tsV7+Div5joA==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.3.0-rc.1.tgz#15a06257fba8ef8d2cba2ac9da3f6f7185e6c8dd"
- integrity sha512-8Tshu/QsqulwNfRnvoX1mViY12OTvCqpHdRldqr7k6MQd+boo6ahybQ4SCoZ9vsDTmqxd5dkV/A8VijMw66WTQ==
+"@abp/jquery-validation-unobtrusive@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.3.0-rc.2.tgz#0635e0c77da269e8367c3d7c388613249ce9221d"
+ integrity sha512-ubmPjVJatAW3AJWjWtT+ZbNLhu+HHNgcxYkFGVNusNuboTGsoBs5G45Cjzp/q5FnggWoPvkllpf8CGuaYUbpUQ==
dependencies:
- "@abp/jquery-validation" "~4.3.0-rc.1"
+ "@abp/jquery-validation" "~4.3.0-rc.2"
jquery-validation-unobtrusive "^3.2.11"
-"@abp/jquery-validation@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.3.0-rc.1.tgz#6a0d771c88e961cb43144cd6ef916d1ab22aceaf"
- integrity sha512-kjVF6757xP8wZ9qw8ysI5ve3AD8PoJtxqkkUV4QF4xcrdP8EPk2heX3Imu7MJiYGyMlwLU++FTm8J68UNsWRmQ==
+"@abp/jquery-validation@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.3.0-rc.2.tgz#ee145f8c4a633218ccfa50cca0bed503a0ca8dc6"
+ integrity sha512-SLWzN6jxVqKaHYs/d6Mku8CfhB1vWgfMbFma14upiJ+/VDkTF4Rh27iMCWKYVOS3bukh2ltBp6kPFplrjCAGSg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
jquery-validation "^1.19.2"
-"@abp/jquery@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.3.0-rc.1.tgz#06030baf44983175707409eff16a05db72c93bf5"
- integrity sha512-Xgptjea/RzgBvwK+paydXWMgenobuvqKsr9LbrIDiYAJuLMMCyGvwJnA7jeszz+OqZShP8ppoeB0ifa5K2Yc2A==
+"@abp/jquery@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.3.0-rc.2.tgz#f620628ea0739888cbcb360c058d09bff10d553b"
+ integrity sha512-+rfyLVJn7E8wJ1oQ9GiCR63Yk6wah1Hqnj4XpsRDMkIaOXKaqrnVHAZd4W2DUunQSe95wqHfkNH/wkvTyNEwUg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
jquery "~3.5.1"
-"@abp/lodash@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.3.0-rc.1.tgz#cd9bf0693379ea54f789299ba67483d345da5abf"
- integrity sha512-BtsQs6wpJJvdwPDx7sOIIzkVHJnzw4Twrv0q3XNqmsiv5eGIwluFsorm5N6qOk7nC5csor6mpk6YuJuFii8GbQ==
+"@abp/lodash@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.3.0-rc.2.tgz#9b5429d3976b34022aaf8cab4afef57479b66821"
+ integrity sha512-sE2dyofYbiIy4xhL85diZWkfqBcQl1q61T0DbYDOHgaejZAJxk4bVyFpEuMiC2HwWAZ656IN1bzyQIyE1RKzQA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
lodash "^4.17.15"
-"@abp/luxon@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.3.0-rc.1.tgz#dd855417224bbf124cdc9f395bb5cf5f0c6a7a03"
- integrity sha512-OtxmjCgPiH1JWsdUvQpkvum3k43H6v8Z5okv4lDpcBOah/HZYUP8qOsSS3Tcyw2I66TK15tq13XJeHabmh2lAQ==
+"@abp/luxon@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.3.0-rc.2.tgz#6fdbf1624462615dcb1f5ce85c07fc3bc4065e3f"
+ integrity sha512-C4aT0aN3/TVtTE3m0AZyhFSeeg+RxXpUO+nffAZoM/cH5NL8tir+O1hd+dhtCb7AELaqQNx5+qgXoJLYdWMYVg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
luxon "^1.24.1"
-"@abp/malihu-custom-scrollbar-plugin@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.3.0-rc.1.tgz#e07a9a1895ded98150c1ff4470638ab71e6a0561"
- integrity sha512-OiCVlh8iHPHFchSZdFzUl/w+MqPbnlZ4jlohbEuqBTV6rbaAnJXA0Tqylv4RKjho7fybGvhxjDbBrZS4kxUFLg==
+"@abp/malihu-custom-scrollbar-plugin@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.3.0-rc.2.tgz#28fc1f216c1d84b20acaf8c8c5cf5c3b33e1aeb1"
+ integrity sha512-LYMXKkPVyBLWV4Qnom2MW8JJ/rZmVg1CyOFxM6JiL+dpsN1Ogw0hRG33CCHQveqUmf2cr3vf96qk5Et5DyDDIg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/select2@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.3.0-rc.1.tgz#f3d60b42cb82abc6a0ce6a640b82eb53501f9893"
- integrity sha512-z+6Dhu6kqgCfTdZReI08N2ONKakQSmdDsNiZDB5/OOP26k2pOefe/j//sRfjTWiI5gCxO5y98ZZ0ccanBF8oTw==
+"@abp/select2@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.3.0-rc.2.tgz#42d62daff9e50b1fe211a1560794625ba3f52107"
+ integrity sha512-okiIXmFaqx0uy/UMcpMKWKjrwop1JINyzN4FS5tafUpWhx6KcYYHudLWJvnPbsdsOeBQx91kw8jjERRJIqfEOA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
select2 "^4.0.13"
-"@abp/sweetalert@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.3.0-rc.1.tgz#d54a8628f004c2d22ebcc4bd60f2b6c1cbd3bc8f"
- integrity sha512-OpgDbM9vOfCLpjCRFXavPAdoKlZnpxP+DkUH8owHTrtEuxmrSjpLlIa6VOzAKr70GiLtuMCz9QoH3AyMepx9vA==
+"@abp/sweetalert@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.3.0-rc.2.tgz#dfb20dfca8449ed3c3f6599d99b51746019eb664"
+ integrity sha512-NRKOgT80JVQrwI1FRqpbCzALvnLAFKdPwKKNDgm0L7r/5DL0+JbkKCI1AIPl/yiM8MBrCaQqNms+9JES5mjiUQ==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
sweetalert "^2.1.2"
-"@abp/timeago@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.3.0-rc.1.tgz#247f3b3a8e54f6732efa3600ba649a81fee6ec82"
- integrity sha512-cplxM3jYhhakET1DyERQoWJQxx0mhTKoI7gW93wNeEMyL4FWaF4lgUNEoubJUSBCDs4v/0ni0pKG8c8nldbiew==
+"@abp/timeago@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.3.0-rc.2.tgz#22943e219facd7fa0efddb63017198474b5cef89"
+ integrity sha512-TjKyuli+SpVjTgVJmraBpqJK112I+1DYHPJfso7QAH48Ra4gceGj9EVS0i/420YyLZyJSMtZOruxzYkyJeR/6w==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
timeago "^1.6.7"
-"@abp/toastr@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.3.0-rc.1.tgz#7bc5bb071839fbb971f56c41c8bf220b0a6d67e9"
- integrity sha512-OQgmdmWPKlpn/Lks6fUL4enEJgnvUeEcoGTuQOKfkh9ybadYd8kcELWw5ttsQ4o35yvDH3Lsh1jLwPDrCheTBg==
+"@abp/toastr@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.3.0-rc.2.tgz#143a344b00bbfaa858fe267fb6d627952bf7b3c0"
+ integrity sha512-cQV9UFWb9zarkb/CbrqkF9RXqn1Fc/TFKKM5mxpUEcYjx52NuM0d+KawdEMoN2y3y2U4ciY44kbTP2W1y+NlBg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
toastr "^2.1.4"
-"@abp/utils@^4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.0-rc.1.tgz#82ef26e01e0cb38417bf4fa9459fde85cbc2b424"
- integrity sha512-C/sk6jZQDENI7FbylBoPnTb1rC5eVPnsL8B++vAH4jS//OAj2iNvE6tCewK21GYI/JmfmQzzauQBzOiOJR9a6A==
+"@abp/utils@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.0-rc.2.tgz#6d051f98772e5642c2e3bc2f68e73d6f24f4694c"
+ integrity sha512-9qYo8OMTxIUG+qQBWXEpkURS6FUrx+J5s3SwC/eerp46hYr72GQ8L38Wq566a+xiLCn7Duxt6oJ/BxhTfQQxdw==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
index 85474c6835..4499332946 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
@@ -3,11 +3,11 @@
"name": "my-app",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "^4.3.0-rc.1",
- "@abp/cms-kit": "4.3.0-rc.1",
- "@abp/tui-editor": "^4.3.0-rc.1",
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^4.3.0-rc.2",
+ "@abp/cms-kit": "4.3.0-rc.2",
+ "@abp/tui-editor": "^4.3.0-rc.2",
"tui-code-snippet": "1.5.2",
- "@abp/uppy": "^4.3.0-rc.1",
+ "@abp/uppy": "^4.3.0-rc.2",
"slugify": "1.4.6"
}
}
\ 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 2ea6a4e794..6fa480a3ca 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.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.3.0-rc.1.tgz#5dc06d82ee213bc33527b5af72ac94ae06bb7c25"
- integrity sha512-Xkwj3NPnqWDgqvaP2eda3gviV7aBtyNOMCdZSvpxWmlaPlvJYN+SnKNnlmX02XVArTlOjaeTapFkE3auJeR6jA==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~4.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.3.0-rc.1.tgz#9d4447f068b490367a20772eb9c2b38480088edb"
- integrity sha512-untEVm6cKT375ZVEQFO01/VKIqtdFGIyJd5ZxtoQEV8ueVFRQefCOcvvqaJ8Gfj86T1nacXvJRfBfGihYHY+JQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~4.3.0-rc.1"
- "@abp/bootstrap" "~4.3.0-rc.1"
- "@abp/bootstrap-datepicker" "~4.3.0-rc.1"
- "@abp/datatables.net-bs4" "~4.3.0-rc.1"
- "@abp/font-awesome" "~4.3.0-rc.1"
- "@abp/jquery-form" "~4.3.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~4.3.0-rc.1"
- "@abp/lodash" "~4.3.0-rc.1"
- "@abp/luxon" "~4.3.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~4.3.0-rc.1"
- "@abp/select2" "~4.3.0-rc.1"
- "@abp/sweetalert" "~4.3.0-rc.1"
- "@abp/timeago" "~4.3.0-rc.1"
- "@abp/toastr" "~4.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.3.0-rc.1.tgz#1e54da2a668939941ab955f11db69798d04d9e7e"
- integrity sha512-969etEb4H/fR9Twz6pcl766M/1AriCh6+B8r4haPB5g7QkOWhyU99mT11BHxQwf+uNV4duGZwvPvrMomrdLj2w==
+"@abp/aspnetcore.mvc.ui.theme.basic@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.3.0-rc.2.tgz#4ebafbaade6610e3d405877a148d72d57569c3e3"
+ integrity sha512-Q3QqxKDFC04gaaj30Rk+9zGNfNxC8FX0jciARATceFV6pdA3F3PgT5EMDSlo6NoGniFVjHPRgay9N09zT6Htyw==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~4.3.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.3.0-rc.2.tgz#d3bf79929c55c5380d7ca7b913a23031d7a6bd12"
+ integrity sha512-pz86bIV4wNeG7/UPYzNCXlJ/MdOdIygc+Com7C9Ld7gzsyER7VD9h5U/hkytvL4FBFLJn4DU+xuZNECjv0HS0A==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~4.3.0-rc.2"
+ "@abp/bootstrap" "~4.3.0-rc.2"
+ "@abp/bootstrap-datepicker" "~4.3.0-rc.2"
+ "@abp/datatables.net-bs4" "~4.3.0-rc.2"
+ "@abp/font-awesome" "~4.3.0-rc.2"
+ "@abp/jquery-form" "~4.3.0-rc.2"
+ "@abp/jquery-validation-unobtrusive" "~4.3.0-rc.2"
+ "@abp/lodash" "~4.3.0-rc.2"
+ "@abp/luxon" "~4.3.0-rc.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~4.3.0-rc.2"
+ "@abp/select2" "~4.3.0-rc.2"
+ "@abp/sweetalert" "~4.3.0-rc.2"
+ "@abp/timeago" "~4.3.0-rc.2"
+ "@abp/toastr" "~4.3.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.3.0-rc.2.tgz#6ff41be179c8d1089778a51ffa54a1f3d7614278"
+ integrity sha512-2L5zvuqUwPwNPcMauiiJZD1ft0QycqINz+bXEQ8t0EwbB+dzcsukL/rpOQfpeRHWWYy4nIN4C2bTvXhNgQbPqQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@@ -43,228 +43,228 @@
micromatch "^4.0.2"
path "^0.12.7"
-"@abp/bootstrap-datepicker@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.3.0-rc.1.tgz#879a8ce32a3dbdb0cd80401360d24f25f318670b"
- integrity sha512-W2T+rrC3oxuWj2xQUz2virbBK6x7ershWZB9d6FjXTSH89nin9DyBK20dEfskVvhK/IMrmZaW4PWyTTcx9r7dA==
+"@abp/bootstrap-datepicker@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.3.0-rc.2.tgz#29a686c3d2bce356967f646d7334cd83c4257b4c"
+ integrity sha512-3+B7SJRi7DQJe0aNgv0H0zu1BfvMZcwgt06N3ALR9+o3TSJcOqcYrEMed3aG+ASH++CltnohTYnLkVXaxshioA==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.3.0-rc.1.tgz#3260de03f29e210e44a55efa3af2ab6d34362227"
- integrity sha512-flB18MUnRWpEnS0t/WEjsdhfB5w+zHjsa69Pj733+GHGSsZ1Vppu+rgvSWp38yNHO5uRwGECrwUIGwvd5uD9+A==
+"@abp/bootstrap@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.3.0-rc.2.tgz#1416fe639c88b7d958435e45fe19692268a7f932"
+ integrity sha512-E6svmDhNQlT5nd65VgshexyedRWhbvi9o1oYo/dLTUpJDzR7M9ptDqxFLVB9vVDva3HgxUoEvgRJgb9fXvq4zw==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
bootstrap "^4.6.0"
bootstrap-v4-rtl "4.6.0-1"
-"@abp/cms-kit.admin@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-4.3.0-rc.1.tgz#6381dbf35d51e7ce677a4cc292cbb9b875f9a222"
- integrity sha512-DQ3Ll9CtJMaPJOuLvAlqQSRjZo5xD92rVjBR3O8kMZgZWK6gJsv+34cAL2yQ8/tXYZch769RUcqd3ZenPTL7sg==
+"@abp/cms-kit.admin@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-4.3.0-rc.2.tgz#353310b5d6f2b812567ef396e61817b7cfee294e"
+ integrity sha512-NP8Z/GWk2loYEXCMj3k7YrjXy2Ijao4Sd96Rg5O1XKh/J8IrwoYeixJYCibsedOv7ewy+kf5xiISEokfTdaCfw==
dependencies:
- "@abp/slugify" "~4.3.0-rc.1"
- "@abp/tui-editor" "~4.3.0-rc.1"
- "@abp/uppy" "~4.3.0-rc.1"
+ "@abp/slugify" "~4.3.0-rc.2"
+ "@abp/tui-editor" "~4.3.0-rc.2"
+ "@abp/uppy" "~4.3.0-rc.2"
-"@abp/cms-kit.public@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-4.3.0-rc.1.tgz#90476afe653c63f94d52d5ff831695cafd2b13ca"
- integrity sha512-6q13aGrStH7Ia9ESE2nd4DOZDClnZW2OIXtBX6g33iYtqCsnXEA+ljfOTgyuIICrWhkEGsVIMiFNtbzxsWx64g==
+"@abp/cms-kit.public@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-4.3.0-rc.2.tgz#41ce3c619ab525031aca11f8c42d55a31e3ccf95"
+ integrity sha512-3Z+6DFHkurX1ewfMKc/i6iHT24fjV/Dh+u3I4LKJcM3BDEtN8tj3xYpP9kQTcFqKMCEGtjHQpYYDxpJDuYcrJw==
dependencies:
- "@abp/highlight.js" "~4.3.0-rc.1"
- "@abp/star-rating-svg" "~4.3.0-rc.1"
+ "@abp/highlight.js" "~4.3.0-rc.2"
+ "@abp/star-rating-svg" "~4.3.0-rc.2"
-"@abp/cms-kit@4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-4.3.0-rc.1.tgz#c6d9fd61009d49992abd889a9fd721daf5cf37c1"
- integrity sha512-3rAHFNshyEjc/7l3WasuJzbz5kE/TMlUpPBYh71AjcJ2FNz1pOp4V/hIFadG/t8YywQ04coMFiMGNkHZt0a5fw==
+"@abp/cms-kit@4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-4.3.0-rc.2.tgz#f81345bddafbaff68f0b464b13858fb6dfc2dcae"
+ integrity sha512-k8jux/6EcWP3MYBkJqeexZ/gAqAXZ1+upNDZ5X81+khSRT/v5s6ZigO+UgZX0uHZtB/clH45iJyCxEPdyRUYaw==
dependencies:
- "@abp/cms-kit.admin" "~4.3.0-rc.1"
- "@abp/cms-kit.public" "~4.3.0-rc.1"
+ "@abp/cms-kit.admin" "~4.3.0-rc.2"
+ "@abp/cms-kit.public" "~4.3.0-rc.2"
-"@abp/codemirror@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-4.3.0-rc.1.tgz#f31d54113142c6d6a9dc70de111486ba54fb01e9"
- integrity sha512-XXCD8FqP7y29GwNoIjLr73FVy9WIxUzpVt2uyVVyzSTndKec2FzxoCBM/O3wEj33GUK7Z99bNIxReAcDOlf9Pw==
+"@abp/codemirror@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-4.3.0-rc.2.tgz#672d43fe99b74ed5b4e85a0ba79ba70e261a8e31"
+ integrity sha512-ZGGg8wkxRF9ZypEfmXFHTAg+dNn7uklfsBH4PJBB7CRpI5m3qth5ZQeIoUFbdoJHFWXl/UevmM9yzI1P05jZFA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
codemirror "^5.54.0"
-"@abp/core@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.3.0-rc.1.tgz#201c3be8b5697fe8e1b08b23f87f50e950036a14"
- integrity sha512-ET8NGugNmdub+8qGeFf9qGPbloP5gcoBnB7U6ieFz1Eai9S3pSpbM+sdyifucEpzMThUiLS772EP4pJTMXhfEg==
+"@abp/core@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.3.0-rc.2.tgz#3c9ea339624ae3b6cbee13e048268d48269ea6a9"
+ integrity sha512-/89xH+IVSmTOLWeUO4yVB7Hg64uHTbR7bHjgl+b94cFdtITH9Nvr2EGdXUJbHGUK7L6lSDziqiMcG/ic0061+Q==
dependencies:
- "@abp/utils" "^4.3.0-rc.1"
+ "@abp/utils" "^4.3.0-rc.2"
-"@abp/datatables.net-bs4@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.3.0-rc.1.tgz#f7dad14d13b468949fd161b679f4a70271e0d466"
- integrity sha512-812cLTfSZZMvjAFAq5h7R5AeJHigBxbPc+kMReQIcFLH82o6BjA2NqFBqYOvQuh4kqiQ85dqFTW9MTKeY8or6Q==
+"@abp/datatables.net-bs4@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.3.0-rc.2.tgz#bbfc0d9d0ed86cdb14b38849fb78b2b1911c4a35"
+ integrity sha512-PRKYi2NU41KpckJ/d0buHoFbyKVuW5NCQNpUdYzDsPS2riyeXccCsLFJM1bT01TdR4Idla3vx9Fkb+HoJOiDeQ==
dependencies:
- "@abp/datatables.net" "~4.3.0-rc.1"
+ "@abp/datatables.net" "~4.3.0-rc.2"
datatables.net-bs4 "^1.10.21"
-"@abp/datatables.net@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.3.0-rc.1.tgz#aa1640903fe67d20e1fc57ffe0519b2764e4c7df"
- integrity sha512-qfdQa43sbXsIEBc3WpxSC7cXyKSFxLiFdCKnLIkQNsC3Wo+WX/Cute2xNbT0+xIQdGznfEBdPxcwQkNE6JQgcA==
+"@abp/datatables.net@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.3.0-rc.2.tgz#1923e60db261366a7d2f284b0274d13e253567ca"
+ integrity sha512-rp53+5Xj1jhjpCj7UBA9+nSNbaTQ4Vc1NWCg1e5aI5tWiyZprUS44dRszIQIDV86XKorfFhog5ihOZyzl1HDyg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
datatables.net "^1.10.21"
-"@abp/font-awesome@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.3.0-rc.1.tgz#5d336ead8b8c67b2c0aaff9365c2c856b033196e"
- integrity sha512-BU4ycN/gOxX2x8S/Eszi3bJAz6bZRhxa0uPWxEWKul9PNvKSwMJRoVaEVehnIlfTi2raHsLQHk+F7079gt3dlQ==
+"@abp/font-awesome@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.3.0-rc.2.tgz#437d3d6bbd8f52e5091251932d6a494d0164694b"
+ integrity sha512-FeHHtEQwrJBwD5PkFYqjKouCLwNjjRqTNseaN+s/r7gNjv0PgKytfRoqEb+O/BkZg/DwEuMz9jFX/RXCCNa2xA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
"@fortawesome/fontawesome-free" "^5.13.0"
-"@abp/highlight.js@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-4.3.0-rc.1.tgz#10438fb6728fe7ff63f2f7271e0db1627320041c"
- integrity sha512-MYcQyaokZrzlKX4FbwWISodfwQFOrbtzLF2x28qjWlSFNO13xka8Wn0EmZMjY84oFqYybNzoEMNAsDDgF+STBA==
+"@abp/highlight.js@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-4.3.0-rc.2.tgz#a7c51e826b2a7e25c84af7ecbb38c5abe1d35dfb"
+ integrity sha512-oIGSsyAxdYm3ow/LbUwyYqtRvIOLQbsLQgP2+8FatnUdgFTKJRqG1RJXyPINDb3ldJlyQMFlgGlxlUV8cyqNzw==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
-"@abp/jquery-form@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.3.0-rc.1.tgz#4543e3d751519ba12d2c563aa7cbc56e51dfe093"
- integrity sha512-ONQeImarHEe4VRSv13da+rHnCv+2Ycyd7YF+Dr77gtBmTKpC5nAFGY4wO7+u0U0px/YsR2dntpyBj2fEw3wjXA==
+"@abp/jquery-form@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.3.0-rc.2.tgz#999910deaf46330477b6ed487a771a2123d69f92"
+ integrity sha512-+fdEIOTlxDOdYXMtc/ujhYeuP2qiI4bmL3TQQWQxSTlW8q5jB6dHLBnHiXXltO8HxX9+7ZsjN3tsV7+Div5joA==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.3.0-rc.1.tgz#15a06257fba8ef8d2cba2ac9da3f6f7185e6c8dd"
- integrity sha512-8Tshu/QsqulwNfRnvoX1mViY12OTvCqpHdRldqr7k6MQd+boo6ahybQ4SCoZ9vsDTmqxd5dkV/A8VijMw66WTQ==
+"@abp/jquery-validation-unobtrusive@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.3.0-rc.2.tgz#0635e0c77da269e8367c3d7c388613249ce9221d"
+ integrity sha512-ubmPjVJatAW3AJWjWtT+ZbNLhu+HHNgcxYkFGVNusNuboTGsoBs5G45Cjzp/q5FnggWoPvkllpf8CGuaYUbpUQ==
dependencies:
- "@abp/jquery-validation" "~4.3.0-rc.1"
+ "@abp/jquery-validation" "~4.3.0-rc.2"
jquery-validation-unobtrusive "^3.2.11"
-"@abp/jquery-validation@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.3.0-rc.1.tgz#6a0d771c88e961cb43144cd6ef916d1ab22aceaf"
- integrity sha512-kjVF6757xP8wZ9qw8ysI5ve3AD8PoJtxqkkUV4QF4xcrdP8EPk2heX3Imu7MJiYGyMlwLU++FTm8J68UNsWRmQ==
+"@abp/jquery-validation@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.3.0-rc.2.tgz#ee145f8c4a633218ccfa50cca0bed503a0ca8dc6"
+ integrity sha512-SLWzN6jxVqKaHYs/d6Mku8CfhB1vWgfMbFma14upiJ+/VDkTF4Rh27iMCWKYVOS3bukh2ltBp6kPFplrjCAGSg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
jquery-validation "^1.19.2"
-"@abp/jquery@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.3.0-rc.1.tgz#06030baf44983175707409eff16a05db72c93bf5"
- integrity sha512-Xgptjea/RzgBvwK+paydXWMgenobuvqKsr9LbrIDiYAJuLMMCyGvwJnA7jeszz+OqZShP8ppoeB0ifa5K2Yc2A==
+"@abp/jquery@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.3.0-rc.2.tgz#f620628ea0739888cbcb360c058d09bff10d553b"
+ integrity sha512-+rfyLVJn7E8wJ1oQ9GiCR63Yk6wah1Hqnj4XpsRDMkIaOXKaqrnVHAZd4W2DUunQSe95wqHfkNH/wkvTyNEwUg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
jquery "~3.5.1"
-"@abp/lodash@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.3.0-rc.1.tgz#cd9bf0693379ea54f789299ba67483d345da5abf"
- integrity sha512-BtsQs6wpJJvdwPDx7sOIIzkVHJnzw4Twrv0q3XNqmsiv5eGIwluFsorm5N6qOk7nC5csor6mpk6YuJuFii8GbQ==
+"@abp/lodash@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.3.0-rc.2.tgz#9b5429d3976b34022aaf8cab4afef57479b66821"
+ integrity sha512-sE2dyofYbiIy4xhL85diZWkfqBcQl1q61T0DbYDOHgaejZAJxk4bVyFpEuMiC2HwWAZ656IN1bzyQIyE1RKzQA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
lodash "^4.17.15"
-"@abp/luxon@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.3.0-rc.1.tgz#dd855417224bbf124cdc9f395bb5cf5f0c6a7a03"
- integrity sha512-OtxmjCgPiH1JWsdUvQpkvum3k43H6v8Z5okv4lDpcBOah/HZYUP8qOsSS3Tcyw2I66TK15tq13XJeHabmh2lAQ==
+"@abp/luxon@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.3.0-rc.2.tgz#6fdbf1624462615dcb1f5ce85c07fc3bc4065e3f"
+ integrity sha512-C4aT0aN3/TVtTE3m0AZyhFSeeg+RxXpUO+nffAZoM/cH5NL8tir+O1hd+dhtCb7AELaqQNx5+qgXoJLYdWMYVg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
luxon "^1.24.1"
-"@abp/malihu-custom-scrollbar-plugin@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.3.0-rc.1.tgz#e07a9a1895ded98150c1ff4470638ab71e6a0561"
- integrity sha512-OiCVlh8iHPHFchSZdFzUl/w+MqPbnlZ4jlohbEuqBTV6rbaAnJXA0Tqylv4RKjho7fybGvhxjDbBrZS4kxUFLg==
+"@abp/malihu-custom-scrollbar-plugin@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.3.0-rc.2.tgz#28fc1f216c1d84b20acaf8c8c5cf5c3b33e1aeb1"
+ integrity sha512-LYMXKkPVyBLWV4Qnom2MW8JJ/rZmVg1CyOFxM6JiL+dpsN1Ogw0hRG33CCHQveqUmf2cr3vf96qk5Et5DyDDIg==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/markdown-it@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-4.3.0-rc.1.tgz#d545c789c493836d052f77441fcb23b847cd12d9"
- integrity sha512-uJA0V6eyOJdjadHg4X3GOQ0ifXSU38lJVblS8yYB/8yt9GezvwS9JukX+SguuR18YlFwwjTv1cU9CCYdY8htnA==
+"@abp/markdown-it@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-4.3.0-rc.2.tgz#4f1d039812e7efc8032b8542cd9d48dad136bf0d"
+ integrity sha512-fTMj0FFjMZcBevFWWrfnyxV5XZZYrD5Guq+cICMBYtKVqfbsy/ILpnznApXMuLxNukqIvGa8I3SdWaWO6CVhgQ==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
markdown-it "^11.0.0"
-"@abp/select2@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.3.0-rc.1.tgz#f3d60b42cb82abc6a0ce6a640b82eb53501f9893"
- integrity sha512-z+6Dhu6kqgCfTdZReI08N2ONKakQSmdDsNiZDB5/OOP26k2pOefe/j//sRfjTWiI5gCxO5y98ZZ0ccanBF8oTw==
+"@abp/select2@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.3.0-rc.2.tgz#42d62daff9e50b1fe211a1560794625ba3f52107"
+ integrity sha512-okiIXmFaqx0uy/UMcpMKWKjrwop1JINyzN4FS5tafUpWhx6KcYYHudLWJvnPbsdsOeBQx91kw8jjERRJIqfEOA==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
select2 "^4.0.13"
-"@abp/slugify@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-4.3.0-rc.1.tgz#9ce4b82445f5ef76f99d8d9533d99c38b1ea3d8b"
- integrity sha512-duWFcJLZAvCoqNaT5ZBAIX+BVTmFlTWe8YJkg11Z9kMGImb0Z8HkiTcqMSx0VNwQEGAhqpOc8v9vEw8S9xCBwQ==
+"@abp/slugify@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-4.3.0-rc.2.tgz#2e35f973d878f13ca1ff71f090d1bdd88b89fd38"
+ integrity sha512-9okL+PEZhAeF3Vs/vLMnXn1O6qp6U7RQW1HI7j41i+7fHAJ4UZozym6sbYsFAEWT/ph4dcdzPRsxTxpBFiJYVQ==
dependencies:
slugify "^1.4.7"
-"@abp/star-rating-svg@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-4.3.0-rc.1.tgz#b09e65ba0b05a41460f71b517a1b74a3e2949821"
- integrity sha512-UmuavGqYn4pJe0LX8vaXNxwOhCXpVkU0PuuBx285JHcZ+hpBDCAoSjvE9Ve+c08vLhGErTTApGJ1QMEjNvM7rw==
+"@abp/star-rating-svg@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-4.3.0-rc.2.tgz#aeabae6df07d621574b6a4057032e3a2a0cb1e13"
+ integrity sha512-xDcwIVjP8wkGNuJQn8H9PetHD/YgZ33jrOpPhw+EZAYCMW++e9LkKFSeEfiNT8MW5qyjC2hOISE6n2bz+hHU5w==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
star-rating-svg "^3.5.0"
-"@abp/sweetalert@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.3.0-rc.1.tgz#d54a8628f004c2d22ebcc4bd60f2b6c1cbd3bc8f"
- integrity sha512-OpgDbM9vOfCLpjCRFXavPAdoKlZnpxP+DkUH8owHTrtEuxmrSjpLlIa6VOzAKr70GiLtuMCz9QoH3AyMepx9vA==
+"@abp/sweetalert@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.3.0-rc.2.tgz#dfb20dfca8449ed3c3f6599d99b51746019eb664"
+ integrity sha512-NRKOgT80JVQrwI1FRqpbCzALvnLAFKdPwKKNDgm0L7r/5DL0+JbkKCI1AIPl/yiM8MBrCaQqNms+9JES5mjiUQ==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
sweetalert "^2.1.2"
-"@abp/timeago@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.3.0-rc.1.tgz#247f3b3a8e54f6732efa3600ba649a81fee6ec82"
- integrity sha512-cplxM3jYhhakET1DyERQoWJQxx0mhTKoI7gW93wNeEMyL4FWaF4lgUNEoubJUSBCDs4v/0ni0pKG8c8nldbiew==
+"@abp/timeago@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.3.0-rc.2.tgz#22943e219facd7fa0efddb63017198474b5cef89"
+ integrity sha512-TjKyuli+SpVjTgVJmraBpqJK112I+1DYHPJfso7QAH48Ra4gceGj9EVS0i/420YyLZyJSMtZOruxzYkyJeR/6w==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
timeago "^1.6.7"
-"@abp/toastr@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.3.0-rc.1.tgz#7bc5bb071839fbb971f56c41c8bf220b0a6d67e9"
- integrity sha512-OQgmdmWPKlpn/Lks6fUL4enEJgnvUeEcoGTuQOKfkh9ybadYd8kcELWw5ttsQ4o35yvDH3Lsh1jLwPDrCheTBg==
+"@abp/toastr@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.3.0-rc.2.tgz#143a344b00bbfaa858fe267fb6d627952bf7b3c0"
+ integrity sha512-cQV9UFWb9zarkb/CbrqkF9RXqn1Fc/TFKKM5mxpUEcYjx52NuM0d+KawdEMoN2y3y2U4ciY44kbTP2W1y+NlBg==
dependencies:
- "@abp/jquery" "~4.3.0-rc.1"
+ "@abp/jquery" "~4.3.0-rc.2"
toastr "^2.1.4"
-"@abp/tui-editor@^4.3.0-rc.1", "@abp/tui-editor@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-4.3.0-rc.1.tgz#f72b82f2b9afb97562db29897261b02f0eb4ab34"
- integrity sha512-MEAv6Y6rDxhhB2/CKvhhW4iCHWEYSlZpiKDnAu9eD7xyyLyWDkn/x9oC+srVoTalfZOwMQ7B6kYSUuXMvX+2Uw==
+"@abp/tui-editor@^4.3.0-rc.2", "@abp/tui-editor@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-4.3.0-rc.2.tgz#4d4de602faa2f1093752aa148df3fa3f5523d918"
+ integrity sha512-NuuQTiqYue+gJosVNzVTdx1HvuyfjoTzk1ih1uo8hkUWxcDuaK7LK/p4ZId8q10ZPeek5rhi2W9LgEj3EHkMBw==
dependencies:
- "@abp/codemirror" "~4.3.0-rc.1"
- "@abp/highlight.js" "~4.3.0-rc.1"
- "@abp/jquery" "~4.3.0-rc.1"
- "@abp/markdown-it" "~4.3.0-rc.1"
+ "@abp/codemirror" "~4.3.0-rc.2"
+ "@abp/highlight.js" "~4.3.0-rc.2"
+ "@abp/jquery" "~4.3.0-rc.2"
+ "@abp/markdown-it" "~4.3.0-rc.2"
tui-code-snippet "1.5.2"
tui-editor "^1.4.10"
-"@abp/uppy@^4.3.0-rc.1", "@abp/uppy@~4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-4.3.0-rc.1.tgz#85cb56d7b82434a61d6a271b2f11678301e68ee3"
- integrity sha512-/6FLrIzHjPGo0xO9U76nt/iDVNjL/OnA8wOCcIEDMcZtEQtbT9YXj7kyKFCf8MNBq4D2so3yKpLAMOch2a5Jsg==
+"@abp/uppy@^4.3.0-rc.2", "@abp/uppy@~4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-4.3.0-rc.2.tgz#abb39dacf2f5c88dbec124e449ebcfaf66a1aead"
+ integrity sha512-C+bZ7GnSUFGIEZVeLfh5ruPkh6PvlsYLsTJaykzcMSDS5FQugVWRAw4OaCnELtDePmHUa+m3ppQw+e1TzuSAUQ==
dependencies:
- "@abp/core" "~4.3.0-rc.1"
+ "@abp/core" "~4.3.0-rc.2"
uppy "^1.16.1"
-"@abp/utils@^4.3.0-rc.1":
- version "4.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.0-rc.1.tgz#82ef26e01e0cb38417bf4fa9459fde85cbc2b424"
- integrity sha512-C/sk6jZQDENI7FbylBoPnTb1rC5eVPnsL8B++vAH4jS//OAj2iNvE6tCewK21GYI/JmfmQzzauQBzOiOJR9a6A==
+"@abp/utils@^4.3.0-rc.2":
+ version "4.3.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.0-rc.2.tgz#6d051f98772e5642c2e3bc2f68e73d6f24f4694c"
+ integrity sha512-9qYo8OMTxIUG+qQBWXEpkURS6FUrx+J5s3SwC/eerp46hYr72GQ8L38Wq566a+xiLCn7Duxt6oJ/BxhTfQQxdw==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/CreateMediaInputWithStream.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/CreateMediaInputWithStream.cs
new file mode 100644
index 0000000000..a8a13b2ed2
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/CreateMediaInputWithStream.cs
@@ -0,0 +1,16 @@
+using System.ComponentModel.DataAnnotations;
+using Volo.Abp.Content;
+using Volo.Abp.Validation;
+using Volo.CmsKit.MediaDescriptors;
+
+namespace Volo.CmsKit.Admin.MediaDescriptors
+{
+ public class CreateMediaInputWithStream
+ {
+ [Required]
+ [DynamicStringLength(typeof(MediaDescriptorConsts), nameof(MediaDescriptorConsts.MaxNameLength))]
+ public string Name { get; set; }
+
+ public IRemoteStreamContent File { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/IMediaDescriptorAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/IMediaDescriptorAdminAppService.cs
index eb4819dd06..83cd14e90c 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/IMediaDescriptorAdminAppService.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/IMediaDescriptorAdminAppService.cs
@@ -6,7 +6,7 @@ namespace Volo.CmsKit.Admin.MediaDescriptors
{
public interface IMediaDescriptorAdminAppService : IApplicationService
{
- Task CreateAsync(CreateMediaInputStream inputStream);
+ Task CreateAsync(string entityType, CreateMediaInputWithStream inputStream);
Task DeleteAsync(Guid id);
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs
index b359d55244..fa799cb65b 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs
@@ -1,11 +1,9 @@
using System;
using System.Threading.Tasks;
-using Microsoft.AspNetCore.Authorization;
using Volo.Abp.BlobStoring;
using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.MediaDescriptors;
-using Volo.CmsKit.Permissions;
namespace Volo.CmsKit.Admin.MediaDescriptors
{
@@ -29,16 +27,16 @@ namespace Volo.CmsKit.Admin.MediaDescriptors
MediaDescriptorDefinitionStore = mediaDescriptorDefinitionStore;
}
- public virtual async Task CreateAsync(CreateMediaInputStream inputStream)
+ public virtual async Task CreateAsync(string entityType, CreateMediaInputWithStream inputStream)
{
- var definition = await MediaDescriptorDefinitionStore.GetAsync(inputStream.EntityType);
+ var definition = await MediaDescriptorDefinitionStore.GetAsync(entityType);
/* TODO: Shouldn't CreatePolicies be a dictionary and we check for inputStream.EntityType? */
await CheckAnyOfPoliciesAsync(definition.CreatePolicies);
- using (var stream = inputStream.GetStream())
+ using (var stream = inputStream.File.GetStream())
{
- var newEntity = await MediaDescriptorManager.CreateAsync(inputStream.EntityType, inputStream.Name, inputStream.ContentType, inputStream.ContentLength ?? 0);
+ var newEntity = await MediaDescriptorManager.CreateAsync(entityType, inputStream.Name, inputStream.File.ContentType, inputStream.File.ContentLength ?? 0);
await MediaContainer.SaveAsync(newEntity.Id.ToString(), stream);
await MediaDescriptorRepository.InsertAsync(newEntity);
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/CmsKitAdminHttpApiModule.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/CmsKitAdminHttpApiModule.cs
index 5d84242bcd..bb573d55e6 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/CmsKitAdminHttpApiModule.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/CmsKitAdminHttpApiModule.cs
@@ -1,5 +1,7 @@
using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Modularity;
+using Volo.CmsKit.Admin.MediaDescriptors;
namespace Volo.CmsKit.Admin
{
@@ -16,5 +18,13 @@ namespace Volo.CmsKit.Admin
mvcBuilder.AddApplicationPartIfNotExists(typeof(CmsKitAdminHttpApiModule).Assembly);
});
}
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.ConventionalControllers.FormBodyBindingIgnoredTypes.Add(typeof(CreateMediaInputWithStream));
+ });
+ }
}
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs
index da84dc8a3d..07c1315eed 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs
@@ -25,10 +25,10 @@ namespace Volo.CmsKit.Admin.MediaDescriptors
}
[HttpPost]
- [NonAction]
- public virtual Task CreateAsync(CreateMediaInputStream inputStream)
+ [Route("{entityType}")]
+ public virtual Task CreateAsync(string entityType, CreateMediaInputWithStream inputStream)
{
- return MediaDescriptorAdminAppService.CreateAsync(inputStream);
+ return MediaDescriptorAdminAppService.CreateAsync(entityType, inputStream);
}
[HttpDelete]
@@ -37,26 +37,5 @@ namespace Volo.CmsKit.Admin.MediaDescriptors
{
return MediaDescriptorAdminAppService.DeleteAsync(id);
}
-
- [HttpPost]
- [Route("{entityType}")]
- public virtual async Task UploadAsync(string entityType, IFormFile file)
- {
- if (file == null)
- {
- return BadRequest();
- }
-
- var inputStream = new CreateMediaInputStream(file.OpenReadStream())
- {
- EntityType = entityType,
- ContentType = file.ContentType,
- Name = file.FileName
- };
-
- var mediaDescriptorDto = await MediaDescriptorAdminAppService.CreateAsync(inputStream);
-
- return StatusCode((int)HttpStatusCode.Created, mediaDescriptorDto);
- }
}
}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs
index ed162cc360..c7f7dbf524 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs
@@ -92,7 +92,7 @@ namespace Volo.CmsKit.Admin.Web
toolbar =>
{
toolbar.AddButton(
- LocalizableString.Create("New"),
+ LocalizableString.Create("NewTag"),
icon: "plus",
name: "NewButton",
requiredPolicyName: CmsKitAdminPermissions.Tags.Create
@@ -104,7 +104,7 @@ namespace Volo.CmsKit.Admin.Web
toolbar =>
{
toolbar.AddButton(
- LocalizableString.Create("New"),
+ LocalizableString.Create("NewPage"),
icon: "plus",
name: "CreatePage",
requiredPolicyName: CmsKitAdminPermissions.Pages.Create
@@ -115,7 +115,7 @@ namespace Volo.CmsKit.Admin.Web
toolbar =>
{
toolbar.AddButton(
- LocalizableString.Create("New"),
+ LocalizableString.Create("NewBlog"),
icon: "plus",
name: "CreateBlog",
id: "CreateBlog",
@@ -127,7 +127,7 @@ namespace Volo.CmsKit.Admin.Web
toolbar =>
{
toolbar.AddButton(
- LocalizableString.Create("New"),
+ LocalizableString.Create("NewBlogPost"),
icon: "plus",
name: "CreateBlogPost",
id: "CreateBlogPost",
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml
index 6bce551aee..e730d549d3 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml
@@ -33,6 +33,7 @@
@section styles {
+
}
@@ -61,7 +62,7 @@
-