diff --git a/.github/workflows/auto-pr.yml b/.github/workflows/auto-pr.yml index d4cd30c876..533fbb878e 100644 --- a/.github/workflows/auto-pr.yml +++ b/.github/workflows/auto-pr.yml @@ -1,10 +1,10 @@ -name: Merge branch dev with rel-4.4 +name: Merge branch dev with rel-5.0 on: push: branches: - - rel-4.4 + - rel-5.0 jobs: - merge-dev-with-rel-4-4: + merge-dev-with-rel-5-0: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -12,13 +12,13 @@ jobs: ref: dev - name: Reset promotion branch run: | - git fetch origin rel-4.4:rel-4.4 - git reset --hard rel-4.4 + git fetch origin rel-5.0:rel-5.0 + git reset --hard rel-5.0 - name: Create Pull Request uses: peter-evans/create-pull-request@v3 with: - branch: auto-merge/rel-4-4/${{github.run_number}} - title: Merge branch dev with rel-4.4 - body: This PR generated automatically to merge dev with rel-4.4. Please review the changed files before merging to prevent any errors that may occur. + branch: auto-merge/rel-5-0/${{github.run_number}} + title: Merge branch dev with rel-5.0 + body: This PR generated automatically to merge dev with rel-5.0. Please review the changed files before merging to prevent any errors that may occur. reviewers: ${{github.actor}} token: ${{ github.token }} diff --git a/Directory.Build.props b/Directory.Build.props index e14b4c3bc4..261be160a9 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -5,7 +5,7 @@ 6.0.0-rc.* - 16.9.1 + 16.11.0 4.2.2 @@ -23,7 +23,7 @@ 2.4.3 - 3.1.1 + 3.1.3 \ 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 e23ed3fe5b..9410a7813f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -310,6 +310,45 @@ "DeleteInvoice" : "Delete Invoice", "SuccessfullyDeleted": "Successfully deleted!", "PaymentStateSetTo" : "Payment state set to {0}", - "ChangeState": "Change State" + "ChangeState": "Change State", + "Permission:TrialLicense" : "Trial License", + "Menu:TrialLicenses": "Trial Licenses", + "TrialLicenses": "Trial Licenses", + "UserNameFilter": "Username", + "TrialLicenseStatusFilter": "Status", + "TrialLicenseStartDateFilter": "Start date", + "TrialLicenseEndDateFilter": "End date", + "FirsName": "First name", + "LastName": "Last name", + "Status": "Status", + "StartDate": "Start date", + "EndDate": "End date", + "CompanyName": "Company name", + "PurchasedDate": "Purchased date", + "OrganizationDetail": "Organization Detail", + "SendActivationMail": "Send Activation Mail", + "ActivationMailSentSuccessfully": "Activation mail sent successfully!", + "TrialLicenseStatus": "Trial license status", + "TrialLicenseDetail": "Trial License Detail", + "AcceptsMarketingCommunications": "Marketing Communications", + "PurposeOfUsage": "Purpose of usage", + "CountryName": "Country name", + "CompanySize": "Company size", + "DetailTrialLicense": "Details", + "Requested": "Requested", + "Activated": "Activated", + "PurchasedToNormalLicense": "Purchased", + "Expired": "Expired", + "TrialLicenseDeletionWarningMessage": "Are you sure you want to delete the trial license? Trial license, organization, support accounts will be deleted!", + "LicenseCategoryFilter": "License category", + "Volo.AbpIo.Commercial:030000": "You already used your trial period.", + "Volo.AbpIo.Commercial:030001": "This organization name already exists.", + "Volo.AbpIo.Commercial:030002": "Once activated, trial license cannot be set to requested!", + "Volo.AbpIo.Commercial:030003": "There is no such status!", + "Volo.AbpIo.Commercial:030004": "Status could not be changed due to an unexpected error!", + "Volo.AbpIo.Commercial:030005": "Start date and end date cannot be given when the trial license is in the requested state!", + "Volo.AbpIo.Commercial:030006": "End date must always be greater than start date!", + "Volo.AbpIo.Commercial:030007": "This trial license has already been activated once!", + "Volo.AbpIo.Commercial:030008": "Purchase date can be set only when status is Purchased!", } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index 7be579f1fb..2da4a62481 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -1,4 +1,4 @@ -{ +{ "culture": "en", "texts": { "Permission:CommunityArticle": "Community Article", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json index 7b93754482..4c78f15d99 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ro-RO", "texts": { "Permission:CommunityArticle": "Articol comunitar", diff --git a/common.props b/common.props index ea1df61a0f..753259efb2 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ latest - 5.0.0 + 5.0.0-beta.1 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ diff --git a/configureawait.props b/configureawait.props index 8b0b7f5933..b0cf9ef298 100644 --- a/configureawait.props +++ b/configureawait.props @@ -1,7 +1,7 @@ - + All runtime; build; native; contentfiles; analyzers diff --git a/docs/cs/Entity-Framework-Core-PostgreSQL.md b/docs/cs/Entity-Framework-Core-PostgreSQL.md index e09880c37c..dc50c8a742 100644 --- a/docs/cs/Entity-Framework-Core-PostgreSQL.md +++ b/docs/cs/Entity-Framework-Core-PostgreSQL.md @@ -1,4 +1,4 @@ -# Přepnutí na EF Core PostgreSQL providera +# Přepnutí na EF Core PostgreSQL providera Tento dokument vysvětluje, jak přepnout na poskytovatele databáze **PostgreSQL** pro **[spouštěcí šablonu aplikace](Startup-Templates/Application.md)**, která je dodávána s předem nakonfigurovaným SQL poskytovatelem. diff --git a/docs/cs/Getting-Started-AspNetCore-Application.md b/docs/cs/Getting-Started-AspNetCore-Application.md index 877976d037..e269a08ba2 100644 --- a/docs/cs/Getting-Started-AspNetCore-Application.md +++ b/docs/cs/Getting-Started-AspNetCore-Application.md @@ -1,4 +1,4 @@ -# Začínáme s ASP.NET Core MVC aplikací +# Začínáme s ASP.NET Core MVC aplikací Tento tutoriál vysvětluje jak začít s ABP z ničeho s minimem závislostí. Obvykle chcete začít se **[startovací šablonou](https://abp.io/Templates)**. diff --git a/docs/cs/Getting-Started-Console-Application.md b/docs/cs/Getting-Started-Console-Application.md index dc822ec297..a6ee50dbe6 100644 --- a/docs/cs/Getting-Started-Console-Application.md +++ b/docs/cs/Getting-Started-Console-Application.md @@ -1,4 +1,4 @@ -# Začínáme s konzolovou aplikací +# Začínáme s konzolovou aplikací Tento tutoriál vysvětluje jak začít s ABP z ničeho s minimem závislostí. Obvykle chcete začít se **[startovací šablonou](https://abp.io/Templates)**. diff --git a/docs/cs/Index.md b/docs/cs/Index.md index 0424c7120b..875f4e066e 100644 --- a/docs/cs/Index.md +++ b/docs/cs/Index.md @@ -1,4 +1,4 @@ -# ABP dokumentace +# ABP dokumentace ABP je **open source aplikační framework** se zaměřením na vývoj webových aplikací založených na ASP.NET Core, zároveň ho však lze využít i k vývoji jiných typů aplikací. diff --git a/docs/en/API/Application-Configuration.md b/docs/en/API/Application-Configuration.md index 3aea468f8c..8441459e02 100644 --- a/docs/en/API/Application-Configuration.md +++ b/docs/en/API/Application-Configuration.md @@ -1,4 +1,4 @@ -# Application Configuration Endpoint +# Application Configuration Endpoint ABP Framework provides a pre-built and standard endpoint that contains some useful information about the application/service. Here, the list of some fundamental information at this endpoint: diff --git a/docs/en/API/Swagger-Integration.md b/docs/en/API/Swagger-Integration.md index 48ce252940..2e7b331cfc 100644 --- a/docs/en/API/Swagger-Integration.md +++ b/docs/en/API/Swagger-Integration.md @@ -1,4 +1,4 @@ -# Swagger Integration +# Swagger Integration [Swagger (OpenAPI)](https://swagger.io/) is a language-agnostic specification for describing REST APIs. It allows both computers and humans to understand the capabilities of a REST API without direct access to the source code. Its main goals are to: diff --git a/docs/en/Audit-Logging.md b/docs/en/Audit-Logging.md index 67aee58dac..2076764345 100644 --- a/docs/en/Audit-Logging.md +++ b/docs/en/Audit-Logging.md @@ -1,4 +1,4 @@ -# Audit Logging +# Audit Logging [Wikipedia](https://en.wikipedia.org/wiki/Audit_trail): "*An audit trail (also called **audit log**) is a security-relevant chronological record, set of records, and/or destination and source of records that provide documentary evidence of the sequence of activities that have affected at any time a specific operation, procedure, or event*". diff --git a/docs/en/Best-Practices/Application-Services.md b/docs/en/Best-Practices/Application-Services.md index ff8afe81d2..309b264522 100644 --- a/docs/en/Best-Practices/Application-Services.md +++ b/docs/en/Best-Practices/Application-Services.md @@ -1,4 +1,4 @@ -## Application Services Best Practices & Conventions +## Application Services Best Practices & Conventions * **Do** create an application service for each **aggregate root**. diff --git a/docs/en/Best-Practices/Data-Transfer-Objects.md b/docs/en/Best-Practices/Data-Transfer-Objects.md index 0fca0e86f2..5d6409af7d 100644 --- a/docs/en/Best-Practices/Data-Transfer-Objects.md +++ b/docs/en/Best-Practices/Data-Transfer-Objects.md @@ -1,4 +1,4 @@ -## Data Transfer Objects Best Practices & Conventions +## Data Transfer Objects Best Practices & Conventions * **Do** define DTOs in the **application contracts** package. * **Do** inherit from the pre-built **base DTO classes** where possible and necessary (like `EntityDto`, `CreationAuditedEntityDto`, `AuditedEntityDto`, `FullAuditedEntityDto` and so on). diff --git a/docs/en/Best-Practices/Domain-Services.md b/docs/en/Best-Practices/Domain-Services.md index f8b7c31797..e651086673 100644 --- a/docs/en/Best-Practices/Domain-Services.md +++ b/docs/en/Best-Practices/Domain-Services.md @@ -1,4 +1,4 @@ -## Domain Services Best Practices & Conventions +## Domain Services Best Practices & Conventions > **This document is not ready yet. Please see the [Domain Services](../Domain-Services.md) document.** diff --git a/docs/en/Best-Practices/Entity-Framework-Core-Integration.md b/docs/en/Best-Practices/Entity-Framework-Core-Integration.md index 90d62698de..bae484af27 100644 --- a/docs/en/Best-Practices/Entity-Framework-Core-Integration.md +++ b/docs/en/Best-Practices/Entity-Framework-Core-Integration.md @@ -1,4 +1,4 @@ -## Entity Framework Core Integration Best Practices +## Entity Framework Core Integration Best Practices > See [Entity Framework Core Integration document](../Entity-Framework-Core.md) for the basics of the EF Core integration. diff --git a/docs/en/Best-Practices/Index.md b/docs/en/Best-Practices/Index.md index 5c21b5b9ec..3cc10a17cc 100644 --- a/docs/en/Best-Practices/Index.md +++ b/docs/en/Best-Practices/Index.md @@ -1,4 +1,4 @@ -## Module Development Best Practices & Conventions +## Module Development Best Practices & Conventions ### Introduction diff --git a/docs/en/Best-Practices/Module-Architecture.md b/docs/en/Best-Practices/Module-Architecture.md index d9f833726f..b7e0d03db9 100644 --- a/docs/en/Best-Practices/Module-Architecture.md +++ b/docs/en/Best-Practices/Module-Architecture.md @@ -1,4 +1,4 @@ -## Module Architecture Best Practices & Conventions +## Module Architecture Best Practices & Conventions ### Solution Structure diff --git a/docs/en/Best-Practices/MongoDB-Integration.md b/docs/en/Best-Practices/MongoDB-Integration.md index 216468b71e..594244443e 100644 --- a/docs/en/Best-Practices/MongoDB-Integration.md +++ b/docs/en/Best-Practices/MongoDB-Integration.md @@ -1,4 +1,4 @@ -## MongoDB Integration +## MongoDB Integration * Do define a separated `MongoDbContext` interface and class for each module. diff --git a/docs/en/CLI.md b/docs/en/CLI.md index 0638543e44..4b575ac6f6 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -1,4 +1,4 @@ -# ABP CLI +# ABP CLI ABP CLI (Command Line Interface) is a command line tool to perform some common operations for ABP based solutions. diff --git a/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/1.png b/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/1.png new file mode 100644 index 0000000000..adb430b2ce Binary files /dev/null and b/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/1.png differ diff --git a/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/2.png b/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/2.png new file mode 100644 index 0000000000..8d617c0367 Binary files /dev/null and b/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/2.png differ diff --git a/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/POST.md b/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/POST.md new file mode 100644 index 0000000000..cb1b21d7fd --- /dev/null +++ b/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/POST.md @@ -0,0 +1,88 @@ +# How to override localization strings of depending modules + +## Source Code + +You can find the source of the example solution used in this article [here](https://github.com/abpframework/abp-samples/tree/master/DocumentationSamples/ExtendLocalizationResource). + +## Getting Started + +This example is based on the following document +https://docs.abp.io/en/abp/latest/Localization#extending-existing-resource + +We will change the default `DisplayName:Abp.Timing.Timezone` and `Description:Abp.Timing.Timezone` of [`AbpTimingResource`](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/AbpTimingResource.cs) and add localized text in [Russian language(`ru`)](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/en.json). + +I created the `AbpTiming` folder in the `Localization` directory of the `ExtendLocalizationResource.Domain.Shared` project. + +Create `en.json` and `ru.json` in its directory. + +`en.json` +```json +{ + "culture": "en", + "texts": { + "DisplayName:Abp.Timing.Timezone": "My Time zone", + "Description:Abp.Timing.Timezone": "My Application time zone" + } +} +``` + +`ru.json` +```json +{ + "culture": "ru", + "texts": { + "DisplayName:Abp.Timing.Timezone": "Часовой пояс", + "Description:Abp.Timing.Timezone": "Часовой пояс приложения" + } +} +``` + +![](1.png) + +We have below content in `ExtendLocalizationResource.Domain.Shared.csproj` file, See [Virtual-File-System](https://docs.abp.io/en/abp/latest/Virtual-File-System#working-with-the-embedded-files) understand how it works. + +```xml + + + + + + + + +``` + +Change the code of the `ConfigureServices` method in `ExtendLocalizationResourceDomainSharedModule`. + +```cs +Configure(options => +{ + options.Resources + .Add("en") + .AddBaseTypes(typeof(AbpValidationResource)) + .AddVirtualJson("/Localization/ExtendLocalizationResource"); + + //add following code + options.Resources + .Get() + .AddVirtualJson("/Localization/AbpTiming"); + + options.DefaultResourceType = typeof(ExtendLocalizationResourceResource); +}); +``` + +Execute `ExtendLocalizationResource.DbMigrator` to migrate the database and run `ExtendLocalizationResource.Web`. + +We have changed the English localization text and added Russian localization. + +### Index page + +```cs +

@AbpTimingResource["DisplayName:Abp.Timing.Timezone"]

+@using(CultureHelper.Use("ru")) +{ +

@AbpTimingResource["DisplayName:Abp.Timing.Timezone"]

+} +``` + +![](2.png) \ No newline at end of file diff --git a/docs/en/Configuration.md b/docs/en/Configuration.md index 6e638f7814..30d881c06e 100644 --- a/docs/en/Configuration.md +++ b/docs/en/Configuration.md @@ -1,3 +1,3 @@ -# Configuration +# Configuration ASP.NET Core has an flexible and extensible key-value based configuration system. In fact, the configuration system is a part of Microsoft.Extensions libraries and it is independent from ASP.NET Core. That means it can be used in any type of application. See [Microsoft's documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/) to learn the configuration infrastructure. ABP framework is 100% compatible with the configuration system. \ No newline at end of file diff --git a/docs/en/Dependency-Injection.md b/docs/en/Dependency-Injection.md index f4398488e5..f347dc1dd7 100644 --- a/docs/en/Dependency-Injection.md +++ b/docs/en/Dependency-Injection.md @@ -1,4 +1,4 @@ -# Dependency Injection +# Dependency Injection ABP's Dependency Injection system is developed based on Microsoft's [dependency injection extension](https://medium.com/volosoft/asp-net-core-dependency-injection-best-practices-tips-tricks-c6e9c67f9d96) library (Microsoft.Extensions.DependencyInjection nuget package). So, it's documentation is valid in ABP too. diff --git a/docs/en/Domain-Services.md b/docs/en/Domain-Services.md index 5a4f6393e1..6ad9b78cf0 100644 --- a/docs/en/Domain-Services.md +++ b/docs/en/Domain-Services.md @@ -1,4 +1,4 @@ -# Domain Services +# Domain Services ## Introduction diff --git a/docs/en/Emailing.md b/docs/en/Emailing.md index 50e7afc213..bfb3058862 100644 --- a/docs/en/Emailing.md +++ b/docs/en/Emailing.md @@ -1,4 +1,4 @@ -# Email Sending +# Email Sending ABP Framework provides various services, settings and integrations for sending emails; diff --git a/docs/en/Entity-Framework-Core-Migrations.md b/docs/en/Entity-Framework-Core-Migrations.md index 5d8ca01854..716038d412 100644 --- a/docs/en/Entity-Framework-Core-Migrations.md +++ b/docs/en/Entity-Framework-Core-Migrations.md @@ -1,4 +1,4 @@ -# EF Core Database Migrations +# EF Core Database Migrations This document begins by **introducing the default structure** provided by [the application startup template](Startup-Templates/Application.md) and **discusses various scenarios** you may want to implement for your own application. diff --git a/docs/en/Entity-Framework-Core-MySQL.md b/docs/en/Entity-Framework-Core-MySQL.md index 92a9cfb36e..91e3ce986d 100644 --- a/docs/en/Entity-Framework-Core-MySQL.md +++ b/docs/en/Entity-Framework-Core-MySQL.md @@ -1,4 +1,4 @@ -# Switch to EF Core MySQL Provider +# Switch to EF Core MySQL Provider This document explains how to switch to the **MySQL** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured. diff --git a/docs/en/Entity-Framework-Core-Oracle-Devart.md b/docs/en/Entity-Framework-Core-Oracle-Devart.md index 95e05db427..ecd4f65e0c 100644 --- a/docs/en/Entity-Framework-Core-Oracle-Devart.md +++ b/docs/en/Entity-Framework-Core-Oracle-Devart.md @@ -1,4 +1,4 @@ -# Switch to EF Core Oracle Devart Provider +# Switch to EF Core Oracle Devart Provider This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured. diff --git a/docs/en/Entity-Framework-Core-Oracle-Official.md b/docs/en/Entity-Framework-Core-Oracle-Official.md index d983dc5e41..b273515ac1 100644 --- a/docs/en/Entity-Framework-Core-Oracle-Official.md +++ b/docs/en/Entity-Framework-Core-Oracle-Official.md @@ -1,4 +1,4 @@ -# Switch to EF Core Oracle Provider +# Switch to EF Core Oracle Provider This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured. diff --git a/docs/en/Entity-Framework-Core-Oracle.md b/docs/en/Entity-Framework-Core-Oracle.md index 8c265149ba..1e340302dc 100644 --- a/docs/en/Entity-Framework-Core-Oracle.md +++ b/docs/en/Entity-Framework-Core-Oracle.md @@ -1,4 +1,4 @@ -# Switch to EF Core Oracle Provider +# Switch to EF Core Oracle Provider This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured. diff --git a/docs/en/Entity-Framework-Core-Other-DBMS.md b/docs/en/Entity-Framework-Core-Other-DBMS.md index 8c9078583d..9739dbdd02 100644 --- a/docs/en/Entity-Framework-Core-Other-DBMS.md +++ b/docs/en/Entity-Framework-Core-Other-DBMS.md @@ -1,4 +1,4 @@ -# Switch to Another DBMS for Entity Framework Core +# Switch to Another DBMS for Entity Framework Core **[The application startup template](Startup-Templates/Application.md)** comes with **SQL Server provider pre-configured** for the Entity Framework Core. However, EF Core supports [many other DBMSs](https://docs.microsoft.com/en-us/ef/core/providers/) and you can use any of them within your ABP based applications. diff --git a/docs/en/Entity-Framework-Core-PostgreSQL.md b/docs/en/Entity-Framework-Core-PostgreSQL.md index f6a0c26806..4ddd3dd22a 100644 --- a/docs/en/Entity-Framework-Core-PostgreSQL.md +++ b/docs/en/Entity-Framework-Core-PostgreSQL.md @@ -1,4 +1,4 @@ -# Switch to EF Core PostgreSQL Provider +# Switch to EF Core PostgreSQL Provider This document explains how to switch to the **PostgreSQL** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured. diff --git a/docs/en/Entity-Framework-Core-SQLite.md b/docs/en/Entity-Framework-Core-SQLite.md index 81d4b72de2..cbacf3baa5 100644 --- a/docs/en/Entity-Framework-Core-SQLite.md +++ b/docs/en/Entity-Framework-Core-SQLite.md @@ -1,4 +1,4 @@ -# Switch to EF Core SQLite Provider +# Switch to EF Core SQLite Provider This document explains how to switch to the **SQLite** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured. diff --git a/docs/en/Getting-Started-AspNetCore-Application.md b/docs/en/Getting-Started-AspNetCore-Application.md index 9202ed29f1..5eca211810 100644 --- a/docs/en/Getting-Started-AspNetCore-Application.md +++ b/docs/en/Getting-Started-AspNetCore-Application.md @@ -1,4 +1,4 @@ -# Getting Started ABP With AspNet Core MVC Web Application +# Getting Started ABP With AspNet Core MVC Web Application This tutorial explains how to start ABP from scratch with minimal dependencies. You generally want to start with the **[startup template](Getting-Started-AspNetCore-MVC-Template.md)**. diff --git a/docs/en/Getting-Started-React-Native.md b/docs/en/Getting-Started-React-Native.md index 08faac3608..9199d370dc 100644 --- a/docs/en/Getting-Started-React-Native.md +++ b/docs/en/Getting-Started-React-Native.md @@ -1,4 +1,4 @@ -# Getting Started with the React Native +# Getting Started with the React Native ````json //[doc-params] diff --git a/docs/en/Getting-Started-With-Startup-Templates.md b/docs/en/Getting-Started-With-Startup-Templates.md index be2bb201b8..9beb84bcef 100644 --- a/docs/en/Getting-Started-With-Startup-Templates.md +++ b/docs/en/Getting-Started-With-Startup-Templates.md @@ -1,4 +1,4 @@ -# Getting Started with the Startup Templates +# Getting Started with the Startup Templates See the following tutorials to learn how to get started with the ABP Framework using the pre-built application startup templates: diff --git a/docs/en/Index.md b/docs/en/Index.md index 8483d61612..84e1155b9c 100644 --- a/docs/en/Index.md +++ b/docs/en/Index.md @@ -1,4 +1,4 @@ -# ABP Documentation +# ABP Documentation ABP Framework is a complete **infrastructure** based on the **ASP.NET Core** to create **modern web applications** and **APIs** by following the software development **best practices** and the **latest technologies**. diff --git a/docs/en/Integration-Tests.md b/docs/en/Integration-Tests.md index 35d66171a6..9ad4741822 100644 --- a/docs/en/Integration-Tests.md +++ b/docs/en/Integration-Tests.md @@ -1 +1 @@ -This document has been [moved to here](Testing.md). \ No newline at end of file +This document has been [moved to here](Testing.md). \ No newline at end of file diff --git a/docs/en/Json-Serialization.md b/docs/en/Json-Serialization.md index f0082ea9d6..7d6072c041 100644 --- a/docs/en/Json-Serialization.md +++ b/docs/en/Json-Serialization.md @@ -1,3 +1,3 @@ -# JSON +# JSON TODO \ No newline at end of file diff --git a/docs/en/MailKit.md b/docs/en/MailKit.md index de4b653f4d..b05a28f9ba 100644 --- a/docs/en/MailKit.md +++ b/docs/en/MailKit.md @@ -1,4 +1,4 @@ -# MailKit Integration +# MailKit Integration [MailKit](http://www.mimekit.net/) is a cross-platform, popular open source mail client library for .net. ABP Framework provides an integration package to use the MailKit as the [email sender](Emailing.md). diff --git a/docs/en/Migration-Guides/Abp-5_0-Angular.md b/docs/en/Migration-Guides/Abp-5_0-Angular.md new file mode 100644 index 0000000000..1188e68556 --- /dev/null +++ b/docs/en/Migration-Guides/Abp-5_0-Angular.md @@ -0,0 +1,101 @@ +# Angular UI v4.x to v5.0 Migration Guide + +## Breaking Changes + +### Overall + +See the overall list of breaking changes: + +- Bootstrap 5 implementation [#10067](https://github.com/abpframework/abp/issues/10067) +- Remove NGXS dependency & states [#9952](https://github.com/abpframework/abp/issues/9952) +- Install @angular/localize package to startup templates [#10099](https://github.com/abpframework/abp/issues/10099) +- Create new secondary entrypoints and move the related proxies to there [#10060](https://github.com/abpframework/abp/issues/10060) +- Move SettingTabsService to @abp/ng.setting-management/config package from @abp/ng.core [#10061](https://github.com/abpframework/abp/issues/10061) +- Make the @abp/ng.account dependent on @abp/ng.identity [#10059](https://github.com/abpframework/abp/issues/10059) +- Set default abp-modal size medium [#10118](https://github.com/abpframework/abp/issues/10118) +- Update all dependency versions to the latest [#9806](https://github.com/abpframework/abp/issues/9806) +- Chart.js big include with CommonJS warning [#7472](https://github.com/abpframework/abp/issues/7472) + +### Angular v12 + +The new ABP Angular UI is based on Angular v12. We started to compile Angular UI packages with the Ivy compilation. Therefore, **new packages only work with Angular v12**. If you are still on the older version of Angular v12, you have to update to Angular v12. The update is usually very easy. See [Angular Update Guide](https://update.angular.io/?l=2&v=11.0-12.0) for further information. + +### Bootstrap 5 + +TODO + +### NGXS has been removed + +We aim to make the ABP Framework free of any state-management solutions. ABP developers should be able to use the ABP Framework with any library/framework of their choice. So, we decided to remove NGXS from ABP packages. + +If you'd like to use NGXS after upgrading to v5.0, you have to install the NGXS to your project. The package can be installed with the following command: + +```bash +npm install @ngxs/store + +# or + +yarn add @ngxs/store +``` + +NGXS states and actions, some namespaces have been removed. See [this issue](https://github.com/abpframework/abp/issues/9952) for the details. + +If you don't want to use the NGXS, you should remove all NGXS related imports, injections, etc., from your project. + +### @angular/localize package + +[`@angular/localize`](https://angular.io/api/localize) dependency has been removed from `@abp/ng.core` package. The package must be installed in your app. Run the following command to install: + +```bash +npm install @angular/localize + +# or + +yarn add @angular/localize +``` + +> ABP Angular UI packages are not dependent on the `@angular/localize` package. However, some packages (like `@ng-bootstrap/ng-bootstrap`) depend on the package. Thus, this package needs to be installed in your project. + +### Proxy endpoints + +New endpoints named proxy have been created, related proxies have moved. +For example; before v5.0, `IdentityUserService` could be imported from `@abp/ng.identity`. As of v5.0, the service can be imported from `@abp/ng.identity/proxy`. See an example: + +```ts +import { IdentityUserService } from '@abp/ng.identity/proxy'; + +@Component({}) +export class YourComponent { + constructor(private identityUserService: IdentityUserService) {} +} +``` + +Following proxies have been affected: + +- `@abp/ng.account` to `@abp/ng.account.core/proxy` +- `@abp/ng.feature-management` to `@abp/ng.feature-management/proxy` +- `@abp/ng.identity` to `@abp/ng.identity/proxy` +- `@abp/ng.permission-management` to `@abp/ng.permission-management/proxy` +- `@abp/ng.tenant-management` to `@abp/ng.tenant-management/proxy` +- **ProfileService** is deleted from `@abp/ng.core`. Instead, you can import it from `@abp/ng.identity/proxy` + +### SettingTabsService + +**SettingTabsService** has moved from `@abp/ng.core` to `@abp/ng.setting-management/config`. + +### ChartComponent + +[`ChartComponent`](../UI/Angular/Chart-Component.md) has moved from `@abp/ng.theme.shared` to `@abp/ng.components/chart.js`. To use the component, you need to import the `ChartModule` to your module as follows: + +```ts +import { ChartModule } from '@abp/ng.components/chart.js'; + +@NgModule({ + imports: [ + ChartModule, + // ... + ], + // ... +}) +export class YourFeatureModule {} +``` diff --git a/docs/en/Migration-Guides/Abp-5_0.md b/docs/en/Migration-Guides/Abp-5_0.md new file mode 100644 index 0000000000..2dc880be3b --- /dev/null +++ b/docs/en/Migration-Guides/Abp-5_0.md @@ -0,0 +1,51 @@ +# ABP Framework v4.x to v5.0 Migration Guide + +## IdentityUser + +`IsActive ` property is added to the `IdentityUser`. This flag will be checked during the authentication of the users. See the related [PR](https://github.com/abpframework/abp/pull/10185). +**After the migration, set this property to `true` for the existing users: `UPDATE AbpUsers SET IsActive=1`** + +For EFCore you can set `defaultValue` to `true` in the migration class: +(This will add the column with `true` value for the existing records.) + +```cs +public partial class AddIsActiveToIdentityUser : Migration +{ + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsActive", + table: "AbpUsers", + type: "bit", + nullable: false, + defaultValue: true); // Default is false. + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsActive", + table: "AbpUsers"); + } +} +``` + +For document base databases like MongoDB, you need to manually update the `IsActive` field for the existing user records. + +## MongoDB + +ABP Framework will serialize the datetime based on [AbpClockOptions](https://docs.abp.io/en/abp/latest/Timing#clock-options) starting from ABP v5.0. It was saving `DateTime` values as UTC in MongoDB. Check out [MongoDB Datetime Serialization Options](https://mongodb.github.io/mongo-csharp-driver/2.13/reference/bson/mapping/#datetime-serialization-options). + +To revert back this feature, set `UseAbpClockHandleDateTime = false` in `AbpMongoDbOptions`: + +```cs +services.Configure(x => x.UseAbpClockHandleDateTime = false); +``` + +## IApiScopeRepository + +`GetByNameAsync` method renamed as `FindByNameAsync`. + +## Angular UI + +See the [Angular UI 5.0 Migration Guide](Abp-5_0-Angular.md). diff --git a/docs/en/Migration-Guides/Index.md b/docs/en/Migration-Guides/Index.md index c7bee5a82a..909f6c0998 100644 --- a/docs/en/Migration-Guides/Index.md +++ b/docs/en/Migration-Guides/Index.md @@ -1,7 +1,7 @@ # ABP Framework Migration Guides -* [4.2 to 4.3](Abp-4_3.md) -* [4.x to 4.2](Abp-4_2.md) -* [3.3.x to 4.0](Abp-4_0.md) -* [2.9.x to 3.0](../UI/Angular/Migration-Guide-v3.md) - +- [4.x to 5.0](Abp-5_0.md) +- [4.2 to 4.3](Abp-4_3.md) +- [4.x to 4.2](Abp-4_2.md) +- [3.3.x to 4.0](Abp-4_0.md) +- [2.9.x to 3.0](../UI/Angular/Migration-Guide-v3.md) diff --git a/docs/en/Module-Development-Basics.md b/docs/en/Module-Development-Basics.md index 4b76465a3e..63cbc31893 100644 --- a/docs/en/Module-Development-Basics.md +++ b/docs/en/Module-Development-Basics.md @@ -1,4 +1,4 @@ -# Modularity +# Modularity ## Introduction diff --git a/docs/en/Modules/Cms-Kit/Index.md b/docs/en/Modules/Cms-Kit/Index.md index eb08a0c53c..4c422b0bf3 100644 --- a/docs/en/Modules/Cms-Kit/Index.md +++ b/docs/en/Modules/Cms-Kit/Index.md @@ -20,11 +20,16 @@ All features are individually usable. If you disable a feature, it completely di ## How to Install +> This module is depends on [BlobStoring](../../Blob-Storing.md) module, please install `BlobStoring` module first and add a provider. For more information, check the [documentation](../../Blob-Storing.md). + [ABP CLI](../../CLI.md) allows installing a module to a solution using the `add-module` command. You can install the CMS Kit module in a command-line terminal with the following command: ```bash abp add-module Volo.CmsKit ``` + +> By default, Cms-Kit is disabled by `GlobalFeature`. Because of that the initial migration will be empty. So you can skip the migration by adding `--skip-db-migrations` to command when installing if you are using Entity Framework Core. After enabling Cms-Kit global feture, please add new migration. + After the installation process, open the `GlobalFeatureConfigurator` class in the `Domain.Shared` project of your solution and place the following code into the `Configure` method to enable all the features in the CMS Kit module. ```csharp diff --git a/docs/en/Modules/Setting-Management.md b/docs/en/Modules/Setting-Management.md index 4eedcc969d..68b06372eb 100644 --- a/docs/en/Modules/Setting-Management.md +++ b/docs/en/Modules/Setting-Management.md @@ -278,7 +278,7 @@ Open the `app.component.ts` and modify the file as shown below: ```js import { Component } from '@angular/core'; -import { SettingTabsService } from '@abp/ng.core'; // imported SettingTabsService +import { SettingTabsService } from '@abp/ng.setting-management/config'; // imported SettingTabsService import { MySettingsComponent } from './my-settings/my-settings.component'; // imported MySettingsComponent @Component(/* component metadata */) diff --git a/docs/en/Object-Extensions.md b/docs/en/Object-Extensions.md index 72265b2690..4c2b1b5454 100644 --- a/docs/en/Object-Extensions.md +++ b/docs/en/Object-Extensions.md @@ -1,4 +1,4 @@ -# Object Extensions +# Object Extensions ABP Framework provides an **object extension system** to allow you to **add extra properties** to an existing object **without modifying** the related class. This allows to extend functionalities implemented by a depended [application module](Modules/Index.md), especially when you want to [extend entities](Customizing-Application-Modules-Extending-Entities.md) and [DTOs](Customizing-Application-Modules-Overriding-Services.md) defined by the module. diff --git a/docs/en/Options.md b/docs/en/Options.md index b4f4f09140..76616aca28 100644 --- a/docs/en/Options.md +++ b/docs/en/Options.md @@ -1,4 +1,4 @@ -# Options +# Options Microsoft has introduced [the options pattern](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options) that is used to configure a group of settings used by the framework services. This pattern is implemented by the [Microsoft.Extensions.Options](https://www.nuget.org/packages/Microsoft.Extensions.Options) NuGet package, so it is usable by any type of applications in addition to ASP.NET Core based applications. diff --git a/docs/en/RabbitMq.md b/docs/en/RabbitMq.md index 11dc305b41..9fc04aa5d6 100644 --- a/docs/en/RabbitMq.md +++ b/docs/en/RabbitMq.md @@ -1,3 +1,3 @@ -# RabbitMQ +# RabbitMQ TODO! \ No newline at end of file diff --git a/docs/en/Road-Map.md b/docs/en/Road-Map.md index 215f017a47..de0a45ffbb 100644 --- a/docs/en/Road-Map.md +++ b/docs/en/Road-Map.md @@ -1,4 +1,4 @@ -# ABP Framework Road Map +# ABP Framework Road Map This document provides a road map, release schedule and planned features for the ABP Framework. diff --git a/docs/en/SMS-Sending.md b/docs/en/SMS-Sending.md index bf37814100..0dca487a69 100644 --- a/docs/en/SMS-Sending.md +++ b/docs/en/SMS-Sending.md @@ -1,4 +1,4 @@ -# SMS Sending +# SMS Sending The ABP Framework provides an abstraction to sending SMS. Having such an abstraction has some benefits; diff --git a/docs/en/Settings.md b/docs/en/Settings.md index 567cb02c4c..61c55f99b4 100644 --- a/docs/en/Settings.md +++ b/docs/en/Settings.md @@ -1,4 +1,4 @@ -# Settings +# Settings [Configuration system](Configuration.md) is a good way to configure the application on startup. In addition to the configurations, ABP provides another way to set and get some application settings. diff --git a/docs/en/SignalR-Integration.md b/docs/en/SignalR-Integration.md index 7ebf4f6539..35f109b8e6 100644 --- a/docs/en/SignalR-Integration.md +++ b/docs/en/SignalR-Integration.md @@ -52,15 +52,15 @@ Client side installation depends on your UI framework / client type. Run the following command in the root folder of your web project: -````bash +```bash yarn add @abp/signalr -```` +``` > This requires to [install yarn](https://yarnpkg.com/) if you haven't install before. This will add the `@abp/signalr` to the dependencies in the `package.json` of your project: -````json +```json { ... "dependencies": { @@ -68,25 +68,25 @@ This will add the `@abp/signalr` to the dependencies in the `package.json` of yo "@abp/signalr": "~2.7.0" } } -```` +``` Run the following [ABP CLI](CLI.md) command in the root folder of your web project: -````bash +```bash abp install-libs -```` +``` This will copy the SignalR JavaScript files into your project: ![signal-js-file](images/signal-js-file.png) -Finally, add the following code to your page/view to include the `signalr.js` file +Finally, add the following code to your page/view to include the `signalr.js` file -````xml +```xml @section scripts { } -```` +``` It requires to add `@using Volo.Abp.AspNetCore.Mvc.UI.Packages.SignalR` to your page/view. @@ -108,27 +108,27 @@ ABP automatically registers all the hubs to the [dependency injection](Dependenc Example: -````csharp +```csharp public class MessagingHub : Hub { //... } -```` +``` The hub route will be `/signalr-hubs/messaging` for the `MessagingHub`: -* Adding a standard `/signalr-hubs/` prefix -* Continue with the **camel case** hub name, without the `Hub` suffix. +- Adding a standard `/signalr-hubs/` prefix +- Continue with the **kebab-case** hub name, without the `Hub` suffix. If you want to specify the route, you can use the `HubRoute` attribute: -````csharp +```csharp [HubRoute("/my-messaging-hub")] public class MessagingHub : Hub { //... } -```` +``` ### AbpHub Base Classes @@ -136,7 +136,7 @@ Instead of the standard `Hub` and `Hub` classes, you can inherit from the `Ab Example: -````csharp +```csharp public class MessagingHub : AbpHub { public async Task SendMessage(string targetUserName, string message) @@ -145,7 +145,7 @@ public class MessagingHub : AbpHub var txt = L["MyText"]; //Localization } } -```` +``` > While you could inject the same properties into your hub constructor, this way simplifies your hub class. @@ -153,9 +153,9 @@ public class MessagingHub : AbpHub ABP automatically registers all the hubs to the [dependency injection](Dependency-Injection.md) as a **transient service**. If you want to **disable auto dependency injection** registration for your hub class, just add a `DisableConventionalRegistration` attribute. You can still register your hub class to dependency injection in the `ConfigureServices` method of your module if you like: -````csharp +```csharp context.Services.AddTransient(); -```` +``` When **you or ABP** register the class to the dependency injection, it is automatically mapped to the endpoint route configuration just as described in the previous sections. You can use `DisableAutoHubMap` attribute if you want to manually map your hub class. @@ -163,7 +163,7 @@ For manual mapping, you have two options: 1. Use the `AbpSignalROptions` to add your map configuration (in the `ConfigureServices` method of your [module](Module-Development-Basics.md)), so ABP still performs the endpoint mapping for your hub: -````csharp +```csharp Configure(options => { options.Hubs.Add( @@ -178,13 +178,13 @@ Configure(options => ) ); }); -```` +``` This is a good way to provide additional SignalR options. If you don't want to disable auto hub map, but still want to perform additional SignalR configuration, use the `options.Hubs.AddOrUpdate(...)` method: -````csharp +```csharp Configure(options => { options.Hubs.AddOrUpdate( @@ -200,13 +200,13 @@ Configure(options => } ); }); -```` +``` This is the way you can modify the options of a hub class defined in a depended module (where you don't have the source code access). 2. Change `app.UseConfiguredEndpoints` in the `OnApplicationInitialization` method of your [module](Module-Development-Basics.md) as shown below (added a lambda method as the parameter). -````csharp +```csharp app.UseConfiguredEndpoints(endpoints => { endpoints.MapHub("/my-messaging-hub", options => @@ -214,7 +214,7 @@ app.UseConfiguredEndpoints(endpoints => options.LongPolling.PollTimeout = TimeSpan.FromSeconds(30); }); }); -```` +``` ### UserIdProvider @@ -234,5 +234,5 @@ Refer to the Microsoft's documentation to [host and scale](https://docs.microsof ## See Also -* [Microsoft SignalR documentation](https://docs.microsoft.com/en-us/aspnet/core/signalr/introduction) -* [Real-Time Messaging In A Distributed Architecture Using ABP, SingalR & RabbitMQ](https://volosoft.com/blog/RealTime-Messaging-Distributed-Architecture-Abp-SingalR-RabbitMQ) +- [Microsoft SignalR documentation](https://docs.microsoft.com/en-us/aspnet/core/signalr/introduction) +- [Real-Time Messaging In A Distributed Architecture Using ABP, SingalR & RabbitMQ](https://volosoft.com/blog/RealTime-Messaging-Distributed-Architecture-Abp-SingalR-RabbitMQ) diff --git a/docs/en/Specifications.md b/docs/en/Specifications.md index bfe1d031d3..a9aeb2b050 100644 --- a/docs/en/Specifications.md +++ b/docs/en/Specifications.md @@ -1,4 +1,4 @@ -# Specifications +# Specifications Specification Pattern is used to define **named, reusable, combinable and testable filters** for entities and other business objects. diff --git a/docs/en/Startup-Templates/Application.md b/docs/en/Startup-Templates/Application.md index 1fdf980ddc..5ad2dde24b 100644 --- a/docs/en/Startup-Templates/Application.md +++ b/docs/en/Startup-Templates/Application.md @@ -1,4 +1,4 @@ -# Application Startup Template +# Application Startup Template ## Introduction diff --git a/docs/en/Startup-Templates/Index.md b/docs/en/Startup-Templates/Index.md index b73779ecb8..09755151db 100644 --- a/docs/en/Startup-Templates/Index.md +++ b/docs/en/Startup-Templates/Index.md @@ -1,4 +1,4 @@ -# Startup Templates +# Startup Templates While you can start with an empty project and add needed packages manually, startup templates make easy and comfortable to start a new solution with the ABP framework. Click the name from the list below to see the documentation of the related startup template: diff --git a/docs/en/Startup-Templates/Module.md b/docs/en/Startup-Templates/Module.md index cdcb964bef..c9ac6ccd48 100644 --- a/docs/en/Startup-Templates/Module.md +++ b/docs/en/Startup-Templates/Module.md @@ -1,4 +1,4 @@ -# Module Startup Template +# Module Startup Template This template can be used to create a **reusable [application module](../Modules/Index.md)** based on the [module development best practices & conventions](../Best-Practices/Index.md). It is also suitable for creating **microservices** (with or without UI). diff --git a/docs/en/Testing.md b/docs/en/Testing.md index 0a617174ed..e248ed51a6 100644 --- a/docs/en/Testing.md +++ b/docs/en/Testing.md @@ -1,4 +1,4 @@ -# Automated Testing +# Automated Testing ## Introduction diff --git a/docs/en/Timing.md b/docs/en/Timing.md index 790721e7a8..fce17de4cf 100644 --- a/docs/en/Timing.md +++ b/docs/en/Timing.md @@ -1,4 +1,4 @@ -# Timing +# Timing Working with times & [time zones](https://en.wikipedia.org/wiki/Time_zone) is always tricky, especially if you need to build a **global system** that is used by users in **different time zones**. diff --git a/docs/en/UI/Angular/Chart-Component.md b/docs/en/UI/Angular/Chart-Component.md new file mode 100644 index 0000000000..a1cea80b52 --- /dev/null +++ b/docs/en/UI/Angular/Chart-Component.md @@ -0,0 +1,249 @@ +# Chart Component + +ABP Chart component exposed by `@abp/ng.components/chart.js` is based on [`charts.js`](https://www.chartjs.org/) v3+. You don't need to install the `chart.js` package. Since the `@abp/ng.components` is dependent on the `chart.js`, the package is already installed in your project. + +> Chart component loads `chart.js` script lazy. So it does not increase the bundle size. + +## How to Use + +First of all, need to import the `ChartModule` to your feature module as follows: + +```ts +// your-feature.module.ts + +import { ChartModule } from '@abp/ng.components/chart.js'; +import { ChartDemoComponent } from './chart-demo.component'; + +@NgModule({ + imports: [ + ChartModule, + // ... + ], + declarations: [ChartDemoComponent], + // ... +}) +export class YourFeatureModule {} +``` + +Then, `abp-chart` component can be used. See an example: + +```ts +// chart-demo.component.ts + +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-chart-demo', + template: ` `, +}) +export class ChartDemoComponent { + data = { + labels: ['Data 1', 'Data 2', 'Data 3'], + datasets: [ + { + label: 'Dataset 1', + data: [40, 15, 45], + backgroundColor: ['#ff7675', '#fdcb6e', '#0984e3'], + }, + ], + }; +} +``` + +> **Important Note**: Changing the chart data without creating a new data instance does not trigger change detection. In order to chart to redraw itself, a new data object needs to be created. + +See the result: + +![pie-chart](./images/pie-chart.png) + +## Examples + +### Doughnut + +```ts +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-chart-demo', + template: ` + + `, +}) +export class ChartDemoComponent { + data = { + labels: ['Data 1', 'Data 2', 'Data 3'], + datasets: [ + { + label: 'Dataset 1', + data: [40, 15, 45], + backgroundColor: ['#a0e6c3', '#f0ea4c', '#5b9dc3'], + }, + ], + }; + + options = { + plugins: { + title: { + display: true, + text: 'Doughnut Chart', + fontSize: 16, + }, + legend: { + position: 'bottom', + }, + }, + }; +} +``` + +Result: + +![Doughnut Chart](./images/doughnut-chart.png) + +### Bar + +```ts +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-chart-demo', + template: ` + + `, +}) +export class ChartDemoComponent { + data = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + datasets: [ + { + label: 'First dataset', + backgroundColor: '#42A5F5', + data: [65, 59, 80, 81, 56, 55, 40], + }, + { + label: 'Second dataset', + backgroundColor: '#FFA726', + data: [28, 48, 40, 19, 86, 27, 90], + }, + ], + }; +} +``` + +Result: + +![Bar Chart](./images/bar-chart.png) + +### Radar + +```ts +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-chart-demo', + template: ` + + + + `, +}) +export class ChartDemoComponent { + data = { + labels: [ + 'January', + 'February', + 'March', + 'April', + 'May', + 'June', + 'July', + 'August', + 'September', + 'October', + 'November', + 'December', + ], + datasets: [ + { + label: 'Dataset 1', + backgroundColor: 'rgba(179,181,198,0.2)', + borderColor: 'rgba(179,181,198,1)', + data: [65, 59, 90, 81, 56, 55, 40, 35, 82, 51, 62, 95], + }, + { + label: 'Dataset 2', + backgroundColor: 'rgba(255,99,132,0.2)', + borderColor: 'rgba(255,99,132,1)', + data: [28, 48, 40, 58, 96, 27, 100, 44, 85, 77, 71, 39], + }, + ], + }; + + addDataset() { + this.data = { + ...this.data, + datasets: [ + ...this.data.datasets, + { + label: 'Dataset 3', + backgroundColor: 'rgba(54,162,235,0.2)', + borderColor: 'rgba(54, 162, 235, 1)', + data: [90, 95, 98, 91, 99, 96, 89, 95, 98, 93, 92, 90], + }, + ], + }; + } +} +``` + +Result: + +![Bar Chart](./images/radar-chart.gif) + +See the [`chart.js` samples](https://www.chartjs.org/docs/latest/samples) for more examples. + +## API + +### `abp-chart` + +#### Properties + +| Name | Description | Type | Default | +| --------------- | ---------------------------------------------------------------- | ----------------------- | ------- | +| `[type]` | Type of the chart. | `string` | null | +| `[data]` | Chart data to display | `any` | null | +| `[options]` | Chart options to customize | `any` | null | +| `[plugins]` | Chart plugins to customize behaviour | `any` | null | +| `[width]` | Witdh of the chart | `string` | null | +| `[height]` | Height of the chart | `string` | null | +| `[responsive]` | Whether the chart is responsive | `boolean` | true | +| `(dataSelect)` | A callback that executes when an element on the chart is clicked | `EventEmitter` | - | +| `(initialized)` | A callback that executes when the chart is initialized | `EventEmitter` | - | + +#### Methods + +| Name | Description | Parameters | +| ---------------- | ------------------------------------------------------------------- | ---------- | +| `refresh` | Redraws the chart | - | +| `reinit` | Destroys the chart then creates it again | - | +| `getBase64Image` | Returns a base 64 encoded string of the chart in it's current state | - | +| `generateLegend` | Returns an HTML string of a legend for the chart | - | +| `getCanvas` | Returns the canvas HTML element | - | diff --git a/docs/en/UI/Angular/Content-Strategy.md b/docs/en/UI/Angular/Content-Strategy.md index 8544042c32..cb06ecf044 100644 --- a/docs/en/UI/Angular/Content-Strategy.md +++ b/docs/en/UI/Angular/Content-Strategy.md @@ -11,13 +11,15 @@ constructor( public content: string, protected domStrategy?: DomStrategy, - protected contentSecurityStrategy?: ContentSecurityStrategy + protected contentSecurityStrategy?: ContentSecurityStrategy, + protected options?: ElementOptions = {}, ) ``` - `content` is set to `