Browse Source

Merge branch 'dev' into tag-refactoring

pull/7024/head
Ahmet 5 years ago
parent
commit
346de20e69
  1. 5
      README.md
  2. 8
      common.props
  3. 2
      docs/en/Blob-Storing-Aliyun.md
  4. 2
      docs/en/Blob-Storing-Aws.md
  5. 2
      docs/en/Blob-Storing-Azure.md
  6. 2
      docs/en/Blob-Storing-Minio.md
  7. 51
      docs/en/Blog-Posts/2021-01-07 v4_1_Release_Stable/POST.md
  8. 8
      docs/en/Entity-Framework-Core-MySQL.md
  9. 6
      docs/en/UI/Angular/Component-Replacement.md
  10. 85
      docs/en/UI/Angular/Data-Table-Column-Extensions.md
  11. 74
      docs/en/UI/Angular/Dynamic-Form-Extensions.md
  12. 320
      docs/en/UI/Angular/Entity-Action-Extensions.md
  13. 126
      docs/en/UI/Angular/Page-Toolbar-Extensions.md
  14. BIN
      docs/en/UI/Angular/images/entity-action-extensions---click-me.gif
  15. BIN
      docs/en/UI/Angular/images/entity-action-extensions---custom-modal.gif
  16. BIN
      docs/en/UI/Angular/images/entity-prop-extensions---custom-cell.gif
  17. BIN
      docs/en/UI/Angular/images/entity-prop-extensions---name-column.gif
  18. BIN
      docs/en/UI/Angular/images/form-prop-extensions---birthday-field.gif
  19. BIN
      docs/en/UI/Angular/images/toolbar-action-extensions---click-me.gif
  20. BIN
      docs/en/UI/Angular/images/toolbar-action-extensions---custom-component.gif
  21. 2
      docs/en/UI/Blazor/Navigation-Menu.md
  22. 56
      docs/en/UI/Blazor/Page-Progress.md
  23. 2
      docs/en/docs-nav.json
  24. 2
      docs/zh-Hans/Blob-Storing-Aliyun.md
  25. 2
      docs/zh-Hans/Blob-Storing-Aws.md
  26. 2
      docs/zh-Hans/Blob-Storing-Azure.md
  27. 2
      docs/zh-Hans/Blob-Storing-Minio.md
  28. 10
      docs/zh-Hans/Blob-Storing.md
  29. 1
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor
  30. 13
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs
  31. 29
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorClientHttpMessageHandler.cs
  32. 12
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/DependencyInjection/WebAssemblyClientScopeServiceProviderAccessor.cs
  33. 21
      framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/IUiPageProgressService.cs
  34. 16
      framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/NullUiPageProgressService.cs
  35. 17
      framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/UiPageProgressEventArgs.cs
  36. 13
      framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/UiPageProgressOptions.cs
  37. 11
      framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/UiPageProgressType.cs
  38. 4
      framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/AbpRequestLocalizationMiddleware.cs
  39. 17
      framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/AbpRequestLocalizationOptions.cs
  40. 8
      framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs
  41. 33
      framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/DependencyInjection/HttpContextClientScopeServiceProviderAccessor.cs
  42. 3
      framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs
  43. 32
      framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiPageProgressService.cs
  44. 1
      framework/src/Volo.Abp.BlazoriseUI/Components/UiPageProgress.razor
  45. 58
      framework/src/Volo.Abp.BlazoriseUI/Components/UiPageProgress.razor.cs
  46. 6
      framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj
  47. 1
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs
  48. 61
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CreateMigrationAndRunMigrator.cs
  49. 9
      framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IClientScopeServiceProviderAccessor.cs
  50. 7
      framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingJsFuncHelper.cs
  51. 5
      framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ConnectionPool.cs
  52. 6
      framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqConnections.cs
  53. 23
      framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs
  54. 1
      framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateRenderer.cs
  55. 15
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/LocalizationTestController.cs
  56. 44
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/LocalizationTestController_Tests.cs
  57. 2
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
  58. 224
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
  59. 4
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
  60. 260
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
  61. 1
      framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/SampleTemplates/ShowDecimalNumber.tpl
  62. 16
      framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TemplateRenderer_Tests.cs
  63. 8
      framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplateDefinitionProvider.cs
  64. 1
      framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplates.cs
  65. 2
      framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory_Tests.cs
  66. 6
      modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs
  67. 4
      modules/blogging/app/Volo.BloggingTestApp/package.json
  68. 332
      modules/blogging/app/Volo.BloggingTestApp/yarn.lock
  69. 2
      modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
  70. 238
      modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
  71. 8
      modules/cms-kit/angular/package.json
  72. 4
      modules/cms-kit/angular/projects/cms-kit/package.json
  73. 2
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
  74. 238
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
  75. 2
      modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
  76. 238
      modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
  77. 4
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
  78. 219
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
  79. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json
  80. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json
  81. 17
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs
  82. 41
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs
  83. 21
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs
  84. 984
      modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20201104131104_Initial.Designer.cs
  85. 24
      modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20201208084431_Added_CommitCount.cs
  86. 6
      modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20210105171158_Initial.Designer.cs
  87. 1
      modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20210105171158_Initial.cs
  88. 2
      modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/VoloDocsDbContextModelSnapshot.cs
  89. 1
      modules/docs/app/VoloDocs.Web/appsettings.json
  90. 4
      modules/docs/app/VoloDocs.Web/package.json
  91. 298
      modules/docs/app/VoloDocs.Web/yarn.lock
  92. 47
      modules/docs/src/Volo.Docs.Web/HtmlConverting/HtmlNormalizer.cs
  93. 4
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js
  94. 2
      npm/lerna.json
  95. 2
      npm/ng-packs/lerna.version.json
  96. 20
      npm/ng-packs/package.json
  97. 4
      npm/ng-packs/packages/components/package.json
  98. 4
      npm/ng-packs/packages/core/package.json
  99. 71
      npm/ng-packs/packages/core/src/lib/services/http-wait.service.ts
  100. 33
      npm/ng-packs/packages/core/src/lib/services/router-wait.service.ts

5
README.md

@ -2,7 +2,8 @@
![build and test](https://github.com/abpframework/abp/workflows/build%20and%20test/badge.svg)
[![NuGet](https://img.shields.io/nuget/v/Volo.Abp.Core.svg?style=flat-square)](https://www.nuget.org/packages/Volo.Abp.Core)
[![MyGet (with prereleases)](https://img.shields.io/myget/abp-nightly/vpre/Volo.Abp.svg?style=flat-square)](https://docs.abp.io/en/abp/latest/Nightly-Builds)
[![NuGet (with prereleases)](https://img.shields.io/nuget/vpre/Volo.Abp.Core.svg?style=flat-square)](https://www.nuget.org/packages/Volo.Abp.Core)
[![MyGet (nightly builds)](https://img.shields.io/myget/abp-nightly/vpre/Volo.Abp.svg?style=flat-square)](https://docs.abp.io/en/abp/latest/Nightly-Builds)
[![NuGet Download](https://img.shields.io/nuget/dt/Volo.Abp.Core.svg?style=flat-square)](https://www.nuget.org/packages/Volo.Abp.Core)
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**.
@ -103,4 +104,4 @@ ABP is a community-driven open source project. See [the contribution guide](http
## Support the ABP Framework
Love ABP Framework? **Please give a star** to this repository :star:
Love ABP Framework? **Please give a star** to this repository :star:

8
common.props

@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>4.1.0-rc.2</Version>
<Version>4.2.0</Version>
<NoWarn>$(NoWarn);CS1591;CS0436</NoWarn>
<PackageIconUrl>https://abp.io/assets/abp_nupkg.png</PackageIconUrl>
<PackageProjectUrl>https://abp.io/</PackageProjectUrl>
@ -10,10 +10,8 @@
<RepositoryUrl>https://github.com/abpframework/abp/</RepositoryUrl>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<!-- https://github.com/dotnet/sourcelink -->
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<!-- Include symbol files (*.pdb) in the built .nupkg -->
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.0-beta-20204-02">

2
docs/en/Blob-Storing-Aliyun.md

@ -55,7 +55,7 @@ Configure<AbpBlobStoringOptions>(options =>
* **RoleSessionName** ([NotNull]string): Used to identify the temporary access credentials, it is recommended to use different application users to distinguish.
* **Policy** (string): Additional permission restrictions. See the [document](https://help.aliyun.com/document_detail/100680.html) for details.
* **DurationSeconds** (int): Validity period(s) of a temporary access certificate,minimum is 900 and the maximum is 3600.
* **ContainerName** (string): You can specify the container name in Aliyun. If this is not specified, it uses the name of the BLOB container defined with the `BlogContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Aliyun has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://help.aliyun.com/knowledge_detail/39668.html):
* **ContainerName** (string): You can specify the container name in Aliyun. If this is not specified, it uses the name of the BLOB container defined with the `BlobContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Aliyun has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://help.aliyun.com/knowledge_detail/39668.html):
* Container names must start or end with a letter or number, and can contain only letters, numbers, and the dash (-) character.
* Container names Must start and end with lowercase letters and numbers.
* Container names must be from **3** through **63** characters long.

2
docs/en/Blob-Storing-Aws.md

@ -60,7 +60,7 @@ Configure<AbpBlobStoringOptions>(options =>
* **Region** (string): The system name of the service.
* **Policy** (string): An IAM policy in JSON format that you want to use as an inline session policy.
* **DurationSeconds** (int): Validity period(s) of a temporary access certificate,minimum is 900 and the maximum is 3600. **note**: Using subaccounts operated OSS,if the value is 0.
* **ContainerName** (string): You can specify the container name in Aws. If this is not specified, it uses the name of the BLOB container defined with the `BlogContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Aws has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html):
* **ContainerName** (string): You can specify the container name in Aws. If this is not specified, it uses the name of the BLOB container defined with the `BlobContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Aws has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html):
* Bucket names must be between **3** and **63** characters long.
* Bucket names can consist only of **lowercase** letters, numbers, dots (.), and hyphens (-).
* Bucket names must begin and end with a letter or number.

2
docs/en/Blob-Storing-Azure.md

@ -40,7 +40,7 @@ Configure<AbpBlobStoringOptions>(options =>
### Options
* **ConnectionString** (string): A connection string includes the authorization information required for your application to access data in an Azure Storage account at runtime using Shared Key authorization. Please refer to Azure documentation: https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string
* **ContainerName** (string): You can specify the container name in azure. If this is not specified, it uses the name of the BLOB container defined with the `BlogContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Azure has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names):
* **ContainerName** (string): You can specify the container name in azure. If this is not specified, it uses the name of the BLOB container defined with the `BlobContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Azure has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names):
* Container names must start or end with a letter or number, and can contain only letters, numbers, and the dash (-) character.
* Every dash (-) character must be immediately preceded and followed by a letter or number; consecutive dashes are not permitted in container names.
* All letters in a container name must be **lowercase**.

2
docs/en/Blob-Storing-Minio.md

@ -43,7 +43,7 @@ Configure<AbpBlobStoringOptions>(options =>
* **EndPoint** (string): URL to object storage service. Please refer to MinIO Client SDK for .NET: https://docs.min.io/docs/dotnet-client-quickstart-guide.html
* **AccessKey** (string): Access key is the user ID that uniquely identifies your account.
* **SecretKey** (string): Secret key is the password to your account.
* **BucketName** (string): You can specify the bucket name in MinIO. If this is not specified, it uses the name of the BLOB container defined with the `BlogContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)).MinIO is the defacto standard for S3 compatibility, So MinIO has some **rules for naming bucket**. The [following rules](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html) apply for naming MinIO buckets:
* **BucketName** (string): You can specify the bucket name in MinIO. If this is not specified, it uses the name of the BLOB container defined with the `BlobContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)).MinIO is the defacto standard for S3 compatibility, So MinIO has some **rules for naming bucket**. The [following rules](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html) apply for naming MinIO buckets:
* Bucket names must be between **3** and **63** characters long.
* Bucket names can consist only of **lowercase** letters, numbers, dots (.), and hyphens (-).
* Bucket names must begin and end with a letter or number.

51
docs/en/Blog-Posts/2021-01-07 v4_1_Release_Stable/POST.md

@ -0,0 +1,51 @@
# ABP.IO Platform 4.1 Final Has Been Released!
[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 4.1 versions have been released today.
## What's New With 4.1?
Since all the new features are already explained in details with the [4.1 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-v4.1-RC-Has-Been-Released), I will not repeat all the details again. See the [RC Blog Post](https://blog.abp.io/abp/ABP.IO-Platform-v4.1-RC-Has-Been-Released) for all the features and enhancements.
## Creating New Solutions
You can create a new solution with the ABP Framework version 4.1 by either using the `abp new` command or using the **direct download** tab on the [get started page](https://abp.io/get-started).
> See the [getting started document](https://docs.abp.io/en/abp/latest/Getting-Started) for details.
## How to Upgrade an Existing Solution
### Install/Update the ABP CLI
First of all, install the ABP CLI or upgrade to the latest version.
If you haven't installed yet:
```bash
dotnet tool install -g Volo.Abp.Cli
```
To update an existing installation:
```bash
dotnet tool update -g Volo.Abp.Cli
```
### ABP UPDATE Command
[ABP CLI](https://docs.abp.io/en/abp/latest/CLI) provides a handy command to update all the ABP related NuGet and NPM packages in your solution with a single command:
```bash
abp update
```
Run this command in the root folder of your solution.
## ABP Community
We started to get more contributions by the community for the [ABP Community](https://community.abp.io/) contents. Thank you all!
We will be adding **Video Content** sharing system in a short time. We are planning to create short video contents, especially to explore the new features in every release. Again, we will be waiting video contributions by the community :)
## About the Next Versions
Planned preview date for the version **4.2 is January 14, 2021**. See the [Road Map](https://docs.abp.io/en/abp/latest/Road-Map) document and [GitHub Milestones](https://github.com/abpframework/abp/milestones) to learn what's planned for the next versions. We are trying to be clear about the coming features and the next release dates.

8
docs/en/Entity-Framework-Core-MySQL.md

@ -12,10 +12,10 @@ Find ***YourProjectName*EntityFrameworkCoreModule** class inside the `.EntityFra
## UseMySQL()
Find `UseSqlServer()` calls in your solution, replace with `UseMySQL()`. Check the following files:
Find `UseSqlServer()` calls in your solution. Check the following files:
* *YourProjectName*EntityFrameworkCoreModule.cs inside the `.EntityFrameworkCore` project.
* *YourProjectName*MigrationsDbContextFactory.cs inside the `.EntityFrameworkCore.DbMigrations` project.
* *YourProjectName*EntityFrameworkCoreModule.cs inside the `.EntityFrameworkCore` project. Replace `UseSqlServer()` with `UseMySQL()`.
* *YourProjectName*MigrationsDbContextFactory.cs inside the `.EntityFrameworkCore.DbMigrations` project. Replace `UseSqlServer()` with `UseMySql()`. Then add a new parameter (`ServerVersion`) to `UseMySql()` method. Example: `.UseMySql(configuration.GetConnectionString("Default"), ServerVersion.FromString("8.0.21-mysql"))`. See [this issue](https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/pull/1233) for more information about `ServerVersion`)
> Depending on your solution structure, you may find more code files need to be changed.
@ -38,4 +38,4 @@ Run the `.DbMigrator` project to create the database and seed the initial data.
## Run the Application
It is ready. Just run the application and enjoy coding.
It is ready. Just run the application and enjoy coding.

6
docs/en/UI/Angular/Component-Replacement.md

@ -350,7 +350,7 @@ import {
ApplicationConfiguration,
AuthService,
ConfigState,
SessionState,
SessionStateService,
SetLanguage,
} from '@abp/ng.core';
import { Component, AfterViewInit } from '@angular/core';
@ -396,10 +396,10 @@ export class NavItemsComponent implements AfterViewInit {
}
get selectedLangCulture(): string {
return this.store.selectSnapshot(SessionState.getLanguage);
return this.sessionState.getLanguage();
}
constructor(private store: Store, private authService: AuthService) {}
constructor(private store: Store, private authService: AuthService, private sessionState: SessionStateService) {}
ngAfterViewInit() {
fromEvent(window, 'resize')

85
docs/en/UI/Angular/Data-Table-Column-Extensions.md

@ -5,7 +5,7 @@
Entity prop extension system allows you to add a new column to the data table for an entity or change/remove an already existing one. A "Name" column was added to the user management page below:
![Entity Prop Extension Example: "Name" Column](images/user-prop-extension-name-column-ng.png)
<img alt="Entity Prop Extension Example: 'Name' Column" src="./images/entity-prop-extensions---name-column.gif" width="800px" style="max-width:100%">
You will have access to the current entity in your code and display its value, make the column sortable, perform visibility checks, and more. You can also render custom HTML in table cells.
@ -18,10 +18,14 @@ In this example, we will add a "Name" column and display the value of the `name`
The following code prepares a constant named `identityEntityPropContributors`, ready to be imported and used in your root module:
```js
// entity-prop-contributors.ts
// src/app/entity-prop-contributors.ts
import {
eIdentityComponents,
IdentityEntityPropContributors,
IdentityUserDto,
} from '@abp/ng.identity';
import { EntityProp, EntityPropList, ePropType } from '@abp/ng.theme.shared/extensions';
import { IdentityEntityPropContributors, IdentityUserDto } from '@volo/abp.ng.identity';
const nameProp = new EntityProp<IdentityUserDto>({
type: ePropType.String,
@ -32,62 +36,45 @@ const nameProp = new EntityProp<IdentityUserDto>({
});
export function namePropContributor(propList: EntityPropList<IdentityUserDto>) {
propList.addAfter(
nameProp,
'userName',
(value, name) => value.name === name,
);
propList.addAfter(nameProp, 'userName', (value, name) => value.name === name);
}
export const identityEntityPropContributors: IdentityEntityPropContributors = {
'Identity.UsersComponent': [namePropContributor],
// enum indicates the page to add contributors to
[eIdentityComponents.Users]: [
namePropContributor,
// You can add more contributors here
],
};
```
The list of props, conveniently named as `propList`, is a **doubly linked list**. That is why we have used the `addAfter` method, which adds a node with given value after the first node that has the previous value. You may find [all available methods here](../Common/Utils/Linked-List.md).
> **Important Note 1:** AoT compilation does not support function calls in decorator metadata. This is why we have defined `namePropContributor` as an exported function declaration here. Please do not forget exporting your contributor callbacks and forget about lambda functions (a.k.a. arrow functions). Please refer to [AoT metadata errors](https://angular.io/guide/aot-metadata-errors#function-calls-not-supported) for details.
> **Important Note 2:** Please use one of the following if Ivy is not enabled in your project. Otherwise, you will get an "Expression form not supported." error.
```js
export const identityEntityPropContributors: IdentityEntityPropContributors = {
'Identity.UsersComponent': [ namePropContributor ],
};
/* OR */
const identityContributors: IdentityEntityPropContributors = {};
identityContributors[eIdentityComponents.Users] = [ namePropContributor ];
export const identityEntityPropContributors = identityContributors;
```
### Step 2. Import and Use Entity Prop Contributors
Import `identityEntityPropContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below:
```js
// src/app/app-routing.module.ts
// other imports
import { identityEntityPropContributors } from './entity-prop-contributors';
const routes: Routes = [
// other routes
{
path: '',
component: DynamicLayoutComponent,
children: [
{
path: 'identity',
loadChildren: () =>
import('@volo/abp.ng.identity').then(m =>
m.IdentityModule.forLazy({
entityPropContributors: identityEntityPropContributors,
}),
),
},
// other child routes
],
// other routes
}
path: 'identity',
loadChildren: () =>
import('@abp/ng.identity').then(m =>
m.IdentityModule.forLazy({
entityPropContributors: identityEntityPropContributors,
})
),
},
// other routes
];
```
@ -97,12 +84,18 @@ That is it, `nameProp` entity prop will be added, and you will see the "Name" co
You can use the `valueResolver` to render an HTML string in the table. Imagine we want to show a red times icon (❌) next to unconfirmed emails and phones, instead of showing a green check icon next to confirmed emails and phones. The contributors below would do that for you.
<img alt="Entity Prop Extension Example: Custom Cell Render" src="./images/entity-prop-extensions---custom-cell.gif" width="800px" style="max-width:100%">
```js
// entity-prop-contributors.ts
// src/app/entity-prop-contributors.ts
import { EntityProp, EntityPropList, ePropType } from '@abp/ng.theme.shared/extensions';
import { IdentityUserDto } from '@volo/abp.ng.identity';
import { IdentityEntityPropContributors } from '@volo/abp.ng.identity/config';
import {
eIdentityComponents,
IdentityEntityPropContributors,
IdentityUserDto,
} from '@abp/ng.identity';
import { EntityProp, EntityPropList } from '@abp/ng.theme.shared/extensions';
import { of } from 'rxjs';
export function emailPropContributor(propList: EntityPropList<IdentityUserDto>) {
const index = propList.indexOf('email', (value, name) => value.name === name);
@ -138,7 +131,7 @@ export function phonePropContributor(propList: EntityPropList<IdentityUserDto>)
}
export const identityEntityPropContributors: IdentityEntityPropContributors = {
'Identity.UsersComponent': [emailPropContributor, phonePropContributor],
[eIdentityComponents.Users]: [emailPropContributor, phonePropContributor],
};
```

74
docs/en/UI/Angular/Dynamic-Form-Extensions.md

@ -5,7 +5,7 @@
Form prop extension system allows you to add a new field to the create and/or edit forms for a form or change/remove an already existing one. A "Date of Birth" field was added to the user management page below:
![Form Prop Extension Example: "Date of Birth" Field](images/user-prop-extension-date-of-birth-field-ng.png)
<img alt="Form Prop Extension Example: 'Date of Birth' Field" src="./images/form-prop-extensions---birthday-field.gif" width="800px" style="max-width:100%">
You can validate the field, perform visibility checks, and do more. You will also have access to the current entity when creating a contibutor for an edit form.
@ -18,16 +18,20 @@ In this example, we will add a "Date of Birth" field in the user management page
The following code prepares two constants named `identityCreateFormPropContributors` and `identityEditFormPropContributors`, ready to be imported and used in your root module:
```js
// form-prop-contributors.ts
// src/app/form-prop-contributors.ts
import { Validators } from '@angular/forms';
import {
eIdentityComponents,
IdentityCreateFormPropContributors,
IdentityUserDto,
} from '@abp/ng.identity';
import { ePropType, FormProp, FormPropList } from '@abp/ng.theme.shared/extensions';
import { IdentityCreateFormPropContributors, IdentityEditFormPropContributors, IdentityUserDto } from '@volo/abp.ng.identity';
import { Validators } from '@angular/forms';
const birthdayProp = new FormProp<IdentityUserDto>({
type: ePropType.Date,
name: 'birthday',
displayName: 'Date of Birth',
displayName: 'AbpIdentity::Birthday',
validators: () => [Validators.required],
});
@ -36,63 +40,49 @@ export function birthdayPropContributor(propList: FormPropList<IdentityUserDto>)
}
export const identityCreateFormPropContributors: IdentityCreateFormPropContributors = {
'Identity.UsersComponent': [birthdayPropContributor],
// enum indicates the page to add contributors to
[eIdentityComponents.Users]: [
birthdayPropContributor,
// You can add more contributors here
],
};
export const identityEditFormPropContributors: IdentityEditFormPropContributors = {
'Identity.UsersComponent': [birthdayPropContributor],
};
export const identityEditFormPropContributors = identityCreateFormPropContributors;
// you may define different contributors for edit form if you like
```
The list of props, conveniently named as `propList`, is a **doubly linked list**. That is why we have used the `addByIndex` method, which adds the given value to the specified index of the list. You may find [all available methods here](../Common/Utils/Linked-List.md).
> **Important Note 1:** AoT compilation does not support function calls in decorator metadata. This is why we have defined `birthdayPropContributor` as an exported function declaration here. Please do not forget exporting your contributor callbacks and forget about lambda functions (a.k.a. arrow functions). Please refer to [AoT metadata errors](https://angular.io/guide/aot-metadata-errors#function-calls-not-supported) for details.
> **Important Note 2:** Please use one of the following if Ivy is not enabled in your project. Otherwise, you will get an "Expression form not supported." error.
```js
export const identityCreateFormPropContributors: IdentityCreateFormPropContributors = {
'Identity.UsersComponent': [ birthdayPropContributor ],
};
/* OR */
const identityCreateContributors: IdentityCreateFormPropContributors = {};
identityCreateContributors[eIdentityComponents.Users] = [ birthdayPropContributor ];
export const identityCreateFormPropContributors = identityCreateContributors;
```
### Step 2. Import and Use Form Prop Contributors
Import `identityCreateFormPropContributors` and `identityEditFormPropContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below:
```js
// src/app/app-routing.module.ts
// other imports
import {
identityCreateFormPropContributors,
identityEditFormPropContributors,
} from './form-prop-contributors';
const routes: Routes = [
// other routes
{
path: '',
component: DynamicLayoutComponent,
children: [
{
path: 'identity',
loadChildren: () =>
import('@volo/abp.ng.identity').then(m =>
m.IdentityModule.forLazy({
createFormPropContributors: identityCreateFormPropContributors,
editFormPropContributors: identityEditFormPropContributors,
}),
),
},
// other child routes
],
// other routes
}
path: 'identity',
loadChildren: () =>
import('@abp/ng.identity').then(m =>
m.IdentityModule.forLazy({
createFormPropContributors: identityCreateFormPropContributors,
editFormPropContributors: identityEditFormPropContributors,
})
),
},
// other routes
];
```

320
docs/en/UI/Angular/Entity-Action-Extensions.md

@ -4,9 +4,9 @@
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:
![Entity Action Extension Example: "Click Me!" Action](images/user-action-extension-click-me-ng.png)
<img alt="Entity Action Extension Example: 'Click Me!' Action" src="./images/entity-action-extensions---click-me.gif" width="800px" style="max-width:100%">
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.
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 also access the current entity in your code.
## How to Set Up
@ -17,10 +17,14 @@ In this example, we will add a "Click Me!" action and alert the current row's `u
The following code prepares a constant named `identityEntityActionContributors`, ready to be imported and used in your root module:
```js
// entity-action-contributors.ts
// src/app/entity-action-contributors.ts
import {
eIdentityComponents,
IdentityEntityActionContributors,
IdentityUserDto,
} from '@abp/ng.identity';
import { EntityAction, EntityActionList } from '@abp/ng.theme.shared/extensions';
import { IdentityEntityActionContributors, IdentityUserDto } from '@volo/abp.ng.identity';
const alertUserName = new EntityAction<IdentityUserDto>({
text: 'Click Me!',
@ -31,9 +35,7 @@ const alertUserName = new EntityAction<IdentityUserDto>({
// See EntityActionOptions in API section for all options
});
export function alertUserNameContributor(
actionList: EntityActionList<IdentityUserDto>,
) {
export function alertUserNameContributor(actionList: EntityActionList<IdentityUserDto>) {
actionList.addTail(alertUserName);
}
@ -48,243 +50,199 @@ export const identityEntityActionContributors: IdentityEntityActionContributors
The list of actions, conveniently named as `actionList`, is a **doubly linked list**. That is why we have used the `addTail` method, which adds the given value to the end of the list. You may find [all available methods here](../Common/Utils/Linked-List.md).
> **Important Note 1:** AoT compilation does not support function calls in decorator metadata. This is why we have defined `alertUserNameContributor` as an exported function declaration here. Please do not forget exporting your contributor callbacks and forget about lambda functions (a.k.a. arrow functions). Please refer to [AoT metadata errors](https://angular.io/guide/aot-metadata-errors#function-calls-not-supported) for details.
> **Important Note 2:** Please use one of the following if Ivy is not enabled in your project. Otherwise, you will get an "Expression form not supported." error.
```js
export const identityEntityActionContributors: IdentityEntityActionContributors = {
'Identity.UsersComponent': [ alertUserNameContributor ],
};
/* OR */
const identityContributors: IdentityEntityActionContributors = {};
identityContributors[eIdentityComponents.Users] = [ alertUserNameContributor ];
export const identityEntityActionContributors = identityContributors;
```
### Step 2. Import and Use Entity Action Contributors
Import `identityEntityActionContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below:
```js
// src/app/app-routing.module.ts
// other imports
import { identityEntityActionContributors } from './entity-action-contributors';
const routes: Routes = [
// other routes
{
path: '',
component: DynamicLayoutComponent,
children: [
{
path: 'identity',
loadChildren: () =>
import('@volo/abp.ng.identity').then(m =>
m.IdentityModule.forLazy({
entityActionContributors: identityEntityActionContributors,
}),
),
},
// other child routes
],
// other routes
}
path: 'identity',
loadChildren: () =>
import('@abp/ng.identity').then(m =>
m.IdentityModule.forLazy({
entityActionContributors: identityEntityActionContributors,
})
),
},
// other routes
];
```
That is it, `alertUserName` entity action will be added as the last action on the grid dropdown in the users page (`UsersComponent`) of the `IdentityModule`.
That is it, `alertUserName` entity action will be added as the last action on the grid dropdown in the "Users" page (`UsersComponent`) of the `IdentityModule`.
## How to Place a Custom Modal and Trigger It by Entity Actions
Incase you need to place a custom modal that will be triggered by an entity action, there are two ways to do it: A quick one and an elaborate one.
Let's employ dependency injection to extend the functionality of `IdentityModule` and add a quick view action for the User entity. We will take a lazy-loaded approach.
### The Quick Solution
<img alt="Entity Action Extension Example: Custom Modal" src="./images/entity-action-extensions---custom-modal.gif" width="800px" style="max-width:100%">
1. Place your custom modal inside `AppComponent` template.
```html
<abp-modal [(visible)]="isModalOpen">
<ng-template #abpHeader>
<h3><!-- YOUR TITLE HERE --></h3>
</ng-template>
1. Create a folder at this path: `src/app/identity-extended`
<ng-template #abpBody>
<!-- YOUR CONTENT HERE -->
</ng-template>
<ng-template #abpFooter>
<button type="button" class="btn btn-secondary" #abpClose>
{%{{{ 'AbpIdentity::Cancel' | abpLocalization }}}%}
</button>
<!-- YOUR CONFIRMATION BUTTON HERE -->
</ng-template>
</abp-modal>
```
2. Add the following inside your `AppComponent` class:
```js
isModalOpen: boolean;
openModal(/* may take parameters */) {
/* and set things before showing the modal */
this.isModalOpen = true;
}
```
3. Add an entity action similar to this:
2. Add an entity action similar to this:
```js
const customModalAction = new EntityAction<IdentityUserDto>({
text: 'Custom Modal Action',
// src/app/identity-extended/entity-action-contributors.ts
import {
eIdentityComponents,
IdentityEntityActionContributors,
IdentityUserDto,
} from '@abp/ng.identity';
import { EntityAction, EntityActionList } from '@abp/ng.theme.shared/extensions';
import { IdentityExtendedComponent } from './identity-extended.component';
const quickViewAction = new EntityAction<IdentityUserDto>({
text: 'Quick View',
action: data => {
const component = data.getInjected(AppComponent);
component.openModal(/* you may pass parameters */);
const component = data.getInjected(IdentityExtendedComponent);
component.openUserQuickView(data.record);
},
});
```
That should work. However, there is a longer but lazy-loading solution, and we are going to use NGXS for it.
### The Elaborate Solution
export function customModalContributor(actionList: EntityActionList<IdentityUserDto>) {
actionList.addTail(quickViewAction);
}
Consider the modal will be displayed in the Identity module. How can we lazy-load it too?
export const identityEntityActionContributors: IdentityEntityActionContributors = {
// enum indicates the page to add contributors to
[eIdentityComponents.Users]: [
customModalContributor,
// You can add more contributors here
],
};
```
1. Create a folder called `identity-extended` inside your app folder.
2. Create a file called `identity-popups.store.ts` in it.
3. Insert the following code in the new file:
3. Create a parent component to the identity module.
```js
import { Action, Selector, State, StateContext } from '@ngxs/store';
// src/app/identity-extended/identity-extended.component.ts
export class ToggleIdentityPopup {
static readonly type = '[IdentityPopups] Toggle';
constructor(public readonly payload: boolean) {}
}
import { IdentityUserDto } from '@abp/ng.identity';
import { Component } from '@angular/core';
@State<IdentityPopupsStateModel>({
name: 'IdentityPopups',
defaults: {
isVisible: false,
},
@Component({
selector: 'app-identity-extended',
templateUrl: './identity-extended.component.html',
})
export class IdentityPopupsState {
@Selector()
static isVisible(state: IdentityPopupsStateModel) {
return state.isVisible;
}
export class IdentityExtendedComponent {
isUserQuickViewVisible: boolean;
user: IdentityUserDto;
@Action(ToggleIdentityPopup)
toggleModal(
context: StateContext<IdentityPopupsStateModel>,
{ payload }: ToggleIdentityPopup,
) {
context.patchState({ isVisible: payload });
openUserQuickView(record: IdentityUserDto) {
this.user = new Proxy(record, {
get: (target, prop) => target[prop] || '—',
});
this.isUserQuickViewVisible = true;
}
}
```
interface IdentityPopupsStateModel {
isVisible: boolean;
}
4. Add a router outlet and a modal to the parent component.
```html
<!-- src/app/identity-extended/identity-extended.component.html -->
<router-outlet></router-outlet>
<abp-modal [(visible)]="isUserQuickViewVisible">
<ng-template #abpHeader>
<h3>{%{{{ user.userName }}}%}</h3>
</ng-template>
<ng-template #abpBody>
<table class="table table-borderless">
<tbody>
<tr>
<th scope="row">{%{{{ 'AbpIdentity::DisplayName:Name' | abpLocalization }}}%}</th>
<td>{%{{{ user.name }}}%}</td>
</tr>
<tr>
<th scope="row">{%{{{ 'AbpIdentity::DisplayName:Surname' | abpLocalization }}}%}</th>
<td>{%{{{ user.surname }}}%}</td>
</tr>
<tr>
<th scope="row">{%{{{ 'AbpIdentity::EmailAddress' | abpLocalization }}}%}</th>
<td>{%{{{ user.email }}}%}</td>
</tr>
<tr>
<th scope="row">{%{{{ 'AbpIdentity::PhoneNumber' | abpLocalization }}}%}</th>
<td>{%{{{ user.phoneNumber }}}%}</td>
</tr>
</tbody>
</table>
</ng-template>
<ng-template #abpFooter>
<button type="button" class="btn btn-secondary" #abpClose>
{%{{{ 'AbpUi::Close' | abpLocalization }}}%}
</button>
</ng-template>
</abp-modal>
```
4. Create a file called `identity-extended.module.ts` in the same folder.
5. Insert the following code in the new file:
5. Add a module for the component and load `IdentityModule` as seen below:
```js
// src/app/identity-extended/identity-extended.module.ts
import { CoreModule } from '@abp/ng.core';
import { IdentityModule } from '@abp/ng.identity';
import { ThemeSharedModule } from '@abp/ng.theme.shared';
import { Component, NgModule } from '@angular/core';
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { NgxsModule, Select, Store } from '@ngxs/store';
import { Observable } from 'rxjs';
import { IdentityPopupsState, ToggleIdentityPopup } from './identity-popups.store';
@Component({
template: `
<router-outlet></router-outlet>
<router-outlet name="popup"></router-outlet>
`,
})
export class IdentityOutletComponent {}
@Component({
template: `
<abp-modal [visible]="isVisible$ | async" (disappear)="onDisappear()">
<ng-template #abpHeader>
<h3><!-- YOUR TITLE HERE --></h3>
</ng-template>
<ng-template #abpBody>
<!-- YOUR CONTENT HERE -->
</ng-template>
<ng-template #abpFooter>
<button type="button" class="btn btn-secondary" #abpClose>
{%{{{ 'AbpIdentity::Cancel' | abpLocalization }}}%}
</button>
<!-- YOUR CONFIRMATION BUTTON HERE -->
</ng-template>
</abp-modal>
`,
})
export class IdentityPopupsComponent {
@Select(IdentityPopupsState.isVisible)
isVisible$: Observable<boolean>;
constructor(private store: Store) {}
onDisappear() {
this.store.dispatch(new ToggleIdentityPopup(false));
}
}
import { identityEntityActionContributors } from './entity-action-contributors';
import { IdentityExtendedComponent } from './identity-extended.component';
@NgModule({
declarations: [IdentityPopupsComponent, IdentityOutletComponent],
imports: [
CoreModule,
ThemeSharedModule,
NgxsModule.forFeature([IdentityPopupsState]),
RouterModule.forChild([
{
path: '',
component: IdentityOutletComponent,
component: IdentityExtendedComponent,
children: [
{
path: '',
outlet: 'popup',
component: IdentityPopupsComponent,
},
{
path: '',
loadChildren: () => import('@volo/abp.ng.identity').then(m => m.IdentityModule),
loadChildren: () =>
IdentityModule.forLazy({
entityActionContributors: identityEntityActionContributors,
}),
},
],
},
]),
],
declarations: [IdentityExtendedComponent],
})
export class IdentityExtendedModule {}
```
6. Change the `identity` path in your `AppRoutingModule` to this:
6. Load `IdentityExtendedModule` instead of `IdentityModule` in your root routing module.
```js
{
path: 'identity',
loadChildren: () =>
import('./identity-extended/identity-extended.module').then(m => m.IdentityExtendedModule),
},
```
// src/app/app-routing.module.ts
7. Add an entity action similar to this:
```js
const customModalAction = new EntityAction<IdentityUserDto>({
text: 'Custom Modal Action',
action: data => {
const store = data.getInjected(Store);
store.dispatch(new ToggleIdentityPopup(true));
const routes: Routes = [
// other routes
{
path: 'identity',
loadChildren: () =>
import('./identity-extended/identity-extended.module')
.then(m => m.IdentityExtendedModule),
},
});
// other routes
];
```
It should now be working well with lazy-loading. The files are compact in the description to make it quicker to explain. You may split the files as you wish.
That's it. As you see, we reached the `IdentityExtendedComponent` through dependency injection and called one of its methods in our action. The specific user was also available via `data.record`, so we were able to display a summary view.
## API
@ -374,7 +332,7 @@ You may find a full example below.
```js
const options: EntityActionOptions<IdentityUserDto> = {
action: data => {
const component = data.getInjected(UsersComponent);
const component = data.getInjected(IdentityExtendedComponent);
component.unlock(data.record.id);
},
text: 'AbpIdentity::Unlock',

126
docs/en/UI/Angular/Page-Toolbar-Extensions.md

@ -4,7 +4,7 @@
Page toolbar extension system allows you to add a new action to the toolbar of a page. A "Click Me" action was added to the user management page below:
![Page Toolbar Extension Example: "Click Me!" Action](images/user-page-toolbar-extension-click-me-ng.png)
<img alt="Page Toolbar Extension Example: 'Click Me!' Action" src="./images/toolbar-action-extensions---click-me.gif" width="800px" style="max-width:100%">
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 also access to page data (the main record, usually an entity list) in your code. Additionally, you can pass in custom components instead of using the default button.
@ -17,10 +17,14 @@ In this example, we will add a "Click Me!" action and log `userName` of all user
The following code prepares a constant named `identityToolbarActionContributors`, ready to be imported and used in your root module:
```js
// toolbar-action-contributors.ts
// src/app/toolbar-action-contributors.ts
import { ToolbarActionList, ToolbarAction } from '@abp/ng.theme.shared/extensions';
import { IdentityToolbarActionContributors, IdentityUserDto } from '@volo/abp.ng.identity';
import {
eIdentityComponents,
IdentityToolbarActionContributors,
IdentityUserDto,
} from '@abp/ng.identity';
import { ToolbarAction, ToolbarActionList } from '@abp/ng.theme.shared/extensions';
const logUserNames = new ToolbarAction<IdentityUserDto[]>({
text: 'Click Me!',
@ -31,9 +35,7 @@ const logUserNames = new ToolbarAction<IdentityUserDto[]>({
// See ToolbarActionOptions in API section for all options
});
export function logUserNamesContributor(
actionList: ToolbarActionList<IdentityUserDto[]>
) {
export function logUserNamesContributor(actionList: ToolbarActionList<IdentityUserDto[]>) {
actionList.addHead(logUserNames);
}
@ -49,33 +51,30 @@ export const identityToolbarActionContributors: IdentityToolbarActionContributor
The list of actions, conveniently named as `actionList`, is a **doubly linked list**. That is why we have used the `addHead` method, which adds the given value to the beginning of the list. You may find [all available methods here](../Common/Utils/Linked-List.md).
> **Important Note:** AoT compilation does not support function calls in decorator metadata. This is why we have defined `logUserNamesContributor` as an exported function declaration here. Please do not forget exporting your contributor callbacks and forget about lambda functions (a.k.a. arrow functions). Please refer to [AoT metadata errors](https://angular.io/guide/aot-metadata-errors#function-calls-not-supported) for details.
### Step 2. Import and Use Toolbar Action Contributors
Import `identityToolbarActionContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below:
```js
// src/app/app-routing.module.ts
// other imports
import { identityToolbarActionContributors } from './toolbar-action-contributors';
const routes: Routes = [
// other routes
{
path: '',
component: DynamicLayoutComponent,
children: [
{
path: 'identity',
loadChildren: () =>
import('@volo/abp.ng.identity').then(m =>
m.IdentityModule.forLazy({
toolbarActionContributors: identityToolbarActionContributors,
}),
),
},
// other child routes
],
// other routes
}
path: 'identity',
loadChildren: () =>
import('@abp/ng.identity').then(m =>
m.IdentityModule.forLazy({
toolbarActionContributors: identityToolbarActionContributors,
})
),
},
// other routes
];
```
@ -85,22 +84,22 @@ That is it, `logUserNames` toolbar action will be added as the first action on t
In this example, we will add a custom "Click Me!" button and log `userName` of all users in the user management page of the [Identity Module](../../Modules/Identity.md) to the console.
<img alt="Page Toolbar Extension Example: Custom Component" src="./images/toolbar-action-extensions---custom-component.gif" width="800px" style="max-width:100%">
### Step 1. Create A Custom Component
We need to have a component before we can pass it to the toolbar action contributors:
```js
// click-me-button.component.ts
// src/app/click-me-button.component.ts
import { Component, Inject } from '@angular/core';
import { IdentityUserDto } from '@abp/ng.identity';
import { ActionData, EXTENSIONS_ACTION_DATA } from '@abp/ng.theme.shared/extensions';
import { IdentityUserDto } from '@volo/abp.ng.identity';
import { Component, Inject } from '@angular/core';
@Component({
selector: 'app-click-me-button',
template: `
<button class="btn btn-warning" (click)="handleClick()">Click Me!</button>
`,
template: `<button class="btn btn-warning" (click)="handleClick()">Click Me!</button>`,
})
export class ClickMeButtonComponent {
constructor(
@ -112,6 +111,7 @@ export class ClickMeButtonComponent {
this.data.record.forEach(user => console.log(user.userName));
}
}
```
Here, `EXTENSIONS_ACTION_DATA` token provides us the context from the page toolbar. Therefore, we are able to reach the page data via `record`, which is an array of users, i.e. `IdentityUserDto[]`.
@ -123,11 +123,14 @@ Here, `EXTENSIONS_ACTION_DATA` token provides us the context from the page toolb
The following code prepares a constant named `identityToolbarActionContributors`, ready to be imported and used in your root module. When `ToolbarComponent` is used instead of `ToolbarAction`, we can pass a component in:
```js
// toolbar-action-contributors.ts
// src/app/toolbar-action-contributors.ts
import {
eIdentityComponents,
IdentityToolbarActionContributors,
IdentityUserDto,
} from '@abp/ng.identity';
import { ToolbarActionList, ToolbarComponent } from '@abp/ng.theme.shared/extensions';
import { IdentityUserDto } from '@volo/abp.ng.identity';
import { IdentityToolbarActionContributors } from '@volo/abp.ng.identity/config';
import { ClickMeButtonComponent } from './click-me-button.component';
const logUserNames = new ToolbarComponent<IdentityUserDto[]>({
@ -135,9 +138,7 @@ const logUserNames = new ToolbarComponent<IdentityUserDto[]>({
// See ToolbarActionOptions in API section for all options
});
export function logUserNamesContributor(
actionList: ToolbarActionList<IdentityUserDto[]>
) {
export function logUserNamesContributor(actionList: ToolbarActionList<IdentityUserDto[]>) {
actionList.addHead(logUserNames);
}
@ -153,54 +154,35 @@ export const identityToolbarActionContributors: IdentityToolbarActionContributor
The list of actions, conveniently named as `actionList`, is a **doubly linked list**. That is why we have used the `addHead` method, which adds the given value to the beginning of the list. You may find [all available methods here](../Common/Utils/Linked-List.md).
> **Important Note 1:** AoT compilation does not support function calls in decorator metadata. This is why we have defined `logUserNamesContributor` as an exported function declaration here. Please do not forget exporting your contributor callbacks and forget about lambda functions (a.k.a. arrow functions). Please refer to [AoT metadata errors](https://angular.io/guide/aot-metadata-errors#function-calls-not-supported) for details.
> **Important Note 2:** Please use one of the following if Ivy is not enabled in your project. Otherwise, you will get an "Expression form not supported." error.
```js
export const identityToolbarActionContributors: IdentityToolbarActionContributors = {
'Identity.UsersComponent': [ logUserNamesContributor ],
};
/* OR */
const identityContributors: IdentityToolbarActionContributors = {};
identityContributors[eIdentityComponents.Users] = [ logUserNamesContributor ];
export const identityToolbarActionContributors = identityContributors;
```
### Step 3. Import and Use Toolbar Action Contributors
Import `identityToolbarActionContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below. If Ivy is not enabled in your project, do not forget putting `ClickMeButtonComponent` into `entryComponents`:
Import `identityToolbarActionContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below.
```js
// src/app/app-routing.module.ts
// other imports
import { identityToolbarActionContributors } from './toolbar-action-contributors';
const routes: Routes = [
// other routes
{
path: '',
component: DynamicLayoutComponent,
children: [
{
path: 'identity',
loadChildren: () =>
import('@volo/abp.ng.identity').then(m =>
m.IdentityModule.forLazy({
toolbarActionContributors: identityToolbarActionContributors,
}),
),
},
// other child routes
],
// other routes
}
path: 'identity',
loadChildren: () =>
import('@abp/ng.identity').then(m =>
m.IdentityModule.forLazy({
toolbarActionContributors: identityToolbarActionContributors,
})
),
},
// other routes
];
```
That is it, `logUserNames` toolbar action will be added as the first action on the page toolbar in the users page (`UsersComponent`) of the `IdentityModule` and it will be triggered by a custom button, i.e. `ClickMeButtonComponent`. Please note that **component projection is not limited to buttons** and you may use other UI components.
![Page Toolbar Extension Example: Custom "Click Me!" Button](images/user-page-toolbar-extension-custom-click-me-ng.png)
## How to Place a Custom Modal and Trigger It by Toolbar Actions
Please check the same topic in [entity action extensions document](Entity-Action-Extensions.md) and replace entity action with a toolbar action.

BIN
docs/en/UI/Angular/images/entity-action-extensions---click-me.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

BIN
docs/en/UI/Angular/images/entity-action-extensions---custom-modal.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

BIN
docs/en/UI/Angular/images/entity-prop-extensions---custom-cell.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 KiB

BIN
docs/en/UI/Angular/images/entity-prop-extensions---name-column.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 526 KiB

BIN
docs/en/UI/Angular/images/form-prop-extensions---birthday-field.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 490 KiB

BIN
docs/en/UI/Angular/images/toolbar-action-extensions---click-me.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

BIN
docs/en/UI/Angular/images/toolbar-action-extensions---custom-component.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

2
docs/en/UI/Blazor/Navigation-Menu.md

@ -137,7 +137,7 @@ var myService = context.ServiceProvider.GetRequiredService<IMyService>();
### The Administration Menu
There is a special menu item in the menu menu that is added by the ABP Framework: The *Administration* menu. It is typically used by the pre-built admin [application modules](../../Modules/Index.md):
There is a special menu item in the menu that is added by the ABP Framework: The *Administration* menu. It is typically used by the pre-built admin [application modules](../../Modules/Index.md):
![nav-main-menu-administration](../../images/nav-main-menu-administration.png)

56
docs/en/UI/Blazor/Page-Progress.md

@ -1,3 +1,57 @@
# Blazor UI: Page Progress
TODO
Page Progress is used to show a progress bar indicator on top of the page and to show to the user that currently a long running process is in the work.
By default you don't need to do anything to show the progress indicator, as all the work is done automatically by the ABP Framework internals. This means that all calls to the ABP backend (through your HTTP API) will activate page progress and show the loading indicator.
This doesn't mean that you don't have the control over it. On the contrary, if you want to show progress for your own processes, it is really easy to do. All you have to do is to use inject and use the `IUiPageProgressService`.
## Example
First, inject the `IUiPageProgressService` into your page/component.
```cs
@inject IUiPageProgressService pageProgressService
```
Next, invoke the `Go` method in `IUiPageProgressService`. It's that simple:
```cs
Task OnClick()
{
return pageProgressService.Go(null);
}
```
The previous example will show the progress with a default settings. If, for example you want to change the progress color you can override it by setting the options through the `Go` method.
```cs
Task OnClick()
{
return pageProgressService.Go(null, options =>
{
options.Type = UiPageProgressType.Warning;
});
}
```
## Breakdown
The first parameter of the `Go` needs a little explanation. In the previous example we have set it to `null` which means, once called it will show an _indeterminate_ indicator and will cycle the loading animation indefinitely, until we hide the progress. You also have the option of defining the actual percentage of the progress and the code is the same, just instead of sending it the `null` you will send it a number between `0` and `100`.
```cs
pageProgressService.Go(25)
```
### Valid values
1. `null` - show _indeterminate_ indicator
2. `>= 0` and `<= 100` - show the regular _percentage_ progress
### Hiding progress
To hide the progress just set the actual values to something other then the _Valid value_.
```cs
pageProgressService.Go(-1)
```

2
docs/en/docs-nav.json

@ -689,7 +689,7 @@
"items": [
{
"text": "SubmitButton",
"path": "UI/Blazor/SubmitButton.md"
"path": "UI/Blazor/Components/SubmitButton.md"
}
]
},

2
docs/zh-Hans/Blob-Storing-Aliyun.md

@ -55,7 +55,7 @@ Configure<AbpBlobStoringOptions>(options =>
* **RoleSessionName** ([NotNull]string): 用来标识临时访问凭证的名称,建议使用不同的应用程序用户来区分.
* **Policy** (string): 在扮演角色的时候额外添加的权限限制. 请参见[基于RAM Policy的权限控制](https://help.aliyun.com/document_detail/100680.html).
* **DurationSeconds** (int): 设置临时访问凭证的有效期,单位是s,最小为900,最大为3600.
* **ContainerName** (string): 你可以在aliyun中指定容器名称. 如果没有指定它将使用 `BlogContainerName` 属性定义的BLOB容器的名称(请参阅[BLOB存储文档](Blob-Storing.md)). 请注意Aliyun有一些**命名容器的规则**,容器名称必须是有效的DNS名称,[符合以下命名规则](https://help.aliyun.com/knowledge_detail/39668.html):
* **ContainerName** (string): 你可以在aliyun中指定容器名称. 如果没有指定它将使用 `BlobContainerName` 属性定义的BLOB容器的名称(请参阅[BLOB存储文档](Blob-Storing.md)). 请注意Aliyun有一些**命名容器的规则**,容器名称必须是有效的DNS名称,[符合以下命名规则](https://help.aliyun.com/knowledge_detail/39668.html):
* 只能包含小写字母,数字和短横线(-)
* 必须以小写字母和数字开头和结尾
* Bucket名称的长度限制在**3**到**63**个字符之间

2
docs/zh-Hans/Blob-Storing-Aws.md

@ -59,7 +59,7 @@ Configure<AbpBlobStoringOptions>(options =>
* **Region** (string): 服务的地区名称.
* **Policy** (string): JSON格式的IAM策略.
* **DurationSeconds** (int): 设置临时访问凭证的有效期,单位是s,最小为900,最大为129600.
* **ContainerName** (string): 你可以在Aws中指定容器名称. 如果没有指定它将使用 `BlogContainerName` 属性定义的BLOB容器的名称(请参阅[BLOB存储文档](Blob-Storing.md)). 请注意Aws有一些**命名容器的规则**,容器名称必须是有效的DNS名称,[符合以下命名规则](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html):
* **ContainerName** (string): 你可以在Aws中指定容器名称. 如果没有指定它将使用 `BlobContainerName` 属性定义的BLOB容器的名称(请参阅[BLOB存储文档](Blob-Storing.md)). 请注意Aws有一些**命名容器的规则**,容器名称必须是有效的DNS名称,[符合以下命名规则](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html):
* Bucket名称必须介于 3 到 63 个字符之间.
* Bucket名称只能由小写字母、数字、句点 (.) 和连字符 (-) 组成.
* Bucket名称必须以字母或数字开头和结尾.

2
docs/zh-Hans/Blob-Storing-Azure.md

@ -40,7 +40,7 @@ Configure<AbpBlobStoringOptions>(options =>
### 选项
* **ConnectionString** (string): 连接字符串包括应用程序在运行时使用共享密钥授权访问Azure存储帐户中的数据所需的授权信息. 请参考[Azure文档](https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string).
* **ContainerName** (string): 你可以在azure中指定容器名称. 如果没有指定它将使用 `BlogContainerName` 属性定义的BLOB容器的名称(请参阅[BLOB存储文档](Blob-Storing.md)). 请注意Azure有一些**命名容器的规则**,容器名称必须是有效的DNS名称,[符合以下命名规则](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names):
* **ContainerName** (string): 你可以在azure中指定容器名称. 如果没有指定它将使用 `BlobContainerName` 属性定义的BLOB容器的名称(请参阅[BLOB存储文档](Blob-Storing.md)). 请注意Azure有一些**命名容器的规则**,容器名称必须是有效的DNS名称,[符合以下命名规则](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names):
* 容器名称必须以字母或数字开头或结尾,并且只能包含字母,数字和破折号(-)字符.
* 每个破折号(-)必须紧跟在字母或数字之后;容器名称中不允许使用连续的破折号.
* 容器名称中的所有字母都必须**小写**.

2
docs/zh-Hans/Blob-Storing-Minio.md

@ -43,7 +43,7 @@ Configure<AbpBlobStoringOptions>(options =>
* **EndPoint** (string): 你的Minio对象存储服务的URL, 查看文档:https://docs.min.io/docs/dotnet-client-quickstart-guide.html
* **AccessKey** (string): Access key是唯一标识你的账户的用户ID,
* **SecretKey** (string): Access key是唯一标识你的账户的用户ID
* **BucketName** (string):你可以指定bucket名称,如果没有指定,将使用 `BlogContainerName` 属性定义的BLOB容器的名称(查阅[BLOB storing document](Blob-Storing.md)),MinIO完全兼容S3标准,所以有一些 **bucket命名规则**,必须符合[规则](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html):
* **BucketName** (string):你可以指定bucket名称,如果没有指定,将使用 `BlobContainerName` 属性定义的BLOB容器的名称(查阅[BLOB storing document](Blob-Storing.md)),MinIO完全兼容S3标准,所以有一些 **bucket命名规则**,必须符合[规则](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html):
* Bucket名称必须介于 3 到 63 个字符之间.
* Bucket名称只能由小写字母、数字、句点 (.) 和连字符 (-) 组成.
* Bucket名称必须以字母或数字开头和结尾.

10
docs/zh-Hans/Blob-Storing.md

@ -10,7 +10,7 @@ ABP框架为BLOB提供了抽象,并提供了一些可以轻松集成到的预构
* 你可以**轻松的更改**BLOB存储,而不用改变你的应用程序代码.
* 如果你想创建**可重用的应用程序模块**,无需假设BLOB的存储方式.
ABP BLOG存储系统兼容ABP框架其他功能,如[多租户](Multi-Tenancy.md).
ABP BLOB存储系统兼容ABP框架其他功能,如[多租户](Multi-Tenancy.md).
## BLOB 存储提供程序
@ -18,7 +18,7 @@ ABP框架已经有以下存储提供程序的实现;
* [File System](Blob-Storing-File-System.md):将BLOB作为标准文件存储在本地文件系统的文件夹中.
* [Database](Blob-Storing-Database.md): 将BLOB存储在数据库中.
* [Azure](Blob-Storing-Azure.md): 将BLOG存储在 [Azure BLOB storage](https://azure.microsoft.com/en-us/services/storage/blobs/)中.
* [Azure](Blob-Storing-Azure.md): 将BLOB存储在 [Azure BLOB storage](https://azure.microsoft.com/en-us/services/storage/blobs/)中.
* [Aliyun](Blob-Storing-Aliyun.md): 将BLOB存储在[Aliyun Storage Service](https://help.aliyun.com/product/31815.html)中.
* [Minio](Blob-Storing-Minio.md): 将BLOB存储在[MinIO Object storage](https://min.io/)中.
* [Aws](Blob-Storing-Aws.md): 将BLOB存储在[Amazon Simple Storage Service](https://aws.amazon.com/s3/)中.
@ -95,9 +95,9 @@ namespace AbpDemo
### 读取/获取 BLOB
* `GetAsync`: 返回给定BLOB名称可用于读取BLOB内容的 `Stream` 对象. 使用后始终要**dispose流**. 如果找不到具有给定名称的BLOB,则抛出异常.
* `GetOrNullAsync`: 与 `GetAsync` 方法相反,如果未找到给定名称的BLOG,则返回 `null`.
* `GetOrNullAsync`: 与 `GetAsync` 方法相反,如果未找到给定名称的BLOB,则返回 `null`.
* `GetAllBytesAsync`: 返回 `byte[]` 而不是 `Stream`. 如果找不到具有给定名称的BLOB,则抛出异常.
* `GetAllBytesOrNullAsync`: 与 `GetAllBytesAsync` 方法相反,如果未找到给定名称的BLOG,则返回 `null`.
* `GetAllBytesOrNullAsync`: 与 `GetAllBytesAsync` 方法相反,如果未找到给定名称的BLOB,则返回 `null`.
### 删除 BLOB
@ -300,7 +300,7 @@ Configure<AbpBlobStoringOptions>(options =>
## BLOB 存储 vs 文件管理系统
注意BLOB存储不是一个文件管理系统. 它是一个用于保存,获取和删除命名BLOG的低级别系统. 它不提供目录那样的层次结构,这是典型文件系统所期望的.
注意BLOB存储不是一个文件管理系统. 它是一个用于保存,获取和删除命名BLOB的低级别系统. 它不提供目录那样的层次结构,这是典型文件系统所期望的.
如果你想创建文件夹并在文件夹之间移动文件,为文件分配权限并在用户之间共享文件,那么你需要在BLOB存储系统上实现你自己的应用程序.

1
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor

@ -21,4 +21,5 @@
<UiMessageAlert />
<UiNotificationAlert />
<UiPageProgress />
</div>

13
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs

@ -1,6 +1,5 @@
using System;
using System.Globalization;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using JetBrains.Annotations;
@ -8,7 +7,9 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.AspNetCore.Components.WebAssembly;
using Volo.Abp.AspNetCore.Components.WebAssembly.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc.Client;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Modularity;
namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting
@ -39,13 +40,17 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting
return application;
}
public async static Task InitializeAsync(
public static async Task InitializeAsync(
[NotNull] this IAbpApplicationWithExternalServiceProvider application,
[NotNull] IServiceProvider serviceProvider)
{
Check.NotNull(application, nameof(application));
Check.NotNull(serviceProvider, nameof(serviceProvider));
var serviceProviderAccessor = (WebAssemblyClientScopeServiceProviderAccessor)
serviceProvider.GetRequiredService<IClientScopeServiceProviderAccessor>();
serviceProviderAccessor.ServiceProvider = serviceProvider;
application.Initialize(serviceProvider);
using (var scope = serviceProvider.CreateScope())
@ -55,7 +60,7 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting
}
}
private async static Task InitializeModulesAsync(IServiceProvider serviceProvider)
private static async Task InitializeModulesAsync(IServiceProvider serviceProvider)
{
foreach (var service in serviceProvider.GetServices<IAsyncInitialize>())
{
@ -63,7 +68,7 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting
}
}
private async static Task SetCurrentLanguageAsync(IServiceScope scope)
private static async Task SetCurrentLanguageAsync(IServiceScope scope)
{
var configurationClient = scope.ServiceProvider.GetRequiredService<ICachedApplicationConfigurationClient>();
var utilsService = scope.ServiceProvider.GetRequiredService<IAbpUtilsService>();

29
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorClientHttpMessageHandler.cs

@ -4,8 +4,9 @@ using System.Net.Http.Headers;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.JSInterop;
using Volo.Abp.AspNetCore.Components.Progression;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Components.WebAssembly
@ -18,6 +19,8 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly
private readonly NavigationManager _navigationManager;
private readonly IUiPageProgressService _uiPageProgressService;
private const string AntiForgeryCookieName = "XSRF-TOKEN";
private const string AntiForgeryHeaderName = "RequestVerificationToken";
@ -25,19 +28,33 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly
public AbpBlazorClientHttpMessageHandler(
IJSRuntime jsRuntime,
ICookieService cookieService,
NavigationManager navigationManager)
NavigationManager navigationManager,
IClientScopeServiceProviderAccessor clientScopeServiceProviderAccessor)
{
_jsRuntime = jsRuntime;
_cookieService = cookieService;
_navigationManager = navigationManager;
_uiPageProgressService = clientScopeServiceProviderAccessor.ServiceProvider.GetRequiredService<IUiPageProgressService>();
}
protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
await SetLanguageAsync(request, cancellationToken);
await SetAntiForgeryTokenAsync(request);
try
{
await _uiPageProgressService.Go(null, options =>
{
options.Type = UiPageProgressType.Info;
});
await SetLanguageAsync(request, cancellationToken);
await SetAntiForgeryTokenAsync(request);
return await base.SendAsync(request, cancellationToken);
return await base.SendAsync(request, cancellationToken);
}
finally
{
await _uiPageProgressService.Go(-1);
}
}
private async Task SetLanguageAsync(HttpRequestMessage request, CancellationToken cancellationToken)

12
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/DependencyInjection/WebAssemblyClientScopeServiceProviderAccessor.cs

@ -0,0 +1,12 @@
using System;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Components.WebAssembly.DependencyInjection
{
public class WebAssemblyClientScopeServiceProviderAccessor :
IClientScopeServiceProviderAccessor,
ISingletonDependency
{
public IServiceProvider ServiceProvider { get; set; }
}
}

21
framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/IUiPageProgressService.cs

@ -0,0 +1,21 @@
using System;
using System.Threading.Tasks;
namespace Volo.Abp.AspNetCore.Components.Progression
{
public interface IUiPageProgressService
{
/// <summary>
/// An event raised after the notification is received.
/// </summary>
public event EventHandler<UiPageProgressEventArgs> ProgressChanged;
/// <summary>
/// Sets the progress percentage.
/// </summary>
/// <param name="percentage">Value of the progress from 0 to 100, or null for indeterminate progress.</param>
/// <param name="options">Additional options.</param>
/// <returns>Awaitable task.</returns>
Task Go(int? percentage, Action<UiPageProgressOptions> options = null);
}
}

16
framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/NullUiPageProgressService.cs

@ -0,0 +1,16 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Components.Progression
{
public class NullUiPageProgressService : IUiPageProgressService, ISingletonDependency
{
public event EventHandler<UiPageProgressEventArgs> ProgressChanged;
public Task Go(int? percentage, Action<UiPageProgressOptions> options = null)
{
return Task.CompletedTask;
}
}
}

17
framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/UiPageProgressEventArgs.cs

@ -0,0 +1,17 @@
using System;
namespace Volo.Abp.AspNetCore.Components.Progression
{
public class UiPageProgressEventArgs : EventArgs
{
public UiPageProgressEventArgs(int? percentage, UiPageProgressOptions options)
{
Percentage = percentage;
Options = options;
}
public int? Percentage { get; }
public UiPageProgressOptions Options { get; }
}
}

13
framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/UiPageProgressOptions.cs

@ -0,0 +1,13 @@
namespace Volo.Abp.AspNetCore.Components.Progression
{
/// <summary>
/// Options to override page progress appearance.
/// </summary>
public class UiPageProgressOptions
{
/// <summary>
/// Type or color, of the page progress.
/// </summary>
public UiPageProgressType Type { get; set; }
}
}

11
framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/UiPageProgressType.cs

@ -0,0 +1,11 @@
namespace Volo.Abp.AspNetCore.Components.Progression
{
public enum UiPageProgressType
{
Default,
Info,
Success,
Warning,
Error,
}
}

4
framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/AbpRequestLocalizationMiddleware.cs

@ -23,10 +23,10 @@ namespace Microsoft.AspNetCore.RequestLocalization
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
var middleware = new RequestLocalizationMiddleware(
next,
new OptionsWrapper<RequestLocalizationOptions>(await _requestLocalizationOptionsProvider.GetLocalizationOptionsAsync()), _loggerFactory
new OptionsWrapper<RequestLocalizationOptions>(await _requestLocalizationOptionsProvider.GetLocalizationOptionsAsync()),
_loggerFactory
);
await middleware.Invoke(context);

17
framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/AbpRequestLocalizationOptions.cs

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
namespace Microsoft.AspNetCore.RequestLocalization
{
public class AbpRequestLocalizationOptions
{
public List<Func<IServiceProvider, RequestLocalizationOptions, Task>> RequestLocalizationOptionConfigurators { get; }
public AbpRequestLocalizationOptions()
{
RequestLocalizationOptionConfigurators = new List<Func<IServiceProvider, RequestLocalizationOptions, Task>>();
}
}
}

8
framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs

@ -7,6 +7,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Localization;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Localization;
using Volo.Abp.Settings;
@ -67,6 +68,13 @@ namespace Microsoft.AspNetCore.RequestLocalization
.ToArray()
};
foreach (var configurator in serviceScope.ServiceProvider
.GetRequiredService<IOptions<AbpRequestLocalizationOptions>>()
.Value.RequestLocalizationOptionConfigurators)
{
await configurator(serviceScope.ServiceProvider, options);
}
_optionsAction?.Invoke(options);
_requestLocalizationOptions = options;
}

33
framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/DependencyInjection/HttpContextClientScopeServiceProviderAccessor.cs

@ -0,0 +1,33 @@
using System;
using Microsoft.AspNetCore.Http;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.DependencyInjection
{
public class HttpContextClientScopeServiceProviderAccessor :
IClientScopeServiceProviderAccessor,
ISingletonDependency
{
public IServiceProvider ServiceProvider
{
get
{
var httpContext = _httpContextAccessor.HttpContext;
if (httpContext == null)
{
throw new AbpException("HttpContextClientScopeServiceProviderAccessor should only be used in a web request scope!");
}
return httpContext.RequestServices;
}
}
private readonly IHttpContextAccessor _httpContextAccessor;
public HttpContextClientScopeServiceProviderAccessor(
IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
}
}

3
framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs

@ -8,15 +8,12 @@ using JetBrains.Annotations;
using Localization.Resources.AbpUi;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Localization;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.AspNetCore.Components;
using Volo.Abp.AspNetCore.Components.WebAssembly;
using Volo.Abp.Authorization;
using Volo.Abp.BlazoriseUI.Components;
using Volo.Abp.ObjectMapping;
namespace Volo.Abp.BlazoriseUI
{

32
framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiPageProgressService.cs

@ -0,0 +1,32 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Components.Progression;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.BlazoriseUI
{
[Dependency(ReplaceServices = true)]
public class BlazoriseUiPageProgressService : IUiPageProgressService,
IScopedDependency
{
/// <summary>
/// An event raised after the notification is received.
/// </summary>
public event EventHandler<UiPageProgressEventArgs> ProgressChanged;
public Task Go(int? percentage, Action<UiPageProgressOptions> options = null)
{
var uiPageProgressOptions = CreateDefaultOptions();
options?.Invoke(uiPageProgressOptions);
ProgressChanged?.Invoke(this, new UiPageProgressEventArgs(percentage, uiPageProgressOptions));
return Task.CompletedTask;
}
protected virtual UiPageProgressOptions CreateDefaultOptions()
{
return new UiPageProgressOptions();
}
}
}

1
framework/src/Volo.Abp.BlazoriseUI/Components/UiPageProgress.razor

@ -0,0 +1 @@
<PageProgress @ref="@PageProgressRef" Visible="@Visible" Color="@Color" />

58
framework/src/Volo.Abp.BlazoriseUI/Components/UiPageProgress.razor.cs

@ -0,0 +1,58 @@
using System;
using Blazorise;
using Microsoft.AspNetCore.Components;
using Volo.Abp.AspNetCore.Components.Progression;
namespace Volo.Abp.BlazoriseUI.Components
{
public partial class UiPageProgress : ComponentBase, IDisposable
{
protected PageProgress PageProgressRef { get; set; }
protected int? Percentage { get; set; }
protected bool Visible { get; set; }
protected Color Color { get; set; }
[Inject] protected IUiPageProgressService UiPageProgressService { get; set; }
protected override void OnInitialized()
{
base.OnInitialized();
UiPageProgressService.ProgressChanged += OnProgressChanged;
}
private async void OnProgressChanged(object sender, UiPageProgressEventArgs e)
{
Percentage = e.Percentage;
Visible = e.Percentage == null || (e.Percentage >= 0 && e.Percentage <= 100);
Color = GetColor(e.Options.Type);
await PageProgressRef.SetValueAsync(e.Percentage);
await InvokeAsync(StateHasChanged);
}
public virtual void Dispose()
{
if (UiPageProgressService != null)
{
UiPageProgressService.ProgressChanged -= OnProgressChanged;
}
}
protected virtual Color GetColor(UiPageProgressType pageProgressType)
{
return pageProgressType switch
{
UiPageProgressType.Info => Color.Info,
UiPageProgressType.Success => Color.Success,
UiPageProgressType.Warning => Color.Warning,
UiPageProgressType.Error => Color.Danger,
_ => Color.None,
};
}
}
}

6
framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj

@ -12,9 +12,9 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Blazorise" Version="0.9.3-preview3" />
<PackageReference Include="Blazorise.DataGrid" Version="0.9.3-preview3" />
<PackageReference Include="Blazorise.Snackbar" Version="0.9.3-preview3" />
<PackageReference Include="Blazorise" Version="0.9.3-preview4" />
<PackageReference Include="Blazorise.DataGrid" Version="0.9.3-preview4" />
<PackageReference Include="Blazorise.Snackbar" Version="0.9.3-preview4" />
</ItemGroup>
</Project>

1
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs

@ -40,6 +40,7 @@ namespace Volo.Abp.Cli
options.Commands["translate"] = typeof(TranslateCommand);
options.Commands["build"] = typeof(BuildCommand);
options.Commands["bundle"] = typeof(BundleCommand);
options.Commands["create-migration-and-run-migrator"] = typeof(CreateMigrationAndRunMigrator);
});
}
}

61
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CreateMigrationAndRunMigrator.cs

@ -0,0 +1,61 @@
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Cli.Commands
{
public class CreateMigrationAndRunMigrator : IConsoleCommand, ITransientDependency
{
public virtual async Task ExecuteAsync(CommandLineArgs commandLineArgs)
{
if (commandLineArgs.Target.IsNullOrEmpty())
{
throw new CliUsageException(
"DbMigrations folder path is missing!"
);
}
var dbMigratorProjectPath = GetDbMigratorProjectPath(commandLineArgs.Target);
if (dbMigratorProjectPath == null)
{
throw new Exception("DbMigrator is not found!");
}
var output = CmdHelper.RunCmdAndGetOutput("cd \"" + commandLineArgs.Target + "\" && dotnet ef migrations add Initial -s " + dbMigratorProjectPath);
if (output.Contains("Done.") && output.Contains("To undo this action") && output.Contains("ef migrations remove")) // Migration added successfully
{
CmdHelper.RunCmd("cd \"" + Path.GetDirectoryName(dbMigratorProjectPath) + "\" && dotnet run");
}
}
private string GetDbMigratorProjectPath(string dbMigrationsFolderPath)
{
var srcFolder = Directory.GetParent(dbMigrationsFolderPath);
var dbMigratorFolderPath = Directory.GetDirectories(srcFolder.FullName).FirstOrDefault(d => d.EndsWith(".DbMigrator"));
if (dbMigratorFolderPath == null)
{
return null;
}
return Directory.GetFiles(dbMigratorFolderPath).FirstOrDefault(f => f.EndsWith(".csproj"));
}
public string GetUsageInfo()
{
return string.Empty;
}
public string GetShortDescription()
{
return string.Empty;
}
}
}

9
framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IClientScopeServiceProviderAccessor.cs

@ -0,0 +1,9 @@
using System;
namespace Volo.Abp.DependencyInjection
{
public interface IClientScopeServiceProviderAccessor
{
IServiceProvider ServiceProvider { get; }
}
}

7
framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingJsFuncHelper.cs

@ -123,10 +123,9 @@ namespace Volo.Abp.Http.ProxyScripting.Generators
sb.AppendLine("{");
foreach (var prm in parameters)
{
sb.AppendLine($"{new string(' ', indent)} '{prm.Name}': {GetParamNameInJsFunc(prm)}");
}
sb.AppendLine(parameters
.Select(prm => $"{new string(' ', indent)} '{prm.Name}': {GetParamNameInJsFunc(prm)}")
.JoinAsString(", " + Environment.NewLine));
sb.Append(new string(' ', indent) + "}");

5
framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ConnectionPool.cs

@ -22,8 +22,7 @@ namespace Volo.Abp.RabbitMQ
public virtual IConnection Get(string connectionName = null)
{
connectionName = connectionName
?? RabbitMqConnections.DefaultConnectionName;
connectionName ??= RabbitMqConnections.DefaultConnectionName;
return Connections.GetOrAdd(
connectionName,
@ -58,4 +57,4 @@ namespace Volo.Abp.RabbitMQ
Connections.Clear();
}
}
}
}

6
framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqConnections.cs

@ -9,7 +9,7 @@ namespace Volo.Abp.RabbitMQ
public class RabbitMqConnections : Dictionary<string, ConnectionFactory>
{
public const string DefaultConnectionName = "Default";
[NotNull]
public ConnectionFactory Default
{
@ -19,7 +19,7 @@ namespace Volo.Abp.RabbitMQ
public RabbitMqConnections()
{
Default = new ConnectionFactory();
Default = new ConnectionFactory() { DispatchConsumersAsync = true };
}
public ConnectionFactory GetOrDefault(string connectionName)
@ -32,4 +32,4 @@ namespace Volo.Abp.RabbitMQ
return Default;
}
}
}
}

23
framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs

@ -143,10 +143,10 @@ namespace Volo.Abp.RabbitMQ
try
{
var channel = ConnectionPool
Channel = ConnectionPool
.Get(ConnectionName)
.CreateModel();
channel.ExchangeDeclare(
Channel.ExchangeDeclare(
exchange: Exchange.ExchangeName,
type: Exchange.Type,
durable: Exchange.Durable,
@ -154,7 +154,7 @@ namespace Volo.Abp.RabbitMQ
arguments: Exchange.Arguments
);
channel.QueueDeclare(
Channel.QueueDeclare(
queue: Queue.QueueName,
durable: Queue.Durable,
exclusive: Queue.Exclusive,
@ -162,19 +162,14 @@ namespace Volo.Abp.RabbitMQ
arguments: Queue.Arguments
);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += async (model, basicDeliverEventArgs) =>
{
await HandleIncomingMessageAsync(channel, basicDeliverEventArgs);
};
var consumer = new AsyncEventingBasicConsumer(Channel);
consumer.Received += HandleIncomingMessageAsync;
channel.BasicConsume(
Channel.BasicConsume(
queue: Queue.QueueName,
autoAck: false,
consumer: consumer
);
Channel = channel;
}
catch (Exception ex)
{
@ -183,16 +178,16 @@ namespace Volo.Abp.RabbitMQ
}
}
protected virtual async Task HandleIncomingMessageAsync(IModel channel, BasicDeliverEventArgs basicDeliverEventArgs)
protected virtual async Task HandleIncomingMessageAsync(object sender, BasicDeliverEventArgs basicDeliverEventArgs)
{
try
{
foreach (var callback in Callbacks)
{
await callback(channel, basicDeliverEventArgs);
await callback(Channel, basicDeliverEventArgs);
}
channel.BasicAck(basicDeliverEventArgs.DeliveryTag, multiple: false);
Channel.BasicAck(basicDeliverEventArgs.DeliveryTag, multiple: false);
}
catch (Exception ex)
{

1
framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateRenderer.cs

@ -144,6 +144,7 @@ namespace Volo.Abp.TextTemplating
}
context.PushGlobal(scriptObject);
context.PushCulture(System.Globalization.CultureInfo.CurrentCulture);
return context;
}

15
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/LocalizationTestController.cs

@ -0,0 +1,15 @@
using System.Globalization;
using Microsoft.AspNetCore.Mvc;
namespace Volo.Abp.AspNetCore.Mvc.Localization
{
[Route("api/LocalizationTestController")]
public class LocalizationTestController : AbpController
{
[HttpGet]
public string Culture()
{
return CultureInfo.CurrentCulture.Name + ":" + CultureInfo.CurrentUICulture.Name;
}
}
}

44
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/LocalizationTestController_Tests.cs

@ -0,0 +1,44 @@
using System.Net;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.RequestLocalization;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Primitives;
using Shouldly;
using Xunit;
namespace Volo.Abp.AspNetCore.Mvc.Localization
{
public class LocalizationTestController_Tests : AspNetCoreMvcTestBase
{
class TestRequestCultureProvider : RequestCultureProvider
{
public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
{
return Task.FromResult(new ProviderCultureResult((StringSegment) "tr", (StringSegment) "hu"));
}
}
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
{
services.Configure<AbpRequestLocalizationOptions>(options =>
{
options.RequestLocalizationOptionConfigurators.Add((serviceProvider, localizationOptions) =>
{
localizationOptions.RequestCultureProviders.Insert(0, new TestRequestCultureProvider());
return Task.CompletedTask;
});
});
}
[Fact]
public async Task TestRequestCultureProvider_Test()
{
var response = await GetResponseAsync("api/LocalizationTestController", HttpStatusCode.OK);
var resultAsString = await response.Content.ReadAsStringAsync();
resultAsString.ToLower().ShouldBe("tr:hu");
}
}
}

2
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.1.0-rc.2",
"@abp/aspnetcore.mvc.ui.theme.shared": "^4.1.0",
"highlight.js": "^9.13.1"
},
"devDependencies": {}

224
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.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0-rc.2.tgz#d64cea1e504bcd3a08a1819025d40f3f84f0aadc"
integrity sha512-A/DRLwtJO7YCdqAgSF84wNRKjvGEQvcBocIwRxXCJEe3drxMoSwkAGjXQlxIYWZKdYbYUWDTjil2Mvwf91GUqg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0-rc.2"
"@abp/bootstrap" "~4.1.0-rc.2"
"@abp/bootstrap-datepicker" "~4.1.0-rc.2"
"@abp/datatables.net-bs4" "~4.1.0-rc.2"
"@abp/font-awesome" "~4.1.0-rc.2"
"@abp/jquery-form" "~4.1.0-rc.2"
"@abp/jquery-validation-unobtrusive" "~4.1.0-rc.2"
"@abp/lodash" "~4.1.0-rc.2"
"@abp/luxon" "~4.1.0-rc.2"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0-rc.2"
"@abp/select2" "~4.1.0-rc.2"
"@abp/sweetalert" "~4.1.0-rc.2"
"@abp/timeago" "~4.1.0-rc.2"
"@abp/toastr" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0-rc.2.tgz#54bf30def590e6d25fc35f77253888f3d9f74b9c"
integrity sha512-eOh5IBn4eNAjj2i6tlLRIV/r61Ef7+Z3PNvGgdml/XCo50el4G9XE7shxuGOY+MaFMfmsST2tcJlO9iAo9n2Yw==
"@abp/aspnetcore.mvc.ui.theme.shared@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0.tgz#40ef6d20a83a8e700179be7f3989c8d5135808d0"
integrity sha512-UdT3XCUMEKguB1w7qF4TO1ClayWn63oiP7wnOUmIg+O1EdKTHUBYfztle4Qb/aqtzjHoZBsOnMZH/KOyQKejDg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0"
"@abp/bootstrap" "~4.1.0"
"@abp/bootstrap-datepicker" "~4.1.0"
"@abp/datatables.net-bs4" "~4.1.0"
"@abp/font-awesome" "~4.1.0"
"@abp/jquery-form" "~4.1.0"
"@abp/jquery-validation-unobtrusive" "~4.1.0"
"@abp/lodash" "~4.1.0"
"@abp/luxon" "~4.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0"
"@abp/select2" "~4.1.0"
"@abp/sweetalert" "~4.1.0"
"@abp/timeago" "~4.1.0"
"@abp/toastr" "~4.1.0"
"@abp/aspnetcore.mvc.ui@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0.tgz#c23ba554270a9534ac29a7e7ca8ab1ed0dc1cc7b"
integrity sha512-CaPVi8dKLD0/7zrsCdi3hA1alkUKVE3jVoUa2bl0mrBg30Xzu+IDAu6aIWFXOCnIX8YthejhA2Wtn4knbTOB4g==
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.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0-rc.2.tgz#d3fe863222a11771d366b1a3c246aaf34df94081"
integrity sha512-vn2xWAK3xqo5fMZJ9dOAZZmL+ZUnzZZNh3lF6uA97wTN/SbePlmHBYJpsCKIxOwbJS2HCvekHGJN/Ps4oEjlbw==
"@abp/bootstrap-datepicker@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0.tgz#5c97fba78e56ba90820014a13e4c2d394d27332f"
integrity sha512-5XDW/Y2Gu1SgIm/tyRuo6vwcJdpFWIEnqDJ+0wjdOvWl3a+HnQTDya5g74mCmEBfYQgYDw8Wz8ovChOOzExh7Q==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0-rc.2.tgz#b5132cf4c4c92fe833823cf2b91ab1b0167b0ecf"
integrity sha512-SsWEV0DveBIHiG051E6aBB371D15QIsGeo+POFhvQUvrlmzMBlFCAlmH0ef8w1n+3M3C37irCgEGKctt2pbcxQ==
"@abp/bootstrap@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0.tgz#50ac670e319a60a985109e96302eed3e46d36afe"
integrity sha512-4lFrbaNPYRa45oH/D+fFUSmgD/OdSoCmHXvSdG2ye6+wyl6gy4JRfjjTOFmwpsyOWJdPMJSV6CARCSSsfeaItA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/core@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0-rc.2.tgz#d306106a53fa56109751be0099785c94f43be56f"
integrity sha512-b0mOYSz8hNgZ/hBeYg8hkthJgE8CLyHNa2NcythPoIW8RR5qHmDtGoFnuFovLvLk7r+M4NWyxXRKEshSszIPyA==
"@abp/core@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0.tgz#6bdfa378d44cbf8f611d52dddf0915e5bbc188d5"
integrity sha512-HXkKCfh8+Yc9iVBsZy7eSoQbkBSdV1QTRAF8+cPgbEpU4x4WlUOy61xqb2pSLFzX9nSma83WhdDyQkzWDBTRZQ==
dependencies:
"@abp/utils" "^4.1.0-rc.2"
"@abp/utils" "^4.1.0"
"@abp/datatables.net-bs4@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0-rc.2.tgz#99aa1fbad91939fc23265324a3d8a45d0c1e5a7a"
integrity sha512-Y9UyqniOkx5DJO+2GGurnQE1yfRmGaQ3y7V07gKWRq+gHLUhE+vfgOLVpGM6ufdTIbLvVw5Ng+3gfOmPlUnpxg==
"@abp/datatables.net-bs4@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0.tgz#c28097b82f62b236d6f2578d7148128914eb5cd8"
integrity sha512-/fM/3Q/yXJaPsXGKIOZBgihxGLZ/T+n+6wguFeEypsAXCJ4MfpcRZ/eFPvVlBmmc/PVIdE8xtj5rnH9+/2KHWg==
dependencies:
"@abp/datatables.net" "~4.1.0-rc.2"
"@abp/datatables.net" "~4.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0-rc.2.tgz#1a134688259d32187d822d8a49c7a68b4cc226c7"
integrity sha512-9o5g8s7ZTlThd1FMFmO7wS+MxmXgUMmiWx7Hwara9ypfJPd0vanz10bQAdTpLiDy/aa0tUmz0xOVj73yvBJm9Q==
"@abp/datatables.net@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0.tgz#a037fdae4beb9805e8eea71f086573eed4fd3c92"
integrity sha512-OZogC3UEvTSyas+VcxffggQ8U2fi399Ka+++4p+oXCPGykDLU1EKOSA/CToiu9uYNYJQ3125SjRZSOJD5h/ukg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
datatables.net "^1.10.21"
"@abp/font-awesome@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0-rc.2.tgz#ecf490861c09250cf61611ac74cec5ab4392e807"
integrity sha512-6yAsf/ee2hdrHHUACql8c3gY54Hd7YAK2olHymyc3Io2hhK2VxXRc2W2oRSwbQ9GsSE+XDrEVtjIR64nBseTeg==
"@abp/font-awesome@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0.tgz#a95f8df5f7e3695aaf05e3eab9f3087f4017d7e9"
integrity sha512-Zc4mPp740ACe10ollWez4qNg2QnM/AexDkF3pkxYNb1B9J4Fb8H7SefOOtMRdRgHK+sEe5vrPfIs8//gTf4xeQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0-rc.2.tgz#76dff67a3fe6e6ad7bd60bb909de93c09966cc0a"
integrity sha512-LGafwxyRYUbHQlJ9pPbYdkVqzdT/y1Fp4Nr4C3W5jxsJuaSICl0RPkRHIPALeoqbpEWuj6dVep6ZuO9hhxBzNw==
"@abp/jquery-form@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0.tgz#b773c4f4619c3731c781993bba59a1cf38357918"
integrity sha512-7Mio+ehj7M2qt3oOyDBi97yNg1ip6BZiUpHkMtmPc/OxdnxpOZV9tZHyhbsoZFYTu1dUSmrpY6HKY0zibohyBQ==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0-rc.2.tgz#1f1d395cfa47740d47303ff512592ff1993f9e13"
integrity sha512-0LXWvgfyLHVw7qRVOmY0rfVlq+yJq/nhbcVoYK+QbmKnrFu+KZg0KNMOD8wTXs8mZ1EKGQpoQKWxImtCnGrV/A==
"@abp/jquery-validation-unobtrusive@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0.tgz#954ce53a46475c09056d789eba761568482ea8c9"
integrity sha512-diykqQiGzowYDpsG9PMd3ipeXFrilRQiHQX2mglBf+FNKMocp7LBAIeD2INkiObczZfIKkoqu7WCRqb1bl5uKg==
dependencies:
"@abp/jquery-validation" "~4.1.0-rc.2"
"@abp/jquery-validation" "~4.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0-rc.2.tgz#ad4b464fd0133eab8d08c781c7d7c4e00bc4918d"
integrity sha512-iLTobfwqDk7iiQxvv5UowxOKywsh/77VlAVktstnFG3N3Y73+JYKzM0mGM/j4zM1OrjbF9/cnPnDVX7bATPz9w==
"@abp/jquery-validation@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0.tgz#29cffb21270c52758804cf0d3f5b6e83b327047d"
integrity sha512-JrDcejGKz33LeNMn3+DguzDd8XN6LXlceffMc8jz4zYvtb+NqwUn7NFvH3gnKfNKBc8V9cQIHxQpYQa8luYcsA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0-rc.2.tgz#0f64cad5b1ae3e47d2344e5fb30c347b89d6d2bb"
integrity sha512-YubZwMJIN+UcfxfUlt3usfcLMG9WcXNpemUsdBtlKNzti562KZMIHPFLRL+DsiqvzZ74h2PxSWWsxS42Z7z0Yw==
"@abp/jquery@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0.tgz#3c021d24eb5ef7fe198da8982657075556556701"
integrity sha512-1HLjkxj5EudcoxZ9CVqsP0tgKwLQBs5KI9vnnW9I9pco6fIf1Q2PT+TZZywOZ3ftkYfMp90PF+A5IL/JfovnpQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
jquery "~3.5.1"
"@abp/lodash@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0-rc.2.tgz#9281c641ab7b7b33e7acf12815dc461e7ae967b9"
integrity sha512-RqdekrAyLPaLNJddmrq89EdrI1xg4296tOafFLHvirgRWisJTIa9bflTOwMwEg9FNdLJgA0zHi4WdAMer0qZdA==
"@abp/lodash@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0.tgz#e605644ba745813a2937b24f3b9d2ad86b20dec9"
integrity sha512-jUjua8iZIE5P/AELI/nffS09IorBRM/Jfq6agCOX6Qg7d8od66B9gV727mTuaMd9ZW65S1wW5+zMJhm5gy7Qpg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
lodash "^4.17.15"
"@abp/luxon@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0-rc.2.tgz#78fc1cf651d7c19b87a31823cd3ce68961d6b1e6"
integrity sha512-U4e9uGZlg9xj9tBNP337v3wiaSR6qxWsBgh/duQGWrqV+75LlQjYcZaPoXDidUUS6U6epDSR2pc2T39rahcgSQ==
"@abp/luxon@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0.tgz#12c9b6eb2a87e0ebe7df58bcbd5f38211ca62e81"
integrity sha512-gc8DAZHa+fcnDGWGQHmI8Tllr+QzHAZejrwoVSRiRX+Oebf67sCEDdbwB8yWeEHSa3MbpPtm7I1aTc/+dQI8Dg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0-rc.2.tgz#36553e71052cad9734e0c9b2c65759e538468648"
integrity sha512-JQ6PCcj5qmF9MxNRPAsKHHnqBPCdn4lQnwxZrHcG9tD70Gx+NfC4UH41tqXI+htba4k0PHRyH2y39Q1iJm0NFA==
"@abp/malihu-custom-scrollbar-plugin@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0.tgz#a340fa3757eb01bd510d3dcb54331b5b0a93a63f"
integrity sha512-CMCIxQNwPNRmmg4WctusMWhg8evrCoq3frQ5Fxnc/fKaMrrzQKL5PY2cV2jY2m5Se+Y+S9EPa3cNOQ1/KYuQ9w==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/select2@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0-rc.2.tgz#c48e865f401ddce32dff2a7a14ae07c4bde2f57b"
integrity sha512-YYK/SIqXQcSDQFMVg/ogohc76d4JDrOVQEbzfkNNI5bKVJo+hkqtNzAwV9FLdPZZNw15QMv0eF1ie4aUtIxyaA==
"@abp/select2@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0.tgz#c1b8b7cca16bfe813d83e84f738acda8f8182159"
integrity sha512-p6atSzYTU5o36S4GHCHvi3wHf3fgg6wNJIxk4ohSxu1mOQnUbmyYbxKiDFxq+MOR2sOfVmAjqb4xvcIjexg6hA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
select2 "^4.0.13"
"@abp/sweetalert@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0-rc.2.tgz#cdcaf8e9a33cf218a687fd6a42cfe1c85d89c6b7"
integrity sha512-sjQd8TF9oUnaQ1OPTGdVyAfWqSZEk4bRbC/qw2CouEOfRLatzkC0JcmzFLN0f5N1am1RQwkFakpENKH7NqTCvg==
"@abp/sweetalert@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0.tgz#e5c8cb0c84435a0ca97be62c7b9204bbd05ae23d"
integrity sha512-VwIp7VD7zzkRMJw3yu7YOlWbIA/JbLYZeyEpNFMIDxAGYG936tVsmH+aQVTovHF/3+VsYf9Da1JjKymLVHkWRg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0-rc.2.tgz#445d043ae482b76799b496ae6565abfaf75a34b9"
integrity sha512-wWx56EZMUGIfqJV5JLCvUp4RVhKXHYLQaVNQSF8E05COXmSQwFThVS7vbuiODFp2BGm6RAqCVtZDCreu2B8z9Q==
"@abp/timeago@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0.tgz#06df44618398cbec7bd174b7afd180907b67bb69"
integrity sha512-e1n9i8O0CaT4EIrnzMOur1HxSDpelgaVCLS9NWsTf4j4fIR3ojFqSNt76tpaPqVGBY9vRraGGu16XembYFF+jA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
timeago "^1.6.7"
"@abp/toastr@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0-rc.2.tgz#1af16fa8687201b6b9c7229d087a4233998703b9"
integrity sha512-g+Jl5H1ZHoJ4JwWuix0xA+GMFY42pwq8WYjxP6qE2/Y2aixYHVIui15eBqF2L06yXOt53YFcC1+pxjrp91xHxw==
"@abp/toastr@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0.tgz#eaa79a9e48638a2e86cb9573516e8614bfaf15a4"
integrity sha512-lA3pCdXgAWe1sVhC+/UNJa4T9AdxgN5ncW/3KW+9fg+IOieDwDibPIiuyornxrm+8G6uvrGxi//I3EeeqHABbg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
toastr "^2.1.4"
"@abp/utils@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0-rc.2.tgz#eb6dbf0ee493d0f050b37347d2d6d283098aedae"
integrity sha512-V2k5I89lVBoeGIKgg4p2H9GlMAcDWbctwKZPVwBEMVEVm1uTR2xQAWdTdSFd5Q8I8Xsf/aIG8ELM7l5j2h7/zQ==
"@abp/utils@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0.tgz#1f5d8b4dc8a234c15d87869436485fd737f18b50"
integrity sha512-fksnKF1bsOab5AVe8qBs2HZmcRVjrnsMwXs23xaqSRdpWXpPgsLRuKCJHlD0usREyerDGPkpY5opUnXWggHvCg==
dependencies:
just-compare "^1.3.0"

4
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.1.0-rc.2",
"@abp/prismjs": "^4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.1.0",
"@abp/prismjs": "^4.1.0"
},
"devDependencies": {}
}

260
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.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0-rc.2.tgz#b9462cbe36c41d68e2f44b79a3a2dba2c1b2b54a"
integrity sha512-KW3J6HnN1zZrCmrWmEcXBnGIOeuJDdp1jUECAm4Bdxi++VzfIbGlVvpcvUdT1E213reOUWi4dPhcej12DwrmDw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0-rc.2.tgz#d64cea1e504bcd3a08a1819025d40f3f84f0aadc"
integrity sha512-A/DRLwtJO7YCdqAgSF84wNRKjvGEQvcBocIwRxXCJEe3drxMoSwkAGjXQlxIYWZKdYbYUWDTjil2Mvwf91GUqg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0-rc.2"
"@abp/bootstrap" "~4.1.0-rc.2"
"@abp/bootstrap-datepicker" "~4.1.0-rc.2"
"@abp/datatables.net-bs4" "~4.1.0-rc.2"
"@abp/font-awesome" "~4.1.0-rc.2"
"@abp/jquery-form" "~4.1.0-rc.2"
"@abp/jquery-validation-unobtrusive" "~4.1.0-rc.2"
"@abp/lodash" "~4.1.0-rc.2"
"@abp/luxon" "~4.1.0-rc.2"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0-rc.2"
"@abp/select2" "~4.1.0-rc.2"
"@abp/sweetalert" "~4.1.0-rc.2"
"@abp/timeago" "~4.1.0-rc.2"
"@abp/toastr" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0-rc.2.tgz#54bf30def590e6d25fc35f77253888f3d9f74b9c"
integrity sha512-eOh5IBn4eNAjj2i6tlLRIV/r61Ef7+Z3PNvGgdml/XCo50el4G9XE7shxuGOY+MaFMfmsST2tcJlO9iAo9n2Yw==
"@abp/aspnetcore.mvc.ui.theme.basic@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0.tgz#ef1b31feb678fdf4ce6fa76fb1e9d091ca97c9a4"
integrity sha512-eAD39TaMVnXsEOVyKcChIggpzJw3TzDua8x/APlHfxWBQOuCb7C/PWLWH9DIN14kl8JsVpgRrUSlKsvvY8CIRA==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0.tgz#40ef6d20a83a8e700179be7f3989c8d5135808d0"
integrity sha512-UdT3XCUMEKguB1w7qF4TO1ClayWn63oiP7wnOUmIg+O1EdKTHUBYfztle4Qb/aqtzjHoZBsOnMZH/KOyQKejDg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0"
"@abp/bootstrap" "~4.1.0"
"@abp/bootstrap-datepicker" "~4.1.0"
"@abp/datatables.net-bs4" "~4.1.0"
"@abp/font-awesome" "~4.1.0"
"@abp/jquery-form" "~4.1.0"
"@abp/jquery-validation-unobtrusive" "~4.1.0"
"@abp/lodash" "~4.1.0"
"@abp/luxon" "~4.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0"
"@abp/select2" "~4.1.0"
"@abp/sweetalert" "~4.1.0"
"@abp/timeago" "~4.1.0"
"@abp/toastr" "~4.1.0"
"@abp/aspnetcore.mvc.ui@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0.tgz#c23ba554270a9534ac29a7e7ca8ab1ed0dc1cc7b"
integrity sha512-CaPVi8dKLD0/7zrsCdi3hA1alkUKVE3jVoUa2bl0mrBg30Xzu+IDAu6aIWFXOCnIX8YthejhA2Wtn4knbTOB4g==
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.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0-rc.2.tgz#d3fe863222a11771d366b1a3c246aaf34df94081"
integrity sha512-vn2xWAK3xqo5fMZJ9dOAZZmL+ZUnzZZNh3lF6uA97wTN/SbePlmHBYJpsCKIxOwbJS2HCvekHGJN/Ps4oEjlbw==
"@abp/bootstrap-datepicker@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0.tgz#5c97fba78e56ba90820014a13e4c2d394d27332f"
integrity sha512-5XDW/Y2Gu1SgIm/tyRuo6vwcJdpFWIEnqDJ+0wjdOvWl3a+HnQTDya5g74mCmEBfYQgYDw8Wz8ovChOOzExh7Q==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0-rc.2.tgz#b5132cf4c4c92fe833823cf2b91ab1b0167b0ecf"
integrity sha512-SsWEV0DveBIHiG051E6aBB371D15QIsGeo+POFhvQUvrlmzMBlFCAlmH0ef8w1n+3M3C37irCgEGKctt2pbcxQ==
"@abp/bootstrap@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0.tgz#50ac670e319a60a985109e96302eed3e46d36afe"
integrity sha512-4lFrbaNPYRa45oH/D+fFUSmgD/OdSoCmHXvSdG2ye6+wyl6gy4JRfjjTOFmwpsyOWJdPMJSV6CARCSSsfeaItA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/clipboard@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.1.0-rc.2.tgz#14802cefd81f3aa4a421523e4a8d71f06a7281a6"
integrity sha512-mUYqACe/Jh+GEGWaRfOblrKo/yJnNMmj2h3llDOpBzQj1HTuUCAOHBHpdq7SUPEuwQVxjOjDhBjYBKbqGbTKBQ==
"@abp/clipboard@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.1.0.tgz#257d582a28e2311f4d433500aff3a529d5756d0a"
integrity sha512-BlJ3+eHXJcj0RJ5PdZ1I8ag0wylp4lW7ukzmXifzSYbT0on6o8pJuCvQM5rAyNqA5ucunjj9QiYXRRo44guKtQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
clipboard "^2.0.6"
"@abp/core@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0-rc.2.tgz#d306106a53fa56109751be0099785c94f43be56f"
integrity sha512-b0mOYSz8hNgZ/hBeYg8hkthJgE8CLyHNa2NcythPoIW8RR5qHmDtGoFnuFovLvLk7r+M4NWyxXRKEshSszIPyA==
"@abp/core@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0.tgz#6bdfa378d44cbf8f611d52dddf0915e5bbc188d5"
integrity sha512-HXkKCfh8+Yc9iVBsZy7eSoQbkBSdV1QTRAF8+cPgbEpU4x4WlUOy61xqb2pSLFzX9nSma83WhdDyQkzWDBTRZQ==
dependencies:
"@abp/utils" "^4.1.0-rc.2"
"@abp/utils" "^4.1.0"
"@abp/datatables.net-bs4@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0-rc.2.tgz#99aa1fbad91939fc23265324a3d8a45d0c1e5a7a"
integrity sha512-Y9UyqniOkx5DJO+2GGurnQE1yfRmGaQ3y7V07gKWRq+gHLUhE+vfgOLVpGM6ufdTIbLvVw5Ng+3gfOmPlUnpxg==
"@abp/datatables.net-bs4@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0.tgz#c28097b82f62b236d6f2578d7148128914eb5cd8"
integrity sha512-/fM/3Q/yXJaPsXGKIOZBgihxGLZ/T+n+6wguFeEypsAXCJ4MfpcRZ/eFPvVlBmmc/PVIdE8xtj5rnH9+/2KHWg==
dependencies:
"@abp/datatables.net" "~4.1.0-rc.2"
"@abp/datatables.net" "~4.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0-rc.2.tgz#1a134688259d32187d822d8a49c7a68b4cc226c7"
integrity sha512-9o5g8s7ZTlThd1FMFmO7wS+MxmXgUMmiWx7Hwara9ypfJPd0vanz10bQAdTpLiDy/aa0tUmz0xOVj73yvBJm9Q==
"@abp/datatables.net@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0.tgz#a037fdae4beb9805e8eea71f086573eed4fd3c92"
integrity sha512-OZogC3UEvTSyas+VcxffggQ8U2fi399Ka+++4p+oXCPGykDLU1EKOSA/CToiu9uYNYJQ3125SjRZSOJD5h/ukg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
datatables.net "^1.10.21"
"@abp/font-awesome@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0-rc.2.tgz#ecf490861c09250cf61611ac74cec5ab4392e807"
integrity sha512-6yAsf/ee2hdrHHUACql8c3gY54Hd7YAK2olHymyc3Io2hhK2VxXRc2W2oRSwbQ9GsSE+XDrEVtjIR64nBseTeg==
"@abp/font-awesome@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0.tgz#a95f8df5f7e3695aaf05e3eab9f3087f4017d7e9"
integrity sha512-Zc4mPp740ACe10ollWez4qNg2QnM/AexDkF3pkxYNb1B9J4Fb8H7SefOOtMRdRgHK+sEe5vrPfIs8//gTf4xeQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0-rc.2.tgz#76dff67a3fe6e6ad7bd60bb909de93c09966cc0a"
integrity sha512-LGafwxyRYUbHQlJ9pPbYdkVqzdT/y1Fp4Nr4C3W5jxsJuaSICl0RPkRHIPALeoqbpEWuj6dVep6ZuO9hhxBzNw==
"@abp/jquery-form@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0.tgz#b773c4f4619c3731c781993bba59a1cf38357918"
integrity sha512-7Mio+ehj7M2qt3oOyDBi97yNg1ip6BZiUpHkMtmPc/OxdnxpOZV9tZHyhbsoZFYTu1dUSmrpY6HKY0zibohyBQ==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0-rc.2.tgz#1f1d395cfa47740d47303ff512592ff1993f9e13"
integrity sha512-0LXWvgfyLHVw7qRVOmY0rfVlq+yJq/nhbcVoYK+QbmKnrFu+KZg0KNMOD8wTXs8mZ1EKGQpoQKWxImtCnGrV/A==
"@abp/jquery-validation-unobtrusive@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0.tgz#954ce53a46475c09056d789eba761568482ea8c9"
integrity sha512-diykqQiGzowYDpsG9PMd3ipeXFrilRQiHQX2mglBf+FNKMocp7LBAIeD2INkiObczZfIKkoqu7WCRqb1bl5uKg==
dependencies:
"@abp/jquery-validation" "~4.1.0-rc.2"
"@abp/jquery-validation" "~4.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0-rc.2.tgz#ad4b464fd0133eab8d08c781c7d7c4e00bc4918d"
integrity sha512-iLTobfwqDk7iiQxvv5UowxOKywsh/77VlAVktstnFG3N3Y73+JYKzM0mGM/j4zM1OrjbF9/cnPnDVX7bATPz9w==
"@abp/jquery-validation@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0.tgz#29cffb21270c52758804cf0d3f5b6e83b327047d"
integrity sha512-JrDcejGKz33LeNMn3+DguzDd8XN6LXlceffMc8jz4zYvtb+NqwUn7NFvH3gnKfNKBc8V9cQIHxQpYQa8luYcsA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0-rc.2.tgz#0f64cad5b1ae3e47d2344e5fb30c347b89d6d2bb"
integrity sha512-YubZwMJIN+UcfxfUlt3usfcLMG9WcXNpemUsdBtlKNzti562KZMIHPFLRL+DsiqvzZ74h2PxSWWsxS42Z7z0Yw==
"@abp/jquery@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0.tgz#3c021d24eb5ef7fe198da8982657075556556701"
integrity sha512-1HLjkxj5EudcoxZ9CVqsP0tgKwLQBs5KI9vnnW9I9pco6fIf1Q2PT+TZZywOZ3ftkYfMp90PF+A5IL/JfovnpQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
jquery "~3.5.1"
"@abp/lodash@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0-rc.2.tgz#9281c641ab7b7b33e7acf12815dc461e7ae967b9"
integrity sha512-RqdekrAyLPaLNJddmrq89EdrI1xg4296tOafFLHvirgRWisJTIa9bflTOwMwEg9FNdLJgA0zHi4WdAMer0qZdA==
"@abp/lodash@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0.tgz#e605644ba745813a2937b24f3b9d2ad86b20dec9"
integrity sha512-jUjua8iZIE5P/AELI/nffS09IorBRM/Jfq6agCOX6Qg7d8od66B9gV727mTuaMd9ZW65S1wW5+zMJhm5gy7Qpg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
lodash "^4.17.15"
"@abp/luxon@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0-rc.2.tgz#78fc1cf651d7c19b87a31823cd3ce68961d6b1e6"
integrity sha512-U4e9uGZlg9xj9tBNP337v3wiaSR6qxWsBgh/duQGWrqV+75LlQjYcZaPoXDidUUS6U6epDSR2pc2T39rahcgSQ==
"@abp/luxon@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0.tgz#12c9b6eb2a87e0ebe7df58bcbd5f38211ca62e81"
integrity sha512-gc8DAZHa+fcnDGWGQHmI8Tllr+QzHAZejrwoVSRiRX+Oebf67sCEDdbwB8yWeEHSa3MbpPtm7I1aTc/+dQI8Dg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0-rc.2.tgz#36553e71052cad9734e0c9b2c65759e538468648"
integrity sha512-JQ6PCcj5qmF9MxNRPAsKHHnqBPCdn4lQnwxZrHcG9tD70Gx+NfC4UH41tqXI+htba4k0PHRyH2y39Q1iJm0NFA==
"@abp/malihu-custom-scrollbar-plugin@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0.tgz#a340fa3757eb01bd510d3dcb54331b5b0a93a63f"
integrity sha512-CMCIxQNwPNRmmg4WctusMWhg8evrCoq3frQ5Fxnc/fKaMrrzQKL5PY2cV2jY2m5Se+Y+S9EPa3cNOQ1/KYuQ9w==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/prismjs@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.1.0-rc.2.tgz#f49f51a036c36f0fb8b561913e16d46736c24470"
integrity sha512-9E5l1gAT73FZlfkv1dDEDPA2Cryy7hDQp0ahdIG57HRsKeUYhRODNo07cf2ev5RDgIQbm3iAcfe7YJubR5v8OQ==
"@abp/prismjs@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.1.0.tgz#fde3454460013490f566fc3b27fbc1031251b98b"
integrity sha512-jXE8oS8JyLgZS/oXrVS2CxtIH09WEHoUPM4HfndzxSPzxmg3G+E8kzMXbPrHGGx7AhHgmSxNVFGuR2+1YFpSPQ==
dependencies:
"@abp/clipboard" "~4.1.0-rc.2"
"@abp/core" "~4.1.0-rc.2"
"@abp/clipboard" "~4.1.0"
"@abp/core" "~4.1.0"
prismjs "^1.20.0"
"@abp/select2@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0-rc.2.tgz#c48e865f401ddce32dff2a7a14ae07c4bde2f57b"
integrity sha512-YYK/SIqXQcSDQFMVg/ogohc76d4JDrOVQEbzfkNNI5bKVJo+hkqtNzAwV9FLdPZZNw15QMv0eF1ie4aUtIxyaA==
"@abp/select2@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0.tgz#c1b8b7cca16bfe813d83e84f738acda8f8182159"
integrity sha512-p6atSzYTU5o36S4GHCHvi3wHf3fgg6wNJIxk4ohSxu1mOQnUbmyYbxKiDFxq+MOR2sOfVmAjqb4xvcIjexg6hA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
select2 "^4.0.13"
"@abp/sweetalert@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0-rc.2.tgz#cdcaf8e9a33cf218a687fd6a42cfe1c85d89c6b7"
integrity sha512-sjQd8TF9oUnaQ1OPTGdVyAfWqSZEk4bRbC/qw2CouEOfRLatzkC0JcmzFLN0f5N1am1RQwkFakpENKH7NqTCvg==
"@abp/sweetalert@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0.tgz#e5c8cb0c84435a0ca97be62c7b9204bbd05ae23d"
integrity sha512-VwIp7VD7zzkRMJw3yu7YOlWbIA/JbLYZeyEpNFMIDxAGYG936tVsmH+aQVTovHF/3+VsYf9Da1JjKymLVHkWRg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0-rc.2.tgz#445d043ae482b76799b496ae6565abfaf75a34b9"
integrity sha512-wWx56EZMUGIfqJV5JLCvUp4RVhKXHYLQaVNQSF8E05COXmSQwFThVS7vbuiODFp2BGm6RAqCVtZDCreu2B8z9Q==
"@abp/timeago@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0.tgz#06df44618398cbec7bd174b7afd180907b67bb69"
integrity sha512-e1n9i8O0CaT4EIrnzMOur1HxSDpelgaVCLS9NWsTf4j4fIR3ojFqSNt76tpaPqVGBY9vRraGGu16XembYFF+jA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
timeago "^1.6.7"
"@abp/toastr@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0-rc.2.tgz#1af16fa8687201b6b9c7229d087a4233998703b9"
integrity sha512-g+Jl5H1ZHoJ4JwWuix0xA+GMFY42pwq8WYjxP6qE2/Y2aixYHVIui15eBqF2L06yXOt53YFcC1+pxjrp91xHxw==
"@abp/toastr@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0.tgz#eaa79a9e48638a2e86cb9573516e8614bfaf15a4"
integrity sha512-lA3pCdXgAWe1sVhC+/UNJa4T9AdxgN5ncW/3KW+9fg+IOieDwDibPIiuyornxrm+8G6uvrGxi//I3EeeqHABbg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
toastr "^2.1.4"
"@abp/utils@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0-rc.2.tgz#eb6dbf0ee493d0f050b37347d2d6d283098aedae"
integrity sha512-V2k5I89lVBoeGIKgg4p2H9GlMAcDWbctwKZPVwBEMVEVm1uTR2xQAWdTdSFd5Q8I8Xsf/aIG8ELM7l5j2h7/zQ==
"@abp/utils@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0.tgz#1f5d8b4dc8a234c15d87869436485fd737f18b50"
integrity sha512-fksnKF1bsOab5AVe8qBs2HZmcRVjrnsMwXs23xaqSRdpWXpPgsLRuKCJHlD0usREyerDGPkpY5opUnXWggHvCg==
dependencies:
just-compare "^1.3.0"

1
framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/SampleTemplates/ShowDecimalNumber.tpl

@ -0,0 +1 @@
{{ model.amount}}

16
framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TemplateRenderer_Tests.cs

@ -91,6 +91,22 @@ namespace Volo.Abp.TextTemplating
cultureName: "tr"
)).ShouldBe("*BEGIN*Merhaba John, nasılsın?. Please click to the following link to get an email to reset your password!*END*");
}
[Fact]
public async Task Should_Get_Localized_Numbers()
{
(await _templateRenderer.RenderAsync(
TestTemplates.ShowDecimalNumber,
new Dictionary<string, decimal>(new List<KeyValuePair<string, decimal>> {new("amount", 123.45M)}),
cultureName: "en"
)).ShouldBe("*BEGIN*123.45*END*");
(await _templateRenderer.RenderAsync(
TestTemplates.ShowDecimalNumber,
new Dictionary<string, decimal>(new List<KeyValuePair<string, decimal>> {new("amount", 123.45M)}),
cultureName: "de"
)).ShouldBe("*BEGIN*123,45*END*");
}
private class WelcomeEmailModel
{

8
framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplateDefinitionProvider.cs

@ -27,6 +27,14 @@ namespace Volo.Abp.TextTemplating
isLayout: true
).WithVirtualFilePath("/SampleTemplates/TestTemplateLayout1.tpl", true)
);
context.Add(
new TemplateDefinition(
TestTemplates.ShowDecimalNumber,
localizationResource: typeof(TestLocalizationSource),
layout: TestTemplates.TestTemplateLayout1
).WithVirtualFilePath("/SampleTemplates/ShowDecimalNumber.tpl", true)
);
}
}
}

1
framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplates.cs

@ -5,5 +5,6 @@
public const string WelcomeEmail = "WelcomeEmail";
public const string ForgotPasswordEmail = "ForgotPasswordEmail";
public const string TestTemplateLayout1 = "TestTemplateLayout1";
public const string ShowDecimalNumber = "ShowDecimalNumber";
}
}

2
framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory_Tests.cs

@ -23,7 +23,7 @@ namespace Volo.Abp.TextTemplating.VirtualFiles
var localizedTemplateContentReaderFactory = new LocalizedTemplateContentReaderFactory(
new PhysicalFileVirtualFileProvider(
new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(),
@"Volo\Abp\TextTemplating\"))));
"Volo", "Abp", "TextTemplating"))));
var reader = await localizedTemplateContentReaderFactory.CreateAsync(_templateDefinitionManager.Get(TestTemplates.WelcomeEmail));

6
modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs

@ -171,11 +171,11 @@ namespace Volo.Abp.AuditLogging.MongoDB
{
var query = await GetEntityChangeListQueryAsync(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName);
var auditLogs = await query.As<IMongoQueryable<EntityChange>>()
return await query
.OrderBy(sorting ?? "changeTime desc")
.As<IMongoQueryable<EntityChange>>()
.PageBy<EntityChange, IMongoQueryable<EntityChange>>(skipCount, maxResultCount)
.ToListAsync(GetCancellationToken(cancellationToken));
return auditLogs.AsQueryable().OrderBy(sorting ?? "changeTime desc").ToList();
}
public virtual async Task<long> GetEntityChangeCountAsync(

4
modules/blogging/app/Volo.BloggingTestApp/package.json

@ -3,7 +3,7 @@
"name": "volo.blogtestapp",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.1.0-rc.2",
"@abp/blogging": "^4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.1.0",
"@abp/blogging": "^4.1.0"
}
}

332
modules/blogging/app/Volo.BloggingTestApp/yarn.lock

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0-rc.2.tgz#b9462cbe36c41d68e2f44b79a3a2dba2c1b2b54a"
integrity sha512-KW3J6HnN1zZrCmrWmEcXBnGIOeuJDdp1jUECAm4Bdxi++VzfIbGlVvpcvUdT1E213reOUWi4dPhcej12DwrmDw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0-rc.2.tgz#d64cea1e504bcd3a08a1819025d40f3f84f0aadc"
integrity sha512-A/DRLwtJO7YCdqAgSF84wNRKjvGEQvcBocIwRxXCJEe3drxMoSwkAGjXQlxIYWZKdYbYUWDTjil2Mvwf91GUqg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0-rc.2"
"@abp/bootstrap" "~4.1.0-rc.2"
"@abp/bootstrap-datepicker" "~4.1.0-rc.2"
"@abp/datatables.net-bs4" "~4.1.0-rc.2"
"@abp/font-awesome" "~4.1.0-rc.2"
"@abp/jquery-form" "~4.1.0-rc.2"
"@abp/jquery-validation-unobtrusive" "~4.1.0-rc.2"
"@abp/lodash" "~4.1.0-rc.2"
"@abp/luxon" "~4.1.0-rc.2"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0-rc.2"
"@abp/select2" "~4.1.0-rc.2"
"@abp/sweetalert" "~4.1.0-rc.2"
"@abp/timeago" "~4.1.0-rc.2"
"@abp/toastr" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0-rc.2.tgz#54bf30def590e6d25fc35f77253888f3d9f74b9c"
integrity sha512-eOh5IBn4eNAjj2i6tlLRIV/r61Ef7+Z3PNvGgdml/XCo50el4G9XE7shxuGOY+MaFMfmsST2tcJlO9iAo9n2Yw==
"@abp/aspnetcore.mvc.ui.theme.basic@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0.tgz#ef1b31feb678fdf4ce6fa76fb1e9d091ca97c9a4"
integrity sha512-eAD39TaMVnXsEOVyKcChIggpzJw3TzDua8x/APlHfxWBQOuCb7C/PWLWH9DIN14kl8JsVpgRrUSlKsvvY8CIRA==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0.tgz#40ef6d20a83a8e700179be7f3989c8d5135808d0"
integrity sha512-UdT3XCUMEKguB1w7qF4TO1ClayWn63oiP7wnOUmIg+O1EdKTHUBYfztle4Qb/aqtzjHoZBsOnMZH/KOyQKejDg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0"
"@abp/bootstrap" "~4.1.0"
"@abp/bootstrap-datepicker" "~4.1.0"
"@abp/datatables.net-bs4" "~4.1.0"
"@abp/font-awesome" "~4.1.0"
"@abp/jquery-form" "~4.1.0"
"@abp/jquery-validation-unobtrusive" "~4.1.0"
"@abp/lodash" "~4.1.0"
"@abp/luxon" "~4.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0"
"@abp/select2" "~4.1.0"
"@abp/sweetalert" "~4.1.0"
"@abp/timeago" "~4.1.0"
"@abp/toastr" "~4.1.0"
"@abp/aspnetcore.mvc.ui@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0.tgz#c23ba554270a9534ac29a7e7ca8ab1ed0dc1cc7b"
integrity sha512-CaPVi8dKLD0/7zrsCdi3hA1alkUKVE3jVoUa2bl0mrBg30Xzu+IDAu6aIWFXOCnIX8YthejhA2Wtn4knbTOB4g==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -43,214 +43,214 @@
micromatch "^4.0.2"
path "^0.12.7"
"@abp/blogging@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-4.1.0-rc.2.tgz#f5b3018efc8f64d75369735f13c1984fdc1a9292"
integrity sha512-vGPIbpcelOrKeGz3Pcv9suC0VSi8RB0ufFJaDxyo67XfMaWn+a4N+uuy7p5jpAW2xRsVlXRJ/H+pbE2bPild3w==
"@abp/blogging@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-4.1.0.tgz#28796d30cc9066fecb4f6c9393f74b9a18b6b652"
integrity sha512-AdnqmfJfA6AQ7qGUfrBK3XgJH4fVKp/zFgk1mtYO+oHnJ1oU9D707s49szFOVCIy5txfKdkxQ+hlJH3G8fg95g==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0-rc.2"
"@abp/owl.carousel" "~4.1.0-rc.2"
"@abp/prismjs" "~4.1.0-rc.2"
"@abp/tui-editor" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0"
"@abp/owl.carousel" "~4.1.0"
"@abp/prismjs" "~4.1.0"
"@abp/tui-editor" "~4.1.0"
"@abp/bootstrap-datepicker@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0-rc.2.tgz#d3fe863222a11771d366b1a3c246aaf34df94081"
integrity sha512-vn2xWAK3xqo5fMZJ9dOAZZmL+ZUnzZZNh3lF6uA97wTN/SbePlmHBYJpsCKIxOwbJS2HCvekHGJN/Ps4oEjlbw==
"@abp/bootstrap-datepicker@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0.tgz#5c97fba78e56ba90820014a13e4c2d394d27332f"
integrity sha512-5XDW/Y2Gu1SgIm/tyRuo6vwcJdpFWIEnqDJ+0wjdOvWl3a+HnQTDya5g74mCmEBfYQgYDw8Wz8ovChOOzExh7Q==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0-rc.2.tgz#b5132cf4c4c92fe833823cf2b91ab1b0167b0ecf"
integrity sha512-SsWEV0DveBIHiG051E6aBB371D15QIsGeo+POFhvQUvrlmzMBlFCAlmH0ef8w1n+3M3C37irCgEGKctt2pbcxQ==
"@abp/bootstrap@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0.tgz#50ac670e319a60a985109e96302eed3e46d36afe"
integrity sha512-4lFrbaNPYRa45oH/D+fFUSmgD/OdSoCmHXvSdG2ye6+wyl6gy4JRfjjTOFmwpsyOWJdPMJSV6CARCSSsfeaItA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/clipboard@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.1.0-rc.2.tgz#14802cefd81f3aa4a421523e4a8d71f06a7281a6"
integrity sha512-mUYqACe/Jh+GEGWaRfOblrKo/yJnNMmj2h3llDOpBzQj1HTuUCAOHBHpdq7SUPEuwQVxjOjDhBjYBKbqGbTKBQ==
"@abp/clipboard@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.1.0.tgz#257d582a28e2311f4d433500aff3a529d5756d0a"
integrity sha512-BlJ3+eHXJcj0RJ5PdZ1I8ag0wylp4lW7ukzmXifzSYbT0on6o8pJuCvQM5rAyNqA5ucunjj9QiYXRRo44guKtQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
clipboard "^2.0.6"
"@abp/codemirror@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-4.1.0-rc.2.tgz#fe0fa745185ed3f170f75d6c4e29b47e38cfbdba"
integrity sha512-ddysazVpop0Cv166VWrDV18v9l1gme1GiMMCAR3Cv/WeIvI28EzG0G8OlPKlXJ/qCm65Kf6SF4EFrCuL1nXK+g==
"@abp/codemirror@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-4.1.0.tgz#b1a094b51338f9902cb3e11679caf86af5ebae23"
integrity sha512-aibQkbvzxMdKwL+iPhNnrB3ovXmD4B/qoiv9EaB9xGAkOVwHwMgJDxC2HZdoH/r72wtaBPEySZaAzwuMzEBcBA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
codemirror "^5.54.0"
"@abp/core@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0-rc.2.tgz#d306106a53fa56109751be0099785c94f43be56f"
integrity sha512-b0mOYSz8hNgZ/hBeYg8hkthJgE8CLyHNa2NcythPoIW8RR5qHmDtGoFnuFovLvLk7r+M4NWyxXRKEshSszIPyA==
"@abp/core@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0.tgz#6bdfa378d44cbf8f611d52dddf0915e5bbc188d5"
integrity sha512-HXkKCfh8+Yc9iVBsZy7eSoQbkBSdV1QTRAF8+cPgbEpU4x4WlUOy61xqb2pSLFzX9nSma83WhdDyQkzWDBTRZQ==
dependencies:
"@abp/utils" "^4.1.0-rc.2"
"@abp/utils" "^4.1.0"
"@abp/datatables.net-bs4@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0-rc.2.tgz#99aa1fbad91939fc23265324a3d8a45d0c1e5a7a"
integrity sha512-Y9UyqniOkx5DJO+2GGurnQE1yfRmGaQ3y7V07gKWRq+gHLUhE+vfgOLVpGM6ufdTIbLvVw5Ng+3gfOmPlUnpxg==
"@abp/datatables.net-bs4@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0.tgz#c28097b82f62b236d6f2578d7148128914eb5cd8"
integrity sha512-/fM/3Q/yXJaPsXGKIOZBgihxGLZ/T+n+6wguFeEypsAXCJ4MfpcRZ/eFPvVlBmmc/PVIdE8xtj5rnH9+/2KHWg==
dependencies:
"@abp/datatables.net" "~4.1.0-rc.2"
"@abp/datatables.net" "~4.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0-rc.2.tgz#1a134688259d32187d822d8a49c7a68b4cc226c7"
integrity sha512-9o5g8s7ZTlThd1FMFmO7wS+MxmXgUMmiWx7Hwara9ypfJPd0vanz10bQAdTpLiDy/aa0tUmz0xOVj73yvBJm9Q==
"@abp/datatables.net@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0.tgz#a037fdae4beb9805e8eea71f086573eed4fd3c92"
integrity sha512-OZogC3UEvTSyas+VcxffggQ8U2fi399Ka+++4p+oXCPGykDLU1EKOSA/CToiu9uYNYJQ3125SjRZSOJD5h/ukg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
datatables.net "^1.10.21"
"@abp/font-awesome@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0-rc.2.tgz#ecf490861c09250cf61611ac74cec5ab4392e807"
integrity sha512-6yAsf/ee2hdrHHUACql8c3gY54Hd7YAK2olHymyc3Io2hhK2VxXRc2W2oRSwbQ9GsSE+XDrEVtjIR64nBseTeg==
"@abp/font-awesome@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0.tgz#a95f8df5f7e3695aaf05e3eab9f3087f4017d7e9"
integrity sha512-Zc4mPp740ACe10ollWez4qNg2QnM/AexDkF3pkxYNb1B9J4Fb8H7SefOOtMRdRgHK+sEe5vrPfIs8//gTf4xeQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/highlight.js@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-4.1.0-rc.2.tgz#56ab7754a850ada113a42d8d681cf003754670cb"
integrity sha512-lA1mWhOkTJFcaq0F2s0wnwJurEEzQs4aZ5huO1FDL8GozRF8pLtHRwTjFlcaLNINGNgd5egBcXy5cqPQpZKSRQ==
"@abp/highlight.js@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-4.1.0.tgz#46cfa70982203db5b96a9a3ffd89d46b822da111"
integrity sha512-3DV7/7P3OP13upSADUQNHIu2Q/LovEo4ia7jJyqSsNv8pD6CXb/pmvRlhiQ7NXI7NIGqYe4a35uxR1T2AEyLRQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
"@abp/jquery-form@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0-rc.2.tgz#76dff67a3fe6e6ad7bd60bb909de93c09966cc0a"
integrity sha512-LGafwxyRYUbHQlJ9pPbYdkVqzdT/y1Fp4Nr4C3W5jxsJuaSICl0RPkRHIPALeoqbpEWuj6dVep6ZuO9hhxBzNw==
"@abp/jquery-form@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0.tgz#b773c4f4619c3731c781993bba59a1cf38357918"
integrity sha512-7Mio+ehj7M2qt3oOyDBi97yNg1ip6BZiUpHkMtmPc/OxdnxpOZV9tZHyhbsoZFYTu1dUSmrpY6HKY0zibohyBQ==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0-rc.2.tgz#1f1d395cfa47740d47303ff512592ff1993f9e13"
integrity sha512-0LXWvgfyLHVw7qRVOmY0rfVlq+yJq/nhbcVoYK+QbmKnrFu+KZg0KNMOD8wTXs8mZ1EKGQpoQKWxImtCnGrV/A==
"@abp/jquery-validation-unobtrusive@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0.tgz#954ce53a46475c09056d789eba761568482ea8c9"
integrity sha512-diykqQiGzowYDpsG9PMd3ipeXFrilRQiHQX2mglBf+FNKMocp7LBAIeD2INkiObczZfIKkoqu7WCRqb1bl5uKg==
dependencies:
"@abp/jquery-validation" "~4.1.0-rc.2"
"@abp/jquery-validation" "~4.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0-rc.2.tgz#ad4b464fd0133eab8d08c781c7d7c4e00bc4918d"
integrity sha512-iLTobfwqDk7iiQxvv5UowxOKywsh/77VlAVktstnFG3N3Y73+JYKzM0mGM/j4zM1OrjbF9/cnPnDVX7bATPz9w==
"@abp/jquery-validation@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0.tgz#29cffb21270c52758804cf0d3f5b6e83b327047d"
integrity sha512-JrDcejGKz33LeNMn3+DguzDd8XN6LXlceffMc8jz4zYvtb+NqwUn7NFvH3gnKfNKBc8V9cQIHxQpYQa8luYcsA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0-rc.2.tgz#0f64cad5b1ae3e47d2344e5fb30c347b89d6d2bb"
integrity sha512-YubZwMJIN+UcfxfUlt3usfcLMG9WcXNpemUsdBtlKNzti562KZMIHPFLRL+DsiqvzZ74h2PxSWWsxS42Z7z0Yw==
"@abp/jquery@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0.tgz#3c021d24eb5ef7fe198da8982657075556556701"
integrity sha512-1HLjkxj5EudcoxZ9CVqsP0tgKwLQBs5KI9vnnW9I9pco6fIf1Q2PT+TZZywOZ3ftkYfMp90PF+A5IL/JfovnpQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
jquery "~3.5.1"
"@abp/lodash@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0-rc.2.tgz#9281c641ab7b7b33e7acf12815dc461e7ae967b9"
integrity sha512-RqdekrAyLPaLNJddmrq89EdrI1xg4296tOafFLHvirgRWisJTIa9bflTOwMwEg9FNdLJgA0zHi4WdAMer0qZdA==
"@abp/lodash@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0.tgz#e605644ba745813a2937b24f3b9d2ad86b20dec9"
integrity sha512-jUjua8iZIE5P/AELI/nffS09IorBRM/Jfq6agCOX6Qg7d8od66B9gV727mTuaMd9ZW65S1wW5+zMJhm5gy7Qpg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
lodash "^4.17.15"
"@abp/luxon@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0-rc.2.tgz#78fc1cf651d7c19b87a31823cd3ce68961d6b1e6"
integrity sha512-U4e9uGZlg9xj9tBNP337v3wiaSR6qxWsBgh/duQGWrqV+75LlQjYcZaPoXDidUUS6U6epDSR2pc2T39rahcgSQ==
"@abp/luxon@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0.tgz#12c9b6eb2a87e0ebe7df58bcbd5f38211ca62e81"
integrity sha512-gc8DAZHa+fcnDGWGQHmI8Tllr+QzHAZejrwoVSRiRX+Oebf67sCEDdbwB8yWeEHSa3MbpPtm7I1aTc/+dQI8Dg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0-rc.2.tgz#36553e71052cad9734e0c9b2c65759e538468648"
integrity sha512-JQ6PCcj5qmF9MxNRPAsKHHnqBPCdn4lQnwxZrHcG9tD70Gx+NfC4UH41tqXI+htba4k0PHRyH2y39Q1iJm0NFA==
"@abp/malihu-custom-scrollbar-plugin@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0.tgz#a340fa3757eb01bd510d3dcb54331b5b0a93a63f"
integrity sha512-CMCIxQNwPNRmmg4WctusMWhg8evrCoq3frQ5Fxnc/fKaMrrzQKL5PY2cV2jY2m5Se+Y+S9EPa3cNOQ1/KYuQ9w==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/markdown-it@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-4.1.0-rc.2.tgz#5cd92655523e19e71cd6529734ce2c30291aef57"
integrity sha512-B3mzKeUsPuFs24gGnec7bVMo27r6klkhx1FDQz3vlxwZ3PkPVQqSp+yfIUVAxohhqFtw0ugoe2zvsLD3fl7qIg==
"@abp/markdown-it@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-4.1.0.tgz#cd2804008fa53ad07134e3cfb2c55abc90be92f3"
integrity sha512-8pN6wkI7tHFTRZbVNHFqfHsc9n389C0gEuyBaCPE6AvJAHUiCShXmGp50qn7Ev23R8iX9x2boxXKEfeQ3PbTOw==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
markdown-it "^11.0.0"
"@abp/owl.carousel@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-4.1.0-rc.2.tgz#f4703da17732e84ebe3882af0f3532866de9f6d4"
integrity sha512-INfTzKEQRubO7bUDJooNq5n7Oyul7+8DHUytah/6sDFbpBBvsk5g4D7OjnhMyhWQw9rmG16Vb5XnyCH9/JwPQQ==
"@abp/owl.carousel@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-4.1.0.tgz#67fb947682627f07fd27b2546dc218113cfb3236"
integrity sha512-RFznqVH+XIW7Pcxy9zZPqLwVuoJbWVn489PBL6kVDViFTqOSo38m4/wdMKCvUUCJPBiRNlAKO3IHkb3y4mc5fw==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
owl.carousel "^2.3.4"
"@abp/prismjs@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.1.0-rc.2.tgz#f49f51a036c36f0fb8b561913e16d46736c24470"
integrity sha512-9E5l1gAT73FZlfkv1dDEDPA2Cryy7hDQp0ahdIG57HRsKeUYhRODNo07cf2ev5RDgIQbm3iAcfe7YJubR5v8OQ==
"@abp/prismjs@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.1.0.tgz#fde3454460013490f566fc3b27fbc1031251b98b"
integrity sha512-jXE8oS8JyLgZS/oXrVS2CxtIH09WEHoUPM4HfndzxSPzxmg3G+E8kzMXbPrHGGx7AhHgmSxNVFGuR2+1YFpSPQ==
dependencies:
"@abp/clipboard" "~4.1.0-rc.2"
"@abp/core" "~4.1.0-rc.2"
"@abp/clipboard" "~4.1.0"
"@abp/core" "~4.1.0"
prismjs "^1.20.0"
"@abp/select2@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0-rc.2.tgz#c48e865f401ddce32dff2a7a14ae07c4bde2f57b"
integrity sha512-YYK/SIqXQcSDQFMVg/ogohc76d4JDrOVQEbzfkNNI5bKVJo+hkqtNzAwV9FLdPZZNw15QMv0eF1ie4aUtIxyaA==
"@abp/select2@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0.tgz#c1b8b7cca16bfe813d83e84f738acda8f8182159"
integrity sha512-p6atSzYTU5o36S4GHCHvi3wHf3fgg6wNJIxk4ohSxu1mOQnUbmyYbxKiDFxq+MOR2sOfVmAjqb4xvcIjexg6hA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
select2 "^4.0.13"
"@abp/sweetalert@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0-rc.2.tgz#cdcaf8e9a33cf218a687fd6a42cfe1c85d89c6b7"
integrity sha512-sjQd8TF9oUnaQ1OPTGdVyAfWqSZEk4bRbC/qw2CouEOfRLatzkC0JcmzFLN0f5N1am1RQwkFakpENKH7NqTCvg==
"@abp/sweetalert@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0.tgz#e5c8cb0c84435a0ca97be62c7b9204bbd05ae23d"
integrity sha512-VwIp7VD7zzkRMJw3yu7YOlWbIA/JbLYZeyEpNFMIDxAGYG936tVsmH+aQVTovHF/3+VsYf9Da1JjKymLVHkWRg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0-rc.2.tgz#445d043ae482b76799b496ae6565abfaf75a34b9"
integrity sha512-wWx56EZMUGIfqJV5JLCvUp4RVhKXHYLQaVNQSF8E05COXmSQwFThVS7vbuiODFp2BGm6RAqCVtZDCreu2B8z9Q==
"@abp/timeago@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0.tgz#06df44618398cbec7bd174b7afd180907b67bb69"
integrity sha512-e1n9i8O0CaT4EIrnzMOur1HxSDpelgaVCLS9NWsTf4j4fIR3ojFqSNt76tpaPqVGBY9vRraGGu16XembYFF+jA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
timeago "^1.6.7"
"@abp/toastr@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0-rc.2.tgz#1af16fa8687201b6b9c7229d087a4233998703b9"
integrity sha512-g+Jl5H1ZHoJ4JwWuix0xA+GMFY42pwq8WYjxP6qE2/Y2aixYHVIui15eBqF2L06yXOt53YFcC1+pxjrp91xHxw==
"@abp/toastr@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0.tgz#eaa79a9e48638a2e86cb9573516e8614bfaf15a4"
integrity sha512-lA3pCdXgAWe1sVhC+/UNJa4T9AdxgN5ncW/3KW+9fg+IOieDwDibPIiuyornxrm+8G6uvrGxi//I3EeeqHABbg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
toastr "^2.1.4"
"@abp/tui-editor@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-4.1.0-rc.2.tgz#32008e17a7e6ebf9451e6425ca3f4938351cdf01"
integrity sha512-xGqOMrrd0Bk6PN90BgyCh7nPvh9QSeu4NHl5xYy2/jrqg0MjIDOIdNbLPjS24KPlSse176Wb9x5sPh1VSBJqBQ==
"@abp/tui-editor@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-4.1.0.tgz#337c1fbe9a7325837e57db88fe0265259da7d463"
integrity sha512-KV1IexfjW8Hrni4CcSWzqshyvUSNNH3W14S+8JmoHurPw7iDPCkrIRDt5csJQAnDFu2e4YXHKnDwORKYqmOYsg==
dependencies:
"@abp/codemirror" "~4.1.0-rc.2"
"@abp/highlight.js" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0-rc.2"
"@abp/markdown-it" "~4.1.0-rc.2"
"@abp/codemirror" "~4.1.0"
"@abp/highlight.js" "~4.1.0"
"@abp/jquery" "~4.1.0"
"@abp/markdown-it" "~4.1.0"
tui-editor "^1.4.10"
"@abp/utils@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0-rc.2.tgz#eb6dbf0ee493d0f050b37347d2d6d283098aedae"
integrity sha512-V2k5I89lVBoeGIKgg4p2H9GlMAcDWbctwKZPVwBEMVEVm1uTR2xQAWdTdSFd5Q8I8Xsf/aIG8ELM7l5j2h7/zQ==
"@abp/utils@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0.tgz#1f5d8b4dc8a234c15d87869436485fd737f18b50"
integrity sha512-fksnKF1bsOab5AVe8qBs2HZmcRVjrnsMwXs23xaqSRdpWXpPgsLRuKCJHlD0usREyerDGPkpY5opUnXWggHvCg==
dependencies:
just-compare "^1.3.0"

2
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.1.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.1.0"
}
}

238
modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0-rc.2.tgz#b9462cbe36c41d68e2f44b79a3a2dba2c1b2b54a"
integrity sha512-KW3J6HnN1zZrCmrWmEcXBnGIOeuJDdp1jUECAm4Bdxi++VzfIbGlVvpcvUdT1E213reOUWi4dPhcej12DwrmDw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0-rc.2.tgz#d64cea1e504bcd3a08a1819025d40f3f84f0aadc"
integrity sha512-A/DRLwtJO7YCdqAgSF84wNRKjvGEQvcBocIwRxXCJEe3drxMoSwkAGjXQlxIYWZKdYbYUWDTjil2Mvwf91GUqg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0-rc.2"
"@abp/bootstrap" "~4.1.0-rc.2"
"@abp/bootstrap-datepicker" "~4.1.0-rc.2"
"@abp/datatables.net-bs4" "~4.1.0-rc.2"
"@abp/font-awesome" "~4.1.0-rc.2"
"@abp/jquery-form" "~4.1.0-rc.2"
"@abp/jquery-validation-unobtrusive" "~4.1.0-rc.2"
"@abp/lodash" "~4.1.0-rc.2"
"@abp/luxon" "~4.1.0-rc.2"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0-rc.2"
"@abp/select2" "~4.1.0-rc.2"
"@abp/sweetalert" "~4.1.0-rc.2"
"@abp/timeago" "~4.1.0-rc.2"
"@abp/toastr" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0-rc.2.tgz#54bf30def590e6d25fc35f77253888f3d9f74b9c"
integrity sha512-eOh5IBn4eNAjj2i6tlLRIV/r61Ef7+Z3PNvGgdml/XCo50el4G9XE7shxuGOY+MaFMfmsST2tcJlO9iAo9n2Yw==
"@abp/aspnetcore.mvc.ui.theme.basic@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0.tgz#ef1b31feb678fdf4ce6fa76fb1e9d091ca97c9a4"
integrity sha512-eAD39TaMVnXsEOVyKcChIggpzJw3TzDua8x/APlHfxWBQOuCb7C/PWLWH9DIN14kl8JsVpgRrUSlKsvvY8CIRA==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0.tgz#40ef6d20a83a8e700179be7f3989c8d5135808d0"
integrity sha512-UdT3XCUMEKguB1w7qF4TO1ClayWn63oiP7wnOUmIg+O1EdKTHUBYfztle4Qb/aqtzjHoZBsOnMZH/KOyQKejDg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0"
"@abp/bootstrap" "~4.1.0"
"@abp/bootstrap-datepicker" "~4.1.0"
"@abp/datatables.net-bs4" "~4.1.0"
"@abp/font-awesome" "~4.1.0"
"@abp/jquery-form" "~4.1.0"
"@abp/jquery-validation-unobtrusive" "~4.1.0"
"@abp/lodash" "~4.1.0"
"@abp/luxon" "~4.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0"
"@abp/select2" "~4.1.0"
"@abp/sweetalert" "~4.1.0"
"@abp/timeago" "~4.1.0"
"@abp/toastr" "~4.1.0"
"@abp/aspnetcore.mvc.ui@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0.tgz#c23ba554270a9534ac29a7e7ca8ab1ed0dc1cc7b"
integrity sha512-CaPVi8dKLD0/7zrsCdi3hA1alkUKVE3jVoUa2bl0mrBg30Xzu+IDAu6aIWFXOCnIX8YthejhA2Wtn4knbTOB4g==
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.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0-rc.2.tgz#d3fe863222a11771d366b1a3c246aaf34df94081"
integrity sha512-vn2xWAK3xqo5fMZJ9dOAZZmL+ZUnzZZNh3lF6uA97wTN/SbePlmHBYJpsCKIxOwbJS2HCvekHGJN/Ps4oEjlbw==
"@abp/bootstrap-datepicker@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0.tgz#5c97fba78e56ba90820014a13e4c2d394d27332f"
integrity sha512-5XDW/Y2Gu1SgIm/tyRuo6vwcJdpFWIEnqDJ+0wjdOvWl3a+HnQTDya5g74mCmEBfYQgYDw8Wz8ovChOOzExh7Q==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0-rc.2.tgz#b5132cf4c4c92fe833823cf2b91ab1b0167b0ecf"
integrity sha512-SsWEV0DveBIHiG051E6aBB371D15QIsGeo+POFhvQUvrlmzMBlFCAlmH0ef8w1n+3M3C37irCgEGKctt2pbcxQ==
"@abp/bootstrap@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0.tgz#50ac670e319a60a985109e96302eed3e46d36afe"
integrity sha512-4lFrbaNPYRa45oH/D+fFUSmgD/OdSoCmHXvSdG2ye6+wyl6gy4JRfjjTOFmwpsyOWJdPMJSV6CARCSSsfeaItA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/core@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0-rc.2.tgz#d306106a53fa56109751be0099785c94f43be56f"
integrity sha512-b0mOYSz8hNgZ/hBeYg8hkthJgE8CLyHNa2NcythPoIW8RR5qHmDtGoFnuFovLvLk7r+M4NWyxXRKEshSszIPyA==
"@abp/core@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0.tgz#6bdfa378d44cbf8f611d52dddf0915e5bbc188d5"
integrity sha512-HXkKCfh8+Yc9iVBsZy7eSoQbkBSdV1QTRAF8+cPgbEpU4x4WlUOy61xqb2pSLFzX9nSma83WhdDyQkzWDBTRZQ==
dependencies:
"@abp/utils" "^4.1.0-rc.2"
"@abp/utils" "^4.1.0"
"@abp/datatables.net-bs4@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0-rc.2.tgz#99aa1fbad91939fc23265324a3d8a45d0c1e5a7a"
integrity sha512-Y9UyqniOkx5DJO+2GGurnQE1yfRmGaQ3y7V07gKWRq+gHLUhE+vfgOLVpGM6ufdTIbLvVw5Ng+3gfOmPlUnpxg==
"@abp/datatables.net-bs4@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0.tgz#c28097b82f62b236d6f2578d7148128914eb5cd8"
integrity sha512-/fM/3Q/yXJaPsXGKIOZBgihxGLZ/T+n+6wguFeEypsAXCJ4MfpcRZ/eFPvVlBmmc/PVIdE8xtj5rnH9+/2KHWg==
dependencies:
"@abp/datatables.net" "~4.1.0-rc.2"
"@abp/datatables.net" "~4.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0-rc.2.tgz#1a134688259d32187d822d8a49c7a68b4cc226c7"
integrity sha512-9o5g8s7ZTlThd1FMFmO7wS+MxmXgUMmiWx7Hwara9ypfJPd0vanz10bQAdTpLiDy/aa0tUmz0xOVj73yvBJm9Q==
"@abp/datatables.net@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0.tgz#a037fdae4beb9805e8eea71f086573eed4fd3c92"
integrity sha512-OZogC3UEvTSyas+VcxffggQ8U2fi399Ka+++4p+oXCPGykDLU1EKOSA/CToiu9uYNYJQ3125SjRZSOJD5h/ukg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
datatables.net "^1.10.21"
"@abp/font-awesome@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0-rc.2.tgz#ecf490861c09250cf61611ac74cec5ab4392e807"
integrity sha512-6yAsf/ee2hdrHHUACql8c3gY54Hd7YAK2olHymyc3Io2hhK2VxXRc2W2oRSwbQ9GsSE+XDrEVtjIR64nBseTeg==
"@abp/font-awesome@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0.tgz#a95f8df5f7e3695aaf05e3eab9f3087f4017d7e9"
integrity sha512-Zc4mPp740ACe10ollWez4qNg2QnM/AexDkF3pkxYNb1B9J4Fb8H7SefOOtMRdRgHK+sEe5vrPfIs8//gTf4xeQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0-rc.2.tgz#76dff67a3fe6e6ad7bd60bb909de93c09966cc0a"
integrity sha512-LGafwxyRYUbHQlJ9pPbYdkVqzdT/y1Fp4Nr4C3W5jxsJuaSICl0RPkRHIPALeoqbpEWuj6dVep6ZuO9hhxBzNw==
"@abp/jquery-form@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0.tgz#b773c4f4619c3731c781993bba59a1cf38357918"
integrity sha512-7Mio+ehj7M2qt3oOyDBi97yNg1ip6BZiUpHkMtmPc/OxdnxpOZV9tZHyhbsoZFYTu1dUSmrpY6HKY0zibohyBQ==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0-rc.2.tgz#1f1d395cfa47740d47303ff512592ff1993f9e13"
integrity sha512-0LXWvgfyLHVw7qRVOmY0rfVlq+yJq/nhbcVoYK+QbmKnrFu+KZg0KNMOD8wTXs8mZ1EKGQpoQKWxImtCnGrV/A==
"@abp/jquery-validation-unobtrusive@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0.tgz#954ce53a46475c09056d789eba761568482ea8c9"
integrity sha512-diykqQiGzowYDpsG9PMd3ipeXFrilRQiHQX2mglBf+FNKMocp7LBAIeD2INkiObczZfIKkoqu7WCRqb1bl5uKg==
dependencies:
"@abp/jquery-validation" "~4.1.0-rc.2"
"@abp/jquery-validation" "~4.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0-rc.2.tgz#ad4b464fd0133eab8d08c781c7d7c4e00bc4918d"
integrity sha512-iLTobfwqDk7iiQxvv5UowxOKywsh/77VlAVktstnFG3N3Y73+JYKzM0mGM/j4zM1OrjbF9/cnPnDVX7bATPz9w==
"@abp/jquery-validation@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0.tgz#29cffb21270c52758804cf0d3f5b6e83b327047d"
integrity sha512-JrDcejGKz33LeNMn3+DguzDd8XN6LXlceffMc8jz4zYvtb+NqwUn7NFvH3gnKfNKBc8V9cQIHxQpYQa8luYcsA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0-rc.2.tgz#0f64cad5b1ae3e47d2344e5fb30c347b89d6d2bb"
integrity sha512-YubZwMJIN+UcfxfUlt3usfcLMG9WcXNpemUsdBtlKNzti562KZMIHPFLRL+DsiqvzZ74h2PxSWWsxS42Z7z0Yw==
"@abp/jquery@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0.tgz#3c021d24eb5ef7fe198da8982657075556556701"
integrity sha512-1HLjkxj5EudcoxZ9CVqsP0tgKwLQBs5KI9vnnW9I9pco6fIf1Q2PT+TZZywOZ3ftkYfMp90PF+A5IL/JfovnpQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
jquery "~3.5.1"
"@abp/lodash@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0-rc.2.tgz#9281c641ab7b7b33e7acf12815dc461e7ae967b9"
integrity sha512-RqdekrAyLPaLNJddmrq89EdrI1xg4296tOafFLHvirgRWisJTIa9bflTOwMwEg9FNdLJgA0zHi4WdAMer0qZdA==
"@abp/lodash@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0.tgz#e605644ba745813a2937b24f3b9d2ad86b20dec9"
integrity sha512-jUjua8iZIE5P/AELI/nffS09IorBRM/Jfq6agCOX6Qg7d8od66B9gV727mTuaMd9ZW65S1wW5+zMJhm5gy7Qpg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
lodash "^4.17.15"
"@abp/luxon@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0-rc.2.tgz#78fc1cf651d7c19b87a31823cd3ce68961d6b1e6"
integrity sha512-U4e9uGZlg9xj9tBNP337v3wiaSR6qxWsBgh/duQGWrqV+75LlQjYcZaPoXDidUUS6U6epDSR2pc2T39rahcgSQ==
"@abp/luxon@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0.tgz#12c9b6eb2a87e0ebe7df58bcbd5f38211ca62e81"
integrity sha512-gc8DAZHa+fcnDGWGQHmI8Tllr+QzHAZejrwoVSRiRX+Oebf67sCEDdbwB8yWeEHSa3MbpPtm7I1aTc/+dQI8Dg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0-rc.2.tgz#36553e71052cad9734e0c9b2c65759e538468648"
integrity sha512-JQ6PCcj5qmF9MxNRPAsKHHnqBPCdn4lQnwxZrHcG9tD70Gx+NfC4UH41tqXI+htba4k0PHRyH2y39Q1iJm0NFA==
"@abp/malihu-custom-scrollbar-plugin@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0.tgz#a340fa3757eb01bd510d3dcb54331b5b0a93a63f"
integrity sha512-CMCIxQNwPNRmmg4WctusMWhg8evrCoq3frQ5Fxnc/fKaMrrzQKL5PY2cV2jY2m5Se+Y+S9EPa3cNOQ1/KYuQ9w==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/select2@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0-rc.2.tgz#c48e865f401ddce32dff2a7a14ae07c4bde2f57b"
integrity sha512-YYK/SIqXQcSDQFMVg/ogohc76d4JDrOVQEbzfkNNI5bKVJo+hkqtNzAwV9FLdPZZNw15QMv0eF1ie4aUtIxyaA==
"@abp/select2@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0.tgz#c1b8b7cca16bfe813d83e84f738acda8f8182159"
integrity sha512-p6atSzYTU5o36S4GHCHvi3wHf3fgg6wNJIxk4ohSxu1mOQnUbmyYbxKiDFxq+MOR2sOfVmAjqb4xvcIjexg6hA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
select2 "^4.0.13"
"@abp/sweetalert@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0-rc.2.tgz#cdcaf8e9a33cf218a687fd6a42cfe1c85d89c6b7"
integrity sha512-sjQd8TF9oUnaQ1OPTGdVyAfWqSZEk4bRbC/qw2CouEOfRLatzkC0JcmzFLN0f5N1am1RQwkFakpENKH7NqTCvg==
"@abp/sweetalert@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0.tgz#e5c8cb0c84435a0ca97be62c7b9204bbd05ae23d"
integrity sha512-VwIp7VD7zzkRMJw3yu7YOlWbIA/JbLYZeyEpNFMIDxAGYG936tVsmH+aQVTovHF/3+VsYf9Da1JjKymLVHkWRg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0-rc.2.tgz#445d043ae482b76799b496ae6565abfaf75a34b9"
integrity sha512-wWx56EZMUGIfqJV5JLCvUp4RVhKXHYLQaVNQSF8E05COXmSQwFThVS7vbuiODFp2BGm6RAqCVtZDCreu2B8z9Q==
"@abp/timeago@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0.tgz#06df44618398cbec7bd174b7afd180907b67bb69"
integrity sha512-e1n9i8O0CaT4EIrnzMOur1HxSDpelgaVCLS9NWsTf4j4fIR3ojFqSNt76tpaPqVGBY9vRraGGu16XembYFF+jA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
timeago "^1.6.7"
"@abp/toastr@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0-rc.2.tgz#1af16fa8687201b6b9c7229d087a4233998703b9"
integrity sha512-g+Jl5H1ZHoJ4JwWuix0xA+GMFY42pwq8WYjxP6qE2/Y2aixYHVIui15eBqF2L06yXOt53YFcC1+pxjrp91xHxw==
"@abp/toastr@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0.tgz#eaa79a9e48638a2e86cb9573516e8614bfaf15a4"
integrity sha512-lA3pCdXgAWe1sVhC+/UNJa4T9AdxgN5ncW/3KW+9fg+IOieDwDibPIiuyornxrm+8G6uvrGxi//I3EeeqHABbg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
toastr "^2.1.4"
"@abp/utils@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0-rc.2.tgz#eb6dbf0ee493d0f050b37347d2d6d283098aedae"
integrity sha512-V2k5I89lVBoeGIKgg4p2H9GlMAcDWbctwKZPVwBEMVEVm1uTR2xQAWdTdSFd5Q8I8Xsf/aIG8ELM7l5j2h7/zQ==
"@abp/utils@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0.tgz#1f5d8b4dc8a234c15d87869436485fd737f18b50"
integrity sha512-fksnKF1bsOab5AVe8qBs2HZmcRVjrnsMwXs23xaqSRdpWXpPgsLRuKCJHlD0usREyerDGPkpY5opUnXWggHvCg==
dependencies:
just-compare "^1.3.0"

8
modules/cms-kit/angular/package.json

@ -16,10 +16,10 @@
"private": true,
"dependencies": {
"@abp/ng.account": "~3.3.2",
"@abp/ng.identity": "~4.1.0-rc.2",
"@abp/ng.setting-management": "~4.1.0-rc.2",
"@abp/ng.tenant-management": "~4.1.0-rc.2",
"@abp/ng.theme.basic": "~4.1.0-rc.2",
"@abp/ng.identity": "~4.1.0",
"@abp/ng.setting-management": "~4.1.0",
"@abp/ng.tenant-management": "~4.1.0",
"@abp/ng.theme.basic": "~4.1.0",
"@angular/animations": "~10.0.0",
"@angular/common": "~10.0.0",
"@angular/compiler": "~10.0.0",

4
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.1.0-rc.2",
"@abp/ng.theme.shared": ">=4.1.0-rc.2"
"@abp/ng.core": ">=4.1.0",
"@abp/ng.theme.shared": ">=4.1.0"
},
"dependencies": {
"tslib": "^2.0.0"

2
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.1.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.1.0"
}
}

238
modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0-rc.2.tgz#b9462cbe36c41d68e2f44b79a3a2dba2c1b2b54a"
integrity sha512-KW3J6HnN1zZrCmrWmEcXBnGIOeuJDdp1jUECAm4Bdxi++VzfIbGlVvpcvUdT1E213reOUWi4dPhcej12DwrmDw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0-rc.2.tgz#d64cea1e504bcd3a08a1819025d40f3f84f0aadc"
integrity sha512-A/DRLwtJO7YCdqAgSF84wNRKjvGEQvcBocIwRxXCJEe3drxMoSwkAGjXQlxIYWZKdYbYUWDTjil2Mvwf91GUqg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0-rc.2"
"@abp/bootstrap" "~4.1.0-rc.2"
"@abp/bootstrap-datepicker" "~4.1.0-rc.2"
"@abp/datatables.net-bs4" "~4.1.0-rc.2"
"@abp/font-awesome" "~4.1.0-rc.2"
"@abp/jquery-form" "~4.1.0-rc.2"
"@abp/jquery-validation-unobtrusive" "~4.1.0-rc.2"
"@abp/lodash" "~4.1.0-rc.2"
"@abp/luxon" "~4.1.0-rc.2"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0-rc.2"
"@abp/select2" "~4.1.0-rc.2"
"@abp/sweetalert" "~4.1.0-rc.2"
"@abp/timeago" "~4.1.0-rc.2"
"@abp/toastr" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0-rc.2.tgz#54bf30def590e6d25fc35f77253888f3d9f74b9c"
integrity sha512-eOh5IBn4eNAjj2i6tlLRIV/r61Ef7+Z3PNvGgdml/XCo50el4G9XE7shxuGOY+MaFMfmsST2tcJlO9iAo9n2Yw==
"@abp/aspnetcore.mvc.ui.theme.basic@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0.tgz#ef1b31feb678fdf4ce6fa76fb1e9d091ca97c9a4"
integrity sha512-eAD39TaMVnXsEOVyKcChIggpzJw3TzDua8x/APlHfxWBQOuCb7C/PWLWH9DIN14kl8JsVpgRrUSlKsvvY8CIRA==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0.tgz#40ef6d20a83a8e700179be7f3989c8d5135808d0"
integrity sha512-UdT3XCUMEKguB1w7qF4TO1ClayWn63oiP7wnOUmIg+O1EdKTHUBYfztle4Qb/aqtzjHoZBsOnMZH/KOyQKejDg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0"
"@abp/bootstrap" "~4.1.0"
"@abp/bootstrap-datepicker" "~4.1.0"
"@abp/datatables.net-bs4" "~4.1.0"
"@abp/font-awesome" "~4.1.0"
"@abp/jquery-form" "~4.1.0"
"@abp/jquery-validation-unobtrusive" "~4.1.0"
"@abp/lodash" "~4.1.0"
"@abp/luxon" "~4.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0"
"@abp/select2" "~4.1.0"
"@abp/sweetalert" "~4.1.0"
"@abp/timeago" "~4.1.0"
"@abp/toastr" "~4.1.0"
"@abp/aspnetcore.mvc.ui@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0.tgz#c23ba554270a9534ac29a7e7ca8ab1ed0dc1cc7b"
integrity sha512-CaPVi8dKLD0/7zrsCdi3hA1alkUKVE3jVoUa2bl0mrBg30Xzu+IDAu6aIWFXOCnIX8YthejhA2Wtn4knbTOB4g==
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.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0-rc.2.tgz#d3fe863222a11771d366b1a3c246aaf34df94081"
integrity sha512-vn2xWAK3xqo5fMZJ9dOAZZmL+ZUnzZZNh3lF6uA97wTN/SbePlmHBYJpsCKIxOwbJS2HCvekHGJN/Ps4oEjlbw==
"@abp/bootstrap-datepicker@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0.tgz#5c97fba78e56ba90820014a13e4c2d394d27332f"
integrity sha512-5XDW/Y2Gu1SgIm/tyRuo6vwcJdpFWIEnqDJ+0wjdOvWl3a+HnQTDya5g74mCmEBfYQgYDw8Wz8ovChOOzExh7Q==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0-rc.2.tgz#b5132cf4c4c92fe833823cf2b91ab1b0167b0ecf"
integrity sha512-SsWEV0DveBIHiG051E6aBB371D15QIsGeo+POFhvQUvrlmzMBlFCAlmH0ef8w1n+3M3C37irCgEGKctt2pbcxQ==
"@abp/bootstrap@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0.tgz#50ac670e319a60a985109e96302eed3e46d36afe"
integrity sha512-4lFrbaNPYRa45oH/D+fFUSmgD/OdSoCmHXvSdG2ye6+wyl6gy4JRfjjTOFmwpsyOWJdPMJSV6CARCSSsfeaItA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/core@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0-rc.2.tgz#d306106a53fa56109751be0099785c94f43be56f"
integrity sha512-b0mOYSz8hNgZ/hBeYg8hkthJgE8CLyHNa2NcythPoIW8RR5qHmDtGoFnuFovLvLk7r+M4NWyxXRKEshSszIPyA==
"@abp/core@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0.tgz#6bdfa378d44cbf8f611d52dddf0915e5bbc188d5"
integrity sha512-HXkKCfh8+Yc9iVBsZy7eSoQbkBSdV1QTRAF8+cPgbEpU4x4WlUOy61xqb2pSLFzX9nSma83WhdDyQkzWDBTRZQ==
dependencies:
"@abp/utils" "^4.1.0-rc.2"
"@abp/utils" "^4.1.0"
"@abp/datatables.net-bs4@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0-rc.2.tgz#99aa1fbad91939fc23265324a3d8a45d0c1e5a7a"
integrity sha512-Y9UyqniOkx5DJO+2GGurnQE1yfRmGaQ3y7V07gKWRq+gHLUhE+vfgOLVpGM6ufdTIbLvVw5Ng+3gfOmPlUnpxg==
"@abp/datatables.net-bs4@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0.tgz#c28097b82f62b236d6f2578d7148128914eb5cd8"
integrity sha512-/fM/3Q/yXJaPsXGKIOZBgihxGLZ/T+n+6wguFeEypsAXCJ4MfpcRZ/eFPvVlBmmc/PVIdE8xtj5rnH9+/2KHWg==
dependencies:
"@abp/datatables.net" "~4.1.0-rc.2"
"@abp/datatables.net" "~4.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0-rc.2.tgz#1a134688259d32187d822d8a49c7a68b4cc226c7"
integrity sha512-9o5g8s7ZTlThd1FMFmO7wS+MxmXgUMmiWx7Hwara9ypfJPd0vanz10bQAdTpLiDy/aa0tUmz0xOVj73yvBJm9Q==
"@abp/datatables.net@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0.tgz#a037fdae4beb9805e8eea71f086573eed4fd3c92"
integrity sha512-OZogC3UEvTSyas+VcxffggQ8U2fi399Ka+++4p+oXCPGykDLU1EKOSA/CToiu9uYNYJQ3125SjRZSOJD5h/ukg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
datatables.net "^1.10.21"
"@abp/font-awesome@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0-rc.2.tgz#ecf490861c09250cf61611ac74cec5ab4392e807"
integrity sha512-6yAsf/ee2hdrHHUACql8c3gY54Hd7YAK2olHymyc3Io2hhK2VxXRc2W2oRSwbQ9GsSE+XDrEVtjIR64nBseTeg==
"@abp/font-awesome@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0.tgz#a95f8df5f7e3695aaf05e3eab9f3087f4017d7e9"
integrity sha512-Zc4mPp740ACe10ollWez4qNg2QnM/AexDkF3pkxYNb1B9J4Fb8H7SefOOtMRdRgHK+sEe5vrPfIs8//gTf4xeQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0-rc.2.tgz#76dff67a3fe6e6ad7bd60bb909de93c09966cc0a"
integrity sha512-LGafwxyRYUbHQlJ9pPbYdkVqzdT/y1Fp4Nr4C3W5jxsJuaSICl0RPkRHIPALeoqbpEWuj6dVep6ZuO9hhxBzNw==
"@abp/jquery-form@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0.tgz#b773c4f4619c3731c781993bba59a1cf38357918"
integrity sha512-7Mio+ehj7M2qt3oOyDBi97yNg1ip6BZiUpHkMtmPc/OxdnxpOZV9tZHyhbsoZFYTu1dUSmrpY6HKY0zibohyBQ==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0-rc.2.tgz#1f1d395cfa47740d47303ff512592ff1993f9e13"
integrity sha512-0LXWvgfyLHVw7qRVOmY0rfVlq+yJq/nhbcVoYK+QbmKnrFu+KZg0KNMOD8wTXs8mZ1EKGQpoQKWxImtCnGrV/A==
"@abp/jquery-validation-unobtrusive@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0.tgz#954ce53a46475c09056d789eba761568482ea8c9"
integrity sha512-diykqQiGzowYDpsG9PMd3ipeXFrilRQiHQX2mglBf+FNKMocp7LBAIeD2INkiObczZfIKkoqu7WCRqb1bl5uKg==
dependencies:
"@abp/jquery-validation" "~4.1.0-rc.2"
"@abp/jquery-validation" "~4.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0-rc.2.tgz#ad4b464fd0133eab8d08c781c7d7c4e00bc4918d"
integrity sha512-iLTobfwqDk7iiQxvv5UowxOKywsh/77VlAVktstnFG3N3Y73+JYKzM0mGM/j4zM1OrjbF9/cnPnDVX7bATPz9w==
"@abp/jquery-validation@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0.tgz#29cffb21270c52758804cf0d3f5b6e83b327047d"
integrity sha512-JrDcejGKz33LeNMn3+DguzDd8XN6LXlceffMc8jz4zYvtb+NqwUn7NFvH3gnKfNKBc8V9cQIHxQpYQa8luYcsA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0-rc.2.tgz#0f64cad5b1ae3e47d2344e5fb30c347b89d6d2bb"
integrity sha512-YubZwMJIN+UcfxfUlt3usfcLMG9WcXNpemUsdBtlKNzti562KZMIHPFLRL+DsiqvzZ74h2PxSWWsxS42Z7z0Yw==
"@abp/jquery@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0.tgz#3c021d24eb5ef7fe198da8982657075556556701"
integrity sha512-1HLjkxj5EudcoxZ9CVqsP0tgKwLQBs5KI9vnnW9I9pco6fIf1Q2PT+TZZywOZ3ftkYfMp90PF+A5IL/JfovnpQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
jquery "~3.5.1"
"@abp/lodash@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0-rc.2.tgz#9281c641ab7b7b33e7acf12815dc461e7ae967b9"
integrity sha512-RqdekrAyLPaLNJddmrq89EdrI1xg4296tOafFLHvirgRWisJTIa9bflTOwMwEg9FNdLJgA0zHi4WdAMer0qZdA==
"@abp/lodash@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0.tgz#e605644ba745813a2937b24f3b9d2ad86b20dec9"
integrity sha512-jUjua8iZIE5P/AELI/nffS09IorBRM/Jfq6agCOX6Qg7d8od66B9gV727mTuaMd9ZW65S1wW5+zMJhm5gy7Qpg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
lodash "^4.17.15"
"@abp/luxon@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0-rc.2.tgz#78fc1cf651d7c19b87a31823cd3ce68961d6b1e6"
integrity sha512-U4e9uGZlg9xj9tBNP337v3wiaSR6qxWsBgh/duQGWrqV+75LlQjYcZaPoXDidUUS6U6epDSR2pc2T39rahcgSQ==
"@abp/luxon@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0.tgz#12c9b6eb2a87e0ebe7df58bcbd5f38211ca62e81"
integrity sha512-gc8DAZHa+fcnDGWGQHmI8Tllr+QzHAZejrwoVSRiRX+Oebf67sCEDdbwB8yWeEHSa3MbpPtm7I1aTc/+dQI8Dg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0-rc.2.tgz#36553e71052cad9734e0c9b2c65759e538468648"
integrity sha512-JQ6PCcj5qmF9MxNRPAsKHHnqBPCdn4lQnwxZrHcG9tD70Gx+NfC4UH41tqXI+htba4k0PHRyH2y39Q1iJm0NFA==
"@abp/malihu-custom-scrollbar-plugin@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0.tgz#a340fa3757eb01bd510d3dcb54331b5b0a93a63f"
integrity sha512-CMCIxQNwPNRmmg4WctusMWhg8evrCoq3frQ5Fxnc/fKaMrrzQKL5PY2cV2jY2m5Se+Y+S9EPa3cNOQ1/KYuQ9w==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/select2@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0-rc.2.tgz#c48e865f401ddce32dff2a7a14ae07c4bde2f57b"
integrity sha512-YYK/SIqXQcSDQFMVg/ogohc76d4JDrOVQEbzfkNNI5bKVJo+hkqtNzAwV9FLdPZZNw15QMv0eF1ie4aUtIxyaA==
"@abp/select2@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0.tgz#c1b8b7cca16bfe813d83e84f738acda8f8182159"
integrity sha512-p6atSzYTU5o36S4GHCHvi3wHf3fgg6wNJIxk4ohSxu1mOQnUbmyYbxKiDFxq+MOR2sOfVmAjqb4xvcIjexg6hA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
select2 "^4.0.13"
"@abp/sweetalert@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0-rc.2.tgz#cdcaf8e9a33cf218a687fd6a42cfe1c85d89c6b7"
integrity sha512-sjQd8TF9oUnaQ1OPTGdVyAfWqSZEk4bRbC/qw2CouEOfRLatzkC0JcmzFLN0f5N1am1RQwkFakpENKH7NqTCvg==
"@abp/sweetalert@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0.tgz#e5c8cb0c84435a0ca97be62c7b9204bbd05ae23d"
integrity sha512-VwIp7VD7zzkRMJw3yu7YOlWbIA/JbLYZeyEpNFMIDxAGYG936tVsmH+aQVTovHF/3+VsYf9Da1JjKymLVHkWRg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0-rc.2.tgz#445d043ae482b76799b496ae6565abfaf75a34b9"
integrity sha512-wWx56EZMUGIfqJV5JLCvUp4RVhKXHYLQaVNQSF8E05COXmSQwFThVS7vbuiODFp2BGm6RAqCVtZDCreu2B8z9Q==
"@abp/timeago@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0.tgz#06df44618398cbec7bd174b7afd180907b67bb69"
integrity sha512-e1n9i8O0CaT4EIrnzMOur1HxSDpelgaVCLS9NWsTf4j4fIR3ojFqSNt76tpaPqVGBY9vRraGGu16XembYFF+jA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
timeago "^1.6.7"
"@abp/toastr@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0-rc.2.tgz#1af16fa8687201b6b9c7229d087a4233998703b9"
integrity sha512-g+Jl5H1ZHoJ4JwWuix0xA+GMFY42pwq8WYjxP6qE2/Y2aixYHVIui15eBqF2L06yXOt53YFcC1+pxjrp91xHxw==
"@abp/toastr@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0.tgz#eaa79a9e48638a2e86cb9573516e8614bfaf15a4"
integrity sha512-lA3pCdXgAWe1sVhC+/UNJa4T9AdxgN5ncW/3KW+9fg+IOieDwDibPIiuyornxrm+8G6uvrGxi//I3EeeqHABbg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
toastr "^2.1.4"
"@abp/utils@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0-rc.2.tgz#eb6dbf0ee493d0f050b37347d2d6d283098aedae"
integrity sha512-V2k5I89lVBoeGIKgg4p2H9GlMAcDWbctwKZPVwBEMVEVm1uTR2xQAWdTdSFd5Q8I8Xsf/aIG8ELM7l5j2h7/zQ==
"@abp/utils@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0.tgz#1f5d8b4dc8a234c15d87869436485fd737f18b50"
integrity sha512-fksnKF1bsOab5AVe8qBs2HZmcRVjrnsMwXs23xaqSRdpWXpPgsLRuKCJHlD0usREyerDGPkpY5opUnXWggHvCg==
dependencies:
just-compare "^1.3.0"

2
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.1.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.1.0"
}
}

238
modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0-rc.2.tgz#b9462cbe36c41d68e2f44b79a3a2dba2c1b2b54a"
integrity sha512-KW3J6HnN1zZrCmrWmEcXBnGIOeuJDdp1jUECAm4Bdxi++VzfIbGlVvpcvUdT1E213reOUWi4dPhcej12DwrmDw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0-rc.2.tgz#d64cea1e504bcd3a08a1819025d40f3f84f0aadc"
integrity sha512-A/DRLwtJO7YCdqAgSF84wNRKjvGEQvcBocIwRxXCJEe3drxMoSwkAGjXQlxIYWZKdYbYUWDTjil2Mvwf91GUqg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0-rc.2"
"@abp/bootstrap" "~4.1.0-rc.2"
"@abp/bootstrap-datepicker" "~4.1.0-rc.2"
"@abp/datatables.net-bs4" "~4.1.0-rc.2"
"@abp/font-awesome" "~4.1.0-rc.2"
"@abp/jquery-form" "~4.1.0-rc.2"
"@abp/jquery-validation-unobtrusive" "~4.1.0-rc.2"
"@abp/lodash" "~4.1.0-rc.2"
"@abp/luxon" "~4.1.0-rc.2"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0-rc.2"
"@abp/select2" "~4.1.0-rc.2"
"@abp/sweetalert" "~4.1.0-rc.2"
"@abp/timeago" "~4.1.0-rc.2"
"@abp/toastr" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0-rc.2.tgz#54bf30def590e6d25fc35f77253888f3d9f74b9c"
integrity sha512-eOh5IBn4eNAjj2i6tlLRIV/r61Ef7+Z3PNvGgdml/XCo50el4G9XE7shxuGOY+MaFMfmsST2tcJlO9iAo9n2Yw==
"@abp/aspnetcore.mvc.ui.theme.basic@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0.tgz#ef1b31feb678fdf4ce6fa76fb1e9d091ca97c9a4"
integrity sha512-eAD39TaMVnXsEOVyKcChIggpzJw3TzDua8x/APlHfxWBQOuCb7C/PWLWH9DIN14kl8JsVpgRrUSlKsvvY8CIRA==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0.tgz#40ef6d20a83a8e700179be7f3989c8d5135808d0"
integrity sha512-UdT3XCUMEKguB1w7qF4TO1ClayWn63oiP7wnOUmIg+O1EdKTHUBYfztle4Qb/aqtzjHoZBsOnMZH/KOyQKejDg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0"
"@abp/bootstrap" "~4.1.0"
"@abp/bootstrap-datepicker" "~4.1.0"
"@abp/datatables.net-bs4" "~4.1.0"
"@abp/font-awesome" "~4.1.0"
"@abp/jquery-form" "~4.1.0"
"@abp/jquery-validation-unobtrusive" "~4.1.0"
"@abp/lodash" "~4.1.0"
"@abp/luxon" "~4.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0"
"@abp/select2" "~4.1.0"
"@abp/sweetalert" "~4.1.0"
"@abp/timeago" "~4.1.0"
"@abp/toastr" "~4.1.0"
"@abp/aspnetcore.mvc.ui@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0.tgz#c23ba554270a9534ac29a7e7ca8ab1ed0dc1cc7b"
integrity sha512-CaPVi8dKLD0/7zrsCdi3hA1alkUKVE3jVoUa2bl0mrBg30Xzu+IDAu6aIWFXOCnIX8YthejhA2Wtn4knbTOB4g==
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.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0-rc.2.tgz#d3fe863222a11771d366b1a3c246aaf34df94081"
integrity sha512-vn2xWAK3xqo5fMZJ9dOAZZmL+ZUnzZZNh3lF6uA97wTN/SbePlmHBYJpsCKIxOwbJS2HCvekHGJN/Ps4oEjlbw==
"@abp/bootstrap-datepicker@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0.tgz#5c97fba78e56ba90820014a13e4c2d394d27332f"
integrity sha512-5XDW/Y2Gu1SgIm/tyRuo6vwcJdpFWIEnqDJ+0wjdOvWl3a+HnQTDya5g74mCmEBfYQgYDw8Wz8ovChOOzExh7Q==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0-rc.2.tgz#b5132cf4c4c92fe833823cf2b91ab1b0167b0ecf"
integrity sha512-SsWEV0DveBIHiG051E6aBB371D15QIsGeo+POFhvQUvrlmzMBlFCAlmH0ef8w1n+3M3C37irCgEGKctt2pbcxQ==
"@abp/bootstrap@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0.tgz#50ac670e319a60a985109e96302eed3e46d36afe"
integrity sha512-4lFrbaNPYRa45oH/D+fFUSmgD/OdSoCmHXvSdG2ye6+wyl6gy4JRfjjTOFmwpsyOWJdPMJSV6CARCSSsfeaItA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/core@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0-rc.2.tgz#d306106a53fa56109751be0099785c94f43be56f"
integrity sha512-b0mOYSz8hNgZ/hBeYg8hkthJgE8CLyHNa2NcythPoIW8RR5qHmDtGoFnuFovLvLk7r+M4NWyxXRKEshSszIPyA==
"@abp/core@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0.tgz#6bdfa378d44cbf8f611d52dddf0915e5bbc188d5"
integrity sha512-HXkKCfh8+Yc9iVBsZy7eSoQbkBSdV1QTRAF8+cPgbEpU4x4WlUOy61xqb2pSLFzX9nSma83WhdDyQkzWDBTRZQ==
dependencies:
"@abp/utils" "^4.1.0-rc.2"
"@abp/utils" "^4.1.0"
"@abp/datatables.net-bs4@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0-rc.2.tgz#99aa1fbad91939fc23265324a3d8a45d0c1e5a7a"
integrity sha512-Y9UyqniOkx5DJO+2GGurnQE1yfRmGaQ3y7V07gKWRq+gHLUhE+vfgOLVpGM6ufdTIbLvVw5Ng+3gfOmPlUnpxg==
"@abp/datatables.net-bs4@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0.tgz#c28097b82f62b236d6f2578d7148128914eb5cd8"
integrity sha512-/fM/3Q/yXJaPsXGKIOZBgihxGLZ/T+n+6wguFeEypsAXCJ4MfpcRZ/eFPvVlBmmc/PVIdE8xtj5rnH9+/2KHWg==
dependencies:
"@abp/datatables.net" "~4.1.0-rc.2"
"@abp/datatables.net" "~4.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0-rc.2.tgz#1a134688259d32187d822d8a49c7a68b4cc226c7"
integrity sha512-9o5g8s7ZTlThd1FMFmO7wS+MxmXgUMmiWx7Hwara9ypfJPd0vanz10bQAdTpLiDy/aa0tUmz0xOVj73yvBJm9Q==
"@abp/datatables.net@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0.tgz#a037fdae4beb9805e8eea71f086573eed4fd3c92"
integrity sha512-OZogC3UEvTSyas+VcxffggQ8U2fi399Ka+++4p+oXCPGykDLU1EKOSA/CToiu9uYNYJQ3125SjRZSOJD5h/ukg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
datatables.net "^1.10.21"
"@abp/font-awesome@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0-rc.2.tgz#ecf490861c09250cf61611ac74cec5ab4392e807"
integrity sha512-6yAsf/ee2hdrHHUACql8c3gY54Hd7YAK2olHymyc3Io2hhK2VxXRc2W2oRSwbQ9GsSE+XDrEVtjIR64nBseTeg==
"@abp/font-awesome@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0.tgz#a95f8df5f7e3695aaf05e3eab9f3087f4017d7e9"
integrity sha512-Zc4mPp740ACe10ollWez4qNg2QnM/AexDkF3pkxYNb1B9J4Fb8H7SefOOtMRdRgHK+sEe5vrPfIs8//gTf4xeQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0-rc.2.tgz#76dff67a3fe6e6ad7bd60bb909de93c09966cc0a"
integrity sha512-LGafwxyRYUbHQlJ9pPbYdkVqzdT/y1Fp4Nr4C3W5jxsJuaSICl0RPkRHIPALeoqbpEWuj6dVep6ZuO9hhxBzNw==
"@abp/jquery-form@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0.tgz#b773c4f4619c3731c781993bba59a1cf38357918"
integrity sha512-7Mio+ehj7M2qt3oOyDBi97yNg1ip6BZiUpHkMtmPc/OxdnxpOZV9tZHyhbsoZFYTu1dUSmrpY6HKY0zibohyBQ==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0-rc.2.tgz#1f1d395cfa47740d47303ff512592ff1993f9e13"
integrity sha512-0LXWvgfyLHVw7qRVOmY0rfVlq+yJq/nhbcVoYK+QbmKnrFu+KZg0KNMOD8wTXs8mZ1EKGQpoQKWxImtCnGrV/A==
"@abp/jquery-validation-unobtrusive@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0.tgz#954ce53a46475c09056d789eba761568482ea8c9"
integrity sha512-diykqQiGzowYDpsG9PMd3ipeXFrilRQiHQX2mglBf+FNKMocp7LBAIeD2INkiObczZfIKkoqu7WCRqb1bl5uKg==
dependencies:
"@abp/jquery-validation" "~4.1.0-rc.2"
"@abp/jquery-validation" "~4.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0-rc.2.tgz#ad4b464fd0133eab8d08c781c7d7c4e00bc4918d"
integrity sha512-iLTobfwqDk7iiQxvv5UowxOKywsh/77VlAVktstnFG3N3Y73+JYKzM0mGM/j4zM1OrjbF9/cnPnDVX7bATPz9w==
"@abp/jquery-validation@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0.tgz#29cffb21270c52758804cf0d3f5b6e83b327047d"
integrity sha512-JrDcejGKz33LeNMn3+DguzDd8XN6LXlceffMc8jz4zYvtb+NqwUn7NFvH3gnKfNKBc8V9cQIHxQpYQa8luYcsA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0-rc.2.tgz#0f64cad5b1ae3e47d2344e5fb30c347b89d6d2bb"
integrity sha512-YubZwMJIN+UcfxfUlt3usfcLMG9WcXNpemUsdBtlKNzti562KZMIHPFLRL+DsiqvzZ74h2PxSWWsxS42Z7z0Yw==
"@abp/jquery@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0.tgz#3c021d24eb5ef7fe198da8982657075556556701"
integrity sha512-1HLjkxj5EudcoxZ9CVqsP0tgKwLQBs5KI9vnnW9I9pco6fIf1Q2PT+TZZywOZ3ftkYfMp90PF+A5IL/JfovnpQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
jquery "~3.5.1"
"@abp/lodash@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0-rc.2.tgz#9281c641ab7b7b33e7acf12815dc461e7ae967b9"
integrity sha512-RqdekrAyLPaLNJddmrq89EdrI1xg4296tOafFLHvirgRWisJTIa9bflTOwMwEg9FNdLJgA0zHi4WdAMer0qZdA==
"@abp/lodash@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0.tgz#e605644ba745813a2937b24f3b9d2ad86b20dec9"
integrity sha512-jUjua8iZIE5P/AELI/nffS09IorBRM/Jfq6agCOX6Qg7d8od66B9gV727mTuaMd9ZW65S1wW5+zMJhm5gy7Qpg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
lodash "^4.17.15"
"@abp/luxon@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0-rc.2.tgz#78fc1cf651d7c19b87a31823cd3ce68961d6b1e6"
integrity sha512-U4e9uGZlg9xj9tBNP337v3wiaSR6qxWsBgh/duQGWrqV+75LlQjYcZaPoXDidUUS6U6epDSR2pc2T39rahcgSQ==
"@abp/luxon@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0.tgz#12c9b6eb2a87e0ebe7df58bcbd5f38211ca62e81"
integrity sha512-gc8DAZHa+fcnDGWGQHmI8Tllr+QzHAZejrwoVSRiRX+Oebf67sCEDdbwB8yWeEHSa3MbpPtm7I1aTc/+dQI8Dg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0-rc.2.tgz#36553e71052cad9734e0c9b2c65759e538468648"
integrity sha512-JQ6PCcj5qmF9MxNRPAsKHHnqBPCdn4lQnwxZrHcG9tD70Gx+NfC4UH41tqXI+htba4k0PHRyH2y39Q1iJm0NFA==
"@abp/malihu-custom-scrollbar-plugin@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0.tgz#a340fa3757eb01bd510d3dcb54331b5b0a93a63f"
integrity sha512-CMCIxQNwPNRmmg4WctusMWhg8evrCoq3frQ5Fxnc/fKaMrrzQKL5PY2cV2jY2m5Se+Y+S9EPa3cNOQ1/KYuQ9w==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/select2@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0-rc.2.tgz#c48e865f401ddce32dff2a7a14ae07c4bde2f57b"
integrity sha512-YYK/SIqXQcSDQFMVg/ogohc76d4JDrOVQEbzfkNNI5bKVJo+hkqtNzAwV9FLdPZZNw15QMv0eF1ie4aUtIxyaA==
"@abp/select2@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0.tgz#c1b8b7cca16bfe813d83e84f738acda8f8182159"
integrity sha512-p6atSzYTU5o36S4GHCHvi3wHf3fgg6wNJIxk4ohSxu1mOQnUbmyYbxKiDFxq+MOR2sOfVmAjqb4xvcIjexg6hA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
select2 "^4.0.13"
"@abp/sweetalert@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0-rc.2.tgz#cdcaf8e9a33cf218a687fd6a42cfe1c85d89c6b7"
integrity sha512-sjQd8TF9oUnaQ1OPTGdVyAfWqSZEk4bRbC/qw2CouEOfRLatzkC0JcmzFLN0f5N1am1RQwkFakpENKH7NqTCvg==
"@abp/sweetalert@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0.tgz#e5c8cb0c84435a0ca97be62c7b9204bbd05ae23d"
integrity sha512-VwIp7VD7zzkRMJw3yu7YOlWbIA/JbLYZeyEpNFMIDxAGYG936tVsmH+aQVTovHF/3+VsYf9Da1JjKymLVHkWRg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0-rc.2.tgz#445d043ae482b76799b496ae6565abfaf75a34b9"
integrity sha512-wWx56EZMUGIfqJV5JLCvUp4RVhKXHYLQaVNQSF8E05COXmSQwFThVS7vbuiODFp2BGm6RAqCVtZDCreu2B8z9Q==
"@abp/timeago@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0.tgz#06df44618398cbec7bd174b7afd180907b67bb69"
integrity sha512-e1n9i8O0CaT4EIrnzMOur1HxSDpelgaVCLS9NWsTf4j4fIR3ojFqSNt76tpaPqVGBY9vRraGGu16XembYFF+jA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
timeago "^1.6.7"
"@abp/toastr@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0-rc.2.tgz#1af16fa8687201b6b9c7229d087a4233998703b9"
integrity sha512-g+Jl5H1ZHoJ4JwWuix0xA+GMFY42pwq8WYjxP6qE2/Y2aixYHVIui15eBqF2L06yXOt53YFcC1+pxjrp91xHxw==
"@abp/toastr@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0.tgz#eaa79a9e48638a2e86cb9573516e8614bfaf15a4"
integrity sha512-lA3pCdXgAWe1sVhC+/UNJa4T9AdxgN5ncW/3KW+9fg+IOieDwDibPIiuyornxrm+8G6uvrGxi//I3EeeqHABbg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
toastr "^2.1.4"
"@abp/utils@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0-rc.2.tgz#eb6dbf0ee493d0f050b37347d2d6d283098aedae"
integrity sha512-V2k5I89lVBoeGIKgg4p2H9GlMAcDWbctwKZPVwBEMVEVm1uTR2xQAWdTdSFd5Q8I8Xsf/aIG8ELM7l5j2h7/zQ==
"@abp/utils@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0.tgz#1f5d8b4dc8a234c15d87869436485fd737f18b50"
integrity sha512-fksnKF1bsOab5AVe8qBs2HZmcRVjrnsMwXs23xaqSRdpWXpPgsLRuKCJHlD0usREyerDGPkpY5opUnXWggHvCg==
dependencies:
just-compare "^1.3.0"

4
modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json

@ -3,7 +3,7 @@
"name": "my-app",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.1.0-rc.2",
"@abp/cms-kit": "4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.1.0",
"@abp/cms-kit": "4.1.0"
}
}

219
modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0-rc.2.tgz#b9462cbe36c41d68e2f44b79a3a2dba2c1b2b54a"
integrity sha512-KW3J6HnN1zZrCmrWmEcXBnGIOeuJDdp1jUECAm4Bdxi++VzfIbGlVvpcvUdT1E213reOUWi4dPhcej12DwrmDw==
"@abp/aspnetcore.mvc.ui.theme.basic@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0.tgz#ef1b31feb678fdf4ce6fa76fb1e9d091ca97c9a4"
integrity sha512-eAD39TaMVnXsEOVyKcChIggpzJw3TzDua8x/APlHfxWBQOuCb7C/PWLWH9DIN14kl8JsVpgRrUSlKsvvY8CIRA==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0-rc.2.tgz#d64cea1e504bcd3a08a1819025d40f3f84f0aadc"
integrity sha512-A/DRLwtJO7YCdqAgSF84wNRKjvGEQvcBocIwRxXCJEe3drxMoSwkAGjXQlxIYWZKdYbYUWDTjil2Mvwf91GUqg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0-rc.2"
"@abp/bootstrap" "~4.1.0-rc.2"
"@abp/bootstrap-datepicker" "~4.1.0-rc.2"
"@abp/datatables.net-bs4" "~4.1.0-rc.2"
"@abp/font-awesome" "~4.1.0-rc.2"
"@abp/jquery-form" "~4.1.0-rc.2"
"@abp/jquery-validation-unobtrusive" "~4.1.0-rc.2"
"@abp/lodash" "~4.1.0-rc.2"
"@abp/luxon" "~4.1.0-rc.2"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0-rc.2"
"@abp/select2" "~4.1.0-rc.2"
"@abp/sweetalert" "~4.1.0-rc.2"
"@abp/timeago" "~4.1.0-rc.2"
"@abp/toastr" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0-rc.2.tgz#54bf30def590e6d25fc35f77253888f3d9f74b9c"
integrity sha512-eOh5IBn4eNAjj2i6tlLRIV/r61Ef7+Z3PNvGgdml/XCo50el4G9XE7shxuGOY+MaFMfmsST2tcJlO9iAo9n2Yw==
"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0.tgz#40ef6d20a83a8e700179be7f3989c8d5135808d0"
integrity sha512-UdT3XCUMEKguB1w7qF4TO1ClayWn63oiP7wnOUmIg+O1EdKTHUBYfztle4Qb/aqtzjHoZBsOnMZH/KOyQKejDg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0"
"@abp/bootstrap" "~4.1.0"
"@abp/bootstrap-datepicker" "~4.1.0"
"@abp/datatables.net-bs4" "~4.1.0"
"@abp/font-awesome" "~4.1.0"
"@abp/jquery-form" "~4.1.0"
"@abp/jquery-validation-unobtrusive" "~4.1.0"
"@abp/lodash" "~4.1.0"
"@abp/luxon" "~4.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0"
"@abp/select2" "~4.1.0"
"@abp/sweetalert" "~4.1.0"
"@abp/timeago" "~4.1.0"
"@abp/toastr" "~4.1.0"
"@abp/aspnetcore.mvc.ui@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0.tgz#c23ba554270a9534ac29a7e7ca8ab1ed0dc1cc7b"
integrity sha512-CaPVi8dKLD0/7zrsCdi3hA1alkUKVE3jVoUa2bl0mrBg30Xzu+IDAu6aIWFXOCnIX8YthejhA2Wtn4knbTOB4g==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -43,22 +43,23 @@
micromatch "^4.0.2"
path "^0.12.7"
"@abp/bootstrap-datepicker@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0-rc.2.tgz#d3fe863222a11771d366b1a3c246aaf34df94081"
integrity sha512-vn2xWAK3xqo5fMZJ9dOAZZmL+ZUnzZZNh3lF6uA97wTN/SbePlmHBYJpsCKIxOwbJS2HCvekHGJN/Ps4oEjlbw==
"@abp/bootstrap-datepicker@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0.tgz#5c97fba78e56ba90820014a13e4c2d394d27332f"
integrity sha512-5XDW/Y2Gu1SgIm/tyRuo6vwcJdpFWIEnqDJ+0wjdOvWl3a+HnQTDya5g74mCmEBfYQgYDw8Wz8ovChOOzExh7Q==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0-rc.2.tgz#b5132cf4c4c92fe833823cf2b91ab1b0167b0ecf"
integrity sha512-SsWEV0DveBIHiG051E6aBB371D15QIsGeo+POFhvQUvrlmzMBlFCAlmH0ef8w1n+3M3C37irCgEGKctt2pbcxQ==
"@abp/bootstrap@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0.tgz#50ac670e319a60a985109e96302eed3e46d36afe"
integrity sha512-4lFrbaNPYRa45oH/D+fFUSmgD/OdSoCmHXvSdG2ye6+wyl6gy4JRfjjTOFmwpsyOWJdPMJSV6CARCSSsfeaItA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/cms-kit@4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-4.1.0-rc.2.tgz#d2790dd3812214ab0c8eba6e9ad2b8019889e056"
@ -71,94 +72,94 @@
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0-rc.2.tgz#d306106a53fa56109751be0099785c94f43be56f"
integrity sha512-b0mOYSz8hNgZ/hBeYg8hkthJgE8CLyHNa2NcythPoIW8RR5qHmDtGoFnuFovLvLk7r+M4NWyxXRKEshSszIPyA==
dependencies:
"@abp/utils" "^4.1.0-rc.2"
"@abp/utils" "^4.1.0"
"@abp/datatables.net-bs4@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0-rc.2.tgz#99aa1fbad91939fc23265324a3d8a45d0c1e5a7a"
integrity sha512-Y9UyqniOkx5DJO+2GGurnQE1yfRmGaQ3y7V07gKWRq+gHLUhE+vfgOLVpGM6ufdTIbLvVw5Ng+3gfOmPlUnpxg==
"@abp/datatables.net-bs4@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0.tgz#c28097b82f62b236d6f2578d7148128914eb5cd8"
integrity sha512-/fM/3Q/yXJaPsXGKIOZBgihxGLZ/T+n+6wguFeEypsAXCJ4MfpcRZ/eFPvVlBmmc/PVIdE8xtj5rnH9+/2KHWg==
dependencies:
"@abp/datatables.net" "~4.1.0-rc.2"
"@abp/datatables.net" "~4.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0-rc.2.tgz#1a134688259d32187d822d8a49c7a68b4cc226c7"
integrity sha512-9o5g8s7ZTlThd1FMFmO7wS+MxmXgUMmiWx7Hwara9ypfJPd0vanz10bQAdTpLiDy/aa0tUmz0xOVj73yvBJm9Q==
"@abp/datatables.net@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0.tgz#a037fdae4beb9805e8eea71f086573eed4fd3c92"
integrity sha512-OZogC3UEvTSyas+VcxffggQ8U2fi399Ka+++4p+oXCPGykDLU1EKOSA/CToiu9uYNYJQ3125SjRZSOJD5h/ukg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
datatables.net "^1.10.21"
"@abp/font-awesome@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0-rc.2.tgz#ecf490861c09250cf61611ac74cec5ab4392e807"
integrity sha512-6yAsf/ee2hdrHHUACql8c3gY54Hd7YAK2olHymyc3Io2hhK2VxXRc2W2oRSwbQ9GsSE+XDrEVtjIR64nBseTeg==
"@abp/font-awesome@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0.tgz#a95f8df5f7e3695aaf05e3eab9f3087f4017d7e9"
integrity sha512-Zc4mPp740ACe10ollWez4qNg2QnM/AexDkF3pkxYNb1B9J4Fb8H7SefOOtMRdRgHK+sEe5vrPfIs8//gTf4xeQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0-rc.2.tgz#76dff67a3fe6e6ad7bd60bb909de93c09966cc0a"
integrity sha512-LGafwxyRYUbHQlJ9pPbYdkVqzdT/y1Fp4Nr4C3W5jxsJuaSICl0RPkRHIPALeoqbpEWuj6dVep6ZuO9hhxBzNw==
"@abp/jquery-form@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0.tgz#b773c4f4619c3731c781993bba59a1cf38357918"
integrity sha512-7Mio+ehj7M2qt3oOyDBi97yNg1ip6BZiUpHkMtmPc/OxdnxpOZV9tZHyhbsoZFYTu1dUSmrpY6HKY0zibohyBQ==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0-rc.2.tgz#1f1d395cfa47740d47303ff512592ff1993f9e13"
integrity sha512-0LXWvgfyLHVw7qRVOmY0rfVlq+yJq/nhbcVoYK+QbmKnrFu+KZg0KNMOD8wTXs8mZ1EKGQpoQKWxImtCnGrV/A==
"@abp/jquery-validation-unobtrusive@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0.tgz#954ce53a46475c09056d789eba761568482ea8c9"
integrity sha512-diykqQiGzowYDpsG9PMd3ipeXFrilRQiHQX2mglBf+FNKMocp7LBAIeD2INkiObczZfIKkoqu7WCRqb1bl5uKg==
dependencies:
"@abp/jquery-validation" "~4.1.0-rc.2"
"@abp/jquery-validation" "~4.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0-rc.2.tgz#ad4b464fd0133eab8d08c781c7d7c4e00bc4918d"
integrity sha512-iLTobfwqDk7iiQxvv5UowxOKywsh/77VlAVktstnFG3N3Y73+JYKzM0mGM/j4zM1OrjbF9/cnPnDVX7bATPz9w==
"@abp/jquery-validation@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0.tgz#29cffb21270c52758804cf0d3f5b6e83b327047d"
integrity sha512-JrDcejGKz33LeNMn3+DguzDd8XN6LXlceffMc8jz4zYvtb+NqwUn7NFvH3gnKfNKBc8V9cQIHxQpYQa8luYcsA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0-rc.2.tgz#0f64cad5b1ae3e47d2344e5fb30c347b89d6d2bb"
integrity sha512-YubZwMJIN+UcfxfUlt3usfcLMG9WcXNpemUsdBtlKNzti562KZMIHPFLRL+DsiqvzZ74h2PxSWWsxS42Z7z0Yw==
"@abp/jquery@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0.tgz#3c021d24eb5ef7fe198da8982657075556556701"
integrity sha512-1HLjkxj5EudcoxZ9CVqsP0tgKwLQBs5KI9vnnW9I9pco6fIf1Q2PT+TZZywOZ3ftkYfMp90PF+A5IL/JfovnpQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
jquery "~3.5.1"
"@abp/lodash@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0-rc.2.tgz#9281c641ab7b7b33e7acf12815dc461e7ae967b9"
integrity sha512-RqdekrAyLPaLNJddmrq89EdrI1xg4296tOafFLHvirgRWisJTIa9bflTOwMwEg9FNdLJgA0zHi4WdAMer0qZdA==
"@abp/lodash@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0.tgz#e605644ba745813a2937b24f3b9d2ad86b20dec9"
integrity sha512-jUjua8iZIE5P/AELI/nffS09IorBRM/Jfq6agCOX6Qg7d8od66B9gV727mTuaMd9ZW65S1wW5+zMJhm5gy7Qpg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
lodash "^4.17.15"
"@abp/luxon@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0-rc.2.tgz#78fc1cf651d7c19b87a31823cd3ce68961d6b1e6"
integrity sha512-U4e9uGZlg9xj9tBNP337v3wiaSR6qxWsBgh/duQGWrqV+75LlQjYcZaPoXDidUUS6U6epDSR2pc2T39rahcgSQ==
"@abp/luxon@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0.tgz#12c9b6eb2a87e0ebe7df58bcbd5f38211ca62e81"
integrity sha512-gc8DAZHa+fcnDGWGQHmI8Tllr+QzHAZejrwoVSRiRX+Oebf67sCEDdbwB8yWeEHSa3MbpPtm7I1aTc/+dQI8Dg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0-rc.2.tgz#36553e71052cad9734e0c9b2c65759e538468648"
integrity sha512-JQ6PCcj5qmF9MxNRPAsKHHnqBPCdn4lQnwxZrHcG9tD70Gx+NfC4UH41tqXI+htba4k0PHRyH2y39Q1iJm0NFA==
"@abp/malihu-custom-scrollbar-plugin@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0.tgz#a340fa3757eb01bd510d3dcb54331b5b0a93a63f"
integrity sha512-CMCIxQNwPNRmmg4WctusMWhg8evrCoq3frQ5Fxnc/fKaMrrzQKL5PY2cV2jY2m5Se+Y+S9EPa3cNOQ1/KYuQ9w==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/select2@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0-rc.2.tgz#c48e865f401ddce32dff2a7a14ae07c4bde2f57b"
integrity sha512-YYK/SIqXQcSDQFMVg/ogohc76d4JDrOVQEbzfkNNI5bKVJo+hkqtNzAwV9FLdPZZNw15QMv0eF1ie4aUtIxyaA==
"@abp/select2@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0.tgz#c1b8b7cca16bfe813d83e84f738acda8f8182159"
integrity sha512-p6atSzYTU5o36S4GHCHvi3wHf3fgg6wNJIxk4ohSxu1mOQnUbmyYbxKiDFxq+MOR2sOfVmAjqb4xvcIjexg6hA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
select2 "^4.0.13"
"@abp/star-rating-svg@~4.1.0-rc.2":
@ -174,29 +175,29 @@
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0-rc.2.tgz#cdcaf8e9a33cf218a687fd6a42cfe1c85d89c6b7"
integrity sha512-sjQd8TF9oUnaQ1OPTGdVyAfWqSZEk4bRbC/qw2CouEOfRLatzkC0JcmzFLN0f5N1am1RQwkFakpENKH7NqTCvg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0-rc.2.tgz#445d043ae482b76799b496ae6565abfaf75a34b9"
integrity sha512-wWx56EZMUGIfqJV5JLCvUp4RVhKXHYLQaVNQSF8E05COXmSQwFThVS7vbuiODFp2BGm6RAqCVtZDCreu2B8z9Q==
"@abp/timeago@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0.tgz#06df44618398cbec7bd174b7afd180907b67bb69"
integrity sha512-e1n9i8O0CaT4EIrnzMOur1HxSDpelgaVCLS9NWsTf4j4fIR3ojFqSNt76tpaPqVGBY9vRraGGu16XembYFF+jA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
timeago "^1.6.7"
"@abp/toastr@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0-rc.2.tgz#1af16fa8687201b6b9c7229d087a4233998703b9"
integrity sha512-g+Jl5H1ZHoJ4JwWuix0xA+GMFY42pwq8WYjxP6qE2/Y2aixYHVIui15eBqF2L06yXOt53YFcC1+pxjrp91xHxw==
"@abp/toastr@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0.tgz#eaa79a9e48638a2e86cb9573516e8614bfaf15a4"
integrity sha512-lA3pCdXgAWe1sVhC+/UNJa4T9AdxgN5ncW/3KW+9fg+IOieDwDibPIiuyornxrm+8G6uvrGxi//I3EeeqHABbg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
toastr "^2.1.4"
"@abp/utils@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0-rc.2.tgz#eb6dbf0ee493d0f050b37347d2d6d283098aedae"
integrity sha512-V2k5I89lVBoeGIKgg4p2H9GlMAcDWbctwKZPVwBEMVEVm1uTR2xQAWdTdSFd5Q8I8Xsf/aIG8ELM7l5j2h7/zQ==
"@abp/utils@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0.tgz#1f5d8b4dc8a234c15d87869436485fd737f18b50"
integrity sha512-fksnKF1bsOab5AVe8qBs2HZmcRVjrnsMwXs23xaqSRdpWXpPgsLRuKCJHlD0usREyerDGPkpY5opUnXWggHvCg==
dependencies:
just-compare "^1.3.0"

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json

@ -8,6 +8,7 @@
"LoginToAddComment": "Login to add comment",
"LoginToRate": "Login to rate",
"LoginToReply": "Login to reply",
"Menu:CMS": "CMS",
"MessageDeletionConfirmationMessage": "This comment will be deleted completely.",
"Permission:CmsKit": "CmsKit",
"Permission:TagManagement": "Tag Management",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json

@ -8,6 +8,7 @@
"LoginToAddComment": "Yorum yapmak için giriş yap",
"LoginToRate": "Oylamak için giriş yapın",
"LoginToReply": "Cevap vermek için giriş yap",
"Menu:CMS": "CMS",
"MessageDeletionConfirmationMessage": "Bu yorum tamamen silinecektir",
"Permission:CmsKit": "CmsKit",
"Permission:TagManagement": "Etiket Yönetimi",

17
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs

@ -1,12 +1,28 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.Comments;
using Volo.CmsKit.Contents;
using Volo.CmsKit.Pages;
using Volo.CmsKit.Ratings;
using Volo.CmsKit.Reactions;
using Volo.CmsKit.Tags;
using Volo.CmsKit.Users;
namespace Volo.CmsKit.EntityFrameworkCore
{
[ConnectionStringName(CmsKitDbProperties.ConnectionStringName)]
public class CmsKitDbContext : AbpDbContext<CmsKitDbContext>, ICmsKitDbContext
{
public DbSet<Content> Contents { get; set; }
public DbSet<Comment> Comments { get; set; }
public DbSet<CmsUser> User { get; set; }
public DbSet<UserReaction> Reactions { get; set; }
public DbSet<Rating> Ratings { get; set; }
public DbSet<Tag> Tags { get; set; }
public DbSet<EntityTag> EntityTags { get; set; }
public DbSet<Page> Pages { get; set; }
public CmsKitDbContext(DbContextOptions<CmsKitDbContext> options)
: base(options)
{
@ -16,7 +32,6 @@ namespace Volo.CmsKit.EntityFrameworkCore
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ConfigureCmsKit();
}
}

41
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs

@ -97,7 +97,7 @@ namespace Volo.CmsKit.EntityFrameworkCore
});
}
builder.Entity<Content>(b =>
if (GlobalFeatureManager.Instance.IsEnabled<ContentsFeature>())
{
b.ToTable(options.TablePrefix + "Contents", options.Schema);
@ -123,34 +123,37 @@ namespace Volo.CmsKit.EntityFrameworkCore
b.HasIndex(x => new { x.TenantId, x.Name });
});
}
builder.Entity<EntityTag>(b =>
{
b.ToTable(options.TablePrefix + "EntityTags", options.Schema);
builder.Entity<EntityTag>(b =>
{
b.ToTable(options.TablePrefix + "EntityTags", options.Schema);
b.ConfigureByConvention();
b.ConfigureByConvention();
b.HasKey(x => new { x.EntityId, x.TagId });
b.HasKey(x => new { x.EntityId, x.TagId });
b.Property(x => x.EntityId).IsRequired();
b.Property(x => x.TagId).IsRequired();
b.Property(x => x.EntityId).IsRequired();
b.Property(x => x.TagId).IsRequired();
b.HasIndex(x => new { x.TenantId, x.EntityId, x.TagId });
});
b.HasIndex(x => new { x.TenantId, x.EntityId, x.TagId });
});
}
builder.Entity<Page>(b =>
if (GlobalFeatureManager.Instance.IsEnabled<PagesFeature>())
{
b.ToTable(options.TablePrefix + "Pages", options.Schema);
builder.Entity<Page>(b =>
{
b.ToTable(options.TablePrefix + "Pages", options.Schema);
b.ConfigureByConvention();
b.ConfigureByConvention();
b.Property(x => x.Title).IsRequired().HasMaxLength(PageConsts.MaxTitleLength);
b.Property(x => x.Url).IsRequired().HasMaxLength(PageConsts.MaxUrlLength);
b.Property(x => x.Description).HasMaxLength(PageConsts.MaxDescriptionLength);
b.Property(x => x.Title).IsRequired().HasMaxLength(PageConsts.MaxTitleLength);
b.Property(x => x.Url).IsRequired().HasMaxLength(PageConsts.MaxUrlLength);
b.Property(x => x.Description).HasMaxLength(PageConsts.MaxDescriptionLength);
b.HasIndex(x => new { x.TenantId, x.Url });
});
b.HasIndex(x => new {x.TenantId, x.Url});
});
}
}
}
}

21
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs

@ -1,11 +1,26 @@
using Volo.Abp.Data;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.Comments;
using Volo.CmsKit.Contents;
using Volo.CmsKit.Pages;
using Volo.CmsKit.Ratings;
using Volo.CmsKit.Reactions;
using Volo.CmsKit.Tags;
using Volo.CmsKit.Users;
namespace Volo.CmsKit.EntityFrameworkCore
{
[ConnectionStringName(CmsKitDbProperties.ConnectionStringName)]
public interface ICmsKitDbContext : IEfCoreDbContext
{
DbSet<Content> Contents { get; set; }
DbSet<Comment> Comments { get; set; }
DbSet<CmsUser> User { get; set; }
DbSet<UserReaction> Reactions { get; set; }
DbSet<Rating> Ratings { get; set; }
DbSet<Tag> Tags { get; set; }
DbSet<EntityTag> EntityTags { get; set; }
DbSet<Page> Pages { get; set; }
}
}
}

984
modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20201104131104_Initial.Designer.cs

@ -1,984 +0,0 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Volo.Abp.EntityFrameworkCore;
using VoloDocs.EntityFrameworkCore;
namespace VoloDocs.EntityFrameworkCore.Migrations
{
[DbContext(typeof(VoloDocsDbContext))]
[Migration("20201104131104_Initial")]
partial class Initial
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.UseIdentityColumns()
.HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer)
.HasAnnotation("Relational:MaxIdentifierLength", 128)
.HasAnnotation("ProductVersion", "5.0.0-rc.2.20475.6");
modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<string>("Description")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("ExtraProperties")
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<bool>("IsStatic")
.HasColumnType("bit");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("Regex")
.HasMaxLength(512)
.HasColumnType("nvarchar(512)");
b.Property<string>("RegexDescription")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<bool>("Required")
.HasColumnType("bit");
b.Property<int>("ValueType")
.HasColumnType("int");
b.HasKey("Id");
b.ToTable("AbpClaimTypes");
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("SourceTenantId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("SourceUserId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("TargetTenantId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("TargetUserId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId")
.IsUnique()
.HasFilter("[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL");
b.ToTable("AbpLinkUsers");
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<string>("ExtraProperties")
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<bool>("IsDefault")
.HasColumnType("bit")
.HasColumnName("IsDefault");
b.Property<bool>("IsPublic")
.HasColumnType("bit")
.HasColumnName("IsPublic");
b.Property<bool>("IsStatic")
.HasColumnType("bit")
.HasColumnName("IsStatic");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedName")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.HasKey("Id");
b.HasIndex("NormalizedName");
b.ToTable("AbpRoles");
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<string>("ClaimType")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("ClaimValue")
.HasMaxLength(1024)
.HasColumnType("nvarchar(1024)");
b.Property<Guid>("RoleId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AbpRoleClaims");
});
modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Action")
.HasMaxLength(96)
.HasColumnType("nvarchar(96)");
b.Property<string>("ApplicationName")
.HasMaxLength(96)
.HasColumnType("nvarchar(96)");
b.Property<string>("BrowserInfo")
.HasMaxLength(512)
.HasColumnType("nvarchar(512)");
b.Property<string>("ClientId")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("ClientIpAddress")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<string>("CorrelationId")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2");
b.Property<string>("ExtraProperties")
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<string>("Identity")
.HasMaxLength(96)
.HasColumnType("nvarchar(96)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.Property<string>("TenantName")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<Guid?>("UserId")
.HasColumnType("uniqueidentifier");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("TenantId", "Action");
b.HasIndex("TenantId", "ApplicationName");
b.HasIndex("TenantId", "Identity");
b.HasIndex("TenantId", "UserId");
b.ToTable("AbpSecurityLogs");
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<int>("AccessFailedCount")
.ValueGeneratedOnAdd()
.HasColumnType("int")
.HasDefaultValue(0)
.HasColumnName("AccessFailedCount");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<Guid?>("DeleterId")
.HasColumnType("uniqueidentifier")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime2")
.HasColumnName("DeletionTime");
b.Property<string>("Email")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("nvarchar(256)")
.HasColumnName("Email");
b.Property<bool>("EmailConfirmed")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(false)
.HasColumnName("EmailConfirmed");
b.Property<string>("ExtraProperties")
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<bool>("IsExternal")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(false)
.HasColumnName("IsExternal");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId");
b.Property<bool>("LockoutEnabled")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(false)
.HasColumnName("LockoutEnabled");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("Name")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)")
.HasColumnName("Name");
b.Property<string>("NormalizedEmail")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("nvarchar(256)")
.HasColumnName("NormalizedEmail");
b.Property<string>("NormalizedUserName")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("nvarchar(256)")
.HasColumnName("NormalizedUserName");
b.Property<string>("PasswordHash")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)")
.HasColumnName("PasswordHash");
b.Property<string>("PhoneNumber")
.HasMaxLength(16)
.HasColumnType("nvarchar(16)")
.HasColumnName("PhoneNumber");
b.Property<bool>("PhoneNumberConfirmed")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(false)
.HasColumnName("PhoneNumberConfirmed");
b.Property<string>("SecurityStamp")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("nvarchar(256)")
.HasColumnName("SecurityStamp");
b.Property<string>("Surname")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)")
.HasColumnName("Surname");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.Property<bool>("TwoFactorEnabled")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(false)
.HasColumnName("TwoFactorEnabled");
b.Property<string>("UserName")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("nvarchar(256)")
.HasColumnName("UserName");
b.HasKey("Id");
b.HasIndex("Email");
b.HasIndex("NormalizedEmail");
b.HasIndex("NormalizedUserName");
b.HasIndex("UserName");
b.ToTable("AbpUsers");
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<string>("ClaimType")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("ClaimValue")
.HasMaxLength(1024)
.HasColumnType("nvarchar(1024)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.Property<Guid>("UserId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AbpUserClaims");
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b =>
{
b.Property<Guid>("UserId")
.HasColumnType("uniqueidentifier");
b.Property<string>("LoginProvider")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("ProviderDisplayName")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderKey")
.IsRequired()
.HasMaxLength(196)
.HasColumnType("nvarchar(196)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.HasKey("UserId", "LoginProvider");
b.HasIndex("LoginProvider", "ProviderKey");
b.ToTable("AbpUserLogins");
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b =>
{
b.Property<Guid>("OrganizationUnitId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("UserId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.HasKey("OrganizationUnitId", "UserId");
b.HasIndex("UserId", "OrganizationUnitId");
b.ToTable("AbpUserOrganizationUnits");
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b =>
{
b.Property<Guid>("UserId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("RoleId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId", "UserId");
b.ToTable("AbpUserRoles");
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b =>
{
b.Property<Guid>("UserId")
.HasColumnType("uniqueidentifier");
b.Property<string>("LoginProvider")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("Name")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.Property<string>("Value")
.HasColumnType("nvarchar(max)");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AbpUserTokens");
});
modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Code")
.IsRequired()
.HasMaxLength(95)
.HasColumnType("nvarchar(95)")
.HasColumnName("Code");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<Guid?>("DeleterId")
.HasColumnType("uniqueidentifier")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime2")
.HasColumnName("DeletionTime");
b.Property<string>("DisplayName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)")
.HasColumnName("DisplayName");
b.Property<string>("ExtraProperties")
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId");
b.Property<Guid?>("ParentId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.HasKey("Id");
b.HasIndex("Code");
b.HasIndex("ParentId");
b.ToTable("AbpOrganizationUnits");
});
modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b =>
{
b.Property<Guid>("OrganizationUnitId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("RoleId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.HasKey("OrganizationUnitId", "RoleId");
b.HasIndex("RoleId", "OrganizationUnitId");
b.ToTable("AbpOrganizationUnitRoles");
});
modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderKey")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("ProviderName")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.HasKey("Id");
b.HasIndex("Name", "ProviderName", "ProviderKey");
b.ToTable("AbpPermissionGrants");
});
modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderKey")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("ProviderName")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("Value")
.IsRequired()
.HasMaxLength(2048)
.HasColumnType("nvarchar(2048)");
b.HasKey("Id");
b.HasIndex("Name", "ProviderName", "ProviderKey");
b.ToTable("AbpSettings");
});
modelBuilder.Entity("Volo.Docs.Documents.Document", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<string>("Content")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2");
b.Property<string>("EditLink")
.HasMaxLength(2048)
.HasColumnType("nvarchar(2048)");
b.Property<string>("ExtraProperties")
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<string>("FileName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Format")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("LanguageCode")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<DateTime>("LastCachedTime")
.HasColumnType("datetime2");
b.Property<DateTime?>("LastSignificantUpdateTime")
.HasColumnType("datetime2");
b.Property<DateTime>("LastUpdatedTime")
.HasColumnType("datetime2");
b.Property<string>("LocalDirectory")
.HasMaxLength(512)
.HasColumnType("nvarchar(512)");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(255)
.HasColumnType("nvarchar(255)");
b.Property<Guid>("ProjectId")
.HasColumnType("uniqueidentifier");
b.Property<string>("RawRootUrl")
.HasMaxLength(2048)
.HasColumnType("nvarchar(2048)");
b.Property<string>("RootUrl")
.HasMaxLength(2048)
.HasColumnType("nvarchar(2048)");
b.Property<string>("Version")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.HasKey("Id");
b.ToTable("DocsDocuments");
});
modelBuilder.Entity("Volo.Docs.Documents.DocumentContributor", b =>
{
b.Property<Guid>("DocumentId")
.HasColumnType("uniqueidentifier");
b.Property<string>("Username")
.HasColumnType("nvarchar(450)");
b.Property<string>("AvatarUrl")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserProfileUrl")
.HasColumnType("nvarchar(max)");
b.HasKey("DocumentId", "Username");
b.ToTable("DocsDocumentContributors");
});
modelBuilder.Entity("Volo.Docs.Projects.Project", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<string>("DefaultDocumentName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("DocumentStoreType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ExtraProperties")
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<string>("Format")
.HasColumnType("nvarchar(max)");
b.Property<string>("LatestVersionBranchName")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("MainWebsiteUrl")
.HasColumnType("nvarchar(max)");
b.Property<string>("MinimumVersion")
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("NavigationDocumentName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ParametersDocumentName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ShortName")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("nvarchar(32)");
b.HasKey("Id");
b.ToTable("DocsProjects");
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b =>
{
b.HasOne("Volo.Abp.Identity.IdentityRole", null)
.WithMany("Claims")
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b =>
{
b.HasOne("Volo.Abp.Identity.IdentityUser", null)
.WithMany("Claims")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b =>
{
b.HasOne("Volo.Abp.Identity.IdentityUser", null)
.WithMany("Logins")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b =>
{
b.HasOne("Volo.Abp.Identity.OrganizationUnit", null)
.WithMany()
.HasForeignKey("OrganizationUnitId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Volo.Abp.Identity.IdentityUser", null)
.WithMany("OrganizationUnits")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b =>
{
b.HasOne("Volo.Abp.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Volo.Abp.Identity.IdentityUser", null)
.WithMany("Roles")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b =>
{
b.HasOne("Volo.Abp.Identity.IdentityUser", null)
.WithMany("Tokens")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b =>
{
b.HasOne("Volo.Abp.Identity.OrganizationUnit", null)
.WithMany()
.HasForeignKey("ParentId");
});
modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b =>
{
b.HasOne("Volo.Abp.Identity.OrganizationUnit", null)
.WithMany("Roles")
.HasForeignKey("OrganizationUnitId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Volo.Abp.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Volo.Docs.Documents.DocumentContributor", b =>
{
b.HasOne("Volo.Docs.Documents.Document", null)
.WithMany("Contributors")
.HasForeignKey("DocumentId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b =>
{
b.Navigation("Claims");
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b =>
{
b.Navigation("Claims");
b.Navigation("Logins");
b.Navigation("OrganizationUnits");
b.Navigation("Roles");
b.Navigation("Tokens");
});
modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b =>
{
b.Navigation("Roles");
});
modelBuilder.Entity("Volo.Docs.Documents.Document", b =>
{
b.Navigation("Contributors");
});
#pragma warning restore 612, 618
}
}
}

24
modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20201208084431_Added_CommitCount.cs

@ -1,24 +0,0 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace VoloDocs.EntityFrameworkCore.Migrations
{
public partial class Added_CommitCount : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "CommitCount",
table: "DocsDocumentContributors",
type: "int",
nullable: false,
defaultValue: 0);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "CommitCount",
table: "DocsDocumentContributors");
}
}
}

6
modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20201208084431_Added_CommitCount.Designer.cs → modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20210105171158_Initial.Designer.cs

@ -11,8 +11,8 @@ using VoloDocs.EntityFrameworkCore;
namespace VoloDocs.EntityFrameworkCore.Migrations
{
[DbContext(typeof(VoloDocsDbContext))]
[Migration("20201208084431_Added_CommitCount")]
partial class Added_CommitCount
[Migration("20210105171158_Initial")]
partial class Initial
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
@ -21,7 +21,7 @@ namespace VoloDocs.EntityFrameworkCore.Migrations
.UseIdentityColumns()
.HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer)
.HasAnnotation("Relational:MaxIdentifierLength", 128)
.HasAnnotation("ProductVersion", "5.0.0");
.HasAnnotation("ProductVersion", "5.0.1");
modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b =>
{

1
modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20201104131104_Initial.cs → modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20210105171158_Initial.cs

@ -403,6 +403,7 @@ namespace VoloDocs.EntityFrameworkCore.Migrations
{
DocumentId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
Username = table.Column<string>(type: "nvarchar(450)", nullable: false),
CommitCount = table.Column<int>(type: "int", nullable: false),
UserProfileUrl = table.Column<string>(type: "nvarchar(max)", nullable: true),
AvatarUrl = table.Column<string>(type: "nvarchar(max)", nullable: true)
},

2
modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/VoloDocsDbContextModelSnapshot.cs

@ -19,7 +19,7 @@ namespace VoloDocs.EntityFrameworkCore.Migrations
.UseIdentityColumns()
.HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer)
.HasAnnotation("Relational:MaxIdentifierLength", 128)
.HasAnnotation("ProductVersion", "5.0.0");
.HasAnnotation("ProductVersion", "5.0.1");
modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b =>
{

1
modules/docs/app/VoloDocs.Web/appsettings.json

@ -1,6 +1,5 @@
{
"ConnectionString": "Server=localhost;Database=VoloDocs;Trusted_Connection=True",
"LogoUrl": "/assets/images/Logo.png",
"ElasticSearch": {
"Url": "http://localhost:9200"
},

4
modules/docs/app/VoloDocs.Web/package.json

@ -3,7 +3,7 @@
"name": "volo.docstestapp",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.1.0-rc.2",
"@abp/docs": "^4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.1.0",
"@abp/docs": "^4.1.0"
}
}

298
modules/docs/app/VoloDocs.Web/yarn.lock

@ -2,45 +2,45 @@
# yarn lockfile v1
"@abp/anchor-js@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-4.1.0-rc.2.tgz#7053090fd1fbd509d7c285fc8d6ee2051a39ade8"
integrity sha512-F1sZHBUzuysVflAC9sgOVz6SSG1ENrfOrHzKWShuvKlKmdcTp50c5P6s9z+WEavb+/2/6KgG+D1ic1emmANM8A==
"@abp/anchor-js@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-4.1.0.tgz#3762fb4dc12f1c5e01178250cf6381a938908b30"
integrity sha512-+Pk3af5lAiKbXun99TEpgH/AY+il8nqzYWaEVvXkWYVr1/S9YyABz17XblwvyE/o9+CMVRQBgAoC2YuTdX3MwA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
anchor-js "^4.2.2"
"@abp/aspnetcore.mvc.ui.theme.basic@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0-rc.2.tgz#b9462cbe36c41d68e2f44b79a3a2dba2c1b2b54a"
integrity sha512-KW3J6HnN1zZrCmrWmEcXBnGIOeuJDdp1jUECAm4Bdxi++VzfIbGlVvpcvUdT1E213reOUWi4dPhcej12DwrmDw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0-rc.2.tgz#d64cea1e504bcd3a08a1819025d40f3f84f0aadc"
integrity sha512-A/DRLwtJO7YCdqAgSF84wNRKjvGEQvcBocIwRxXCJEe3drxMoSwkAGjXQlxIYWZKdYbYUWDTjil2Mvwf91GUqg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0-rc.2"
"@abp/bootstrap" "~4.1.0-rc.2"
"@abp/bootstrap-datepicker" "~4.1.0-rc.2"
"@abp/datatables.net-bs4" "~4.1.0-rc.2"
"@abp/font-awesome" "~4.1.0-rc.2"
"@abp/jquery-form" "~4.1.0-rc.2"
"@abp/jquery-validation-unobtrusive" "~4.1.0-rc.2"
"@abp/lodash" "~4.1.0-rc.2"
"@abp/luxon" "~4.1.0-rc.2"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0-rc.2"
"@abp/select2" "~4.1.0-rc.2"
"@abp/sweetalert" "~4.1.0-rc.2"
"@abp/timeago" "~4.1.0-rc.2"
"@abp/toastr" "~4.1.0-rc.2"
"@abp/aspnetcore.mvc.ui@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0-rc.2.tgz#54bf30def590e6d25fc35f77253888f3d9f74b9c"
integrity sha512-eOh5IBn4eNAjj2i6tlLRIV/r61Ef7+Z3PNvGgdml/XCo50el4G9XE7shxuGOY+MaFMfmsST2tcJlO9iAo9n2Yw==
"@abp/aspnetcore.mvc.ui.theme.basic@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0.tgz#ef1b31feb678fdf4ce6fa76fb1e9d091ca97c9a4"
integrity sha512-eAD39TaMVnXsEOVyKcChIggpzJw3TzDua8x/APlHfxWBQOuCb7C/PWLWH9DIN14kl8JsVpgRrUSlKsvvY8CIRA==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0.tgz#40ef6d20a83a8e700179be7f3989c8d5135808d0"
integrity sha512-UdT3XCUMEKguB1w7qF4TO1ClayWn63oiP7wnOUmIg+O1EdKTHUBYfztle4Qb/aqtzjHoZBsOnMZH/KOyQKejDg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.1.0"
"@abp/bootstrap" "~4.1.0"
"@abp/bootstrap-datepicker" "~4.1.0"
"@abp/datatables.net-bs4" "~4.1.0"
"@abp/font-awesome" "~4.1.0"
"@abp/jquery-form" "~4.1.0"
"@abp/jquery-validation-unobtrusive" "~4.1.0"
"@abp/lodash" "~4.1.0"
"@abp/luxon" "~4.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0"
"@abp/select2" "~4.1.0"
"@abp/sweetalert" "~4.1.0"
"@abp/timeago" "~4.1.0"
"@abp/toastr" "~4.1.0"
"@abp/aspnetcore.mvc.ui@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0.tgz#c23ba554270a9534ac29a7e7ca8ab1ed0dc1cc7b"
integrity sha512-CaPVi8dKLD0/7zrsCdi3hA1alkUKVE3jVoUa2bl0mrBg30Xzu+IDAu6aIWFXOCnIX8YthejhA2Wtn4knbTOB4g==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -51,181 +51,181 @@
micromatch "^4.0.2"
path "^0.12.7"
"@abp/bootstrap-datepicker@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0-rc.2.tgz#d3fe863222a11771d366b1a3c246aaf34df94081"
integrity sha512-vn2xWAK3xqo5fMZJ9dOAZZmL+ZUnzZZNh3lF6uA97wTN/SbePlmHBYJpsCKIxOwbJS2HCvekHGJN/Ps4oEjlbw==
"@abp/bootstrap-datepicker@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0.tgz#5c97fba78e56ba90820014a13e4c2d394d27332f"
integrity sha512-5XDW/Y2Gu1SgIm/tyRuo6vwcJdpFWIEnqDJ+0wjdOvWl3a+HnQTDya5g74mCmEBfYQgYDw8Wz8ovChOOzExh7Q==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0-rc.2.tgz#b5132cf4c4c92fe833823cf2b91ab1b0167b0ecf"
integrity sha512-SsWEV0DveBIHiG051E6aBB371D15QIsGeo+POFhvQUvrlmzMBlFCAlmH0ef8w1n+3M3C37irCgEGKctt2pbcxQ==
"@abp/bootstrap@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0.tgz#50ac670e319a60a985109e96302eed3e46d36afe"
integrity sha512-4lFrbaNPYRa45oH/D+fFUSmgD/OdSoCmHXvSdG2ye6+wyl6gy4JRfjjTOFmwpsyOWJdPMJSV6CARCSSsfeaItA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/clipboard@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.1.0-rc.2.tgz#14802cefd81f3aa4a421523e4a8d71f06a7281a6"
integrity sha512-mUYqACe/Jh+GEGWaRfOblrKo/yJnNMmj2h3llDOpBzQj1HTuUCAOHBHpdq7SUPEuwQVxjOjDhBjYBKbqGbTKBQ==
"@abp/clipboard@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.1.0.tgz#257d582a28e2311f4d433500aff3a529d5756d0a"
integrity sha512-BlJ3+eHXJcj0RJ5PdZ1I8ag0wylp4lW7ukzmXifzSYbT0on6o8pJuCvQM5rAyNqA5ucunjj9QiYXRRo44guKtQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
clipboard "^2.0.6"
"@abp/core@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0-rc.2.tgz#d306106a53fa56109751be0099785c94f43be56f"
integrity sha512-b0mOYSz8hNgZ/hBeYg8hkthJgE8CLyHNa2NcythPoIW8RR5qHmDtGoFnuFovLvLk7r+M4NWyxXRKEshSszIPyA==
"@abp/core@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0.tgz#6bdfa378d44cbf8f611d52dddf0915e5bbc188d5"
integrity sha512-HXkKCfh8+Yc9iVBsZy7eSoQbkBSdV1QTRAF8+cPgbEpU4x4WlUOy61xqb2pSLFzX9nSma83WhdDyQkzWDBTRZQ==
dependencies:
"@abp/utils" "^4.1.0-rc.2"
"@abp/utils" "^4.1.0"
"@abp/datatables.net-bs4@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0-rc.2.tgz#99aa1fbad91939fc23265324a3d8a45d0c1e5a7a"
integrity sha512-Y9UyqniOkx5DJO+2GGurnQE1yfRmGaQ3y7V07gKWRq+gHLUhE+vfgOLVpGM6ufdTIbLvVw5Ng+3gfOmPlUnpxg==
"@abp/datatables.net-bs4@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0.tgz#c28097b82f62b236d6f2578d7148128914eb5cd8"
integrity sha512-/fM/3Q/yXJaPsXGKIOZBgihxGLZ/T+n+6wguFeEypsAXCJ4MfpcRZ/eFPvVlBmmc/PVIdE8xtj5rnH9+/2KHWg==
dependencies:
"@abp/datatables.net" "~4.1.0-rc.2"
"@abp/datatables.net" "~4.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0-rc.2.tgz#1a134688259d32187d822d8a49c7a68b4cc226c7"
integrity sha512-9o5g8s7ZTlThd1FMFmO7wS+MxmXgUMmiWx7Hwara9ypfJPd0vanz10bQAdTpLiDy/aa0tUmz0xOVj73yvBJm9Q==
"@abp/datatables.net@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0.tgz#a037fdae4beb9805e8eea71f086573eed4fd3c92"
integrity sha512-OZogC3UEvTSyas+VcxffggQ8U2fi399Ka+++4p+oXCPGykDLU1EKOSA/CToiu9uYNYJQ3125SjRZSOJD5h/ukg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
datatables.net "^1.10.21"
"@abp/docs@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-4.1.0-rc.2.tgz#414f3e4fcd5d7915a0a7d48814b5b3b78f78678d"
integrity sha512-KKZ4llzDufZsxx66joKL4M/hTbWiTB+osvM7h7hjE3p1xz73n0raG9ND4XmSBtE6FOfaLnPgSLrlhPRhnbCP0g==
"@abp/docs@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-4.1.0.tgz#cc967324ca6227c8d22a94b8b722736c065a7528"
integrity sha512-9EsN0GHma7NgZyfzJgovagYNYmOa2PbLq6IcRpJ7Y3lrq/YTstPFsZTh9YrLq7TD1x0iooc11wp/1wgs909Vww==
dependencies:
"@abp/anchor-js" "~4.1.0-rc.2"
"@abp/clipboard" "~4.1.0-rc.2"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0-rc.2"
"@abp/popper.js" "~4.1.0-rc.2"
"@abp/prismjs" "~4.1.0-rc.2"
"@abp/anchor-js" "~4.1.0"
"@abp/clipboard" "~4.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~4.1.0"
"@abp/popper.js" "~4.1.0"
"@abp/prismjs" "~4.1.0"
"@abp/font-awesome@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0-rc.2.tgz#ecf490861c09250cf61611ac74cec5ab4392e807"
integrity sha512-6yAsf/ee2hdrHHUACql8c3gY54Hd7YAK2olHymyc3Io2hhK2VxXRc2W2oRSwbQ9GsSE+XDrEVtjIR64nBseTeg==
"@abp/font-awesome@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0.tgz#a95f8df5f7e3695aaf05e3eab9f3087f4017d7e9"
integrity sha512-Zc4mPp740ACe10ollWez4qNg2QnM/AexDkF3pkxYNb1B9J4Fb8H7SefOOtMRdRgHK+sEe5vrPfIs8//gTf4xeQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0-rc.2.tgz#76dff67a3fe6e6ad7bd60bb909de93c09966cc0a"
integrity sha512-LGafwxyRYUbHQlJ9pPbYdkVqzdT/y1Fp4Nr4C3W5jxsJuaSICl0RPkRHIPALeoqbpEWuj6dVep6ZuO9hhxBzNw==
"@abp/jquery-form@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0.tgz#b773c4f4619c3731c781993bba59a1cf38357918"
integrity sha512-7Mio+ehj7M2qt3oOyDBi97yNg1ip6BZiUpHkMtmPc/OxdnxpOZV9tZHyhbsoZFYTu1dUSmrpY6HKY0zibohyBQ==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0-rc.2.tgz#1f1d395cfa47740d47303ff512592ff1993f9e13"
integrity sha512-0LXWvgfyLHVw7qRVOmY0rfVlq+yJq/nhbcVoYK+QbmKnrFu+KZg0KNMOD8wTXs8mZ1EKGQpoQKWxImtCnGrV/A==
"@abp/jquery-validation-unobtrusive@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0.tgz#954ce53a46475c09056d789eba761568482ea8c9"
integrity sha512-diykqQiGzowYDpsG9PMd3ipeXFrilRQiHQX2mglBf+FNKMocp7LBAIeD2INkiObczZfIKkoqu7WCRqb1bl5uKg==
dependencies:
"@abp/jquery-validation" "~4.1.0-rc.2"
"@abp/jquery-validation" "~4.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0-rc.2.tgz#ad4b464fd0133eab8d08c781c7d7c4e00bc4918d"
integrity sha512-iLTobfwqDk7iiQxvv5UowxOKywsh/77VlAVktstnFG3N3Y73+JYKzM0mGM/j4zM1OrjbF9/cnPnDVX7bATPz9w==
"@abp/jquery-validation@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0.tgz#29cffb21270c52758804cf0d3f5b6e83b327047d"
integrity sha512-JrDcejGKz33LeNMn3+DguzDd8XN6LXlceffMc8jz4zYvtb+NqwUn7NFvH3gnKfNKBc8V9cQIHxQpYQa8luYcsA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0-rc.2.tgz#0f64cad5b1ae3e47d2344e5fb30c347b89d6d2bb"
integrity sha512-YubZwMJIN+UcfxfUlt3usfcLMG9WcXNpemUsdBtlKNzti562KZMIHPFLRL+DsiqvzZ74h2PxSWWsxS42Z7z0Yw==
"@abp/jquery@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0.tgz#3c021d24eb5ef7fe198da8982657075556556701"
integrity sha512-1HLjkxj5EudcoxZ9CVqsP0tgKwLQBs5KI9vnnW9I9pco6fIf1Q2PT+TZZywOZ3ftkYfMp90PF+A5IL/JfovnpQ==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
jquery "~3.5.1"
"@abp/lodash@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0-rc.2.tgz#9281c641ab7b7b33e7acf12815dc461e7ae967b9"
integrity sha512-RqdekrAyLPaLNJddmrq89EdrI1xg4296tOafFLHvirgRWisJTIa9bflTOwMwEg9FNdLJgA0zHi4WdAMer0qZdA==
"@abp/lodash@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0.tgz#e605644ba745813a2937b24f3b9d2ad86b20dec9"
integrity sha512-jUjua8iZIE5P/AELI/nffS09IorBRM/Jfq6agCOX6Qg7d8od66B9gV727mTuaMd9ZW65S1wW5+zMJhm5gy7Qpg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
lodash "^4.17.15"
"@abp/luxon@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0-rc.2.tgz#78fc1cf651d7c19b87a31823cd3ce68961d6b1e6"
integrity sha512-U4e9uGZlg9xj9tBNP337v3wiaSR6qxWsBgh/duQGWrqV+75LlQjYcZaPoXDidUUS6U6epDSR2pc2T39rahcgSQ==
"@abp/luxon@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0.tgz#12c9b6eb2a87e0ebe7df58bcbd5f38211ca62e81"
integrity sha512-gc8DAZHa+fcnDGWGQHmI8Tllr+QzHAZejrwoVSRiRX+Oebf67sCEDdbwB8yWeEHSa3MbpPtm7I1aTc/+dQI8Dg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0-rc.2.tgz#36553e71052cad9734e0c9b2c65759e538468648"
integrity sha512-JQ6PCcj5qmF9MxNRPAsKHHnqBPCdn4lQnwxZrHcG9tD70Gx+NfC4UH41tqXI+htba4k0PHRyH2y39Q1iJm0NFA==
"@abp/malihu-custom-scrollbar-plugin@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0.tgz#a340fa3757eb01bd510d3dcb54331b5b0a93a63f"
integrity sha512-CMCIxQNwPNRmmg4WctusMWhg8evrCoq3frQ5Fxnc/fKaMrrzQKL5PY2cV2jY2m5Se+Y+S9EPa3cNOQ1/KYuQ9w==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/popper.js@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-4.1.0-rc.2.tgz#e714157077a496b9186786775f103db0e130a8c5"
integrity sha512-/8moMZCzXcO7bGR2kz4jhsHweoYBi0v7KbXl+hqsFEi+aHRnKptWnr0X2zpe1ke4oG6rb4jYGeyh5KdANkEbzQ==
"@abp/popper.js@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-4.1.0.tgz#62b973486d95ad01880a0bd48fb84cce93c821f1"
integrity sha512-nS8y92JmOMiewUaLX8WtkN7de+qnNk6vyGftj1nsv4LeUb6MMB+yrAubtF4ZtMEWaEP4EcZFwkXv4YEK78cBuA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
popper.js "^1.16.0"
"@abp/prismjs@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.1.0-rc.2.tgz#f49f51a036c36f0fb8b561913e16d46736c24470"
integrity sha512-9E5l1gAT73FZlfkv1dDEDPA2Cryy7hDQp0ahdIG57HRsKeUYhRODNo07cf2ev5RDgIQbm3iAcfe7YJubR5v8OQ==
"@abp/prismjs@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.1.0.tgz#fde3454460013490f566fc3b27fbc1031251b98b"
integrity sha512-jXE8oS8JyLgZS/oXrVS2CxtIH09WEHoUPM4HfndzxSPzxmg3G+E8kzMXbPrHGGx7AhHgmSxNVFGuR2+1YFpSPQ==
dependencies:
"@abp/clipboard" "~4.1.0-rc.2"
"@abp/core" "~4.1.0-rc.2"
"@abp/clipboard" "~4.1.0"
"@abp/core" "~4.1.0"
prismjs "^1.20.0"
"@abp/select2@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0-rc.2.tgz#c48e865f401ddce32dff2a7a14ae07c4bde2f57b"
integrity sha512-YYK/SIqXQcSDQFMVg/ogohc76d4JDrOVQEbzfkNNI5bKVJo+hkqtNzAwV9FLdPZZNw15QMv0eF1ie4aUtIxyaA==
"@abp/select2@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0.tgz#c1b8b7cca16bfe813d83e84f738acda8f8182159"
integrity sha512-p6atSzYTU5o36S4GHCHvi3wHf3fgg6wNJIxk4ohSxu1mOQnUbmyYbxKiDFxq+MOR2sOfVmAjqb4xvcIjexg6hA==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
select2 "^4.0.13"
"@abp/sweetalert@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0-rc.2.tgz#cdcaf8e9a33cf218a687fd6a42cfe1c85d89c6b7"
integrity sha512-sjQd8TF9oUnaQ1OPTGdVyAfWqSZEk4bRbC/qw2CouEOfRLatzkC0JcmzFLN0f5N1am1RQwkFakpENKH7NqTCvg==
"@abp/sweetalert@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0.tgz#e5c8cb0c84435a0ca97be62c7b9204bbd05ae23d"
integrity sha512-VwIp7VD7zzkRMJw3yu7YOlWbIA/JbLYZeyEpNFMIDxAGYG936tVsmH+aQVTovHF/3+VsYf9Da1JjKymLVHkWRg==
dependencies:
"@abp/core" "~4.1.0-rc.2"
"@abp/core" "~4.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0-rc.2.tgz#445d043ae482b76799b496ae6565abfaf75a34b9"
integrity sha512-wWx56EZMUGIfqJV5JLCvUp4RVhKXHYLQaVNQSF8E05COXmSQwFThVS7vbuiODFp2BGm6RAqCVtZDCreu2B8z9Q==
"@abp/timeago@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0.tgz#06df44618398cbec7bd174b7afd180907b67bb69"
integrity sha512-e1n9i8O0CaT4EIrnzMOur1HxSDpelgaVCLS9NWsTf4j4fIR3ojFqSNt76tpaPqVGBY9vRraGGu16XembYFF+jA==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
timeago "^1.6.7"
"@abp/toastr@~4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0-rc.2.tgz#1af16fa8687201b6b9c7229d087a4233998703b9"
integrity sha512-g+Jl5H1ZHoJ4JwWuix0xA+GMFY42pwq8WYjxP6qE2/Y2aixYHVIui15eBqF2L06yXOt53YFcC1+pxjrp91xHxw==
"@abp/toastr@~4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0.tgz#eaa79a9e48638a2e86cb9573516e8614bfaf15a4"
integrity sha512-lA3pCdXgAWe1sVhC+/UNJa4T9AdxgN5ncW/3KW+9fg+IOieDwDibPIiuyornxrm+8G6uvrGxi//I3EeeqHABbg==
dependencies:
"@abp/jquery" "~4.1.0-rc.2"
"@abp/jquery" "~4.1.0"
toastr "^2.1.4"
"@abp/utils@^4.1.0-rc.2":
version "4.1.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0-rc.2.tgz#eb6dbf0ee493d0f050b37347d2d6d283098aedae"
integrity sha512-V2k5I89lVBoeGIKgg4p2H9GlMAcDWbctwKZPVwBEMVEVm1uTR2xQAWdTdSFd5Q8I8Xsf/aIG8ELM7l5j2h7/zQ==
"@abp/utils@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0.tgz#1f5d8b4dc8a234c15d87869436485fd737f18b50"
integrity sha512-fksnKF1bsOab5AVe8qBs2HZmcRVjrnsMwXs23xaqSRdpWXpPgsLRuKCJHlD0usREyerDGPkpY5opUnXWggHvCg==
dependencies:
just-compare "^1.3.0"

47
modules/docs/src/Volo.Docs.Web/HtmlConverting/HtmlNormalizer.cs

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Volo.Docs.Utils;
@ -43,15 +44,21 @@ namespace Volo.Docs.HtmlConverting
{
try
{
var ignoredIndicies = GetIgnoredImageIndicies(html);
return Regex.Replace(html, "<img.+?src=[\"'](.+?)[\"'].*?>", match =>
{
if (ignoredIndicies != null && ignoredIndicies.Contains(match.Index))
{
return match.Value;
}
var link = match.Groups[1].Value;
var imgTag = match.Groups[0].Value;
var title = GetTitleFromTag(imgTag);
return $"<a target = \"_blank\" rel=\"noopener noreferrer\" title=\"{title}\" href=\"{link}\">{imgTag}</a>";
});
}
catch
{
@ -60,6 +67,44 @@ namespace Volo.Docs.HtmlConverting
}
}
private static List<int> GetIgnoredImageIndicies(string html)
{
return GetIgnoredImageIndicies(FindImgTagsWithinAnchor(html));
}
private static List<int> GetIgnoredImageIndicies(MatchCollection ignoredImages)
{
if (ignoredImages == null)
{
return null;
}
var ignoredImageIndicies = new List<int>(ignoredImages.Count);
for (var i = 0; i < ignoredImages.Count; i++)
{
var ignoredImage = ignoredImages[i];
var ignoredImgIndex = ignoredImage.Index +
ignoredImage.Value.IndexOf("<img", StringComparison.InvariantCultureIgnoreCase);
ignoredImageIndicies.Add(ignoredImgIndex);
}
return ignoredImageIndicies;
}
public static MatchCollection FindImgTagsWithinAnchor(string html)
{
try
{
return Regex.Matches(html, @"<a(?: [^<>]+)?>(?:(?!<\s*/\s*a\s*>).)*<img.*?\s*<\s*/\s*a\s*>");
}
catch
{
// ignored
return null;
}
}
private static string GetTitleFromTag(string imgTag)
{
if (string.IsNullOrWhiteSpace(imgTag))

4
modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js

@ -71,9 +71,11 @@
});
};
$('#filter').keyup(function (e) {
$('#filter').on('input', (e) => {
filterDocumentItems(e.target.value);
})
$('#filter').keyup(function (e) {
if (e.key === 'Enter') {
gotoFilteredDocumentIfThereIsOnlyOne();
}

2
npm/lerna.json

@ -1,5 +1,5 @@
{
"version": "4.1.0-rc.2",
"version": "4.1.0",
"packages": [
"packs/*"
],

2
npm/ng-packs/lerna.version.json

@ -1,5 +1,5 @@
{
"version": "4.1.0-rc.2",
"version": "4.1.0",
"packages": [
"packages/*"
],

20
npm/ng-packs/package.json

@ -26,16 +26,16 @@
"postinstall": "npm run compile:ivy"
},
"devDependencies": {
"@abp/ng.core": "~4.1.0-rc.2",
"@abp/ng.feature-management": "~4.1.0-rc.2",
"@abp/ng.identity": "~4.1.0-rc.2",
"@abp/ng.permission-management": "~4.1.0-rc.2",
"@abp/ng.schematics": "~4.1.0-rc.2",
"@abp/ng.setting-management": "~4.1.0-rc.2",
"@abp/ng.tenant-management": "~4.1.0-rc.2",
"@abp/ng.theme.basic": "~4.1.0-rc.2",
"@abp/ng.theme.shared": "~4.1.0-rc.2",
"@abp/utils": "^4.1.0-rc.2",
"@abp/ng.core": "~4.1.0",
"@abp/ng.feature-management": "~4.1.0",
"@abp/ng.identity": "~4.1.0",
"@abp/ng.permission-management": "~4.1.0",
"@abp/ng.schematics": "~4.1.0",
"@abp/ng.setting-management": "~4.1.0",
"@abp/ng.tenant-management": "~4.1.0",
"@abp/ng.theme.basic": "~4.1.0",
"@abp/ng.theme.shared": "~4.1.0",
"@abp/utils": "^4.1.0",
"@angular-builders/jest": "^10.0.0",
"@angular-devkit/build-angular": "~0.1100.0",
"@angular-devkit/build-ng-packagr": "~0.1001.2",

4
npm/ng-packs/packages/components/package.json

@ -1,13 +1,13 @@
{
"name": "@abp/ng.components",
"version": "4.1.0-rc.2",
"version": "4.1.0",
"homepage": "https://abp.io",
"repository": {
"type": "git",
"url": "https://github.com/abpframework/abp.git"
},
"peerDependencies": {
"@abp/ng.core": ">=4.1.0-rc.2",
"@abp/ng.core": ">=4.1.0",
"@ng-bootstrap/ng-bootstrap": ">=6.0.0"
},
"dependencies": {

4
npm/ng-packs/packages/core/package.json

@ -1,13 +1,13 @@
{
"name": "@abp/ng.core",
"version": "4.1.0-rc.2",
"version": "4.1.0",
"homepage": "https://abp.io",
"repository": {
"type": "git",
"url": "https://github.com/abpframework/abp.git"
},
"dependencies": {
"@abp/utils": "^4.1.0-rc.2",
"@abp/utils": "^4.1.0",
"@angular/localize": "~10.0.10",
"@ngxs/store": "^3.7.0",
"angular-oauth2-oidc": "^10.0.0",

71
npm/ng-packs/packages/core/src/lib/services/http-wait.service.ts

@ -1,13 +1,14 @@
import { Injectable } from '@angular/core';
import { Injectable, Injector } from '@angular/core';
import { HttpRequest } from '@angular/common/http';
import { InternalStore } from '../utils/internal-store-utils';
import { getPathName } from '../utils/http-utils';
import { debounceTime, tap } from 'rxjs/operators';
import { map, mapTo, switchMap, takeUntil, tap } from 'rxjs/operators';
import { of, Subject, timer } from 'rxjs';
import { LOADER_DELAY } from '../tokens/lodaer-delay.token';
export interface HttpWaitState {
requests: Set<HttpRequest<any>>;
requests: HttpRequest<any>[];
filteredRequests: Array<HttpRequestInfo>;
delay: number;
}
export interface HttpRequestInfo {
method: string;
@ -18,19 +19,35 @@ export interface HttpRequestInfo {
})
export class HttpWaitService {
protected store = new InternalStore<HttpWaitState>({
requests: new Set(),
requests: [],
filteredRequests: [],
delay: 0,
});
private delay: number;
private destroy$ = new Subject();
constructor(injector: Injector) {
this.delay = injector.get(LOADER_DELAY, 500);
}
getLoading() {
return !!this.applyFilter(this.store.state.requests).length;
}
getLoading$() {
return this.store
.sliceState(({ requests }) => !!this.applyFilter(requests).length)
.pipe(this.debounceWhenLoading());
.sliceState(({ requests }) => requests)
.pipe(
map(requests => !!this.applyFilter(requests).length),
switchMap(condition =>
condition
? this.delay === 0
? of(true)
: timer(this.delay).pipe(mapTo(true), takeUntil(this.destroy$))
: of(false),
),
tap(() => this.destroy$.next()),
);
}
updateLoading$() {
@ -38,44 +55,40 @@ export class HttpWaitService {
}
clearLoading() {
this.store.patch({ requests: new Set() });
this.store.patch({ requests: [] });
}
addRequest(request: HttpRequest<any>) {
let { requests } = this.store.state;
requests = new Set(requests.values());
requests.add(request);
this.store.patch({ requests });
this.store.patch({ requests: [...this.store.state.requests, request] });
}
deleteRequest(request: HttpRequest<any>) {
const { requests } = this.store.state;
requests.delete(request);
const requests = this.store.state.requests.filter(r => r !== request);
this.store.patch({ requests });
}
addFilter(request: HttpRequestInfo) {
addFilter(request: HttpRequestInfo | HttpRequestInfo[]) {
const requests = Array.isArray(request) ? request : [request];
const filteredRequests = [
...this.store.state.filteredRequests.filter(f => !this.isSameRequest(f, request)),
request,
...this.store.state.filteredRequests.filter(
f => !requests.some(r => this.isSameRequest(f, r)),
),
...requests,
];
this.store.patch({ filteredRequests });
}
removeFilter(request: HttpRequestInfo) {
removeFilter(request: HttpRequestInfo | HttpRequestInfo[]) {
const requests = Array.isArray(request) ? request : [request];
const filteredRequests = this.store.state.filteredRequests.filter(
f => !this.isSameRequest(f, request),
f => !requests.some(r => this.isSameRequest(f, r)),
);
this.store.patch({ filteredRequests });
}
setDelay(delay: number) {
this.store.patch({ delay });
}
private applyFilter(requests: Set<HttpRequest<any>>) {
private applyFilter(requests: HttpRequest<any>[]) {
const { filteredRequests } = this.store.state;
return Array.from(requests).filter(
return requests.filter(
({ method, url }) =>
!filteredRequests.find(filteredRequest =>
this.isSameRequest(filteredRequest, { method, endpoint: getPathName(url) }),
@ -87,10 +100,4 @@ export class HttpWaitService {
const { method, endpoint } = filteredRequest;
return endpoint === request.endpoint && method === request.method;
}
private debounceWhenLoading() {
return this.store.state.delay && !!this.applyFilter(this.store.state.requests).length
? debounceTime(this.store.state.delay)
: tap();
}
}

33
npm/ng-packs/packages/core/src/lib/services/router-wait.service.ts

@ -1,13 +1,9 @@
import { Injectable } from '@angular/core';
import {
NavigationCancel,
NavigationEnd,
NavigationError,
NavigationStart,
Router,
} from '@angular/router';
import { filter } from 'rxjs/operators';
import { Injectable, Injector } from '@angular/core';
import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';
import { filter, map, mapTo, switchMap, takeUntil, tap } from 'rxjs/operators';
import { InternalStore } from '../utils/internal-store-utils';
import { of, Subject, timer } from 'rxjs';
import { LOADER_DELAY } from '../tokens/lodaer-delay.token';
export interface RouterWaitState {
loading: boolean;
@ -18,7 +14,10 @@ export interface RouterWaitState {
})
export class RouterWaitService {
private store = new InternalStore<RouterWaitState>({ loading: false });
constructor(private router: Router) {
private destroy$ = new Subject();
private delay: number;
constructor(private router: Router, injector: Injector) {
this.delay = injector.get(LOADER_DELAY, 500);
this.router.events
.pipe(
filter(
@ -28,10 +27,18 @@ export class RouterWaitService {
event instanceof NavigationError ||
event instanceof NavigationCancel,
),
map(event => event instanceof NavigationStart),
switchMap(condition =>
condition
? this.delay === 0
? of(true)
: timer(this.delay || 0).pipe(mapTo(true), takeUntil(this.destroy$))
: of(false),
),
tap(() => this.destroy$.next()),
)
.subscribe(event => {
if (event instanceof NavigationStart) this.setLoading(true);
else this.setLoading(false);
.subscribe(status => {
this.setLoading(status);
});
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save